From 5f872903a1dd25692271a154e68f277ad56451de Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sat, 15 Mar 2025 11:15:33 -0700 Subject: [PATCH 01/66] Addition on formal power series --- src/commutative-algebra.lagda.md | 1 + .../commutative-rings.lagda.md | 4 + .../formal-power-series-rings.lagda.md | 641 ++++++++++++++++++ 3 files changed, 646 insertions(+) create mode 100644 src/commutative-algebra/formal-power-series-rings.lagda.md diff --git a/src/commutative-algebra.lagda.md b/src/commutative-algebra.lagda.md index 7719d0d4d2..5c5aedc40b 100644 --- a/src/commutative-algebra.lagda.md +++ b/src/commutative-algebra.lagda.md @@ -16,6 +16,7 @@ open import commutative-algebra.dependent-products-commutative-semirings public open import commutative-algebra.discrete-fields public open import commutative-algebra.eisenstein-integers public open import commutative-algebra.euclidean-domains public +open import commutative-algebra.formal-power-series-rings public open import commutative-algebra.full-ideals-commutative-rings public open import commutative-algebra.function-commutative-rings public open import commutative-algebra.function-commutative-semirings public diff --git a/src/commutative-algebra/commutative-rings.lagda.md b/src/commutative-algebra/commutative-rings.lagda.md index 06b3e5d600..8460281728 100644 --- a/src/commutative-algebra/commutative-rings.lagda.md +++ b/src/commutative-algebra/commutative-rings.lagda.md @@ -318,6 +318,10 @@ module _ add-Commutative-Ring (neg-Commutative-Ring x) (neg-Commutative-Ring y) distributive-neg-add-Commutative-Ring = distributive-neg-add-Ab ab-Commutative-Ring + + neg-zero-Commutative-Ring : + neg-Commutative-Ring zero-Commutative-Ring = zero-Commutative-Ring + neg-zero-Commutative-Ring = neg-zero-Ring ring-Commutative-Ring ``` ### Multiplication in a commutative ring diff --git a/src/commutative-algebra/formal-power-series-rings.lagda.md b/src/commutative-algebra/formal-power-series-rings.lagda.md new file mode 100644 index 0000000000..ab8209adb6 --- /dev/null +++ b/src/commutative-algebra/formal-power-series-rings.lagda.md @@ -0,0 +1,641 @@ +# Formal power series rings + +```agda +module commutative-algebra.formal-power-series-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-functions +open import foundation.dependent-pair-types +open import foundation.function-extensionality +open import foundation.function-types +open import foundation.homotopies +open import foundation.identity-types +open import foundation.sets +open import foundation.unital-binary-operations +open import foundation.universe-levels + +open import group-theory.abelian-groups +open import group-theory.groups +open import group-theory.monoids +open import group-theory.semigroups +``` + +
+ +## Idea + +A +{{#concept "formal power series" Agda=formal-power-series-Commutative-Ring WDID=Q1003025 WD="formal power series"}} +in a [commutative ring](commutative-algebra.commutative-rings.md) `R` is a +symbolic infinite sum over all `n : ℕ` of `cₙ xⁿ`, where `cₙ : R`. Convergence +of this sum is not relevant, but with the standard definitions of addition and +multiplication for power series, this forms a new commutative ring. + +## Definition + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + opaque + formal-power-series-Commutative-Ring : UU l + formal-power-series-Commutative-Ring = ℕ → type-Commutative-Ring R + + formal-power-series-coefficients-Commutative-Ring : + (ℕ → type-Commutative-Ring R) → formal-power-series-Commutative-Ring + formal-power-series-coefficients-Commutative-Ring = id + + coefficient-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring → ℕ → type-Commutative-Ring R + coefficient-formal-power-series-Commutative-Ring = id + + coefficient-formal-power-series-coefficients-Commutative-Ring : + (c : ℕ → type-Commutative-Ring R) → + coefficient-formal-power-series-Commutative-Ring + (formal-power-series-coefficients-Commutative-Ring c) ~ c + coefficient-formal-power-series-coefficients-Commutative-Ring _ _ = refl + + eq-htpy-coefficients-formal-power-series-Commutative-Ring : + ( p q : formal-power-series-Commutative-Ring) → + ( coefficient-formal-power-series-Commutative-Ring p ~ + coefficient-formal-power-series-Commutative-Ring q) → + p = q + eq-htpy-coefficients-formal-power-series-Commutative-Ring _ _ = eq-htpy + + is-set-formal-power-series-Commutative-Ring : + is-set formal-power-series-Commutative-Ring + is-set-formal-power-series-Commutative-Ring = + is-set-function-type (is-set-type-Set (set-Commutative-Ring R)) + + set-formal-power-series-Commutative-Ring : Set l + set-formal-power-series-Commutative-Ring = + formal-power-series-Commutative-Ring , + is-set-formal-power-series-Commutative-Ring +``` + +## Operations + +### Zero formal power series + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + abstract + zero-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R + zero-formal-power-series-Commutative-Ring = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( λ _ → zero-Commutative-Ring R) + + is-zero-coefficient-zero-formal-power-series-Commutative-Ring : + (n : ℕ) → + is-zero-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( zero-formal-power-series-Commutative-Ring) + ( n)) + is-zero-coefficient-zero-formal-power-series-Commutative-Ring = + coefficient-formal-power-series-coefficients-Commutative-Ring + ( R) + ( λ _ → zero-Commutative-Ring R) +``` + +### Constant formal power series + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + coefficient-constant-formal-power-series-Commutative-Ring : + type-Commutative-Ring R → ℕ → type-Commutative-Ring R + coefficient-constant-formal-power-series-Commutative-Ring c zero-ℕ = c + coefficient-constant-formal-power-series-Commutative-Ring c (succ-ℕ _) = + zero-Commutative-Ring R + + abstract + constant-formal-power-series-Commutative-Ring : + type-Commutative-Ring R → formal-power-series-Commutative-Ring R + constant-formal-power-series-Commutative-Ring c = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( coefficient-constant-formal-power-series-Commutative-Ring c) + + eq-coefficient-constant-formal-power-series-Commutative-Ring : + (c : type-Commutative-Ring R) → + coefficient-formal-power-series-Commutative-Ring + ( R) + ( constant-formal-power-series-Commutative-Ring c) ~ + coefficient-constant-formal-power-series-Commutative-Ring c + eq-coefficient-constant-formal-power-series-Commutative-Ring c = + coefficient-formal-power-series-coefficients-Commutative-Ring R _ +``` + +#### The zero formal power series is the constant formal power series for zero + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + eq-zero-coefficient-constant-formal-power-series-Commutative-Ring : + (n : ℕ) → + is-zero-Commutative-Ring + ( R) + ( coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( zero-Commutative-Ring R) + ( n)) + eq-zero-coefficient-constant-formal-power-series-Commutative-Ring zero-ℕ = + refl + eq-zero-coefficient-constant-formal-power-series-Commutative-Ring (succ-ℕ _) = + refl + + eq-zero-constant-formal-power-series-Commutative-Ring : + constant-formal-power-series-Commutative-Ring R (zero-Commutative-Ring R) = + zero-formal-power-series-Commutative-Ring R + eq-zero-constant-formal-power-series-Commutative-Ring = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( eq-coefficient-constant-formal-power-series-Commutative-Ring R _ ∙h + eq-zero-coefficient-constant-formal-power-series-Commutative-Ring ∙h + inv-htpy + ( is-zero-coefficient-zero-formal-power-series-Commutative-Ring R)) +``` + +### Negation + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + coefficient-neg-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R → ℕ → type-Commutative-Ring R + coefficient-neg-formal-power-series-Commutative-Ring p n = + neg-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p n) + + abstract + neg-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R → + formal-power-series-Commutative-Ring R + neg-formal-power-series-Commutative-Ring p = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( coefficient-neg-formal-power-series-Commutative-Ring p) + + eq-coefficient-neg-formal-power-series-Commutative-Ring : + (p : formal-power-series-Commutative-Ring R) → + coefficient-formal-power-series-Commutative-Ring + ( R) + ( neg-formal-power-series-Commutative-Ring p) ~ + coefficient-neg-formal-power-series-Commutative-Ring p + eq-coefficient-neg-formal-power-series-Commutative-Ring p = + coefficient-formal-power-series-coefficients-Commutative-Ring R _ +``` + +#### The negation of a constant formal power series is the constant formal power series of the negation + +```agda +module _ + {l : Level} (R : Commutative-Ring l) (c : type-Commutative-Ring R) + where + + abstract + htpy-coefficients-neg-constant-formal-power-series-Commutative-Ring : + (n : ℕ) → + coefficient-neg-formal-power-series-Commutative-Ring + ( R) + ( constant-formal-power-series-Commutative-Ring R c) + ( n) = + coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( neg-Commutative-Ring R c) + ( n) + htpy-coefficients-neg-constant-formal-power-series-Commutative-Ring zero-ℕ = + equational-reasoning + neg-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( constant-formal-power-series-Commutative-Ring R c) + ( zero-ℕ)) + = neg-Commutative-Ring R c + by + ap + ( neg-Commutative-Ring R) + ( eq-coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( c) + ( zero-ℕ)) + htpy-coefficients-neg-constant-formal-power-series-Commutative-Ring + (succ-ℕ n) = + equational-reasoning + neg-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( constant-formal-power-series-Commutative-Ring R c) + ( succ-ℕ n)) + = + neg-Commutative-Ring R (zero-Commutative-Ring R) + by + ap + ( neg-Commutative-Ring R) + ( eq-coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( c) + ( succ-ℕ n)) + = zero-Commutative-Ring R by neg-zero-Commutative-Ring R + + neg-constant-formal-power-series-Commutative-Ring : + neg-formal-power-series-Commutative-Ring + ( R) + ( constant-formal-power-series-Commutative-Ring R c) = + constant-formal-power-series-Commutative-Ring R (neg-Commutative-Ring R c) + neg-constant-formal-power-series-Commutative-Ring = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( coefficient-formal-power-series-coefficients-Commutative-Ring R _ ∙h + htpy-coefficients-neg-constant-formal-power-series-Commutative-Ring ∙h + inv-htpy + ( coefficient-formal-power-series-coefficients-Commutative-Ring + ( R) + ( _))) +``` + +### Addition + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + coefficient-add-formal-power-series-Commutative-Ring : + (p q : formal-power-series-Commutative-Ring R) (n : ℕ) → + type-Commutative-Ring R + coefficient-add-formal-power-series-Commutative-Ring p q n = + add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p n) + ( coefficient-formal-power-series-Commutative-Ring R q n) + + abstract + add-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R → + formal-power-series-Commutative-Ring R → + formal-power-series-Commutative-Ring R + add-formal-power-series-Commutative-Ring p q = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( coefficient-add-formal-power-series-Commutative-Ring p q) + + eq-coefficient-add-formal-power-series-Commutative-Ring : + (p q : formal-power-series-Commutative-Ring R) → + coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring p q) ~ + coefficient-add-formal-power-series-Commutative-Ring p q + eq-coefficient-add-formal-power-series-Commutative-Ring p q = + coefficient-formal-power-series-coefficients-Commutative-Ring R _ +``` + +#### Commutativity + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + abstract + commutative-add-formal-power-series-Commutative-Ring : + (p q : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring R p q = + add-formal-power-series-Commutative-Ring R q p + commutative-add-formal-power-series-Commutative-Ring p q = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( λ n → equational-reasoning + coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring R p q) + ( n) + = + add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p n) + ( coefficient-formal-power-series-Commutative-Ring R q n) + by eq-coefficient-add-formal-power-series-Commutative-Ring R p q n + = + add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R q n) + ( coefficient-formal-power-series-Commutative-Ring R p n) + by commutative-add-Commutative-Ring R _ _ + = + coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring R q p) + ( n) + by + inv + ( eq-coefficient-add-formal-power-series-Commutative-Ring + ( R) + ( q) + ( p) + ( n))) +``` + +#### Unit laws + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + abstract + left-unit-law-add-formal-power-series-Commutative-Ring : + (p : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring + ( R) + ( zero-formal-power-series-Commutative-Ring R) + ( p) = p + left-unit-law-add-formal-power-series-Commutative-Ring p = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( λ n → equational-reasoning + coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring + ( R) + ( zero-formal-power-series-Commutative-Ring R) + ( p)) + ( n) + = + add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( zero-formal-power-series-Commutative-Ring R) + ( n)) + ( coefficient-formal-power-series-Commutative-Ring R p n) + by eq-coefficient-add-formal-power-series-Commutative-Ring R _ _ n + = + add-Commutative-Ring + ( R) + ( zero-Commutative-Ring R) + ( coefficient-formal-power-series-Commutative-Ring R p n) + by + ap + ( λ c → + add-Commutative-Ring + ( R) + ( c) + ( coefficient-formal-power-series-Commutative-Ring R p n)) + ( is-zero-coefficient-zero-formal-power-series-Commutative-Ring + ( R) + ( n)) + = coefficient-formal-power-series-Commutative-Ring R p n + by left-unit-law-add-Commutative-Ring R _) + + right-unit-law-add-formal-power-series-Commutative-Ring : + (p : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring + ( R) + ( p) + ( zero-formal-power-series-Commutative-Ring R) = p + right-unit-law-add-formal-power-series-Commutative-Ring p = + commutative-add-formal-power-series-Commutative-Ring R p _ ∙ + left-unit-law-add-formal-power-series-Commutative-Ring p +``` + +#### Associativity + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + abstract + associative-add-formal-power-series-Commutative-Ring : + (p q r : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring R p q) + ( r) = + add-formal-power-series-Commutative-Ring + ( R) + ( p) + ( add-formal-power-series-Commutative-Ring R q r) + associative-add-formal-power-series-Commutative-Ring p q r = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( λ n → equational-reasoning + coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring R p q) + ( r)) + ( n) + = + add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring R p q) + ( n)) + ( coefficient-formal-power-series-Commutative-Ring R r n) + by eq-coefficient-add-formal-power-series-Commutative-Ring R _ _ n + = + add-Commutative-Ring + ( R) + ( add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p n) + ( coefficient-formal-power-series-Commutative-Ring R q n)) + ( coefficient-formal-power-series-Commutative-Ring R r n) + by + ap + ( add-Commutative-Ring' R _) + ( eq-coefficient-add-formal-power-series-Commutative-Ring + ( R) + ( p) + ( q) + ( n)) + = + add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p n) + ( add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R q n) + ( coefficient-formal-power-series-Commutative-Ring R r n)) + by associative-add-Commutative-Ring R _ _ _ + = + add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p n) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring R q r) + ( n)) + by + ap + ( add-Commutative-Ring R _) + ( inv + ( eq-coefficient-add-formal-power-series-Commutative-Ring + ( R) + ( q) + ( r) + ( n))) + = + coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring + ( R) + ( p) + ( add-formal-power-series-Commutative-Ring R q r)) + ( n) + by + inv + ( eq-coefficient-add-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( n))) +``` + +#### Inverse laws + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + abstract + left-inverse-law-add-formal-power-series-Commutative-Ring : + (p : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring + ( R) + ( neg-formal-power-series-Commutative-Ring R p) + ( p) = zero-formal-power-series-Commutative-Ring R + left-inverse-law-add-formal-power-series-Commutative-Ring p = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( λ n → equational-reasoning + coefficient-formal-power-series-Commutative-Ring R + (add-formal-power-series-Commutative-Ring + ( R) + ( neg-formal-power-series-Commutative-Ring R p) + ( p)) + ( n) + = + add-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( neg-formal-power-series-Commutative-Ring R p) + ( n)) + ( coefficient-formal-power-series-Commutative-Ring R p n) + by eq-coefficient-add-formal-power-series-Commutative-Ring R _ _ n + = + add-Commutative-Ring + ( R) + ( neg-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p n)) + ( coefficient-formal-power-series-Commutative-Ring R p n) + by + ap + ( add-Commutative-Ring' R _) + ( eq-coefficient-neg-formal-power-series-Commutative-Ring R p n) + = zero-Commutative-Ring R + by left-inverse-law-add-Commutative-Ring R _ + = + coefficient-formal-power-series-Commutative-Ring + ( R) + ( zero-formal-power-series-Commutative-Ring R) + ( n) + by + inv + ( is-zero-coefficient-zero-formal-power-series-Commutative-Ring + ( R) + ( n))) + + right-inverse-law-add-formal-power-series-Commutative-Ring : + (p : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring + ( R) + ( p) + ( neg-formal-power-series-Commutative-Ring R p) = + zero-formal-power-series-Commutative-Ring R + right-inverse-law-add-formal-power-series-Commutative-Ring p = + commutative-add-formal-power-series-Commutative-Ring R _ _ ∙ + left-inverse-law-add-formal-power-series-Commutative-Ring p +``` + +#### The additive group of formal power series + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + semigroup-add-formal-power-series-Commutative-Ring : Semigroup l + semigroup-add-formal-power-series-Commutative-Ring = + set-formal-power-series-Commutative-Ring R , + add-formal-power-series-Commutative-Ring R , + associative-add-formal-power-series-Commutative-Ring R + + is-unital-add-formal-power-series-Commutative-Ring : + is-unital (add-formal-power-series-Commutative-Ring R) + is-unital-add-formal-power-series-Commutative-Ring = + zero-formal-power-series-Commutative-Ring R , + left-unit-law-add-formal-power-series-Commutative-Ring R , + right-unit-law-add-formal-power-series-Commutative-Ring R + + monoid-add-formal-power-series-Commutative-Ring : Monoid l + monoid-add-formal-power-series-Commutative-Ring = + semigroup-add-formal-power-series-Commutative-Ring , + is-unital-add-formal-power-series-Commutative-Ring + + group-add-formal-power-series-Commutative-Ring : Group l + group-add-formal-power-series-Commutative-Ring = + semigroup-add-formal-power-series-Commutative-Ring , + is-unital-add-formal-power-series-Commutative-Ring , + neg-formal-power-series-Commutative-Ring R , + left-inverse-law-add-formal-power-series-Commutative-Ring R , + right-inverse-law-add-formal-power-series-Commutative-Ring R + + abelian-group-add-formal-power-series-Commutative-Ring : Ab l + abelian-group-add-formal-power-series-Commutative-Ring = + group-add-formal-power-series-Commutative-Ring , + commutative-add-formal-power-series-Commutative-Ring R +``` From 75337f9ef3c909d34aba4b65cd2420e7985e6389 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sat, 15 Mar 2025 18:41:28 -0700 Subject: [PATCH 02/66] Permutations preserve sums --- .../sums-commutative-rings.lagda.md | 20 ++++ .../sums-commutative-semirings.lagda.md | 107 ++++++++++++++++++ ...ermutations-standard-finite-types.lagda.md | 9 ++ ...nspositions-standard-finite-types.lagda.md | 14 ++- 4 files changed, 148 insertions(+), 2 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index f26a86e6db..0e959ede99 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -8,11 +8,13 @@ module commutative-algebra.sums-commutative-rings where ```agda open import commutative-algebra.commutative-rings +open import commutative-algebra.sums-commutative-semirings open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers open import foundation.action-on-identifications-functions +open import foundation.equivalences open import foundation.coproduct-types open import foundation.function-types open import foundation.homotopies @@ -27,6 +29,8 @@ open import ring-theory.sums-rings open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.standard-finite-types + +open import finite-group-theory.permutations-standard-finite-types ``` @@ -214,3 +218,19 @@ module _ zero-Commutative-Ring A sum-zero-Commutative-Ring = sum-zero-Ring (ring-Commutative-Ring A) ``` + +### Permutations preserve sums + +```agda +module _ + {l : Level} (A : Commutative-Ring l) + where + + preserves-sum-permutation-Commutative-Ring : + (n : ℕ) → (σ : Permutation n) → + (f : functional-vec-Commutative-Ring A n) → + sum-Commutative-Ring A n f = sum-Commutative-Ring A n (f ∘ map-equiv σ) + preserves-sum-permutation-Commutative-Ring = + preserves-sum-permutation-Commutative-Semiring + ( commutative-semiring-Commutative-Ring A) +``` diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 16eaf02de8..9972a759e7 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -12,10 +12,19 @@ open import commutative-algebra.commutative-semirings open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers +open import foundation.cartesian-product-types +open import foundation.action-on-identifications-functions +open import foundation.coproduct-types +open import foundation.equivalences +open import foundation.dependent-pair-types open import foundation.function-types +open import foundation.negated-equality open import foundation.homotopies open import foundation.identity-types open import foundation.universe-levels +open import foundation.unit-type + +open import lists.lists open import linear-algebra.vectors open import linear-algebra.vectors-on-commutative-semirings @@ -24,6 +33,10 @@ open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.standard-finite-types +open import finite-group-theory.permutations-standard-finite-types +open import finite-group-theory.permutations +open import finite-group-theory.transpositions +open import finite-group-theory.transpositions-standard-finite-types ``` @@ -213,3 +226,97 @@ split-sum-Commutative-Semiring : split-sum-Commutative-Semiring A = split-sum-Semiring (semiring-Commutative-Semiring A) ``` + +### Permutations preserve sums + +```agda +module _ + {l : Level} (A : Commutative-Semiring l) + where + + abstract + preserves-sum-adjacent-transposition-sum-Commutative-Semiring : + (n : ℕ) → (k : Fin n) → + (f : functional-vec-Commutative-Semiring A (succ-ℕ n)) → + sum-Commutative-Semiring A (succ-ℕ n) f = + sum-Commutative-Semiring + A (succ-ℕ n) (f ∘ map-adjacent-transposition-Fin n k) + preserves-sum-adjacent-transposition-sum-Commutative-Semiring + (succ-ℕ n) (inl x) f = + ap-add-Commutative-Semiring + ( A) + ( preserves-sum-adjacent-transposition-sum-Commutative-Semiring + ( n) + ( x) + ( f ∘ inl-Fin (succ-ℕ n))) + ( refl) + preserves-sum-adjacent-transposition-sum-Commutative-Semiring + (succ-ℕ n) (inr star) f = right-swap-add-Commutative-Semiring A _ _ _ + + preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring : + (n : ℕ) → (L : list (Fin n)) → + (f : functional-vec-Commutative-Semiring A (succ-ℕ n)) → + sum-Commutative-Semiring A (succ-ℕ n) f = + sum-Commutative-Semiring + A (succ-ℕ n) (f ∘ map-permutation-list-adjacent-transpositions n L) + preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring + n nil f = refl + preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring + n (cons x L) f = + preserves-sum-adjacent-transposition-sum-Commutative-Semiring n x f ∙ + preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring + ( n) + ( L) + ( f ∘ map-adjacent-transposition-Fin n x) + + preserves-sum-transposition-Commutative-Semiring : + (n : ℕ) (i j : Fin (succ-ℕ n)) (neq : i ≠ j) → + (f : functional-vec-Commutative-Semiring A (succ-ℕ n)) → + sum-Commutative-Semiring A (succ-ℕ n) f = + sum-Commutative-Semiring + A (succ-ℕ n) (f ∘ map-transposition-Fin (succ-ℕ n) i j neq) + preserves-sum-transposition-Commutative-Semiring n i j i≠j f = + preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring + ( n) + ( list-adjacent-transpositions-transposition-Fin n i j) + ( f) ∙ + ap + ( λ g → sum-Commutative-Semiring A (succ-ℕ n) (f ∘ map-equiv g)) + ( eq-permutation-list-adjacent-transpositions-transposition-Fin + ( n) + ( i) + ( j) + ( i≠j)) + + preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring : + (n : ℕ) → (L : list (Σ (Fin n × Fin n) ( λ (i , j) → i ≠ j))) → + (f : functional-vec-Commutative-Semiring A n) → + sum-Commutative-Semiring A n f = + sum-Commutative-Semiring + A n (f ∘ map-equiv (permutation-list-standard-transpositions-Fin n L)) + preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring + zero-ℕ _ _ = refl + preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring + (succ-ℕ n) nil f = refl + preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring + (succ-ℕ n) (cons ((i , j) , i≠j) L) f = + preserves-sum-transposition-Commutative-Semiring n i j i≠j f ∙ + preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring + ( succ-ℕ n) + ( L) + ( f ∘ map-transposition-Fin (succ-ℕ n) i j i≠j) + + preserves-sum-permutation-Commutative-Semiring : + (n : ℕ) → (σ : Permutation n) → + (f : functional-vec-Commutative-Semiring A n) → + sum-Commutative-Semiring A n f = + sum-Commutative-Semiring A n (f ∘ map-equiv σ) + preserves-sum-permutation-Commutative-Semiring n σ f = + preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring + ( n) + ( list-standard-transpositions-permutation-Fin n σ) + ( f) ∙ + ap + ( λ τ → sum-Commutative-Semiring A n (f ∘ map-equiv τ)) + ( eq-permutation-list-standard-transpositions-Fin n σ) +``` diff --git a/src/finite-group-theory/permutations-standard-finite-types.lagda.md b/src/finite-group-theory/permutations-standard-finite-types.lagda.md index 0be0d3314d..d411bd518e 100644 --- a/src/finite-group-theory/permutations-standard-finite-types.lagda.md +++ b/src/finite-group-theory/permutations-standard-finite-types.lagda.md @@ -506,4 +506,13 @@ retraction-permutation-list-standard-transpositions-Fin 0 f () retraction-permutation-list-standard-transpositions-Fin (succ-ℕ n) f = htpy-permutation-list n (list-transpositions-permutation-Fin (succ-ℕ n) f) ∙h retraction-permutation-list-transpositions-Fin (succ-ℕ n) f + +eq-permutation-list-standard-transpositions-Fin : + (n : ℕ) (f : Permutation n) → + permutation-list-standard-transpositions-Fin + ( n) + ( list-standard-transpositions-permutation-Fin n f) = + f +eq-permutation-list-standard-transpositions-Fin n f = + eq-htpy-equiv (retraction-permutation-list-standard-transpositions-Fin n f) ``` diff --git a/src/finite-group-theory/transpositions-standard-finite-types.lagda.md b/src/finite-group-theory/transpositions-standard-finite-types.lagda.md index bd345f2692..7e32c2c689 100644 --- a/src/finite-group-theory/transpositions-standard-finite-types.lagda.md +++ b/src/finite-group-theory/transpositions-standard-finite-types.lagda.md @@ -119,7 +119,7 @@ module _ is-involution-map-swap-two-last-elements-transposition-Fin ``` -We show that this definiton is an instance of the previous one. +We show that this definition is an instance of the previous one. ```agda cases-htpy-swap-two-last-elements-transposition-Fin : @@ -209,7 +209,7 @@ map-adjacent-transposition-Fin : map-adjacent-transposition-Fin n k = map-equiv (adjacent-transposition-Fin n k) ``` -#### `adjacent-transposition-Fin` is an instance of the definiton `transposition-Fin` +#### `adjacent-transposition-Fin` is an instance of the definition `transposition-Fin` ```agda cases-htpy-map-coproduct-map-transposition-id-Fin : @@ -750,4 +750,14 @@ htpy-permutation-list-adjacent-transpositions-transposition-Fin ( inr star) ( inr star) ( neq) = ex-falso (neq refl) + +eq-permutation-list-adjacent-transpositions-transposition-Fin : + (n : ℕ) (i j : Fin (succ-ℕ n)) (neq : i ≠ j) → + permutation-list-adjacent-transpositions + ( n) + ( list-adjacent-transpositions-transposition-Fin n i j) = + transposition-Fin (succ-ℕ n) i j neq +eq-permutation-list-adjacent-transpositions-transposition-Fin n i j i≠j = + eq-htpy-equiv + ( htpy-permutation-list-adjacent-transpositions-transposition-Fin n i j i≠j) ``` From c2f66a59f67e556be9fa0e0b496fdb8063ab54f6 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sat, 15 Mar 2025 18:42:34 -0700 Subject: [PATCH 03/66] make pre-commit --- .../sums-commutative-rings.lagda.md | 6 +++--- .../sums-commutative-semirings.lagda.md | 21 ++++++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 0e959ede99..aeeb6b5432 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -13,9 +13,11 @@ open import commutative-algebra.sums-commutative-semirings open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers +open import finite-group-theory.permutations-standard-finite-types + open import foundation.action-on-identifications-functions -open import foundation.equivalences open import foundation.coproduct-types +open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types @@ -29,8 +31,6 @@ open import ring-theory.sums-rings open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.standard-finite-types - -open import finite-group-theory.permutations-standard-finite-types ``` diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 9972a759e7..78e267ee02 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -12,31 +12,32 @@ open import commutative-algebra.commutative-semirings open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers -open import foundation.cartesian-product-types +open import finite-group-theory.permutations +open import finite-group-theory.permutations-standard-finite-types +open import finite-group-theory.transpositions +open import finite-group-theory.transpositions-standard-finite-types + open import foundation.action-on-identifications-functions +open import foundation.cartesian-product-types open import foundation.coproduct-types -open import foundation.equivalences open import foundation.dependent-pair-types +open import foundation.equivalences open import foundation.function-types -open import foundation.negated-equality open import foundation.homotopies open import foundation.identity-types -open import foundation.universe-levels +open import foundation.negated-equality open import foundation.unit-type - -open import lists.lists +open import foundation.universe-levels open import linear-algebra.vectors open import linear-algebra.vectors-on-commutative-semirings +open import lists.lists + open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.standard-finite-types -open import finite-group-theory.permutations-standard-finite-types -open import finite-group-theory.permutations -open import finite-group-theory.transpositions -open import finite-group-theory.transpositions-standard-finite-types ``` From 98e6f119ce167a9d741d92962a4fd6d44cb1b1bf Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sat, 15 Mar 2025 20:00:03 -0700 Subject: [PATCH 04/66] Further progress on multiplication --- .../formal-power-series-rings.lagda.md | 226 ++++++++++++++++++ .../involution-standard-finite-types.lagda.md | 44 ++++ .../standard-finite-types.lagda.md | 2 +- 3 files changed, 271 insertions(+), 1 deletion(-) diff --git a/src/commutative-algebra/formal-power-series-rings.lagda.md b/src/commutative-algebra/formal-power-series-rings.lagda.md index ab8209adb6..1e9b66e427 100644 --- a/src/commutative-algebra/formal-power-series-rings.lagda.md +++ b/src/commutative-algebra/formal-power-series-rings.lagda.md @@ -8,15 +8,19 @@ module commutative-algebra.formal-power-series-rings where ```agda open import commutative-algebra.commutative-rings +open import commutative-algebra.sums-commutative-rings open import elementary-number-theory.natural-numbers open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.function-extensionality +open import foundation.coproduct-types open import foundation.function-types open import foundation.homotopies +open import foundation.unit-type open import foundation.identity-types +open import foundation.involutions open import foundation.sets open import foundation.unital-binary-operations open import foundation.universe-levels @@ -25,6 +29,9 @@ open import group-theory.abelian-groups open import group-theory.groups open import group-theory.monoids open import group-theory.semigroups + +open import univalent-combinatorics.standard-finite-types +open import univalent-combinatorics.involution-standard-finite-types ``` @@ -141,6 +148,11 @@ module _ coefficient-constant-formal-power-series-Commutative-Ring c eq-coefficient-constant-formal-power-series-Commutative-Ring c = coefficient-formal-power-series-coefficients-Commutative-Ring R _ + + one-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R + one-formal-power-series-Commutative-Ring = + constant-formal-power-series-Commutative-Ring (one-Commutative-Ring R) ``` #### The zero formal power series is the constant formal power series for zero @@ -639,3 +651,217 @@ module _ group-add-formal-power-series-Commutative-Ring , commutative-add-formal-power-series-Commutative-Ring R ``` + +### Multiplication + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p q : formal-power-series-Commutative-Ring R) + where + + coefficient-mul-formal-power-series-Commutative-Ring : + ℕ → type-Commutative-Ring R + coefficient-mul-formal-power-series-Commutative-Ring n = + sum-Commutative-Ring + ( R) + ( succ-ℕ n) + ( λ k → + mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( p) + ( nat-Fin (succ-ℕ n) k)) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( q) + ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + + abstract + mul-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R + mul-formal-power-series-Commutative-Ring = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( coefficient-mul-formal-power-series-Commutative-Ring) + + eq-coefficient-mul-formal-power-series-Commutative-Ring : + coefficient-formal-power-series-Commutative-Ring + ( R) + ( mul-formal-power-series-Commutative-Ring) ~ + coefficient-mul-formal-power-series-Commutative-Ring + eq-coefficient-mul-formal-power-series-Commutative-Ring = + coefficient-formal-power-series-coefficients-Commutative-Ring R _ +``` + +#### Commutativity + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p q : formal-power-series-Commutative-Ring R) + where + + abstract + htpy-coefficients-commutative-mul-formal-power-series-Commutative-Ring : + coefficient-mul-formal-power-series-Commutative-Ring R p q ~ + coefficient-mul-formal-power-series-Commutative-Ring R q p + htpy-coefficients-commutative-mul-formal-power-series-Commutative-Ring n = + preserves-sum-permutation-Commutative-Ring + ( R) + ( succ-ℕ n) + ( equiv-involution (involution-opposite-Fin (succ-ℕ n))) + ( λ k → + mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( p) + ( nat-Fin (succ-ℕ n) k)) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( q) + ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) ∙ + htpy-sum-Commutative-Ring + ( R) + ( succ-ℕ n) + ( λ k → + ap + ( λ m → + mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( p) + ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k))) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( q) + ( nat-Fin (succ-ℕ n) m))) + (is-involution-opposite-Fin (succ-ℕ n) k) ∙ + commutative-mul-Commutative-Ring R _ _) + + commutative-mul-formal-power-series-Commutative-Ring : + mul-formal-power-series-Commutative-Ring R p q = + mul-formal-power-series-Commutative-Ring R q p + commutative-mul-formal-power-series-Commutative-Ring = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( eq-coefficient-mul-formal-power-series-Commutative-Ring R p q ∙h + htpy-coefficients-commutative-mul-formal-power-series-Commutative-Ring ∙h + inv-htpy + ( eq-coefficient-mul-formal-power-series-Commutative-Ring R q p)) +``` + +#### Unit laws + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p : formal-power-series-Commutative-Ring R) + where + + abstract + htpy-coefficients-right-unit-law-mul-formal-power-series-Commutative-Ring : + coefficient-mul-formal-power-series-Commutative-Ring + ( R) + ( p) + ( one-formal-power-series-Commutative-Ring R) ~ + coefficient-formal-power-series-Commutative-Ring R p + htpy-coefficients-right-unit-law-mul-formal-power-series-Commutative-Ring n = + equational-reasoning + sum-Commutative-Ring + ( R) + ( succ-ℕ n) + ( λ k → + mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( p) + ( nat-Fin (succ-ℕ n) k)) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( one-formal-power-series-Commutative-Ring R) + ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + = + sum-Commutative-Ring + ( R) + ( succ-ℕ n) + ( λ k → + mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( p) + ( nat-Fin (succ-ℕ n) k)) + ( coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( one-Commutative-Ring R) + ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + by + htpy-sum-Commutative-Ring + ( R) + ( succ-ℕ n) + ( λ k → + ap + ( mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( p) + ( nat-Fin (succ-ℕ n) k))) + ( eq-coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( one-Commutative-Ring R) + ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + = + add-Commutative-Ring + ( R) + ( sum-Commutative-Ring + ( R) + ( n) + ( λ k → + mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( p) + ( nat-Fin (succ-ℕ n) (inl-Fin n k))) + ( coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( one-Commutative-Ring R) + ( nat-Fin + ( succ-ℕ n) + ( opposite-Fin (succ-ℕ n) (inl-Fin n k)))))) + ( mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p n) + ( coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( one-Commutative-Ring R) + ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) (inr star))))) + by + cons-sum-Commutative-Ring + ( R) + ( n) + ( λ k → + mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring + ( R) + ( p) + ( nat-Fin (succ-ℕ n) k)) + ( coefficient-constant-formal-power-series-Commutative-Ring + ( R) + ( one-Commutative-Ring R) + ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + ( refl) + = {! !} by {! !} + + -- left-unit-law-mul-formal-power-series-Commutative-Ring : + +``` diff --git a/src/univalent-combinatorics/involution-standard-finite-types.lagda.md b/src/univalent-combinatorics/involution-standard-finite-types.lagda.md index 72c2a01a68..c8ab4d0808 100644 --- a/src/univalent-combinatorics/involution-standard-finite-types.lagda.md +++ b/src/univalent-combinatorics/involution-standard-finite-types.lagda.md @@ -11,8 +11,12 @@ open import elementary-number-theory.modular-arithmetic-standard-finite-types open import elementary-number-theory.natural-numbers open import foundation.action-on-identifications-functions +open import foundation.coproduct-types +open import foundation.dependent-pair-types +open import foundation.function-types open import foundation.identity-types open import foundation.involutions +open import foundation.unit-type open import univalent-combinatorics.standard-finite-types ``` @@ -41,4 +45,44 @@ is-involution-opposite-Fin k x = ( ap (pred-Fin k) (neg-pred-Fin k (neg-Fin k x))) ∙ ( ( is-retraction-pred-Fin k (neg-Fin k (neg-Fin k x))) ∙ ( neg-neg-Fin k x)) + +involution-opposite-Fin : (k : ℕ) → involution (Fin k) +involution-opposite-Fin k = + opposite-Fin k , + is-involution-opposite-Fin k +``` + +### The opposite of `neg-one-Fin` is `zero-Fin` + +```agda +abstract + is-zero-opposite-neg-one-Fin : + (n : ℕ) → + is-zero-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) (neg-one-Fin n)) + is-zero-opposite-neg-one-Fin n = equational-reasoning + pred-Fin (succ-ℕ n) (neg-Fin (succ-ℕ n) (neg-one-Fin n)) + = + add-Fin + ( succ-ℕ n) + ( neg-one-Fin n) + ( neg-Fin (succ-ℕ n) (neg-one-Fin n)) + by is-add-neg-one-pred-Fin n (neg-Fin (succ-ℕ n) (neg-one-Fin n)) + = zero-Fin n by right-inverse-law-add-Fin n (neg-one-Fin n) +``` + +### `nat-Fin-reverse` is the composition of `nat-Fin` with the involution operation + +```agda +abstract + opposite-nat-Fin-reverse : + (n : ℕ) → (k : Fin n) → nat-Fin-reverse n k = nat-Fin n (opposite-Fin n k) + opposite-nat-Fin-reverse (succ-ℕ n) (inr star) = + inv + ( ap (nat-Fin (succ-ℕ n)) (is-zero-opposite-neg-one-Fin n) ∙ + is-zero-nat-zero-Fin {n}) + opposite-nat-Fin-reverse (succ-ℕ n) (inl k) = equational-reasoning + succ-ℕ (nat-Fin-reverse n k) + = succ-ℕ (nat-Fin n (opposite-Fin n k)) + by ap succ-ℕ (opposite-nat-Fin-reverse n k) + = nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) (inl k)) by {! !} ``` diff --git a/src/univalent-combinatorics/standard-finite-types.lagda.md b/src/univalent-combinatorics/standard-finite-types.lagda.md index 31d90d106c..ef87bc52b9 100644 --- a/src/univalent-combinatorics/standard-finite-types.lagda.md +++ b/src/univalent-combinatorics/standard-finite-types.lagda.md @@ -228,7 +228,7 @@ nat-Fin (succ-ℕ k) (inl x) = nat-Fin k x nat-Fin (succ-ℕ k) (inr x) = k nat-Fin-reverse : (k : ℕ) → Fin k → ℕ -nat-Fin-reverse (succ-ℕ k) (inl x) = succ-ℕ (nat-Fin k x) +nat-Fin-reverse (succ-ℕ k) (inl x) = succ-ℕ (nat-Fin-reverse k x) nat-Fin-reverse (succ-ℕ k) (inr x) = 0 strict-upper-bound-nat-Fin : (k : ℕ) (x : Fin k) → le-ℕ (nat-Fin k x) k From 014c63562309209aa9017f921ed0a6cf22982f43 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 11:39:42 -0700 Subject: [PATCH 05/66] Progress --- .../formal-power-series-rings.lagda.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-rings.lagda.md b/src/commutative-algebra/formal-power-series-rings.lagda.md index 1e9b66e427..92f54c8df0 100644 --- a/src/commutative-algebra/formal-power-series-rings.lagda.md +++ b/src/commutative-algebra/formal-power-series-rings.lagda.md @@ -13,15 +13,15 @@ open import commutative-algebra.sums-commutative-rings open import elementary-number-theory.natural-numbers open import foundation.action-on-identifications-functions +open import foundation.coproduct-types open import foundation.dependent-pair-types open import foundation.function-extensionality -open import foundation.coproduct-types open import foundation.function-types open import foundation.homotopies -open import foundation.unit-type open import foundation.identity-types open import foundation.involutions open import foundation.sets +open import foundation.unit-type open import foundation.unital-binary-operations open import foundation.universe-levels @@ -30,8 +30,8 @@ open import group-theory.groups open import group-theory.monoids open import group-theory.semigroups -open import univalent-combinatorics.standard-finite-types open import univalent-combinatorics.involution-standard-finite-types +open import univalent-combinatorics.standard-finite-types ``` @@ -771,7 +771,8 @@ module _ ( p) ( one-formal-power-series-Commutative-Ring R) ~ coefficient-formal-power-series-Commutative-Ring R p - htpy-coefficients-right-unit-law-mul-formal-power-series-Commutative-Ring n = + htpy-coefficients-right-unit-law-mul-formal-power-series-Commutative-Ring + n = equational-reasoning sum-Commutative-Ring ( R) @@ -863,5 +864,4 @@ module _ = {! !} by {! !} -- left-unit-law-mul-formal-power-series-Commutative-Ring : - ``` From 4680488768bf53a9b304fcaffb44f3cd26db5166 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 11:45:02 -0700 Subject: [PATCH 06/66] Progress --- .../sums-commutative-rings.lagda.md | 7 ++ .../sums-commutative-semirings.lagda.md | 93 +++++++++++++++++++ src/univalent-combinatorics/counting.lagda.md | 14 +++ 3 files changed, 114 insertions(+) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index aeeb6b5432..ff4a0e22f3 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -30,6 +30,7 @@ open import linear-algebra.vectors-on-commutative-rings open import ring-theory.sums-rings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -47,6 +48,12 @@ sum-Commutative-Ring : {l : Level} (A : Commutative-Ring l) (n : ℕ) → (functional-vec-Commutative-Ring A n) → type-Commutative-Ring A sum-Commutative-Ring A = sum-Ring (ring-Commutative-Ring A) + +sum-finite-Commutative-Ring : + {l1 l2 : Level} (R : Commutative-Ring l1) (A : Finite-Type l2) → + (type-Finite-Type A → type-Commutative-Ring R) → type-Commutative-Ring R +sum-finite-Commutative-Ring R = + sum-finite-Commutative-Semiring (commutative-semiring-Commutative-Ring R) ``` ## Properties diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 78e267ee02..39f4f811c5 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -22,11 +22,13 @@ open import foundation.cartesian-product-types open import foundation.coproduct-types open import foundation.dependent-pair-types open import foundation.equivalences +open import foundation.function-extensionality open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.negated-equality open import foundation.unit-type +open import foundation.universal-property-propositional-truncation-into-sets open import foundation.universe-levels open import linear-algebra.vectors @@ -37,6 +39,8 @@ open import lists.lists open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.counting +open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -321,3 +325,92 @@ module _ ( λ τ → sum-Commutative-Semiring A n (f ∘ map-equiv τ)) ( eq-permutation-list-standard-transpositions-Fin n σ) ``` + +### Sums for a count for a type + +```agda +sum-count-Commutative-Semiring : + {l1 l2 : Level} (R : Commutative-Semiring l1) (A : UU l2) → + count A → (A → type-Commutative-Semiring R) → type-Commutative-Semiring R +sum-count-Commutative-Semiring R A (n , Fin-n≃A) f = + sum-Commutative-Semiring R n (f ∘ map-equiv Fin-n≃A) +``` + +### Two counts for the same set produce equivalent sums + +```agda +module _ + {l1 l2 : Level} (R : Commutative-Semiring l1) (A : UU l2) + where + + abstract + eq-sum-count-equiv-Commutative-Semiring : + (n : ℕ) → (equiv1 equiv2 : Fin n ≃ A) → + (f : A → type-Commutative-Semiring R) → + sum-count-Commutative-Semiring R A (n , equiv1) f = + sum-count-Commutative-Semiring R A (n , equiv2) f + eq-sum-count-equiv-Commutative-Semiring n equiv1 equiv2 f = + equational-reasoning + sum-Commutative-Semiring R n (f ∘ map-equiv equiv1) + = + sum-Commutative-Semiring + ( R) + ( n) + ( (f ∘ map-equiv equiv1) ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2)) + by + preserves-sum-permutation-Commutative-Semiring + ( R) + ( n) + ( inv-equiv equiv1 ∘e equiv2) + ( f ∘ map-equiv equiv1) + = + sum-Commutative-Semiring + ( R) + ( n) + ( f ∘ (map-equiv equiv1 ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2))) + by + ap + ( sum-Commutative-Semiring R n) + ( associative-comp f (map-equiv equiv1) _) + = + sum-Commutative-Semiring + ( R) + ( n) + ( f ∘ ((map-equiv equiv1 ∘ map-inv-equiv equiv1) ∘ map-equiv equiv2)) + by + ap + ( λ g → sum-Commutative-Semiring R n (f ∘ g)) + ( inv + ( associative-comp (map-equiv equiv1) (map-inv-equiv equiv1) _)) + = sum-Commutative-Semiring R n (f ∘ map-equiv equiv2) + by + ap + ( λ g → sum-Commutative-Semiring R n (f ∘ (g ∘ map-equiv equiv2))) + ( eq-htpy (is-section-map-inv-equiv equiv1)) + + eq-sum-count-Commutative-Semiring : + (f : A → type-Commutative-Semiring R) (c1 c2 : count A) → + sum-count-Commutative-Semiring R A c1 f = + sum-count-Commutative-Semiring R A c2 f + eq-sum-count-Commutative-Semiring f c1@(n , e1) c2@(_ , e2) + with eq-number-of-elements-count A c1 c2 + ... | refl = eq-sum-count-equiv-Commutative-Semiring n e1 e2 f +``` + +### Sums over finite types + +```agda +module _ + {l1 l2 : Level} (R : Commutative-Semiring l1) (A : Finite-Type l2) + where + + sum-finite-Commutative-Semiring : + (f : type-Finite-Type A → type-Commutative-Semiring R) → + type-Commutative-Semiring R + sum-finite-Commutative-Semiring f = + map-universal-property-set-quotient-trunc-Prop + ( set-Commutative-Semiring R) + ( λ c → sum-count-Commutative-Semiring R (type-Finite-Type A) c f) + ( eq-sum-count-Commutative-Semiring R (type-Finite-Type A) f) + ( is-finite-type-Finite-Type A) +``` diff --git a/src/univalent-combinatorics/counting.lagda.md b/src/univalent-combinatorics/counting.lagda.md index b9c4fa6d19..e18f5b8b39 100644 --- a/src/univalent-combinatorics/counting.lagda.md +++ b/src/univalent-combinatorics/counting.lagda.md @@ -87,6 +87,20 @@ pr1 (count-Fin k) = k pr2 (count-Fin k) = id-equiv ``` +### Any two counts for the same type have the same number of elements + +```agda +module _ + {l : Level} (X : UU l) + where + + eq-number-of-elements-count : + (c1 c2 : count X) → + number-of-elements-count c1 = number-of-elements-count c2 + eq-number-of-elements-count (n1 , e1) (n2 , e2) = + is-equivalence-injective-Fin (inv-equiv e2 ∘e e1) +``` + ### Types equipped with countings are closed under equivalences ```agda From f5d8d9b74be06262d8bebafff3d801dce5453f12 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 15:32:06 -0700 Subject: [PATCH 07/66] Progress --- .../sums-commutative-rings.lagda.md | 27 +- .../sums-commutative-semirings.lagda.md | 209 +----- src/group-theory.lagda.md | 2 + .../products-commutative-monoids.lagda.md | 614 ++++++++++++++++++ src/group-theory/products-monoids.lagda.md | 199 ++++++ src/linear-algebra.lagda.md | 2 + .../vectors-on-commutative-monoids.lagda.md | 236 +++++++ .../vectors-on-monoids.lagda.md | 209 ++++++ .../vectors-on-semirings.lagda.md | 112 ++-- src/ring-theory/sums-rings.lagda.md | 45 +- src/ring-theory/sums-semirings.lagda.md | 123 ++-- src/univalent-combinatorics/counting.lagda.md | 14 + 12 files changed, 1497 insertions(+), 295 deletions(-) create mode 100644 src/group-theory/products-commutative-monoids.lagda.md create mode 100644 src/group-theory/products-monoids.lagda.md create mode 100644 src/linear-algebra/vectors-on-commutative-monoids.lagda.md create mode 100644 src/linear-algebra/vectors-on-monoids.lagda.md diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index ff4a0e22f3..2619f7f0e1 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -38,8 +38,11 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The **sum operation** extends the binary addition operation on a commutative -ring `A` to any family of elements of `A` indexed by a standard finite type. +The **sum operation** extends the binary addition operation on a +[commutative ring](commutative-algebra.commutative-rings.md) `A` to any family +of elements of `A` indexed by a +[standard finite type](univalent-combinatorics.standard-finite-types.md), +or by a [finite type](univalent-combinatorics.finite-types.md). ## Definition @@ -241,3 +244,23 @@ module _ preserves-sum-permutation-Commutative-Semiring ( commutative-semiring-Commutative-Ring A) ``` + +### Sums over finite types are preserved by equivalences + +```agda +module _ + {l1 l2 l3 : Level} (R : Commutative-Ring l1) + (A : Finite-Type l2) (B : Finite-Type l3) (H : equiv-Finite-Type A B) + where + + sum-equiv-finite-Commutative-Ring : + (f : type-Finite-Type B → type-Commutative-Ring R) → + sum-finite-Commutative-Ring R B f = + sum-finite-Commutative-Ring R A (f ∘ map-equiv H) + sum-equiv-finite-Commutative-Ring = + sum-equiv-finite-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( A) + ( B) + ( H) +``` diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 39f4f811c5..b76443c079 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -12,23 +12,14 @@ open import commutative-algebra.commutative-semirings open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers -open import finite-group-theory.permutations open import finite-group-theory.permutations-standard-finite-types -open import finite-group-theory.transpositions -open import finite-group-theory.transpositions-standard-finite-types -open import foundation.action-on-identifications-functions -open import foundation.cartesian-product-types -open import foundation.coproduct-types -open import foundation.dependent-pair-types open import foundation.equivalences -open import foundation.function-extensionality open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.negated-equality open import foundation.unit-type -open import foundation.universal-property-propositional-truncation-into-sets open import foundation.universe-levels open import linear-algebra.vectors @@ -39,7 +30,6 @@ open import lists.lists open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types -open import univalent-combinatorics.counting open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -48,8 +38,11 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The **sum operation** extends the binary addition operation on a commutative -semiring `R` to any family of elements of `R` indexed by a standard finite type. +The **sum operation** extends the binary addition operation on a +[commutative semiring](commutative-algebra.commutative-semirings.md) +`R` to any family of elements of `R` indexed by a +[standard finite type](univalent-combinatorics.standard-finite-types.md), or +by a [finite type](univalent-combinatorics.finite-types.md). ## Definition @@ -58,6 +51,13 @@ sum-Commutative-Semiring : {l : Level} (A : Commutative-Semiring l) (n : ℕ) → (functional-vec-Commutative-Semiring A n) → type-Commutative-Semiring A sum-Commutative-Semiring A = sum-Semiring (semiring-Commutative-Semiring A) + +sum-finite-Commutative-Semiring : + {l1 l2 : Level} (R : Commutative-Semiring l1) (A : Finite-Type l2) → + (type-Finite-Type A → type-Commutative-Semiring R) → + type-Commutative-Semiring R +sum-finite-Commutative-Semiring R = + sum-finite-Semiring (semiring-Commutative-Semiring R) ``` ## Properties @@ -236,181 +236,30 @@ split-sum-Commutative-Semiring A = ```agda module _ - {l : Level} (A : Commutative-Semiring l) - where - - abstract - preserves-sum-adjacent-transposition-sum-Commutative-Semiring : - (n : ℕ) → (k : Fin n) → - (f : functional-vec-Commutative-Semiring A (succ-ℕ n)) → - sum-Commutative-Semiring A (succ-ℕ n) f = - sum-Commutative-Semiring - A (succ-ℕ n) (f ∘ map-adjacent-transposition-Fin n k) - preserves-sum-adjacent-transposition-sum-Commutative-Semiring - (succ-ℕ n) (inl x) f = - ap-add-Commutative-Semiring - ( A) - ( preserves-sum-adjacent-transposition-sum-Commutative-Semiring - ( n) - ( x) - ( f ∘ inl-Fin (succ-ℕ n))) - ( refl) - preserves-sum-adjacent-transposition-sum-Commutative-Semiring - (succ-ℕ n) (inr star) f = right-swap-add-Commutative-Semiring A _ _ _ - - preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring : - (n : ℕ) → (L : list (Fin n)) → - (f : functional-vec-Commutative-Semiring A (succ-ℕ n)) → - sum-Commutative-Semiring A (succ-ℕ n) f = - sum-Commutative-Semiring - A (succ-ℕ n) (f ∘ map-permutation-list-adjacent-transpositions n L) - preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring - n nil f = refl - preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring - n (cons x L) f = - preserves-sum-adjacent-transposition-sum-Commutative-Semiring n x f ∙ - preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring - ( n) - ( L) - ( f ∘ map-adjacent-transposition-Fin n x) - - preserves-sum-transposition-Commutative-Semiring : - (n : ℕ) (i j : Fin (succ-ℕ n)) (neq : i ≠ j) → - (f : functional-vec-Commutative-Semiring A (succ-ℕ n)) → - sum-Commutative-Semiring A (succ-ℕ n) f = - sum-Commutative-Semiring - A (succ-ℕ n) (f ∘ map-transposition-Fin (succ-ℕ n) i j neq) - preserves-sum-transposition-Commutative-Semiring n i j i≠j f = - preserves-sum-permutation-list-adjacent-transpositions-Commutative-Semiring - ( n) - ( list-adjacent-transpositions-transposition-Fin n i j) - ( f) ∙ - ap - ( λ g → sum-Commutative-Semiring A (succ-ℕ n) (f ∘ map-equiv g)) - ( eq-permutation-list-adjacent-transpositions-transposition-Fin - ( n) - ( i) - ( j) - ( i≠j)) - - preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring : - (n : ℕ) → (L : list (Σ (Fin n × Fin n) ( λ (i , j) → i ≠ j))) → - (f : functional-vec-Commutative-Semiring A n) → - sum-Commutative-Semiring A n f = - sum-Commutative-Semiring - A n (f ∘ map-equiv (permutation-list-standard-transpositions-Fin n L)) - preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring - zero-ℕ _ _ = refl - preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring - (succ-ℕ n) nil f = refl - preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring - (succ-ℕ n) (cons ((i , j) , i≠j) L) f = - preserves-sum-transposition-Commutative-Semiring n i j i≠j f ∙ - preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring - ( succ-ℕ n) - ( L) - ( f ∘ map-transposition-Fin (succ-ℕ n) i j i≠j) - - preserves-sum-permutation-Commutative-Semiring : - (n : ℕ) → (σ : Permutation n) → - (f : functional-vec-Commutative-Semiring A n) → - sum-Commutative-Semiring A n f = - sum-Commutative-Semiring A n (f ∘ map-equiv σ) - preserves-sum-permutation-Commutative-Semiring n σ f = - preserves-sum-permutation-list-standard-transpositions-Commutative-Semiring - ( n) - ( list-standard-transpositions-permutation-Fin n σ) - ( f) ∙ - ap - ( λ τ → sum-Commutative-Semiring A n (f ∘ map-equiv τ)) - ( eq-permutation-list-standard-transpositions-Fin n σ) -``` - -### Sums for a count for a type - -```agda -sum-count-Commutative-Semiring : - {l1 l2 : Level} (R : Commutative-Semiring l1) (A : UU l2) → - count A → (A → type-Commutative-Semiring R) → type-Commutative-Semiring R -sum-count-Commutative-Semiring R A (n , Fin-n≃A) f = - sum-Commutative-Semiring R n (f ∘ map-equiv Fin-n≃A) -``` - -### Two counts for the same set produce equivalent sums - -```agda -module _ - {l1 l2 : Level} (R : Commutative-Semiring l1) (A : UU l2) + {l : Level} (R : Commutative-Semiring l) where - abstract - eq-sum-count-equiv-Commutative-Semiring : - (n : ℕ) → (equiv1 equiv2 : Fin n ≃ A) → - (f : A → type-Commutative-Semiring R) → - sum-count-Commutative-Semiring R A (n , equiv1) f = - sum-count-Commutative-Semiring R A (n , equiv2) f - eq-sum-count-equiv-Commutative-Semiring n equiv1 equiv2 f = - equational-reasoning - sum-Commutative-Semiring R n (f ∘ map-equiv equiv1) - = - sum-Commutative-Semiring - ( R) - ( n) - ( (f ∘ map-equiv equiv1) ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2)) - by - preserves-sum-permutation-Commutative-Semiring - ( R) - ( n) - ( inv-equiv equiv1 ∘e equiv2) - ( f ∘ map-equiv equiv1) - = - sum-Commutative-Semiring - ( R) - ( n) - ( f ∘ (map-equiv equiv1 ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2))) - by - ap - ( sum-Commutative-Semiring R n) - ( associative-comp f (map-equiv equiv1) _) - = - sum-Commutative-Semiring - ( R) - ( n) - ( f ∘ ((map-equiv equiv1 ∘ map-inv-equiv equiv1) ∘ map-equiv equiv2)) - by - ap - ( λ g → sum-Commutative-Semiring R n (f ∘ g)) - ( inv - ( associative-comp (map-equiv equiv1) (map-inv-equiv equiv1) _)) - = sum-Commutative-Semiring R n (f ∘ map-equiv equiv2) - by - ap - ( λ g → sum-Commutative-Semiring R n (f ∘ (g ∘ map-equiv equiv2))) - ( eq-htpy (is-section-map-inv-equiv equiv1)) - - eq-sum-count-Commutative-Semiring : - (f : A → type-Commutative-Semiring R) (c1 c2 : count A) → - sum-count-Commutative-Semiring R A c1 f = - sum-count-Commutative-Semiring R A c2 f - eq-sum-count-Commutative-Semiring f c1@(n , e1) c2@(_ , e2) - with eq-number-of-elements-count A c1 c2 - ... | refl = eq-sum-count-equiv-Commutative-Semiring n e1 e2 f + preserves-sum-permutation-Commutative-Semiring : + (n : ℕ) → (σ : Permutation n) → + (f : functional-vec-Commutative-Semiring R n) → + sum-Commutative-Semiring R n f = + sum-Commutative-Semiring R n (f ∘ map-equiv σ) + preserves-sum-permutation-Commutative-Semiring = + preserves-sum-permutation-Semiring (semiring-Commutative-Semiring R) ``` -### Sums over finite types +### Sums over finite types are preserved by equivalences ```agda module _ - {l1 l2 : Level} (R : Commutative-Semiring l1) (A : Finite-Type l2) + {l1 l2 l3 : Level} (R : Commutative-Semiring l1) + (A : Finite-Type l2) (B : Finite-Type l3) (H : equiv-Finite-Type A B) where - sum-finite-Commutative-Semiring : - (f : type-Finite-Type A → type-Commutative-Semiring R) → - type-Commutative-Semiring R - sum-finite-Commutative-Semiring f = - map-universal-property-set-quotient-trunc-Prop - ( set-Commutative-Semiring R) - ( λ c → sum-count-Commutative-Semiring R (type-Finite-Type A) c f) - ( eq-sum-count-Commutative-Semiring R (type-Finite-Type A) f) - ( is-finite-type-Finite-Type A) + sum-equiv-finite-Commutative-Semiring : + (f : type-Finite-Type B → type-Commutative-Semiring R) → + sum-finite-Commutative-Semiring R B f = + sum-finite-Commutative-Semiring R A (f ∘ map-equiv H) + sum-equiv-finite-Commutative-Semiring = + sum-equiv-finite-Semiring (semiring-Commutative-Semiring R) A B H ``` diff --git a/src/group-theory.lagda.md b/src/group-theory.lagda.md index 6d7a7e8e31..bc1aaff2fa 100644 --- a/src/group-theory.lagda.md +++ b/src/group-theory.lagda.md @@ -155,6 +155,8 @@ open import group-theory.precategory-of-orbits-monoid-actions public open import group-theory.precategory-of-semigroups public open import group-theory.principal-group-actions public open import group-theory.principal-torsors-concrete-groups public +open import group-theory.products-commutative-monoids public +open import group-theory.products-monoids public open import group-theory.products-of-elements-monoids public open import group-theory.products-of-tuples-of-elements-commutative-monoids public open import group-theory.pullbacks-subgroups public diff --git a/src/group-theory/products-commutative-monoids.lagda.md b/src/group-theory/products-commutative-monoids.lagda.md new file mode 100644 index 0000000000..6313c0e97a --- /dev/null +++ b/src/group-theory/products-commutative-monoids.lagda.md @@ -0,0 +1,614 @@ +# Products of elements in commutative monoids + +```agda +{-# OPTIONS --lossy-unification #-} + +module group-theory.products-commutative-monoids where +``` + +
Imports + +```agda +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.natural-numbers + +open import finite-group-theory.permutations-standard-finite-types +open import finite-group-theory.transpositions-standard-finite-types + +open import foundation.action-on-identifications-functions +open import foundation.cartesian-product-types +open import foundation.coproduct-types +open import foundation.dependent-pair-types +open import foundation.equivalences +open import foundation.function-extensionality +open import foundation.function-types +open import foundation.homotopies +open import foundation.identity-types +open import foundation.negated-equality +open import foundation.propositional-truncations +open import foundation.sets +open import foundation.unit-type +open import foundation.universal-property-propositional-truncation-into-sets +open import foundation.universe-levels +open import foundation.whiskering-homotopies-composition + +open import group-theory.commutative-monoids +open import group-theory.monoids +open import group-theory.products-monoids + +open import linear-algebra.vectors-on-commutative-monoids + +open import lists.lists + +open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.counting +open import univalent-combinatorics.finite-types +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +The product operation extends the binary multiplication operation on a +[commutative monoid](group-theory.commutative-monoids.md) `M` to any family of +elements of `M` indexed by a +[standard finite type](univalent-combinatorics.standard-finite-types.md), or to +any [finite type](univalent-combinatorics.finite-types.md). + +## Definition + +```agda +product-Commutative-Monoid : + {l : Level} (M : Commutative-Monoid l) (n : ℕ) → + (functional-vec-Commutative-Monoid M n) → type-Commutative-Monoid M +product-Commutative-Monoid M = + product-Monoid (monoid-Commutative-Monoid M) +``` + +## Properties + +### Products of one and two elements + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + product-one-element-Commutative-Monoid : + (f : functional-vec-Commutative-Monoid M 1) → + product-Commutative-Monoid M 1 f = + head-functional-vec-Commutative-Monoid M 0 f + product-one-element-Commutative-Monoid = + product-one-element-Monoid (monoid-Commutative-Monoid M) + + product-two-elements-Commutative-Monoid : + (f : functional-vec-Commutative-Monoid M 2) → + product-Commutative-Monoid M 2 f = + mul-Commutative-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)) + product-two-elements-Commutative-Monoid = + product-two-elements-Monoid (monoid-Commutative-Monoid M) +``` + +### Products are homotopy invariant + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + htpy-product-Commutative-Monoid : + (n : ℕ) {f g : functional-vec-Commutative-Monoid M n} → + (f ~ g) → + product-Commutative-Monoid M n f = product-Commutative-Monoid M n g + htpy-product-Commutative-Monoid = + htpy-product-Monoid (monoid-Commutative-Monoid M) +``` + +### Products are equal to the zero-th term plus the rest + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + cons-product-Commutative-Monoid : + (n : ℕ) (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + {x : type-Commutative-Monoid M} → + head-functional-vec-Commutative-Monoid M n f = x → + product-Commutative-Monoid M (succ-ℕ n) f = + mul-Commutative-Monoid M (product-Commutative-Monoid M n (f ∘ inl-Fin n)) x + cons-product-Commutative-Monoid = + cons-product-Monoid (monoid-Commutative-Monoid M) + + snoc-product-Commutative-Monoid : + (n : ℕ) (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + {x : type-Commutative-Monoid M} → f (zero-Fin n) = x → + product-Commutative-Monoid M (succ-ℕ n) f = + mul-Commutative-Monoid M + ( x) + ( product-Commutative-Monoid M n (f ∘ inr-Fin n)) + snoc-product-Commutative-Monoid = + snoc-product-Monoid (monoid-Commutative-Monoid M) +``` + +### Extending a product of elements in a monoid + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + extend-product-Commutative-Monoid : + (n : ℕ) (f : functional-vec-Commutative-Monoid M n) → + product-Commutative-Monoid M + ( succ-ℕ n) + ( cons-functional-vec-Commutative-Monoid + ( M) + ( n) + ( unit-Commutative-Monoid M) f) = + product-Commutative-Monoid M n f + extend-product-Commutative-Monoid = + extend-product-Monoid (monoid-Commutative-Monoid M) +``` + +### Shifting a product of elements in a monoid + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + shift-product-Commutative-Monoid : + (n : ℕ) (f : functional-vec-Commutative-Monoid M n) → + product-Commutative-Monoid M + ( succ-ℕ n) + ( snoc-functional-vec-Commutative-Monoid M n f + ( unit-Commutative-Monoid M)) = + product-Commutative-Monoid M n f + shift-product-Commutative-Monoid = + shift-product-Monoid (monoid-Commutative-Monoid M) +``` + +### A product of units is the unit + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + product-unit-Commutative-Monoid : + (n : ℕ) → + product-Commutative-Monoid + ( M) + ( n) + ( unit-functional-vec-Commutative-Monoid M n) = + unit-Commutative-Monoid M + product-unit-Commutative-Monoid = + product-unit-Monoid (monoid-Commutative-Monoid M) +``` + +### Splitting products + +```agda +split-product-Commutative-Monoid : + {l : Level} (M : Commutative-Monoid l) + (n m : ℕ) (f : functional-vec-Commutative-Monoid M (n +ℕ m)) → + product-Commutative-Monoid M (n +ℕ m) f = + mul-Commutative-Monoid M + ( product-Commutative-Monoid M n (f ∘ inl-coproduct-Fin n m)) + ( product-Commutative-Monoid M m (f ∘ inr-coproduct-Fin n m)) +split-product-Commutative-Monoid M = + split-product-Monoid (monoid-Commutative-Monoid M) +``` + +### Permutations preserve products + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + abstract + preserves-product-adjacent-transposition-product-Commutative-Monoid : + (n : ℕ) → (k : Fin n) → + (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + product-Commutative-Monoid M (succ-ℕ n) f = + product-Commutative-Monoid + M (succ-ℕ n) (f ∘ map-adjacent-transposition-Fin n k) + preserves-product-adjacent-transposition-product-Commutative-Monoid + (succ-ℕ n) (inl x) f = + ap-mul-Commutative-Monoid + ( M) + ( preserves-product-adjacent-transposition-product-Commutative-Monoid + ( n) + ( x) + ( f ∘ inl-Fin (succ-ℕ n))) + ( refl) + preserves-product-adjacent-transposition-product-Commutative-Monoid + (succ-ℕ n) (inr star) f = right-swap-mul-Commutative-Monoid M _ _ _ + + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid : + (n : ℕ) → (L : list (Fin n)) → + (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + product-Commutative-Monoid M (succ-ℕ n) f = + product-Commutative-Monoid + M (succ-ℕ n) (f ∘ map-permutation-list-adjacent-transpositions n L) + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid + n nil f = refl + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid + n (cons x L) f = + preserves-product-adjacent-transposition-product-Commutative-Monoid + ( n) + ( x) + ( f) ∙ + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid + ( n) + ( L) + ( f ∘ map-adjacent-transposition-Fin n x) + + preserves-product-transposition-Commutative-Monoid : + (n : ℕ) (i j : Fin (succ-ℕ n)) (neq : i ≠ j) → + (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + product-Commutative-Monoid M (succ-ℕ n) f = + product-Commutative-Monoid + M (succ-ℕ n) (f ∘ map-transposition-Fin (succ-ℕ n) i j neq) + preserves-product-transposition-Commutative-Monoid n i j i≠j f = + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid + ( n) + ( list-adjacent-transpositions-transposition-Fin n i j) + ( f) ∙ + ap + ( λ g → product-Commutative-Monoid M (succ-ℕ n) (f ∘ map-equiv g)) + ( eq-permutation-list-adjacent-transpositions-transposition-Fin + ( n) + ( i) + ( j) + ( i≠j)) + + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid : + (n : ℕ) → (L : list (Σ (Fin n × Fin n) ( λ (i , j) → i ≠ j))) → + (f : functional-vec-Commutative-Monoid M n) → + product-Commutative-Monoid M n f = + product-Commutative-Monoid + M n (f ∘ map-equiv (permutation-list-standard-transpositions-Fin n L)) + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + zero-ℕ _ _ = refl + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + (succ-ℕ n) nil f = refl + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + (succ-ℕ n) (cons ((i , j) , i≠j) L) f = + preserves-product-transposition-Commutative-Monoid n i j i≠j f ∙ + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + ( succ-ℕ n) + ( L) + ( f ∘ map-transposition-Fin (succ-ℕ n) i j i≠j) + + preserves-product-permutation-Commutative-Monoid : + (n : ℕ) → (σ : Permutation n) → + (f : functional-vec-Commutative-Monoid M n) → + product-Commutative-Monoid M n f = + product-Commutative-Monoid M n (f ∘ map-equiv σ) + preserves-product-permutation-Commutative-Monoid n σ f = + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + ( n) + ( list-standard-transpositions-permutation-Fin n σ) + ( f) ∙ + ap + ( λ τ → product-Commutative-Monoid M n (f ∘ map-equiv τ)) + ( eq-permutation-list-standard-transpositions-Fin n σ) +``` + +### Products for a count for a type + +```agda +product-count-Commutative-Monoid : + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : UU l2) → + count A → (A → type-Commutative-Monoid M) → type-Commutative-Monoid M +product-count-Commutative-Monoid M A (n , Fin-n≃A) f = + product-Commutative-Monoid M n (f ∘ map-equiv Fin-n≃A) +``` + +### Two counts for the same set produce equal products + +```agda +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : UU l2) + where + + abstract + eq-product-count-equiv-Commutative-Monoid : + (n : ℕ) → (equiv1 equiv2 : Fin n ≃ A) → + (f : A → type-Commutative-Monoid M) → + product-count-Commutative-Monoid M A (n , equiv1) f = + product-count-Commutative-Monoid M A (n , equiv2) f + eq-product-count-equiv-Commutative-Monoid n equiv1 equiv2 f = + equational-reasoning + product-Commutative-Monoid M n (f ∘ map-equiv equiv1) + = + product-Commutative-Monoid + ( M) + ( n) + ( (f ∘ map-equiv equiv1) ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2)) + by + preserves-product-permutation-Commutative-Monoid + ( M) + ( n) + ( inv-equiv equiv1 ∘e equiv2) + ( f ∘ map-equiv equiv1) + = + product-Commutative-Monoid + ( M) + ( n) + ( f ∘ (map-equiv equiv1 ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2))) + by + ap + ( product-Commutative-Monoid M n) + ( associative-comp f (map-equiv equiv1) _) + = + product-Commutative-Monoid + ( M) + ( n) + ( f ∘ ((map-equiv equiv1 ∘ map-inv-equiv equiv1) ∘ map-equiv equiv2)) + by + ap + ( λ g → product-Commutative-Monoid M n (f ∘ g)) + ( inv + ( associative-comp (map-equiv equiv1) (map-inv-equiv equiv1) _)) + = product-Commutative-Monoid M n (f ∘ map-equiv equiv2) + by + ap + ( λ g → product-Commutative-Monoid M n (f ∘ (g ∘ map-equiv equiv2))) + ( eq-htpy (is-section-map-inv-equiv equiv1)) + + eq-product-count-Commutative-Monoid : + (f : A → type-Commutative-Monoid M) (c1 c2 : count A) → + product-count-Commutative-Monoid M A c1 f = + product-count-Commutative-Monoid M A c2 f + eq-product-count-Commutative-Monoid f c1@(n , e1) c2@(_ , e2) + with eq-number-of-elements-count A c1 c2 + ... | refl = eq-product-count-equiv-Commutative-Monoid n e1 e2 f +``` + +### Products over finite types + +```agda +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) + where + + product-finite-Commutative-Monoid : + (f : type-Finite-Type A → type-Commutative-Monoid M) → + type-Commutative-Monoid M + product-finite-Commutative-Monoid f = + map-universal-property-set-quotient-trunc-Prop + ( set-Commutative-Monoid M) + ( λ c → product-count-Commutative-Monoid M (type-Finite-Type A) c f) + ( eq-product-count-Commutative-Monoid M (type-Finite-Type A) f) + ( is-finite-type-Finite-Type A) +``` + +### Products over finite types are preserved by equivalences + +```agda +module _ + {l1 l2 l3 : Level} (M : Commutative-Monoid l1) + (A : UU l2) (B : UU l3) (H : A ≃ B) + where + + abstract + product-equiv-count-Commutative-Monoid : + (cA : count A) (cB : count B) (f : B → type-Commutative-Monoid M) → + product-count-Commutative-Monoid M B cB f = + product-count-Commutative-Monoid M A cA (f ∘ map-equiv H) + product-equiv-count-Commutative-Monoid + cA@(_ , Fin-nA≃A) cB@(nB , Fin-nB≃B) f + with eq-number-of-elements-count-equiv A B H cA cB + ... | refl = + preserves-product-permutation-Commutative-Monoid + ( M) + ( nB) + ( inv-equiv Fin-nB≃B ∘e H ∘e Fin-nA≃A) + ( f ∘ map-equiv Fin-nB≃B) ∙ + ap + ( λ g → + product-Commutative-Monoid + ( M) + ( nB) + ((f ∘ g) ∘ (map-equiv (H ∘e Fin-nA≃A)))) + ( eq-htpy (is-section-map-inv-equiv Fin-nB≃B)) + +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) + (A : Finite-Type l2) (cA : count (type-Finite-Type A)) + where + + abstract + eq-product-finite-count-Commutative-Monoid : + (f : type-Finite-Type A → type-Commutative-Monoid M) → + product-finite-Commutative-Monoid M A f = + product-count-Commutative-Monoid M (type-Finite-Type A) cA f + eq-product-finite-count-Commutative-Monoid f = + equational-reasoning + product-finite-Commutative-Monoid M A f + = + product-finite-Commutative-Monoid + ( M) + ( type-Finite-Type A , unit-trunc-Prop cA) + ( f) + by + ap + ( λ c → + product-finite-Commutative-Monoid + ( M) + ( type-Finite-Type A , c) + ( f)) + ( all-elements-equal-type-trunc-Prop + ( is-finite-type-Finite-Type A) + ( unit-trunc-Prop cA)) + = product-count-Commutative-Monoid M (type-Finite-Type A) cA f + by + htpy-universal-property-set-quotient-trunc-Prop + ( set-Commutative-Monoid M) + ( λ c → + product-count-Commutative-Monoid M (type-Finite-Type A) c f) + ( eq-product-count-Commutative-Monoid M (type-Finite-Type A) f) + ( cA) + +module _ + {l1 l2 l3 : Level} (M : Commutative-Monoid l1) + (A : Finite-Type l2) (B : Finite-Type l3) + (H : equiv-Finite-Type A B) + where + + abstract + product-equiv-finite-Commutative-Monoid : + (f : type-Finite-Type B → type-Commutative-Monoid M) → + product-finite-Commutative-Monoid M B f = + product-finite-Commutative-Monoid M A (f ∘ map-equiv H) + product-equiv-finite-Commutative-Monoid f = + do + cA ← is-finite-type-Finite-Type A + cB ← is-finite-type-Finite-Type B + equational-reasoning + product-finite-Commutative-Monoid M B f + = product-count-Commutative-Monoid M (type-Finite-Type B) cB f + by eq-product-finite-count-Commutative-Monoid M B cB f + = + product-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( cA) + ( f ∘ map-equiv H) + by + product-equiv-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( type-Finite-Type B) + ( H) + ( cA) + ( cB) + ( f) + = product-finite-Commutative-Monoid M A (f ∘ map-equiv H) + by + inv + ( eq-product-finite-count-Commutative-Monoid + ( M) + ( A) + ( cA) + ( f ∘ map-equiv H)) + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( product-finite-Commutative-Monoid M B f) + ( product-finite-Commutative-Monoid M A (f ∘ map-equiv H))) +``` + +### Products over finite types distribute over coproducts + +```agda +{- module _ + {l1 l2 l3 : Level} (M : Commutative-Monoid l1) + (A : Finite-Type l2) (B : Finite-Type l3) + where + + product-coproduct-finite-Commutative-Monoid : + (f : + type-Finite-Type A + type-Finite-Type B → type-Commutative-Monoid M) → + product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f = + mul-Commutative-Monoid + ( M) + ( product-finite-Commutative-Monoid M A (f ∘ inl)) + ( product-finite-Commutative-Monoid M B (f ∘ inr)) + product-coproduct-finite-Commutative-Monoid f = + do + cA@(nA , Fin-nA≃A) ← is-finite-type-Finite-Type A + cB@(nB , Fin-nB≃B) ← is-finite-type-Finite-Type B + equational-reasoning + product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f + = + product-Commutative-Monoid + ( M) + ( nA +ℕ nB) + ( f ∘ map-equiv-count (count-coproduct cA cB)) + by + eq-product-finite-count-Commutative-Monoid + ( M) + ( coproduct-Finite-Type A B) + ( count-coproduct cA cB) + ( f) + = + mul-Commutative-Monoid M + ( product-Commutative-Monoid + ( M) + ( nA) + ( f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inl-coproduct-Fin nA nB)) + ( product-Commutative-Monoid + ( M) + ( nB) + ( f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inr-coproduct-Fin nA nB)) + by + split-product-Commutative-Monoid + ( M) + ( nA) + ( nB) + ( f ∘ map-equiv-count (count-coproduct cA cB)) + = + mul-Commutative-Monoid + ( M) + ( product-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( cA) + ( f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inl-coproduct-Fin nA nB ∘ + map-inv-equiv Fin-nA≃A)) + ( product-count-Commutative-Monoid + ( M) + ( type-Finite-Type B) + ( cB) + ( f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inr-coproduct-Fin nA nB ∘ + map-inv-equiv Fin-nB≃B)) + by + ap-mul-Commutative-Monoid + ( M) + ( ap + ( product-Commutative-Monoid M nA) + ( ap + ((f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inl-coproduct-Fin nA nB) ∘_) + (inv (eq-htpy (is-retraction-map-inv-equiv Fin-nA≃A))))) + ( ap + ( product-Commutative-Monoid M nB) + ( ap + ((f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inr-coproduct-Fin nA nB) ∘_) + ( inv (eq-htpy (is-retraction-map-inv-equiv Fin-nB≃B))))) + = + mul-Commutative-Monoid + ( M) + ( product-finite-Commutative-Monoid M A (f ∘ inl)) + ( product-finite-Commutative-Monoid M B (f ∘ inr)) + by {! !} + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f) + ( mul-Commutative-Monoid + ( M) + ( product-finite-Commutative-Monoid M A (f ∘ inl)) + ( product-finite-Commutative-Monoid M B (f ∘ inr)))) -} +``` diff --git a/src/group-theory/products-monoids.lagda.md b/src/group-theory/products-monoids.lagda.md new file mode 100644 index 0000000000..b2142f699d --- /dev/null +++ b/src/group-theory/products-monoids.lagda.md @@ -0,0 +1,199 @@ +# Products of elements in monoids + +```agda +module group-theory.products-monoids where +``` + +
Imports + +```agda +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-functions +open import foundation.coproduct-types +open import foundation.function-types +open import foundation.homotopies +open import foundation.identity-types +open import foundation.unit-type +open import foundation.universe-levels +open import foundation.whiskering-homotopies-composition + +open import group-theory.monoids + +open import linear-algebra.vectors-on-monoids + +open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +The product operation extends the binary multiplication operation on a monoid +`M` to any family of elements of `M` indexed by a standard finite type. + +## Definition + +```agda +product-Monoid : + {l : Level} (M : Monoid l) (n : ℕ) → + (functional-vec-Monoid M n) → type-Monoid M +product-Monoid M zero-ℕ f = unit-Monoid M +product-Monoid M (succ-ℕ n) f = + mul-Monoid M + ( product-Monoid M n (f ∘ inl-Fin n)) + ( f (inr star)) +``` + +## Properties + +### Products of one and two elements + +```agda +module _ + {l : Level} (M : Monoid l) + where + + product-one-element-Monoid : + (f : functional-vec-Monoid M 1) → + product-Monoid M 1 f = head-functional-vec-Monoid M 0 f + product-one-element-Monoid f = + left-unit-law-mul-Monoid M (f (inr star)) + + product-two-elements-Monoid : + (f : functional-vec-Monoid M 2) → + product-Monoid M 2 f = mul-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)) + product-two-elements-Monoid f = + ( associative-mul-Monoid M + (unit-Monoid M) (f (zero-Fin 1)) (f (one-Fin 1))) ∙ + ( left-unit-law-mul-Monoid M + ( mul-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)))) +``` + +### Products are homotopy invariant + +```agda +module _ + {l : Level} (M : Monoid l) + where + + htpy-product-Monoid : + (n : ℕ) {f g : functional-vec-Monoid M n} → + (f ~ g) → product-Monoid M n f = product-Monoid M n g + htpy-product-Monoid zero-ℕ H = refl + htpy-product-Monoid (succ-ℕ n) H = + ap-mul-Monoid M + ( htpy-product-Monoid n (H ·r inl-Fin n)) + ( H (inr star)) +``` + +### Products are equal to the zero-th term plus the rest + +```agda +module _ + {l : Level} (M : Monoid l) + where + + cons-product-Monoid : + (n : ℕ) (f : functional-vec-Monoid M (succ-ℕ n)) → + {x : type-Monoid M} → head-functional-vec-Monoid M n f = x → + product-Monoid M (succ-ℕ n) f = + mul-Monoid M (product-Monoid M n (f ∘ inl-Fin n)) x + cons-product-Monoid n f refl = refl + + snoc-product-Monoid : + (n : ℕ) (f : functional-vec-Monoid M (succ-ℕ n)) → + {x : type-Monoid M} → f (zero-Fin n) = x → + product-Monoid M (succ-ℕ n) f = + mul-Monoid M + ( x) + ( product-Monoid M n (f ∘ inr-Fin n)) + snoc-product-Monoid zero-ℕ f refl = + ( product-one-element-Monoid M f) ∙ + ( inv (right-unit-law-mul-Monoid M (f (zero-Fin 0)))) + snoc-product-Monoid (succ-ℕ n) f refl = + ( ap + ( mul-Monoid' M (head-functional-vec-Monoid M (succ-ℕ n) f)) + ( snoc-product-Monoid n (f ∘ inl-Fin (succ-ℕ n)) refl)) ∙ + ( associative-mul-Monoid M + ( f (zero-Fin (succ-ℕ n))) + ( product-Monoid M n (f ∘ (inr-Fin (succ-ℕ n) ∘ inl-Fin n))) + ( head-functional-vec-Monoid M (succ-ℕ n) f)) +``` + +### Extending a product of elements in a monoid + +```agda +module _ + {l : Level} (M : Monoid l) + where + + extend-product-Monoid : + (n : ℕ) (f : functional-vec-Monoid M n) → + product-Monoid M + ( succ-ℕ n) + ( cons-functional-vec-Monoid M n (unit-Monoid M) f) = + product-Monoid M n f + extend-product-Monoid n f = + right-unit-law-mul-Monoid M (product-Monoid M n f) +``` + +### Shifting a product of elements in a monoid + +```agda +module _ + {l : Level} (M : Monoid l) + where + + shift-product-Monoid : + (n : ℕ) (f : functional-vec-Monoid M n) → + product-Monoid M + ( succ-ℕ n) + ( snoc-functional-vec-Monoid M n f + ( unit-Monoid M)) = + product-Monoid M n f + shift-product-Monoid zero-ℕ f = + left-unit-law-mul-Monoid M (unit-Monoid M) + shift-product-Monoid (succ-ℕ n) f = + ap + ( mul-Monoid' M + ( head-functional-vec-Monoid M n f)) + ( shift-product-Monoid n + ( tail-functional-vec-Monoid M n f)) +``` + +### A product of units is the unit + +```agda +module _ + {l : Level} (M : Monoid l) + where + + product-unit-Monoid : + (n : ℕ) → + product-Monoid M n (unit-functional-vec-Monoid M n) = unit-Monoid M + product-unit-Monoid zero-ℕ = refl + product-unit-Monoid (succ-ℕ n) = + right-unit-law-mul-Monoid M _ ∙ product-unit-Monoid n +``` + +### Splitting products + +```agda +split-product-Monoid : + {l : Level} (M : Monoid l) + (n m : ℕ) (f : functional-vec-Monoid M (n +ℕ m)) → + product-Monoid M (n +ℕ m) f = + mul-Monoid M + ( product-Monoid M n (f ∘ inl-coproduct-Fin n m)) + ( product-Monoid M m (f ∘ inr-coproduct-Fin n m)) +split-product-Monoid M n zero-ℕ f = + inv (right-unit-law-mul-Monoid M (product-Monoid M n f)) +split-product-Monoid M n (succ-ℕ m) f = + ( ap + ( mul-Monoid' M (f (inr star))) + ( split-product-Monoid M n m (f ∘ inl))) ∙ + ( associative-mul-Monoid M _ _ _) +``` diff --git a/src/linear-algebra.lagda.md b/src/linear-algebra.lagda.md index 883be1c3fa..f3c4499d73 100644 --- a/src/linear-algebra.lagda.md +++ b/src/linear-algebra.lagda.md @@ -18,9 +18,11 @@ open import linear-algebra.scalar-multiplication-vectors public open import linear-algebra.scalar-multiplication-vectors-on-rings public open import linear-algebra.transposition-matrices public open import linear-algebra.vectors public +open import linear-algebra.vectors-on-commutative-monoids public open import linear-algebra.vectors-on-commutative-rings public open import linear-algebra.vectors-on-commutative-semirings public open import linear-algebra.vectors-on-euclidean-domains public +open import linear-algebra.vectors-on-monoids public open import linear-algebra.vectors-on-rings public open import linear-algebra.vectors-on-semirings public ``` diff --git a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md new file mode 100644 index 0000000000..764ac6a7e8 --- /dev/null +++ b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md @@ -0,0 +1,236 @@ +# Vectors on commutative monoids + +```agda +module linear-algebra.vectors-on-commutative-monoids where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-binary-functions +open import foundation.dependent-pair-types +open import foundation.function-extensionality +open import foundation.identity-types +open import foundation.universe-levels + +open import group-theory.commutative-monoids +open import group-theory.monoids +open import group-theory.semigroups + +open import linear-algebra.constant-vectors +open import linear-algebra.functoriality-vectors +open import linear-algebra.vectors +open import linear-algebra.vectors-on-monoids +``` + +
+ +## Idea + +Given a [commutative monoid](group-theory.commutative-monoids.md) `M`, the type +`vec n M` of `M`-[vectors](linear-algebra.vectors.md) is a commutative monoid. + +## Definitions + +### Listed vectors on commutative rings + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + vec-Commutative-Monoid : ℕ → UU l + vec-Commutative-Monoid = vec-Monoid (monoid-Commutative-Monoid M) + + head-vec-Commutative-Monoid : + {n : ℕ} → vec-Commutative-Monoid (succ-ℕ n) → type-Commutative-Monoid M + head-vec-Commutative-Monoid = head-vec-Monoid (monoid-Commutative-Monoid M) + + tail-vec-Commutative-Monoid : + {n : ℕ} → vec-Commutative-Monoid (succ-ℕ n) → vec-Commutative-Monoid n + tail-vec-Commutative-Monoid = tail-vec-Monoid (monoid-Commutative-Monoid M) + + snoc-vec-Commutative-Monoid : + {n : ℕ} → vec-Commutative-Monoid n → type-Commutative-Monoid M → + vec-Commutative-Monoid (succ-ℕ n) + snoc-vec-Commutative-Monoid = snoc-vec-Monoid (monoid-Commutative-Monoid M) +``` + +### Functional vectors on commutative rings + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + functional-vec-Commutative-Monoid : ℕ → UU l + functional-vec-Commutative-Monoid = + functional-vec-Monoid (monoid-Commutative-Monoid M) + + head-functional-vec-Commutative-Monoid : + (n : ℕ) → functional-vec-Commutative-Monoid (succ-ℕ n) → + type-Commutative-Monoid M + head-functional-vec-Commutative-Monoid = + head-functional-vec-Monoid (monoid-Commutative-Monoid M) + + tail-functional-vec-Commutative-Monoid : + (n : ℕ) → functional-vec-Commutative-Monoid (succ-ℕ n) → + functional-vec-Commutative-Monoid n + tail-functional-vec-Commutative-Monoid = + tail-functional-vec-Monoid (monoid-Commutative-Monoid M) + + cons-functional-vec-Commutative-Monoid : + (n : ℕ) → type-Commutative-Monoid M → + functional-vec-Commutative-Monoid n → + functional-vec-Commutative-Monoid (succ-ℕ n) + cons-functional-vec-Commutative-Monoid = + cons-functional-vec-Monoid (monoid-Commutative-Monoid M) + + snoc-functional-vec-Commutative-Monoid : + (n : ℕ) → functional-vec-Commutative-Monoid n → + type-Commutative-Monoid M → functional-vec-Commutative-Monoid (succ-ℕ n) + snoc-functional-vec-Commutative-Monoid = + snoc-functional-vec-Monoid (monoid-Commutative-Monoid M) +``` + +### Unit vector on a commutative monoid + +#### The unit listed vector + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + unit-vec-Commutative-Monoid : {n : ℕ} → vec-Commutative-Monoid M n + unit-vec-Commutative-Monoid = constant-vec (unit-Commutative-Monoid M) +``` + +#### The unit functional vector + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + unit-functional-vec-Commutative-Monoid : + (n : ℕ) → functional-vec-Commutative-Monoid M n + unit-functional-vec-Commutative-Monoid n i = unit-Commutative-Monoid M +``` + +### Pointwise addition of vectors on a commutative monoid + +#### Pointwise addition of listed vectors on a commutative monoid + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + mul-vec-Commutative-Monoid : + {n : ℕ} → vec-Commutative-Monoid M n → vec-Commutative-Monoid M n → + vec-Commutative-Monoid M n + mul-vec-Commutative-Monoid = + mul-vec-Monoid (monoid-Commutative-Monoid M) + + associative-mul-vec-Commutative-Monoid : + {n : ℕ} (v1 v2 v3 : vec-Commutative-Monoid M n) → + mul-vec-Commutative-Monoid (mul-vec-Commutative-Monoid v1 v2) v3 = + mul-vec-Commutative-Monoid v1 (mul-vec-Commutative-Monoid v2 v3) + associative-mul-vec-Commutative-Monoid = + associative-mul-vec-Monoid (monoid-Commutative-Monoid M) + + vec-Commutative-Monoid-Semigroup : ℕ → Semigroup l + vec-Commutative-Monoid-Semigroup = + vec-Monoid-Semigroup (monoid-Commutative-Monoid M) + + left-unit-law-mul-vec-Commutative-Monoid : + {n : ℕ} (v : vec-Commutative-Monoid M n) → + mul-vec-Commutative-Monoid (unit-vec-Commutative-Monoid M) v = v + left-unit-law-mul-vec-Commutative-Monoid = + left-unit-law-mul-vec-Monoid (monoid-Commutative-Monoid M) + + right-unit-law-mul-vec-Commutative-Monoid : + {n : ℕ} (v : vec-Commutative-Monoid M n) → + mul-vec-Commutative-Monoid v (unit-vec-Commutative-Monoid M) = v + right-unit-law-mul-vec-Commutative-Monoid = + right-unit-law-mul-vec-Monoid (monoid-Commutative-Monoid M) + + vec-Commutative-Monoid-Monoid : ℕ → Monoid l + vec-Commutative-Monoid-Monoid = + vec-Monoid-Monoid (monoid-Commutative-Monoid M) + + commutative-mul-vec-Commutative-Monoid : + {n : ℕ} (v w : vec-Commutative-Monoid M n) → + mul-vec-Commutative-Monoid v w = mul-vec-Commutative-Monoid w v + commutative-mul-vec-Commutative-Monoid empty-vec empty-vec = refl + commutative-mul-vec-Commutative-Monoid (x ∷ v1) (y ∷ v2) = + ap-binary _∷_ + (commutative-mul-Commutative-Monoid M x y) + (commutative-mul-vec-Commutative-Monoid v1 v2) + + vec-Commutative-Monoid-Commutative-Monoid : ℕ → Commutative-Monoid l + vec-Commutative-Monoid-Commutative-Monoid n = + vec-Commutative-Monoid-Monoid n , + commutative-mul-vec-Commutative-Monoid +``` + +#### Pointwise addition of functional vectors on a commutative monoid + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + mul-functional-vec-Commutative-Monoid : + (n : ℕ) (v w : functional-vec-Commutative-Monoid M n) → + functional-vec-Commutative-Monoid M n + mul-functional-vec-Commutative-Monoid = + mul-functional-vec-Monoid (monoid-Commutative-Monoid M) + + associative-mul-functional-vec-Commutative-Monoid : + (n : ℕ) (v1 v2 v3 : functional-vec-Commutative-Monoid M n) → + ( mul-functional-vec-Commutative-Monoid n + ( mul-functional-vec-Commutative-Monoid n v1 v2) v3) = + ( mul-functional-vec-Commutative-Monoid n v1 + ( mul-functional-vec-Commutative-Monoid n v2 v3)) + associative-mul-functional-vec-Commutative-Monoid = + associative-mul-functional-vec-Monoid (monoid-Commutative-Monoid M) + + functional-vec-Commutative-Monoid-Semigroup : ℕ → Semigroup l + functional-vec-Commutative-Monoid-Semigroup = + functional-vec-Monoid-Semigroup (monoid-Commutative-Monoid M) + + left-unit-law-mul-functional-vec-Commutative-Monoid : + (n : ℕ) (v : functional-vec-Commutative-Monoid M n) → + mul-functional-vec-Commutative-Monoid n + ( unit-functional-vec-Commutative-Monoid M n) v = v + left-unit-law-mul-functional-vec-Commutative-Monoid = + left-unit-law-mul-functional-vec-Monoid (monoid-Commutative-Monoid M) + + right-unit-law-mul-functional-vec-Commutative-Monoid : + (n : ℕ) (v : functional-vec-Commutative-Monoid M n) → + mul-functional-vec-Commutative-Monoid n v + ( unit-functional-vec-Commutative-Monoid M n) = v + right-unit-law-mul-functional-vec-Commutative-Monoid = + right-unit-law-mul-functional-vec-Monoid (monoid-Commutative-Monoid M) + + functional-vec-Commutative-Monoid-Monoid : ℕ → Monoid l + functional-vec-Commutative-Monoid-Monoid = + functional-vec-Monoid-Monoid (monoid-Commutative-Monoid M) + + commutative-mul-functional-vec-Commutative-Monoid : + (n : ℕ) (v w : functional-vec-Commutative-Monoid M n) → + mul-functional-vec-Commutative-Monoid n v w = + mul-functional-vec-Commutative-Monoid n w v + commutative-mul-functional-vec-Commutative-Monoid _ _ _ = + eq-htpy (λ k → commutative-mul-Commutative-Monoid M _ _) + + functional-vec-Commutative-Monoid-Commutative-Monoid : + ℕ → Commutative-Monoid l + functional-vec-Commutative-Monoid-Commutative-Monoid n = + functional-vec-Commutative-Monoid-Monoid n , + commutative-mul-functional-vec-Commutative-Monoid n +``` diff --git a/src/linear-algebra/vectors-on-monoids.lagda.md b/src/linear-algebra/vectors-on-monoids.lagda.md new file mode 100644 index 0000000000..9bd548f8e0 --- /dev/null +++ b/src/linear-algebra/vectors-on-monoids.lagda.md @@ -0,0 +1,209 @@ +# Vectors on monoids + +```agda +module linear-algebra.vectors-on-monoids where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-binary-functions +open import foundation.dependent-pair-types +open import foundation.function-extensionality +open import foundation.identity-types +open import foundation.universe-levels + +open import group-theory.monoids +open import group-theory.semigroups + +open import linear-algebra.constant-vectors +open import linear-algebra.functoriality-vectors +open import linear-algebra.vectors +``` + +
+ +## Idea + +Given a [monoid](group-theory.monoids.md) `M`, the type `vec n M` of +`M`-[vectors](linear-algebra.vectors.md) is a monoid. + +## Definitions + +### Listed vectors on monoids + +```agda +module _ + {l : Level} (M : Monoid l) + where + + vec-Monoid : ℕ → UU l + vec-Monoid = vec (type-Monoid M) + + head-vec-Monoid : {n : ℕ} → vec-Monoid (succ-ℕ n) → type-Monoid M + head-vec-Monoid v = head-vec v + + tail-vec-Monoid : {n : ℕ} → vec-Monoid (succ-ℕ n) → vec-Monoid n + tail-vec-Monoid v = tail-vec v + + snoc-vec-Monoid : + {n : ℕ} → vec-Monoid n → type-Monoid M → vec-Monoid (succ-ℕ n) + snoc-vec-Monoid v r = snoc-vec v r +``` + +### Functional vectors on rings + +```agda +module _ + {l : Level} (M : Monoid l) + where + + functional-vec-Monoid : ℕ → UU l + functional-vec-Monoid = functional-vec (type-Monoid M) + + head-functional-vec-Monoid : + (n : ℕ) → functional-vec-Monoid (succ-ℕ n) → type-Monoid M + head-functional-vec-Monoid n v = head-functional-vec n v + + tail-functional-vec-Monoid : + (n : ℕ) → functional-vec-Monoid (succ-ℕ n) → functional-vec-Monoid n + tail-functional-vec-Monoid = tail-functional-vec + + cons-functional-vec-Monoid : + (n : ℕ) → type-Monoid M → + functional-vec-Monoid n → functional-vec-Monoid (succ-ℕ n) + cons-functional-vec-Monoid = cons-functional-vec + + snoc-functional-vec-Monoid : + (n : ℕ) → functional-vec-Monoid n → type-Monoid M → + functional-vec-Monoid (succ-ℕ n) + snoc-functional-vec-Monoid = snoc-functional-vec +``` + +### Zero vector on a ring + +#### The unit listed vector + +```agda +module _ + {l : Level} (M : Monoid l) + where + + unit-vec-Monoid : {n : ℕ} → vec-Monoid M n + unit-vec-Monoid = constant-vec (unit-Monoid M) +``` + +#### The unit functional vector + +```agda +module _ + {l : Level} (M : Monoid l) + where + + unit-functional-vec-Monoid : (n : ℕ) → functional-vec-Monoid M n + unit-functional-vec-Monoid n i = unit-Monoid M +``` + +### Pointwise multiplication of vectors on a monoid + +#### Pointwise multiplication of listed vectors on a monoid + +```agda +module _ + {l : Level} (M : Monoid l) + where + + mul-vec-Monoid : + {n : ℕ} → vec-Monoid M n → vec-Monoid M n → vec-Monoid M n + mul-vec-Monoid = binary-map-vec (mul-Monoid M) + + associative-mul-vec-Monoid : + {n : ℕ} (v1 v2 v3 : vec-Monoid M n) → + mul-vec-Monoid (mul-vec-Monoid v1 v2) v3 = + mul-vec-Monoid v1 (mul-vec-Monoid v2 v3) + associative-mul-vec-Monoid empty-vec empty-vec empty-vec = refl + associative-mul-vec-Monoid (x ∷ v1) (y ∷ v2) (z ∷ v3) = + ap-binary _∷_ + ( associative-mul-Monoid M x y z) + ( associative-mul-vec-Monoid v1 v2 v3) + + vec-Monoid-Semigroup : ℕ → Semigroup l + pr1 (vec-Monoid-Semigroup n) = vec-Set (set-Monoid M) n + pr1 (pr2 (vec-Monoid-Semigroup n)) = mul-vec-Monoid + pr2 (pr2 (vec-Monoid-Semigroup n)) = associative-mul-vec-Monoid + + left-unit-law-mul-vec-Monoid : + {n : ℕ} (v : vec-Monoid M n) → + mul-vec-Monoid (unit-vec-Monoid M) v = v + left-unit-law-mul-vec-Monoid empty-vec = refl + left-unit-law-mul-vec-Monoid (x ∷ v) = + ap-binary _∷_ + ( left-unit-law-mul-Monoid M x) + ( left-unit-law-mul-vec-Monoid v) + + right-unit-law-mul-vec-Monoid : + {n : ℕ} (v : vec-Monoid M n) → + mul-vec-Monoid v (unit-vec-Monoid M) = v + right-unit-law-mul-vec-Monoid empty-vec = refl + right-unit-law-mul-vec-Monoid (x ∷ v) = + ap-binary _∷_ + ( right-unit-law-mul-Monoid M x) + ( right-unit-law-mul-vec-Monoid v) + + vec-Monoid-Monoid : ℕ → Monoid l + pr1 (vec-Monoid-Monoid n) = vec-Monoid-Semigroup n + pr1 (pr2 (vec-Monoid-Monoid n)) = unit-vec-Monoid M + pr1 (pr2 (pr2 (vec-Monoid-Monoid n))) = left-unit-law-mul-vec-Monoid + pr2 (pr2 (pr2 (vec-Monoid-Monoid n))) = right-unit-law-mul-vec-Monoid +``` + +#### Pointwise addition of functional vectors on a ring + +```agda +module _ + {l : Level} (M : Monoid l) + where + + mul-functional-vec-Monoid : + (n : ℕ) (v w : functional-vec-Monoid M n) → functional-vec-Monoid M n + mul-functional-vec-Monoid n = binary-map-functional-vec n (mul-Monoid M) + + associative-mul-functional-vec-Monoid : + (n : ℕ) (v1 v2 v3 : functional-vec-Monoid M n) → + ( mul-functional-vec-Monoid n (mul-functional-vec-Monoid n v1 v2) v3) = + ( mul-functional-vec-Monoid n v1 (mul-functional-vec-Monoid n v2 v3)) + associative-mul-functional-vec-Monoid n v1 v2 v3 = + eq-htpy (λ i → associative-mul-Monoid M (v1 i) (v2 i) (v3 i)) + + functional-vec-Monoid-Semigroup : ℕ → Semigroup l + pr1 (functional-vec-Monoid-Semigroup n) = + functional-vec-Set (set-Monoid M) n + pr1 (pr2 (functional-vec-Monoid-Semigroup n)) = + mul-functional-vec-Monoid n + pr2 (pr2 (functional-vec-Monoid-Semigroup n)) = + associative-mul-functional-vec-Monoid n + + left-unit-law-mul-functional-vec-Monoid : + (n : ℕ) (v : functional-vec-Monoid M n) → + mul-functional-vec-Monoid n (unit-functional-vec-Monoid M n) v = v + left-unit-law-mul-functional-vec-Monoid n v = + eq-htpy (λ i → left-unit-law-mul-Monoid M (v i)) + + right-unit-law-mul-functional-vec-Monoid : + (n : ℕ) (v : functional-vec-Monoid M n) → + mul-functional-vec-Monoid n v (unit-functional-vec-Monoid M n) = v + right-unit-law-mul-functional-vec-Monoid n v = + eq-htpy (λ i → right-unit-law-mul-Monoid M (v i)) + + functional-vec-Monoid-Monoid : ℕ → Monoid l + pr1 (functional-vec-Monoid-Monoid n) = + functional-vec-Monoid-Semigroup n + pr1 (pr2 (functional-vec-Monoid-Monoid n)) = + unit-functional-vec-Monoid M n + pr1 (pr2 (pr2 (functional-vec-Monoid-Monoid n))) = + left-unit-law-mul-functional-vec-Monoid n + pr2 (pr2 (pr2 (functional-vec-Monoid-Monoid n))) = + right-unit-law-mul-functional-vec-Monoid n +``` diff --git a/src/linear-algebra/vectors-on-semirings.lagda.md b/src/linear-algebra/vectors-on-semirings.lagda.md index c66387088a..cfdaa3e819 100644 --- a/src/linear-algebra/vectors-on-semirings.lagda.md +++ b/src/linear-algebra/vectors-on-semirings.lagda.md @@ -22,6 +22,7 @@ open import group-theory.semigroups open import linear-algebra.constant-vectors open import linear-algebra.functoriality-vectors open import linear-algebra.vectors +open import linear-algebra.vectors-on-commutative-monoids open import ring-theory.semirings ``` @@ -42,7 +43,7 @@ module _ where vec-Semiring : ℕ → UU l - vec-Semiring = vec (type-Semiring R) + vec-Semiring = vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) head-vec-Semiring : {n : ℕ} → vec-Semiring (succ-ℕ n) → type-Semiring R head-vec-Semiring v = head-vec v @@ -63,7 +64,8 @@ module _ where functional-vec-Semiring : ℕ → UU l - functional-vec-Semiring = functional-vec (type-Semiring R) + functional-vec-Semiring = + functional-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) head-functional-vec-Semiring : (n : ℕ) → functional-vec-Semiring (succ-ℕ n) → type-Semiring R @@ -94,7 +96,8 @@ module _ where zero-vec-Semiring : {n : ℕ} → vec-Semiring R n - zero-vec-Semiring = constant-vec (zero-Semiring R) + zero-vec-Semiring = + unit-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` #### The zero functional vector @@ -119,59 +122,51 @@ module _ add-vec-Semiring : {n : ℕ} → vec-Semiring R n → vec-Semiring R n → vec-Semiring R n - add-vec-Semiring = binary-map-vec (add-Semiring R) + add-vec-Semiring = + mul-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) associative-add-vec-Semiring : {n : ℕ} (v1 v2 v3 : vec-Semiring R n) → add-vec-Semiring (add-vec-Semiring v1 v2) v3 = add-vec-Semiring v1 (add-vec-Semiring v2 v3) - associative-add-vec-Semiring empty-vec empty-vec empty-vec = refl - associative-add-vec-Semiring (x ∷ v1) (y ∷ v2) (z ∷ v3) = - ap-binary _∷_ - ( associative-add-Semiring R x y z) - ( associative-add-vec-Semiring v1 v2 v3) + associative-add-vec-Semiring = + associative-mul-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) vec-Semiring-Semigroup : ℕ → Semigroup l - pr1 (vec-Semiring-Semigroup n) = vec-Set (set-Semiring R) n - pr1 (pr2 (vec-Semiring-Semigroup n)) = add-vec-Semiring - pr2 (pr2 (vec-Semiring-Semigroup n)) = associative-add-vec-Semiring + vec-Semiring-Semigroup = + vec-Commutative-Monoid-Semigroup (additive-commutative-monoid-Semiring R) left-unit-law-add-vec-Semiring : {n : ℕ} (v : vec-Semiring R n) → add-vec-Semiring (zero-vec-Semiring R) v = v - left-unit-law-add-vec-Semiring empty-vec = refl - left-unit-law-add-vec-Semiring (x ∷ v) = - ap-binary _∷_ - ( left-unit-law-add-Semiring R x) - ( left-unit-law-add-vec-Semiring v) + left-unit-law-add-vec-Semiring = + left-unit-law-mul-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) right-unit-law-add-vec-Semiring : {n : ℕ} (v : vec-Semiring R n) → add-vec-Semiring v (zero-vec-Semiring R) = v - right-unit-law-add-vec-Semiring empty-vec = refl - right-unit-law-add-vec-Semiring (x ∷ v) = - ap-binary _∷_ - ( right-unit-law-add-Semiring R x) - ( right-unit-law-add-vec-Semiring v) + right-unit-law-add-vec-Semiring = + right-unit-law-mul-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) vec-Semiring-Monoid : ℕ → Monoid l - pr1 (vec-Semiring-Monoid n) = vec-Semiring-Semigroup n - pr1 (pr2 (vec-Semiring-Monoid n)) = zero-vec-Semiring R - pr1 (pr2 (pr2 (vec-Semiring-Monoid n))) = left-unit-law-add-vec-Semiring - pr2 (pr2 (pr2 (vec-Semiring-Monoid n))) = right-unit-law-add-vec-Semiring + vec-Semiring-Monoid = + vec-Commutative-Monoid-Monoid + ( additive-commutative-monoid-Semiring R) commutative-add-vec-Semiring : {n : ℕ} (v w : vec-Semiring R n) → add-vec-Semiring v w = add-vec-Semiring w v - commutative-add-vec-Semiring empty-vec empty-vec = refl - commutative-add-vec-Semiring (x ∷ v) (y ∷ w) = - ap-binary _∷_ - ( commutative-add-Semiring R x y) - ( commutative-add-vec-Semiring v w) + commutative-add-vec-Semiring = + commutative-mul-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) vec-Semiring-Commutative-Monoid : ℕ → Commutative-Monoid l - pr1 (vec-Semiring-Commutative-Monoid n) = vec-Semiring-Monoid n - pr2 (vec-Semiring-Commutative-Monoid n) = commutative-add-vec-Semiring + vec-Semiring-Commutative-Monoid = + vec-Commutative-Monoid-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) ``` #### Pointwise addition of functional vectors on a ring @@ -183,54 +178,51 @@ module _ add-functional-vec-Semiring : (n : ℕ) (v w : functional-vec-Semiring R n) → functional-vec-Semiring R n - add-functional-vec-Semiring n = binary-map-functional-vec n (add-Semiring R) + add-functional-vec-Semiring = + mul-functional-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) associative-add-functional-vec-Semiring : (n : ℕ) (v1 v2 v3 : functional-vec-Semiring R n) → ( add-functional-vec-Semiring n (add-functional-vec-Semiring n v1 v2) v3) = ( add-functional-vec-Semiring n v1 (add-functional-vec-Semiring n v2 v3)) - associative-add-functional-vec-Semiring n v1 v2 v3 = - eq-htpy (λ i → associative-add-Semiring R (v1 i) (v2 i) (v3 i)) + associative-add-functional-vec-Semiring = + associative-mul-functional-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) functional-vec-Semiring-Semigroup : ℕ → Semigroup l - pr1 (functional-vec-Semiring-Semigroup n) = - functional-vec-Set (set-Semiring R) n - pr1 (pr2 (functional-vec-Semiring-Semigroup n)) = - add-functional-vec-Semiring n - pr2 (pr2 (functional-vec-Semiring-Semigroup n)) = - associative-add-functional-vec-Semiring n + functional-vec-Semiring-Semigroup = + functional-vec-Commutative-Monoid-Semigroup + ( additive-commutative-monoid-Semiring R) left-unit-law-add-functional-vec-Semiring : (n : ℕ) (v : functional-vec-Semiring R n) → add-functional-vec-Semiring n (zero-functional-vec-Semiring R n) v = v - left-unit-law-add-functional-vec-Semiring n v = - eq-htpy (λ i → left-unit-law-add-Semiring R (v i)) + left-unit-law-add-functional-vec-Semiring = + left-unit-law-mul-functional-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) right-unit-law-add-functional-vec-Semiring : (n : ℕ) (v : functional-vec-Semiring R n) → add-functional-vec-Semiring n v (zero-functional-vec-Semiring R n) = v - right-unit-law-add-functional-vec-Semiring n v = - eq-htpy (λ i → right-unit-law-add-Semiring R (v i)) + right-unit-law-add-functional-vec-Semiring = + right-unit-law-mul-functional-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) functional-vec-Semiring-Monoid : ℕ → Monoid l - pr1 (functional-vec-Semiring-Monoid n) = - functional-vec-Semiring-Semigroup n - pr1 (pr2 (functional-vec-Semiring-Monoid n)) = - zero-functional-vec-Semiring R n - pr1 (pr2 (pr2 (functional-vec-Semiring-Monoid n))) = - left-unit-law-add-functional-vec-Semiring n - pr2 (pr2 (pr2 (functional-vec-Semiring-Monoid n))) = - right-unit-law-add-functional-vec-Semiring n + functional-vec-Semiring-Monoid = + functional-vec-Commutative-Monoid-Monoid + ( additive-commutative-monoid-Semiring R) commutative-add-functional-vec-Semiring : (n : ℕ) (v w : functional-vec-Semiring R n) → add-functional-vec-Semiring n v w = add-functional-vec-Semiring n w v - commutative-add-functional-vec-Semiring n v w = - eq-htpy (λ i → commutative-add-Semiring R (v i) (w i)) + commutative-add-functional-vec-Semiring = + commutative-mul-functional-vec-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) functional-vec-Semiring-Commutative-Monoid : ℕ → Commutative-Monoid l - pr1 (functional-vec-Semiring-Commutative-Monoid n) = - functional-vec-Semiring-Monoid n - pr2 (functional-vec-Semiring-Commutative-Monoid n) = - commutative-add-functional-vec-Semiring n + functional-vec-Semiring-Commutative-Monoid = + functional-vec-Commutative-Monoid-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) ``` diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index f2f5859aa9..aef8823265 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -10,6 +10,9 @@ module ring-theory.sums-rings where open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers +open import finite-group-theory.permutations-standard-finite-types + +open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types @@ -22,6 +25,7 @@ open import ring-theory.rings open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -29,8 +33,10 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The sum operation extends the binary addition operation on a ring `R` to any -family of elements of `R` indexed by a standard finite type. +The sum operation extends the binary addition operation on a +[ring](ring-theory.rings.md) `R` to any family of elements of `R` indexed by a +[standard finite type](univalent-combinatorics.standard-finite-types.md), or by +a [finite type](univalent-combinatorics.finite-types.md). ## Definition @@ -38,6 +44,11 @@ family of elements of `R` indexed by a standard finite type. sum-Ring : {l : Level} (R : Ring l) (n : ℕ) → functional-vec-Ring R n → type-Ring R sum-Ring R = sum-Semiring (semiring-Ring R) + +sum-finite-Ring : + {l1 l2 : Level} (R : Ring l1) (A : Finite-Type l2) → + (type-Finite-Type A → type-Ring R) → type-Ring R +sum-finite-Ring R = sum-finite-Semiring (semiring-Ring R) ``` ## Properties @@ -194,3 +205,33 @@ split-sum-Ring : ( sum-Ring R m (f ∘ inr-coproduct-Fin n m)) split-sum-Ring R = split-sum-Semiring (semiring-Ring R) ``` + +### Permutations preserve sums + +```agda +module _ + {l : Level} (R : Ring l) + where + + preserves-sum-permutation-Ring : + (n : ℕ) → (σ : Permutation n) → + (f : functional-vec-Ring R n) → + sum-Ring R n f = sum-Ring R n (f ∘ map-equiv σ) + preserves-sum-permutation-Ring = + preserves-sum-permutation-Semiring (semiring-Ring R) +``` + +### Sums over finite types are preserved by equivalences + +```agda +module _ + {l1 l2 l3 : Level} (R : Ring l1) (A : Finite-Type l2) (B : Finite-Type l3) + (H : equiv-Finite-Type A B) + where + + sum-equiv-finite-Ring : + (f : type-Finite-Type B → type-Ring R) → + sum-finite-Ring R B f = + sum-finite-Ring R A (f ∘ map-equiv H) + sum-equiv-finite-Ring = sum-equiv-finite-Semiring (semiring-Ring R) A B H +``` diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 3f42f0a446..6a9a2b3f28 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -10,14 +10,18 @@ module ring-theory.sums-semirings where open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers +open import finite-group-theory.permutations-standard-finite-types + open import foundation.action-on-identifications-functions open import foundation.coproduct-types +open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.unit-type open import foundation.universe-levels -open import foundation.whiskering-homotopies-composition + +open import group-theory.products-commutative-monoids open import linear-algebra.vectors open import linear-algebra.vectors-on-semirings @@ -25,6 +29,7 @@ open import linear-algebra.vectors-on-semirings open import ring-theory.semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -32,8 +37,11 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The sum operation extends the binary addition operation on a semiring `R` to any -family of elements of `R` indexed by a standard finite type. +The sum operation extends the binary addition operation on a +[semiring](ring-theory.semirings.md) `R` to any family of elements of `R` +indexed by a +[standard finite type](univalent-combinatorics.standard-finite-types.md), or by +a [finite type](univalent-combinatorics.finite-types.md). ## Definition @@ -41,11 +49,14 @@ family of elements of `R` indexed by a standard finite type. sum-Semiring : {l : Level} (R : Semiring l) (n : ℕ) → (functional-vec-Semiring R n) → type-Semiring R -sum-Semiring R zero-ℕ f = zero-Semiring R -sum-Semiring R (succ-ℕ n) f = - add-Semiring R - ( sum-Semiring R n (f ∘ inl-Fin n)) - ( f (inr star)) +sum-Semiring R = + product-Commutative-Monoid (additive-commutative-monoid-Semiring R) + +sum-finite-Semiring : + {l1 l2 : Level} (R : Semiring l1) (A : Finite-Type l2) → + (type-Finite-Type A → type-Semiring R) → type-Semiring R +sum-finite-Semiring R = + product-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ## Properties @@ -60,17 +71,16 @@ module _ sum-one-element-Semiring : (f : functional-vec-Semiring R 1) → sum-Semiring R 1 f = head-functional-vec 0 f - sum-one-element-Semiring f = - left-unit-law-add-Semiring R (f (inr star)) + sum-one-element-Semiring = + product-one-element-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) sum-two-elements-Semiring : (f : functional-vec-Semiring R 2) → sum-Semiring R 2 f = add-Semiring R (f (zero-Fin 1)) (f (one-Fin 1)) - sum-two-elements-Semiring f = - ( associative-add-Semiring R - (zero-Semiring R) (f (zero-Fin 1)) (f (one-Fin 1))) ∙ - ( left-unit-law-add-Semiring R - ( add-Semiring R (f (zero-Fin 1)) (f (one-Fin 1)))) + sum-two-elements-Semiring = + product-two-elements-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) ``` ### Sums are homotopy invariant @@ -83,11 +93,8 @@ module _ htpy-sum-Semiring : (n : ℕ) {f g : functional-vec-Semiring R n} → (f ~ g) → sum-Semiring R n f = sum-Semiring R n g - htpy-sum-Semiring zero-ℕ H = refl - htpy-sum-Semiring (succ-ℕ n) H = - ap-add-Semiring R - ( htpy-sum-Semiring n (H ·r inl-Fin n)) - ( H (inr star)) + htpy-sum-Semiring = + htpy-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Sums are equal to the zero-th term plus the rest @@ -111,17 +118,8 @@ module _ add-Semiring R ( x) ( sum-Semiring R n (f ∘ inr-Fin n)) - snoc-sum-Semiring zero-ℕ f refl = - ( sum-one-element-Semiring R f) ∙ - ( inv (right-unit-law-add-Semiring R (f (zero-Fin 0)))) - snoc-sum-Semiring (succ-ℕ n) f refl = - ( ap - ( add-Semiring' R (head-functional-vec (succ-ℕ n) f)) - ( snoc-sum-Semiring n (f ∘ inl-Fin (succ-ℕ n)) refl)) ∙ - ( associative-add-Semiring R - ( f (zero-Fin (succ-ℕ n))) - ( sum-Semiring R n (f ∘ (inr-Fin (succ-ℕ n) ∘ inl-Fin n))) - ( head-functional-vec (succ-ℕ n) f)) + snoc-sum-Semiring = + snoc-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Multiplication distributes over sums @@ -206,8 +204,8 @@ module _ ( succ-ℕ n) ( cons-functional-vec-Semiring R n (zero-Semiring R) f) = sum-Semiring R n f - extend-sum-Semiring n f = - right-unit-law-add-Semiring R (sum-Semiring R n f) + extend-sum-Semiring = + extend-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Shifting a sum of elements in a semiring @@ -224,14 +222,8 @@ module _ ( snoc-functional-vec-Semiring R n f ( zero-Semiring R)) = sum-Semiring R n f - shift-sum-Semiring zero-ℕ f = - left-unit-law-add-Semiring R (zero-Semiring R) - shift-sum-Semiring (succ-ℕ n) f = - ap - ( add-Semiring' R - ( head-functional-vec-Semiring R n f)) - ( shift-sum-Semiring n - ( tail-functional-vec-Semiring R n f)) + shift-sum-Semiring = + shift-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### A sum of zeroes is zero @@ -244,9 +236,8 @@ module _ sum-zero-Semiring : (n : ℕ) → sum-Semiring R n (zero-functional-vec-Semiring R n) = zero-Semiring R - sum-zero-Semiring zero-ℕ = refl - sum-zero-Semiring (succ-ℕ n) = - right-unit-law-add-Semiring R _ ∙ sum-zero-Semiring n + sum-zero-Semiring = + product-unit-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Splitting sums @@ -259,11 +250,41 @@ split-sum-Semiring : add-Semiring R ( sum-Semiring R n (f ∘ inl-coproduct-Fin n m)) ( sum-Semiring R m (f ∘ inr-coproduct-Fin n m)) -split-sum-Semiring R n zero-ℕ f = - inv (right-unit-law-add-Semiring R (sum-Semiring R n f)) -split-sum-Semiring R n (succ-ℕ m) f = - ( ap - ( add-Semiring' R (f (inr star))) - ( split-sum-Semiring R n m (f ∘ inl))) ∙ - ( associative-add-Semiring R _ _ _) +split-sum-Semiring R = + split-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) +``` + +### Permutations preserve sums + +```agda +module _ + {l : Level} (R : Semiring l) + where + + preserves-sum-permutation-Semiring : + (n : ℕ) → (σ : Permutation n) → + (f : functional-vec-Semiring R n) → + sum-Semiring R n f = sum-Semiring R n (f ∘ map-equiv σ) + preserves-sum-permutation-Semiring = + preserves-product-permutation-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) +``` + +### Sums over finite types are preserved by equivalences + +```agda +module _ + {l1 l2 l3 : Level} (R : Semiring l1) (A : Finite-Type l2) (B : Finite-Type l3) + (H : equiv-Finite-Type A B) + where + + sum-equiv-finite-Semiring : + (f : type-Finite-Type B → type-Semiring R) → + sum-finite-Semiring R B f = sum-finite-Semiring R A (f ∘ map-equiv H) + sum-equiv-finite-Semiring = + product-equiv-finite-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) + ( A) + ( B) + ( H) ``` diff --git a/src/univalent-combinatorics/counting.lagda.md b/src/univalent-combinatorics/counting.lagda.md index e18f5b8b39..1912165cce 100644 --- a/src/univalent-combinatorics/counting.lagda.md +++ b/src/univalent-combinatorics/counting.lagda.md @@ -101,6 +101,20 @@ module _ is-equivalence-injective-Fin (inv-equiv e2 ∘e e1) ``` +### Any two counts for equivalent types have the same number of elements + +```agda +module _ + {l1 l2 : Level} (A : UU l1) (B : UU l2) (H : A ≃ B) + where + + eq-number-of-elements-count-equiv : + (cA : count A) (cB : count B) → + number-of-elements-count cA = number-of-elements-count cB + eq-number-of-elements-count-equiv cA (nB , eB) = + eq-number-of-elements-count A cA (nB , inv-equiv H ∘e eB) +``` + ### Types equipped with countings are closed under equivalences ```agda From be9a025557785825b7952971d821995ec44e60ff Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 15:38:49 -0700 Subject: [PATCH 08/66] Add more links --- src/group-theory/products-monoids.lagda.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/group-theory/products-monoids.lagda.md b/src/group-theory/products-monoids.lagda.md index b2142f699d..554b0b7f3f 100644 --- a/src/group-theory/products-monoids.lagda.md +++ b/src/group-theory/products-monoids.lagda.md @@ -31,8 +31,9 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The product operation extends the binary multiplication operation on a monoid -`M` to any family of elements of `M` indexed by a standard finite type. +The product operation extends the binary multiplication operation on a +[monoid](group-theory.monoids.md) `M` to any family of elements of `M` indexed +by a [standard finite type](univalent-combinatorics.standard-finite-types.md). ## Definition From 9fa6e32118b39acfcd15edbc345e3e233a66294b Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 17:39:58 -0700 Subject: [PATCH 09/66] Distribute sums over coproducts --- .../sums-commutative-rings.lagda.md | 20 ++ .../sums-commutative-semirings.lagda.md | 21 ++ .../products-commutative-monoids.lagda.md | 266 ++++++++++++------ src/ring-theory/sums-rings.lagda.md | 21 ++ src/ring-theory/sums-semirings.lagda.md | 23 ++ 5 files changed, 262 insertions(+), 89 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 2619f7f0e1..a8f87e1e87 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -264,3 +264,23 @@ module _ ( B) ( H) ``` + +### Sums over finite types distribute over coproducts + +```agda +module _ + {l1 l2 l3 : Level} (R : Commutative-Ring l1) + (A : Finite-Type l2) (B : Finite-Type l3) + where + + sum-coproduct-finite-Commutative-Ring : + (f : + type-Finite-Type A + type-Finite-Type B → type-Commutative-Ring R) → + sum-finite-Commutative-Ring R (coproduct-Finite-Type A B) f = + add-Commutative-Ring + ( R) + ( sum-finite-Commutative-Ring R A (f ∘ inl)) + ( sum-finite-Commutative-Ring R B (f ∘ inr)) + sum-coproduct-finite-Commutative-Ring = + sum-coproduct-finite-Ring (ring-Commutative-Ring R) A B +``` diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index b76443c079..c7681d7a3a 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -14,6 +14,7 @@ open import elementary-number-theory.natural-numbers open import finite-group-theory.permutations-standard-finite-types +open import foundation.coproduct-types open import foundation.equivalences open import foundation.function-types open import foundation.homotopies @@ -263,3 +264,23 @@ module _ sum-equiv-finite-Commutative-Semiring = sum-equiv-finite-Semiring (semiring-Commutative-Semiring R) A B H ``` + +### Sums over finite types distribute over coproducts + +```agda +module _ + {l1 l2 l3 : Level} (R : Commutative-Semiring l1) + (A : Finite-Type l2) (B : Finite-Type l3) + where + + sum-coproduct-finite-Commutative-Semiring : + (f : + type-Finite-Type A + type-Finite-Type B → type-Commutative-Semiring R) → + sum-finite-Commutative-Semiring R (coproduct-Finite-Type A B) f = + add-Commutative-Semiring + ( R) + ( sum-finite-Commutative-Semiring R A (f ∘ inl)) + ( sum-finite-Commutative-Semiring R B (f ∘ inr)) + sum-coproduct-finite-Commutative-Semiring = + sum-coproduct-finite-Semiring (semiring-Commutative-Semiring R) A B +``` diff --git a/src/group-theory/products-commutative-monoids.lagda.md b/src/group-theory/products-commutative-monoids.lagda.md index 6313c0e97a..78b4ec9d5f 100644 --- a/src/group-theory/products-commutative-monoids.lagda.md +++ b/src/group-theory/products-commutative-monoids.lagda.md @@ -26,6 +26,7 @@ open import foundation.homotopies open import foundation.identity-types open import foundation.negated-equality open import foundation.propositional-truncations +open import foundation.functoriality-coproduct-types open import foundation.sets open import foundation.unit-type open import foundation.universal-property-propositional-truncation-into-sets @@ -509,106 +510,193 @@ module _ ### Products over finite types distribute over coproducts ```agda -{- module _ +module _ {l1 l2 l3 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) (B : Finite-Type l3) where - product-coproduct-finite-Commutative-Monoid : - (f : - type-Finite-Type A + type-Finite-Type B → type-Commutative-Monoid M) → - product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f = - mul-Commutative-Monoid - ( M) - ( product-finite-Commutative-Monoid M A (f ∘ inl)) - ( product-finite-Commutative-Monoid M B (f ∘ inr)) - product-coproduct-finite-Commutative-Monoid f = - do - cA@(nA , Fin-nA≃A) ← is-finite-type-Finite-Type A - cB@(nB , Fin-nB≃B) ← is-finite-type-Finite-Type B - equational-reasoning - product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f - = - product-Commutative-Monoid - ( M) - ( nA +ℕ nB) - ( f ∘ map-equiv-count (count-coproduct cA cB)) - by - eq-product-finite-count-Commutative-Monoid - ( M) - ( coproduct-Finite-Type A B) - ( count-coproduct cA cB) - ( f) - = - mul-Commutative-Monoid M - ( product-Commutative-Monoid - ( M) - ( nA) - ( f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inl-coproduct-Fin nA nB)) - ( product-Commutative-Monoid - ( M) - ( nB) - ( f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inr-coproduct-Fin nA nB)) - by - split-product-Commutative-Monoid + abstract + product-coproduct-finite-Commutative-Monoid : + (f : + type-Finite-Type A + type-Finite-Type B → type-Commutative-Monoid M) → + product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f = + mul-Commutative-Monoid + ( M) + ( product-finite-Commutative-Monoid M A (f ∘ inl)) + ( product-finite-Commutative-Monoid M B (f ∘ inr)) + product-coproduct-finite-Commutative-Monoid f = + do + cA@(nA , Fin-nA≃A) ← is-finite-type-Finite-Type A + cB@(nB , Fin-nB≃B) ← is-finite-type-Finite-Type B + equational-reasoning + product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f + = + product-Commutative-Monoid ( M) - ( nA) - ( nB) + ( nA +ℕ nB) ( f ∘ map-equiv-count (count-coproduct cA cB)) - = - mul-Commutative-Monoid - ( M) - ( product-count-Commutative-Monoid + by + eq-product-finite-count-Commutative-Monoid + ( M) + ( coproduct-Finite-Type A B) + ( count-coproduct cA cB) + ( f) + = + mul-Commutative-Monoid M + ( product-Commutative-Monoid + ( M) + ( nA) + ( f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inl-coproduct-Fin nA nB)) + ( product-Commutative-Monoid + ( M) + ( nB) + ( f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inr-coproduct-Fin nA nB)) + by + split-product-Commutative-Monoid + ( M) + ( nA) + ( nB) + ( f ∘ map-equiv-count (count-coproduct cA cB)) + = + mul-Commutative-Monoid ( M) - ( type-Finite-Type A) - ( cA) - ( f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inl-coproduct-Fin nA nB ∘ - map-inv-equiv Fin-nA≃A)) - ( product-count-Commutative-Monoid + ( product-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( cA) + ( f ∘ + map-coproduct (map-equiv-count cA) (map-equiv-count cB) ∘ + map-inv-compute-coproduct-Fin nA nB ∘ + map-compute-coproduct-Fin nA nB ∘ + inl ∘ + map-inv-equiv Fin-nA≃A)) + ( product-count-Commutative-Monoid + ( M) + ( type-Finite-Type B) + ( cB) + ( f ∘ + map-coproduct (map-equiv-count cA) (map-equiv-count cB) ∘ + map-inv-compute-coproduct-Fin nA nB ∘ + map-compute-coproduct-Fin nA nB ∘ + inr ∘ + map-inv-equiv Fin-nB≃B)) + by + ap-mul-Commutative-Monoid + ( M) + ( ap + ( product-Commutative-Monoid M nA) + ( ap + ((f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inl-coproduct-Fin nA nB) ∘_) + (inv (eq-htpy (is-retraction-map-inv-equiv Fin-nA≃A))))) + ( ap + ( product-Commutative-Monoid M nB) + ( ap + ((f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inr-coproduct-Fin nA nB) ∘_) + ( inv (eq-htpy (is-retraction-map-inv-equiv Fin-nB≃B))))) + = + mul-Commutative-Monoid ( M) - ( type-Finite-Type B) - ( cB) - ( f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inr-coproduct-Fin nA nB ∘ - map-inv-equiv Fin-nB≃B)) - by - ap-mul-Commutative-Monoid + ( product-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( cA) + ( f ∘ inl ∘ map-equiv Fin-nA≃A ∘ map-inv-equiv Fin-nA≃A)) + ( product-count-Commutative-Monoid + ( M) + ( type-Finite-Type B) + ( cB) + ( f ∘ inr ∘ map-equiv Fin-nB≃B ∘ map-inv-equiv Fin-nB≃B)) + by + ap-mul-Commutative-Monoid + ( M) + ( ap + ( product-count-Commutative-Monoid M (type-Finite-Type A) cA) + ( eq-htpy + ( λ a → + ap + ( f ∘ + map-coproduct + ( map-equiv-count cA) + ( map-equiv-count cB)) + ( is-retraction-map-inv-equiv + ( compute-coproduct-Fin nA nB) + ( _))))) + ( ap + ( product-count-Commutative-Monoid M (type-Finite-Type B) cB) + ( eq-htpy + ( λ b → + ap + ( f ∘ + map-coproduct + ( map-equiv-count cA) + ( map-equiv-count cB)) + ( is-retraction-map-inv-equiv + ( compute-coproduct-Fin nA nB) + ( _))))) + = + mul-Commutative-Monoid ( M) - ( ap - ( product-Commutative-Monoid M nA) + ( product-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( cA) + ( f ∘ inl)) + ( product-count-Commutative-Monoid + ( M) + ( type-Finite-Type B) + ( cB) + ( f ∘ inr)) + by + ap-mul-Commutative-Monoid + ( M) ( ap - ((f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inl-coproduct-Fin nA nB) ∘_) - (inv (eq-htpy (is-retraction-map-inv-equiv Fin-nA≃A))))) - ( ap - ( product-Commutative-Monoid M nB) + ( product-count-Commutative-Monoid M (type-Finite-Type A) cA) + ( eq-htpy + ( λ a → + ap (f ∘ inl) (is-section-map-inv-equiv Fin-nA≃A a)))) ( ap - ((f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inr-coproduct-Fin nA nB) ∘_) - ( inv (eq-htpy (is-retraction-map-inv-equiv Fin-nB≃B))))) - = - mul-Commutative-Monoid - ( M) - ( product-finite-Commutative-Monoid M A (f ∘ inl)) - ( product-finite-Commutative-Monoid M B (f ∘ inr)) - by {! !} - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Commutative-Monoid M) - ( product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f) - ( mul-Commutative-Monoid + ( product-count-Commutative-Monoid M (type-Finite-Type B) cB) + ( eq-htpy + ( λ b → + ap (f ∘ inr) (is-section-map-inv-equiv Fin-nB≃B b)))) + = + mul-Commutative-Monoid ( M) ( product-finite-Commutative-Monoid M A (f ∘ inl)) - ( product-finite-Commutative-Monoid M B (f ∘ inr)))) -} + ( product-finite-Commutative-Monoid M B (f ∘ inr)) + by + inv + ( ap-mul-Commutative-Monoid + ( M) + ( eq-product-finite-count-Commutative-Monoid + ( M) + ( A) + ( cA) + ( f ∘ inl)) + ( eq-product-finite-count-Commutative-Monoid + ( M) + ( B) + ( cB) + ( f ∘ inr))) + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( product-finite-Commutative-Monoid + ( M) + ( coproduct-Finite-Type A B) + ( f)) + ( mul-Commutative-Monoid + ( M) + ( product-finite-Commutative-Monoid M A (f ∘ inl)) + ( product-finite-Commutative-Monoid M B (f ∘ inr)))) ``` diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index aef8823265..bc5aca564a 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -12,6 +12,7 @@ open import elementary-number-theory.natural-numbers open import finite-group-theory.permutations-standard-finite-types +open import foundation.coproduct-types open import foundation.equivalences open import foundation.function-types open import foundation.homotopies @@ -235,3 +236,23 @@ module _ sum-finite-Ring R A (f ∘ map-equiv H) sum-equiv-finite-Ring = sum-equiv-finite-Semiring (semiring-Ring R) A B H ``` + +### Sums over finite types distribute over coproducts + +```agda +module _ + {l1 l2 l3 : Level} (R : Ring l1) + (A : Finite-Type l2) (B : Finite-Type l3) + where + + sum-coproduct-finite-Ring : + (f : + type-Finite-Type A + type-Finite-Type B → type-Ring R) → + sum-finite-Ring R (coproduct-Finite-Type A B) f = + add-Ring + ( R) + ( sum-finite-Ring R A (f ∘ inl)) + ( sum-finite-Ring R B (f ∘ inr)) + sum-coproduct-finite-Ring = + sum-coproduct-finite-Semiring (semiring-Ring R) A B +``` diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 6a9a2b3f28..c1855b9bb4 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -288,3 +288,26 @@ module _ ( B) ( H) ``` + +### Sums over finite types distribute over coproducts + +```agda +module _ + {l1 l2 l3 : Level} (R : Semiring l1) + (A : Finite-Type l2) (B : Finite-Type l3) + where + + sum-coproduct-finite-Semiring : + (f : + type-Finite-Type A + type-Finite-Type B → type-Semiring R) → + sum-finite-Semiring R (coproduct-Finite-Type A B) f = + add-Semiring + ( R) + ( sum-finite-Semiring R A (f ∘ inl)) + ( sum-finite-Semiring R B (f ∘ inr)) + sum-coproduct-finite-Semiring = + product-coproduct-finite-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) + ( A) + ( B) +``` From 707158a3e56afb48edb32c53ede479592e0b9844 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 17:40:46 -0700 Subject: [PATCH 10/66] make pre-commit --- src/commutative-algebra/sums-commutative-rings.lagda.md | 4 ++-- .../sums-commutative-semirings.lagda.md | 8 ++++---- src/group-theory/products-commutative-monoids.lagda.md | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index a8f87e1e87..b800b10972 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -41,8 +41,8 @@ open import univalent-combinatorics.standard-finite-types The **sum operation** extends the binary addition operation on a [commutative ring](commutative-algebra.commutative-rings.md) `A` to any family of elements of `A` indexed by a -[standard finite type](univalent-combinatorics.standard-finite-types.md), -or by a [finite type](univalent-combinatorics.finite-types.md). +[standard finite type](univalent-combinatorics.standard-finite-types.md), or by +a [finite type](univalent-combinatorics.finite-types.md). ## Definition diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index c7681d7a3a..ced509fc18 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -40,10 +40,10 @@ open import univalent-combinatorics.standard-finite-types ## Idea The **sum operation** extends the binary addition operation on a -[commutative semiring](commutative-algebra.commutative-semirings.md) -`R` to any family of elements of `R` indexed by a -[standard finite type](univalent-combinatorics.standard-finite-types.md), or -by a [finite type](univalent-combinatorics.finite-types.md). +[commutative semiring](commutative-algebra.commutative-semirings.md) `R` to any +family of elements of `R` indexed by a +[standard finite type](univalent-combinatorics.standard-finite-types.md), or by +a [finite type](univalent-combinatorics.finite-types.md). ## Definition diff --git a/src/group-theory/products-commutative-monoids.lagda.md b/src/group-theory/products-commutative-monoids.lagda.md index 78b4ec9d5f..e3ae37bf83 100644 --- a/src/group-theory/products-commutative-monoids.lagda.md +++ b/src/group-theory/products-commutative-monoids.lagda.md @@ -22,11 +22,11 @@ open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.function-extensionality open import foundation.function-types +open import foundation.functoriality-coproduct-types open import foundation.homotopies open import foundation.identity-types open import foundation.negated-equality open import foundation.propositional-truncations -open import foundation.functoriality-coproduct-types open import foundation.sets open import foundation.unit-type open import foundation.universal-property-propositional-truncation-into-sets From 7961aede2bb1f850db27860a1e6daea412391cd8 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 18:15:40 -0700 Subject: [PATCH 11/66] Pull out lemma for homotopies --- .../products-commutative-monoids.lagda.md | 104 ++---------------- .../coproduct-types.lagda.md | 46 ++++++++ 2 files changed, 56 insertions(+), 94 deletions(-) diff --git a/src/group-theory/products-commutative-monoids.lagda.md b/src/group-theory/products-commutative-monoids.lagda.md index e3ae37bf83..eef0dbbf92 100644 --- a/src/group-theory/products-commutative-monoids.lagda.md +++ b/src/group-theory/products-commutative-monoids.lagda.md @@ -564,109 +564,25 @@ module _ = mul-Commutative-Monoid ( M) - ( product-count-Commutative-Monoid - ( M) - ( type-Finite-Type A) - ( cA) - ( f ∘ - map-coproduct (map-equiv-count cA) (map-equiv-count cB) ∘ - map-inv-compute-coproduct-Fin nA nB ∘ - map-compute-coproduct-Fin nA nB ∘ - inl ∘ - map-inv-equiv Fin-nA≃A)) - ( product-count-Commutative-Monoid - ( M) - ( type-Finite-Type B) - ( cB) - ( f ∘ - map-coproduct (map-equiv-count cA) (map-equiv-count cB) ∘ - map-inv-compute-coproduct-Fin nA nB ∘ - map-compute-coproduct-Fin nA nB ∘ - inr ∘ - map-inv-equiv Fin-nB≃B)) - by - ap-mul-Commutative-Monoid - ( M) - ( ap - ( product-Commutative-Monoid M nA) - ( ap - ((f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inl-coproduct-Fin nA nB) ∘_) - (inv (eq-htpy (is-retraction-map-inv-equiv Fin-nA≃A))))) - ( ap - ( product-Commutative-Monoid M nB) - ( ap - ((f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inr-coproduct-Fin nA nB) ∘_) - ( inv (eq-htpy (is-retraction-map-inv-equiv Fin-nB≃B))))) - = - mul-Commutative-Monoid - ( M) - ( product-count-Commutative-Monoid - ( M) - ( type-Finite-Type A) - ( cA) - ( f ∘ inl ∘ map-equiv Fin-nA≃A ∘ map-inv-equiv Fin-nA≃A)) - ( product-count-Commutative-Monoid - ( M) - ( type-Finite-Type B) - ( cB) - ( f ∘ inr ∘ map-equiv Fin-nB≃B ∘ map-inv-equiv Fin-nB≃B)) - by - ap-mul-Commutative-Monoid - ( M) - ( ap - ( product-count-Commutative-Monoid M (type-Finite-Type A) cA) - ( eq-htpy - ( λ a → - ap - ( f ∘ - map-coproduct - ( map-equiv-count cA) - ( map-equiv-count cB)) - ( is-retraction-map-inv-equiv - ( compute-coproduct-Fin nA nB) - ( _))))) - ( ap - ( product-count-Commutative-Monoid M (type-Finite-Type B) cB) - ( eq-htpy - ( λ b → - ap - ( f ∘ - map-coproduct - ( map-equiv-count cA) - ( map-equiv-count cB)) - ( is-retraction-map-inv-equiv - ( compute-coproduct-Fin nA nB) - ( _))))) - = - mul-Commutative-Monoid - ( M) - ( product-count-Commutative-Monoid + ( product-Commutative-Monoid ( M) - ( type-Finite-Type A) - ( cA) - ( f ∘ inl)) - ( product-count-Commutative-Monoid + ( nA) + ( f ∘ inl ∘ map-equiv-count cA)) + ( product-Commutative-Monoid ( M) - ( type-Finite-Type B) - ( cB) - ( f ∘ inr)) + ( nB) + ( f ∘ inr ∘ map-equiv-count cB)) by ap-mul-Commutative-Monoid ( M) ( ap - ( product-count-Commutative-Monoid M (type-Finite-Type A) cA) + ( λ g → product-Commutative-Monoid M nA (f ∘ g)) ( eq-htpy - ( λ a → - ap (f ∘ inl) (is-section-map-inv-equiv Fin-nA≃A a)))) + ( map-equiv-count-coproduct-inl-coproduct-Fin cA cB))) ( ap - ( product-count-Commutative-Monoid M (type-Finite-Type B) cB) + ( λ g → product-Commutative-Monoid M nB (f ∘ g)) ( eq-htpy - ( λ b → - ap (f ∘ inr) (is-section-map-inv-equiv Fin-nB≃B b)))) + ( map-equiv-count-coproduct-inr-coproduct-Fin cA cB))) = mul-Commutative-Monoid ( M) diff --git a/src/univalent-combinatorics/coproduct-types.lagda.md b/src/univalent-combinatorics/coproduct-types.lagda.md index 87603eab3b..f4d573fd34 100644 --- a/src/univalent-combinatorics/coproduct-types.lagda.md +++ b/src/univalent-combinatorics/coproduct-types.lagda.md @@ -145,6 +145,52 @@ abstract number-of-elements-count-coproduct (pair k e) (pair l f) = refl ``` +### Mapping the `count-coproduct` equivalence on `inl-coproduct-Fin` is `inl` on the left count + +```agda +module _ + {l1 l2 : Level} {A : UU l1} {B : UU l2} (cA : count A) (cB : count B) + where + + map-equiv-count-coproduct-inl-coproduct-Fin : + map-equiv-count (count-coproduct cA cB) ∘ + inl-coproduct-Fin + ( number-of-elements-count cA) + ( number-of-elements-count cB) ~ + inl ∘ map-equiv-count cA + map-equiv-count-coproduct-inl-coproduct-Fin a = + ap + ( map-coproduct _ _) + ( is-retraction-map-inv-equiv + ( compute-coproduct-Fin + ( number-of-elements-count cA) + ( number-of-elements-count cB)) + ( inl a)) +``` + +### Mapping the `count-coproduct` equivalence on `inr-coproduct-Fin` is `inr` on the left count + +```agda +module _ + {l1 l2 : Level} {A : UU l1} {B : UU l2} (cA : count A) (cB : count B) + where + + map-equiv-count-coproduct-inr-coproduct-Fin : + map-equiv-count (count-coproduct cA cB) ∘ + inr-coproduct-Fin + ( number-of-elements-count cA) + ( number-of-elements-count cB) ~ + inr ∘ map-equiv-count cB + map-equiv-count-coproduct-inr-coproduct-Fin b = + ap + ( map-coproduct _ _) + ( is-retraction-map-inv-equiv + ( compute-coproduct-Fin + ( number-of-elements-count cA) + ( number-of-elements-count cB)) + ( inr b)) +``` + ### If both `Σ A P` and `Σ A Q` have a count, then `Σ A P + Q` have a count ```agda From 2c6484dc57db041a4a55da2314774b3aca28bd6f Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 18:17:32 -0700 Subject: [PATCH 12/66] Fix typo --- src/univalent-combinatorics/coproduct-types.lagda.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/univalent-combinatorics/coproduct-types.lagda.md b/src/univalent-combinatorics/coproduct-types.lagda.md index f4d573fd34..ee2c6015ff 100644 --- a/src/univalent-combinatorics/coproduct-types.lagda.md +++ b/src/univalent-combinatorics/coproduct-types.lagda.md @@ -168,7 +168,7 @@ module _ ( inl a)) ``` -### Mapping the `count-coproduct` equivalence on `inr-coproduct-Fin` is `inr` on the left count +### Mapping the `count-coproduct` equivalence on `inr-coproduct-Fin` is `inr` on the right count ```agda module _ From 97f379aacf2797a2a876dead95cf9f154976ca08 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 16 Mar 2025 19:40:14 -0700 Subject: [PATCH 13/66] Fixes --- src/group-theory.lagda.md | 3 +- .../products-commutative-monoids.lagda.md | 618 ------------------ ...s-of-elements-commutative-monoids.lagda.md | 603 ++++++++++++++++- ...ts-of-tuples-of-elements-monoids.lagda.md} | 88 +-- src/ring-theory/sums-semirings.lagda.md | 18 +- 5 files changed, 623 insertions(+), 707 deletions(-) delete mode 100644 src/group-theory/products-commutative-monoids.lagda.md rename src/group-theory/{products-monoids.lagda.md => products-of-tuples-of-elements-monoids.lagda.md} (67%) diff --git a/src/group-theory.lagda.md b/src/group-theory.lagda.md index bc1aaff2fa..4273264e24 100644 --- a/src/group-theory.lagda.md +++ b/src/group-theory.lagda.md @@ -155,10 +155,9 @@ open import group-theory.precategory-of-orbits-monoid-actions public open import group-theory.precategory-of-semigroups public open import group-theory.principal-group-actions public open import group-theory.principal-torsors-concrete-groups public -open import group-theory.products-commutative-monoids public -open import group-theory.products-monoids public open import group-theory.products-of-elements-monoids public open import group-theory.products-of-tuples-of-elements-commutative-monoids public +open import group-theory.products-of-tuples-of-elements-monoids public open import group-theory.pullbacks-subgroups public open import group-theory.pullbacks-subsemigroups public open import group-theory.quotient-groups public diff --git a/src/group-theory/products-commutative-monoids.lagda.md b/src/group-theory/products-commutative-monoids.lagda.md deleted file mode 100644 index eef0dbbf92..0000000000 --- a/src/group-theory/products-commutative-monoids.lagda.md +++ /dev/null @@ -1,618 +0,0 @@ -# Products of elements in commutative monoids - -```agda -{-# OPTIONS --lossy-unification #-} - -module group-theory.products-commutative-monoids where -``` - -
Imports - -```agda -open import elementary-number-theory.addition-natural-numbers -open import elementary-number-theory.natural-numbers - -open import finite-group-theory.permutations-standard-finite-types -open import finite-group-theory.transpositions-standard-finite-types - -open import foundation.action-on-identifications-functions -open import foundation.cartesian-product-types -open import foundation.coproduct-types -open import foundation.dependent-pair-types -open import foundation.equivalences -open import foundation.function-extensionality -open import foundation.function-types -open import foundation.functoriality-coproduct-types -open import foundation.homotopies -open import foundation.identity-types -open import foundation.negated-equality -open import foundation.propositional-truncations -open import foundation.sets -open import foundation.unit-type -open import foundation.universal-property-propositional-truncation-into-sets -open import foundation.universe-levels -open import foundation.whiskering-homotopies-composition - -open import group-theory.commutative-monoids -open import group-theory.monoids -open import group-theory.products-monoids - -open import linear-algebra.vectors-on-commutative-monoids - -open import lists.lists - -open import univalent-combinatorics.coproduct-types -open import univalent-combinatorics.counting -open import univalent-combinatorics.finite-types -open import univalent-combinatorics.standard-finite-types -``` - -
- -## Idea - -The product operation extends the binary multiplication operation on a -[commutative monoid](group-theory.commutative-monoids.md) `M` to any family of -elements of `M` indexed by a -[standard finite type](univalent-combinatorics.standard-finite-types.md), or to -any [finite type](univalent-combinatorics.finite-types.md). - -## Definition - -```agda -product-Commutative-Monoid : - {l : Level} (M : Commutative-Monoid l) (n : ℕ) → - (functional-vec-Commutative-Monoid M n) → type-Commutative-Monoid M -product-Commutative-Monoid M = - product-Monoid (monoid-Commutative-Monoid M) -``` - -## Properties - -### Products of one and two elements - -```agda -module _ - {l : Level} (M : Commutative-Monoid l) - where - - product-one-element-Commutative-Monoid : - (f : functional-vec-Commutative-Monoid M 1) → - product-Commutative-Monoid M 1 f = - head-functional-vec-Commutative-Monoid M 0 f - product-one-element-Commutative-Monoid = - product-one-element-Monoid (monoid-Commutative-Monoid M) - - product-two-elements-Commutative-Monoid : - (f : functional-vec-Commutative-Monoid M 2) → - product-Commutative-Monoid M 2 f = - mul-Commutative-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)) - product-two-elements-Commutative-Monoid = - product-two-elements-Monoid (monoid-Commutative-Monoid M) -``` - -### Products are homotopy invariant - -```agda -module _ - {l : Level} (M : Commutative-Monoid l) - where - - htpy-product-Commutative-Monoid : - (n : ℕ) {f g : functional-vec-Commutative-Monoid M n} → - (f ~ g) → - product-Commutative-Monoid M n f = product-Commutative-Monoid M n g - htpy-product-Commutative-Monoid = - htpy-product-Monoid (monoid-Commutative-Monoid M) -``` - -### Products are equal to the zero-th term plus the rest - -```agda -module _ - {l : Level} (M : Commutative-Monoid l) - where - - cons-product-Commutative-Monoid : - (n : ℕ) (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → - {x : type-Commutative-Monoid M} → - head-functional-vec-Commutative-Monoid M n f = x → - product-Commutative-Monoid M (succ-ℕ n) f = - mul-Commutative-Monoid M (product-Commutative-Monoid M n (f ∘ inl-Fin n)) x - cons-product-Commutative-Monoid = - cons-product-Monoid (monoid-Commutative-Monoid M) - - snoc-product-Commutative-Monoid : - (n : ℕ) (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → - {x : type-Commutative-Monoid M} → f (zero-Fin n) = x → - product-Commutative-Monoid M (succ-ℕ n) f = - mul-Commutative-Monoid M - ( x) - ( product-Commutative-Monoid M n (f ∘ inr-Fin n)) - snoc-product-Commutative-Monoid = - snoc-product-Monoid (monoid-Commutative-Monoid M) -``` - -### Extending a product of elements in a monoid - -```agda -module _ - {l : Level} (M : Commutative-Monoid l) - where - - extend-product-Commutative-Monoid : - (n : ℕ) (f : functional-vec-Commutative-Monoid M n) → - product-Commutative-Monoid M - ( succ-ℕ n) - ( cons-functional-vec-Commutative-Monoid - ( M) - ( n) - ( unit-Commutative-Monoid M) f) = - product-Commutative-Monoid M n f - extend-product-Commutative-Monoid = - extend-product-Monoid (monoid-Commutative-Monoid M) -``` - -### Shifting a product of elements in a monoid - -```agda -module _ - {l : Level} (M : Commutative-Monoid l) - where - - shift-product-Commutative-Monoid : - (n : ℕ) (f : functional-vec-Commutative-Monoid M n) → - product-Commutative-Monoid M - ( succ-ℕ n) - ( snoc-functional-vec-Commutative-Monoid M n f - ( unit-Commutative-Monoid M)) = - product-Commutative-Monoid M n f - shift-product-Commutative-Monoid = - shift-product-Monoid (monoid-Commutative-Monoid M) -``` - -### A product of units is the unit - -```agda -module _ - {l : Level} (M : Commutative-Monoid l) - where - - product-unit-Commutative-Monoid : - (n : ℕ) → - product-Commutative-Monoid - ( M) - ( n) - ( unit-functional-vec-Commutative-Monoid M n) = - unit-Commutative-Monoid M - product-unit-Commutative-Monoid = - product-unit-Monoid (monoid-Commutative-Monoid M) -``` - -### Splitting products - -```agda -split-product-Commutative-Monoid : - {l : Level} (M : Commutative-Monoid l) - (n m : ℕ) (f : functional-vec-Commutative-Monoid M (n +ℕ m)) → - product-Commutative-Monoid M (n +ℕ m) f = - mul-Commutative-Monoid M - ( product-Commutative-Monoid M n (f ∘ inl-coproduct-Fin n m)) - ( product-Commutative-Monoid M m (f ∘ inr-coproduct-Fin n m)) -split-product-Commutative-Monoid M = - split-product-Monoid (monoid-Commutative-Monoid M) -``` - -### Permutations preserve products - -```agda -module _ - {l : Level} (M : Commutative-Monoid l) - where - - abstract - preserves-product-adjacent-transposition-product-Commutative-Monoid : - (n : ℕ) → (k : Fin n) → - (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → - product-Commutative-Monoid M (succ-ℕ n) f = - product-Commutative-Monoid - M (succ-ℕ n) (f ∘ map-adjacent-transposition-Fin n k) - preserves-product-adjacent-transposition-product-Commutative-Monoid - (succ-ℕ n) (inl x) f = - ap-mul-Commutative-Monoid - ( M) - ( preserves-product-adjacent-transposition-product-Commutative-Monoid - ( n) - ( x) - ( f ∘ inl-Fin (succ-ℕ n))) - ( refl) - preserves-product-adjacent-transposition-product-Commutative-Monoid - (succ-ℕ n) (inr star) f = right-swap-mul-Commutative-Monoid M _ _ _ - - preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid : - (n : ℕ) → (L : list (Fin n)) → - (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → - product-Commutative-Monoid M (succ-ℕ n) f = - product-Commutative-Monoid - M (succ-ℕ n) (f ∘ map-permutation-list-adjacent-transpositions n L) - preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid - n nil f = refl - preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid - n (cons x L) f = - preserves-product-adjacent-transposition-product-Commutative-Monoid - ( n) - ( x) - ( f) ∙ - preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid - ( n) - ( L) - ( f ∘ map-adjacent-transposition-Fin n x) - - preserves-product-transposition-Commutative-Monoid : - (n : ℕ) (i j : Fin (succ-ℕ n)) (neq : i ≠ j) → - (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → - product-Commutative-Monoid M (succ-ℕ n) f = - product-Commutative-Monoid - M (succ-ℕ n) (f ∘ map-transposition-Fin (succ-ℕ n) i j neq) - preserves-product-transposition-Commutative-Monoid n i j i≠j f = - preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid - ( n) - ( list-adjacent-transpositions-transposition-Fin n i j) - ( f) ∙ - ap - ( λ g → product-Commutative-Monoid M (succ-ℕ n) (f ∘ map-equiv g)) - ( eq-permutation-list-adjacent-transpositions-transposition-Fin - ( n) - ( i) - ( j) - ( i≠j)) - - preserves-product-permutation-list-standard-transpositions-Commutative-Monoid : - (n : ℕ) → (L : list (Σ (Fin n × Fin n) ( λ (i , j) → i ≠ j))) → - (f : functional-vec-Commutative-Monoid M n) → - product-Commutative-Monoid M n f = - product-Commutative-Monoid - M n (f ∘ map-equiv (permutation-list-standard-transpositions-Fin n L)) - preserves-product-permutation-list-standard-transpositions-Commutative-Monoid - zero-ℕ _ _ = refl - preserves-product-permutation-list-standard-transpositions-Commutative-Monoid - (succ-ℕ n) nil f = refl - preserves-product-permutation-list-standard-transpositions-Commutative-Monoid - (succ-ℕ n) (cons ((i , j) , i≠j) L) f = - preserves-product-transposition-Commutative-Monoid n i j i≠j f ∙ - preserves-product-permutation-list-standard-transpositions-Commutative-Monoid - ( succ-ℕ n) - ( L) - ( f ∘ map-transposition-Fin (succ-ℕ n) i j i≠j) - - preserves-product-permutation-Commutative-Monoid : - (n : ℕ) → (σ : Permutation n) → - (f : functional-vec-Commutative-Monoid M n) → - product-Commutative-Monoid M n f = - product-Commutative-Monoid M n (f ∘ map-equiv σ) - preserves-product-permutation-Commutative-Monoid n σ f = - preserves-product-permutation-list-standard-transpositions-Commutative-Monoid - ( n) - ( list-standard-transpositions-permutation-Fin n σ) - ( f) ∙ - ap - ( λ τ → product-Commutative-Monoid M n (f ∘ map-equiv τ)) - ( eq-permutation-list-standard-transpositions-Fin n σ) -``` - -### Products for a count for a type - -```agda -product-count-Commutative-Monoid : - {l1 l2 : Level} (M : Commutative-Monoid l1) (A : UU l2) → - count A → (A → type-Commutative-Monoid M) → type-Commutative-Monoid M -product-count-Commutative-Monoid M A (n , Fin-n≃A) f = - product-Commutative-Monoid M n (f ∘ map-equiv Fin-n≃A) -``` - -### Two counts for the same set produce equal products - -```agda -module _ - {l1 l2 : Level} (M : Commutative-Monoid l1) (A : UU l2) - where - - abstract - eq-product-count-equiv-Commutative-Monoid : - (n : ℕ) → (equiv1 equiv2 : Fin n ≃ A) → - (f : A → type-Commutative-Monoid M) → - product-count-Commutative-Monoid M A (n , equiv1) f = - product-count-Commutative-Monoid M A (n , equiv2) f - eq-product-count-equiv-Commutative-Monoid n equiv1 equiv2 f = - equational-reasoning - product-Commutative-Monoid M n (f ∘ map-equiv equiv1) - = - product-Commutative-Monoid - ( M) - ( n) - ( (f ∘ map-equiv equiv1) ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2)) - by - preserves-product-permutation-Commutative-Monoid - ( M) - ( n) - ( inv-equiv equiv1 ∘e equiv2) - ( f ∘ map-equiv equiv1) - = - product-Commutative-Monoid - ( M) - ( n) - ( f ∘ (map-equiv equiv1 ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2))) - by - ap - ( product-Commutative-Monoid M n) - ( associative-comp f (map-equiv equiv1) _) - = - product-Commutative-Monoid - ( M) - ( n) - ( f ∘ ((map-equiv equiv1 ∘ map-inv-equiv equiv1) ∘ map-equiv equiv2)) - by - ap - ( λ g → product-Commutative-Monoid M n (f ∘ g)) - ( inv - ( associative-comp (map-equiv equiv1) (map-inv-equiv equiv1) _)) - = product-Commutative-Monoid M n (f ∘ map-equiv equiv2) - by - ap - ( λ g → product-Commutative-Monoid M n (f ∘ (g ∘ map-equiv equiv2))) - ( eq-htpy (is-section-map-inv-equiv equiv1)) - - eq-product-count-Commutative-Monoid : - (f : A → type-Commutative-Monoid M) (c1 c2 : count A) → - product-count-Commutative-Monoid M A c1 f = - product-count-Commutative-Monoid M A c2 f - eq-product-count-Commutative-Monoid f c1@(n , e1) c2@(_ , e2) - with eq-number-of-elements-count A c1 c2 - ... | refl = eq-product-count-equiv-Commutative-Monoid n e1 e2 f -``` - -### Products over finite types - -```agda -module _ - {l1 l2 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) - where - - product-finite-Commutative-Monoid : - (f : type-Finite-Type A → type-Commutative-Monoid M) → - type-Commutative-Monoid M - product-finite-Commutative-Monoid f = - map-universal-property-set-quotient-trunc-Prop - ( set-Commutative-Monoid M) - ( λ c → product-count-Commutative-Monoid M (type-Finite-Type A) c f) - ( eq-product-count-Commutative-Monoid M (type-Finite-Type A) f) - ( is-finite-type-Finite-Type A) -``` - -### Products over finite types are preserved by equivalences - -```agda -module _ - {l1 l2 l3 : Level} (M : Commutative-Monoid l1) - (A : UU l2) (B : UU l3) (H : A ≃ B) - where - - abstract - product-equiv-count-Commutative-Monoid : - (cA : count A) (cB : count B) (f : B → type-Commutative-Monoid M) → - product-count-Commutative-Monoid M B cB f = - product-count-Commutative-Monoid M A cA (f ∘ map-equiv H) - product-equiv-count-Commutative-Monoid - cA@(_ , Fin-nA≃A) cB@(nB , Fin-nB≃B) f - with eq-number-of-elements-count-equiv A B H cA cB - ... | refl = - preserves-product-permutation-Commutative-Monoid - ( M) - ( nB) - ( inv-equiv Fin-nB≃B ∘e H ∘e Fin-nA≃A) - ( f ∘ map-equiv Fin-nB≃B) ∙ - ap - ( λ g → - product-Commutative-Monoid - ( M) - ( nB) - ((f ∘ g) ∘ (map-equiv (H ∘e Fin-nA≃A)))) - ( eq-htpy (is-section-map-inv-equiv Fin-nB≃B)) - -module _ - {l1 l2 : Level} (M : Commutative-Monoid l1) - (A : Finite-Type l2) (cA : count (type-Finite-Type A)) - where - - abstract - eq-product-finite-count-Commutative-Monoid : - (f : type-Finite-Type A → type-Commutative-Monoid M) → - product-finite-Commutative-Monoid M A f = - product-count-Commutative-Monoid M (type-Finite-Type A) cA f - eq-product-finite-count-Commutative-Monoid f = - equational-reasoning - product-finite-Commutative-Monoid M A f - = - product-finite-Commutative-Monoid - ( M) - ( type-Finite-Type A , unit-trunc-Prop cA) - ( f) - by - ap - ( λ c → - product-finite-Commutative-Monoid - ( M) - ( type-Finite-Type A , c) - ( f)) - ( all-elements-equal-type-trunc-Prop - ( is-finite-type-Finite-Type A) - ( unit-trunc-Prop cA)) - = product-count-Commutative-Monoid M (type-Finite-Type A) cA f - by - htpy-universal-property-set-quotient-trunc-Prop - ( set-Commutative-Monoid M) - ( λ c → - product-count-Commutative-Monoid M (type-Finite-Type A) c f) - ( eq-product-count-Commutative-Monoid M (type-Finite-Type A) f) - ( cA) - -module _ - {l1 l2 l3 : Level} (M : Commutative-Monoid l1) - (A : Finite-Type l2) (B : Finite-Type l3) - (H : equiv-Finite-Type A B) - where - - abstract - product-equiv-finite-Commutative-Monoid : - (f : type-Finite-Type B → type-Commutative-Monoid M) → - product-finite-Commutative-Monoid M B f = - product-finite-Commutative-Monoid M A (f ∘ map-equiv H) - product-equiv-finite-Commutative-Monoid f = - do - cA ← is-finite-type-Finite-Type A - cB ← is-finite-type-Finite-Type B - equational-reasoning - product-finite-Commutative-Monoid M B f - = product-count-Commutative-Monoid M (type-Finite-Type B) cB f - by eq-product-finite-count-Commutative-Monoid M B cB f - = - product-count-Commutative-Monoid - ( M) - ( type-Finite-Type A) - ( cA) - ( f ∘ map-equiv H) - by - product-equiv-count-Commutative-Monoid - ( M) - ( type-Finite-Type A) - ( type-Finite-Type B) - ( H) - ( cA) - ( cB) - ( f) - = product-finite-Commutative-Monoid M A (f ∘ map-equiv H) - by - inv - ( eq-product-finite-count-Commutative-Monoid - ( M) - ( A) - ( cA) - ( f ∘ map-equiv H)) - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Commutative-Monoid M) - ( product-finite-Commutative-Monoid M B f) - ( product-finite-Commutative-Monoid M A (f ∘ map-equiv H))) -``` - -### Products over finite types distribute over coproducts - -```agda -module _ - {l1 l2 l3 : Level} (M : Commutative-Monoid l1) - (A : Finite-Type l2) (B : Finite-Type l3) - where - - abstract - product-coproduct-finite-Commutative-Monoid : - (f : - type-Finite-Type A + type-Finite-Type B → type-Commutative-Monoid M) → - product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f = - mul-Commutative-Monoid - ( M) - ( product-finite-Commutative-Monoid M A (f ∘ inl)) - ( product-finite-Commutative-Monoid M B (f ∘ inr)) - product-coproduct-finite-Commutative-Monoid f = - do - cA@(nA , Fin-nA≃A) ← is-finite-type-Finite-Type A - cB@(nB , Fin-nB≃B) ← is-finite-type-Finite-Type B - equational-reasoning - product-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f - = - product-Commutative-Monoid - ( M) - ( nA +ℕ nB) - ( f ∘ map-equiv-count (count-coproduct cA cB)) - by - eq-product-finite-count-Commutative-Monoid - ( M) - ( coproduct-Finite-Type A B) - ( count-coproduct cA cB) - ( f) - = - mul-Commutative-Monoid M - ( product-Commutative-Monoid - ( M) - ( nA) - ( f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inl-coproduct-Fin nA nB)) - ( product-Commutative-Monoid - ( M) - ( nB) - ( f ∘ - map-equiv-count (count-coproduct cA cB) ∘ - inr-coproduct-Fin nA nB)) - by - split-product-Commutative-Monoid - ( M) - ( nA) - ( nB) - ( f ∘ map-equiv-count (count-coproduct cA cB)) - = - mul-Commutative-Monoid - ( M) - ( product-Commutative-Monoid - ( M) - ( nA) - ( f ∘ inl ∘ map-equiv-count cA)) - ( product-Commutative-Monoid - ( M) - ( nB) - ( f ∘ inr ∘ map-equiv-count cB)) - by - ap-mul-Commutative-Monoid - ( M) - ( ap - ( λ g → product-Commutative-Monoid M nA (f ∘ g)) - ( eq-htpy - ( map-equiv-count-coproduct-inl-coproduct-Fin cA cB))) - ( ap - ( λ g → product-Commutative-Monoid M nB (f ∘ g)) - ( eq-htpy - ( map-equiv-count-coproduct-inr-coproduct-Fin cA cB))) - = - mul-Commutative-Monoid - ( M) - ( product-finite-Commutative-Monoid M A (f ∘ inl)) - ( product-finite-Commutative-Monoid M B (f ∘ inr)) - by - inv - ( ap-mul-Commutative-Monoid - ( M) - ( eq-product-finite-count-Commutative-Monoid - ( M) - ( A) - ( cA) - ( f ∘ inl)) - ( eq-product-finite-count-Commutative-Monoid - ( M) - ( B) - ( cB) - ( f ∘ inr))) - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Commutative-Monoid M) - ( product-finite-Commutative-Monoid - ( M) - ( coproduct-Finite-Type A B) - ( f)) - ( mul-Commutative-Monoid - ( M) - ( product-finite-Commutative-Monoid M A (f ∘ inl)) - ( product-finite-Commutative-Monoid M B (f ∘ inr)))) -``` diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 120ca6b54c..f669683594 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -1,22 +1,49 @@ # Products of tuples of elements in commutative monoids ```agda +{-# OPTIONS --lossy-unification #-} + module group-theory.products-of-tuples-of-elements-commutative-monoids where ```
Imports ```agda +open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers +open import finite-group-theory.permutations-standard-finite-types +open import finite-group-theory.transpositions-standard-finite-types + +open import foundation.action-on-identifications-functions +open import foundation.cartesian-product-types open import foundation.coproduct-types +open import foundation.dependent-pair-types +open import foundation.equivalences +open import foundation.function-extensionality open import foundation.function-types +open import foundation.functoriality-coproduct-types +open import foundation.homotopies +open import foundation.identity-types +open import foundation.negated-equality +open import foundation.propositional-truncations +open import foundation.sets open import foundation.unit-type +open import foundation.universal-property-propositional-truncation-into-sets open import foundation.universe-levels +open import foundation.whiskering-homotopies-composition open import group-theory.commutative-monoids +open import group-theory.monoids +open import group-theory.products-of-tuples-of-elements-monoids + +open import linear-algebra.vectors-on-commutative-monoids + +open import lists.lists +open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.counting +open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -24,60 +51,568 @@ open import univalent-combinatorics.standard-finite-types ## Idea -Given an unordered `n`-tuple of elements in a commutative monoid, we can define -their product. +The product operation extends the binary multiplication operation on a +[commutative monoid](group-theory.commutative-monoids.md) `M` to any family of +elements of `M` indexed by a +[standard finite type](univalent-combinatorics.standard-finite-types.md), or to +any [finite type](univalent-combinatorics.finite-types.md). ## Definition -### Products of ordered n-tuples of elements in commutative monoids +```agda +mul-fin-Commutative-Monoid : + {l : Level} (M : Commutative-Monoid l) (n : ℕ) → + (functional-vec-Commutative-Monoid M n) → type-Commutative-Monoid M +mul-fin-Commutative-Monoid M = + mul-fin-Monoid (monoid-Commutative-Monoid M) +``` + +## Properties + +### Products of one and two elements + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + product-one-element-Commutative-Monoid : + (f : functional-vec-Commutative-Monoid M 1) → + mul-fin-Commutative-Monoid M 1 f = + head-functional-vec-Commutative-Monoid M 0 f + product-one-element-Commutative-Monoid = + product-one-element-Monoid (monoid-Commutative-Monoid M) + + product-two-elements-Commutative-Monoid : + (f : functional-vec-Commutative-Monoid M 2) → + mul-fin-Commutative-Monoid M 2 f = + mul-Commutative-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)) + product-two-elements-Commutative-Monoid = + product-two-elements-Monoid (monoid-Commutative-Monoid M) +``` + +### Products are homotopy invariant + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + htpy-mul-fin-Commutative-Monoid : + (n : ℕ) {f g : functional-vec-Commutative-Monoid M n} → + (f ~ g) → + mul-fin-Commutative-Monoid M n f = mul-fin-Commutative-Monoid M n g + htpy-mul-fin-Commutative-Monoid = + htpy-mul-fin-Monoid (monoid-Commutative-Monoid M) +``` + +### Products are equal to the zero-th term plus the rest ```agda module _ {l : Level} (M : Commutative-Monoid l) where - mul-fin-Commutative-Monoid : - (n : ℕ) → (Fin n → type-Commutative-Monoid M) → type-Commutative-Monoid M - mul-fin-Commutative-Monoid zero-ℕ x = unit-Commutative-Monoid M - mul-fin-Commutative-Monoid (succ-ℕ n) x = + cons-mul-fin-Commutative-Monoid : + (n : ℕ) (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + {x : type-Commutative-Monoid M} → + head-functional-vec-Commutative-Monoid M n f = x → + mul-fin-Commutative-Monoid M (succ-ℕ n) f = + mul-Commutative-Monoid M (mul-fin-Commutative-Monoid M n (f ∘ inl-Fin n)) x + cons-mul-fin-Commutative-Monoid = + cons-mul-fin-Monoid (monoid-Commutative-Monoid M) + + snoc-mul-fin-Commutative-Monoid : + (n : ℕ) (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + {x : type-Commutative-Monoid M} → f (zero-Fin n) = x → + mul-fin-Commutative-Monoid M (succ-ℕ n) f = mul-Commutative-Monoid M - ( mul-fin-Commutative-Monoid n (x ∘ inl)) - ( x (inr star)) + ( x) + ( mul-fin-Commutative-Monoid M n (f ∘ inr-Fin n)) + snoc-mul-fin-Commutative-Monoid = + snoc-mul-fin-Monoid (monoid-Commutative-Monoid M) +``` + +### Extending a product of elements in a monoid + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + extend-mul-fin-Commutative-Monoid : + (n : ℕ) (f : functional-vec-Commutative-Monoid M n) → + mul-fin-Commutative-Monoid M + ( succ-ℕ n) + ( cons-functional-vec-Commutative-Monoid + ( M) + ( n) + ( unit-Commutative-Monoid M) f) = + mul-fin-Commutative-Monoid M n f + extend-mul-fin-Commutative-Monoid = + extend-mul-fin-Monoid (monoid-Commutative-Monoid M) +``` + +### Shifting a product of elements in a monoid + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + shift-mul-fin-Commutative-Monoid : + (n : ℕ) (f : functional-vec-Commutative-Monoid M n) → + mul-fin-Commutative-Monoid M + ( succ-ℕ n) + ( snoc-functional-vec-Commutative-Monoid M n f + ( unit-Commutative-Monoid M)) = + mul-fin-Commutative-Monoid M n f + shift-mul-fin-Commutative-Monoid = + shift-mul-fin-Monoid (monoid-Commutative-Monoid M) +``` + +### A product of units is the unit + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where - mul-count-Commutative-Monoid : - {l2 : Level} {A : UU l2} → count A → - (A → type-Commutative-Monoid M) → type-Commutative-Monoid M - mul-count-Commutative-Monoid e x = + product-unit-Commutative-Monoid : + (n : ℕ) → mul-fin-Commutative-Monoid - ( number-of-elements-count e) - ( x ∘ map-equiv-count e) + ( M) + ( n) + ( unit-functional-vec-Commutative-Monoid M n) = + unit-Commutative-Monoid M + product-unit-Commutative-Monoid = + product-unit-Monoid (monoid-Commutative-Monoid M) +``` -{- - compute-permutation-mul-fin-Commutative-Monoid : - (n : ℕ) (e : Fin n ≃ Fin n) (x : Fin n → type-Commutative-Monoid M) → - Id ( mul-fin-Commutative-Monoid n (x ∘ map-equiv e)) - ( mul-fin-Commutative-Monoid n x) - compute-permutation-mul-fin-Commutative-Monoid zero-ℕ e x = refl - compute-permutation-mul-fin-Commutative-Monoid (succ-ℕ n) e x = {!!} +### Splitting products - compute-mul-double-counting-Commutative-Monoid : - {l2 : Level} {A : UU l2} (e1 : count A) (e2 : count A) → - (x : A → type-Commutative-Monoid M) → - Id (mul-count-Commutative-Monoid e1 x) (mul-count-Commutative-Monoid e2 x) - compute-mul-double-counting-Commutative-Monoid e1 e2 x = {!!} --} +```agda +split-mul-fin-Commutative-Monoid : + {l : Level} (M : Commutative-Monoid l) + (n m : ℕ) (f : functional-vec-Commutative-Monoid M (n +ℕ m)) → + mul-fin-Commutative-Monoid M (n +ℕ m) f = + mul-Commutative-Monoid M + ( mul-fin-Commutative-Monoid M n (f ∘ inl-coproduct-Fin n m)) + ( mul-fin-Commutative-Monoid M m (f ∘ inr-coproduct-Fin n m)) +split-mul-fin-Commutative-Monoid M = + split-mul-fin-Monoid (monoid-Commutative-Monoid M) ``` -### Products of unordered n-tuples of elements in commutative monoids +### Permutations preserve products ```agda module _ {l : Level} (M : Commutative-Monoid l) where -{- - mul-tuple-Commutative-Monoid : - {n : ℕ} → unordered-tuple-Commutative-Monoid n M → type-Commutative-Monoid M - mul-tuple-Commutative-Monoid {n} (pair I x) = {!!} --} + abstract + preserves-product-adjacent-transposition-mul-fin-Commutative-Monoid : + (n : ℕ) → (k : Fin n) → + (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + mul-fin-Commutative-Monoid M (succ-ℕ n) f = + mul-fin-Commutative-Monoid + M (succ-ℕ n) (f ∘ map-adjacent-transposition-Fin n k) + preserves-product-adjacent-transposition-mul-fin-Commutative-Monoid + (succ-ℕ n) (inl x) f = + ap-mul-Commutative-Monoid + ( M) + ( preserves-product-adjacent-transposition-mul-fin-Commutative-Monoid + ( n) + ( x) + ( f ∘ inl-Fin (succ-ℕ n))) + ( refl) + preserves-product-adjacent-transposition-mul-fin-Commutative-Monoid + (succ-ℕ n) (inr star) f = right-swap-mul-Commutative-Monoid M _ _ _ + + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid : + (n : ℕ) → (L : list (Fin n)) → + (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + mul-fin-Commutative-Monoid M (succ-ℕ n) f = + mul-fin-Commutative-Monoid + M (succ-ℕ n) (f ∘ map-permutation-list-adjacent-transpositions n L) + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid + n nil f = refl + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid + n (cons x L) f = + preserves-product-adjacent-transposition-mul-fin-Commutative-Monoid + ( n) + ( x) + ( f) ∙ + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid + ( n) + ( L) + ( f ∘ map-adjacent-transposition-Fin n x) + + preserves-product-transposition-Commutative-Monoid : + (n : ℕ) (i j : Fin (succ-ℕ n)) (neq : i ≠ j) → + (f : functional-vec-Commutative-Monoid M (succ-ℕ n)) → + mul-fin-Commutative-Monoid M (succ-ℕ n) f = + mul-fin-Commutative-Monoid + M (succ-ℕ n) (f ∘ map-transposition-Fin (succ-ℕ n) i j neq) + preserves-product-transposition-Commutative-Monoid n i j i≠j f = + preserves-product-permutation-list-adjacent-transpositions-Commutative-Monoid + ( n) + ( list-adjacent-transpositions-transposition-Fin n i j) + ( f) ∙ + ap + ( λ g → mul-fin-Commutative-Monoid M (succ-ℕ n) (f ∘ map-equiv g)) + ( eq-permutation-list-adjacent-transpositions-transposition-Fin + ( n) + ( i) + ( j) + ( i≠j)) + + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid : + (n : ℕ) → (L : list (Σ (Fin n × Fin n) ( λ (i , j) → i ≠ j))) → + (f : functional-vec-Commutative-Monoid M n) → + mul-fin-Commutative-Monoid M n f = + mul-fin-Commutative-Monoid + M n (f ∘ map-equiv (permutation-list-standard-transpositions-Fin n L)) + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + zero-ℕ _ _ = refl + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + (succ-ℕ n) nil f = refl + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + (succ-ℕ n) (cons ((i , j) , i≠j) L) f = + preserves-product-transposition-Commutative-Monoid n i j i≠j f ∙ + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + ( succ-ℕ n) + ( L) + ( f ∘ map-transposition-Fin (succ-ℕ n) i j i≠j) + + preserves-product-permutation-Commutative-Monoid : + (n : ℕ) → (σ : Permutation n) → + (f : functional-vec-Commutative-Monoid M n) → + mul-fin-Commutative-Monoid M n f = + mul-fin-Commutative-Monoid M n (f ∘ map-equiv σ) + preserves-product-permutation-Commutative-Monoid n σ f = + preserves-product-permutation-list-standard-transpositions-Commutative-Monoid + ( n) + ( list-standard-transpositions-permutation-Fin n σ) + ( f) ∙ + ap + ( λ τ → mul-fin-Commutative-Monoid M n (f ∘ map-equiv τ)) + ( eq-permutation-list-standard-transpositions-Fin n σ) +``` + +### Products for a count for a type + +```agda +product-count-Commutative-Monoid : + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : UU l2) → + count A → (A → type-Commutative-Monoid M) → type-Commutative-Monoid M +product-count-Commutative-Monoid M A (n , Fin-n≃A) f = + mul-fin-Commutative-Monoid M n (f ∘ map-equiv Fin-n≃A) +``` + +### Two counts for the same set produce equal products + +```agda +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : UU l2) + where + + abstract + eq-product-count-equiv-Commutative-Monoid : + (n : ℕ) → (equiv1 equiv2 : Fin n ≃ A) → + (f : A → type-Commutative-Monoid M) → + product-count-Commutative-Monoid M A (n , equiv1) f = + product-count-Commutative-Monoid M A (n , equiv2) f + eq-product-count-equiv-Commutative-Monoid n equiv1 equiv2 f = + equational-reasoning + mul-fin-Commutative-Monoid M n (f ∘ map-equiv equiv1) + = + mul-fin-Commutative-Monoid + ( M) + ( n) + ( (f ∘ map-equiv equiv1) ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2)) + by + preserves-product-permutation-Commutative-Monoid + ( M) + ( n) + ( inv-equiv equiv1 ∘e equiv2) + ( f ∘ map-equiv equiv1) + = + mul-fin-Commutative-Monoid + ( M) + ( n) + ( f ∘ (map-equiv equiv1 ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2))) + by + ap + ( mul-fin-Commutative-Monoid M n) + ( associative-comp f (map-equiv equiv1) _) + = + mul-fin-Commutative-Monoid + ( M) + ( n) + ( f ∘ ((map-equiv equiv1 ∘ map-inv-equiv equiv1) ∘ map-equiv equiv2)) + by + ap + ( λ g → mul-fin-Commutative-Monoid M n (f ∘ g)) + ( inv + ( associative-comp (map-equiv equiv1) (map-inv-equiv equiv1) _)) + = mul-fin-Commutative-Monoid M n (f ∘ map-equiv equiv2) + by + ap + ( λ g → mul-fin-Commutative-Monoid M n (f ∘ (g ∘ map-equiv equiv2))) + ( eq-htpy (is-section-map-inv-equiv equiv1)) + + eq-product-count-Commutative-Monoid : + (f : A → type-Commutative-Monoid M) (c1 c2 : count A) → + product-count-Commutative-Monoid M A c1 f = + product-count-Commutative-Monoid M A c2 f + eq-product-count-Commutative-Monoid f c1@(n , e1) c2@(_ , e2) + with eq-number-of-elements-count A c1 c2 + ... | refl = eq-product-count-equiv-Commutative-Monoid n e1 e2 f +``` + +### Products over finite types + +```agda +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) + where + + mul-finite-Commutative-Monoid : + (f : type-Finite-Type A → type-Commutative-Monoid M) → + type-Commutative-Monoid M + mul-finite-Commutative-Monoid f = + map-universal-property-set-quotient-trunc-Prop + ( set-Commutative-Monoid M) + ( λ c → product-count-Commutative-Monoid M (type-Finite-Type A) c f) + ( eq-product-count-Commutative-Monoid M (type-Finite-Type A) f) + ( is-finite-type-Finite-Type A) +``` + +### Products over finite types are preserved by equivalences + +```agda +module _ + {l1 l2 l3 : Level} (M : Commutative-Monoid l1) + (A : UU l2) (B : UU l3) (H : A ≃ B) + where + + abstract + product-equiv-count-Commutative-Monoid : + (cA : count A) (cB : count B) (f : B → type-Commutative-Monoid M) → + product-count-Commutative-Monoid M B cB f = + product-count-Commutative-Monoid M A cA (f ∘ map-equiv H) + product-equiv-count-Commutative-Monoid + cA@(_ , Fin-nA≃A) cB@(nB , Fin-nB≃B) f + with eq-number-of-elements-count-equiv A B H cA cB + ... | refl = + preserves-product-permutation-Commutative-Monoid + ( M) + ( nB) + ( inv-equiv Fin-nB≃B ∘e H ∘e Fin-nA≃A) + ( f ∘ map-equiv Fin-nB≃B) ∙ + ap + ( λ g → + mul-fin-Commutative-Monoid + ( M) + ( nB) + ((f ∘ g) ∘ (map-equiv (H ∘e Fin-nA≃A)))) + ( eq-htpy (is-section-map-inv-equiv Fin-nB≃B)) + +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) + (A : Finite-Type l2) (cA : count (type-Finite-Type A)) + where + + abstract + eq-product-finite-count-Commutative-Monoid : + (f : type-Finite-Type A → type-Commutative-Monoid M) → + mul-finite-Commutative-Monoid M A f = + product-count-Commutative-Monoid M (type-Finite-Type A) cA f + eq-product-finite-count-Commutative-Monoid f = + equational-reasoning + mul-finite-Commutative-Monoid M A f + = + mul-finite-Commutative-Monoid + ( M) + ( type-Finite-Type A , unit-trunc-Prop cA) + ( f) + by + ap + ( λ c → + mul-finite-Commutative-Monoid + ( M) + ( type-Finite-Type A , c) + ( f)) + ( all-elements-equal-type-trunc-Prop + ( is-finite-type-Finite-Type A) + ( unit-trunc-Prop cA)) + = product-count-Commutative-Monoid M (type-Finite-Type A) cA f + by + htpy-universal-property-set-quotient-trunc-Prop + ( set-Commutative-Monoid M) + ( λ c → + product-count-Commutative-Monoid M (type-Finite-Type A) c f) + ( eq-product-count-Commutative-Monoid M (type-Finite-Type A) f) + ( cA) + +module _ + {l1 l2 l3 : Level} (M : Commutative-Monoid l1) + (A : Finite-Type l2) (B : Finite-Type l3) + (H : equiv-Finite-Type A B) + where + + abstract + product-equiv-finite-Commutative-Monoid : + (f : type-Finite-Type B → type-Commutative-Monoid M) → + mul-finite-Commutative-Monoid M B f = + mul-finite-Commutative-Monoid M A (f ∘ map-equiv H) + product-equiv-finite-Commutative-Monoid f = + do + cA ← is-finite-type-Finite-Type A + cB ← is-finite-type-Finite-Type B + equational-reasoning + mul-finite-Commutative-Monoid M B f + = product-count-Commutative-Monoid M (type-Finite-Type B) cB f + by eq-product-finite-count-Commutative-Monoid M B cB f + = + product-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( cA) + ( f ∘ map-equiv H) + by + product-equiv-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( type-Finite-Type B) + ( H) + ( cA) + ( cB) + ( f) + = mul-finite-Commutative-Monoid M A (f ∘ map-equiv H) + by + inv + ( eq-product-finite-count-Commutative-Monoid + ( M) + ( A) + ( cA) + ( f ∘ map-equiv H)) + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( mul-finite-Commutative-Monoid M B f) + ( mul-finite-Commutative-Monoid M A (f ∘ map-equiv H))) +``` + +### Products over finite types distribute over coproducts + +```agda +module _ + {l1 l2 l3 : Level} (M : Commutative-Monoid l1) + (A : Finite-Type l2) (B : Finite-Type l3) + where + + abstract + mul-coproduct-finite-Commutative-Monoid : + (f : + type-Finite-Type A + type-Finite-Type B → type-Commutative-Monoid M) → + mul-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f = + mul-Commutative-Monoid + ( M) + ( mul-finite-Commutative-Monoid M A (f ∘ inl)) + ( mul-finite-Commutative-Monoid M B (f ∘ inr)) + mul-coproduct-finite-Commutative-Monoid f = + do + cA@(nA , Fin-nA≃A) ← is-finite-type-Finite-Type A + cB@(nB , Fin-nB≃B) ← is-finite-type-Finite-Type B + equational-reasoning + mul-finite-Commutative-Monoid M (coproduct-Finite-Type A B) f + = + mul-fin-Commutative-Monoid + ( M) + ( nA +ℕ nB) + ( f ∘ map-equiv-count (count-coproduct cA cB)) + by + eq-product-finite-count-Commutative-Monoid + ( M) + ( coproduct-Finite-Type A B) + ( count-coproduct cA cB) + ( f) + = + mul-Commutative-Monoid M + ( mul-fin-Commutative-Monoid + ( M) + ( nA) + ( f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inl-coproduct-Fin nA nB)) + ( mul-fin-Commutative-Monoid + ( M) + ( nB) + ( f ∘ + map-equiv-count (count-coproduct cA cB) ∘ + inr-coproduct-Fin nA nB)) + by + split-mul-fin-Commutative-Monoid + ( M) + ( nA) + ( nB) + ( f ∘ map-equiv-count (count-coproduct cA cB)) + = + mul-Commutative-Monoid + ( M) + ( mul-fin-Commutative-Monoid + ( M) + ( nA) + ( f ∘ inl ∘ map-equiv-count cA)) + ( mul-fin-Commutative-Monoid + ( M) + ( nB) + ( f ∘ inr ∘ map-equiv-count cB)) + by + ap-mul-Commutative-Monoid + ( M) + ( ap + ( λ g → mul-fin-Commutative-Monoid M nA (f ∘ g)) + ( eq-htpy + ( map-equiv-count-coproduct-inl-coproduct-Fin cA cB))) + ( ap + ( λ g → mul-fin-Commutative-Monoid M nB (f ∘ g)) + ( eq-htpy + ( map-equiv-count-coproduct-inr-coproduct-Fin cA cB))) + = + mul-Commutative-Monoid + ( M) + ( mul-finite-Commutative-Monoid M A (f ∘ inl)) + ( mul-finite-Commutative-Monoid M B (f ∘ inr)) + by + inv + ( ap-mul-Commutative-Monoid + ( M) + ( eq-product-finite-count-Commutative-Monoid + ( M) + ( A) + ( cA) + ( f ∘ inl)) + ( eq-product-finite-count-Commutative-Monoid + ( M) + ( B) + ( cB) + ( f ∘ inr))) + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( mul-finite-Commutative-Monoid + ( M) + ( coproduct-Finite-Type A B) + ( f)) + ( mul-Commutative-Monoid + ( M) + ( mul-finite-Commutative-Monoid M A (f ∘ inl)) + ( mul-finite-Commutative-Monoid M B (f ∘ inr)))) ``` diff --git a/src/group-theory/products-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md similarity index 67% rename from src/group-theory/products-monoids.lagda.md rename to src/group-theory/products-of-tuples-of-elements-monoids.lagda.md index 554b0b7f3f..0fe111c1bf 100644 --- a/src/group-theory/products-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md @@ -1,7 +1,7 @@ -# Products of elements in monoids +# Products of tuples of elements in monoids ```agda -module group-theory.products-monoids where +module group-theory.products-of-tuples-of-elements-monoids where ```
Imports @@ -38,13 +38,13 @@ by a [standard finite type](univalent-combinatorics.standard-finite-types.md). ## Definition ```agda -product-Monoid : +mul-fin-Monoid : {l : Level} (M : Monoid l) (n : ℕ) → (functional-vec-Monoid M n) → type-Monoid M -product-Monoid M zero-ℕ f = unit-Monoid M -product-Monoid M (succ-ℕ n) f = +mul-fin-Monoid M zero-ℕ f = unit-Monoid M +mul-fin-Monoid M (succ-ℕ n) f = mul-Monoid M - ( product-Monoid M n (f ∘ inl-Fin n)) + ( mul-fin-Monoid M n (f ∘ inl-Fin n)) ( f (inr star)) ``` @@ -59,13 +59,13 @@ module _ product-one-element-Monoid : (f : functional-vec-Monoid M 1) → - product-Monoid M 1 f = head-functional-vec-Monoid M 0 f + mul-fin-Monoid M 1 f = head-functional-vec-Monoid M 0 f product-one-element-Monoid f = left-unit-law-mul-Monoid M (f (inr star)) product-two-elements-Monoid : (f : functional-vec-Monoid M 2) → - product-Monoid M 2 f = mul-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)) + mul-fin-Monoid M 2 f = mul-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)) product-two-elements-Monoid f = ( associative-mul-Monoid M (unit-Monoid M) (f (zero-Fin 1)) (f (one-Fin 1))) ∙ @@ -80,13 +80,13 @@ module _ {l : Level} (M : Monoid l) where - htpy-product-Monoid : + htpy-mul-fin-Monoid : (n : ℕ) {f g : functional-vec-Monoid M n} → - (f ~ g) → product-Monoid M n f = product-Monoid M n g - htpy-product-Monoid zero-ℕ H = refl - htpy-product-Monoid (succ-ℕ n) H = + (f ~ g) → mul-fin-Monoid M n f = mul-fin-Monoid M n g + htpy-mul-fin-Monoid zero-ℕ H = refl + htpy-mul-fin-Monoid (succ-ℕ n) H = ap-mul-Monoid M - ( htpy-product-Monoid n (H ·r inl-Fin n)) + ( htpy-mul-fin-Monoid n (H ·r inl-Fin n)) ( H (inr star)) ``` @@ -97,30 +97,30 @@ module _ {l : Level} (M : Monoid l) where - cons-product-Monoid : + cons-mul-fin-Monoid : (n : ℕ) (f : functional-vec-Monoid M (succ-ℕ n)) → {x : type-Monoid M} → head-functional-vec-Monoid M n f = x → - product-Monoid M (succ-ℕ n) f = - mul-Monoid M (product-Monoid M n (f ∘ inl-Fin n)) x - cons-product-Monoid n f refl = refl + mul-fin-Monoid M (succ-ℕ n) f = + mul-Monoid M (mul-fin-Monoid M n (f ∘ inl-Fin n)) x + cons-mul-fin-Monoid n f refl = refl - snoc-product-Monoid : + snoc-mul-fin-Monoid : (n : ℕ) (f : functional-vec-Monoid M (succ-ℕ n)) → {x : type-Monoid M} → f (zero-Fin n) = x → - product-Monoid M (succ-ℕ n) f = + mul-fin-Monoid M (succ-ℕ n) f = mul-Monoid M ( x) - ( product-Monoid M n (f ∘ inr-Fin n)) - snoc-product-Monoid zero-ℕ f refl = + ( mul-fin-Monoid M n (f ∘ inr-Fin n)) + snoc-mul-fin-Monoid zero-ℕ f refl = ( product-one-element-Monoid M f) ∙ ( inv (right-unit-law-mul-Monoid M (f (zero-Fin 0)))) - snoc-product-Monoid (succ-ℕ n) f refl = + snoc-mul-fin-Monoid (succ-ℕ n) f refl = ( ap ( mul-Monoid' M (head-functional-vec-Monoid M (succ-ℕ n) f)) - ( snoc-product-Monoid n (f ∘ inl-Fin (succ-ℕ n)) refl)) ∙ + ( snoc-mul-fin-Monoid n (f ∘ inl-Fin (succ-ℕ n)) refl)) ∙ ( associative-mul-Monoid M ( f (zero-Fin (succ-ℕ n))) - ( product-Monoid M n (f ∘ (inr-Fin (succ-ℕ n) ∘ inl-Fin n))) + ( mul-fin-Monoid M n (f ∘ (inr-Fin (succ-ℕ n) ∘ inl-Fin n))) ( head-functional-vec-Monoid M (succ-ℕ n) f)) ``` @@ -131,14 +131,14 @@ module _ {l : Level} (M : Monoid l) where - extend-product-Monoid : + extend-mul-fin-Monoid : (n : ℕ) (f : functional-vec-Monoid M n) → - product-Monoid M + mul-fin-Monoid M ( succ-ℕ n) ( cons-functional-vec-Monoid M n (unit-Monoid M) f) = - product-Monoid M n f - extend-product-Monoid n f = - right-unit-law-mul-Monoid M (product-Monoid M n f) + mul-fin-Monoid M n f + extend-mul-fin-Monoid n f = + right-unit-law-mul-Monoid M (mul-fin-Monoid M n f) ``` ### Shifting a product of elements in a monoid @@ -148,20 +148,20 @@ module _ {l : Level} (M : Monoid l) where - shift-product-Monoid : + shift-mul-fin-Monoid : (n : ℕ) (f : functional-vec-Monoid M n) → - product-Monoid M + mul-fin-Monoid M ( succ-ℕ n) ( snoc-functional-vec-Monoid M n f ( unit-Monoid M)) = - product-Monoid M n f - shift-product-Monoid zero-ℕ f = + mul-fin-Monoid M n f + shift-mul-fin-Monoid zero-ℕ f = left-unit-law-mul-Monoid M (unit-Monoid M) - shift-product-Monoid (succ-ℕ n) f = + shift-mul-fin-Monoid (succ-ℕ n) f = ap ( mul-Monoid' M ( head-functional-vec-Monoid M n f)) - ( shift-product-Monoid n + ( shift-mul-fin-Monoid n ( tail-functional-vec-Monoid M n f)) ``` @@ -174,7 +174,7 @@ module _ product-unit-Monoid : (n : ℕ) → - product-Monoid M n (unit-functional-vec-Monoid M n) = unit-Monoid M + mul-fin-Monoid M n (unit-functional-vec-Monoid M n) = unit-Monoid M product-unit-Monoid zero-ℕ = refl product-unit-Monoid (succ-ℕ n) = right-unit-law-mul-Monoid M _ ∙ product-unit-Monoid n @@ -183,18 +183,18 @@ module _ ### Splitting products ```agda -split-product-Monoid : +split-mul-fin-Monoid : {l : Level} (M : Monoid l) (n m : ℕ) (f : functional-vec-Monoid M (n +ℕ m)) → - product-Monoid M (n +ℕ m) f = + mul-fin-Monoid M (n +ℕ m) f = mul-Monoid M - ( product-Monoid M n (f ∘ inl-coproduct-Fin n m)) - ( product-Monoid M m (f ∘ inr-coproduct-Fin n m)) -split-product-Monoid M n zero-ℕ f = - inv (right-unit-law-mul-Monoid M (product-Monoid M n f)) -split-product-Monoid M n (succ-ℕ m) f = + ( mul-fin-Monoid M n (f ∘ inl-coproduct-Fin n m)) + ( mul-fin-Monoid M m (f ∘ inr-coproduct-Fin n m)) +split-mul-fin-Monoid M n zero-ℕ f = + inv (right-unit-law-mul-Monoid M (mul-fin-Monoid M n f)) +split-mul-fin-Monoid M n (succ-ℕ m) f = ( ap ( mul-Monoid' M (f (inr star))) - ( split-product-Monoid M n m (f ∘ inl))) ∙ + ( split-mul-fin-Monoid M n m (f ∘ inl))) ∙ ( associative-mul-Monoid M _ _ _) ``` diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index c1855b9bb4..1ceb1da661 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -21,7 +21,7 @@ open import foundation.identity-types open import foundation.unit-type open import foundation.universe-levels -open import group-theory.products-commutative-monoids +open import group-theory.products-of-tuples-of-elements-commutative-monoids open import linear-algebra.vectors open import linear-algebra.vectors-on-semirings @@ -50,13 +50,13 @@ sum-Semiring : {l : Level} (R : Semiring l) (n : ℕ) → (functional-vec-Semiring R n) → type-Semiring R sum-Semiring R = - product-Commutative-Monoid (additive-commutative-monoid-Semiring R) + mul-fin-Commutative-Monoid (additive-commutative-monoid-Semiring R) sum-finite-Semiring : {l1 l2 : Level} (R : Semiring l1) (A : Finite-Type l2) → (type-Finite-Type A → type-Semiring R) → type-Semiring R sum-finite-Semiring R = - product-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) + mul-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ## Properties @@ -94,7 +94,7 @@ module _ (n : ℕ) {f g : functional-vec-Semiring R n} → (f ~ g) → sum-Semiring R n f = sum-Semiring R n g htpy-sum-Semiring = - htpy-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) + htpy-mul-fin-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Sums are equal to the zero-th term plus the rest @@ -119,7 +119,7 @@ module _ ( x) ( sum-Semiring R n (f ∘ inr-Fin n)) snoc-sum-Semiring = - snoc-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) + snoc-mul-fin-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Multiplication distributes over sums @@ -205,7 +205,7 @@ module _ ( cons-functional-vec-Semiring R n (zero-Semiring R) f) = sum-Semiring R n f extend-sum-Semiring = - extend-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) + extend-mul-fin-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Shifting a sum of elements in a semiring @@ -223,7 +223,7 @@ module _ ( zero-Semiring R)) = sum-Semiring R n f shift-sum-Semiring = - shift-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) + shift-mul-fin-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### A sum of zeroes is zero @@ -251,7 +251,7 @@ split-sum-Semiring : ( sum-Semiring R n (f ∘ inl-coproduct-Fin n m)) ( sum-Semiring R m (f ∘ inr-coproduct-Fin n m)) split-sum-Semiring R = - split-product-Commutative-Monoid (additive-commutative-monoid-Semiring R) + split-mul-fin-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Permutations preserve sums @@ -306,7 +306,7 @@ module _ ( sum-finite-Semiring R A (f ∘ inl)) ( sum-finite-Semiring R B (f ∘ inr)) sum-coproduct-finite-Semiring = - product-coproduct-finite-Commutative-Monoid + mul-coproduct-finite-Commutative-Monoid ( additive-commutative-monoid-Semiring R) ( A) ( B) From 3340d0165b6a402352893a1f4843d2d8e1e5b6d6 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Mon, 17 Mar 2025 09:03:08 -0700 Subject: [PATCH 14/66] Great progress --- ...l-power-series-commutative-rings.lagda.md} | 251 +++++++----------- .../sums-commutative-rings.lagda.md | 12 + ...strict-inequality-natural-numbers.lagda.md | 17 ++ .../involution-standard-finite-types.lagda.md | 44 --- .../standard-finite-types.lagda.md | 41 +++ 5 files changed, 168 insertions(+), 197 deletions(-) rename src/commutative-algebra/{formal-power-series-rings.lagda.md => formal-power-series-commutative-rings.lagda.md} (80%) diff --git a/src/commutative-algebra/formal-power-series-rings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md similarity index 80% rename from src/commutative-algebra/formal-power-series-rings.lagda.md rename to src/commutative-algebra/formal-power-series-commutative-rings.lagda.md index 92f54c8df0..83d6eb418f 100644 --- a/src/commutative-algebra/formal-power-series-rings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md @@ -1,7 +1,7 @@ -# Formal power series rings +# Formal power series commutative rings ```agda -module commutative-algebra.formal-power-series-rings where +module commutative-algebra.formal-power-series-commutative-rings where ```
Imports @@ -10,17 +10,26 @@ module commutative-algebra.formal-power-series-rings where open import commutative-algebra.commutative-rings open import commutative-algebra.sums-commutative-rings +open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers +open import elementary-number-theory.inequality-natural-numbers +open import elementary-number-theory.strict-inequality-natural-numbers +open import elementary-number-theory.equality-natural-numbers open import foundation.action-on-identifications-functions open import foundation.coproduct-types open import foundation.dependent-pair-types +open import foundation.equivalences +open import foundation.equality-dependent-pair-types open import foundation.function-extensionality +open import foundation.propositions +open import foundation.cartesian-product-types open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.involutions open import foundation.sets +open import foundation.equivalences open import foundation.unit-type open import foundation.unital-binary-operations open import foundation.universe-levels @@ -30,8 +39,9 @@ open import group-theory.groups open import group-theory.monoids open import group-theory.semigroups -open import univalent-combinatorics.involution-standard-finite-types open import univalent-combinatorics.standard-finite-types +open import univalent-combinatorics.counting +open import univalent-combinatorics.finite-types ```
@@ -655,6 +665,36 @@ module _ ### Multiplication ```agda +pair-with-sum-ℕ : ℕ → UU lzero +pair-with-sum-ℕ n = Σ ℕ ( λ a → Σ ℕ (λ b → b +ℕ a = n)) + +abstract + equiv-pair-with-sum-leq-ℕ : + (n : ℕ) → Σ ℕ (λ k → leq-ℕ k n) ≃ pair-with-sum-ℕ n + equiv-pair-with-sum-leq-ℕ n = + ( λ (k , k≤n) → k , subtraction-leq-ℕ k n k≤n) , + ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , + λ (k , l , l+k=n) → + let + (l' , l'+k=n) = subtraction-leq-ℕ k n (leq-subtraction-ℕ k n l l+k=n) + in + eq-pair-Σ + ( refl) + ( eq-pair-Σ + (is-injective-right-add-ℕ k (l'+k=n ∙ inv l+k=n)) + (eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n)))) , + ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , + (λ (k , k≤n) → eq-pair-Σ refl (eq-type-Prop (leq-ℕ-Prop k n)))) + + count-pair-with-sum-ℕ : (n : ℕ) → count (pair-with-sum-ℕ n) + count-pair-with-sum-ℕ n = + succ-ℕ n , equiv-pair-with-sum-leq-ℕ n ∘e equiv-fin-succ-leq-ℕ n + +finite-type-pair-with-sum-ℕ : ℕ → Finite-Type lzero +finite-type-pair-with-sum-ℕ n = + pair-with-sum-ℕ n , + is-finite-count (count-pair-with-sum-ℕ n) + module _ {l : Level} (R : Commutative-Ring l) (p q : formal-power-series-Commutative-Ring R) @@ -663,20 +703,14 @@ module _ coefficient-mul-formal-power-series-Commutative-Ring : ℕ → type-Commutative-Ring R coefficient-mul-formal-power-series-Commutative-Ring n = - sum-Commutative-Ring + sum-finite-Commutative-Ring ( R) - ( succ-ℕ n) - ( λ k → + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → mul-Commutative-Ring ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( p) - ( nat-Fin (succ-ℕ n) k)) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( q) - ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + ( coefficient-formal-power-series-Commutative-Ring R p a) + ( coefficient-formal-power-series-Commutative-Ring R q b)) abstract mul-formal-power-series-Commutative-Ring : @@ -698,50 +732,32 @@ module _ #### Commutativity ```agda +module _ + (n : ℕ) + where + + swap-pair-with-sum : pair-with-sum-ℕ n → pair-with-sum-ℕ n + swap-pair-with-sum (k , l , l+k=n) = l , k , commutative-add-ℕ k l ∙ l+k=n + + abstract + is-involution-swap-pair-with-sum : is-involution swap-pair-with-sum + is-involution-swap-pair-with-sum (k , l , l+k=n) = + eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n))) + + equiv-swap-pair-with-sum : pair-with-sum-ℕ n ≃ pair-with-sum-ℕ n + equiv-swap-pair-with-sum = + equiv-is-involution + { lzero} + { pair-with-sum-ℕ n} + { swap-pair-with-sum} + ( is-involution-swap-pair-with-sum) + module _ {l : Level} (R : Commutative-Ring l) (p q : formal-power-series-Commutative-Ring R) where abstract - htpy-coefficients-commutative-mul-formal-power-series-Commutative-Ring : - coefficient-mul-formal-power-series-Commutative-Ring R p q ~ - coefficient-mul-formal-power-series-Commutative-Ring R q p - htpy-coefficients-commutative-mul-formal-power-series-Commutative-Ring n = - preserves-sum-permutation-Commutative-Ring - ( R) - ( succ-ℕ n) - ( equiv-involution (involution-opposite-Fin (succ-ℕ n))) - ( λ k → - mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( p) - ( nat-Fin (succ-ℕ n) k)) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( q) - ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) ∙ - htpy-sum-Commutative-Ring - ( R) - ( succ-ℕ n) - ( λ k → - ap - ( λ m → - mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( p) - ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k))) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( q) - ( nat-Fin (succ-ℕ n) m))) - (is-involution-opposite-Fin (succ-ℕ n) k) ∙ - commutative-mul-Commutative-Ring R _ _) - commutative-mul-formal-power-series-Commutative-Ring : mul-formal-power-series-Commutative-Ring R p q = mul-formal-power-series-Commutative-Ring R q p @@ -750,118 +766,47 @@ module _ ( R) ( _) ( _) - ( eq-coefficient-mul-formal-power-series-Commutative-Ring R p q ∙h - htpy-coefficients-commutative-mul-formal-power-series-Commutative-Ring ∙h - inv-htpy - ( eq-coefficient-mul-formal-power-series-Commutative-Ring R q p)) -``` - -#### Unit laws - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - (p : formal-power-series-Commutative-Ring R) - where - - abstract - htpy-coefficients-right-unit-law-mul-formal-power-series-Commutative-Ring : - coefficient-mul-formal-power-series-Commutative-Ring - ( R) - ( p) - ( one-formal-power-series-Commutative-Ring R) ~ - coefficient-formal-power-series-Commutative-Ring R p - htpy-coefficients-right-unit-law-mul-formal-power-series-Commutative-Ring - n = - equational-reasoning - sum-Commutative-Ring - ( R) - ( succ-ℕ n) - ( λ k → - mul-Commutative-Ring + ( λ n → equational-reasoning + coefficient-formal-power-series-Commutative-Ring R _ n + = + sum-finite-Commutative-Ring ( R) - ( coefficient-formal-power-series-Commutative-Ring + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + mul-Commutative-Ring + ( R) + ( coefficient-formal-power-series-Commutative-Ring R p a) + ( coefficient-formal-power-series-Commutative-Ring R q b)) + by + eq-coefficient-mul-formal-power-series-Commutative-Ring ( R) ( p) - ( nat-Fin (succ-ℕ n) k)) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( one-formal-power-series-Commutative-Ring R) - ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + ( q) + ( n) = - sum-Commutative-Ring + sum-finite-Commutative-Ring ( R) - ( succ-ℕ n) - ( λ k → + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → mul-Commutative-Ring ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( p) - ( nat-Fin (succ-ℕ n) k)) - ( coefficient-constant-formal-power-series-Commutative-Ring - ( R) - ( one-Commutative-Ring R) - ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + ( coefficient-formal-power-series-Commutative-Ring R p b) + ( coefficient-formal-power-series-Commutative-Ring R q a)) by - htpy-sum-Commutative-Ring + sum-aut-finite-Commutative-Ring ( R) - ( succ-ℕ n) - ( λ k → - ap - ( mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( p) - ( nat-Fin (succ-ℕ n) k))) - ( eq-coefficient-constant-formal-power-series-Commutative-Ring - ( R) - ( one-Commutative-Ring R) - ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) + ( finite-type-pair-with-sum-ℕ n) + ( equiv-swap-pair-with-sum n) + _ = - add-Commutative-Ring + sum-finite-Commutative-Ring ( R) - ( sum-Commutative-Ring - ( R) - ( n) - ( λ k → - mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( p) - ( nat-Fin (succ-ℕ n) (inl-Fin n k))) - ( coefficient-constant-formal-power-series-Commutative-Ring - ( R) - ( one-Commutative-Ring R) - ( nat-Fin - ( succ-ℕ n) - ( opposite-Fin (succ-ℕ n) (inl-Fin n k)))))) - ( mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p n) - ( coefficient-constant-formal-power-series-Commutative-Ring + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + mul-Commutative-Ring ( R) - ( one-Commutative-Ring R) - ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) (inr star))))) + ( coefficient-formal-power-series-Commutative-Ring R q a) + ( coefficient-formal-power-series-Commutative-Ring R p b)) by - cons-sum-Commutative-Ring - ( R) - ( n) - ( λ k → - mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( p) - ( nat-Fin (succ-ℕ n) k)) - ( coefficient-constant-formal-power-series-Commutative-Ring - ( R) - ( one-Commutative-Ring R) - ( nat-Fin (succ-ℕ n) (opposite-Fin (succ-ℕ n) k)))) - ( refl) - = {! !} by {! !} - - -- left-unit-law-mul-formal-power-series-Commutative-Ring : + = {! !} by {! !}) ``` diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index b800b10972..615bfc7137 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -21,6 +21,7 @@ open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types +open import foundation.automorphisms open import foundation.unit-type open import foundation.universe-levels @@ -263,6 +264,17 @@ module _ ( A) ( B) ( H) + +module _ + {l1 l2 : Level} (R : Commutative-Ring l1) + (A : Finite-Type l2) (σ : Aut (type-Finite-Type A)) + where + + sum-aut-finite-Commutative-Ring : + (f : type-Finite-Type A → type-Commutative-Ring R) → + sum-finite-Commutative-Ring R A f = + sum-finite-Commutative-Ring R A (f ∘ map-equiv σ) + sum-aut-finite-Commutative-Ring = sum-equiv-finite-Commutative-Ring R A A σ ``` ### Sums over finite types distribute over coproducts diff --git a/src/elementary-number-theory/strict-inequality-natural-numbers.lagda.md b/src/elementary-number-theory/strict-inequality-natural-numbers.lagda.md index 623bc26c65..6e9723bf0f 100644 --- a/src/elementary-number-theory/strict-inequality-natural-numbers.lagda.md +++ b/src/elementary-number-theory/strict-inequality-natural-numbers.lagda.md @@ -17,9 +17,11 @@ open import foundation.action-on-identifications-functions open import foundation.binary-transport open import foundation.cartesian-product-types open import foundation.coproduct-types +open import foundation.equivalences open import foundation.decidable-types open import foundation.dependent-pair-types open import foundation.empty-types +open import foundation.equality-dependent-pair-types open import foundation.function-types open import foundation.functoriality-coproduct-types open import foundation.identity-types @@ -29,6 +31,8 @@ open import foundation.propositions open import foundation.transport-along-identifications open import foundation.unit-type open import foundation.universe-levels +open import foundation.sections +open import foundation.retractions ```
@@ -308,6 +312,19 @@ le-succ-leq-ℕ zero-ℕ y H = star le-succ-leq-ℕ (succ-ℕ x) (succ-ℕ y) H = le-succ-leq-ℕ x y H ``` +### There is an equivalence between natural numbers less than `succ-ℕ n` and natural numbers less than or equal to `n` + +``` +equiv-le-succ-ℕ-leq-ℕ : + (n : ℕ) → Σ ℕ (λ k → le-ℕ k (succ-ℕ n)) ≃ Σ ℕ (λ k → leq-ℕ k n) +equiv-le-succ-ℕ-leq-ℕ n = + ( λ (k , k Date: Mon, 17 Mar 2025 09:24:07 -0700 Subject: [PATCH 15/66] Prove homotopy invariance with finite types --- .../sums-commutative-rings.lagda.md | 15 ++- .../sums-commutative-semirings.lagda.md | 16 +++- ...s-of-elements-commutative-monoids.lagda.md | 96 ++++++++++++++----- src/ring-theory/sums-rings.lagda.md | 6 ++ src/ring-theory/sums-semirings.lagda.md | 7 ++ 5 files changed, 110 insertions(+), 30 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index b800b10972..e61ff4f2fe 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -86,13 +86,20 @@ module _ ```agda module _ - {l : Level} (A : Commutative-Ring l) + {l : Level} (R : Commutative-Ring l) where htpy-sum-Commutative-Ring : - (n : ℕ) {f g : functional-vec-Commutative-Ring A n} → - (f ~ g) → sum-Commutative-Ring A n f = sum-Commutative-Ring A n g - htpy-sum-Commutative-Ring = htpy-sum-Ring (ring-Commutative-Ring A) + (n : ℕ) {f g : functional-vec-Commutative-Ring R n} → + (f ~ g) → sum-Commutative-Ring R n f = sum-Commutative-Ring R n g + htpy-sum-Commutative-Ring = htpy-sum-Ring (ring-Commutative-Ring R) + + htpy-sum-finite-Commutative-Ring : + {l2 : Level} (A : Finite-Type l2) → + {f g : type-Finite-Type A → type-Commutative-Ring R} → (f ~ g) → + sum-finite-Commutative-Ring R A f = sum-finite-Commutative-Ring R A g + htpy-sum-finite-Commutative-Ring = + htpy-sum-finite-Ring (ring-Commutative-Ring R) ``` ### Sums are equal to the zero-th term plus the rest diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index ced509fc18..2508554ed0 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -88,14 +88,22 @@ module _ ```agda module _ - {l : Level} (A : Commutative-Semiring l) + {l : Level} (R : Commutative-Semiring l) where htpy-sum-Commutative-Semiring : - (n : ℕ) {f g : functional-vec-Commutative-Semiring A n} → - (f ~ g) → sum-Commutative-Semiring A n f = sum-Commutative-Semiring A n g + (n : ℕ) {f g : functional-vec-Commutative-Semiring R n} → + (f ~ g) → sum-Commutative-Semiring R n f = sum-Commutative-Semiring R n g htpy-sum-Commutative-Semiring = - htpy-sum-Semiring (semiring-Commutative-Semiring A) + htpy-sum-Semiring (semiring-Commutative-Semiring R) + + htpy-sum-finite-Commutative-Semiring : + {l2 : Level} (A : Finite-Type l2) → + {f g : type-Finite-Type A → type-Commutative-Semiring R} → (f ~ g) → + sum-finite-Commutative-Semiring R A f = + sum-finite-Commutative-Semiring R A g + htpy-sum-finite-Commutative-Semiring = + htpy-sum-finite-Semiring (semiring-Commutative-Semiring R) ``` ### Sums are equal to the zero-th term plus the rest diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index f669683594..df89e350ff 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -303,13 +303,29 @@ module _ ### Products for a count for a type ```agda -product-count-Commutative-Monoid : +mul-count-Commutative-Monoid : {l1 l2 : Level} (M : Commutative-Monoid l1) (A : UU l2) → count A → (A → type-Commutative-Monoid M) → type-Commutative-Monoid M -product-count-Commutative-Monoid M A (n , Fin-n≃A) f = +mul-count-Commutative-Monoid M A (n , Fin-n≃A) f = mul-fin-Commutative-Monoid M n (f ∘ map-equiv Fin-n≃A) ``` +### Products for a count for a type are homotopy invariant + +```agda +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : UU l2) + where + + htpy-mul-count-Commutative-Monoid : + (c : count A) → + {f g : A → type-Commutative-Monoid M} → (f ~ g) → + mul-count-Commutative-Monoid M A c f = + mul-count-Commutative-Monoid M A c g + htpy-mul-count-Commutative-Monoid (nA , _) H = + htpy-mul-fin-Commutative-Monoid M nA (λ i → H _) +``` + ### Two counts for the same set produce equal products ```agda @@ -318,12 +334,12 @@ module _ where abstract - eq-product-count-equiv-Commutative-Monoid : + eq-mul-count-equiv-Commutative-Monoid : (n : ℕ) → (equiv1 equiv2 : Fin n ≃ A) → (f : A → type-Commutative-Monoid M) → - product-count-Commutative-Monoid M A (n , equiv1) f = - product-count-Commutative-Monoid M A (n , equiv2) f - eq-product-count-equiv-Commutative-Monoid n equiv1 equiv2 f = + mul-count-Commutative-Monoid M A (n , equiv1) f = + mul-count-Commutative-Monoid M A (n , equiv2) f + eq-mul-count-equiv-Commutative-Monoid n equiv1 equiv2 f = equational-reasoning mul-fin-Commutative-Monoid M n (f ∘ map-equiv equiv1) = @@ -362,13 +378,13 @@ module _ ( λ g → mul-fin-Commutative-Monoid M n (f ∘ (g ∘ map-equiv equiv2))) ( eq-htpy (is-section-map-inv-equiv equiv1)) - eq-product-count-Commutative-Monoid : + eq-mul-count-Commutative-Monoid : (f : A → type-Commutative-Monoid M) (c1 c2 : count A) → - product-count-Commutative-Monoid M A c1 f = - product-count-Commutative-Monoid M A c2 f - eq-product-count-Commutative-Monoid f c1@(n , e1) c2@(_ , e2) + mul-count-Commutative-Monoid M A c1 f = + mul-count-Commutative-Monoid M A c2 f + eq-mul-count-Commutative-Monoid f c1@(n , e1) c2@(_ , e2) with eq-number-of-elements-count A c1 c2 - ... | refl = eq-product-count-equiv-Commutative-Monoid n e1 e2 f + ... | refl = eq-mul-count-equiv-Commutative-Monoid n e1 e2 f ``` ### Products over finite types @@ -384,12 +400,12 @@ module _ mul-finite-Commutative-Monoid f = map-universal-property-set-quotient-trunc-Prop ( set-Commutative-Monoid M) - ( λ c → product-count-Commutative-Monoid M (type-Finite-Type A) c f) - ( eq-product-count-Commutative-Monoid M (type-Finite-Type A) f) + ( λ c → mul-count-Commutative-Monoid M (type-Finite-Type A) c f) + ( eq-mul-count-Commutative-Monoid M (type-Finite-Type A) f) ( is-finite-type-Finite-Type A) ``` -### Products over finite types are preserved by equivalences +### The product over a finite type is its product over any count for the type ```agda module _ @@ -400,8 +416,8 @@ module _ abstract product-equiv-count-Commutative-Monoid : (cA : count A) (cB : count B) (f : B → type-Commutative-Monoid M) → - product-count-Commutative-Monoid M B cB f = - product-count-Commutative-Monoid M A cA (f ∘ map-equiv H) + mul-count-Commutative-Monoid M B cB f = + mul-count-Commutative-Monoid M A cA (f ∘ map-equiv H) product-equiv-count-Commutative-Monoid cA@(_ , Fin-nA≃A) cB@(nB , Fin-nB≃B) f with eq-number-of-elements-count-equiv A B H cA cB @@ -428,7 +444,7 @@ module _ eq-product-finite-count-Commutative-Monoid : (f : type-Finite-Type A → type-Commutative-Monoid M) → mul-finite-Commutative-Monoid M A f = - product-count-Commutative-Monoid M (type-Finite-Type A) cA f + mul-count-Commutative-Monoid M (type-Finite-Type A) cA f eq-product-finite-count-Commutative-Monoid f = equational-reasoning mul-finite-Commutative-Monoid M A f @@ -447,15 +463,51 @@ module _ ( all-elements-equal-type-trunc-Prop ( is-finite-type-Finite-Type A) ( unit-trunc-Prop cA)) - = product-count-Commutative-Monoid M (type-Finite-Type A) cA f + = mul-count-Commutative-Monoid M (type-Finite-Type A) cA f by htpy-universal-property-set-quotient-trunc-Prop ( set-Commutative-Monoid M) ( λ c → - product-count-Commutative-Monoid M (type-Finite-Type A) c f) - ( eq-product-count-Commutative-Monoid M (type-Finite-Type A) f) + mul-count-Commutative-Monoid M (type-Finite-Type A) c f) + ( eq-mul-count-Commutative-Monoid M (type-Finite-Type A) f) ( cA) +``` + +### Products over a finite type are homotopy invariant + +```agda +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) + where + abstract + htpy-mul-finite-Commutative-Monoid : + {f g : type-Finite-Type A → type-Commutative-Monoid M} → + f ~ g → + mul-finite-Commutative-Monoid M A f = mul-finite-Commutative-Monoid M A g + htpy-mul-finite-Commutative-Monoid {f} {g} H = + do + cA ← is-finite-type-Finite-Type A + equational-reasoning + mul-finite-Commutative-Monoid M A f + = mul-count-Commutative-Monoid M (type-Finite-Type A) cA f + by eq-product-finite-count-Commutative-Monoid M A cA f + = mul-count-Commutative-Monoid M (type-Finite-Type A) cA g + by htpy-mul-count-Commutative-Monoid M (type-Finite-Type A) cA H + = mul-finite-Commutative-Monoid M A g + by inv (eq-product-finite-count-Commutative-Monoid M A cA g) + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( mul-finite-Commutative-Monoid M A f) + ( mul-finite-Commutative-Monoid M A g)) +``` + +### Products over finite types are preserved by equivalences + +```agda module _ {l1 l2 l3 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) (B : Finite-Type l3) @@ -473,10 +525,10 @@ module _ cB ← is-finite-type-Finite-Type B equational-reasoning mul-finite-Commutative-Monoid M B f - = product-count-Commutative-Monoid M (type-Finite-Type B) cB f + = mul-count-Commutative-Monoid M (type-Finite-Type B) cB f by eq-product-finite-count-Commutative-Monoid M B cB f = - product-count-Commutative-Monoid + mul-count-Commutative-Monoid ( M) ( type-Finite-Type A) ( cA) diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index bc5aca564a..1ecdcb15a1 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -82,6 +82,12 @@ module _ (n : ℕ) {f g : functional-vec-Ring R n} → (f ~ g) → sum-Ring R n f = sum-Ring R n g htpy-sum-Ring = htpy-sum-Semiring (semiring-Ring R) + + htpy-sum-finite-Ring : + {l2 : Level} (A : Finite-Type l2) → + {f g : type-Finite-Type A → type-Ring R} → (f ~ g) → + sum-finite-Ring R A f = sum-finite-Ring R A g + htpy-sum-finite-Ring = htpy-sum-finite-Semiring (semiring-Ring R) ``` ### Sums are equal to the zero-th term plus the rest diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 1ceb1da661..b4ee24882d 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -95,6 +95,13 @@ module _ (f ~ g) → sum-Semiring R n f = sum-Semiring R n g htpy-sum-Semiring = htpy-mul-fin-Commutative-Monoid (additive-commutative-monoid-Semiring R) + + htpy-sum-finite-Semiring : + {l2 : Level} (A : Finite-Type l2) → + {f g : type-Finite-Type A → type-Semiring R} → (f ~ g) → + sum-finite-Semiring R A f = sum-finite-Semiring R A g + htpy-sum-finite-Semiring = + htpy-mul-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Sums are equal to the zero-th term plus the rest From 8fabe8a9637d3612c4609b4b536f4c4517b6094f Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Mon, 17 Mar 2025 11:11:04 -0700 Subject: [PATCH 16/66] Progress --- ...al-power-series-commutative-rings.lagda.md | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md index 83d6eb418f..9cf67c6be2 100644 --- a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md @@ -1,4 +1,4 @@ -# Formal power series commutative rings +# Formal power series on commutative rings ```agda module commutative-algebra.formal-power-series-commutative-rings where @@ -808,5 +808,29 @@ module _ ( coefficient-formal-power-series-Commutative-Ring R q a) ( coefficient-formal-power-series-Commutative-Ring R p b)) by - = {! !} by {! !}) + htpy-sum-finite-Commutative-Ring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ _ → commutative-mul-Commutative-Ring R _ _) + = + coefficient-formal-power-series-Commutative-Ring + ( R) + ( mul-formal-power-series-Commutative-Ring R q p) + ( n) + by + inv + ( eq-coefficient-mul-formal-power-series-Commutative-Ring + ( R) + ( q) + ( p) + ( n))) +``` + +#### Associativity + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p q r : formal-power-series-Commutative-Ring R) + where ``` From 533e8ab73bbbdd01fbe066a1dbb3bc37d33a6167 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Mon, 17 Mar 2025 14:38:35 -0700 Subject: [PATCH 17/66] Progress --- ...s-of-elements-commutative-monoids.lagda.md | 184 +++++++++++++++++- 1 file changed, 179 insertions(+), 5 deletions(-) diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index df89e350ff..7cac192256 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -17,14 +17,18 @@ open import finite-group-theory.transpositions-standard-finite-types open import foundation.action-on-identifications-functions open import foundation.cartesian-product-types +open import foundation.type-arithmetic-coproduct-types open import foundation.coproduct-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.function-extensionality open import foundation.function-types open import foundation.functoriality-coproduct-types +open import foundation.functoriality-dependent-pair-types open import foundation.homotopies open import foundation.identity-types +open import foundation.type-arithmetic-unit-type +open import foundation.functoriality-coproduct-types open import foundation.negated-equality open import foundation.propositional-truncations open import foundation.sets @@ -45,6 +49,8 @@ open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.counting open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types +open import univalent-combinatorics.counting-dependent-pair-types +open import univalent-combinatorics.dependent-pair-types ```
@@ -414,11 +420,11 @@ module _ where abstract - product-equiv-count-Commutative-Monoid : + mul-equiv-count-Commutative-Monoid : (cA : count A) (cB : count B) (f : B → type-Commutative-Monoid M) → mul-count-Commutative-Monoid M B cB f = mul-count-Commutative-Monoid M A cA (f ∘ map-equiv H) - product-equiv-count-Commutative-Monoid + mul-equiv-count-Commutative-Monoid cA@(_ , Fin-nA≃A) cB@(nB , Fin-nB≃B) f with eq-number-of-elements-count-equiv A B H cA cB ... | refl = @@ -515,11 +521,11 @@ module _ where abstract - product-equiv-finite-Commutative-Monoid : + mul-equiv-finite-Commutative-Monoid : (f : type-Finite-Type B → type-Commutative-Monoid M) → mul-finite-Commutative-Monoid M B f = mul-finite-Commutative-Monoid M A (f ∘ map-equiv H) - product-equiv-finite-Commutative-Monoid f = + mul-equiv-finite-Commutative-Monoid f = do cA ← is-finite-type-Finite-Type A cB ← is-finite-type-Finite-Type B @@ -534,7 +540,7 @@ module _ ( cA) ( f ∘ map-equiv H) by - product-equiv-count-Commutative-Monoid + mul-equiv-count-Commutative-Monoid ( M) ( type-Finite-Type A) ( type-Finite-Type B) @@ -668,3 +674,171 @@ module _ ( mul-finite-Commutative-Monoid M A (f ∘ inl)) ( mul-finite-Commutative-Monoid M B (f ∘ inr)))) ``` + +### Products distribute over dependent pair types + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + abstract + mul-fin-count-Σ-Commutative-Monoid : + (n : ℕ) → + {l2 : Level} → + (B : Fin n → UU l2) (cB : (k : Fin n) → count (B k)) → + (f : (k : Fin n) → B k → type-Commutative-Monoid M) → + mul-fin-Commutative-Monoid M n + (λ k → mul-count-Commutative-Monoid M (B k) (cB k) (f k)) = + mul-count-Commutative-Monoid + M (Σ (Fin n) B) (count-Σ (n , id-equiv) cB) (ind-Σ f) + mul-fin-count-Σ-Commutative-Monoid zero-ℕ B cB f = refl + mul-fin-count-Σ-Commutative-Monoid (succ-ℕ n) B cB f = equational-reasoning + mul-fin-Commutative-Monoid + ( M) + ( succ-ℕ n) + ( λ k → mul-count-Commutative-Monoid M (B k) (cB k) (f k)) + = + mul-Commutative-Monoid + ( M) + ( mul-fin-Commutative-Monoid + ( M) + ( n) + ( λ k → + mul-count-Commutative-Monoid + ( M) + ( B (inl k)) + ( cB (inl k)) + ( f (inl k)))) + ( mul-count-Commutative-Monoid + ( M) + ( B (inr star)) + ( cB (inr star)) + ( f (inr star))) + by + cons-mul-fin-Commutative-Monoid + ( M) + ( n) + ( λ k → mul-count-Commutative-Monoid M (B k) (cB k) (f k)) + ( refl) + = + mul-Commutative-Monoid + ( M) + ( mul-count-Commutative-Monoid + ( M) + ( Σ (Fin n) (B ∘ inl)) + ( count-Σ (n , id-equiv) (cB ∘ inl)) + ( ind-Σ (f ∘ inl))) + ( mul-count-Commutative-Monoid + ( M) + ( B (inr star)) + ( cB (inr star)) + ( f (inr star))) + by + ap-mul-Commutative-Monoid + ( M) + ( mul-fin-count-Σ-Commutative-Monoid + ( n) + ( B ∘ inl) + ( cB ∘ inl) + ( f ∘ inl)) + ( refl) + = + mul-Commutative-Monoid + ( M) + ( mul-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type + ( Fin-Finite-Type n) + ( λ k → B (inl k) , is-finite-count (cB (inl k)))) + ( ind-Σ (f ∘ inl))) + ( mul-finite-Commutative-Monoid + ( M) + ( B (inr star) , is-finite-count (cB (inr star))) + ( f (inr star))) + by + inv + ( ap-mul-Commutative-Monoid + ( M) + ( eq-product-finite-count-Commutative-Monoid + ( M) + ( Σ-Finite-Type + ( Fin-Finite-Type n) + ( λ k → B (inl k) , is-finite-count (cB (inl k)))) + ( count-Σ (n , id-equiv) (cB ∘ inl)) + ( ind-Σ (f ∘ inl))) + ( eq-product-finite-count-Commutative-Monoid + ( M) + ( B (inr star) , + is-finite-count (cB (inr star))) (cB (inr star)) + ( f (inr star)))) + = + mul-finite-Commutative-Monoid + ( M) + ( coproduct-Finite-Type + ( Σ-Finite-Type + ( Fin-Finite-Type n) + (λ k → B (inl k) , is-finite-count (cB (inl k)))) + ( B (inr star) , is-finite-count (cB (inr star)))) + ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star))) + by + inv + ( mul-coproduct-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type + ( Fin-Finite-Type n) + ( λ k → B (inl k) , is-finite-count (cB (inl k)))) + ( B (inr star) , is-finite-count (cB (inr star))) + ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star)))) + = + mul-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type + ( Fin-Finite-Type (succ-ℕ n)) + ( λ k → B k , is-finite-count (cB k))) + ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star)) ∘ + map-coproduct id (map-left-unit-law-Σ (B ∘ inr)) ∘ + map-right-distributive-Σ-coproduct (Fin n) unit B) + by + mul-equiv-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type + ( Fin-Finite-Type (succ-ℕ n)) + ( λ k → B k , is-finite-count (cB k))) + ( coproduct-Finite-Type + ( Σ-Finite-Type + ( Fin-Finite-Type n) + ( λ k → B (inl k) , is-finite-count (cB (inl k)))) + ( B (inr star) , is-finite-count (cB (inr star)))) + ( equiv-coproduct id-equiv (left-unit-law-Σ (B ∘ inr)) ∘e + right-distributive-Σ-coproduct (Fin n) unit B) + ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star))) + = + mul-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type + ( Fin-Finite-Type (succ-ℕ n)) + ( λ k → B k , is-finite-count (cB k))) + ( ind-Σ f) + by + htpy-mul-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type + ( Fin-Finite-Type (succ-ℕ n)) + ( λ k → B k , is-finite-count (cB k))) + ( λ { (inl k , b) → refl ; (inr k , b) → refl}) + = + mul-count-Commutative-Monoid + ( M) + ( Σ (Fin (succ-ℕ n)) B) + ( count-Σ (succ-ℕ n , id-equiv) cB) + ( ind-Σ f) + by + eq-product-finite-count-Commutative-Monoid + ( M) + ( Σ-Finite-Type + ( Fin-Finite-Type (succ-ℕ n)) + ( λ k → B k , is-finite-count (cB k))) + ( count-Σ (succ-ℕ n , id-equiv) cB) + ( ind-Σ f) +``` From 5b8d5e24217fcdd7c5af578399719a9d5411dc78 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Mon, 17 Mar 2025 15:37:02 -0700 Subject: [PATCH 18/66] Distribute sums over coproducts --- .../sums-commutative-rings.lagda.md | 37 +++ .../sums-commutative-semirings.lagda.md | 37 +++ ...s-of-elements-commutative-monoids.lagda.md | 250 ++++++++++-------- src/ring-theory/sums-rings.lagda.md | 31 +++ src/ring-theory/sums-semirings.lagda.md | 41 ++- 5 files changed, 285 insertions(+), 111 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index e61ff4f2fe..253eb16dfa 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -17,6 +17,7 @@ open import finite-group-theory.permutations-standard-finite-types open import foundation.action-on-identifications-functions open import foundation.coproduct-types +open import foundation.empty-types open import foundation.equivalences open import foundation.function-types open import foundation.homotopies @@ -30,6 +31,7 @@ open import linear-algebra.vectors-on-commutative-rings open import ring-theory.sums-rings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -291,3 +293,38 @@ module _ sum-coproduct-finite-Commutative-Ring = sum-coproduct-finite-Ring (ring-Commutative-Ring R) A B ``` + +### Sums distribute over dependent pair types + +```agda +module _ + {l1 l2 l3 : Level} (R : Commutative-Ring l1) + (A : Finite-Type l2) (B : type-Finite-Type A → Finite-Type l3) + where + + sum-Σ-finite-Commutative-Ring : + (f : + (a : type-Finite-Type A) → + type-Finite-Type (B a) → + type-Commutative-Ring R) → + sum-finite-Commutative-Ring R (Σ-Finite-Type A B) (ind-Σ f) = + sum-finite-Commutative-Ring + R A (λ a → sum-finite-Commutative-Ring R (B a) (f a)) + sum-Σ-finite-Commutative-Ring = + sum-Σ-finite-Ring (ring-Commutative-Ring R) A B +``` + +### The sum over an empty type is zero + +```agda +module _ + {l1 l2 : Level} (R : Commutative-Ring l1) (A : Finite-Type l2) + (H : is-empty (type-Finite-Type A)) + where + + sum-is-empty-finite-Commutative-Ring : + (f : type-Finite-Type A → type-Commutative-Ring R) → + is-zero-Commutative-Ring R (sum-finite-Commutative-Ring R A f) + sum-is-empty-finite-Commutative-Ring = + sum-is-empty-finite-Ring (ring-Commutative-Ring R) A H +``` diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 2508554ed0..dcfe355d2a 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -15,6 +15,7 @@ open import elementary-number-theory.natural-numbers open import finite-group-theory.permutations-standard-finite-types open import foundation.coproduct-types +open import foundation.empty-types open import foundation.equivalences open import foundation.function-types open import foundation.homotopies @@ -31,6 +32,7 @@ open import lists.lists open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -292,3 +294,38 @@ module _ sum-coproduct-finite-Commutative-Semiring = sum-coproduct-finite-Semiring (semiring-Commutative-Semiring R) A B ``` + +### Sums distribute over dependent pair types + +```agda +module _ + {l1 l2 l3 : Level} (R : Commutative-Semiring l1) + (A : Finite-Type l2) (B : type-Finite-Type A → Finite-Type l3) + where + + sum-Σ-finite-Commutative-Semiring : + (f : + (a : type-Finite-Type A) → + type-Finite-Type (B a) → + type-Commutative-Semiring R) → + sum-finite-Commutative-Semiring R (Σ-Finite-Type A B) (ind-Σ f) = + sum-finite-Commutative-Semiring + R A (λ a → sum-finite-Commutative-Semiring R (B a) (f a)) + sum-Σ-finite-Commutative-Semiring = + sum-Σ-finite-Semiring (semiring-Commutative-Semiring R) A B +``` + +### The sum over an empty type is zero + +```agda +module _ + {l1 l2 : Level} (R : Commutative-Semiring l1) (A : Finite-Type l2) + (H : is-empty (type-Finite-Type A)) + where + + sum-is-empty-finite-Commutative-Semiring : + (f : type-Finite-Type A → type-Commutative-Semiring R) → + is-zero-Commutative-Semiring R (sum-finite-Commutative-Semiring R A f) + sum-is-empty-finite-Commutative-Semiring = + sum-is-empty-finite-Semiring (semiring-Commutative-Semiring R) A H +``` diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 7cac192256..e1b223554d 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -17,9 +17,9 @@ open import finite-group-theory.transpositions-standard-finite-types open import foundation.action-on-identifications-functions open import foundation.cartesian-product-types -open import foundation.type-arithmetic-coproduct-types open import foundation.coproduct-types open import foundation.dependent-pair-types +open import foundation.empty-types open import foundation.equivalences open import foundation.function-extensionality open import foundation.function-types @@ -27,11 +27,12 @@ open import foundation.functoriality-coproduct-types open import foundation.functoriality-dependent-pair-types open import foundation.homotopies open import foundation.identity-types -open import foundation.type-arithmetic-unit-type -open import foundation.functoriality-coproduct-types open import foundation.negated-equality open import foundation.propositional-truncations open import foundation.sets +open import foundation.type-arithmetic-coproduct-types +open import foundation.type-arithmetic-empty-type +open import foundation.type-arithmetic-unit-type open import foundation.unit-type open import foundation.universal-property-propositional-truncation-into-sets open import foundation.universe-levels @@ -47,10 +48,10 @@ open import lists.lists open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.counting -open import univalent-combinatorics.finite-types -open import univalent-combinatorics.standard-finite-types open import univalent-combinatorics.counting-dependent-pair-types open import univalent-combinatorics.dependent-pair-types +open import univalent-combinatorics.finite-types +open import univalent-combinatorics.standard-finite-types ``` @@ -447,11 +448,11 @@ module _ where abstract - eq-product-finite-count-Commutative-Monoid : + eq-mul-finite-count-Commutative-Monoid : (f : type-Finite-Type A → type-Commutative-Monoid M) → mul-finite-Commutative-Monoid M A f = mul-count-Commutative-Monoid M (type-Finite-Type A) cA f - eq-product-finite-count-Commutative-Monoid f = + eq-mul-finite-count-Commutative-Monoid f = equational-reasoning mul-finite-Commutative-Monoid M A f = @@ -479,6 +480,22 @@ module _ ( cA) ``` +### The product over an empty type is the unit + +```agda +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) + (H : is-empty (type-Finite-Type A)) + where + + abstract + mul-is-empty-finite-Commutative-Monoid : + (f : type-Finite-Type A → type-Commutative-Monoid M) → + is-unit-Commutative-Monoid M (mul-finite-Commutative-Monoid M A f) + mul-is-empty-finite-Commutative-Monoid = + eq-mul-finite-count-Commutative-Monoid M A (count-is-empty H) +``` + ### Products over a finite type are homotopy invariant ```agda @@ -497,11 +514,11 @@ module _ equational-reasoning mul-finite-Commutative-Monoid M A f = mul-count-Commutative-Monoid M (type-Finite-Type A) cA f - by eq-product-finite-count-Commutative-Monoid M A cA f + by eq-mul-finite-count-Commutative-Monoid M A cA f = mul-count-Commutative-Monoid M (type-Finite-Type A) cA g by htpy-mul-count-Commutative-Monoid M (type-Finite-Type A) cA H = mul-finite-Commutative-Monoid M A g - by inv (eq-product-finite-count-Commutative-Monoid M A cA g) + by inv (eq-mul-finite-count-Commutative-Monoid M A cA g) where open do-syntax-trunc-Prop @@ -532,7 +549,7 @@ module _ equational-reasoning mul-finite-Commutative-Monoid M B f = mul-count-Commutative-Monoid M (type-Finite-Type B) cB f - by eq-product-finite-count-Commutative-Monoid M B cB f + by eq-mul-finite-count-Commutative-Monoid M B cB f = mul-count-Commutative-Monoid ( M) @@ -551,7 +568,7 @@ module _ = mul-finite-Commutative-Monoid M A (f ∘ map-equiv H) by inv - ( eq-product-finite-count-Commutative-Monoid + ( eq-mul-finite-count-Commutative-Monoid ( M) ( A) ( cA) @@ -594,7 +611,7 @@ module _ ( nA +ℕ nB) ( f ∘ map-equiv-count (count-coproduct cA cB)) by - eq-product-finite-count-Commutative-Monoid + eq-mul-finite-count-Commutative-Monoid ( M) ( coproduct-Finite-Type A B) ( count-coproduct cA cB) @@ -650,12 +667,12 @@ module _ inv ( ap-mul-Commutative-Monoid ( M) - ( eq-product-finite-count-Commutative-Monoid + ( eq-mul-finite-count-Commutative-Monoid ( M) ( A) ( cA) ( f ∘ inl)) - ( eq-product-finite-count-Commutative-Monoid + ( eq-mul-finite-count-Commutative-Monoid ( M) ( B) ( cB) @@ -683,21 +700,27 @@ module _ where abstract - mul-fin-count-Σ-Commutative-Monoid : + mul-fin-finite-Σ-Commutative-Monoid : (n : ℕ) → {l2 : Level} → - (B : Fin n → UU l2) (cB : (k : Fin n) → count (B k)) → - (f : (k : Fin n) → B k → type-Commutative-Monoid M) → + (B : Fin n → Finite-Type l2) → + (f : (k : Fin n) → type-Finite-Type (B k) → type-Commutative-Monoid M) → mul-fin-Commutative-Monoid M n - (λ k → mul-count-Commutative-Monoid M (B k) (cB k) (f k)) = - mul-count-Commutative-Monoid - M (Σ (Fin n) B) (count-Σ (n , id-equiv) cB) (ind-Σ f) - mul-fin-count-Σ-Commutative-Monoid zero-ℕ B cB f = refl - mul-fin-count-Σ-Commutative-Monoid (succ-ℕ n) B cB f = equational-reasoning + (λ k → mul-finite-Commutative-Monoid M (B k) (f k)) = + mul-finite-Commutative-Monoid + M (Σ-Finite-Type (Fin-Finite-Type n) B) (ind-Σ f) + mul-fin-finite-Σ-Commutative-Monoid zero-ℕ B f = + inv + ( mul-is-empty-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type (Fin-Finite-Type zero-ℕ) B) + ( λ ()) + ( ind-Σ f)) + mul-fin-finite-Σ-Commutative-Monoid (succ-ℕ n) B f = equational-reasoning mul-fin-Commutative-Monoid ( M) ( succ-ℕ n) - ( λ k → mul-count-Commutative-Monoid M (B k) (cB k) (f k)) + ( λ k → mul-finite-Commutative-Monoid M (B k) (f k)) = mul-Commutative-Monoid ( M) @@ -705,140 +728,151 @@ module _ ( M) ( n) ( λ k → - mul-count-Commutative-Monoid + mul-finite-Commutative-Monoid ( M) ( B (inl k)) - ( cB (inl k)) ( f (inl k)))) - ( mul-count-Commutative-Monoid + ( mul-finite-Commutative-Monoid ( M) ( B (inr star)) - ( cB (inr star)) ( f (inr star))) by cons-mul-fin-Commutative-Monoid ( M) ( n) - ( λ k → mul-count-Commutative-Monoid M (B k) (cB k) (f k)) + ( λ k → mul-finite-Commutative-Monoid M (B k) (f k)) ( refl) = mul-Commutative-Monoid ( M) - ( mul-count-Commutative-Monoid + ( mul-finite-Commutative-Monoid ( M) - ( Σ (Fin n) (B ∘ inl)) - ( count-Σ (n , id-equiv) (cB ∘ inl)) + ( Σ-Finite-Type (Fin-Finite-Type n) (B ∘ inl)) ( ind-Σ (f ∘ inl))) - ( mul-count-Commutative-Monoid + ( mul-finite-Commutative-Monoid ( M) ( B (inr star)) - ( cB (inr star)) ( f (inr star))) by ap-mul-Commutative-Monoid ( M) - ( mul-fin-count-Σ-Commutative-Monoid + ( mul-fin-finite-Σ-Commutative-Monoid ( n) ( B ∘ inl) - ( cB ∘ inl) ( f ∘ inl)) ( refl) - = - mul-Commutative-Monoid - ( M) - ( mul-finite-Commutative-Monoid - ( M) - ( Σ-Finite-Type - ( Fin-Finite-Type n) - ( λ k → B (inl k) , is-finite-count (cB (inl k)))) - ( ind-Σ (f ∘ inl))) - ( mul-finite-Commutative-Monoid - ( M) - ( B (inr star) , is-finite-count (cB (inr star))) - ( f (inr star))) - by - inv - ( ap-mul-Commutative-Monoid - ( M) - ( eq-product-finite-count-Commutative-Monoid - ( M) - ( Σ-Finite-Type - ( Fin-Finite-Type n) - ( λ k → B (inl k) , is-finite-count (cB (inl k)))) - ( count-Σ (n , id-equiv) (cB ∘ inl)) - ( ind-Σ (f ∘ inl))) - ( eq-product-finite-count-Commutative-Monoid - ( M) - ( B (inr star) , - is-finite-count (cB (inr star))) (cB (inr star)) - ( f (inr star)))) = mul-finite-Commutative-Monoid ( M) ( coproduct-Finite-Type - ( Σ-Finite-Type - ( Fin-Finite-Type n) - (λ k → B (inl k) , is-finite-count (cB (inl k)))) - ( B (inr star) , is-finite-count (cB (inr star)))) + ( Σ-Finite-Type (Fin-Finite-Type n) (B ∘ inl)) + ( B (inr star))) ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star))) by inv ( mul-coproduct-finite-Commutative-Monoid ( M) - ( Σ-Finite-Type - ( Fin-Finite-Type n) - ( λ k → B (inl k) , is-finite-count (cB (inl k)))) - ( B (inr star) , is-finite-count (cB (inr star))) + ( Σ-Finite-Type (Fin-Finite-Type n) (B ∘ inl)) + ( B (inr star)) ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star)))) = mul-finite-Commutative-Monoid ( M) - ( Σ-Finite-Type - ( Fin-Finite-Type (succ-ℕ n)) - ( λ k → B k , is-finite-count (cB k))) - ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star)) ∘ - map-coproduct id (map-left-unit-law-Σ (B ∘ inr)) ∘ - map-right-distributive-Σ-coproduct (Fin n) unit B) + ( Σ-Finite-Type (Fin-Finite-Type (succ-ℕ n)) B) + ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star)) ∘ + map-coproduct + ( id) + ( map-left-unit-law-Σ (type-Finite-Type ∘ B ∘ inr)) ∘ + map-right-distributive-Σ-coproduct + ( Fin n) + ( unit) + ( type-Finite-Type ∘ B)) by mul-equiv-finite-Commutative-Monoid ( M) - ( Σ-Finite-Type - ( Fin-Finite-Type (succ-ℕ n)) - ( λ k → B k , is-finite-count (cB k))) + ( Σ-Finite-Type (Fin-Finite-Type (succ-ℕ n)) B) ( coproduct-Finite-Type - ( Σ-Finite-Type - ( Fin-Finite-Type n) - ( λ k → B (inl k) , is-finite-count (cB (inl k)))) - ( B (inr star) , is-finite-count (cB (inr star)))) - ( equiv-coproduct id-equiv (left-unit-law-Σ (B ∘ inr)) ∘e - right-distributive-Σ-coproduct (Fin n) unit B) + ( Σ-Finite-Type ( Fin-Finite-Type n) (B ∘ inl)) + ( B (inr star))) + ( equiv-coproduct + ( id-equiv) + ( left-unit-law-Σ (type-Finite-Type ∘ B ∘ inr)) ∘e + right-distributive-Σ-coproduct + ( Fin n) + ( unit) + ( type-Finite-Type ∘ B)) ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star))) = mul-finite-Commutative-Monoid ( M) - ( Σ-Finite-Type - ( Fin-Finite-Type (succ-ℕ n)) - ( λ k → B k , is-finite-count (cB k))) - ( ind-Σ f) + ( Σ-Finite-Type (Fin-Finite-Type (succ-ℕ n)) B) + ( ind-Σ f) by htpy-mul-finite-Commutative-Monoid ( M) - ( Σ-Finite-Type - ( Fin-Finite-Type (succ-ℕ n)) - ( λ k → B k , is-finite-count (cB k))) + ( Σ-Finite-Type (Fin-Finite-Type (succ-ℕ n)) B) ( λ { (inl k , b) → refl ; (inr k , b) → refl}) - = - mul-count-Commutative-Monoid - ( M) - ( Σ (Fin (succ-ℕ n)) B) - ( count-Σ (succ-ℕ n , id-equiv) cB) - ( ind-Σ f) - by - eq-product-finite-count-Commutative-Monoid - ( M) - ( Σ-Finite-Type - ( Fin-Finite-Type (succ-ℕ n)) - ( λ k → B k , is-finite-count (cB k))) - ( count-Σ (succ-ℕ n , id-equiv) cB) - ( ind-Σ f) + +module _ + {l1 l2 l3 : Level} (M : Commutative-Monoid l1) + (A : Finite-Type l2) (B : type-Finite-Type A → Finite-Type l3) + where + + abstract + mul-Σ-finite-Commutative-Monoid : + (f : + (a : type-Finite-Type A) → + type-Finite-Type (B a) → + type-Commutative-Monoid M) → + mul-finite-Commutative-Monoid M (Σ-Finite-Type A B) (ind-Σ f) = + mul-finite-Commutative-Monoid + ( M) + ( A) + ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)) + mul-Σ-finite-Commutative-Monoid f = + do + cA@(nA , Fin-nA≃A) ← is-finite-type-Finite-Type A + equational-reasoning + mul-finite-Commutative-Monoid M (Σ-Finite-Type A B) (ind-Σ f) + = + mul-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type (Fin-Finite-Type nA) (B ∘ map-equiv Fin-nA≃A)) + ( ind-Σ (f ∘ map-equiv Fin-nA≃A)) + by + mul-equiv-finite-Commutative-Monoid + ( M) + ( Σ-Finite-Type (Fin-Finite-Type nA) (B ∘ map-equiv Fin-nA≃A)) + ( Σ-Finite-Type A B) + ( equiv-Σ-equiv-base (type-Finite-Type ∘ B) Fin-nA≃A) + ( ind-Σ f) + = + mul-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( cA) + ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)) + by + inv + ( mul-fin-finite-Σ-Commutative-Monoid + ( M) + ( nA) + ( B ∘ map-equiv Fin-nA≃A) + ( f ∘ map-equiv Fin-nA≃A)) + = + mul-finite-Commutative-Monoid + ( M) + ( A) + (λ a → mul-finite-Commutative-Monoid M (B a) (f a)) + by inv (eq-mul-finite-count-Commutative-Monoid M A cA _) + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( mul-finite-Commutative-Monoid M (Σ-Finite-Type A B) (ind-Σ f)) + ( mul-finite-Commutative-Monoid + ( M) + ( A) + ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)))) ``` diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index 1ecdcb15a1..e3480305b2 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -13,6 +13,7 @@ open import elementary-number-theory.natural-numbers open import finite-group-theory.permutations-standard-finite-types open import foundation.coproduct-types +open import foundation.empty-types open import foundation.equivalences open import foundation.function-types open import foundation.homotopies @@ -26,6 +27,7 @@ open import ring-theory.rings open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -262,3 +264,32 @@ module _ sum-coproduct-finite-Ring = sum-coproduct-finite-Semiring (semiring-Ring R) A B ``` + +### Sums distribute over dependent pair types + +```agda +module _ + {l1 l2 l3 : Level} (R : Ring l1) + (A : Finite-Type l2) (B : type-Finite-Type A → Finite-Type l3) + where + + sum-Σ-finite-Ring : + (f : (a : type-Finite-Type A) → type-Finite-Type (B a) → type-Ring R) → + sum-finite-Ring R (Σ-Finite-Type A B) (ind-Σ f) = + sum-finite-Ring R A (λ a → sum-finite-Ring R (B a) (f a)) + sum-Σ-finite-Ring = sum-Σ-finite-Semiring (semiring-Ring R) A B +``` + +### The sum over an empty type is zero + +```agda +module _ + {l1 l2 : Level} (R : Ring l1) (A : Finite-Type l2) + (H : is-empty (type-Finite-Type A)) + where + + sum-is-empty-finite-Ring : + (f : type-Finite-Type A → type-Ring R) → + is-zero-Ring R (sum-finite-Ring R A f) + sum-is-empty-finite-Ring = sum-is-empty-finite-Semiring (semiring-Ring R) A H +``` diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index b4ee24882d..3c7d2f35bc 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -14,6 +14,7 @@ open import finite-group-theory.permutations-standard-finite-types open import foundation.action-on-identifications-functions open import foundation.coproduct-types +open import foundation.empty-types open import foundation.equivalences open import foundation.function-types open import foundation.homotopies @@ -29,6 +30,7 @@ open import linear-algebra.vectors-on-semirings open import ring-theory.semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types ``` @@ -289,7 +291,7 @@ module _ (f : type-Finite-Type B → type-Semiring R) → sum-finite-Semiring R B f = sum-finite-Semiring R A (f ∘ map-equiv H) sum-equiv-finite-Semiring = - product-equiv-finite-Commutative-Monoid + mul-equiv-finite-Commutative-Monoid ( additive-commutative-monoid-Semiring R) ( A) ( B) @@ -300,8 +302,7 @@ module _ ```agda module _ - {l1 l2 l3 : Level} (R : Semiring l1) - (A : Finite-Type l2) (B : Finite-Type l3) + {l1 l2 l3 : Level} (R : Semiring l1) (A : Finite-Type l2) (B : Finite-Type l3) where sum-coproduct-finite-Semiring : @@ -318,3 +319,37 @@ module _ ( A) ( B) ``` + +### Sums distribute over dependent pair types + +```agda +module _ + {l1 l2 l3 : Level} (R : Semiring l1) + (A : Finite-Type l2) (B : type-Finite-Type A → Finite-Type l3) + where + + sum-Σ-finite-Semiring : + (f : (a : type-Finite-Type A) → type-Finite-Type (B a) → type-Semiring R) → + sum-finite-Semiring R (Σ-Finite-Type A B) (ind-Σ f) = + sum-finite-Semiring R A (λ a → sum-finite-Semiring R (B a) (f a)) + sum-Σ-finite-Semiring = + mul-Σ-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) A B +``` + +### The sum over an empty type is zero + +```agda +module _ + {l1 l2 : Level} (R : Semiring l1) (A : Finite-Type l2) + (H : is-empty (type-Finite-Type A)) + where + + sum-is-empty-finite-Semiring : + (f : type-Finite-Type A → type-Semiring R) → + is-zero-Semiring R (sum-finite-Semiring R A f) + sum-is-empty-finite-Semiring = + mul-is-empty-finite-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) + ( A) + ( H) +``` From d29107d4bd276b151ab2ba792126196ed7f605ae Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Mon, 17 Mar 2025 15:59:13 -0700 Subject: [PATCH 19/66] Progress --- ...al-power-series-commutative-rings.lagda.md | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md index 9cf67c6be2..1d1690b2a0 100644 --- a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md @@ -833,4 +833,47 @@ module _ {l : Level} (R : Commutative-Ring l) (p q r : formal-power-series-Commutative-Ring R) where + + abstract + associative-mul-formal-power-series-Commutative-Ring : + mul-formal-power-series-Commutative-Ring + ( R) + ( mul-formal-power-series-Commutative-Ring R p q) + ( r) = + mul-formal-power-series-Commutative-Ring + ( R) + ( p) + ( mul-formal-power-series-Commutative-Ring R q r) + associative-mul-formal-power-series-Commutative-Ring = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( λ n → equational-reasoning + coeff ((p *fps q) *fps r) n + = + sum-finite-Commutative-Ring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → coeff (p *fps q) a *R coeff r b) + by + eq-coefficient-mul-formal-power-series-Commutative-Ring + ( R) + ( p *fps q) + ( r) + ( n) + = {! !} by {! !}) + where + _*R_ : + type-Commutative-Ring R → type-Commutative-Ring R → + type-Commutative-Ring R + _*R_ = mul-Commutative-Ring R + _*fps_ : + formal-power-series-Commutative-Ring R → + formal-power-series-Commutative-Ring R → + formal-power-series-Commutative-Ring R + _*fps_ = mul-formal-power-series-Commutative-Ring R + coeff : + formal-power-series-Commutative-Ring R → ℕ → type-Commutative-Ring R + coeff = coefficient-formal-power-series-Commutative-Ring R ``` From 6eba5f42b4e7b250342fe2a52cc8b06d5bd9b8f1 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Mon, 17 Mar 2025 16:22:08 -0700 Subject: [PATCH 20/66] Multiplication distributivity --- .../sums-commutative-rings.lagda.md | 39 +++-- .../sums-commutative-semirings.lagda.md | 39 +++-- src/ring-theory/sums-rings.lagda.md | 16 ++ src/ring-theory/sums-semirings.lagda.md | 152 ++++++++++++++---- 4 files changed, 194 insertions(+), 52 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 253eb16dfa..4086e33578 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -133,24 +133,41 @@ module _ ```agda module _ - {l : Level} (A : Commutative-Ring l) + {l : Level} (R : Commutative-Ring l) where left-distributive-mul-sum-Commutative-Ring : - (n : ℕ) (x : type-Commutative-Ring A) - (f : functional-vec-Commutative-Ring A n) → - mul-Commutative-Ring A x (sum-Commutative-Ring A n f) = - sum-Commutative-Ring A n (λ i → mul-Commutative-Ring A x (f i)) + (n : ℕ) (x : type-Commutative-Ring R) + (f : functional-vec-Commutative-Ring R n) → + mul-Commutative-Ring R x (sum-Commutative-Ring R n f) = + sum-Commutative-Ring R n (λ i → mul-Commutative-Ring R x (f i)) left-distributive-mul-sum-Commutative-Ring = - left-distributive-mul-sum-Ring (ring-Commutative-Ring A) + left-distributive-mul-sum-Ring (ring-Commutative-Ring R) right-distributive-mul-sum-Commutative-Ring : - (n : ℕ) (f : functional-vec-Commutative-Ring A n) - (x : type-Commutative-Ring A) → - mul-Commutative-Ring A (sum-Commutative-Ring A n f) x = - sum-Commutative-Ring A n (λ i → mul-Commutative-Ring A (f i) x) + (n : ℕ) (f : functional-vec-Commutative-Ring R n) + (x : type-Commutative-Ring R) → + mul-Commutative-Ring R (sum-Commutative-Ring R n f) x = + sum-Commutative-Ring R n (λ i → mul-Commutative-Ring R (f i) x) right-distributive-mul-sum-Commutative-Ring = - right-distributive-mul-sum-Ring (ring-Commutative-Ring A) + right-distributive-mul-sum-Ring (ring-Commutative-Ring R) + + left-distributive-mul-finite-Commutative-Ring : + {l2 : Level} (A : Finite-Type l2) (x : type-Commutative-Ring R) → + (f : type-Finite-Type A → type-Commutative-Ring R) → + mul-Commutative-Ring R x (sum-finite-Commutative-Ring R A f) = + sum-finite-Commutative-Ring R A (mul-Commutative-Ring R x ∘ f) + left-distributive-mul-finite-Commutative-Ring = + left-distributive-mul-finite-Ring (ring-Commutative-Ring R) + + right-distributive-mul-finite-Commutative-Ring : + {l2 : Level} (A : Finite-Type l2) → + (f : type-Finite-Type A → type-Commutative-Ring R) → + (x : type-Commutative-Ring R) → + mul-Commutative-Ring R (sum-finite-Commutative-Ring R A f) x = + sum-finite-Commutative-Ring R A (mul-Commutative-Ring' R x ∘ f) + right-distributive-mul-finite-Commutative-Ring = + right-distributive-mul-finite-Ring (ring-Commutative-Ring R) ``` ### Interchange law of sums and addition in a commutative ring diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index dcfe355d2a..50fab31103 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -139,24 +139,41 @@ module _ ```agda module _ - {l : Level} (A : Commutative-Semiring l) + {l : Level} (R : Commutative-Semiring l) where left-distributive-mul-sum-Commutative-Semiring : - (n : ℕ) (x : type-Commutative-Semiring A) - (f : functional-vec-Commutative-Semiring A n) → - mul-Commutative-Semiring A x (sum-Commutative-Semiring A n f) = - sum-Commutative-Semiring A n (λ i → mul-Commutative-Semiring A x (f i)) + (n : ℕ) (x : type-Commutative-Semiring R) + (f : functional-vec-Commutative-Semiring R n) → + mul-Commutative-Semiring R x (sum-Commutative-Semiring R n f) = + sum-Commutative-Semiring R n (λ i → mul-Commutative-Semiring R x (f i)) left-distributive-mul-sum-Commutative-Semiring = - left-distributive-mul-sum-Semiring (semiring-Commutative-Semiring A) + left-distributive-mul-sum-Semiring (semiring-Commutative-Semiring R) right-distributive-mul-sum-Commutative-Semiring : - (n : ℕ) (f : functional-vec-Commutative-Semiring A n) - (x : type-Commutative-Semiring A) → - mul-Commutative-Semiring A (sum-Commutative-Semiring A n f) x = - sum-Commutative-Semiring A n (λ i → mul-Commutative-Semiring A (f i) x) + (n : ℕ) (f : functional-vec-Commutative-Semiring R n) + (x : type-Commutative-Semiring R) → + mul-Commutative-Semiring R (sum-Commutative-Semiring R n f) x = + sum-Commutative-Semiring R n (λ i → mul-Commutative-Semiring R (f i) x) right-distributive-mul-sum-Commutative-Semiring = - right-distributive-mul-sum-Semiring (semiring-Commutative-Semiring A) + right-distributive-mul-sum-Semiring (semiring-Commutative-Semiring R) + + left-distributive-mul-finite-Commutative-Semiring : + {l2 : Level} (A : Finite-Type l2) (x : type-Commutative-Semiring R) → + (f : type-Finite-Type A → type-Commutative-Semiring R) → + mul-Commutative-Semiring R x (sum-finite-Commutative-Semiring R A f) = + sum-finite-Commutative-Semiring R A (mul-Commutative-Semiring R x ∘ f) + left-distributive-mul-finite-Commutative-Semiring = + left-distributive-mul-finite-Semiring (semiring-Commutative-Semiring R) + + right-distributive-mul-finite-Commutative-Semiring : + {l2 : Level} (A : Finite-Type l2) → + (f : type-Finite-Type A → type-Commutative-Semiring R) → + (x : type-Commutative-Semiring R) → + mul-Commutative-Semiring R (sum-finite-Commutative-Semiring R A f) x = + sum-finite-Commutative-Semiring R A (mul-Commutative-Semiring' R x ∘ f) + right-distributive-mul-finite-Commutative-Semiring = + right-distributive-mul-finite-Semiring (semiring-Commutative-Semiring R) ``` ### Interchange law of sums and addition in a commutative semiring diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index e3480305b2..a7f62e9e78 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -138,6 +138,22 @@ module _ sum-Ring R n (λ i → mul-Ring R (f i) x) right-distributive-mul-sum-Ring = right-distributive-mul-sum-Semiring (semiring-Ring R) + + left-distributive-mul-finite-Ring : + {l2 : Level} (A : Finite-Type l2) (x : type-Ring R) → + (f : type-Finite-Type A → type-Ring R) → + mul-Ring R x (sum-finite-Ring R A f) = + sum-finite-Ring R A (mul-Ring R x ∘ f) + left-distributive-mul-finite-Ring = + left-distributive-mul-finite-Semiring (semiring-Ring R) + + right-distributive-mul-finite-Ring : + {l2 : Level} (A : Finite-Type l2) → + (f : type-Finite-Type A → type-Ring R) (x : type-Ring R) → + mul-Ring R (sum-finite-Ring R A f) x = + sum-finite-Ring R A (mul-Ring' R x ∘ f) + right-distributive-mul-finite-Ring = + right-distributive-mul-finite-Semiring (semiring-Ring R) ``` ### Interchange law of sums and addition in a semiring diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 3c7d2f35bc..6af198e213 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -19,6 +19,8 @@ open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types +open import foundation.propositional-truncations +open import foundation.sets open import foundation.unit-type open import foundation.universe-levels @@ -30,6 +32,7 @@ open import linear-algebra.vectors-on-semirings open import ring-theory.semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.counting open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types @@ -138,36 +141,125 @@ module _ {l : Level} (R : Semiring l) where - left-distributive-mul-sum-Semiring : - (n : ℕ) (x : type-Semiring R) - (f : functional-vec-Semiring R n) → - mul-Semiring R x (sum-Semiring R n f) = - sum-Semiring R n (λ i → mul-Semiring R x (f i)) - left-distributive-mul-sum-Semiring zero-ℕ x f = - right-zero-law-mul-Semiring R x - left-distributive-mul-sum-Semiring (succ-ℕ n) x f = - ( left-distributive-mul-add-Semiring R x - ( sum-Semiring R n (f ∘ inl-Fin n)) - ( f (inr star))) ∙ - ( ap - ( add-Semiring' R (mul-Semiring R x (f (inr star)))) - ( left-distributive-mul-sum-Semiring n x (f ∘ inl-Fin n))) - - right-distributive-mul-sum-Semiring : - (n : ℕ) (f : functional-vec-Semiring R n) - (x : type-Semiring R) → - mul-Semiring R (sum-Semiring R n f) x = - sum-Semiring R n (λ i → mul-Semiring R (f i) x) - right-distributive-mul-sum-Semiring zero-ℕ f x = - left-zero-law-mul-Semiring R x - right-distributive-mul-sum-Semiring (succ-ℕ n) f x = - ( right-distributive-mul-add-Semiring R - ( sum-Semiring R n (f ∘ inl-Fin n)) - ( f (inr star)) - ( x)) ∙ - ( ap - ( add-Semiring' R (mul-Semiring R (f (inr star)) x)) - ( right-distributive-mul-sum-Semiring n (f ∘ inl-Fin n) x)) + abstract + left-distributive-mul-sum-Semiring : + (n : ℕ) (x : type-Semiring R) + (f : functional-vec-Semiring R n) → + mul-Semiring R x (sum-Semiring R n f) = + sum-Semiring R n (λ i → mul-Semiring R x (f i)) + left-distributive-mul-sum-Semiring zero-ℕ x f = + right-zero-law-mul-Semiring R x + left-distributive-mul-sum-Semiring (succ-ℕ n) x f = + ( left-distributive-mul-add-Semiring R x + ( sum-Semiring R n (f ∘ inl-Fin n)) + ( f (inr star))) ∙ + ( ap + ( add-Semiring' R (mul-Semiring R x (f (inr star)))) + ( left-distributive-mul-sum-Semiring n x (f ∘ inl-Fin n))) + + right-distributive-mul-sum-Semiring : + (n : ℕ) (f : functional-vec-Semiring R n) + (x : type-Semiring R) → + mul-Semiring R (sum-Semiring R n f) x = + sum-Semiring R n (λ i → mul-Semiring R (f i) x) + right-distributive-mul-sum-Semiring zero-ℕ f x = + left-zero-law-mul-Semiring R x + right-distributive-mul-sum-Semiring (succ-ℕ n) f x = + ( right-distributive-mul-add-Semiring R + ( sum-Semiring R n (f ∘ inl-Fin n)) + ( f (inr star)) + ( x)) ∙ + ( ap + ( add-Semiring' R (mul-Semiring R (f (inr star)) x)) + ( right-distributive-mul-sum-Semiring n (f ∘ inl-Fin n) x)) + + left-distributive-mul-finite-Semiring : + {l2 : Level} (A : Finite-Type l2) (x : type-Semiring R) → + (f : type-Finite-Type A → type-Semiring R) → + mul-Semiring R x (sum-finite-Semiring R A f) = + sum-finite-Semiring R A (mul-Semiring R x ∘ f) + left-distributive-mul-finite-Semiring A x f = + do + cA ← is-finite-type-Finite-Type A + equational-reasoning + mul-Semiring R x (sum-finite-Semiring R A f) + = + mul-Semiring + ( R) + ( x) + ( mul-count-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) + ( type-Finite-Type A) + ( cA) + ( f)) + by + ap + ( mul-Semiring R x) + ( eq-mul-finite-count-Commutative-Monoid _ A cA f) + = + mul-count-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) + ( type-Finite-Type A) + ( cA) + ( mul-Semiring R x ∘ f) + by + left-distributive-mul-sum-Semiring + ( number-of-elements-count cA) + ( x) + ( f ∘ map-equiv-count cA) + = sum-finite-Semiring R A (mul-Semiring R x ∘ f) + by inv (eq-mul-finite-count-Commutative-Monoid _ A cA _) + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Semiring R) + ( mul-Semiring R x (sum-finite-Semiring R A f)) + ( sum-finite-Semiring R A (mul-Semiring R x ∘ f))) + + right-distributive-mul-finite-Semiring : + {l2 : Level} (A : Finite-Type l2) → + (f : type-Finite-Type A → type-Semiring R) (x : type-Semiring R) → + mul-Semiring R (sum-finite-Semiring R A f) x = + sum-finite-Semiring R A (mul-Semiring' R x ∘ f) + right-distributive-mul-finite-Semiring A f x = + do + cA ← is-finite-type-Finite-Type A + equational-reasoning + mul-Semiring R (sum-finite-Semiring R A f) x + = + mul-Semiring + ( R) + ( mul-count-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) + ( type-Finite-Type A) + ( cA) + ( f)) + ( x) + by + ap + ( mul-Semiring' R x) + ( eq-mul-finite-count-Commutative-Monoid _ A cA f) + = + mul-count-Commutative-Monoid + ( additive-commutative-monoid-Semiring R) + ( type-Finite-Type A) + ( cA) + ( mul-Semiring' R x ∘ f) + by + right-distributive-mul-sum-Semiring + ( number-of-elements-count cA) + ( f ∘ map-equiv-count cA) + ( x) + = sum-finite-Semiring R A (mul-Semiring' R x ∘ f) + by inv (eq-mul-finite-count-Commutative-Monoid _ A cA _) + where + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Semiring R) + ( mul-Semiring R (sum-finite-Semiring R A f) x) + ( sum-finite-Semiring R A (mul-Semiring' R x ∘ f))) ``` ### Interchange law of sums and addition in a semiring From 1099fa2e3179da4e4e3b11b3a12aa6483e6cb34d Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Mon, 17 Mar 2025 18:22:07 -0700 Subject: [PATCH 21/66] Progress --- ...al-power-series-commutative-rings.lagda.md | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md index 1d1690b2a0..152c112a41 100644 --- a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md @@ -40,6 +40,7 @@ open import group-theory.monoids open import group-theory.semigroups open import univalent-combinatorics.standard-finite-types +open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.counting open import univalent-combinatorics.finite-types ``` @@ -829,6 +830,48 @@ module _ #### Associativity ```agda +module _ + (n : ℕ) + where + + triple-with-sum-ℕ : UU lzero + triple-with-sum-ℕ = Σ ℕ (λ a → Σ ℕ (λ b → Σ ℕ (λ c → c +ℕ b +ℕ a = n))) + + map-equiv-triple-with-sum-Σ-pair-with-sum : + triple-with-sum-ℕ → Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) + map-equiv-triple-with-sum-Σ-pair-with-sum (a , b , c , c+b+a=n) = + ( a +ℕ b , + c , + ap (c +ℕ_) (commutative-add-ℕ a b) ∙ + inv (associative-add-ℕ c b a) ∙ + c+b+a=n) , + b , + a , + refl + + map-inv-equiv-triple-with-sum-Σ-pair-with-sum : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) → triple-with-sum-ℕ + map-inv-equiv-triple-with-sum-Σ-pair-with-sum + ((a+b , c , c+⟨a+b⟩=n) , b , a , a+b=a+b) = + a , b , c , + associative-add-ℕ c b a ∙ + ap (c +ℕ_) (commutative-add-ℕ b a ∙ a+b=a+b) ∙ + c+⟨a+b⟩=n + + triple-with-sum-equiv-Σ-pair-with-sum : + triple-with-sum-ℕ ≃ Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) + triple-with-sum-equiv-Σ-pair-with-sum = + map-equiv-triple-with-sum-Σ-pair-with-sum , + ( map-inv-equiv-triple-with-sum-Σ-pair-with-sum , + λ { ((H , c , refl) , b , a , refl) → + eq-pair-Σ + (eq-pair-Σ + ( refl) + ( eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set _ _)))) + ( eq-pair-Σ {! !} (eq-pair-Σ {! !} (eq-type-Prop (Id-Prop ℕ-Set _ _))))} ) , + ( map-inv-equiv-triple-with-sum-Σ-pair-with-sum , + {! !}) + module _ {l : Level} (R : Commutative-Ring l) (p q r : formal-power-series-Commutative-Ring R) @@ -862,6 +905,48 @@ module _ ( p *fps q) ( r) ( n) + = + sum-finite-Commutative-Ring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + sum-finite-Commutative-Ring + ( R) + ( finite-type-pair-with-sum-ℕ a) + ( λ (c , d , _) → (coeff p c *R coeff q d) *R coeff r b)) + by + ap + ( sum-finite-Commutative-Ring R (finite-type-pair-with-sum-ℕ n)) + ( eq-htpy + ( λ (a , b , _) → + ap-mul-Commutative-Ring + ( R) + ( eq-coefficient-mul-formal-power-series-Commutative-Ring + ( R) + ( p) + ( q) + ( a)) + ( refl) ∙ + right-distributive-mul-finite-Commutative-Ring + ( R) + ( _) + ( _) + ( coeff r b))) + = + sum-finite-Commutative-Ring + ( R) + ( Σ-Finite-Type + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1)) + ( λ ((a , b , _) , c , d , _) → + (coeff p c *R coeff q d) *R coeff r b) + by + inv + ( sum-Σ-finite-Commutative-Ring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1) + ( _)) = {! !} by {! !}) where _*R_ : From b3d00a1e778ae718533f492ecb433a33b639fbd8 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Tue, 18 Mar 2025 19:04:04 -0700 Subject: [PATCH 22/66] Simplify. Use double-counting. --- .../sums-commutative-rings.lagda.md | 11 ++++++++ .../sums-commutative-semirings.lagda.md | 13 +++++++++ ...s-of-elements-commutative-monoids.lagda.md | 26 +++-------------- src/univalent-combinatorics/counting.lagda.md | 28 ------------------- 4 files changed, 28 insertions(+), 50 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 4086e33578..542efd099d 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -289,6 +289,17 @@ module _ ( A) ( B) ( H) + +module _ + {l1 l2 : Level} (R : Commutative-Ring l1) + (A : Finite-Type l2) (σ : Aut (type-Finite-Type A)) + where + + sum-aut-finite-Commutative-Ring : + (f : type-Finite-Type A → type-Commutative-Ring R) → + sum-finite-Commutative-Ring R A f = + sum-finite-Commutative-Ring R A (f ∘ map-equiv σ) + sum-aut-finite-Commutative-Ring = sum-equiv-finite-Commutative-Ring R A A σ ``` ### Sums over finite types distribute over coproducts diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 50fab31103..72f3ab043e 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -14,6 +14,7 @@ open import elementary-number-theory.natural-numbers open import finite-group-theory.permutations-standard-finite-types +open import foundation.automorphisms open import foundation.coproduct-types open import foundation.empty-types open import foundation.equivalences @@ -290,6 +291,18 @@ module _ sum-finite-Commutative-Semiring R A (f ∘ map-equiv H) sum-equiv-finite-Commutative-Semiring = sum-equiv-finite-Semiring (semiring-Commutative-Semiring R) A B H + +module _ + {l1 l2 : Level} (R : Commutative-Semiring l1) + (A : Finite-Type l2) (σ : Aut (type-Finite-Type A)) + where + + sum-aut-finite-Commutative-Semiring : + (f : type-Finite-Type A → type-Commutative-Semiring R) → + sum-finite-Commutative-Semiring R A f = + sum-finite-Commutative-Semiring R A (f ∘ map-equiv σ) + sum-aut-finite-Commutative-Semiring = + sum-equiv-finite-Commutative-Semiring R A A σ ``` ### Sums over finite types distribute over coproducts diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index e1b223554d..8c32e607fc 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -52,6 +52,7 @@ open import univalent-combinatorics.counting-dependent-pair-types open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types +open import univalent-combinatorics.double-counting ``` @@ -360,25 +361,6 @@ module _ ( n) ( inv-equiv equiv1 ∘e equiv2) ( f ∘ map-equiv equiv1) - = - mul-fin-Commutative-Monoid - ( M) - ( n) - ( f ∘ (map-equiv equiv1 ∘ (map-inv-equiv equiv1 ∘ map-equiv equiv2))) - by - ap - ( mul-fin-Commutative-Monoid M n) - ( associative-comp f (map-equiv equiv1) _) - = - mul-fin-Commutative-Monoid - ( M) - ( n) - ( f ∘ ((map-equiv equiv1 ∘ map-inv-equiv equiv1) ∘ map-equiv equiv2)) - by - ap - ( λ g → mul-fin-Commutative-Monoid M n (f ∘ g)) - ( inv - ( associative-comp (map-equiv equiv1) (map-inv-equiv equiv1) _)) = mul-fin-Commutative-Monoid M n (f ∘ map-equiv equiv2) by ap @@ -390,7 +372,7 @@ module _ mul-count-Commutative-Monoid M A c1 f = mul-count-Commutative-Monoid M A c2 f eq-mul-count-Commutative-Monoid f c1@(n , e1) c2@(_ , e2) - with eq-number-of-elements-count A c1 c2 + with double-counting c1 c2 ... | refl = eq-mul-count-equiv-Commutative-Monoid n e1 e2 f ``` @@ -427,7 +409,7 @@ module _ mul-count-Commutative-Monoid M A cA (f ∘ map-equiv H) mul-equiv-count-Commutative-Monoid cA@(_ , Fin-nA≃A) cB@(nB , Fin-nB≃B) f - with eq-number-of-elements-count-equiv A B H cA cB + with double-counting-equiv cA cB H ... | refl = preserves-product-permutation-Commutative-Monoid ( M) @@ -863,7 +845,7 @@ module _ mul-finite-Commutative-Monoid ( M) ( A) - (λ a → mul-finite-Commutative-Monoid M (B a) (f a)) + ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)) by inv (eq-mul-finite-count-Commutative-Monoid M A cA _) where open diff --git a/src/univalent-combinatorics/counting.lagda.md b/src/univalent-combinatorics/counting.lagda.md index 1912165cce..b9c4fa6d19 100644 --- a/src/univalent-combinatorics/counting.lagda.md +++ b/src/univalent-combinatorics/counting.lagda.md @@ -87,34 +87,6 @@ pr1 (count-Fin k) = k pr2 (count-Fin k) = id-equiv ``` -### Any two counts for the same type have the same number of elements - -```agda -module _ - {l : Level} (X : UU l) - where - - eq-number-of-elements-count : - (c1 c2 : count X) → - number-of-elements-count c1 = number-of-elements-count c2 - eq-number-of-elements-count (n1 , e1) (n2 , e2) = - is-equivalence-injective-Fin (inv-equiv e2 ∘e e1) -``` - -### Any two counts for equivalent types have the same number of elements - -```agda -module _ - {l1 l2 : Level} (A : UU l1) (B : UU l2) (H : A ≃ B) - where - - eq-number-of-elements-count-equiv : - (cA : count A) (cB : count B) → - number-of-elements-count cA = number-of-elements-count cB - eq-number-of-elements-count-equiv cA (nB , eB) = - eq-number-of-elements-count A cA (nB , inv-equiv H ∘e eB) -``` - ### Types equipped with countings are closed under equivalences ```agda From eff9491905f8a72678f0c9026c311a0dbb7ba7c5 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 19 Mar 2025 09:45:39 -0700 Subject: [PATCH 23/66] Progress --- .../commutative-semirings.lagda.md | 6 + ...ower-series-commutative-semirings.lagda.md | 586 ++++++++++++++++++ .../function-commutative-monoids.lagda.md | 2 +- 3 files changed, 593 insertions(+), 1 deletion(-) create mode 100644 src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md diff --git a/src/commutative-algebra/commutative-semirings.lagda.md b/src/commutative-algebra/commutative-semirings.lagda.md index 78e21f5b30..257f89fa25 100644 --- a/src/commutative-algebra/commutative-semirings.lagda.md +++ b/src/commutative-algebra/commutative-semirings.lagda.md @@ -10,6 +10,7 @@ module commutative-algebra.commutative-semirings where open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.natural-numbers +open import foundation.action-on-identifications-binary-functions open import foundation.dependent-pair-types open import foundation.identity-types open import foundation.iterated-dependent-product-types @@ -176,6 +177,11 @@ module _ (x y : type-Commutative-Semiring) → type-Commutative-Semiring mul-Commutative-Semiring' = mul-Semiring' semiring-Commutative-Semiring + ap-mul-Commutative-Semiring : + {x x' y y' : type-Commutative-Semiring} (p : Id x x') (q : Id y y') → + Id (mul-Commutative-Semiring x y) (mul-Commutative-Semiring x' y') + ap-mul-Commutative-Semiring p q = ap-binary mul-Commutative-Semiring p q + one-Commutative-Semiring : type-Commutative-Semiring one-Commutative-Semiring = one-Semiring semiring-Commutative-Semiring diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md new file mode 100644 index 0000000000..831ce6b9c4 --- /dev/null +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -0,0 +1,586 @@ +# Formal power series on commutative semirings + +```agda +module commutative-algebra.formal-power-series-commutative-semirings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-semirings +open import commutative-algebra.sums-commutative-semirings + +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.natural-numbers +open import elementary-number-theory.inequality-natural-numbers +open import elementary-number-theory.strict-inequality-natural-numbers +open import elementary-number-theory.equality-natural-numbers + +open import foundation.action-on-identifications-functions +open import foundation.coproduct-types +open import foundation.dependent-pair-types +open import foundation.equivalences +open import foundation.equality-dependent-pair-types +open import foundation.function-extensionality +open import foundation.propositions +open import foundation.cartesian-product-types +open import foundation.function-types +open import foundation.homotopies +open import foundation.identity-types +open import foundation.involutions +open import foundation.sets +open import foundation.equivalences +open import foundation.unit-type +open import foundation.unital-binary-operations +open import foundation.sections +open import foundation.retractions +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import group-theory.abelian-groups +open import group-theory.groups +open import group-theory.monoids +open import group-theory.commutative-monoids +open import group-theory.semigroups +open import group-theory.function-commutative-monoids + +open import univalent-combinatorics.standard-finite-types +open import univalent-combinatorics.dependent-pair-types +open import univalent-combinatorics.counting +open import univalent-combinatorics.finite-types +``` + +
+ +## Idea + +A +{{#concept "formal power series" Agda=formal-power-series-Commutative-Semiring WDID=Q1003025 WD="formal power series"}} +in a [commutative semiring](commutative-algebra.commutative-semirings.md) `R` is a +symbolic infinite sum over all `n : ℕ` of `cₙ xⁿ`, where `cₙ : R`. Convergence +of this sum is not relevant, but with the standard definitions of addition and +multiplication for power series, this forms a new commutative semiring. + +## Definition + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + opaque + formal-power-series-Commutative-Semiring : UU l + formal-power-series-Commutative-Semiring = ℕ → type-Commutative-Semiring R + + formal-power-series-coefficients-Commutative-Semiring : + (ℕ → type-Commutative-Semiring R) → formal-power-series-Commutative-Semiring + formal-power-series-coefficients-Commutative-Semiring = id + + coefficient-formal-power-series-Commutative-Semiring : + formal-power-series-Commutative-Semiring → ℕ → type-Commutative-Semiring R + coefficient-formal-power-series-Commutative-Semiring = id + + coefficient-formal-power-series-coefficients-Commutative-Semiring : + (c : ℕ → type-Commutative-Semiring R) → + coefficient-formal-power-series-Commutative-Semiring + (formal-power-series-coefficients-Commutative-Semiring c) ~ c + coefficient-formal-power-series-coefficients-Commutative-Semiring _ _ = refl + + eq-formal-power-series-coefficients-Commutative-Semiring : + (p : formal-power-series-Commutative-Semiring) → + p = + formal-power-series-coefficients-Commutative-Semiring + ( coefficient-formal-power-series-Commutative-Semiring p) + eq-formal-power-series-coefficients-Commutative-Semiring _ = refl + + eq-htpy-coefficients-formal-power-series-Commutative-Semiring : + ( p q : formal-power-series-Commutative-Semiring) → + ( coefficient-formal-power-series-Commutative-Semiring p ~ + coefficient-formal-power-series-Commutative-Semiring q) → + p = q + eq-htpy-coefficients-formal-power-series-Commutative-Semiring _ _ = eq-htpy + + is-set-formal-power-series-Commutative-Semiring : + is-set formal-power-series-Commutative-Semiring + is-set-formal-power-series-Commutative-Semiring = + is-set-function-type (is-set-type-Set (set-Commutative-Semiring R)) + + set-formal-power-series-Commutative-Semiring : Set l + set-formal-power-series-Commutative-Semiring = + formal-power-series-Commutative-Semiring , + is-set-formal-power-series-Commutative-Semiring +``` + +## Operations + +### Zero formal power series + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + opaque + unfolding formal-power-series-Commutative-Semiring + + zero-formal-power-series-Commutative-Semiring : + formal-power-series-Commutative-Semiring R + zero-formal-power-series-Commutative-Semiring _ = + zero-Commutative-Semiring R + + eq-coefficient-zero-formal-power-series-Commutative-Semiring : + zero-formal-power-series-Commutative-Semiring = + formal-power-series-coefficients-Commutative-Semiring + ( R) + ( λ _ → zero-Commutative-Semiring R) + eq-coefficient-zero-formal-power-series-Commutative-Semiring = refl + + htpy-coefficient-zero-formal-power-series-Commutative-Semiring : + coefficient-formal-power-series-Commutative-Semiring + ( R) + ( zero-formal-power-series-Commutative-Semiring) ~ + (λ _ → zero-Commutative-Semiring R) + htpy-coefficient-zero-formal-power-series-Commutative-Semiring _ = refl +``` + +### Constant formal power series + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + coefficient-constant-formal-power-series-Commutative-Semiring : + type-Commutative-Semiring R → ℕ → type-Commutative-Semiring R + coefficient-constant-formal-power-series-Commutative-Semiring c zero-ℕ = c + coefficient-constant-formal-power-series-Commutative-Semiring c (succ-ℕ _) = + zero-Commutative-Semiring R + + opaque + unfolding formal-power-series-Commutative-Semiring + + constant-formal-power-series-Commutative-Semiring : + type-Commutative-Semiring R → formal-power-series-Commutative-Semiring R + constant-formal-power-series-Commutative-Semiring = + coefficient-constant-formal-power-series-Commutative-Semiring + + eq-coefficient-constant-formal-power-series-Commutative-Semiring : + (c : type-Commutative-Semiring R) → + constant-formal-power-series-Commutative-Semiring c = + formal-power-series-coefficients-Commutative-Semiring + ( R) + ( coefficient-constant-formal-power-series-Commutative-Semiring c) + eq-coefficient-constant-formal-power-series-Commutative-Semiring c = refl + + one-formal-power-series-Commutative-Semiring : + formal-power-series-Commutative-Semiring R + one-formal-power-series-Commutative-Semiring = + constant-formal-power-series-Commutative-Semiring + ( one-Commutative-Semiring R) +``` + +#### The zero formal power series is the constant formal power series for zero + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + opaque + unfolding formal-power-series-Commutative-Semiring + unfolding zero-formal-power-series-Commutative-Semiring + unfolding constant-formal-power-series-Commutative-Semiring + + eq-zero-constant-formal-power-series-Commutative-Semiring : + constant-formal-power-series-Commutative-Semiring + R (zero-Commutative-Semiring R) = + zero-formal-power-series-Commutative-Semiring R + eq-zero-constant-formal-power-series-Commutative-Semiring = + eq-htpy (λ { zero-ℕ → refl ; (succ-ℕ _) → refl}) +``` + +### Addition + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + coefficient-add-formal-power-series-Commutative-Semiring : + (p q : formal-power-series-Commutative-Semiring R) (n : ℕ) → + type-Commutative-Semiring R + coefficient-add-formal-power-series-Commutative-Semiring p q = + mul-function-Commutative-Monoid + ( additive-commutative-monoid-Commutative-Semiring R) + ( ℕ) + ( coefficient-formal-power-series-Commutative-Semiring R p) + ( coefficient-formal-power-series-Commutative-Semiring R q) + + opaque + unfolding formal-power-series-Commutative-Semiring + + add-formal-power-series-Commutative-Semiring : + formal-power-series-Commutative-Semiring R → + formal-power-series-Commutative-Semiring R → + formal-power-series-Commutative-Semiring R + add-formal-power-series-Commutative-Semiring = + coefficient-add-formal-power-series-Commutative-Semiring + + eq-coefficient-add-formal-power-series-Commutative-Semiring : + (p q : formal-power-series-Commutative-Semiring R) → + add-formal-power-series-Commutative-Semiring p q = + formal-power-series-coefficients-Commutative-Semiring + ( R) + ( coefficient-add-formal-power-series-Commutative-Semiring p q) + eq-coefficient-add-formal-power-series-Commutative-Semiring p q = refl + + htpy-coefficient-add-formal-power-series-Commutative-Semiring : + (p q : formal-power-series-Commutative-Semiring R) → + coefficient-formal-power-series-Commutative-Semiring + ( R) + ( add-formal-power-series-Commutative-Semiring p q) ~ + coefficient-add-formal-power-series-Commutative-Semiring p q + htpy-coefficient-add-formal-power-series-Commutative-Semiring p q n = refl +``` + +#### Commutativity + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + opaque + unfolding add-formal-power-series-Commutative-Semiring + + commutative-add-formal-power-series-Commutative-Semiring : + (p q : formal-power-series-Commutative-Semiring R) → + add-formal-power-series-Commutative-Semiring R p q = + add-formal-power-series-Commutative-Semiring R q p + commutative-add-formal-power-series-Commutative-Semiring p q = + commutative-mul-function-Commutative-Monoid + ( additive-commutative-monoid-Commutative-Semiring R) ℕ _ _ +``` + +#### Unit laws + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + opaque + unfolding add-formal-power-series-Commutative-Semiring + unfolding zero-formal-power-series-Commutative-Semiring + + left-unit-law-add-formal-power-series-Commutative-Semiring : + (p : formal-power-series-Commutative-Semiring R) → + add-formal-power-series-Commutative-Semiring + ( R) + ( zero-formal-power-series-Commutative-Semiring R) + ( p) = p + left-unit-law-add-formal-power-series-Commutative-Semiring = + left-unit-law-mul-function-Commutative-Monoid + ( additive-commutative-monoid-Commutative-Semiring R) + ( ℕ) + + right-unit-law-add-formal-power-series-Commutative-Semiring : + (p : formal-power-series-Commutative-Semiring R) → + add-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( zero-formal-power-series-Commutative-Semiring R) = p + right-unit-law-add-formal-power-series-Commutative-Semiring = + right-unit-law-mul-function-Commutative-Monoid + ( additive-commutative-monoid-Commutative-Semiring R) + ( ℕ) +``` + +#### Associativity + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + opaque + unfolding formal-power-series-Commutative-Semiring + unfolding add-formal-power-series-Commutative-Semiring + + associative-add-formal-power-series-Commutative-Semiring : + (p q r : formal-power-series-Commutative-Semiring R) → + add-formal-power-series-Commutative-Semiring + ( R) + ( add-formal-power-series-Commutative-Semiring R p q) + ( r) = + add-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( add-formal-power-series-Commutative-Semiring R q r) + associative-add-formal-power-series-Commutative-Semiring = + associative-mul-function-Commutative-Monoid + ( additive-commutative-monoid-Commutative-Semiring R) + ( ℕ) +``` + +#### The additive commutative monoid of formal power series + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + semigroup-add-formal-power-series-Commutative-Semiring : Semigroup l + semigroup-add-formal-power-series-Commutative-Semiring = + set-formal-power-series-Commutative-Semiring R , + add-formal-power-series-Commutative-Semiring R , + associative-add-formal-power-series-Commutative-Semiring R + + is-unital-add-formal-power-series-Commutative-Semiring : + is-unital (add-formal-power-series-Commutative-Semiring R) + is-unital-add-formal-power-series-Commutative-Semiring = + zero-formal-power-series-Commutative-Semiring R , + left-unit-law-add-formal-power-series-Commutative-Semiring R , + right-unit-law-add-formal-power-series-Commutative-Semiring R + + monoid-add-formal-power-series-Commutative-Semiring : Monoid l + monoid-add-formal-power-series-Commutative-Semiring = + semigroup-add-formal-power-series-Commutative-Semiring , + is-unital-add-formal-power-series-Commutative-Semiring + + commutative-monoid-add-formal-power-series-Commutative-Semiring : + Commutative-Monoid l + commutative-monoid-add-formal-power-series-Commutative-Semiring = + monoid-add-formal-power-series-Commutative-Semiring , + commutative-add-formal-power-series-Commutative-Semiring R +``` + +### Multiplication + +```agda +pair-with-sum-ℕ : ℕ → UU lzero +pair-with-sum-ℕ n = Σ ℕ ( λ a → Σ ℕ (λ b → b +ℕ a = n)) + +abstract + equiv-pair-with-sum-leq-ℕ : + (n : ℕ) → Σ ℕ (λ k → leq-ℕ k n) ≃ pair-with-sum-ℕ n + equiv-pair-with-sum-leq-ℕ n = + ( λ (k , k≤n) → k , subtraction-leq-ℕ k n k≤n) , + ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , + λ (k , l , l+k=n) → + let + (l' , l'+k=n) = subtraction-leq-ℕ k n (leq-subtraction-ℕ k n l l+k=n) + in + eq-pair-Σ + ( refl) + ( eq-pair-Σ + (is-injective-right-add-ℕ k (l'+k=n ∙ inv l+k=n)) + (eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n)))) , + ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , + (λ (k , k≤n) → eq-pair-Σ refl (eq-type-Prop (leq-ℕ-Prop k n)))) + + count-pair-with-sum-ℕ : (n : ℕ) → count (pair-with-sum-ℕ n) + count-pair-with-sum-ℕ n = + succ-ℕ n , equiv-pair-with-sum-leq-ℕ n ∘e equiv-fin-succ-leq-ℕ n + +finite-type-pair-with-sum-ℕ : ℕ → Finite-Type lzero +finite-type-pair-with-sum-ℕ n = + pair-with-sum-ℕ n , + is-finite-count (count-pair-with-sum-ℕ n) + +module _ + {l : Level} (R : Commutative-Semiring l) + (p q : formal-power-series-Commutative-Semiring R) + where + + coefficient-mul-formal-power-series-Commutative-Semiring : + ℕ → type-Commutative-Semiring R + coefficient-mul-formal-power-series-Commutative-Semiring n = + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + mul-Commutative-Semiring + ( R) + ( coefficient-formal-power-series-Commutative-Semiring R p a) + ( coefficient-formal-power-series-Commutative-Semiring R q b)) + + abstract + mul-formal-power-series-Commutative-Semiring : + formal-power-series-Commutative-Semiring R + mul-formal-power-series-Commutative-Semiring = + formal-power-series-coefficients-Commutative-Semiring + ( R) + ( coefficient-mul-formal-power-series-Commutative-Semiring) + + eq-coefficient-mul-formal-power-series-Commutative-Semiring : + coefficient-formal-power-series-Commutative-Semiring + ( R) + ( mul-formal-power-series-Commutative-Semiring) ~ + coefficient-mul-formal-power-series-Commutative-Semiring + eq-coefficient-mul-formal-power-series-Commutative-Semiring = + coefficient-formal-power-series-coefficients-Commutative-Semiring R _ +``` + +#### Associativity + +```agda +module _ + (n : ℕ) + where + + triple-with-sum-ℕ : UU lzero + triple-with-sum-ℕ = Σ ℕ (λ a → Σ ℕ (λ b → Σ ℕ (λ c → c +ℕ b +ℕ a = n))) + + map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 : + triple-with-sum-ℕ → Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) + map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 (a , b , c , c+b+a=n) = + ( a +ℕ b , + c , + ap (c +ℕ_) (commutative-add-ℕ a b) ∙ + inv (associative-add-ℕ c b a) ∙ + c+b+a=n) , + b , + a , + refl + + map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) → triple-with-sum-ℕ + map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 + ((a+b , c , c+⟨a+b⟩=n) , b , a , a+b=a+b) = + a , b , c , + associative-add-ℕ c b a ∙ + ap (c +ℕ_) (commutative-add-ℕ b a ∙ a+b=a+b) ∙ + c+⟨a+b⟩=n + + is-section-map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 : + is-section + map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 + map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 + is-section-map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 + x@(y@(.(a +ℕ b) , c , refl) , b , a , refl) + with + eq-type-Prop + (Id-Prop ℕ-Set (c +ℕ (a +ℕ b)) (c +ℕ (a +ℕ b))) + {tr + (λ b₁ → + b₁ +ℕ + pr1 + (pr1 + ((map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 ∘ + map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1) + ((a +ℕ b , c , refl) , b , a , refl))) + = c +ℕ (a +ℕ b)) + refl + (pr2 + (tr (λ a₁ → Σ ℕ (λ b₁ → b₁ +ℕ a₁ = c +ℕ (a +ℕ b))) refl + (pr2 + (pr1 + ((map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 ∘ + map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1) + ((a +ℕ b , c , refl) , b , a , refl))))))} + {refl} + ... | refl = + let x' = map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 (map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 x) + in eq-pair-Σ (eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set (c +ℕ (a +ℕ b)) (c +ℕ (a +ℕ b)))))) {! !} + +{- + triple-with-sum-equiv-Σ-pair-with-sum : + triple-with-sum-ℕ ≃ Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) + triple-with-sum-equiv-Σ-pair-with-sum = + map-equiv-triple-with-sum-Σ-pair-with-sum , + ( map-inv-equiv-triple-with-sum-Σ-pair-with-sum , + {! !}) , + ( map-inv-equiv-triple-with-sum-Σ-pair-with-sum , + {! !})-} + +module _ + {l : Level} (R : Commutative-Semiring l) + (p q r : formal-power-series-Commutative-Semiring R) + where + + abstract + associative-mul-formal-power-series-Commutative-Semiring : + mul-formal-power-series-Commutative-Semiring + ( R) + ( mul-formal-power-series-Commutative-Semiring R p q) + ( r) = + mul-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( mul-formal-power-series-Commutative-Semiring R q r) + associative-mul-formal-power-series-Commutative-Semiring = + eq-htpy-coefficients-formal-power-series-Commutative-Semiring + ( R) + ( _) + ( _) + ( λ n → equational-reasoning + coeff ((p *fps q) *fps r) n + = + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → coeff (p *fps q) a *R coeff r b) + by + eq-coefficient-mul-formal-power-series-Commutative-Semiring + ( R) + ( p *fps q) + ( r) + ( n) + = + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ a) + ( λ (c , d , _) → (coeff p c *R coeff q d) *R coeff r b)) + by + ap + ( sum-finite-Commutative-Semiring R (finite-type-pair-with-sum-ℕ n)) + ( eq-htpy + ( λ (a , b , _) → + ap-mul-Commutative-Semiring + ( R) + ( eq-coefficient-mul-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( q) + ( a)) + ( refl) ∙ + right-distributive-mul-finite-Commutative-Semiring + ( R) + ( _) + ( _) + ( coeff r b))) + = + sum-finite-Commutative-Semiring + ( R) + ( Σ-Finite-Type + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1)) + ( λ ((a , b , _) , c , d , _) → + (coeff p c *R coeff q d) *R coeff r b) + by + inv + ( sum-Σ-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1) + ( _)) + = {! !} by {! !}) + where + _*R_ : + type-Commutative-Semiring R → type-Commutative-Semiring R → + type-Commutative-Semiring R + _*R_ = mul-Commutative-Semiring R + _*fps_ : + formal-power-series-Commutative-Semiring R → + formal-power-series-Commutative-Semiring R → + formal-power-series-Commutative-Semiring R + _*fps_ = mul-formal-power-series-Commutative-Semiring R + coeff : + formal-power-series-Commutative-Semiring R → ℕ → type-Commutative-Semiring R + coeff = coefficient-formal-power-series-Commutative-Semiring R +``` diff --git a/src/group-theory/function-commutative-monoids.lagda.md b/src/group-theory/function-commutative-monoids.lagda.md index 57b44087dc..a86b1a44b5 100644 --- a/src/group-theory/function-commutative-monoids.lagda.md +++ b/src/group-theory/function-commutative-monoids.lagda.md @@ -20,7 +20,7 @@ open import group-theory.monoids ## Idea -Given a commutative monoid `M` and a type `X`, the function commuative monoid +Given a commutative monoid `M` and a type `X`, the function commutative monoid `M^X` consists of functions from `X` to the underlying type of `M`. The multiplicative operation and the unit are given pointwise. From 607058d306759f134e91433cd92a32d3b9636f59 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 19 Mar 2025 11:14:52 -0700 Subject: [PATCH 24/66] Progress --- ...ower-series-commutative-semirings.lagda.md | 80 ++++--------------- 1 file changed, 16 insertions(+), 64 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 831ce6b9c4..e35f824b78 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -429,70 +429,22 @@ module _ (n : ℕ) where - triple-with-sum-ℕ : UU lzero - triple-with-sum-ℕ = Σ ℕ (λ a → Σ ℕ (λ b → Σ ℕ (λ c → c +ℕ b +ℕ a = n))) - - map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 : - triple-with-sum-ℕ → Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) - map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 (a , b , c , c+b+a=n) = - ( a +ℕ b , - c , - ap (c +ℕ_) (commutative-add-ℕ a b) ∙ - inv (associative-add-ℕ c b a) ∙ - c+b+a=n) , - b , - a , - refl - - map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 : - Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) → triple-with-sum-ℕ - map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 - ((a+b , c , c+⟨a+b⟩=n) , b , a , a+b=a+b) = - a , b , c , - associative-add-ℕ c b a ∙ - ap (c +ℕ_) (commutative-add-ℕ b a ∙ a+b=a+b) ∙ - c+⟨a+b⟩=n - - is-section-map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 : - is-section - map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 - map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 - is-section-map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 - x@(y@(.(a +ℕ b) , c , refl) , b , a , refl) - with - eq-type-Prop - (Id-Prop ℕ-Set (c +ℕ (a +ℕ b)) (c +ℕ (a +ℕ b))) - {tr - (λ b₁ → - b₁ +ℕ - pr1 - (pr1 - ((map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 ∘ - map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1) - ((a +ℕ b , c , refl) , b , a , refl))) - = c +ℕ (a +ℕ b)) - refl - (pr2 - (tr (λ a₁ → Σ ℕ (λ b₁ → b₁ +ℕ a₁ = c +ℕ (a +ℕ b))) refl - (pr2 - (pr1 - ((map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 ∘ - map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1) - ((a +ℕ b , c , refl) , b , a , refl))))))} - {refl} - ... | refl = - let x' = map-equiv-triple-with-sum-Σ-pair-with-sum-pr1 (map-inv-equiv-triple-with-sum-Σ-pair-with-sum-pr1 x) - in eq-pair-Σ (eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set (c +ℕ (a +ℕ b)) (c +ℕ (a +ℕ b)))))) {! !} - -{- - triple-with-sum-equiv-Σ-pair-with-sum : - triple-with-sum-ℕ ≃ Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) - triple-with-sum-equiv-Σ-pair-with-sum = - map-equiv-triple-with-sum-Σ-pair-with-sum , - ( map-inv-equiv-triple-with-sum-Σ-pair-with-sum , - {! !}) , - ( map-inv-equiv-triple-with-sum-Σ-pair-with-sum , - {! !})-} + map-equiv-pair-with-sum-pr1-pr2 : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) → + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) + map-equiv-pair-with-sum-pr1-pr2 ((p , c , c+p=n) , a , b , b+a=p) = + ((c , p , commutative-add-ℕ p c ∙ c+p=n) , a , b , b+a=p) + + map-inv-equiv-pair-with-sum-pr1-pr2 : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) → + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) + map-inv-equiv-pair-with-sum-pr1-pr2 ((c , p , p+c=n) , a , b , b+a=p) = + ((p , c , commutative-add-ℕ c p ∙ p+c=n) , a , b , b+a=p) + + is-section-map-inv-equiv-pair-with-sum-pr1-pr2 : + is-section map-equiv-pair-with-sum-pr1-pr2 map-inv-equiv-pair-with-sum-pr1-pr2 + is-section-map-inv-equiv-pair-with-sum-pr1-pr2 ((c , p , p+c=n) , a , b , b+a=p) + = eq-pair-Σ (eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set _ _)))) (eq-pair-Σ {! !} (eq-pair-Σ {! !} {! !})) module _ {l : Level} (R : Commutative-Semiring l) From 84bd6d7fb6fc445cbe4ec241ca0a1afda3865278 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 19 Mar 2025 11:16:25 -0700 Subject: [PATCH 25/66] Progress --- src/commutative-algebra/sums-commutative-rings.lagda.md | 1 + .../products-of-tuples-of-elements-commutative-monoids.lagda.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 542efd099d..6652de32a6 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -16,6 +16,7 @@ open import elementary-number-theory.natural-numbers open import finite-group-theory.permutations-standard-finite-types open import foundation.action-on-identifications-functions +open import foundation.automorphisms open import foundation.coproduct-types open import foundation.empty-types open import foundation.equivalences diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 8c32e607fc..718607a477 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -50,9 +50,9 @@ open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.counting open import univalent-combinatorics.counting-dependent-pair-types open import univalent-combinatorics.dependent-pair-types +open import univalent-combinatorics.double-counting open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types -open import univalent-combinatorics.double-counting ``` From 1c272bd5a31e59b31e2636e1a3788f152d96363f Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 19 Mar 2025 12:19:42 -0700 Subject: [PATCH 26/66] Progress --- ...rmal-power-series-commutative-semirings.lagda.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index e35f824b78..2bb8577e40 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -20,6 +20,7 @@ open import foundation.action-on-identifications-functions open import foundation.coproduct-types open import foundation.dependent-pair-types open import foundation.equivalences +open import foundation.dependent-identifications open import foundation.equality-dependent-pair-types open import foundation.function-extensionality open import foundation.propositions @@ -432,8 +433,9 @@ module _ map-equiv-pair-with-sum-pr1-pr2 : Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) → Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) - map-equiv-pair-with-sum-pr1-pr2 ((p , c , c+p=n) , a , b , b+a=p) = - ((c , p , commutative-add-ℕ p c ∙ c+p=n) , a , b , b+a=p) + pr1 (map-equiv-pair-with-sum-pr1-pr2 ((p , c , c+p=n) , _)) = + (c , p , commutative-add-ℕ p c ∙ c+p=n) + pr2 (map-equiv-pair-with-sum-pr1-pr2 (_ , y)) = y map-inv-equiv-pair-with-sum-pr1-pr2 : Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) → @@ -443,8 +445,11 @@ module _ is-section-map-inv-equiv-pair-with-sum-pr1-pr2 : is-section map-equiv-pair-with-sum-pr1-pr2 map-inv-equiv-pair-with-sum-pr1-pr2 - is-section-map-inv-equiv-pair-with-sum-pr1-pr2 ((c , p , p+c=n) , a , b , b+a=p) - = eq-pair-Σ (eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set _ _)))) (eq-pair-Σ {! !} (eq-pair-Σ {! !} {! !})) + is-section-map-inv-equiv-pair-with-sum-pr1-pr2 x@(y@(c , p , p+c=n) , a , b , b+a=p) = {! !} + + is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 : + is-retraction map-equiv-pair-with-sum-pr1-pr2 map-inv-equiv-pair-with-sum-pr1-pr2 + is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 ((p , c , c+p=n) , a , b , b+a=p) = {! !} module _ {l : Level} (R : Commutative-Semiring l) From 0e750f15656840bb73e3f14d07c0e78f8c122243 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 19 Mar 2025 12:31:34 -0700 Subject: [PATCH 27/66] make pre-commit'; --- src/elementary-number-theory.lagda.md | 1 + .../pairs-with-natural-sums.lagda.md | 93 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/elementary-number-theory/pairs-with-natural-sums.lagda.md diff --git a/src/elementary-number-theory.lagda.md b/src/elementary-number-theory.lagda.md index 11611b1a6a..4e7a7e3747 100644 --- a/src/elementary-number-theory.lagda.md +++ b/src/elementary-number-theory.lagda.md @@ -128,6 +128,7 @@ open import elementary-number-theory.nonzero-integers public open import elementary-number-theory.nonzero-natural-numbers public open import elementary-number-theory.nonzero-rational-numbers public open import elementary-number-theory.ordinal-induction-natural-numbers public +open import elementary-number-theory.pairs-with-natural-sums public open import elementary-number-theory.parity-natural-numbers public open import elementary-number-theory.peano-arithmetic public open import elementary-number-theory.pisano-periods public diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md new file mode 100644 index 0000000000..ea8bfe10de --- /dev/null +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -0,0 +1,93 @@ +# Pairs of natural numbers with a given sum + +```agda +module elementary-number-theory.pairs-with-natural-sums where +``` + +
Imports + +```agda +open import elementary-number-theory.addition-natural-numbers +open import elementary-number-theory.equality-natural-numbers +open import elementary-number-theory.natural-numbers + +open import foundation.dependent-pair-types +open import foundation.equality-dependent-pair-types +open import foundation.equivalences +open import foundation.function-types +open import foundation.identity-types +open import foundation.propositions +open import foundation.retractions +open import foundation.sections +open import foundation.sets +open import foundation.universe-levels +``` + +
+ +## Idea + +A pair of natural numbers with a specific known sum resembles an +[integer partition](elementary-number-theory.integer-partitions.md), but is +ordered, and the components may be zero. + +## Definition + +```agda +pair-with-sum-ℕ : ℕ → UU lzero +pair-with-sum-ℕ n = Σ ℕ ( λ a → Σ ℕ (λ b → b +ℕ a = n)) +``` + +## Properties + +### Equivalence of dependent pairs further partitioning a component + +```agda +module _ + (n : ℕ) + where + + map-equiv-pair-with-sum-pr1-pr2 : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) → + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) + pr1 (map-equiv-pair-with-sum-pr1-pr2 ((p , c , c+p=n) , _)) = + (c , p , commutative-add-ℕ p c ∙ c+p=n) + pr2 (map-equiv-pair-with-sum-pr1-pr2 (_ , y)) = y + + map-inv-equiv-pair-with-sum-pr1-pr2 : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) → + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) + pr1 (map-inv-equiv-pair-with-sum-pr1-pr2 ((c , p , p+c=n) , _)) = + (p , c , commutative-add-ℕ c p ∙ p+c=n) + pr2 (map-inv-equiv-pair-with-sum-pr1-pr2 (_ , y)) = y + + is-section-map-inv-equiv-pair-with-sum-pr1-pr2 : + is-section + map-equiv-pair-with-sum-pr1-pr2 + map-inv-equiv-pair-with-sum-pr1-pr2 + is-section-map-inv-equiv-pair-with-sum-pr1-pr2 + x@(y@(c , p , p+c=n) , a , b , b+a=p) = + eq-pair-Σ + ( eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set _ _)))) + {! !} + + is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 : + is-retraction + map-equiv-pair-with-sum-pr1-pr2 + map-inv-equiv-pair-with-sum-pr1-pr2 + is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 + ((p , c , c+p=n) , a , b , b+a=p) = + eq-pair-Σ + ( eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set _ _)))) + {! !} + + equiv-pair-with-sum-pr1-pr2 : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) ≃ + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) + equiv-pair-with-sum-pr1-pr2 = + map-equiv-pair-with-sum-pr1-pr2 , + ( map-inv-equiv-pair-with-sum-pr1-pr2 , + is-section-map-inv-equiv-pair-with-sum-pr1-pr2) , + ( map-inv-equiv-pair-with-sum-pr1-pr2 , + is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2) +``` From 76586f52959c007fa4d3634583bcdab4f2e9030d Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 19 Mar 2025 13:27:22 -0700 Subject: [PATCH 28/66] Finish --- .../pairs-with-natural-sums.lagda.md | 62 ++++++++++++++++--- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md index ea8bfe10de..be0e8011a7 100644 --- a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -17,9 +17,11 @@ open import foundation.equivalences open import foundation.function-types open import foundation.identity-types open import foundation.propositions +open import foundation.cartesian-product-types open import foundation.retractions open import foundation.sections open import foundation.sets +open import foundation.conjunction open import foundation.universe-levels ``` @@ -40,6 +42,42 @@ pair-with-sum-ℕ n = Σ ℕ ( λ a → Σ ℕ (λ b → b +ℕ a = n)) ## Properties +### Equality characterization + +```agda +module _ + (n : ℕ) + where + + Eq-pair-with-sum-ℕ : pair-with-sum-ℕ n → pair-with-sum-ℕ n → UU lzero + Eq-pair-with-sum-ℕ (a , b , _) (a' , b' , _) = (a = a') × (b = b') + + is-prop-Eq-pair-with-sum-ℕ : + (x y : pair-with-sum-ℕ n) → is-prop (Eq-pair-with-sum-ℕ x y) + is-prop-Eq-pair-with-sum-ℕ _ _ = + is-prop-conjunction-Prop (Id-Prop ℕ-Set _ _) (Id-Prop ℕ-Set _ _) + + refl-Eq-pair-with-sum-ℕ : (x : pair-with-sum-ℕ n) → Eq-pair-with-sum-ℕ x x + refl-Eq-pair-with-sum-ℕ _ = refl , refl + + eq-Eq-pair-with-sum-ℕ : + (x y : pair-with-sum-ℕ n) → Eq-pair-with-sum-ℕ x y → x = y + eq-Eq-pair-with-sum-ℕ x y (refl , refl) = + eq-pair-eq-fiber (eq-pair-eq-fiber (eq-type-Prop (Id-Prop ℕ-Set _ _))) + + abstract + is-set-pair-with-sum-ℕ : is-set (pair-with-sum-ℕ n) + is-set-pair-with-sum-ℕ = + is-set-prop-in-id + Eq-pair-with-sum-ℕ + is-prop-Eq-pair-with-sum-ℕ + refl-Eq-pair-with-sum-ℕ + eq-Eq-pair-with-sum-ℕ + + set-pair-with-sum-ℕ : Set lzero + set-pair-with-sum-ℕ = pair-with-sum-ℕ n , is-set-pair-with-sum-ℕ +``` + ### Equivalence of dependent pairs further partitioning a component ```agda @@ -66,20 +104,28 @@ module _ map-equiv-pair-with-sum-pr1-pr2 map-inv-equiv-pair-with-sum-pr1-pr2 is-section-map-inv-equiv-pair-with-sum-pr1-pr2 - x@(y@(c , p , p+c=n) , a , b , b+a=p) = - eq-pair-Σ - ( eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set _ _)))) - {! !} + x@((c , p , p+c=n) , a , b , b+a=p) = + inv + ( ind-Id + ( p+c=n) + ( λ H' H=H' → x = ((c , p , H') , a , b , b+a=p)) + ( refl) + ( _) + ( eq-type-Prop (Id-Prop ℕ-Set _ _))) is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 : is-retraction map-equiv-pair-with-sum-pr1-pr2 map-inv-equiv-pair-with-sum-pr1-pr2 is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 - ((p , c , c+p=n) , a , b , b+a=p) = - eq-pair-Σ - ( eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set _ _)))) - {! !} + x@((p , c , c+p=n) , a , b , b+a=p) = + inv + ( ind-Id + ( c+p=n) + ( λ H' H=H' → x = ((p , c , H') , a , b , b+a=p)) + ( refl) + ( _) + ( eq-type-Prop (Id-Prop ℕ-Set _ _))) equiv-pair-with-sum-pr1-pr2 : Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) ≃ From dd7c45bdd91fcd28473a4bf46dc3ffac71927e89 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 08:41:16 -0700 Subject: [PATCH 29/66] Progress --- ...ower-series-commutative-semirings.lagda.md | 130 +++++++----- .../sums-commutative-rings.lagda.md | 12 +- .../sums-commutative-semirings.lagda.md | 12 +- .../pairs-with-natural-sums.lagda.md | 186 ++++++++++++++---- 4 files changed, 241 insertions(+), 99 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 2bb8577e40..72ad21b1f5 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -15,6 +15,7 @@ open import elementary-number-theory.natural-numbers open import elementary-number-theory.inequality-natural-numbers open import elementary-number-theory.strict-inequality-natural-numbers open import elementary-number-theory.equality-natural-numbers +open import elementary-number-theory.pairs-with-natural-sums open import foundation.action-on-identifications-functions open import foundation.coproduct-types @@ -359,35 +360,7 @@ module _ ### Multiplication ```agda -pair-with-sum-ℕ : ℕ → UU lzero -pair-with-sum-ℕ n = Σ ℕ ( λ a → Σ ℕ (λ b → b +ℕ a = n)) - -abstract - equiv-pair-with-sum-leq-ℕ : - (n : ℕ) → Σ ℕ (λ k → leq-ℕ k n) ≃ pair-with-sum-ℕ n - equiv-pair-with-sum-leq-ℕ n = - ( λ (k , k≤n) → k , subtraction-leq-ℕ k n k≤n) , - ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , - λ (k , l , l+k=n) → - let - (l' , l'+k=n) = subtraction-leq-ℕ k n (leq-subtraction-ℕ k n l l+k=n) - in - eq-pair-Σ - ( refl) - ( eq-pair-Σ - (is-injective-right-add-ℕ k (l'+k=n ∙ inv l+k=n)) - (eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n)))) , - ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , - (λ (k , k≤n) → eq-pair-Σ refl (eq-type-Prop (leq-ℕ-Prop k n)))) - - count-pair-with-sum-ℕ : (n : ℕ) → count (pair-with-sum-ℕ n) - count-pair-with-sum-ℕ n = - succ-ℕ n , equiv-pair-with-sum-leq-ℕ n ∘e equiv-fin-succ-leq-ℕ n - -finite-type-pair-with-sum-ℕ : ℕ → Finite-Type lzero -finite-type-pair-with-sum-ℕ n = - pair-with-sum-ℕ n , - is-finite-count (count-pair-with-sum-ℕ n) + module _ {l : Level} (R : Commutative-Semiring l) @@ -426,31 +399,6 @@ module _ #### Associativity ```agda -module _ - (n : ℕ) - where - - map-equiv-pair-with-sum-pr1-pr2 : - Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) → - Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) - pr1 (map-equiv-pair-with-sum-pr1-pr2 ((p , c , c+p=n) , _)) = - (c , p , commutative-add-ℕ p c ∙ c+p=n) - pr2 (map-equiv-pair-with-sum-pr1-pr2 (_ , y)) = y - - map-inv-equiv-pair-with-sum-pr1-pr2 : - Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) → - Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) - map-inv-equiv-pair-with-sum-pr1-pr2 ((c , p , p+c=n) , a , b , b+a=p) = - ((p , c , commutative-add-ℕ c p ∙ p+c=n) , a , b , b+a=p) - - is-section-map-inv-equiv-pair-with-sum-pr1-pr2 : - is-section map-equiv-pair-with-sum-pr1-pr2 map-inv-equiv-pair-with-sum-pr1-pr2 - is-section-map-inv-equiv-pair-with-sum-pr1-pr2 x@(y@(c , p , p+c=n) , a , b , b+a=p) = {! !} - - is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 : - is-retraction map-equiv-pair-with-sum-pr1-pr2 map-inv-equiv-pair-with-sum-pr1-pr2 - is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 ((p , c , c+p=n) , a , b , b+a=p) = {! !} - module _ {l : Level} (R : Commutative-Semiring l) (p q r : formal-power-series-Commutative-Semiring R) @@ -526,6 +474,80 @@ module _ ( finite-type-pair-with-sum-ℕ n) ( finite-type-pair-with-sum-ℕ ∘ pr1) ( _)) + = + sum-finite-Commutative-Semiring + ( R) + ( Σ-Finite-Type + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1 ∘ pr2)) + ( λ ((a , b , _) , c , d , _) → + (coeff p c *R coeff q d) *R coeff r a) + by + sum-equiv-finite-Commutative-Semiring R _ _ + ( inv-equiv (equiv-pair-with-sum-pr1-pr2 n)) + ( _) + = + sum-finite-Commutative-Semiring + ( R) + ( Σ-Finite-Type + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1 ∘ pr2)) + ( λ ((a , b , _) , c , d , _) → + coeff p c *R (coeff q d *R coeff r a)) + by + ap + ( sum-finite-Commutative-Semiring R _) + ( eq-htpy (λ _ → associative-mul-Commutative-Semiring R _ _ _)) + = + sum-finite-Commutative-Semiring + ( R) + ( Σ-Finite-Type + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1 ∘ pr2)) + ( λ ((a , b , _) , c , d , _) → + coeff p a *R (coeff q c *R coeff r d)) + by + sum-aut-finite-Commutative-Semiring + ( R) + ( Σ-Finite-Type + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1 ∘ pr2)) + ( equiv-permute-components-triple-with-sum-pr2 n) + ( _) + = + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ b) + ( λ (c , d , _) → coeff p a *R (coeff q c *R coeff r d))) + by + sum-Σ-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( finite-type-pair-with-sum-ℕ ∘ pr1 ∘ pr2) + ( λ (a , b , _) (c , d , _) → + coeff p a *R (coeff q c *R coeff r d)) + = + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + coeff p a *R + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ b) + ( λ (c , d , _) → coeff q c *R coeff r d)) + by + ap + ( sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n)) + ( eq-htpy + ( λ (a , b , _) → + inv {! left-distributive-mul-sum-Commutative-Semiring R !})) = {! !} by {! !}) where _*R_ : diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index e4ed506e41..e5d5a7b2b1 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -154,22 +154,22 @@ module _ right-distributive-mul-sum-Commutative-Ring = right-distributive-mul-sum-Ring (ring-Commutative-Ring R) - left-distributive-mul-finite-Commutative-Ring : + left-distributive-mul-sum-finite-Commutative-Ring : {l2 : Level} (A : Finite-Type l2) (x : type-Commutative-Ring R) → (f : type-Finite-Type A → type-Commutative-Ring R) → mul-Commutative-Ring R x (sum-finite-Commutative-Ring R A f) = sum-finite-Commutative-Ring R A (mul-Commutative-Ring R x ∘ f) - left-distributive-mul-finite-Commutative-Ring = - left-distributive-mul-finite-Ring (ring-Commutative-Ring R) + left-distributive-mul-sum-finite-Commutative-Ring = + left-distributive-mul-sum-finite-Ring (ring-Commutative-Ring R) - right-distributive-mul-finite-Commutative-Ring : + right-distributive-mul-sum-finite-Commutative-Ring : {l2 : Level} (A : Finite-Type l2) → (f : type-Finite-Type A → type-Commutative-Ring R) → (x : type-Commutative-Ring R) → mul-Commutative-Ring R (sum-finite-Commutative-Ring R A f) x = sum-finite-Commutative-Ring R A (mul-Commutative-Ring' R x ∘ f) - right-distributive-mul-finite-Commutative-Ring = - right-distributive-mul-finite-Ring (ring-Commutative-Ring R) + right-distributive-mul-sum-finite-Commutative-Ring = + right-distributive-mul-sum-finite-Ring (ring-Commutative-Ring R) ``` ### Interchange law of sums and addition in a commutative ring diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 72f3ab043e..e2d178db7e 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -159,22 +159,22 @@ module _ right-distributive-mul-sum-Commutative-Semiring = right-distributive-mul-sum-Semiring (semiring-Commutative-Semiring R) - left-distributive-mul-finite-Commutative-Semiring : + left-distributive-mul-sum-finite-Commutative-Semiring : {l2 : Level} (A : Finite-Type l2) (x : type-Commutative-Semiring R) → (f : type-Finite-Type A → type-Commutative-Semiring R) → mul-Commutative-Semiring R x (sum-finite-Commutative-Semiring R A f) = sum-finite-Commutative-Semiring R A (mul-Commutative-Semiring R x ∘ f) - left-distributive-mul-finite-Commutative-Semiring = - left-distributive-mul-finite-Semiring (semiring-Commutative-Semiring R) + left-distributive-mul-sum-finite-Commutative-Semiring = + left-distributive-mul-sum-finite-Semiring (semiring-Commutative-Semiring R) - right-distributive-mul-finite-Commutative-Semiring : + right-distributive-mul-sum-finite-Commutative-Semiring : {l2 : Level} (A : Finite-Type l2) → (f : type-Finite-Type A → type-Commutative-Semiring R) → (x : type-Commutative-Semiring R) → mul-Commutative-Semiring R (sum-finite-Commutative-Semiring R A f) x = sum-finite-Commutative-Semiring R A (mul-Commutative-Semiring' R x ∘ f) - right-distributive-mul-finite-Commutative-Semiring = - right-distributive-mul-finite-Semiring (semiring-Commutative-Semiring R) + right-distributive-mul-sum-finite-Commutative-Semiring = + right-distributive-mul-sum-finite-Semiring (semiring-Commutative-Semiring R) ``` ### Interchange law of sums and addition in a commutative semiring diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md index be0e8011a7..98b96ceb87 100644 --- a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -10,7 +10,10 @@ module elementary-number-theory.pairs-with-natural-sums where open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.equality-natural-numbers open import elementary-number-theory.natural-numbers +open import elementary-number-theory.inequality-natural-numbers +open import foundation.action-on-identifications-functions +open import foundation.automorphisms open import foundation.dependent-pair-types open import foundation.equality-dependent-pair-types open import foundation.equivalences @@ -23,6 +26,10 @@ open import foundation.sections open import foundation.sets open import foundation.conjunction open import foundation.universe-levels + +open import univalent-combinatorics.counting +open import univalent-combinatorics.finite-types +open import univalent-combinatorics.standard-finite-types ``` @@ -50,20 +57,23 @@ module _ where Eq-pair-with-sum-ℕ : pair-with-sum-ℕ n → pair-with-sum-ℕ n → UU lzero - Eq-pair-with-sum-ℕ (a , b , _) (a' , b' , _) = (a = a') × (b = b') + Eq-pair-with-sum-ℕ (a , b , _) (a' , b' , _) = a = a' is-prop-Eq-pair-with-sum-ℕ : (x y : pair-with-sum-ℕ n) → is-prop (Eq-pair-with-sum-ℕ x y) - is-prop-Eq-pair-with-sum-ℕ _ _ = - is-prop-conjunction-Prop (Id-Prop ℕ-Set _ _) (Id-Prop ℕ-Set _ _) + is-prop-Eq-pair-with-sum-ℕ (a , _) (a' , _) = + is-prop-type-Prop (Id-Prop ℕ-Set a a') refl-Eq-pair-with-sum-ℕ : (x : pair-with-sum-ℕ n) → Eq-pair-with-sum-ℕ x x - refl-Eq-pair-with-sum-ℕ _ = refl , refl + refl-Eq-pair-with-sum-ℕ _ = refl eq-Eq-pair-with-sum-ℕ : (x y : pair-with-sum-ℕ n) → Eq-pair-with-sum-ℕ x y → x = y - eq-Eq-pair-with-sum-ℕ x y (refl , refl) = - eq-pair-eq-fiber (eq-pair-eq-fiber (eq-type-Prop (Id-Prop ℕ-Set _ _))) + eq-Eq-pair-with-sum-ℕ (a , b , b+a=n) (.a , b' , b'+a=n) refl = + eq-pair-eq-fiber + ( eq-pair-Σ + ( is-injective-right-add-ℕ a (b+a=n ∙ inv b'+a=n)) + ( eq-type-Prop (Id-Prop ℕ-Set _ _))) abstract is-set-pair-with-sum-ℕ : is-set (pair-with-sum-ℕ n) @@ -99,33 +109,34 @@ module _ (p , c , commutative-add-ℕ c p ∙ p+c=n) pr2 (map-inv-equiv-pair-with-sum-pr1-pr2 (_ , y)) = y - is-section-map-inv-equiv-pair-with-sum-pr1-pr2 : - is-section - map-equiv-pair-with-sum-pr1-pr2 - map-inv-equiv-pair-with-sum-pr1-pr2 - is-section-map-inv-equiv-pair-with-sum-pr1-pr2 - x@((c , p , p+c=n) , a , b , b+a=p) = - inv - ( ind-Id - ( p+c=n) - ( λ H' H=H' → x = ((c , p , H') , a , b , b+a=p)) - ( refl) - ( _) - ( eq-type-Prop (Id-Prop ℕ-Set _ _))) - - is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 : - is-retraction - map-equiv-pair-with-sum-pr1-pr2 - map-inv-equiv-pair-with-sum-pr1-pr2 - is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 - x@((p , c , c+p=n) , a , b , b+a=p) = - inv - ( ind-Id - ( c+p=n) - ( λ H' H=H' → x = ((p , c , H') , a , b , b+a=p)) - ( refl) - ( _) - ( eq-type-Prop (Id-Prop ℕ-Set _ _))) + abstract + is-section-map-inv-equiv-pair-with-sum-pr1-pr2 : + is-section + map-equiv-pair-with-sum-pr1-pr2 + map-inv-equiv-pair-with-sum-pr1-pr2 + is-section-map-inv-equiv-pair-with-sum-pr1-pr2 + x@((c , p , p+c=n) , a , b , b+a=p) = + inv + ( ind-Id + ( p+c=n) + ( λ H' H=H' → x = ((c , p , H') , a , b , b+a=p)) + ( refl) + ( _) + ( eq-type-Prop (Id-Prop ℕ-Set _ _))) + + is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 : + is-retraction + map-equiv-pair-with-sum-pr1-pr2 + map-inv-equiv-pair-with-sum-pr1-pr2 + is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2 + x@((p , c , c+p=n) , a , b , b+a=p) = + inv + ( ind-Id + ( c+p=n) + ( λ H' H=H' → x = ((p , c , H') , a , b , b+a=p)) + ( refl) + ( _) + ( eq-type-Prop (Id-Prop ℕ-Set _ _))) equiv-pair-with-sum-pr1-pr2 : Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) ≃ @@ -137,3 +148,112 @@ module _ ( map-inv-equiv-pair-with-sum-pr1-pr2 , is-retraction-map-inv-equiv-pair-with-sum-pr1-pr2) ``` + +### Pairs with a fixed sum are a finite type + +```agda +module _ + (n : ℕ) + where + + abstract + equiv-pair-with-sum-leq-ℕ : + Σ ℕ (λ k → leq-ℕ k n) ≃ pair-with-sum-ℕ n + equiv-pair-with-sum-leq-ℕ = + ( λ (k , k≤n) → k , subtraction-leq-ℕ k n k≤n) , + ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , + λ (k , l , l+k=n) → + let + (l' , l'+k=n) = + subtraction-leq-ℕ k n (leq-subtraction-ℕ k n l l+k=n) + in + eq-pair-eq-fiber + ( eq-pair-Σ + ( is-injective-right-add-ℕ k (l'+k=n ∙ inv l+k=n)) + ( eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n)))) , + (( λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , + (λ (k , k≤n) → eq-pair-eq-fiber (eq-type-Prop (leq-ℕ-Prop k n)))) + + count-pair-with-sum-ℕ : count (pair-with-sum-ℕ n) + count-pair-with-sum-ℕ = + succ-ℕ n , equiv-pair-with-sum-leq-ℕ ∘e equiv-fin-succ-leq-ℕ n + + finite-type-pair-with-sum-ℕ : Finite-Type lzero + finite-type-pair-with-sum-ℕ = + pair-with-sum-ℕ n , + is-finite-count count-pair-with-sum-ℕ +``` + +### Permuting components in a triple of sums + +```agda +module _ + (n : ℕ) + where + + map-equiv-permute-components-triple-with-sum-pr2 : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) → + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) + map-equiv-permute-components-triple-with-sum-pr2 + ((c , p , p+c=n) , a , b , b+a=p) = + ( b , a +ℕ c , + ( equational-reasoning + (a +ℕ c) +ℕ b + = b +ℕ (a +ℕ c) by commutative-add-ℕ (a +ℕ c) b + = (b +ℕ a) +ℕ c by inv (associative-add-ℕ b a c) + = p +ℕ c by ap (_+ℕ c) b+a=p + = n by p+c=n)) , + c , a , refl + + map-inv-equiv-permute-components-triple-with-sum-pr2 : + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) → + Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2) + map-inv-equiv-permute-components-triple-with-sum-pr2 + ((c , p , p+c=n) , a , b , b+a=p) = + ( a , c +ℕ b , + ( equational-reasoning + (c +ℕ b) +ℕ a + = c +ℕ (b +ℕ a) by associative-add-ℕ c b a + = c +ℕ p by ap (c +ℕ_) b+a=p + = p +ℕ c by commutative-add-ℕ c p + = n by p+c=n)) , + b , c , refl + + abstract + is-section-map-inv-equiv-permute-components-triple-with-sum-pr2 : + is-section + map-equiv-permute-components-triple-with-sum-pr2 + map-inv-equiv-permute-components-triple-with-sum-pr2 + is-section-map-inv-equiv-permute-components-triple-with-sum-pr2 + x@((c , .(b +ℕ a), p+c=n) , a , b , refl) = + inv + ( ind-Id + ( p+c=n) + ( λ H' H=H' → x = ((c , b +ℕ a , H') , a , b , refl)) + ( refl) + ( _) + ( eq-type-Prop (Id-Prop ℕ-Set _ _))) + + is-retraction-map-inv-equiv-permute-components-triple-with-sum-pr2 : + is-retraction + map-equiv-permute-components-triple-with-sum-pr2 + map-inv-equiv-permute-components-triple-with-sum-pr2 + is-retraction-map-inv-equiv-permute-components-triple-with-sum-pr2 + x@((c , .(b +ℕ a), p+c=n) , a , b , refl) = + inv + ( ind-Id + ( p+c=n) + ( λ H' H=H' → x = ((c , b +ℕ a , H') , a , b , refl)) + ( refl) + ( _) + ( eq-type-Prop (Id-Prop ℕ-Set _ _))) + + equiv-permute-components-triple-with-sum-pr2 : + Aut (Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1 ∘ pr2)) + equiv-permute-components-triple-with-sum-pr2 = + map-equiv-permute-components-triple-with-sum-pr2 , + ( ( map-inv-equiv-permute-components-triple-with-sum-pr2 , + is-section-map-inv-equiv-permute-components-triple-with-sum-pr2) , + ( map-inv-equiv-permute-components-triple-with-sum-pr2 , + is-retraction-map-inv-equiv-permute-components-triple-with-sum-pr2)) +``` From 13462c20928347d52442306a08f820b9e9a0f306 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 08:41:46 -0700 Subject: [PATCH 30/66] Fix naming --- .../sums-commutative-rings.lagda.md | 12 +++++------ .../sums-commutative-semirings.lagda.md | 12 +++++------ src/ring-theory/sums-rings.lagda.md | 12 +++++------ src/ring-theory/sums-semirings.lagda.md | 20 +++++++++---------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 6652de32a6..7e714edd97 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -153,22 +153,22 @@ module _ right-distributive-mul-sum-Commutative-Ring = right-distributive-mul-sum-Ring (ring-Commutative-Ring R) - left-distributive-mul-finite-Commutative-Ring : + left-distributive-mul-sum-finite-Commutative-Ring : {l2 : Level} (A : Finite-Type l2) (x : type-Commutative-Ring R) → (f : type-Finite-Type A → type-Commutative-Ring R) → mul-Commutative-Ring R x (sum-finite-Commutative-Ring R A f) = sum-finite-Commutative-Ring R A (mul-Commutative-Ring R x ∘ f) - left-distributive-mul-finite-Commutative-Ring = - left-distributive-mul-finite-Ring (ring-Commutative-Ring R) + left-distributive-mul-sum-finite-Commutative-Ring = + left-distributive-mul-sum-finite-Ring (ring-Commutative-Ring R) - right-distributive-mul-finite-Commutative-Ring : + right-distributive-mul-sum-finite-Commutative-Ring : {l2 : Level} (A : Finite-Type l2) → (f : type-Finite-Type A → type-Commutative-Ring R) → (x : type-Commutative-Ring R) → mul-Commutative-Ring R (sum-finite-Commutative-Ring R A f) x = sum-finite-Commutative-Ring R A (mul-Commutative-Ring' R x ∘ f) - right-distributive-mul-finite-Commutative-Ring = - right-distributive-mul-finite-Ring (ring-Commutative-Ring R) + right-distributive-mul-sum-finite-Commutative-Ring = + right-distributive-mul-sum-finite-Ring (ring-Commutative-Ring R) ``` ### Interchange law of sums and addition in a commutative ring diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 72f3ab043e..e2d178db7e 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -159,22 +159,22 @@ module _ right-distributive-mul-sum-Commutative-Semiring = right-distributive-mul-sum-Semiring (semiring-Commutative-Semiring R) - left-distributive-mul-finite-Commutative-Semiring : + left-distributive-mul-sum-finite-Commutative-Semiring : {l2 : Level} (A : Finite-Type l2) (x : type-Commutative-Semiring R) → (f : type-Finite-Type A → type-Commutative-Semiring R) → mul-Commutative-Semiring R x (sum-finite-Commutative-Semiring R A f) = sum-finite-Commutative-Semiring R A (mul-Commutative-Semiring R x ∘ f) - left-distributive-mul-finite-Commutative-Semiring = - left-distributive-mul-finite-Semiring (semiring-Commutative-Semiring R) + left-distributive-mul-sum-finite-Commutative-Semiring = + left-distributive-mul-sum-finite-Semiring (semiring-Commutative-Semiring R) - right-distributive-mul-finite-Commutative-Semiring : + right-distributive-mul-sum-finite-Commutative-Semiring : {l2 : Level} (A : Finite-Type l2) → (f : type-Finite-Type A → type-Commutative-Semiring R) → (x : type-Commutative-Semiring R) → mul-Commutative-Semiring R (sum-finite-Commutative-Semiring R A f) x = sum-finite-Commutative-Semiring R A (mul-Commutative-Semiring' R x ∘ f) - right-distributive-mul-finite-Commutative-Semiring = - right-distributive-mul-finite-Semiring (semiring-Commutative-Semiring R) + right-distributive-mul-sum-finite-Commutative-Semiring = + right-distributive-mul-sum-finite-Semiring (semiring-Commutative-Semiring R) ``` ### Interchange law of sums and addition in a commutative semiring diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index a7f62e9e78..8779956571 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -139,21 +139,21 @@ module _ right-distributive-mul-sum-Ring = right-distributive-mul-sum-Semiring (semiring-Ring R) - left-distributive-mul-finite-Ring : + left-distributive-mul-sum-finite-Ring : {l2 : Level} (A : Finite-Type l2) (x : type-Ring R) → (f : type-Finite-Type A → type-Ring R) → mul-Ring R x (sum-finite-Ring R A f) = sum-finite-Ring R A (mul-Ring R x ∘ f) - left-distributive-mul-finite-Ring = - left-distributive-mul-finite-Semiring (semiring-Ring R) + left-distributive-mul-sum-finite-Ring = + left-distributive-mul-sum-finite-Semiring (semiring-Ring R) - right-distributive-mul-finite-Ring : + right-distributive-mul-sum-finite-Ring : {l2 : Level} (A : Finite-Type l2) → (f : type-Finite-Type A → type-Ring R) (x : type-Ring R) → mul-Ring R (sum-finite-Ring R A f) x = sum-finite-Ring R A (mul-Ring' R x ∘ f) - right-distributive-mul-finite-Ring = - right-distributive-mul-finite-Semiring (semiring-Ring R) + right-distributive-mul-sum-finite-Ring = + right-distributive-mul-sum-finite-Semiring (semiring-Ring R) ``` ### Interchange law of sums and addition in a semiring diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 6af198e213..d130178972 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -61,7 +61,7 @@ sum-finite-Semiring : {l1 l2 : Level} (R : Semiring l1) (A : Finite-Type l2) → (type-Finite-Type A → type-Semiring R) → type-Semiring R sum-finite-Semiring R = - mul-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) + mul-sum-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ## Properties @@ -106,7 +106,7 @@ module _ {f g : type-Finite-Type A → type-Semiring R} → (f ~ g) → sum-finite-Semiring R A f = sum-finite-Semiring R A g htpy-sum-finite-Semiring = - htpy-mul-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) + htpy-mul-sum-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Sums are equal to the zero-th term plus the rest @@ -173,12 +173,12 @@ module _ ( add-Semiring' R (mul-Semiring R (f (inr star)) x)) ( right-distributive-mul-sum-Semiring n (f ∘ inl-Fin n) x)) - left-distributive-mul-finite-Semiring : + left-distributive-mul-sum-finite-Semiring : {l2 : Level} (A : Finite-Type l2) (x : type-Semiring R) → (f : type-Finite-Type A → type-Semiring R) → mul-Semiring R x (sum-finite-Semiring R A f) = sum-finite-Semiring R A (mul-Semiring R x ∘ f) - left-distributive-mul-finite-Semiring A x f = + left-distributive-mul-sum-finite-Semiring A x f = do cA ← is-finite-type-Finite-Type A equational-reasoning @@ -195,7 +195,7 @@ module _ by ap ( mul-Semiring R x) - ( eq-mul-finite-count-Commutative-Monoid _ A cA f) + ( eq-mul-sum-finite-count-Commutative-Monoid _ A cA f) = mul-count-Commutative-Monoid ( additive-commutative-monoid-Semiring R) @@ -208,7 +208,7 @@ module _ ( x) ( f ∘ map-equiv-count cA) = sum-finite-Semiring R A (mul-Semiring R x ∘ f) - by inv (eq-mul-finite-count-Commutative-Monoid _ A cA _) + by inv (eq-mul-sum-finite-count-Commutative-Monoid _ A cA _) where open do-syntax-trunc-Prop @@ -217,12 +217,12 @@ module _ ( mul-Semiring R x (sum-finite-Semiring R A f)) ( sum-finite-Semiring R A (mul-Semiring R x ∘ f))) - right-distributive-mul-finite-Semiring : + right-distributive-mul-sum-finite-Semiring : {l2 : Level} (A : Finite-Type l2) → (f : type-Finite-Type A → type-Semiring R) (x : type-Semiring R) → mul-Semiring R (sum-finite-Semiring R A f) x = sum-finite-Semiring R A (mul-Semiring' R x ∘ f) - right-distributive-mul-finite-Semiring A f x = + right-distributive-mul-sum-finite-Semiring A f x = do cA ← is-finite-type-Finite-Type A equational-reasoning @@ -239,7 +239,7 @@ module _ by ap ( mul-Semiring' R x) - ( eq-mul-finite-count-Commutative-Monoid _ A cA f) + ( eq-mul-sum-finite-count-Commutative-Monoid _ A cA f) = mul-count-Commutative-Monoid ( additive-commutative-monoid-Semiring R) @@ -252,7 +252,7 @@ module _ ( f ∘ map-equiv-count cA) ( x) = sum-finite-Semiring R A (mul-Semiring' R x ∘ f) - by inv (eq-mul-finite-count-Commutative-Monoid _ A cA _) + by inv (eq-mul-sum-finite-count-Commutative-Monoid _ A cA _) where open do-syntax-trunc-Prop From d7834f8303d4840ab763f07bc0a7b7ae239051a0 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 08:42:49 -0700 Subject: [PATCH 31/66] Fix --- src/ring-theory/sums-semirings.lagda.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index d130178972..af26b083a7 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -61,7 +61,7 @@ sum-finite-Semiring : {l1 l2 : Level} (R : Semiring l1) (A : Finite-Type l2) → (type-Finite-Type A → type-Semiring R) → type-Semiring R sum-finite-Semiring R = - mul-sum-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) + sum-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ## Properties From ef53c183a3b850b77d1bb8d33e1d2cb87db81e94 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 08:44:57 -0700 Subject: [PATCH 32/66] Fix again --- src/ring-theory/sums-semirings.lagda.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index af26b083a7..4edadbdf6f 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -61,7 +61,7 @@ sum-finite-Semiring : {l1 l2 : Level} (R : Semiring l1) (A : Finite-Type l2) → (type-Finite-Type A → type-Semiring R) → type-Semiring R sum-finite-Semiring R = - sum-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) + mul-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ## Properties From 39acc7c1cc717e107d530b60dcaa1e1e00511c31 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 08:46:10 -0700 Subject: [PATCH 33/66] and again --- src/ring-theory/sums-semirings.lagda.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 4edadbdf6f..64bc980a7f 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -106,7 +106,7 @@ module _ {f g : type-Finite-Type A → type-Semiring R} → (f ~ g) → sum-finite-Semiring R A f = sum-finite-Semiring R A g htpy-sum-finite-Semiring = - htpy-mul-sum-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) + htpy-mul-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Sums are equal to the zero-th term plus the rest @@ -195,7 +195,7 @@ module _ by ap ( mul-Semiring R x) - ( eq-mul-sum-finite-count-Commutative-Monoid _ A cA f) + ( eq-mul-finite-count-Commutative-Monoid _ A cA f) = mul-count-Commutative-Monoid ( additive-commutative-monoid-Semiring R) @@ -208,7 +208,7 @@ module _ ( x) ( f ∘ map-equiv-count cA) = sum-finite-Semiring R A (mul-Semiring R x ∘ f) - by inv (eq-mul-sum-finite-count-Commutative-Monoid _ A cA _) + by inv (eq-mul-finite-count-Commutative-Monoid _ A cA _) where open do-syntax-trunc-Prop @@ -239,7 +239,7 @@ module _ by ap ( mul-Semiring' R x) - ( eq-mul-sum-finite-count-Commutative-Monoid _ A cA f) + ( eq-mul-finite-count-Commutative-Monoid _ A cA f) = mul-count-Commutative-Monoid ( additive-commutative-monoid-Semiring R) @@ -252,7 +252,7 @@ module _ ( f ∘ map-equiv-count cA) ( x) = sum-finite-Semiring R A (mul-Semiring' R x ∘ f) - by inv (eq-mul-sum-finite-count-Commutative-Monoid _ A cA _) + by inv (eq-mul-finite-count-Commutative-Monoid _ A cA _) where open do-syntax-trunc-Prop From 1bb239a6d22c1755e996028c119a0512ebcdaa99 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 08:52:08 -0700 Subject: [PATCH 34/66] Multiplication is associative --- ...ower-series-commutative-semirings.lagda.md | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 72ad21b1f5..1ea4997b7a 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -454,7 +454,7 @@ module _ ( q) ( a)) ( refl) ∙ - right-distributive-mul-finite-Commutative-Semiring + right-distributive-mul-sum-finite-Commutative-Semiring ( R) ( _) ( _) @@ -535,11 +535,7 @@ module _ ( R) ( finite-type-pair-with-sum-ℕ n) ( λ (a , b , _) → - coeff p a *R - sum-finite-Commutative-Semiring - ( R) - ( finite-type-pair-with-sum-ℕ b) - ( λ (c , d , _) → coeff q c *R coeff r d)) + coeff p a *R coeff (q *fps r) b) by ap ( sum-finite-Commutative-Semiring @@ -547,8 +543,28 @@ module _ ( finite-type-pair-with-sum-ℕ n)) ( eq-htpy ( λ (a , b , _) → - inv {! left-distributive-mul-sum-Commutative-Semiring R !})) - = {! !} by {! !}) + inv + ( left-distributive-mul-sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ b) + ( coeff p a) + ( _)) ∙ + ap + ( coeff p a *R_) + ( inv + ( eq-coefficient-mul-formal-power-series-Commutative-Semiring + ( R) + ( q) + ( r) + ( b))))) + = coeff (p *fps (q *fps r)) n + by + inv + ( eq-coefficient-mul-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( q *fps r) + ( n))) where _*R_ : type-Commutative-Semiring R → type-Commutative-Semiring R → From 3c27e9ea5263e647201a4075ab5aa23a1189f808 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 09:01:18 -0700 Subject: [PATCH 35/66] Begin on unit laws --- ...al-power-series-commutative-rings.lagda.md | 964 ------------------ ...ower-series-commutative-semirings.lagda.md | 40 +- 2 files changed, 39 insertions(+), 965 deletions(-) delete mode 100644 src/commutative-algebra/formal-power-series-commutative-rings.lagda.md diff --git a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md deleted file mode 100644 index 152c112a41..0000000000 --- a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md +++ /dev/null @@ -1,964 +0,0 @@ -# Formal power series on commutative rings - -```agda -module commutative-algebra.formal-power-series-commutative-rings where -``` - -
Imports - -```agda -open import commutative-algebra.commutative-rings -open import commutative-algebra.sums-commutative-rings - -open import elementary-number-theory.addition-natural-numbers -open import elementary-number-theory.natural-numbers -open import elementary-number-theory.inequality-natural-numbers -open import elementary-number-theory.strict-inequality-natural-numbers -open import elementary-number-theory.equality-natural-numbers - -open import foundation.action-on-identifications-functions -open import foundation.coproduct-types -open import foundation.dependent-pair-types -open import foundation.equivalences -open import foundation.equality-dependent-pair-types -open import foundation.function-extensionality -open import foundation.propositions -open import foundation.cartesian-product-types -open import foundation.function-types -open import foundation.homotopies -open import foundation.identity-types -open import foundation.involutions -open import foundation.sets -open import foundation.equivalences -open import foundation.unit-type -open import foundation.unital-binary-operations -open import foundation.universe-levels - -open import group-theory.abelian-groups -open import group-theory.groups -open import group-theory.monoids -open import group-theory.semigroups - -open import univalent-combinatorics.standard-finite-types -open import univalent-combinatorics.dependent-pair-types -open import univalent-combinatorics.counting -open import univalent-combinatorics.finite-types -``` - -
- -## Idea - -A -{{#concept "formal power series" Agda=formal-power-series-Commutative-Ring WDID=Q1003025 WD="formal power series"}} -in a [commutative ring](commutative-algebra.commutative-rings.md) `R` is a -symbolic infinite sum over all `n : ℕ` of `cₙ xⁿ`, where `cₙ : R`. Convergence -of this sum is not relevant, but with the standard definitions of addition and -multiplication for power series, this forms a new commutative ring. - -## Definition - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - opaque - formal-power-series-Commutative-Ring : UU l - formal-power-series-Commutative-Ring = ℕ → type-Commutative-Ring R - - formal-power-series-coefficients-Commutative-Ring : - (ℕ → type-Commutative-Ring R) → formal-power-series-Commutative-Ring - formal-power-series-coefficients-Commutative-Ring = id - - coefficient-formal-power-series-Commutative-Ring : - formal-power-series-Commutative-Ring → ℕ → type-Commutative-Ring R - coefficient-formal-power-series-Commutative-Ring = id - - coefficient-formal-power-series-coefficients-Commutative-Ring : - (c : ℕ → type-Commutative-Ring R) → - coefficient-formal-power-series-Commutative-Ring - (formal-power-series-coefficients-Commutative-Ring c) ~ c - coefficient-formal-power-series-coefficients-Commutative-Ring _ _ = refl - - eq-htpy-coefficients-formal-power-series-Commutative-Ring : - ( p q : formal-power-series-Commutative-Ring) → - ( coefficient-formal-power-series-Commutative-Ring p ~ - coefficient-formal-power-series-Commutative-Ring q) → - p = q - eq-htpy-coefficients-formal-power-series-Commutative-Ring _ _ = eq-htpy - - is-set-formal-power-series-Commutative-Ring : - is-set formal-power-series-Commutative-Ring - is-set-formal-power-series-Commutative-Ring = - is-set-function-type (is-set-type-Set (set-Commutative-Ring R)) - - set-formal-power-series-Commutative-Ring : Set l - set-formal-power-series-Commutative-Ring = - formal-power-series-Commutative-Ring , - is-set-formal-power-series-Commutative-Ring -``` - -## Operations - -### Zero formal power series - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - abstract - zero-formal-power-series-Commutative-Ring : - formal-power-series-Commutative-Ring R - zero-formal-power-series-Commutative-Ring = - formal-power-series-coefficients-Commutative-Ring - ( R) - ( λ _ → zero-Commutative-Ring R) - - is-zero-coefficient-zero-formal-power-series-Commutative-Ring : - (n : ℕ) → - is-zero-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( zero-formal-power-series-Commutative-Ring) - ( n)) - is-zero-coefficient-zero-formal-power-series-Commutative-Ring = - coefficient-formal-power-series-coefficients-Commutative-Ring - ( R) - ( λ _ → zero-Commutative-Ring R) -``` - -### Constant formal power series - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - coefficient-constant-formal-power-series-Commutative-Ring : - type-Commutative-Ring R → ℕ → type-Commutative-Ring R - coefficient-constant-formal-power-series-Commutative-Ring c zero-ℕ = c - coefficient-constant-formal-power-series-Commutative-Ring c (succ-ℕ _) = - zero-Commutative-Ring R - - abstract - constant-formal-power-series-Commutative-Ring : - type-Commutative-Ring R → formal-power-series-Commutative-Ring R - constant-formal-power-series-Commutative-Ring c = - formal-power-series-coefficients-Commutative-Ring - ( R) - ( coefficient-constant-formal-power-series-Commutative-Ring c) - - eq-coefficient-constant-formal-power-series-Commutative-Ring : - (c : type-Commutative-Ring R) → - coefficient-formal-power-series-Commutative-Ring - ( R) - ( constant-formal-power-series-Commutative-Ring c) ~ - coefficient-constant-formal-power-series-Commutative-Ring c - eq-coefficient-constant-formal-power-series-Commutative-Ring c = - coefficient-formal-power-series-coefficients-Commutative-Ring R _ - - one-formal-power-series-Commutative-Ring : - formal-power-series-Commutative-Ring R - one-formal-power-series-Commutative-Ring = - constant-formal-power-series-Commutative-Ring (one-Commutative-Ring R) -``` - -#### The zero formal power series is the constant formal power series for zero - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - eq-zero-coefficient-constant-formal-power-series-Commutative-Ring : - (n : ℕ) → - is-zero-Commutative-Ring - ( R) - ( coefficient-constant-formal-power-series-Commutative-Ring - ( R) - ( zero-Commutative-Ring R) - ( n)) - eq-zero-coefficient-constant-formal-power-series-Commutative-Ring zero-ℕ = - refl - eq-zero-coefficient-constant-formal-power-series-Commutative-Ring (succ-ℕ _) = - refl - - eq-zero-constant-formal-power-series-Commutative-Ring : - constant-formal-power-series-Commutative-Ring R (zero-Commutative-Ring R) = - zero-formal-power-series-Commutative-Ring R - eq-zero-constant-formal-power-series-Commutative-Ring = - eq-htpy-coefficients-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( eq-coefficient-constant-formal-power-series-Commutative-Ring R _ ∙h - eq-zero-coefficient-constant-formal-power-series-Commutative-Ring ∙h - inv-htpy - ( is-zero-coefficient-zero-formal-power-series-Commutative-Ring R)) -``` - -### Negation - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - coefficient-neg-formal-power-series-Commutative-Ring : - formal-power-series-Commutative-Ring R → ℕ → type-Commutative-Ring R - coefficient-neg-formal-power-series-Commutative-Ring p n = - neg-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p n) - - abstract - neg-formal-power-series-Commutative-Ring : - formal-power-series-Commutative-Ring R → - formal-power-series-Commutative-Ring R - neg-formal-power-series-Commutative-Ring p = - formal-power-series-coefficients-Commutative-Ring - ( R) - ( coefficient-neg-formal-power-series-Commutative-Ring p) - - eq-coefficient-neg-formal-power-series-Commutative-Ring : - (p : formal-power-series-Commutative-Ring R) → - coefficient-formal-power-series-Commutative-Ring - ( R) - ( neg-formal-power-series-Commutative-Ring p) ~ - coefficient-neg-formal-power-series-Commutative-Ring p - eq-coefficient-neg-formal-power-series-Commutative-Ring p = - coefficient-formal-power-series-coefficients-Commutative-Ring R _ -``` - -#### The negation of a constant formal power series is the constant formal power series of the negation - -```agda -module _ - {l : Level} (R : Commutative-Ring l) (c : type-Commutative-Ring R) - where - - abstract - htpy-coefficients-neg-constant-formal-power-series-Commutative-Ring : - (n : ℕ) → - coefficient-neg-formal-power-series-Commutative-Ring - ( R) - ( constant-formal-power-series-Commutative-Ring R c) - ( n) = - coefficient-constant-formal-power-series-Commutative-Ring - ( R) - ( neg-Commutative-Ring R c) - ( n) - htpy-coefficients-neg-constant-formal-power-series-Commutative-Ring zero-ℕ = - equational-reasoning - neg-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( constant-formal-power-series-Commutative-Ring R c) - ( zero-ℕ)) - = neg-Commutative-Ring R c - by - ap - ( neg-Commutative-Ring R) - ( eq-coefficient-constant-formal-power-series-Commutative-Ring - ( R) - ( c) - ( zero-ℕ)) - htpy-coefficients-neg-constant-formal-power-series-Commutative-Ring - (succ-ℕ n) = - equational-reasoning - neg-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( constant-formal-power-series-Commutative-Ring R c) - ( succ-ℕ n)) - = - neg-Commutative-Ring R (zero-Commutative-Ring R) - by - ap - ( neg-Commutative-Ring R) - ( eq-coefficient-constant-formal-power-series-Commutative-Ring - ( R) - ( c) - ( succ-ℕ n)) - = zero-Commutative-Ring R by neg-zero-Commutative-Ring R - - neg-constant-formal-power-series-Commutative-Ring : - neg-formal-power-series-Commutative-Ring - ( R) - ( constant-formal-power-series-Commutative-Ring R c) = - constant-formal-power-series-Commutative-Ring R (neg-Commutative-Ring R c) - neg-constant-formal-power-series-Commutative-Ring = - eq-htpy-coefficients-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( coefficient-formal-power-series-coefficients-Commutative-Ring R _ ∙h - htpy-coefficients-neg-constant-formal-power-series-Commutative-Ring ∙h - inv-htpy - ( coefficient-formal-power-series-coefficients-Commutative-Ring - ( R) - ( _))) -``` - -### Addition - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - coefficient-add-formal-power-series-Commutative-Ring : - (p q : formal-power-series-Commutative-Ring R) (n : ℕ) → - type-Commutative-Ring R - coefficient-add-formal-power-series-Commutative-Ring p q n = - add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p n) - ( coefficient-formal-power-series-Commutative-Ring R q n) - - abstract - add-formal-power-series-Commutative-Ring : - formal-power-series-Commutative-Ring R → - formal-power-series-Commutative-Ring R → - formal-power-series-Commutative-Ring R - add-formal-power-series-Commutative-Ring p q = - formal-power-series-coefficients-Commutative-Ring - ( R) - ( coefficient-add-formal-power-series-Commutative-Ring p q) - - eq-coefficient-add-formal-power-series-Commutative-Ring : - (p q : formal-power-series-Commutative-Ring R) → - coefficient-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring p q) ~ - coefficient-add-formal-power-series-Commutative-Ring p q - eq-coefficient-add-formal-power-series-Commutative-Ring p q = - coefficient-formal-power-series-coefficients-Commutative-Ring R _ -``` - -#### Commutativity - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - abstract - commutative-add-formal-power-series-Commutative-Ring : - (p q : formal-power-series-Commutative-Ring R) → - add-formal-power-series-Commutative-Ring R p q = - add-formal-power-series-Commutative-Ring R q p - commutative-add-formal-power-series-Commutative-Ring p q = - eq-htpy-coefficients-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( λ n → equational-reasoning - coefficient-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring R p q) - ( n) - = - add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p n) - ( coefficient-formal-power-series-Commutative-Ring R q n) - by eq-coefficient-add-formal-power-series-Commutative-Ring R p q n - = - add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R q n) - ( coefficient-formal-power-series-Commutative-Ring R p n) - by commutative-add-Commutative-Ring R _ _ - = - coefficient-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring R q p) - ( n) - by - inv - ( eq-coefficient-add-formal-power-series-Commutative-Ring - ( R) - ( q) - ( p) - ( n))) -``` - -#### Unit laws - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - abstract - left-unit-law-add-formal-power-series-Commutative-Ring : - (p : formal-power-series-Commutative-Ring R) → - add-formal-power-series-Commutative-Ring - ( R) - ( zero-formal-power-series-Commutative-Ring R) - ( p) = p - left-unit-law-add-formal-power-series-Commutative-Ring p = - eq-htpy-coefficients-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( λ n → equational-reasoning - coefficient-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring - ( R) - ( zero-formal-power-series-Commutative-Ring R) - ( p)) - ( n) - = - add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( zero-formal-power-series-Commutative-Ring R) - ( n)) - ( coefficient-formal-power-series-Commutative-Ring R p n) - by eq-coefficient-add-formal-power-series-Commutative-Ring R _ _ n - = - add-Commutative-Ring - ( R) - ( zero-Commutative-Ring R) - ( coefficient-formal-power-series-Commutative-Ring R p n) - by - ap - ( λ c → - add-Commutative-Ring - ( R) - ( c) - ( coefficient-formal-power-series-Commutative-Ring R p n)) - ( is-zero-coefficient-zero-formal-power-series-Commutative-Ring - ( R) - ( n)) - = coefficient-formal-power-series-Commutative-Ring R p n - by left-unit-law-add-Commutative-Ring R _) - - right-unit-law-add-formal-power-series-Commutative-Ring : - (p : formal-power-series-Commutative-Ring R) → - add-formal-power-series-Commutative-Ring - ( R) - ( p) - ( zero-formal-power-series-Commutative-Ring R) = p - right-unit-law-add-formal-power-series-Commutative-Ring p = - commutative-add-formal-power-series-Commutative-Ring R p _ ∙ - left-unit-law-add-formal-power-series-Commutative-Ring p -``` - -#### Associativity - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - abstract - associative-add-formal-power-series-Commutative-Ring : - (p q r : formal-power-series-Commutative-Ring R) → - add-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring R p q) - ( r) = - add-formal-power-series-Commutative-Ring - ( R) - ( p) - ( add-formal-power-series-Commutative-Ring R q r) - associative-add-formal-power-series-Commutative-Ring p q r = - eq-htpy-coefficients-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( λ n → equational-reasoning - coefficient-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring R p q) - ( r)) - ( n) - = - add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring R p q) - ( n)) - ( coefficient-formal-power-series-Commutative-Ring R r n) - by eq-coefficient-add-formal-power-series-Commutative-Ring R _ _ n - = - add-Commutative-Ring - ( R) - ( add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p n) - ( coefficient-formal-power-series-Commutative-Ring R q n)) - ( coefficient-formal-power-series-Commutative-Ring R r n) - by - ap - ( add-Commutative-Ring' R _) - ( eq-coefficient-add-formal-power-series-Commutative-Ring - ( R) - ( p) - ( q) - ( n)) - = - add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p n) - ( add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R q n) - ( coefficient-formal-power-series-Commutative-Ring R r n)) - by associative-add-Commutative-Ring R _ _ _ - = - add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p n) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring R q r) - ( n)) - by - ap - ( add-Commutative-Ring R _) - ( inv - ( eq-coefficient-add-formal-power-series-Commutative-Ring - ( R) - ( q) - ( r) - ( n))) - = - coefficient-formal-power-series-Commutative-Ring - ( R) - ( add-formal-power-series-Commutative-Ring - ( R) - ( p) - ( add-formal-power-series-Commutative-Ring R q r)) - ( n) - by - inv - ( eq-coefficient-add-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( n))) -``` - -#### Inverse laws - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - abstract - left-inverse-law-add-formal-power-series-Commutative-Ring : - (p : formal-power-series-Commutative-Ring R) → - add-formal-power-series-Commutative-Ring - ( R) - ( neg-formal-power-series-Commutative-Ring R p) - ( p) = zero-formal-power-series-Commutative-Ring R - left-inverse-law-add-formal-power-series-Commutative-Ring p = - eq-htpy-coefficients-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( λ n → equational-reasoning - coefficient-formal-power-series-Commutative-Ring R - (add-formal-power-series-Commutative-Ring - ( R) - ( neg-formal-power-series-Commutative-Ring R p) - ( p)) - ( n) - = - add-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring - ( R) - ( neg-formal-power-series-Commutative-Ring R p) - ( n)) - ( coefficient-formal-power-series-Commutative-Ring R p n) - by eq-coefficient-add-formal-power-series-Commutative-Ring R _ _ n - = - add-Commutative-Ring - ( R) - ( neg-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p n)) - ( coefficient-formal-power-series-Commutative-Ring R p n) - by - ap - ( add-Commutative-Ring' R _) - ( eq-coefficient-neg-formal-power-series-Commutative-Ring R p n) - = zero-Commutative-Ring R - by left-inverse-law-add-Commutative-Ring R _ - = - coefficient-formal-power-series-Commutative-Ring - ( R) - ( zero-formal-power-series-Commutative-Ring R) - ( n) - by - inv - ( is-zero-coefficient-zero-formal-power-series-Commutative-Ring - ( R) - ( n))) - - right-inverse-law-add-formal-power-series-Commutative-Ring : - (p : formal-power-series-Commutative-Ring R) → - add-formal-power-series-Commutative-Ring - ( R) - ( p) - ( neg-formal-power-series-Commutative-Ring R p) = - zero-formal-power-series-Commutative-Ring R - right-inverse-law-add-formal-power-series-Commutative-Ring p = - commutative-add-formal-power-series-Commutative-Ring R _ _ ∙ - left-inverse-law-add-formal-power-series-Commutative-Ring p -``` - -#### The additive group of formal power series - -```agda -module _ - {l : Level} (R : Commutative-Ring l) - where - - semigroup-add-formal-power-series-Commutative-Ring : Semigroup l - semigroup-add-formal-power-series-Commutative-Ring = - set-formal-power-series-Commutative-Ring R , - add-formal-power-series-Commutative-Ring R , - associative-add-formal-power-series-Commutative-Ring R - - is-unital-add-formal-power-series-Commutative-Ring : - is-unital (add-formal-power-series-Commutative-Ring R) - is-unital-add-formal-power-series-Commutative-Ring = - zero-formal-power-series-Commutative-Ring R , - left-unit-law-add-formal-power-series-Commutative-Ring R , - right-unit-law-add-formal-power-series-Commutative-Ring R - - monoid-add-formal-power-series-Commutative-Ring : Monoid l - monoid-add-formal-power-series-Commutative-Ring = - semigroup-add-formal-power-series-Commutative-Ring , - is-unital-add-formal-power-series-Commutative-Ring - - group-add-formal-power-series-Commutative-Ring : Group l - group-add-formal-power-series-Commutative-Ring = - semigroup-add-formal-power-series-Commutative-Ring , - is-unital-add-formal-power-series-Commutative-Ring , - neg-formal-power-series-Commutative-Ring R , - left-inverse-law-add-formal-power-series-Commutative-Ring R , - right-inverse-law-add-formal-power-series-Commutative-Ring R - - abelian-group-add-formal-power-series-Commutative-Ring : Ab l - abelian-group-add-formal-power-series-Commutative-Ring = - group-add-formal-power-series-Commutative-Ring , - commutative-add-formal-power-series-Commutative-Ring R -``` - -### Multiplication - -```agda -pair-with-sum-ℕ : ℕ → UU lzero -pair-with-sum-ℕ n = Σ ℕ ( λ a → Σ ℕ (λ b → b +ℕ a = n)) - -abstract - equiv-pair-with-sum-leq-ℕ : - (n : ℕ) → Σ ℕ (λ k → leq-ℕ k n) ≃ pair-with-sum-ℕ n - equiv-pair-with-sum-leq-ℕ n = - ( λ (k , k≤n) → k , subtraction-leq-ℕ k n k≤n) , - ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , - λ (k , l , l+k=n) → - let - (l' , l'+k=n) = subtraction-leq-ℕ k n (leq-subtraction-ℕ k n l l+k=n) - in - eq-pair-Σ - ( refl) - ( eq-pair-Σ - (is-injective-right-add-ℕ k (l'+k=n ∙ inv l+k=n)) - (eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n)))) , - ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , - (λ (k , k≤n) → eq-pair-Σ refl (eq-type-Prop (leq-ℕ-Prop k n)))) - - count-pair-with-sum-ℕ : (n : ℕ) → count (pair-with-sum-ℕ n) - count-pair-with-sum-ℕ n = - succ-ℕ n , equiv-pair-with-sum-leq-ℕ n ∘e equiv-fin-succ-leq-ℕ n - -finite-type-pair-with-sum-ℕ : ℕ → Finite-Type lzero -finite-type-pair-with-sum-ℕ n = - pair-with-sum-ℕ n , - is-finite-count (count-pair-with-sum-ℕ n) - -module _ - {l : Level} (R : Commutative-Ring l) - (p q : formal-power-series-Commutative-Ring R) - where - - coefficient-mul-formal-power-series-Commutative-Ring : - ℕ → type-Commutative-Ring R - coefficient-mul-formal-power-series-Commutative-Ring n = - sum-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → - mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p a) - ( coefficient-formal-power-series-Commutative-Ring R q b)) - - abstract - mul-formal-power-series-Commutative-Ring : - formal-power-series-Commutative-Ring R - mul-formal-power-series-Commutative-Ring = - formal-power-series-coefficients-Commutative-Ring - ( R) - ( coefficient-mul-formal-power-series-Commutative-Ring) - - eq-coefficient-mul-formal-power-series-Commutative-Ring : - coefficient-formal-power-series-Commutative-Ring - ( R) - ( mul-formal-power-series-Commutative-Ring) ~ - coefficient-mul-formal-power-series-Commutative-Ring - eq-coefficient-mul-formal-power-series-Commutative-Ring = - coefficient-formal-power-series-coefficients-Commutative-Ring R _ -``` - -#### Commutativity - -```agda -module _ - (n : ℕ) - where - - swap-pair-with-sum : pair-with-sum-ℕ n → pair-with-sum-ℕ n - swap-pair-with-sum (k , l , l+k=n) = l , k , commutative-add-ℕ k l ∙ l+k=n - - abstract - is-involution-swap-pair-with-sum : is-involution swap-pair-with-sum - is-involution-swap-pair-with-sum (k , l , l+k=n) = - eq-pair-Σ refl (eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n))) - - equiv-swap-pair-with-sum : pair-with-sum-ℕ n ≃ pair-with-sum-ℕ n - equiv-swap-pair-with-sum = - equiv-is-involution - { lzero} - { pair-with-sum-ℕ n} - { swap-pair-with-sum} - ( is-involution-swap-pair-with-sum) - -module _ - {l : Level} (R : Commutative-Ring l) - (p q : formal-power-series-Commutative-Ring R) - where - - abstract - commutative-mul-formal-power-series-Commutative-Ring : - mul-formal-power-series-Commutative-Ring R p q = - mul-formal-power-series-Commutative-Ring R q p - commutative-mul-formal-power-series-Commutative-Ring = - eq-htpy-coefficients-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( λ n → equational-reasoning - coefficient-formal-power-series-Commutative-Ring R _ n - = - sum-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → - mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p a) - ( coefficient-formal-power-series-Commutative-Ring R q b)) - by - eq-coefficient-mul-formal-power-series-Commutative-Ring - ( R) - ( p) - ( q) - ( n) - = - sum-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → - mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R p b) - ( coefficient-formal-power-series-Commutative-Ring R q a)) - by - sum-aut-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( equiv-swap-pair-with-sum n) - _ - = - sum-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → - mul-Commutative-Ring - ( R) - ( coefficient-formal-power-series-Commutative-Ring R q a) - ( coefficient-formal-power-series-Commutative-Ring R p b)) - by - htpy-sum-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ _ → commutative-mul-Commutative-Ring R _ _) - = - coefficient-formal-power-series-Commutative-Ring - ( R) - ( mul-formal-power-series-Commutative-Ring R q p) - ( n) - by - inv - ( eq-coefficient-mul-formal-power-series-Commutative-Ring - ( R) - ( q) - ( p) - ( n))) -``` - -#### Associativity - -```agda -module _ - (n : ℕ) - where - - triple-with-sum-ℕ : UU lzero - triple-with-sum-ℕ = Σ ℕ (λ a → Σ ℕ (λ b → Σ ℕ (λ c → c +ℕ b +ℕ a = n))) - - map-equiv-triple-with-sum-Σ-pair-with-sum : - triple-with-sum-ℕ → Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) - map-equiv-triple-with-sum-Σ-pair-with-sum (a , b , c , c+b+a=n) = - ( a +ℕ b , - c , - ap (c +ℕ_) (commutative-add-ℕ a b) ∙ - inv (associative-add-ℕ c b a) ∙ - c+b+a=n) , - b , - a , - refl - - map-inv-equiv-triple-with-sum-Σ-pair-with-sum : - Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) → triple-with-sum-ℕ - map-inv-equiv-triple-with-sum-Σ-pair-with-sum - ((a+b , c , c+⟨a+b⟩=n) , b , a , a+b=a+b) = - a , b , c , - associative-add-ℕ c b a ∙ - ap (c +ℕ_) (commutative-add-ℕ b a ∙ a+b=a+b) ∙ - c+⟨a+b⟩=n - - triple-with-sum-equiv-Σ-pair-with-sum : - triple-with-sum-ℕ ≃ Σ (pair-with-sum-ℕ n) (pair-with-sum-ℕ ∘ pr1) - triple-with-sum-equiv-Σ-pair-with-sum = - map-equiv-triple-with-sum-Σ-pair-with-sum , - ( map-inv-equiv-triple-with-sum-Σ-pair-with-sum , - λ { ((H , c , refl) , b , a , refl) → - eq-pair-Σ - (eq-pair-Σ - ( refl) - ( eq-pair-Σ refl (eq-type-Prop (Id-Prop ℕ-Set _ _)))) - ( eq-pair-Σ {! !} (eq-pair-Σ {! !} (eq-type-Prop (Id-Prop ℕ-Set _ _))))} ) , - ( map-inv-equiv-triple-with-sum-Σ-pair-with-sum , - {! !}) - -module _ - {l : Level} (R : Commutative-Ring l) - (p q r : formal-power-series-Commutative-Ring R) - where - - abstract - associative-mul-formal-power-series-Commutative-Ring : - mul-formal-power-series-Commutative-Ring - ( R) - ( mul-formal-power-series-Commutative-Ring R p q) - ( r) = - mul-formal-power-series-Commutative-Ring - ( R) - ( p) - ( mul-formal-power-series-Commutative-Ring R q r) - associative-mul-formal-power-series-Commutative-Ring = - eq-htpy-coefficients-formal-power-series-Commutative-Ring - ( R) - ( _) - ( _) - ( λ n → equational-reasoning - coeff ((p *fps q) *fps r) n - = - sum-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → coeff (p *fps q) a *R coeff r b) - by - eq-coefficient-mul-formal-power-series-Commutative-Ring - ( R) - ( p *fps q) - ( r) - ( n) - = - sum-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → - sum-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ a) - ( λ (c , d , _) → (coeff p c *R coeff q d) *R coeff r b)) - by - ap - ( sum-finite-Commutative-Ring R (finite-type-pair-with-sum-ℕ n)) - ( eq-htpy - ( λ (a , b , _) → - ap-mul-Commutative-Ring - ( R) - ( eq-coefficient-mul-formal-power-series-Commutative-Ring - ( R) - ( p) - ( q) - ( a)) - ( refl) ∙ - right-distributive-mul-finite-Commutative-Ring - ( R) - ( _) - ( _) - ( coeff r b))) - = - sum-finite-Commutative-Ring - ( R) - ( Σ-Finite-Type - ( finite-type-pair-with-sum-ℕ n) - ( finite-type-pair-with-sum-ℕ ∘ pr1)) - ( λ ((a , b , _) , c , d , _) → - (coeff p c *R coeff q d) *R coeff r b) - by - inv - ( sum-Σ-finite-Commutative-Ring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( finite-type-pair-with-sum-ℕ ∘ pr1) - ( _)) - = {! !} by {! !}) - where - _*R_ : - type-Commutative-Ring R → type-Commutative-Ring R → - type-Commutative-Ring R - _*R_ = mul-Commutative-Ring R - _*fps_ : - formal-power-series-Commutative-Ring R → - formal-power-series-Commutative-Ring R → - formal-power-series-Commutative-Ring R - _*fps_ = mul-formal-power-series-Commutative-Ring R - coeff : - formal-power-series-Commutative-Ring R → ℕ → type-Commutative-Ring R - coeff = coefficient-formal-power-series-Commutative-Ring R -``` diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 1ea4997b7a..1aa91d589d 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -379,7 +379,7 @@ module _ ( coefficient-formal-power-series-Commutative-Semiring R p a) ( coefficient-formal-power-series-Commutative-Semiring R q b)) - abstract + opaque mul-formal-power-series-Commutative-Semiring : formal-power-series-Commutative-Semiring R mul-formal-power-series-Commutative-Semiring = @@ -579,3 +579,41 @@ module _ formal-power-series-Commutative-Semiring R → ℕ → type-Commutative-Semiring R coeff = coefficient-formal-power-series-Commutative-Semiring R ``` + +#### Unit laws + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + (p : formal-power-series-Commutative-Semiring R) + where + + opaque + unfolding mul-formal-power-series-Commutative-Semiring + unfolding constant-formal-power-series-Commutative-Semiring + + left-unit-law-mul-formal-power-series-Commutative-Semiring : + mul-formal-power-series-Commutative-Semiring + ( R) + ( one-formal-power-series-Commutative-Semiring R) + ( p) = p + left-unit-law-mul-formal-power-series-Commutative-Semiring = + eq-htpy-coefficients-formal-power-series-Commutative-Semiring + ( R) + ( _) + ( _) + ( λ n → + equational-reasoning + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + mul-Commutative-Semiring + ( R) + ( coefficient-constant-formal-power-series-Commutative-Semiring + ( R) + ( one-Commutative-Semiring R) + ( a)) + ( coefficient-formal-power-series-Commutative-Semiring R p b)) + = {! !} by {! !}) +``` From 7cf875f80168bc36171b861d93933ad89f49926e Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 09:11:34 -0700 Subject: [PATCH 36/66] Finite sums of zeroes are zero --- .../sums-commutative-rings.lagda.md | 17 ++++--- .../sums-commutative-semirings.lagda.md | 17 ++++--- ...s-of-elements-commutative-monoids.lagda.md | 44 +++++++++++++++++-- ...cts-of-tuples-of-elements-monoids.lagda.md | 8 ++-- src/ring-theory/sums-rings.lagda.md | 5 +++ src/ring-theory/sums-semirings.lagda.md | 8 +++- 6 files changed, 81 insertions(+), 18 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 7e714edd97..938d35510e 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -245,15 +245,22 @@ split-sum-Commutative-Ring A n (succ-ℕ m) f = ```agda module _ - {l : Level} (A : Commutative-Ring l) + {l : Level} (R : Commutative-Ring l) where sum-zero-Commutative-Ring : (n : ℕ) → - sum-Commutative-Ring A n - ( zero-functional-vec-Commutative-Ring A n) = - zero-Commutative-Ring A - sum-zero-Commutative-Ring = sum-zero-Ring (ring-Commutative-Ring A) + sum-Commutative-Ring R n + ( zero-functional-vec-Commutative-Ring R n) = + zero-Commutative-Ring R + sum-zero-Commutative-Ring = sum-zero-Ring (ring-Commutative-Ring R) + + sum-zero-finite-Commutative-Ring : + {l2 : Level} (A : Finite-Type l2) → + sum-finite-Commutative-Ring R A (λ _ → zero-Commutative-Ring R) = + zero-Commutative-Ring R + sum-zero-finite-Commutative-Ring = + sum-zero-finite-Ring (ring-Commutative-Ring R) ``` ### Permutations preserve sums diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index e2d178db7e..b416e1ffd6 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -235,16 +235,23 @@ module _ ```agda module _ - {l : Level} (A : Commutative-Semiring l) + {l : Level} (R : Commutative-Semiring l) where sum-zero-Commutative-Semiring : (n : ℕ) → - sum-Commutative-Semiring A n - ( zero-functional-vec-Commutative-Semiring A n) = - zero-Commutative-Semiring A + sum-Commutative-Semiring R n + ( zero-functional-vec-Commutative-Semiring R n) = + zero-Commutative-Semiring R sum-zero-Commutative-Semiring = - sum-zero-Semiring (semiring-Commutative-Semiring A) + sum-zero-Semiring (semiring-Commutative-Semiring R) + + sum-zero-finite-Commutative-Semiring : + {l2 : Level} (A : Finite-Type l2) → + sum-finite-Commutative-Semiring R A (λ _ → zero-Commutative-Semiring R) = + zero-Commutative-Semiring R + sum-zero-finite-Commutative-Semiring = + sum-zero-finite-Semiring (semiring-Commutative-Semiring R) ``` ### Splitting sums diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 718607a477..4e0ca06ffb 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -186,15 +186,15 @@ module _ {l : Level} (M : Commutative-Monoid l) where - product-unit-Commutative-Monoid : + mul-unit-Commutative-Monoid : (n : ℕ) → mul-fin-Commutative-Monoid ( M) ( n) ( unit-functional-vec-Commutative-Monoid M n) = unit-Commutative-Monoid M - product-unit-Commutative-Monoid = - product-unit-Monoid (monoid-Commutative-Monoid M) + mul-unit-Commutative-Monoid = + mul-unit-Monoid (monoid-Commutative-Monoid M) ``` ### Splitting products @@ -478,6 +478,44 @@ module _ eq-mul-finite-count-Commutative-Monoid M A (count-is-empty H) ``` +### The product of units is the unit + +```agda +module _ + {l1 l2 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) + where + + mul-unit-finite-Commutative-Monoid : + is-unit-Commutative-Monoid + ( M) + ( mul-finite-Commutative-Monoid + ( M) + ( A) + ( λ _ → unit-Commutative-Monoid M)) + mul-unit-finite-Commutative-Monoid = + do + cA ← is-finite-type-Finite-Type A + equational-reasoning + mul-finite-Commutative-Monoid M A (λ _ → unit-Commutative-Monoid M) + = + mul-count-Commutative-Monoid + ( M) + ( type-Finite-Type A) + ( cA) + ( λ _ → unit-Commutative-Monoid M) + by eq-mul-finite-count-Commutative-Monoid M A cA _ + = unit-Commutative-Monoid M by mul-unit-Commutative-Monoid M _ + where + open + do-syntax-trunc-Prop + (is-unit-prop-Commutative-Monoid + ( M) + ( mul-finite-Commutative-Monoid + ( M) + ( A) + ( λ _ → unit-Commutative-Monoid M))) +``` + ### Products over a finite type are homotopy invariant ```agda diff --git a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md index 0fe111c1bf..b20430baa6 100644 --- a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md @@ -172,12 +172,12 @@ module _ {l : Level} (M : Monoid l) where - product-unit-Monoid : + mul-unit-Monoid : (n : ℕ) → mul-fin-Monoid M n (unit-functional-vec-Monoid M n) = unit-Monoid M - product-unit-Monoid zero-ℕ = refl - product-unit-Monoid (succ-ℕ n) = - right-unit-law-mul-Monoid M _ ∙ product-unit-Monoid n + mul-unit-Monoid zero-ℕ = refl + mul-unit-Monoid (succ-ℕ n) = + right-unit-law-mul-Monoid M _ ∙ mul-unit-Monoid n ``` ### Splitting products diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index 8779956571..b6c04118eb 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -216,6 +216,11 @@ module _ sum-zero-Ring : (n : ℕ) → sum-Ring R n (zero-functional-vec-Ring R n) = zero-Ring R sum-zero-Ring = sum-zero-Semiring (semiring-Ring R) + + sum-zero-finite-Ring : + {l2 : Level} (A : Finite-Type l2) → + sum-finite-Ring R A (λ _ → zero-Ring R) = zero-Ring R + sum-zero-finite-Ring = sum-zero-finite-Semiring (semiring-Ring R) ``` ### Splitting sums diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 64bc980a7f..967bfbbb29 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -338,7 +338,13 @@ module _ (n : ℕ) → sum-Semiring R n (zero-functional-vec-Semiring R n) = zero-Semiring R sum-zero-Semiring = - product-unit-Commutative-Monoid (additive-commutative-monoid-Semiring R) + mul-unit-Commutative-Monoid (additive-commutative-monoid-Semiring R) + + sum-zero-finite-Semiring : + {l2 : Level} (A : Finite-Type l2) → + sum-finite-Semiring R A (λ _ → zero-Semiring R) = zero-Semiring R + sum-zero-finite-Semiring = + mul-unit-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Splitting sums From 5eaa35e59fda63b9e18f73293ee67c0eaea98a30 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 20:39:25 -0700 Subject: [PATCH 37/66] Progress --- ...ower-series-commutative-semirings.lagda.md | 54 ++++++++++++ .../equality-natural-numbers.lagda.md | 12 +++ .../pairs-with-natural-sums.lagda.md | 43 +++++++++ src/foundation/complements-subtypes.lagda.md | 87 +++++++++++++++++++ 4 files changed, 196 insertions(+) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 1aa91d589d..3753645ff3 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -592,6 +592,35 @@ module _ unfolding mul-formal-power-series-Commutative-Semiring unfolding constant-formal-power-series-Commutative-Semiring + htpy-left-unit-law-mul-formal-power-series-Commutative-Semiring : + (p : ℕ → type-Commutative-Semiring R) (n : ℕ) → + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + mul-Commutative-Semiring + ( R) + ( p a) + ( coefficient-constant-formal-power-series-Commutative-Semiring + ( R) + ( one-Commutative-Semiring R) + ( b))) = + p n + htpy-left-unit-law-mul-formal-power-series-Commutative-Semiring p n = + equational-reasoning + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → + mul-Commutative-Semiring + ( R) + ( p a) + ( coefficient-constant-formal-power-series-Commutative-Semiring + ( R) + ( one-Commutative-Semiring R) + ( b))) + = {! !} by {! !} + left-unit-law-mul-formal-power-series-Commutative-Semiring : mul-formal-power-series-Commutative-Semiring ( R) @@ -615,5 +644,30 @@ module _ ( one-Commutative-Semiring R) ( a)) ( coefficient-formal-power-series-Commutative-Semiring R p b)) + = + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ { + (zero-ℕ , _ , _) → + coefficient-formal-power-series-Commutative-Semiring R p n ; + (succ-ℕ _ , _ , _) → + zero-Commutative-Semiring R}) + by + ap + ( sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n)) + ( eq-htpy + λ { + (zero-ℕ , b , b+0=n) → + left-unit-law-mul-Commutative-Semiring R _ ∙ + ap + ( coefficient-formal-power-series-Commutative-Semiring + ( R) + ( p)) + ( inv (right-unit-law-add-ℕ b) ∙ b+0=n) ; + (succ-ℕ _ , _ , _) → + left-zero-law-mul-Commutative-Semiring R _ }) = {! !} by {! !}) ``` diff --git a/src/elementary-number-theory/equality-natural-numbers.lagda.md b/src/elementary-number-theory/equality-natural-numbers.lagda.md index bb335e5e58..404cfe7233 100644 --- a/src/elementary-number-theory/equality-natural-numbers.lagda.md +++ b/src/elementary-number-theory/equality-natural-numbers.lagda.md @@ -16,6 +16,7 @@ open import foundation.decidable-types open import foundation.dependent-pair-types open import foundation.empty-types open import foundation.equivalences +open import foundation.negation open import foundation.function-types open import foundation.fundamental-theorem-of-identity-types open import foundation.identity-types @@ -93,6 +94,17 @@ pr1 (is-zero-ℕ-Prop n) = is-zero-ℕ n pr2 (is-zero-ℕ-Prop n) = is-prop-is-zero-ℕ n ``` +### The property of being nonzero + +```agda +is-prop-is-nonzero-ℕ : (n : ℕ) → is-prop (is-nonzero-ℕ n) +is-prop-is-nonzero-ℕ n = is-prop-neg + +is-nonzero-ℕ-Prop : ℕ → Prop lzero +pr1 (is-nonzero-ℕ-Prop n) = is-nonzero-ℕ n +pr2 (is-nonzero-ℕ-Prop n) = is-prop-is-nonzero-ℕ n +``` + ### The property of being one ```agda diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md index 98b96ceb87..74a755eb5f 100644 --- a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -12,10 +12,18 @@ open import elementary-number-theory.equality-natural-numbers open import elementary-number-theory.natural-numbers open import elementary-number-theory.inequality-natural-numbers +open import foundation.negation +open import foundation.type-arithmetic-coproduct-types +open import foundation.contractible-types open import foundation.action-on-identifications-functions open import foundation.automorphisms +open import foundation.decidable-subtypes +open import foundation.subtypes +open import foundation.complements-subtypes +open import foundation.coproduct-types open import foundation.dependent-pair-types open import foundation.equality-dependent-pair-types +open import foundation.functoriality-coproduct-types open import foundation.equivalences open import foundation.function-types open import foundation.identity-types @@ -26,6 +34,7 @@ open import foundation.sections open import foundation.sets open import foundation.conjunction open import foundation.universe-levels +open import foundation.unit-type open import univalent-combinatorics.counting open import univalent-combinatorics.finite-types @@ -257,3 +266,37 @@ module _ ( map-inv-equiv-permute-components-triple-with-sum-pr2 , is-retraction-map-inv-equiv-permute-components-triple-with-sum-pr2)) ``` + +### Breaking out the zero case + +```agda +module _ + (n : ℕ) + where + + decidable-subtype-zero-pair-with-sum-ℕ : + decidable-subtype lzero (pair-with-sum-ℕ n) + decidable-subtype-zero-pair-with-sum-ℕ (a , _ , _) = + is-zero-ℕ a , is-prop-is-zero-ℕ a , is-decidable-is-zero-ℕ a + + is-contr-decidable-subtype-zero-pair-with-sum-ℕ : + is-contr (type-decidable-subtype decidable-subtype-zero-pair-with-sum-ℕ) + is-contr-decidable-subtype-zero-pair-with-sum-ℕ = + ((zero-ℕ , n , right-unit-law-add-ℕ n) , refl) , + λ ((x , y , y+x=n) , x=0) → + eq-type-subtype + ( subtype-decidable-subtype decidable-subtype-zero-pair-with-sum-ℕ) + ( eq-Eq-pair-with-sum-ℕ n _ _ (inv x=0)) + + equiv-pair-with-sum-coproduct-zero-nonzero : + pair-with-sum-ℕ n ≃ + unit + + type-decidable-subtype + ( complement-decidable-subtype (decidable-subtype-zero-pair-with-sum-ℕ)) + equiv-pair-with-sum-coproduct-zero-nonzero = + equiv-coproduct + ( equiv-unit-is-contr is-contr-decidable-subtype-zero-pair-with-sum-ℕ) + ( id-equiv) ∘e + equiv-coproduct-decidable-subtype-complement + ( decidable-subtype-zero-pair-with-sum-ℕ) +``` diff --git a/src/foundation/complements-subtypes.lagda.md b/src/foundation/complements-subtypes.lagda.md index 3331a3455c..ecf37ade89 100644 --- a/src/foundation/complements-subtypes.lagda.md +++ b/src/foundation/complements-subtypes.lagda.md @@ -7,6 +7,15 @@ module foundation.complements-subtypes where
Imports ```agda +open import foundation.coproduct-types +open import foundation.sections +open import foundation.equality-dependent-pair-types +open import foundation.empty-types +open import foundation.identity-types +open import foundation.retractions +open import foundation.propositions +open import foundation.equivalences +open import foundation.dependent-pair-types open import foundation.decidable-propositions open import foundation.decidable-subtypes open import foundation.double-negation-stable-propositions @@ -17,7 +26,10 @@ open import foundation.powersets open import foundation.propositional-truncations open import foundation.unions-subtypes open import foundation.universe-levels +open import foundation.functoriality-coproduct-types +open import foundation.type-arithmetic-coproduct-types +open import foundation.action-on-identifications-functions open import foundation-core.function-types open import foundation-core.subtypes @@ -93,3 +105,78 @@ module _ complement-subtype C ⊆ complement-subtype B reverses-order-complement-subtype B⊆C x x∉C x∈B = x∉C (B⊆C x x∈B) ``` + +### The complement of a decidable subtype is decidable + +```agda +module _ + {l1 l2 : Level} + {A : UU l1} + (P : decidable-subtype l2 A) + where + + complement-decidable-subtype : decidable-subtype l2 A + complement-decidable-subtype a = neg-Decidable-Prop (P a) +``` + +### For a decidable subtype `P`, a type is equivalent to the coproduct of `P` and its complement + +```agda +module _ + {l1 l2 : Level} + {A : UU l1} + (P : decidable-subtype l2 A) + where + + map-equiv-coproduct-decidable-subtype-complement : + A → + type-decidable-subtype P + + type-decidable-subtype (complement-decidable-subtype P) + map-equiv-coproduct-decidable-subtype-complement a with + is-decidable-Decidable-Prop (P a) + ... | inl pa = inl (a , pa) + ... | inr ¬pa = inr (a , ¬pa) + + map-inv-equiv-coproduct-decidable-subtype-complement : + type-decidable-subtype P + + type-decidable-subtype (complement-decidable-subtype P) → A + map-inv-equiv-coproduct-decidable-subtype-complement (inl (a , _)) = a + map-inv-equiv-coproduct-decidable-subtype-complement (inr (a , _)) = a + + is-section-map-inv-equiv-coproduct-decidable-subtype-complement : + is-section + map-equiv-coproduct-decidable-subtype-complement + map-inv-equiv-coproduct-decidable-subtype-complement + is-section-map-inv-equiv-coproduct-decidable-subtype-complement (inl (a , pa)) + with is-decidable-Decidable-Prop (P a) + ... | inl pa' = + ap inl (eq-pair-eq-fiber (eq-type-Prop (prop-Decidable-Prop (P a)))) + ... | inr ¬pa' = ex-falso (¬pa' pa) + is-section-map-inv-equiv-coproduct-decidable-subtype-complement + (inr (a , ¬pa)) with is-decidable-Decidable-Prop (P a) + ... | inl pa' = ex-falso (¬pa pa') + ... | inr ¬pa' = + ap + ( inr ) + ( eq-pair-eq-fiber (eq-type-Prop (neg-Prop (prop-Decidable-Prop (P a))))) + + is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement : + is-retraction + map-equiv-coproduct-decidable-subtype-complement + map-inv-equiv-coproduct-decidable-subtype-complement + is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement a + with is-decidable-Decidable-Prop (P a) + ... | inl _ = refl + ... | inr _ = refl + + equiv-coproduct-decidable-subtype-complement : + A ≃ + type-decidable-subtype P + + type-decidable-subtype (complement-decidable-subtype P) + equiv-coproduct-decidable-subtype-complement = + map-equiv-coproduct-decidable-subtype-complement , + ( map-inv-equiv-coproduct-decidable-subtype-complement , + is-section-map-inv-equiv-coproduct-decidable-subtype-complement) , + ( map-inv-equiv-coproduct-decidable-subtype-complement , + is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement) +``` From 1522050bb3063c0d8f9a6c31e34ecc5d80c6ce1e Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 20:51:23 -0700 Subject: [PATCH 38/66] Add sums and products on the unit type --- .../sums-commutative-rings.lagda.md | 5 +++ .../sums-commutative-semirings.lagda.md | 6 +++ ...s-of-elements-commutative-monoids.lagda.md | 41 ++++++++++++++++--- ...cts-of-tuples-of-elements-monoids.lagda.md | 10 ++--- src/ring-theory/sums-rings.lagda.md | 5 +++ src/ring-theory/sums-semirings.lagda.md | 10 ++++- 6 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 938d35510e..ffec1d7fc8 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -77,6 +77,11 @@ module _ sum-one-element-Commutative-Ring = sum-one-element-Ring (ring-Commutative-Ring A) + sum-unit-Commutative-Ring : + (f : unit → type-Commutative-Ring A) → + sum-finite-Commutative-Ring A unit-Finite-Type f = f star + sum-unit-Commutative-Ring = sum-unit-Ring (ring-Commutative-Ring A) + sum-two-elements-Commutative-Ring : (f : functional-vec-Commutative-Ring A 2) → sum-Commutative-Ring A 2 f = diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index b416e1ffd6..1c800314e7 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -79,6 +79,12 @@ module _ sum-one-element-Commutative-Semiring = sum-one-element-Semiring (semiring-Commutative-Semiring A) + sum-unit-Commutative-Semiring : + (f : unit → type-Commutative-Semiring A) → + sum-finite-Commutative-Semiring A unit-Finite-Type f = f star + sum-unit-Commutative-Semiring = + sum-unit-Semiring (semiring-Commutative-Semiring A) + sum-two-elements-Commutative-Semiring : (f : functional-vec-Commutative-Semiring A 2) → sum-Commutative-Semiring A 2 f = diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 4e0ca06ffb..37312ecdd3 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -84,19 +84,19 @@ module _ {l : Level} (M : Commutative-Monoid l) where - product-one-element-Commutative-Monoid : + mul-one-element-Commutative-Monoid : (f : functional-vec-Commutative-Monoid M 1) → mul-fin-Commutative-Monoid M 1 f = head-functional-vec-Commutative-Monoid M 0 f - product-one-element-Commutative-Monoid = - product-one-element-Monoid (monoid-Commutative-Monoid M) + mul-one-element-Commutative-Monoid = + mul-one-element-Monoid (monoid-Commutative-Monoid M) - product-two-elements-Commutative-Monoid : + mul-two-elements-Commutative-Monoid : (f : functional-vec-Commutative-Monoid M 2) → mul-fin-Commutative-Monoid M 2 f = mul-Commutative-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)) - product-two-elements-Commutative-Monoid = - product-two-elements-Monoid (monoid-Commutative-Monoid M) + mul-two-elements-Commutative-Monoid = + mul-two-elements-Monoid (monoid-Commutative-Monoid M) ``` ### Products are homotopy invariant @@ -896,3 +896,32 @@ module _ ( A) ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)))) ``` + +### Products over the unit type + +```agda +module _ + {l : Level} (M : Commutative-Monoid l) + where + + abstract + mul-finite-unit-Commutative-Monoid : + (f : unit → type-Commutative-Monoid M) → + mul-finite-Commutative-Monoid M unit-Finite-Type f = f star + mul-finite-unit-Commutative-Monoid f = + equational-reasoning + mul-finite-Commutative-Monoid M unit-Finite-Type f + = + mul-count-Commutative-Monoid + ( M) + ( unit) + ( count-unit) + ( f) + by + eq-mul-finite-count-Commutative-Monoid + ( M) + ( unit-Finite-Type) + ( count-unit) + ( f) + = f star by mul-one-element-Commutative-Monoid M _ +``` diff --git a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md index b20430baa6..d37b7e31d4 100644 --- a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md @@ -57,16 +57,16 @@ module _ {l : Level} (M : Monoid l) where - product-one-element-Monoid : + mul-one-element-Monoid : (f : functional-vec-Monoid M 1) → mul-fin-Monoid M 1 f = head-functional-vec-Monoid M 0 f - product-one-element-Monoid f = + mul-one-element-Monoid f = left-unit-law-mul-Monoid M (f (inr star)) - product-two-elements-Monoid : + mul-two-elements-Monoid : (f : functional-vec-Monoid M 2) → mul-fin-Monoid M 2 f = mul-Monoid M (f (zero-Fin 1)) (f (one-Fin 1)) - product-two-elements-Monoid f = + mul-two-elements-Monoid f = ( associative-mul-Monoid M (unit-Monoid M) (f (zero-Fin 1)) (f (one-Fin 1))) ∙ ( left-unit-law-mul-Monoid M @@ -112,7 +112,7 @@ module _ ( x) ( mul-fin-Monoid M n (f ∘ inr-Fin n)) snoc-mul-fin-Monoid zero-ℕ f refl = - ( product-one-element-Monoid M f) ∙ + ( mul-one-element-Monoid M f) ∙ ( inv (right-unit-law-mul-Monoid M (f (zero-Fin 0)))) snoc-mul-fin-Monoid (succ-ℕ n) f refl = ( ap diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index b6c04118eb..c1ff0edbbf 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -18,6 +18,7 @@ open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types +open import foundation.unit-type open import foundation.universe-levels open import linear-algebra.vectors @@ -67,6 +68,10 @@ module _ (f : functional-vec-Ring R 1) → sum-Ring R 1 f = head-functional-vec 0 f sum-one-element-Ring = sum-one-element-Semiring (semiring-Ring R) + sum-unit-Ring : + (f : unit → type-Ring R) → sum-finite-Ring R unit-Finite-Type f = f star + sum-unit-Ring = sum-unit-Semiring (semiring-Ring R) + sum-two-elements-Ring : (f : functional-vec-Ring R 2) → sum-Ring R 2 f = add-Ring R (f (zero-Fin 1)) (f (one-Fin 1)) diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 967bfbbb29..5e7b79c9af 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -77,14 +77,20 @@ module _ (f : functional-vec-Semiring R 1) → sum-Semiring R 1 f = head-functional-vec 0 f sum-one-element-Semiring = - product-one-element-Commutative-Monoid + mul-one-element-Commutative-Monoid ( additive-commutative-monoid-Semiring R) + sum-unit-Semiring : + (f : unit → type-Semiring R) → + sum-finite-Semiring R unit-Finite-Type f = f star + sum-unit-Semiring = + mul-finite-unit-Commutative-Monoid (additive-commutative-monoid-Semiring R) + sum-two-elements-Semiring : (f : functional-vec-Semiring R 2) → sum-Semiring R 2 f = add-Semiring R (f (zero-Fin 1)) (f (one-Fin 1)) sum-two-elements-Semiring = - product-two-elements-Commutative-Monoid + mul-two-elements-Commutative-Monoid ( additive-commutative-monoid-Semiring R) ``` From 1edd2993d2dfc0ba45ab4396a9b1946aecb09822 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 21:07:37 -0700 Subject: [PATCH 39/66] ProgresS --- ...ower-series-commutative-semirings.lagda.md | 23 +++- .../pairs-with-natural-sums.lagda.md | 1 + .../complements-decidable-subtypes.lagda.md | 108 ++++++++++++++++++ src/foundation/complements-subtypes.lagda.md | 87 -------------- 4 files changed, 128 insertions(+), 91 deletions(-) create mode 100644 src/foundation/complements-decidable-subtypes.lagda.md diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 3753645ff3..279bad4389 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -21,6 +21,7 @@ open import foundation.action-on-identifications-functions open import foundation.coproduct-types open import foundation.dependent-pair-types open import foundation.equivalences +open import foundation.complements-decidable-subtypes open import foundation.dependent-identifications open import foundation.equality-dependent-pair-types open import foundation.function-extensionality @@ -50,6 +51,8 @@ open import univalent-combinatorics.standard-finite-types open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.counting open import univalent-combinatorics.finite-types +open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.decidable-subtypes ```
@@ -588,10 +591,7 @@ module _ (p : formal-power-series-Commutative-Semiring R) where - opaque - unfolding mul-formal-power-series-Commutative-Semiring - unfolding constant-formal-power-series-Commutative-Semiring - + abstract htpy-left-unit-law-mul-formal-power-series-Commutative-Semiring : (p : ℕ → type-Commutative-Semiring R) (n : ℕ) → sum-finite-Commutative-Semiring @@ -619,8 +619,23 @@ module _ ( R) ( one-Commutative-Semiring R) ( b))) + = + sum-finite-Commutative-Semiring + ( R) + ( coproduct-Finite-Type + ( unit-Finite-Type) + ( finite-type-subset-Finite-Type + ( finite-type-pair-with-sum-ℕ n) + ( complement-decidable-subtype + ( decidable-subtype-zero-pair-with-sum-ℕ n)))) + {! !} + by inv (sum-equiv-finite-Commutative-Semiring R _ _ (equiv-pair-with-sum-coproduct-zero-nonzero n) {! _ !}) = {! !} by {! !} + opaque + unfolding mul-formal-power-series-Commutative-Semiring + unfolding constant-formal-power-series-Commutative-Semiring + left-unit-law-mul-formal-power-series-Commutative-Semiring : mul-formal-power-series-Commutative-Semiring ( R) diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md index 74a755eb5f..04bf1633d8 100644 --- a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -31,6 +31,7 @@ open import foundation.propositions open import foundation.cartesian-product-types open import foundation.retractions open import foundation.sections +open import foundation.complements-decidable-subtypes open import foundation.sets open import foundation.conjunction open import foundation.universe-levels diff --git a/src/foundation/complements-decidable-subtypes.lagda.md b/src/foundation/complements-decidable-subtypes.lagda.md new file mode 100644 index 0000000000..adcd9708f6 --- /dev/null +++ b/src/foundation/complements-decidable-subtypes.lagda.md @@ -0,0 +1,108 @@ +# Complements of decidable subtypes + +```agda +module foundation.complements-decidable-subtypes where +``` + +
Imports + +```agda +open import foundation.universe-levels +open import foundation.decidable-propositions +open import foundation.decidable-subtypes +open import foundation.coproduct-types +open import foundation.identity-types +open import foundation.negation +open import foundation.empty-types +open import foundation.propositions +open import foundation.equality-dependent-pair-types +open import foundation.action-on-identifications-functions +open import foundation.sections +open import foundation.retractions +open import foundation.equivalences +open import foundation.dependent-pair-types +``` + +
+ +## Idea + +The +{{#concept "complement" Disambiguation="of a decidable subtype" Agda=complement-decidable-subtype}} +of a [decidable subtype](foundation.decidable-subtypes.md) `P ⊆ A` consists of the elements +that are [not](foundation-core.negation.md) in `P`. + +### The complement of a decidable subtype is decidable + +```agda +module _ + {l1 l2 : Level} + {A : UU l1} + (P : decidable-subtype l2 A) + where + + complement-decidable-subtype : decidable-subtype l2 A + complement-decidable-subtype a = neg-Decidable-Prop (P a) +``` + +### For a decidable subtype `P`, a type is equivalent to the coproduct of `P` and its complement + +```agda +module _ + {l1 l2 : Level} + {A : UU l1} + (P : decidable-subtype l2 A) + where + + map-equiv-coproduct-decidable-subtype-complement : + A → + type-decidable-subtype P + + type-decidable-subtype (complement-decidable-subtype P) + map-equiv-coproduct-decidable-subtype-complement a with + is-decidable-Decidable-Prop (P a) + ... | inl pa = inl (a , pa) + ... | inr ¬pa = inr (a , ¬pa) + + map-inv-equiv-coproduct-decidable-subtype-complement : + type-decidable-subtype P + + type-decidable-subtype (complement-decidable-subtype P) → A + map-inv-equiv-coproduct-decidable-subtype-complement (inl (a , _)) = a + map-inv-equiv-coproduct-decidable-subtype-complement (inr (a , _)) = a + + is-section-map-inv-equiv-coproduct-decidable-subtype-complement : + is-section + map-equiv-coproduct-decidable-subtype-complement + map-inv-equiv-coproduct-decidable-subtype-complement + is-section-map-inv-equiv-coproduct-decidable-subtype-complement (inl (a , pa)) + with is-decidable-Decidable-Prop (P a) + ... | inl pa' = + ap inl (eq-pair-eq-fiber (eq-type-Prop (prop-Decidable-Prop (P a)))) + ... | inr ¬pa' = ex-falso (¬pa' pa) + is-section-map-inv-equiv-coproduct-decidable-subtype-complement + (inr (a , ¬pa)) with is-decidable-Decidable-Prop (P a) + ... | inl pa' = ex-falso (¬pa pa') + ... | inr ¬pa' = + ap + ( inr ) + ( eq-pair-eq-fiber (eq-type-Prop (neg-Prop (prop-Decidable-Prop (P a))))) + + is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement : + is-retraction + map-equiv-coproduct-decidable-subtype-complement + map-inv-equiv-coproduct-decidable-subtype-complement + is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement a + with is-decidable-Decidable-Prop (P a) + ... | inl _ = refl + ... | inr _ = refl + + equiv-coproduct-decidable-subtype-complement : + A ≃ + type-decidable-subtype P + + type-decidable-subtype (complement-decidable-subtype P) + equiv-coproduct-decidable-subtype-complement = + map-equiv-coproduct-decidable-subtype-complement , + ( map-inv-equiv-coproduct-decidable-subtype-complement , + is-section-map-inv-equiv-coproduct-decidable-subtype-complement) , + ( map-inv-equiv-coproduct-decidable-subtype-complement , + is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement) +``` diff --git a/src/foundation/complements-subtypes.lagda.md b/src/foundation/complements-subtypes.lagda.md index ecf37ade89..3331a3455c 100644 --- a/src/foundation/complements-subtypes.lagda.md +++ b/src/foundation/complements-subtypes.lagda.md @@ -7,15 +7,6 @@ module foundation.complements-subtypes where
Imports ```agda -open import foundation.coproduct-types -open import foundation.sections -open import foundation.equality-dependent-pair-types -open import foundation.empty-types -open import foundation.identity-types -open import foundation.retractions -open import foundation.propositions -open import foundation.equivalences -open import foundation.dependent-pair-types open import foundation.decidable-propositions open import foundation.decidable-subtypes open import foundation.double-negation-stable-propositions @@ -26,10 +17,7 @@ open import foundation.powersets open import foundation.propositional-truncations open import foundation.unions-subtypes open import foundation.universe-levels -open import foundation.functoriality-coproduct-types -open import foundation.type-arithmetic-coproduct-types -open import foundation.action-on-identifications-functions open import foundation-core.function-types open import foundation-core.subtypes @@ -105,78 +93,3 @@ module _ complement-subtype C ⊆ complement-subtype B reverses-order-complement-subtype B⊆C x x∉C x∈B = x∉C (B⊆C x x∈B) ``` - -### The complement of a decidable subtype is decidable - -```agda -module _ - {l1 l2 : Level} - {A : UU l1} - (P : decidable-subtype l2 A) - where - - complement-decidable-subtype : decidable-subtype l2 A - complement-decidable-subtype a = neg-Decidable-Prop (P a) -``` - -### For a decidable subtype `P`, a type is equivalent to the coproduct of `P` and its complement - -```agda -module _ - {l1 l2 : Level} - {A : UU l1} - (P : decidable-subtype l2 A) - where - - map-equiv-coproduct-decidable-subtype-complement : - A → - type-decidable-subtype P + - type-decidable-subtype (complement-decidable-subtype P) - map-equiv-coproduct-decidable-subtype-complement a with - is-decidable-Decidable-Prop (P a) - ... | inl pa = inl (a , pa) - ... | inr ¬pa = inr (a , ¬pa) - - map-inv-equiv-coproduct-decidable-subtype-complement : - type-decidable-subtype P + - type-decidable-subtype (complement-decidable-subtype P) → A - map-inv-equiv-coproduct-decidable-subtype-complement (inl (a , _)) = a - map-inv-equiv-coproduct-decidable-subtype-complement (inr (a , _)) = a - - is-section-map-inv-equiv-coproduct-decidable-subtype-complement : - is-section - map-equiv-coproduct-decidable-subtype-complement - map-inv-equiv-coproduct-decidable-subtype-complement - is-section-map-inv-equiv-coproduct-decidable-subtype-complement (inl (a , pa)) - with is-decidable-Decidable-Prop (P a) - ... | inl pa' = - ap inl (eq-pair-eq-fiber (eq-type-Prop (prop-Decidable-Prop (P a)))) - ... | inr ¬pa' = ex-falso (¬pa' pa) - is-section-map-inv-equiv-coproduct-decidable-subtype-complement - (inr (a , ¬pa)) with is-decidable-Decidable-Prop (P a) - ... | inl pa' = ex-falso (¬pa pa') - ... | inr ¬pa' = - ap - ( inr ) - ( eq-pair-eq-fiber (eq-type-Prop (neg-Prop (prop-Decidable-Prop (P a))))) - - is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement : - is-retraction - map-equiv-coproduct-decidable-subtype-complement - map-inv-equiv-coproduct-decidable-subtype-complement - is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement a - with is-decidable-Decidable-Prop (P a) - ... | inl _ = refl - ... | inr _ = refl - - equiv-coproduct-decidable-subtype-complement : - A ≃ - type-decidable-subtype P + - type-decidable-subtype (complement-decidable-subtype P) - equiv-coproduct-decidable-subtype-complement = - map-equiv-coproduct-decidable-subtype-complement , - ( map-inv-equiv-coproduct-decidable-subtype-complement , - is-section-map-inv-equiv-coproduct-decidable-subtype-complement) , - ( map-inv-equiv-coproduct-decidable-subtype-complement , - is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement) -``` From e1b1e3e396533bb108774c536e1d8c24a41f79ea Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Thu, 20 Mar 2025 21:44:39 -0700 Subject: [PATCH 40/66] Clean up the statement of sums on equivalences --- .../sums-commutative-rings.lagda.md | 9 +- .../sums-commutative-semirings.lagda.md | 8 +- ...s-of-elements-commutative-monoids.lagda.md | 82 +++++++++---------- src/ring-theory/sums-rings.lagda.md | 6 +- src/ring-theory/sums-semirings.lagda.md | 4 +- 5 files changed, 52 insertions(+), 57 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index ffec1d7fc8..f00ac75756 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -293,9 +293,9 @@ module _ where sum-equiv-finite-Commutative-Ring : - (f : type-Finite-Type B → type-Commutative-Ring R) → - sum-finite-Commutative-Ring R B f = - sum-finite-Commutative-Ring R A (f ∘ map-equiv H) + (f : type-Finite-Type A → type-Commutative-Ring R) → + sum-finite-Commutative-Ring R A f = + sum-finite-Commutative-Ring R B (f ∘ map-inv-equiv H) sum-equiv-finite-Commutative-Ring = sum-equiv-finite-Commutative-Semiring ( commutative-semiring-Commutative-Ring R) @@ -312,7 +312,8 @@ module _ (f : type-Finite-Type A → type-Commutative-Ring R) → sum-finite-Commutative-Ring R A f = sum-finite-Commutative-Ring R A (f ∘ map-equiv σ) - sum-aut-finite-Commutative-Ring = sum-equiv-finite-Commutative-Ring R A A σ + sum-aut-finite-Commutative-Ring = + sum-equiv-finite-Commutative-Ring R A A (inv-equiv σ) ``` ### Sums over finite types distribute over coproducts diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 1c800314e7..6a887fdbdf 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -299,9 +299,9 @@ module _ where sum-equiv-finite-Commutative-Semiring : - (f : type-Finite-Type B → type-Commutative-Semiring R) → - sum-finite-Commutative-Semiring R B f = - sum-finite-Commutative-Semiring R A (f ∘ map-equiv H) + (f : type-Finite-Type A → type-Commutative-Semiring R) → + sum-finite-Commutative-Semiring R A f = + sum-finite-Commutative-Semiring R B (f ∘ map-inv-equiv H) sum-equiv-finite-Commutative-Semiring = sum-equiv-finite-Semiring (semiring-Commutative-Semiring R) A B H @@ -315,7 +315,7 @@ module _ sum-finite-Commutative-Semiring R A f = sum-finite-Commutative-Semiring R A (f ∘ map-equiv σ) sum-aut-finite-Commutative-Semiring = - sum-equiv-finite-Commutative-Semiring R A A σ + sum-equiv-finite-Commutative-Semiring R A A (inv-equiv σ) ``` ### Sums over finite types distribute over coproducts diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 37312ecdd3..53aa7aa9c8 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -404,25 +404,22 @@ module _ abstract mul-equiv-count-Commutative-Monoid : - (cA : count A) (cB : count B) (f : B → type-Commutative-Monoid M) → - mul-count-Commutative-Monoid M B cB f = - mul-count-Commutative-Monoid M A cA (f ∘ map-equiv H) + (cA : count A) (cB : count B) (f : A → type-Commutative-Monoid M) → + mul-count-Commutative-Monoid M A cA f = + mul-count-Commutative-Monoid M B cB (f ∘ map-inv-equiv H) mul-equiv-count-Commutative-Monoid - cA@(_ , Fin-nA≃A) cB@(nB , Fin-nB≃B) f + cA@(nA , Fin-nA≃A) cB@(_ , Fin-nB≃B) f with double-counting-equiv cA cB H ... | refl = preserves-product-permutation-Commutative-Monoid ( M) - ( nB) - ( inv-equiv Fin-nB≃B ∘e H ∘e Fin-nA≃A) - ( f ∘ map-equiv Fin-nB≃B) ∙ - ap - ( λ g → - mul-fin-Commutative-Monoid - ( M) - ( nB) - ((f ∘ g) ∘ (map-equiv (H ∘e Fin-nA≃A)))) - ( eq-htpy (is-section-map-inv-equiv Fin-nB≃B)) + ( nA) + ( inv-equiv Fin-nA≃A ∘e inv-equiv H ∘e Fin-nB≃B) + ( _) ∙ + htpy-mul-fin-Commutative-Monoid + ( M) + ( nA) + ( λ i → ap f (is-section-map-inv-equiv Fin-nA≃A _)) module _ {l1 l2 : Level} (M : Commutative-Monoid l1) @@ -559,23 +556,24 @@ module _ abstract mul-equiv-finite-Commutative-Monoid : - (f : type-Finite-Type B → type-Commutative-Monoid M) → - mul-finite-Commutative-Monoid M B f = - mul-finite-Commutative-Monoid M A (f ∘ map-equiv H) + (f : type-Finite-Type A → type-Commutative-Monoid M) → + mul-finite-Commutative-Monoid M A f = + mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H) mul-equiv-finite-Commutative-Monoid f = do cA ← is-finite-type-Finite-Type A cB ← is-finite-type-Finite-Type B equational-reasoning - mul-finite-Commutative-Monoid M B f - = mul-count-Commutative-Monoid M (type-Finite-Type B) cB f - by eq-mul-finite-count-Commutative-Monoid M B cB f + mul-finite-Commutative-Monoid M A f + = + mul-count-Commutative-Monoid M (type-Finite-Type A) cA f + by eq-mul-finite-count-Commutative-Monoid M A cA f = mul-count-Commutative-Monoid ( M) - ( type-Finite-Type A) - ( cA) - ( f ∘ map-equiv H) + ( type-Finite-Type B) + ( cB) + ( f ∘ map-inv-equiv H) by mul-equiv-count-Commutative-Monoid ( M) @@ -585,21 +583,15 @@ module _ ( cA) ( cB) ( f) - = mul-finite-Commutative-Monoid M A (f ∘ map-equiv H) - by - inv - ( eq-mul-finite-count-Commutative-Monoid - ( M) - ( A) - ( cA) - ( f ∘ map-equiv H)) + = mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H) + by inv (eq-mul-finite-count-Commutative-Monoid M B cB _) where open do-syntax-trunc-Prop ( Id-Prop ( set-Commutative-Monoid M) - ( mul-finite-Commutative-Monoid M B f) - ( mul-finite-Commutative-Monoid M A (f ∘ map-equiv H))) + ( mul-finite-Commutative-Monoid M A f) + ( mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H))) ``` ### Products over finite types distribute over coproducts @@ -810,18 +802,19 @@ module _ by mul-equiv-finite-Commutative-Monoid ( M) - ( Σ-Finite-Type (Fin-Finite-Type (succ-ℕ n)) B) ( coproduct-Finite-Type - ( Σ-Finite-Type ( Fin-Finite-Type n) (B ∘ inl)) + ( Σ-Finite-Type (Fin-Finite-Type n) (B ∘ inl)) ( B (inr star))) - ( equiv-coproduct + (Σ-Finite-Type (Fin-Finite-Type (succ-ℕ n)) B) + ( inv-equiv + ( equiv-coproduct ( id-equiv) ( left-unit-law-Σ (type-Finite-Type ∘ B ∘ inr)) ∘e - right-distributive-Σ-coproduct - ( Fin n) - ( unit) - ( type-Finite-Type ∘ B)) - ( rec-coproduct (ind-Σ (f ∘ inl)) (f (inr star))) + right-distributive-Σ-coproduct + ( Fin n) + ( unit) + ( type-Finite-Type ∘ B))) + _ = mul-finite-Commutative-Monoid ( M) @@ -862,10 +855,11 @@ module _ by mul-equiv-finite-Commutative-Monoid ( M) - ( Σ-Finite-Type (Fin-Finite-Type nA) (B ∘ map-equiv Fin-nA≃A)) ( Σ-Finite-Type A B) - ( equiv-Σ-equiv-base (type-Finite-Type ∘ B) Fin-nA≃A) - ( ind-Σ f) + ( Σ-Finite-Type (Fin-Finite-Type nA) (B ∘ map-equiv Fin-nA≃A)) + ( inv-equiv + ( equiv-Σ-equiv-base (type-Finite-Type ∘ B) Fin-nA≃A)) + ( _) = mul-count-Commutative-Monoid ( M) diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index c1ff0edbbf..4a2caa9df4 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -265,9 +265,9 @@ module _ where sum-equiv-finite-Ring : - (f : type-Finite-Type B → type-Ring R) → - sum-finite-Ring R B f = - sum-finite-Ring R A (f ∘ map-equiv H) + (f : type-Finite-Type A → type-Ring R) → + sum-finite-Ring R A f = + sum-finite-Ring R B (f ∘ map-inv-equiv H) sum-equiv-finite-Ring = sum-equiv-finite-Semiring (semiring-Ring R) A B H ``` diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 5e7b79c9af..6ffb3b0eaf 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -392,8 +392,8 @@ module _ where sum-equiv-finite-Semiring : - (f : type-Finite-Type B → type-Semiring R) → - sum-finite-Semiring R B f = sum-finite-Semiring R A (f ∘ map-equiv H) + (f : type-Finite-Type A → type-Semiring R) → + sum-finite-Semiring R A f = sum-finite-Semiring R B (f ∘ map-inv-equiv H) sum-equiv-finite-Semiring = mul-equiv-finite-Commutative-Monoid ( additive-commutative-monoid-Semiring R) From f5ce94f78385f49fd01ad5a3755fd8a6ba90fcb5 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Fri, 21 Mar 2025 08:08:43 -0700 Subject: [PATCH 41/66] Progress --- ...ower-series-commutative-semirings.lagda.md | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 279bad4389..62fd195c96 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -20,6 +20,7 @@ open import elementary-number-theory.pairs-with-natural-sums open import foundation.action-on-identifications-functions open import foundation.coproduct-types open import foundation.dependent-pair-types +open import foundation.empty-types open import foundation.equivalences open import foundation.complements-decidable-subtypes open import foundation.dependent-identifications @@ -161,6 +162,15 @@ module _ coefficient-constant-formal-power-series-Commutative-Semiring c (succ-ℕ _) = zero-Commutative-Semiring R + coefficient-nonzero-constant-formal-power-series-Commutative-Semiring : + (c : type-Commutative-Semiring R) → (n : ℕ) → is-nonzero-ℕ n → + is-zero-Commutative-Semiring R + ( coefficient-constant-formal-power-series-Commutative-Semiring c n) + coefficient-nonzero-constant-formal-power-series-Commutative-Semiring + c zero-ℕ H = ex-falso (H refl) + coefficient-nonzero-constant-formal-power-series-Commutative-Semiring + c (succ-ℕ _) _ = refl + opaque unfolding formal-power-series-Commutative-Semiring @@ -487,7 +497,7 @@ module _ (coeff p c *R coeff q d) *R coeff r a) by sum-equiv-finite-Commutative-Semiring R _ _ - ( inv-equiv (equiv-pair-with-sum-pr1-pr2 n)) + ( equiv-pair-with-sum-pr1-pr2 n) ( _) = sum-finite-Commutative-Semiring @@ -600,11 +610,11 @@ module _ ( λ (a , b , _) → mul-Commutative-Semiring ( R) - ( p a) ( coefficient-constant-formal-power-series-Commutative-Semiring ( R) ( one-Commutative-Semiring R) - ( b))) = + ( a)) + ( p b)) = p n htpy-left-unit-law-mul-formal-power-series-Commutative-Semiring p n = equational-reasoning @@ -614,22 +624,21 @@ module _ ( λ (a , b , _) → mul-Commutative-Semiring ( R) - ( p a) ( coefficient-constant-formal-power-series-Commutative-Semiring ( R) ( one-Commutative-Semiring R) - ( b))) + ( a)) + ( p b)) = - sum-finite-Commutative-Semiring + sum-Commutative-Semiring ( R) - ( coproduct-Finite-Type - ( unit-Finite-Type) - ( finite-type-subset-Finite-Type - ( finite-type-pair-with-sum-ℕ n) - ( complement-decidable-subtype - ( decidable-subtype-zero-pair-with-sum-ℕ n)))) - {! !} - by inv (sum-equiv-finite-Commutative-Semiring R _ _ (equiv-pair-with-sum-coproduct-zero-nonzero n) {! _ !}) + ( succ-ℕ n) + ( λ k → + mul-Commutative-Ring + ( R) + ? + ?) + by = {! !} by {! !} opaque From 5683c302f305034b293a7947870098d4e1da0a0a Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Fri, 21 Mar 2025 08:22:44 -0700 Subject: [PATCH 42/66] Equivalence with counts --- .../sums-commutative-rings.lagda.md | 19 +++++++++++++ .../sums-commutative-semirings.lagda.md | 20 ++++++++++++++ ...s-of-elements-commutative-monoids.lagda.md | 26 +++++++++--------- src/ring-theory/sums-rings.lagda.md | 16 +++++++++++ src/ring-theory/sums-semirings.lagda.md | 27 ++++++++++++++++--- 5 files changed, 91 insertions(+), 17 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index f00ac75756..a7f299b690 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -32,6 +32,7 @@ open import linear-algebra.vectors-on-commutative-rings open import ring-theory.sums-rings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.counting open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types @@ -55,6 +56,11 @@ sum-Commutative-Ring : (functional-vec-Commutative-Ring A n) → type-Commutative-Ring A sum-Commutative-Ring A = sum-Ring (ring-Commutative-Ring A) +sum-count-Commutative-Ring : + {l1 l2 : Level} (R : Commutative-Ring l1) (A : UU l2) → count A → + (A → type-Commutative-Ring R) → type-Commutative-Ring R +sum-count-Commutative-Ring R = sum-count-Ring (ring-Commutative-Ring R) + sum-finite-Commutative-Ring : {l1 l2 : Level} (R : Commutative-Ring l1) (A : Finite-Type l2) → (type-Finite-Type A → type-Commutative-Ring R) → type-Commutative-Ring R @@ -370,3 +376,16 @@ module _ sum-is-empty-finite-Commutative-Ring = sum-is-empty-finite-Ring (ring-Commutative-Ring R) A H ``` + +### The sum over a finite type is the sum over any count for that type + +```agda +sum-finite-count-Commutative-Ring : + {l1 l2 : Level} (R : Commutative-Ring l1) (A : Finite-Type l2) + (cA : count (type-Finite-Type A)) + (f : type-Finite-Type A → type-Commutative-Ring R) → + sum-finite-Commutative-Ring R A f = + sum-count-Commutative-Ring R (type-Finite-Type A) cA f +sum-finite-count-Commutative-Ring R = + sum-finite-count-Ring (ring-Commutative-Ring R) +``` diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 6a887fdbdf..44a243f83a 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -33,6 +33,7 @@ open import lists.lists open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.counting open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types @@ -56,6 +57,12 @@ sum-Commutative-Semiring : (functional-vec-Commutative-Semiring A n) → type-Commutative-Semiring A sum-Commutative-Semiring A = sum-Semiring (semiring-Commutative-Semiring A) +sum-count-Commutative-Semiring : + {l1 l2 : Level} (R : Commutative-Semiring l1) (A : UU l2) → count A → + (A → type-Commutative-Semiring R) → type-Commutative-Semiring R +sum-count-Commutative-Semiring R = + sum-count-Semiring (semiring-Commutative-Semiring R) + sum-finite-Commutative-Semiring : {l1 l2 : Level} (R : Commutative-Semiring l1) (A : Finite-Type l2) → (type-Finite-Type A → type-Commutative-Semiring R) → @@ -372,3 +379,16 @@ module _ sum-is-empty-finite-Commutative-Semiring = sum-is-empty-finite-Semiring (semiring-Commutative-Semiring R) A H ``` + +### The sum over a finite type is the sum over any count for that type + +```agda +sum-finite-count-Commutative-Semiring : + {l1 l2 : Level} (R : Commutative-Semiring l1) (A : Finite-Type l2) + (cA : count (type-Finite-Type A)) + (f : type-Finite-Type A → type-Commutative-Semiring R) → + sum-finite-Commutative-Semiring R A f = + sum-count-Commutative-Semiring R (type-Finite-Type A) cA f +sum-finite-count-Commutative-Semiring R = + sum-finite-count-Semiring (semiring-Commutative-Semiring R) +``` diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 53aa7aa9c8..cf479af57f 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -427,11 +427,11 @@ module _ where abstract - eq-mul-finite-count-Commutative-Monoid : + mul-finite-count-Commutative-Monoid : (f : type-Finite-Type A → type-Commutative-Monoid M) → mul-finite-Commutative-Monoid M A f = mul-count-Commutative-Monoid M (type-Finite-Type A) cA f - eq-mul-finite-count-Commutative-Monoid f = + mul-finite-count-Commutative-Monoid f = equational-reasoning mul-finite-Commutative-Monoid M A f = @@ -472,7 +472,7 @@ module _ (f : type-Finite-Type A → type-Commutative-Monoid M) → is-unit-Commutative-Monoid M (mul-finite-Commutative-Monoid M A f) mul-is-empty-finite-Commutative-Monoid = - eq-mul-finite-count-Commutative-Monoid M A (count-is-empty H) + mul-finite-count-Commutative-Monoid M A (count-is-empty H) ``` ### The product of units is the unit @@ -500,7 +500,7 @@ module _ ( type-Finite-Type A) ( cA) ( λ _ → unit-Commutative-Monoid M) - by eq-mul-finite-count-Commutative-Monoid M A cA _ + by mul-finite-count-Commutative-Monoid M A cA _ = unit-Commutative-Monoid M by mul-unit-Commutative-Monoid M _ where open @@ -531,11 +531,11 @@ module _ equational-reasoning mul-finite-Commutative-Monoid M A f = mul-count-Commutative-Monoid M (type-Finite-Type A) cA f - by eq-mul-finite-count-Commutative-Monoid M A cA f + by mul-finite-count-Commutative-Monoid M A cA f = mul-count-Commutative-Monoid M (type-Finite-Type A) cA g by htpy-mul-count-Commutative-Monoid M (type-Finite-Type A) cA H = mul-finite-Commutative-Monoid M A g - by inv (eq-mul-finite-count-Commutative-Monoid M A cA g) + by inv (mul-finite-count-Commutative-Monoid M A cA g) where open do-syntax-trunc-Prop @@ -567,7 +567,7 @@ module _ mul-finite-Commutative-Monoid M A f = mul-count-Commutative-Monoid M (type-Finite-Type A) cA f - by eq-mul-finite-count-Commutative-Monoid M A cA f + by mul-finite-count-Commutative-Monoid M A cA f = mul-count-Commutative-Monoid ( M) @@ -584,7 +584,7 @@ module _ ( cB) ( f) = mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H) - by inv (eq-mul-finite-count-Commutative-Monoid M B cB _) + by inv (mul-finite-count-Commutative-Monoid M B cB _) where open do-syntax-trunc-Prop @@ -623,7 +623,7 @@ module _ ( nA +ℕ nB) ( f ∘ map-equiv-count (count-coproduct cA cB)) by - eq-mul-finite-count-Commutative-Monoid + mul-finite-count-Commutative-Monoid ( M) ( coproduct-Finite-Type A B) ( count-coproduct cA cB) @@ -679,12 +679,12 @@ module _ inv ( ap-mul-Commutative-Monoid ( M) - ( eq-mul-finite-count-Commutative-Monoid + ( mul-finite-count-Commutative-Monoid ( M) ( A) ( cA) ( f ∘ inl)) - ( eq-mul-finite-count-Commutative-Monoid + ( mul-finite-count-Commutative-Monoid ( M) ( B) ( cB) @@ -878,7 +878,7 @@ module _ ( M) ( A) ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)) - by inv (eq-mul-finite-count-Commutative-Monoid M A cA _) + by inv (mul-finite-count-Commutative-Monoid M A cA _) where open do-syntax-trunc-Prop @@ -912,7 +912,7 @@ module _ ( count-unit) ( f) by - eq-mul-finite-count-Commutative-Monoid + mul-finite-count-Commutative-Monoid ( M) ( unit-Finite-Type) ( count-unit) diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index 4a2caa9df4..97f8e5fab4 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -28,6 +28,7 @@ open import ring-theory.rings open import ring-theory.sums-semirings open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.counting open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types @@ -49,6 +50,11 @@ sum-Ring : {l : Level} (R : Ring l) (n : ℕ) → functional-vec-Ring R n → type-Ring R sum-Ring R = sum-Semiring (semiring-Ring R) +sum-count-Ring : + {l1 l2 : Level} (R : Ring l1) (A : UU l2) → count A → (A → type-Ring R) → + type-Ring R +sum-count-Ring R = sum-count-Semiring (semiring-Ring R) + sum-finite-Ring : {l1 l2 : Level} (R : Ring l1) (A : Finite-Type l2) → (type-Finite-Type A → type-Ring R) → type-Ring R @@ -319,3 +325,13 @@ module _ is-zero-Ring R (sum-finite-Ring R A f) sum-is-empty-finite-Ring = sum-is-empty-finite-Semiring (semiring-Ring R) A H ``` + +### The sum over a finite type is the sum over any count for that type + +```agda +sum-finite-count-Ring : + {l1 l2 : Level} (R : Ring l1) (A : Finite-Type l2) + (cA : count (type-Finite-Type A)) (f : type-Finite-Type A → type-Ring R) → + sum-finite-Ring R A f = sum-count-Ring R (type-Finite-Type A) cA f +sum-finite-count-Ring R = sum-finite-count-Semiring (semiring-Ring R) +``` diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 6ffb3b0eaf..7d2efd9c1f 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -57,6 +57,12 @@ sum-Semiring : sum-Semiring R = mul-fin-Commutative-Monoid (additive-commutative-monoid-Semiring R) +sum-count-Semiring : + {l1 l2 : Level} (R : Semiring l1) (A : UU l2) (cA : count A) → + (A → type-Semiring R) → type-Semiring R +sum-count-Semiring R = + mul-count-Commutative-Monoid (additive-commutative-monoid-Semiring R) + sum-finite-Semiring : {l1 l2 : Level} (R : Semiring l1) (A : Finite-Type l2) → (type-Finite-Type A → type-Semiring R) → type-Semiring R @@ -201,7 +207,7 @@ module _ by ap ( mul-Semiring R x) - ( eq-mul-finite-count-Commutative-Monoid _ A cA f) + ( mul-finite-count-Commutative-Monoid _ A cA f) = mul-count-Commutative-Monoid ( additive-commutative-monoid-Semiring R) @@ -214,7 +220,7 @@ module _ ( x) ( f ∘ map-equiv-count cA) = sum-finite-Semiring R A (mul-Semiring R x ∘ f) - by inv (eq-mul-finite-count-Commutative-Monoid _ A cA _) + by inv (mul-finite-count-Commutative-Monoid _ A cA _) where open do-syntax-trunc-Prop @@ -245,7 +251,7 @@ module _ by ap ( mul-Semiring' R x) - ( eq-mul-finite-count-Commutative-Monoid _ A cA f) + ( mul-finite-count-Commutative-Monoid _ A cA f) = mul-count-Commutative-Monoid ( additive-commutative-monoid-Semiring R) @@ -258,7 +264,7 @@ module _ ( f ∘ map-equiv-count cA) ( x) = sum-finite-Semiring R A (mul-Semiring' R x ∘ f) - by inv (eq-mul-finite-count-Commutative-Monoid _ A cA _) + by inv (mul-finite-count-Commutative-Monoid _ A cA _) where open do-syntax-trunc-Prop @@ -457,3 +463,16 @@ module _ ( A) ( H) ``` + +### The sum over a finite type is the sum over any count for that type + +```agda +sum-finite-count-Semiring : + {l1 l2 : Level} (R : Semiring l1) (A : Finite-Type l2) + (cA : count (type-Finite-Type A)) + (f : type-Finite-Type A → type-Semiring R) → + sum-finite-Semiring R A f = + sum-count-Semiring R (type-Finite-Type A) cA f +sum-finite-count-Semiring R = + mul-finite-count-Commutative-Monoid (additive-commutative-monoid-Semiring R) +``` From 588e0d186d1f12dcfee46fa602df123cc6c6208e Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Fri, 21 Mar 2025 09:13:27 -0700 Subject: [PATCH 43/66] Progress --- ...ower-series-commutative-semirings.lagda.md | 237 ++++++++++++++---- .../pairs-with-natural-sums.lagda.md | 62 +++-- .../standard-finite-types.lagda.md | 17 +- 3 files changed, 241 insertions(+), 75 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 62fd195c96..fc8ecda2a1 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -54,6 +54,7 @@ open import univalent-combinatorics.counting open import univalent-combinatorics.finite-types open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.decidable-subtypes +open import ring-theory.semirings ```
@@ -373,8 +374,6 @@ module _ ### Multiplication ```agda - - module _ {l : Level} (R : Commutative-Semiring l) (p q : formal-power-series-Commutative-Semiring R) @@ -409,6 +408,52 @@ module _ coefficient-formal-power-series-coefficients-Commutative-Semiring R _ ``` +#### Commutativity + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + (p q : formal-power-series-Commutative-Semiring R) + where + + opaque + unfolding mul-formal-power-series-Commutative-Semiring + unfolding formal-power-series-Commutative-Semiring + + commutative-mul-formal-power-series-Commutative-Semiring : + mul-formal-power-series-Commutative-Semiring R p q = + mul-formal-power-series-Commutative-Semiring R q p + commutative-mul-formal-power-series-Commutative-Semiring = + eq-htpy-coefficients-formal-power-series-Commutative-Semiring + ( R) + ( _) + ( _) + ( λ n → equational-reasoning + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → mul-Commutative-Semiring R (p a) (q b)) + = + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → mul-Commutative-Semiring R (q b) (p a)) + by + htpy-sum-finite-Commutative-Semiring R _ + ( λ _ → commutative-mul-Commutative-Semiring R _ _) + = + sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( λ (a , b , _) → mul-Commutative-Semiring R (q a) (p b)) + by + sum-aut-finite-Commutative-Semiring + ( R) + ( _) + ( aut-swap-pair-with-sum-ℕ n) + ( _)) +``` + #### Associativity ```agda @@ -633,13 +678,64 @@ module _ sum-Commutative-Semiring ( R) ( succ-ℕ n) - ( λ k → - mul-Commutative-Ring + ( λ { + (inr star) → + mul-Commutative-Semiring R (one-Commutative-Semiring R) (p n) ; + (inl k) → + mul-Commutative-Semiring R (zero-Commutative-Semiring R) _}) + by + sum-finite-count-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n) + ( count-pair-with-sum-ℕ n) + ( _) + = + add-Commutative-Semiring + ( R) + ( sum-Commutative-Semiring + ( R) + ( n) + ( λ k → + mul-Commutative-Semiring R (zero-Commutative-Semiring R) _)) + ( mul-Commutative-Semiring R (one-Commutative-Semiring R) (p n)) + by + cons-sum-Commutative-Semiring R n + ( λ { + (inr star) → + mul-Commutative-Semiring + ( R) + ( one-Commutative-Semiring R) + ( p n) ; + (inl k) → + mul-Commutative-Semiring R (zero-Commutative-Semiring R) _}) + ( refl) + = + add-Commutative-Semiring + ( R) + ( sum-Commutative-Semiring + ( R) + ( n) + ( λ k → zero-Commutative-Semiring R)) + ( p n) + by + ap-add-Commutative-Semiring + ( R) + ( htpy-sum-Commutative-Semiring ( R) - ? - ?) + ( n) + ( λ k → left-zero-law-mul-Commutative-Semiring R _)) + ( left-unit-law-mul-Commutative-Semiring R _) + = + add-Commutative-Semiring + ( R) + ( zero-Commutative-Semiring R) + ( p n) by - = {! !} by {! !} + ap-add-Commutative-Semiring + ( R) + ( sum-zero-Commutative-Semiring R n) + ( refl) + = p n by left-unit-law-add-Commutative-Semiring R _ opaque unfolding mul-formal-power-series-Commutative-Semiring @@ -651,47 +747,98 @@ module _ ( one-formal-power-series-Commutative-Semiring R) ( p) = p left-unit-law-mul-formal-power-series-Commutative-Semiring = + eq-htpy-coefficients-formal-power-series-Commutative-Semiring + ( R) + ( _) + ( _) + ( htpy-left-unit-law-mul-formal-power-series-Commutative-Semiring p) + + right-unit-law-mul-formal-power-series-Commutative-Semiring : + mul-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( one-formal-power-series-Commutative-Semiring R) = p + right-unit-law-mul-formal-power-series-Commutative-Semiring = + commutative-mul-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( one-formal-power-series-Commutative-Semiring R) ∙ + left-unit-law-mul-formal-power-series-Commutative-Semiring +``` + +#### Zero laws of multiplication + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + (p : formal-power-series-Commutative-Semiring R) + where + + opaque + unfolding mul-formal-power-series-Commutative-Semiring + unfolding zero-formal-power-series-Commutative-Semiring + + left-zero-law-mul-formal-power-series-Commutative-Semiring : + mul-formal-power-series-Commutative-Semiring + ( R) + ( zero-formal-power-series-Commutative-Semiring R) + ( p) = + zero-formal-power-series-Commutative-Semiring R + left-zero-law-mul-formal-power-series-Commutative-Semiring = eq-htpy-coefficients-formal-power-series-Commutative-Semiring ( R) ( _) ( _) ( λ n → - equational-reasoning - sum-finite-Commutative-Semiring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → - mul-Commutative-Semiring - ( R) - ( coefficient-constant-formal-power-series-Commutative-Semiring - ( R) - ( one-Commutative-Semiring R) - ( a)) - ( coefficient-formal-power-series-Commutative-Semiring R p b)) - = - sum-finite-Commutative-Semiring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ { - (zero-ℕ , _ , _) → - coefficient-formal-power-series-Commutative-Semiring R p n ; - (succ-ℕ _ , _ , _) → - zero-Commutative-Semiring R}) - by - ap - ( sum-finite-Commutative-Semiring - ( R) - ( finite-type-pair-with-sum-ℕ n)) - ( eq-htpy - λ { - (zero-ℕ , b , b+0=n) → - left-unit-law-mul-Commutative-Semiring R _ ∙ - ap - ( coefficient-formal-power-series-Commutative-Semiring - ( R) - ( p)) - ( inv (right-unit-law-add-ℕ b) ∙ b+0=n) ; - (succ-ℕ _ , _ , _) → - left-zero-law-mul-Commutative-Semiring R _ }) - = {! !} by {! !}) + htpy-sum-finite-Commutative-Semiring R _ + ( λ _ → left-zero-law-mul-Commutative-Semiring R _) ∙ + sum-zero-finite-Commutative-Semiring R _) + + right-zero-law-mul-formal-power-series-Commutative-Semiring : + mul-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( zero-formal-power-series-Commutative-Semiring R) = + zero-formal-power-series-Commutative-Semiring R + right-zero-law-mul-formal-power-series-Commutative-Semiring = + commutative-mul-formal-power-series-Commutative-Semiring R _ _ ∙ + left-zero-law-mul-formal-power-series-Commutative-Semiring +``` + +#### Distributivity of multiplication over addition + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + (p q r : formal-power-series-Commutative-Semiring R) + where + + opaque + unfolding formal-power-series-Commutative-Semiring + unfolding add-formal-power-series-Commutative-Semiring + unfolding mul-formal-power-series-Commutative-Semiring + + left-distributive-mul-add-formal-power-series-Commutative-Semiring : + mul-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( add-formal-power-series-Commutative-Semiring R q r) = + add-formal-power-series-Commutative-Semiring + ( R) + ( mul-formal-power-series-Commutative-Semiring R p q) + ( mul-formal-power-series-Commutative-Semiring R p r) + left-distributive-mul-add-formal-power-series-Commutative-Semiring = {! !} +``` + +### The commutative semiring of formal power series + +```agda +module _ + {l : Level} (R : Commutative-Semiring l) + where + + semiring-formal-power-series-Commutative-Semiring : Semiring l + semiring-formal-power-series-Commutative-Semiring = + commutative-monoid-add-formal-power-series-Commutative-Semiring R , + {! !} , {! !} ``` diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md index 04bf1633d8..fc654fe66c 100644 --- a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -25,6 +25,7 @@ open import foundation.dependent-pair-types open import foundation.equality-dependent-pair-types open import foundation.functoriality-coproduct-types open import foundation.equivalences +open import foundation.involutions open import foundation.function-types open import foundation.identity-types open import foundation.propositions @@ -98,6 +99,26 @@ module _ set-pair-with-sum-ℕ = pair-with-sum-ℕ n , is-set-pair-with-sum-ℕ ``` +### Involution of swapping the components + +```agda +module _ + (n : ℕ) + where + + swap-pair-with-sum-ℕ : pair-with-sum-ℕ n → pair-with-sum-ℕ n + swap-pair-with-sum-ℕ (a , b , b+a=n) = + (b , a , commutative-add-ℕ a b ∙ b+a=n) + + is-involution-swap-pair-with-sum-ℕ : is-involution swap-pair-with-sum-ℕ + is-involution-swap-pair-with-sum-ℕ _ = eq-Eq-pair-with-sum-ℕ n _ _ refl + + aut-swap-pair-with-sum-ℕ : Aut (pair-with-sum-ℕ n) + aut-swap-pair-with-sum-ℕ = + swap-pair-with-sum-ℕ , + is-equiv-is-involution is-involution-swap-pair-with-sum-ℕ +``` + ### Equivalence of dependent pairs further partitioning a component ```agda @@ -166,27 +187,26 @@ module _ (n : ℕ) where - abstract - equiv-pair-with-sum-leq-ℕ : - Σ ℕ (λ k → leq-ℕ k n) ≃ pair-with-sum-ℕ n - equiv-pair-with-sum-leq-ℕ = - ( λ (k , k≤n) → k , subtraction-leq-ℕ k n k≤n) , - ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , - λ (k , l , l+k=n) → - let - (l' , l'+k=n) = - subtraction-leq-ℕ k n (leq-subtraction-ℕ k n l l+k=n) - in - eq-pair-eq-fiber - ( eq-pair-Σ - ( is-injective-right-add-ℕ k (l'+k=n ∙ inv l+k=n)) - ( eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n)))) , - (( λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , - (λ (k , k≤n) → eq-pair-eq-fiber (eq-type-Prop (leq-ℕ-Prop k n)))) - - count-pair-with-sum-ℕ : count (pair-with-sum-ℕ n) - count-pair-with-sum-ℕ = - succ-ℕ n , equiv-pair-with-sum-leq-ℕ ∘e equiv-fin-succ-leq-ℕ n + equiv-pair-with-sum-leq-ℕ : + Σ ℕ (λ k → leq-ℕ k n) ≃ pair-with-sum-ℕ n + equiv-pair-with-sum-leq-ℕ = + ( λ (k , k≤n) → k , subtraction-leq-ℕ k n k≤n) , + ((λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , + λ (k , l , l+k=n) → + let + (l' , l'+k=n) = + subtraction-leq-ℕ k n (leq-subtraction-ℕ k n l l+k=n) + in + eq-pair-eq-fiber + ( eq-pair-Σ + ( is-injective-right-add-ℕ k (l'+k=n ∙ inv l+k=n)) + ( eq-type-Prop (Id-Prop ℕ-Set (l +ℕ k) n)))) , + (( λ (k , l , l+k=n) → k , leq-subtraction-ℕ k n l l+k=n) , + (λ (k , k≤n) → eq-pair-eq-fiber (eq-type-Prop (leq-ℕ-Prop k n)))) + + count-pair-with-sum-ℕ : count (pair-with-sum-ℕ n) + count-pair-with-sum-ℕ = + succ-ℕ n , equiv-pair-with-sum-leq-ℕ ∘e equiv-fin-succ-leq-ℕ n finite-type-pair-with-sum-ℕ : Finite-Type lzero finite-type-pair-with-sum-ℕ = diff --git a/src/univalent-combinatorics/standard-finite-types.lagda.md b/src/univalent-combinatorics/standard-finite-types.lagda.md index 69d9ca27f1..7f40d0ade4 100644 --- a/src/univalent-combinatorics/standard-finite-types.lagda.md +++ b/src/univalent-combinatorics/standard-finite-types.lagda.md @@ -522,13 +522,12 @@ is-retraction-fin-reverse-le-ℕ (succ-ℕ n) (inl x) = ap inl (is-retraction-fin-reverse-le-ℕ n x) is-retraction-fin-reverse-le-ℕ (succ-ℕ n) (inr star) = refl -abstract - equiv-fin-le-ℕ : (n : ℕ) → Fin n ≃ Σ ℕ (λ m → le-ℕ m n) - equiv-fin-le-ℕ n = - nat-le-Fin-reverse n , - ( fin-reverse-le-ℕ n , is-section-fin-reverse-le-ℕ n) , - ( fin-reverse-le-ℕ n , is-retraction-fin-reverse-le-ℕ n) - - equiv-fin-succ-leq-ℕ : (n : ℕ) → Fin (succ-ℕ n) ≃ Σ ℕ (λ m → leq-ℕ m n) - equiv-fin-succ-leq-ℕ n = equiv-le-succ-ℕ-leq-ℕ n ∘e equiv-fin-le-ℕ (succ-ℕ n) +equiv-fin-le-ℕ : (n : ℕ) → Fin n ≃ Σ ℕ (λ m → le-ℕ m n) +equiv-fin-le-ℕ n = + nat-le-Fin-reverse n , + ( fin-reverse-le-ℕ n , is-section-fin-reverse-le-ℕ n) , + ( fin-reverse-le-ℕ n , is-retraction-fin-reverse-le-ℕ n) + +equiv-fin-succ-leq-ℕ : (n : ℕ) → Fin (succ-ℕ n) ≃ Σ ℕ (λ m → leq-ℕ m n) +equiv-fin-succ-leq-ℕ n = equiv-le-succ-ℕ-leq-ℕ n ∘e equiv-fin-le-ℕ (succ-ℕ n) ``` From 3ab402341de5355f7ad7bf460d98ab7442e0ffdd Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Fri, 21 Mar 2025 09:56:51 -0700 Subject: [PATCH 44/66] Commute sums --- .../sums-commutative-semirings.lagda.md | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 44a243f83a..81bae85ee4 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -22,6 +22,7 @@ open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.negated-equality +open import foundation.type-arithmetic-cartesian-product-types open import foundation.unit-type open import foundation.universe-levels @@ -32,6 +33,7 @@ open import lists.lists open import ring-theory.sums-semirings +open import univalent-combinatorics.cartesian-product-types open import univalent-combinatorics.coproduct-types open import univalent-combinatorics.counting open import univalent-combinatorics.dependent-pair-types @@ -392,3 +394,92 @@ sum-finite-count-Commutative-Semiring : sum-finite-count-Commutative-Semiring R = sum-finite-count-Semiring (semiring-Commutative-Semiring R) ``` + +### Commuting sums + +```agda +module _ + {l1 l2 : Level} (R : Commutative-Semiring l1) (A : Finite-Type l2) + where + + commute-sum-two-finite-Commutative-Semiring : + (f g : type-Finite-Type A → type-Commutative-Semiring R) → + sum-finite-Commutative-Semiring R A + (λ a → add-Commutative-Semiring R (f a) (g a)) = + add-Commutative-Semiring R + (sum-finite-Commutative-Semiring R A f) + (sum-finite-Commutative-Semiring R A g) + commute-sum-two-finite-Commutative-Semiring f g = equational-reasoning + sum-finite-Commutative-Semiring R A + ( λ a → add-Commutative-Semiring R (f a) (g a)) + = + sum-finite-Commutative-Semiring + ( R) + ( A) + ( λ a → sum-Commutative-Semiring R 2 (h a)) + by + htpy-sum-finite-Commutative-Semiring + ( R) + ( A) + ( λ a → inv (sum-two-elements-Commutative-Semiring R (h a))) + = + sum-finite-Commutative-Semiring + ( R) + ( A) + ( λ a → + sum-finite-Commutative-Semiring R (Fin-Finite-Type 2) (h a)) + by + htpy-sum-finite-Commutative-Semiring R A + ( λ a → + inv + ( sum-finite-count-Commutative-Semiring + ( R) + ( Fin-Finite-Type 2) + ( count-Fin 2) + ( h a))) + = + sum-finite-Commutative-Semiring + ( R) + ( Σ-Finite-Type A (λ _ → Fin-Finite-Type 2)) + ( ind-Σ h) + by inv (sum-Σ-finite-Commutative-Semiring R A (λ _ → Fin-Finite-Type 2) h) + = + sum-finite-Commutative-Semiring + ( R) + ( Σ-Finite-Type (Fin-Finite-Type 2) (λ _ → A)) + ( λ (i , a) → h a i) + by + sum-equiv-finite-Commutative-Semiring R _ _ + ( commutative-product) + ( ind-Σ h) + = + sum-finite-Commutative-Semiring + ( R) + ( Fin-Finite-Type 2) + ( λ i → sum-finite-Commutative-Semiring R A (λ a → h a i)) + by sum-Σ-finite-Commutative-Semiring R _ _ _ + = + sum-Commutative-Semiring + ( R) + ( 2) + ( λ i → sum-finite-Commutative-Semiring R A (λ a → h a i)) + by + sum-finite-count-Commutative-Semiring + ( R) + ( Fin-Finite-Type 2) + ( count-Fin 2) + ( _) + = + add-Commutative-Semiring + ( R) + ( sum-finite-Commutative-Semiring R A f) + ( sum-finite-Commutative-Semiring R A g) + by + sum-two-elements-Commutative-Semiring + ( R) + ( λ i → sum-finite-Commutative-Semiring R A (λ a → h a i)) + where + h : type-Finite-Type A → Fin 2 → type-Commutative-Semiring R + h a (inl (inr star)) = f a + h a (inr star) = g a +``` From ec254707f03249b1928d658c9dbfc33f73321b95 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Fri, 21 Mar 2025 10:17:52 -0700 Subject: [PATCH 45/66] Complete formal power series for commutative semirings --- ...ower-series-commutative-semirings.lagda.md | 100 ++++++++++++++---- 1 file changed, 79 insertions(+), 21 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index fc8ecda2a1..d7998d227f 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -34,11 +34,13 @@ open import foundation.identity-types open import foundation.involutions open import foundation.sets open import foundation.equivalences +open import foundation.action-on-identifications-binary-functions open import foundation.unit-type open import foundation.unital-binary-operations open import foundation.sections open import foundation.retractions open import foundation.transport-along-identifications +open import foundation.unital-binary-operations open import foundation.universe-levels open import group-theory.abelian-groups @@ -808,26 +810,51 @@ module _ #### Distributivity of multiplication over addition ```agda -module _ - {l : Level} (R : Commutative-Semiring l) - (p q r : formal-power-series-Commutative-Semiring R) - where - - opaque - unfolding formal-power-series-Commutative-Semiring - unfolding add-formal-power-series-Commutative-Semiring - unfolding mul-formal-power-series-Commutative-Semiring - - left-distributive-mul-add-formal-power-series-Commutative-Semiring : - mul-formal-power-series-Commutative-Semiring - ( R) - ( p) - ( add-formal-power-series-Commutative-Semiring R q r) = - add-formal-power-series-Commutative-Semiring - ( R) - ( mul-formal-power-series-Commutative-Semiring R p q) - ( mul-formal-power-series-Commutative-Semiring R p r) - left-distributive-mul-add-formal-power-series-Commutative-Semiring = {! !} +opaque + unfolding formal-power-series-Commutative-Semiring + unfolding add-formal-power-series-Commutative-Semiring + unfolding mul-formal-power-series-Commutative-Semiring + + left-distributive-mul-add-formal-power-series-Commutative-Semiring : + {l : Level} (R : Commutative-Semiring l) → + (p q r : formal-power-series-Commutative-Semiring R) → + mul-formal-power-series-Commutative-Semiring + ( R) + ( p) + ( add-formal-power-series-Commutative-Semiring R q r) = + add-formal-power-series-Commutative-Semiring + ( R) + ( mul-formal-power-series-Commutative-Semiring R p q) + ( mul-formal-power-series-Commutative-Semiring R p r) + left-distributive-mul-add-formal-power-series-Commutative-Semiring R p q r = + eq-htpy-coefficients-formal-power-series-Commutative-Semiring + ( R) + ( _) + ( _) + ( λ n → + htpy-sum-finite-Commutative-Semiring R _ + ( λ _ → left-distributive-mul-add-Commutative-Semiring R _ _ _) ∙ + commute-sum-two-finite-Commutative-Semiring R _ _ _) + +abstract + right-distributive-mul-add-formal-power-series-Commutative-Semiring : + {l : Level} (R : Commutative-Semiring l) → + (p q r : formal-power-series-Commutative-Semiring R) → + mul-formal-power-series-Commutative-Semiring + ( R) + ( add-formal-power-series-Commutative-Semiring R p q) + ( r) = + add-formal-power-series-Commutative-Semiring + ( R) + ( mul-formal-power-series-Commutative-Semiring R p r) + ( mul-formal-power-series-Commutative-Semiring R q r) + right-distributive-mul-add-formal-power-series-Commutative-Semiring R p q r = + commutative-mul-formal-power-series-Commutative-Semiring R _ _ ∙ + left-distributive-mul-add-formal-power-series-Commutative-Semiring R r p q ∙ + ap-binary + ( add-formal-power-series-Commutative-Semiring R) + ( commutative-mul-formal-power-series-Commutative-Semiring R r p) + ( commutative-mul-formal-power-series-Commutative-Semiring R r q) ``` ### The commutative semiring of formal power series @@ -837,8 +864,39 @@ module _ {l : Level} (R : Commutative-Semiring l) where + has-associative-mul-formal-power-series-Commutative-Semiring : + has-associative-mul (formal-power-series-Commutative-Semiring R) + has-associative-mul-formal-power-series-Commutative-Semiring = + mul-formal-power-series-Commutative-Semiring R , + associative-mul-formal-power-series-Commutative-Semiring R + + unit-laws-mul-formal-power-series-Commutative-Semiring : + unit-laws + ( mul-formal-power-series-Commutative-Semiring R) + ( one-formal-power-series-Commutative-Semiring R) + unit-laws-mul-formal-power-series-Commutative-Semiring = + left-unit-law-mul-formal-power-series-Commutative-Semiring R , + right-unit-law-mul-formal-power-series-Commutative-Semiring R + + is-unital-mul-formal-power-series-Commutative-Semiring : + is-unital (mul-formal-power-series-Commutative-Semiring R) + is-unital-mul-formal-power-series-Commutative-Semiring = + one-formal-power-series-Commutative-Semiring R , + unit-laws-mul-formal-power-series-Commutative-Semiring + semiring-formal-power-series-Commutative-Semiring : Semiring l semiring-formal-power-series-Commutative-Semiring = commutative-monoid-add-formal-power-series-Commutative-Semiring R , - {! !} , {! !} + ( has-associative-mul-formal-power-series-Commutative-Semiring , + is-unital-mul-formal-power-series-Commutative-Semiring , + left-distributive-mul-add-formal-power-series-Commutative-Semiring R , + right-distributive-mul-add-formal-power-series-Commutative-Semiring R) , + left-zero-law-mul-formal-power-series-Commutative-Semiring R , + right-zero-law-mul-formal-power-series-Commutative-Semiring R + + commutative-semiring-formal-power-series-Commutative-Semiring : + Commutative-Semiring l + commutative-semiring-formal-power-series-Commutative-Semiring = + semiring-formal-power-series-Commutative-Semiring , + commutative-mul-formal-power-series-Commutative-Semiring R ``` From c63ebdc4b8880120f494785a7ef2aafb7ab1da12 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Fri, 21 Mar 2025 10:20:51 -0700 Subject: [PATCH 46/66] make pre-commit --- src/commutative-algebra.lagda.md | 2 +- ...ower-series-commutative-semirings.lagda.md | 55 ++++++++++--------- .../sums-commutative-rings.lagda.md | 1 - .../equality-natural-numbers.lagda.md | 2 +- .../pairs-with-natural-sums.lagda.md | 28 +++++----- ...strict-inequality-natural-numbers.lagda.md | 8 +-- src/foundation.lagda.md | 1 + .../complements-decidable-subtypes.lagda.md | 22 ++++---- .../standard-finite-types.lagda.md | 6 +- 9 files changed, 64 insertions(+), 61 deletions(-) diff --git a/src/commutative-algebra.lagda.md b/src/commutative-algebra.lagda.md index 5c5aedc40b..f413ba4e99 100644 --- a/src/commutative-algebra.lagda.md +++ b/src/commutative-algebra.lagda.md @@ -16,7 +16,7 @@ open import commutative-algebra.dependent-products-commutative-semirings public open import commutative-algebra.discrete-fields public open import commutative-algebra.eisenstein-integers public open import commutative-algebra.euclidean-domains public -open import commutative-algebra.formal-power-series-rings public +open import commutative-algebra.formal-power-series-commutative-semirings public open import commutative-algebra.full-ideals-commutative-rings public open import commutative-algebra.function-commutative-rings public open import commutative-algebra.function-commutative-semirings public diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index d7998d227f..26ad325a49 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -11,52 +11,51 @@ open import commutative-algebra.commutative-semirings open import commutative-algebra.sums-commutative-semirings open import elementary-number-theory.addition-natural-numbers -open import elementary-number-theory.natural-numbers -open import elementary-number-theory.inequality-natural-numbers -open import elementary-number-theory.strict-inequality-natural-numbers open import elementary-number-theory.equality-natural-numbers +open import elementary-number-theory.inequality-natural-numbers +open import elementary-number-theory.natural-numbers open import elementary-number-theory.pairs-with-natural-sums +open import elementary-number-theory.strict-inequality-natural-numbers +open import foundation.action-on-identifications-binary-functions open import foundation.action-on-identifications-functions +open import foundation.cartesian-product-types +open import foundation.complements-decidable-subtypes open import foundation.coproduct-types +open import foundation.dependent-identifications open import foundation.dependent-pair-types open import foundation.empty-types -open import foundation.equivalences -open import foundation.complements-decidable-subtypes -open import foundation.dependent-identifications open import foundation.equality-dependent-pair-types +open import foundation.equivalences open import foundation.function-extensionality -open import foundation.propositions -open import foundation.cartesian-product-types open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.involutions -open import foundation.sets -open import foundation.equivalences -open import foundation.action-on-identifications-binary-functions -open import foundation.unit-type -open import foundation.unital-binary-operations -open import foundation.sections +open import foundation.propositions open import foundation.retractions +open import foundation.sections +open import foundation.sets open import foundation.transport-along-identifications +open import foundation.unit-type open import foundation.unital-binary-operations open import foundation.universe-levels open import group-theory.abelian-groups +open import group-theory.commutative-monoids +open import group-theory.function-commutative-monoids open import group-theory.groups open import group-theory.monoids -open import group-theory.commutative-monoids open import group-theory.semigroups -open import group-theory.function-commutative-monoids -open import univalent-combinatorics.standard-finite-types -open import univalent-combinatorics.dependent-pair-types -open import univalent-combinatorics.counting -open import univalent-combinatorics.finite-types +open import ring-theory.semirings + open import univalent-combinatorics.coproduct-types +open import univalent-combinatorics.counting open import univalent-combinatorics.decidable-subtypes -open import ring-theory.semirings +open import univalent-combinatorics.dependent-pair-types +open import univalent-combinatorics.finite-types +open import univalent-combinatorics.standard-finite-types ``` @@ -65,8 +64,8 @@ open import ring-theory.semirings A {{#concept "formal power series" Agda=formal-power-series-Commutative-Semiring WDID=Q1003025 WD="formal power series"}} -in a [commutative semiring](commutative-algebra.commutative-semirings.md) `R` is a -symbolic infinite sum over all `n : ℕ` of `cₙ xⁿ`, where `cₙ : R`. Convergence +in a [commutative semiring](commutative-algebra.commutative-semirings.md) `R` is +a symbolic infinite sum over all `n : ℕ` of `cₙ xⁿ`, where `cₙ : R`. Convergence of this sum is not relevant, but with the standard definitions of addition and multiplication for power series, this forms a new commutative semiring. @@ -82,7 +81,8 @@ module _ formal-power-series-Commutative-Semiring = ℕ → type-Commutative-Semiring R formal-power-series-coefficients-Commutative-Semiring : - (ℕ → type-Commutative-Semiring R) → formal-power-series-Commutative-Semiring + (ℕ → type-Commutative-Semiring R) → + formal-power-series-Commutative-Semiring formal-power-series-coefficients-Commutative-Semiring = id coefficient-formal-power-series-Commutative-Semiring : @@ -503,7 +503,9 @@ module _ ( λ (c , d , _) → (coeff p c *R coeff q d) *R coeff r b)) by ap - ( sum-finite-Commutative-Semiring R (finite-type-pair-with-sum-ℕ n)) + ( sum-finite-Commutative-Semiring + ( R) + ( finite-type-pair-with-sum-ℕ n)) ( eq-htpy ( λ (a , b , _) → ap-mul-Commutative-Semiring @@ -636,7 +638,8 @@ module _ formal-power-series-Commutative-Semiring R _*fps_ = mul-formal-power-series-Commutative-Semiring R coeff : - formal-power-series-Commutative-Semiring R → ℕ → type-Commutative-Semiring R + formal-power-series-Commutative-Semiring R → ℕ → + type-Commutative-Semiring R coeff = coefficient-formal-power-series-Commutative-Semiring R ``` diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index 494a95f7f4..a7f299b690 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -23,7 +23,6 @@ open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types -open import foundation.automorphisms open import foundation.unit-type open import foundation.universe-levels diff --git a/src/elementary-number-theory/equality-natural-numbers.lagda.md b/src/elementary-number-theory/equality-natural-numbers.lagda.md index 404cfe7233..c3d5e54b9c 100644 --- a/src/elementary-number-theory/equality-natural-numbers.lagda.md +++ b/src/elementary-number-theory/equality-natural-numbers.lagda.md @@ -16,10 +16,10 @@ open import foundation.decidable-types open import foundation.dependent-pair-types open import foundation.empty-types open import foundation.equivalences -open import foundation.negation open import foundation.function-types open import foundation.fundamental-theorem-of-identity-types open import foundation.identity-types +open import foundation.negation open import foundation.propositions open import foundation.set-truncations open import foundation.sets diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md index fc654fe66c..48b94e2368 100644 --- a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -9,34 +9,34 @@ module elementary-number-theory.pairs-with-natural-sums where ```agda open import elementary-number-theory.addition-natural-numbers open import elementary-number-theory.equality-natural-numbers -open import elementary-number-theory.natural-numbers open import elementary-number-theory.inequality-natural-numbers +open import elementary-number-theory.natural-numbers -open import foundation.negation -open import foundation.type-arithmetic-coproduct-types -open import foundation.contractible-types open import foundation.action-on-identifications-functions open import foundation.automorphisms -open import foundation.decidable-subtypes -open import foundation.subtypes +open import foundation.cartesian-product-types +open import foundation.complements-decidable-subtypes open import foundation.complements-subtypes +open import foundation.conjunction +open import foundation.contractible-types open import foundation.coproduct-types +open import foundation.decidable-subtypes open import foundation.dependent-pair-types open import foundation.equality-dependent-pair-types -open import foundation.functoriality-coproduct-types open import foundation.equivalences -open import foundation.involutions open import foundation.function-types +open import foundation.functoriality-coproduct-types open import foundation.identity-types +open import foundation.involutions +open import foundation.negation open import foundation.propositions -open import foundation.cartesian-product-types open import foundation.retractions open import foundation.sections -open import foundation.complements-decidable-subtypes open import foundation.sets -open import foundation.conjunction -open import foundation.universe-levels +open import foundation.subtypes +open import foundation.type-arithmetic-coproduct-types open import foundation.unit-type +open import foundation.universe-levels open import univalent-combinatorics.counting open import univalent-combinatorics.finite-types @@ -255,7 +255,7 @@ module _ map-equiv-permute-components-triple-with-sum-pr2 map-inv-equiv-permute-components-triple-with-sum-pr2 is-section-map-inv-equiv-permute-components-triple-with-sum-pr2 - x@((c , .(b +ℕ a), p+c=n) , a , b , refl) = + x@((c , .(b +ℕ a) , p+c=n) , a , b , refl) = inv ( ind-Id ( p+c=n) @@ -269,7 +269,7 @@ module _ map-equiv-permute-components-triple-with-sum-pr2 map-inv-equiv-permute-components-triple-with-sum-pr2 is-retraction-map-inv-equiv-permute-components-triple-with-sum-pr2 - x@((c , .(b +ℕ a), p+c=n) , a , b , refl) = + x@((c , .(b +ℕ a) , p+c=n) , a , b , refl) = inv ( ind-Id ( p+c=n) diff --git a/src/elementary-number-theory/strict-inequality-natural-numbers.lagda.md b/src/elementary-number-theory/strict-inequality-natural-numbers.lagda.md index 6e9723bf0f..95445f132a 100644 --- a/src/elementary-number-theory/strict-inequality-natural-numbers.lagda.md +++ b/src/elementary-number-theory/strict-inequality-natural-numbers.lagda.md @@ -17,22 +17,22 @@ open import foundation.action-on-identifications-functions open import foundation.binary-transport open import foundation.cartesian-product-types open import foundation.coproduct-types -open import foundation.equivalences open import foundation.decidable-types open import foundation.dependent-pair-types open import foundation.empty-types open import foundation.equality-dependent-pair-types +open import foundation.equivalences open import foundation.function-types open import foundation.functoriality-coproduct-types open import foundation.identity-types open import foundation.negated-equality open import foundation.negation open import foundation.propositions +open import foundation.retractions +open import foundation.sections open import foundation.transport-along-identifications open import foundation.unit-type open import foundation.universe-levels -open import foundation.sections -open import foundation.retractions ``` @@ -314,7 +314,7 @@ le-succ-leq-ℕ (succ-ℕ x) (succ-ℕ y) H = le-succ-leq-ℕ x y H ### There is an equivalence between natural numbers less than `succ-ℕ n` and natural numbers less than or equal to `n` -``` +```agda equiv-le-succ-ℕ-leq-ℕ : (n : ℕ) → Σ ℕ (λ k → le-ℕ k (succ-ℕ n)) ≃ Σ ℕ (λ k → leq-ℕ k n) equiv-le-succ-ℕ-leq-ℕ n = diff --git a/src/foundation.lagda.md b/src/foundation.lagda.md index fa5ed4f5b6..e8f3163f6a 100644 --- a/src/foundation.lagda.md +++ b/src/foundation.lagda.md @@ -74,6 +74,7 @@ open import foundation.commuting-triangles-of-identifications public open import foundation.commuting-triangles-of-maps public open import foundation.commuting-triangles-of-morphisms-arrows public open import foundation.complements public +open import foundation.complements-decidable-subtypes public open import foundation.complements-subtypes public open import foundation.composite-maps-in-inverse-sequential-diagrams public open import foundation.composition-algebra public diff --git a/src/foundation/complements-decidable-subtypes.lagda.md b/src/foundation/complements-decidable-subtypes.lagda.md index adcd9708f6..eedaa16852 100644 --- a/src/foundation/complements-decidable-subtypes.lagda.md +++ b/src/foundation/complements-decidable-subtypes.lagda.md @@ -7,20 +7,20 @@ module foundation.complements-decidable-subtypes where
Imports ```agda -open import foundation.universe-levels +open import foundation.action-on-identifications-functions +open import foundation.coproduct-types open import foundation.decidable-propositions open import foundation.decidable-subtypes -open import foundation.coproduct-types +open import foundation.dependent-pair-types +open import foundation.empty-types +open import foundation.equality-dependent-pair-types +open import foundation.equivalences open import foundation.identity-types open import foundation.negation -open import foundation.empty-types open import foundation.propositions -open import foundation.equality-dependent-pair-types -open import foundation.action-on-identifications-functions -open import foundation.sections open import foundation.retractions -open import foundation.equivalences -open import foundation.dependent-pair-types +open import foundation.sections +open import foundation.universe-levels ```
@@ -29,8 +29,8 @@ open import foundation.dependent-pair-types The {{#concept "complement" Disambiguation="of a decidable subtype" Agda=complement-decidable-subtype}} -of a [decidable subtype](foundation.decidable-subtypes.md) `P ⊆ A` consists of the elements -that are [not](foundation-core.negation.md) in `P`. +of a [decidable subtype](foundation.decidable-subtypes.md) `P ⊆ A` consists of +the elements that are [not](foundation-core.negation.md) in `P`. ### The complement of a decidable subtype is decidable @@ -83,7 +83,7 @@ module _ ... | inl pa' = ex-falso (¬pa pa') ... | inr ¬pa' = ap - ( inr ) + ( inr) ( eq-pair-eq-fiber (eq-type-Prop (neg-Prop (prop-Decidable-Prop (P a))))) is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement : diff --git a/src/univalent-combinatorics/standard-finite-types.lagda.md b/src/univalent-combinatorics/standard-finite-types.lagda.md index 7f40d0ade4..ef02fb64b0 100644 --- a/src/univalent-combinatorics/standard-finite-types.lagda.md +++ b/src/univalent-combinatorics/standard-finite-types.lagda.md @@ -18,12 +18,11 @@ open import foundation.contractible-types open import foundation.coproduct-types open import foundation.decidable-types open import foundation.dependent-pair-types -open import foundation.sections open import foundation.embeddings open import foundation.empty-types +open import foundation.equality-cartesian-product-types open import foundation.equality-coproduct-types open import foundation.equality-dependent-pair-types -open import foundation.equality-cartesian-product-types open import foundation.equivalence-injective-type-families open import foundation.equivalences open import foundation.equivalences-maybe @@ -32,12 +31,13 @@ open import foundation.homotopies open import foundation.identity-types open import foundation.injective-maps open import foundation.negated-equality -open import foundation.propositions open import foundation.negation open import foundation.noncontractible-types open import foundation.preunivalent-type-families +open import foundation.propositions open import foundation.raising-universe-levels open import foundation.retractions +open import foundation.sections open import foundation.sets open import foundation.transport-along-identifications open import foundation.unit-type From d6298d860c9c32d3b90d133ea88e93904d94a8dc Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Fri, 21 Mar 2025 10:24:12 -0700 Subject: [PATCH 47/66] Eliminate some equational reasoning --- ...ower-series-commutative-semirings.lagda.md | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 26ad325a49..0bd653cb1b 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -430,30 +430,14 @@ module _ ( R) ( _) ( _) - ( λ n → equational-reasoning - sum-finite-Commutative-Semiring + ( λ n → + htpy-sum-finite-Commutative-Semiring R _ + ( λ _ → commutative-mul-Commutative-Semiring R _ _) ∙ + sum-aut-finite-Commutative-Semiring ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → mul-Commutative-Semiring R (p a) (q b)) - = - sum-finite-Commutative-Semiring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → mul-Commutative-Semiring R (q b) (p a)) - by - htpy-sum-finite-Commutative-Semiring R _ - ( λ _ → commutative-mul-Commutative-Semiring R _ _) - = - sum-finite-Commutative-Semiring - ( R) - ( finite-type-pair-with-sum-ℕ n) - ( λ (a , b , _) → mul-Commutative-Semiring R (q a) (p b)) - by - sum-aut-finite-Commutative-Semiring - ( R) - ( _) - ( aut-swap-pair-with-sum-ℕ n) - ( _)) + ( _) + ( aut-swap-pair-with-sum-ℕ n) + ( _)) ``` #### Associativity From 78e5801fcdfc54ecb7f24691a5038774ea0034e2 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Fri, 21 Mar 2025 12:15:28 -0700 Subject: [PATCH 48/66] Add commutative rings --- src/commutative-algebra.lagda.md | 1 + ...al-power-series-commutative-rings.lagda.md | 658 ++++++++++++++++++ ...ower-series-commutative-semirings.lagda.md | 2 +- 3 files changed, 660 insertions(+), 1 deletion(-) create mode 100644 src/commutative-algebra/formal-power-series-commutative-rings.lagda.md diff --git a/src/commutative-algebra.lagda.md b/src/commutative-algebra.lagda.md index f413ba4e99..9d4aa29857 100644 --- a/src/commutative-algebra.lagda.md +++ b/src/commutative-algebra.lagda.md @@ -16,6 +16,7 @@ open import commutative-algebra.dependent-products-commutative-semirings public open import commutative-algebra.discrete-fields public open import commutative-algebra.eisenstein-integers public open import commutative-algebra.euclidean-domains public +open import commutative-algebra.formal-power-series-commutative-rings public open import commutative-algebra.formal-power-series-commutative-semirings public open import commutative-algebra.full-ideals-commutative-rings public open import commutative-algebra.function-commutative-rings public diff --git a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md new file mode 100644 index 0000000000..d1cd84c879 --- /dev/null +++ b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md @@ -0,0 +1,658 @@ +# Formal power series on commutative rings + +```agda +module commutative-algebra.formal-power-series-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings +open import commutative-algebra.commutative-semirings +open import commutative-algebra.formal-power-series-commutative-semirings +open import commutative-algebra.sums-commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.dependent-pair-types +open import foundation.function-extensionality +open import foundation.function-types +open import foundation.homotopies +open import foundation.identity-types +open import foundation.sets +open import foundation.unital-binary-operations +open import foundation.universe-levels + +open import group-theory.abelian-groups +open import group-theory.commutative-monoids +open import group-theory.groups +open import group-theory.monoids +open import group-theory.semigroups + +open import ring-theory.rings +open import ring-theory.semirings +``` + +
+ +## Idea + +A +{{#concept "formal power series" Agda=formal-power-series-Commutative-Ring WDID=Q1003025 WD="formal power series"}} +in a [commutative ring](commutative-algebra.commutative-rings.md) `R` is a +symbolic infinite sum over all `n : ℕ` of `cₙ xⁿ`, where `cₙ : R`. Convergence +of this sum is not relevant, but with the standard definitions of addition and +multiplication for power series, this forms a new commutative ring. + +## Definition + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + formal-power-series-Commutative-Ring : UU l + formal-power-series-Commutative-Ring = + formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + formal-power-series-coefficients-Commutative-Ring : + (ℕ → type-Commutative-Ring R) → + formal-power-series-Commutative-Ring + formal-power-series-coefficients-Commutative-Ring = + formal-power-series-coefficients-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + coefficient-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring → ℕ → type-Commutative-Ring R + coefficient-formal-power-series-Commutative-Ring = + coefficient-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + coefficient-formal-power-series-coefficients-Commutative-Ring : + (c : ℕ → type-Commutative-Ring R) → + coefficient-formal-power-series-Commutative-Ring + (formal-power-series-coefficients-Commutative-Ring c) ~ c + coefficient-formal-power-series-coefficients-Commutative-Ring = + coefficient-formal-power-series-coefficients-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + eq-formal-power-series-coefficients-Commutative-Ring : + (p : formal-power-series-Commutative-Ring) → + p = + formal-power-series-coefficients-Commutative-Ring + ( coefficient-formal-power-series-Commutative-Ring p) + eq-formal-power-series-coefficients-Commutative-Ring = + eq-formal-power-series-coefficients-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + eq-htpy-coefficients-formal-power-series-Commutative-Ring : + ( p q : formal-power-series-Commutative-Ring) → + ( coefficient-formal-power-series-Commutative-Ring p ~ + coefficient-formal-power-series-Commutative-Ring q) → + p = q + eq-htpy-coefficients-formal-power-series-Commutative-Ring = + eq-htpy-coefficients-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + is-set-formal-power-series-Commutative-Ring : + is-set formal-power-series-Commutative-Ring + is-set-formal-power-series-Commutative-Ring = + is-set-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + set-formal-power-series-Commutative-Ring : Set l + set-formal-power-series-Commutative-Ring = + set-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +## Operations + +### Zero formal power series + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + zero-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R + zero-formal-power-series-Commutative-Ring = + zero-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + eq-coefficient-zero-formal-power-series-Commutative-Ring : + zero-formal-power-series-Commutative-Ring = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( λ _ → zero-Commutative-Ring R) + eq-coefficient-zero-formal-power-series-Commutative-Ring = + eq-coefficient-zero-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + htpy-coefficient-zero-formal-power-series-Commutative-Ring : + coefficient-formal-power-series-Commutative-Ring + ( R) + ( zero-formal-power-series-Commutative-Ring) ~ + ( λ _ → zero-Commutative-Ring R) + htpy-coefficient-zero-formal-power-series-Commutative-Ring = + htpy-coefficient-zero-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +### Constant formal power series + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + coefficient-constant-formal-power-series-Commutative-Ring : + type-Commutative-Ring R → ℕ → type-Commutative-Ring R + coefficient-constant-formal-power-series-Commutative-Ring = + coefficient-constant-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + coefficient-nonzero-constant-formal-power-series-Commutative-Ring : + (c : type-Commutative-Ring R) → (n : ℕ) → is-nonzero-ℕ n → + is-zero-Commutative-Ring R + ( coefficient-constant-formal-power-series-Commutative-Ring c n) + coefficient-nonzero-constant-formal-power-series-Commutative-Ring = + coefficient-nonzero-constant-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + constant-formal-power-series-Commutative-Ring : + type-Commutative-Ring R → formal-power-series-Commutative-Ring R + constant-formal-power-series-Commutative-Ring = + constant-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + eq-coefficient-constant-formal-power-series-Commutative-Ring : + (c : type-Commutative-Ring R) → + constant-formal-power-series-Commutative-Ring c = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( coefficient-constant-formal-power-series-Commutative-Ring c) + eq-coefficient-constant-formal-power-series-Commutative-Ring = + eq-coefficient-constant-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + one-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R + one-formal-power-series-Commutative-Ring = + one-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +#### The zero formal power series is the constant formal power series for zero + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + eq-zero-constant-formal-power-series-Commutative-Ring : + constant-formal-power-series-Commutative-Ring R (zero-Commutative-Ring R) = + zero-formal-power-series-Commutative-Ring R + eq-zero-constant-formal-power-series-Commutative-Ring = + eq-zero-constant-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +### Addition + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + coefficient-add-formal-power-series-Commutative-Ring : + (p q : formal-power-series-Commutative-Ring R) (n : ℕ) → + type-Commutative-Ring R + coefficient-add-formal-power-series-Commutative-Ring = + coefficient-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + add-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R → + formal-power-series-Commutative-Ring R → + formal-power-series-Commutative-Ring R + add-formal-power-series-Commutative-Ring = + add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + eq-coefficient-add-formal-power-series-Commutative-Ring : + (p q : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring p q = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( coefficient-add-formal-power-series-Commutative-Ring p q) + eq-coefficient-add-formal-power-series-Commutative-Ring = + eq-coefficient-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + htpy-coefficient-add-formal-power-series-Commutative-Ring : + (p q : formal-power-series-Commutative-Ring R) → + coefficient-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring p q) ~ + coefficient-add-formal-power-series-Commutative-Ring p q + htpy-coefficient-add-formal-power-series-Commutative-Ring = + htpy-coefficient-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +#### Commutativity + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + commutative-add-formal-power-series-Commutative-Ring : + (p q : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring R p q = + add-formal-power-series-Commutative-Ring R q p + commutative-add-formal-power-series-Commutative-Ring = + commutative-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +#### Unit laws + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + left-unit-law-add-formal-power-series-Commutative-Ring : + (p : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring + ( R) + ( zero-formal-power-series-Commutative-Ring R) + ( p) = p + left-unit-law-add-formal-power-series-Commutative-Ring = + left-unit-law-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + right-unit-law-add-formal-power-series-Commutative-Ring : + (p : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring + ( R) + ( p) + ( zero-formal-power-series-Commutative-Ring R) = p + right-unit-law-add-formal-power-series-Commutative-Ring = + right-unit-law-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +#### Associativity + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + associative-add-formal-power-series-Commutative-Ring : + (p q r : formal-power-series-Commutative-Ring R) → + add-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring R p q) + ( r) = + add-formal-power-series-Commutative-Ring + ( R) + ( p) + ( add-formal-power-series-Commutative-Ring R q r) + associative-add-formal-power-series-Commutative-Ring = + associative-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +### Negation + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p : formal-power-series-Commutative-Ring R) + where + + opaque + neg-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R + neg-formal-power-series-Commutative-Ring = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( neg-Commutative-Ring R ∘ + coefficient-formal-power-series-Commutative-Ring R p) + + htpy-coefficient-neg-formal-power-series-Commutative-Ring : + coefficient-formal-power-series-Commutative-Ring + ( R) + ( neg-formal-power-series-Commutative-Ring) ~ + neg-Commutative-Ring R ∘ + coefficient-formal-power-series-Commutative-Ring R p + htpy-coefficient-neg-formal-power-series-Commutative-Ring = + coefficient-formal-power-series-coefficients-Commutative-Ring R _ + + eq-coefficient-neg-formal-power-series-Commutative-Ring : + neg-formal-power-series-Commutative-Ring = + formal-power-series-coefficients-Commutative-Ring + ( R) + ( neg-Commutative-Ring R ∘ + coefficient-formal-power-series-Commutative-Ring R p) + eq-coefficient-neg-formal-power-series-Commutative-Ring = refl +``` + +#### Inverse laws for addition + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p : formal-power-series-Commutative-Ring R) + where + + abstract + left-inverse-law-add-formal-power-series-Commutative-Ring : + add-formal-power-series-Commutative-Ring + ( R) + ( neg-formal-power-series-Commutative-Ring R p) + ( p) = + zero-formal-power-series-Commutative-Ring R + left-inverse-law-add-formal-power-series-Commutative-Ring = + eq-htpy-coefficients-formal-power-series-Commutative-Ring + ( R) + ( _) + ( _) + ( λ n → + htpy-coefficient-add-formal-power-series-Commutative-Ring R _ _ n ∙ + ap-add-Commutative-Ring + ( R) + ( htpy-coefficient-neg-formal-power-series-Commutative-Ring R p n) + ( refl) ∙ + left-inverse-law-add-Commutative-Ring R _ ∙ + inv (htpy-coefficient-zero-formal-power-series-Commutative-Ring R n)) + + right-inverse-law-add-formal-power-series-Commutative-Ring : + add-formal-power-series-Commutative-Ring + ( R) + ( p) + ( neg-formal-power-series-Commutative-Ring R p) = + zero-formal-power-series-Commutative-Ring R + right-inverse-law-add-formal-power-series-Commutative-Ring = + commutative-add-formal-power-series-Commutative-Ring R _ _ ∙ + left-inverse-law-add-formal-power-series-Commutative-Ring +``` + +#### The additive Abelian group of formal power series + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + semigroup-add-formal-power-series-Commutative-Ring : Semigroup l + semigroup-add-formal-power-series-Commutative-Ring = + semigroup-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + is-unital-add-formal-power-series-Commutative-Ring : + is-unital (add-formal-power-series-Commutative-Ring R) + is-unital-add-formal-power-series-Commutative-Ring = + is-unital-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + monoid-add-formal-power-series-Commutative-Ring : Monoid l + monoid-add-formal-power-series-Commutative-Ring = + monoid-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + commutative-monoid-add-formal-power-series-Commutative-Ring : + Commutative-Monoid l + commutative-monoid-add-formal-power-series-Commutative-Ring = + commutative-monoid-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + + group-add-formal-power-series-Commutative-Ring : Group l + group-add-formal-power-series-Commutative-Ring = + semigroup-add-formal-power-series-Commutative-Ring , + is-unital-add-formal-power-series-Commutative-Ring , + neg-formal-power-series-Commutative-Ring R , + left-inverse-law-add-formal-power-series-Commutative-Ring R , + right-inverse-law-add-formal-power-series-Commutative-Ring R + + abelian-group-add-formal-power-series-Commutative-Ring : Ab l + abelian-group-add-formal-power-series-Commutative-Ring = + group-add-formal-power-series-Commutative-Ring , + commutative-add-formal-power-series-Commutative-Ring R +``` + +### Multiplication + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p q : formal-power-series-Commutative-Ring R) + where + + coefficient-mul-formal-power-series-Commutative-Ring : + ℕ → type-Commutative-Ring R + coefficient-mul-formal-power-series-Commutative-Ring = + coefficient-mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) + ( q) + + mul-formal-power-series-Commutative-Ring : + formal-power-series-Commutative-Ring R + mul-formal-power-series-Commutative-Ring = + mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) + ( q) + + eq-coefficient-mul-formal-power-series-Commutative-Ring : + coefficient-formal-power-series-Commutative-Ring + ( R) + ( mul-formal-power-series-Commutative-Ring) ~ + coefficient-mul-formal-power-series-Commutative-Ring + eq-coefficient-mul-formal-power-series-Commutative-Ring = + eq-coefficient-mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) + ( q) +``` + +#### Commutativity + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p q : formal-power-series-Commutative-Ring R) + where + + commutative-mul-formal-power-series-Commutative-Ring : + mul-formal-power-series-Commutative-Ring R p q = + mul-formal-power-series-Commutative-Ring R q p + commutative-mul-formal-power-series-Commutative-Ring = + commutative-mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) + ( q) +``` + +#### Associativity + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p q r : formal-power-series-Commutative-Ring R) + where + + associative-mul-formal-power-series-Commutative-Ring : + mul-formal-power-series-Commutative-Ring + ( R) + ( mul-formal-power-series-Commutative-Ring R p q) + ( r) = + mul-formal-power-series-Commutative-Ring + ( R) + ( p) + ( mul-formal-power-series-Commutative-Ring R q r) + associative-mul-formal-power-series-Commutative-Ring = + associative-mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) + ( q) + ( r) +``` + +#### Unit laws + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p : formal-power-series-Commutative-Ring R) + where + + left-unit-law-mul-formal-power-series-Commutative-Ring : + mul-formal-power-series-Commutative-Ring + ( R) + ( one-formal-power-series-Commutative-Ring R) + ( p) = p + left-unit-law-mul-formal-power-series-Commutative-Ring = + left-unit-law-mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) + + right-unit-law-mul-formal-power-series-Commutative-Ring : + mul-formal-power-series-Commutative-Ring + ( R) + ( p) + ( one-formal-power-series-Commutative-Ring R) = p + right-unit-law-mul-formal-power-series-Commutative-Ring = + right-unit-law-mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) +``` + +#### Zero laws of multiplication + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + (p : formal-power-series-Commutative-Ring R) + where + + left-zero-law-mul-formal-power-series-Commutative-Ring : + mul-formal-power-series-Commutative-Ring + ( R) + ( zero-formal-power-series-Commutative-Ring R) + ( p) = + zero-formal-power-series-Commutative-Ring R + left-zero-law-mul-formal-power-series-Commutative-Ring = + left-zero-law-mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) + + right-zero-law-mul-formal-power-series-Commutative-Ring : + mul-formal-power-series-Commutative-Ring + ( R) + ( p) + ( zero-formal-power-series-Commutative-Ring R) = + zero-formal-power-series-Commutative-Ring R + right-zero-law-mul-formal-power-series-Commutative-Ring = + right-zero-law-mul-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + ( p) +``` + +#### Distributivity of multiplication over addition + +```agda +left-distributive-mul-add-formal-power-series-Commutative-Ring : + {l : Level} (R : Commutative-Ring l) → + (p q r : formal-power-series-Commutative-Ring R) → + mul-formal-power-series-Commutative-Ring + ( R) + ( p) + ( add-formal-power-series-Commutative-Ring R q r) = + add-formal-power-series-Commutative-Ring + ( R) + ( mul-formal-power-series-Commutative-Ring R p q) + ( mul-formal-power-series-Commutative-Ring R p r) +left-distributive-mul-add-formal-power-series-Commutative-Ring R = + left-distributive-mul-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) + +right-distributive-mul-add-formal-power-series-Commutative-Ring : + {l : Level} (R : Commutative-Ring l) → + (p q r : formal-power-series-Commutative-Ring R) → + mul-formal-power-series-Commutative-Ring + ( R) + ( add-formal-power-series-Commutative-Ring R p q) + ( r) = + add-formal-power-series-Commutative-Ring + ( R) + ( mul-formal-power-series-Commutative-Ring R p r) + ( mul-formal-power-series-Commutative-Ring R q r) +right-distributive-mul-add-formal-power-series-Commutative-Ring R = + right-distributive-mul-add-formal-power-series-Commutative-Semiring + ( commutative-semiring-Commutative-Ring R) +``` + +### The commutative ring of formal power series + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + has-associative-mul-formal-power-series-Commutative-Ring : + has-associative-mul (formal-power-series-Commutative-Ring R) + has-associative-mul-formal-power-series-Commutative-Ring = + mul-formal-power-series-Commutative-Ring R , + associative-mul-formal-power-series-Commutative-Ring R + + unit-laws-mul-formal-power-series-Commutative-Ring : + unit-laws + ( mul-formal-power-series-Commutative-Ring R) + ( one-formal-power-series-Commutative-Ring R) + unit-laws-mul-formal-power-series-Commutative-Ring = + left-unit-law-mul-formal-power-series-Commutative-Ring R , + right-unit-law-mul-formal-power-series-Commutative-Ring R + + is-unital-mul-formal-power-series-Commutative-Ring : + is-unital (mul-formal-power-series-Commutative-Ring R) + is-unital-mul-formal-power-series-Commutative-Ring = + one-formal-power-series-Commutative-Ring R , + unit-laws-mul-formal-power-series-Commutative-Ring + + semiring-formal-power-series-Commutative-Ring : Semiring l + semiring-formal-power-series-Commutative-Ring = + commutative-monoid-add-formal-power-series-Commutative-Ring R , + ( has-associative-mul-formal-power-series-Commutative-Ring , + is-unital-mul-formal-power-series-Commutative-Ring , + left-distributive-mul-add-formal-power-series-Commutative-Ring R , + right-distributive-mul-add-formal-power-series-Commutative-Ring R) , + left-zero-law-mul-formal-power-series-Commutative-Ring R , + right-zero-law-mul-formal-power-series-Commutative-Ring R + + commutative-semiring-formal-power-series-Commutative-Ring : + Commutative-Semiring l + commutative-semiring-formal-power-series-Commutative-Ring = + semiring-formal-power-series-Commutative-Ring , + commutative-mul-formal-power-series-Commutative-Ring R + + ring-formal-power-series-Commutative-Ring : Ring l + ring-formal-power-series-Commutative-Ring = + abelian-group-add-formal-power-series-Commutative-Ring R , + has-associative-mul-formal-power-series-Commutative-Ring , + is-unital-mul-formal-power-series-Commutative-Ring , + left-distributive-mul-add-formal-power-series-Commutative-Ring R , + right-distributive-mul-add-formal-power-series-Commutative-Ring R + + commutative-ring-formal-power-series-Commutative-Ring : Commutative-Ring l + commutative-ring-formal-power-series-Commutative-Ring = + ring-formal-power-series-Commutative-Ring , + commutative-mul-formal-power-series-Commutative-Ring R +``` diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 0bd653cb1b..a917a59e50 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -148,7 +148,7 @@ module _ coefficient-formal-power-series-Commutative-Semiring ( R) ( zero-formal-power-series-Commutative-Semiring) ~ - (λ _ → zero-Commutative-Semiring R) + ( λ _ → zero-Commutative-Semiring R) htpy-coefficient-zero-formal-power-series-Commutative-Semiring _ = refl ``` From ce1e3b94aceb7d264dc429bfdab2916fa690986a Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 11:06:56 -0700 Subject: [PATCH 49/66] Apply suggestions from code review Co-authored-by: Fredrik Bakke --- .../sums-commutative-rings.lagda.md | 2 +- .../sums-commutative-semirings.lagda.md | 2 +- .../vectors-on-commutative-monoids.lagda.md | 6 +++--- src/linear-algebra/vectors-on-monoids.lagda.md | 10 +++++----- src/ring-theory/sums-rings.lagda.md | 2 +- src/ring-theory/sums-semirings.lagda.md | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index a7f299b690..dde5a4c977 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -42,7 +42,7 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The **sum operation** extends the binary addition operation on a +The {{#concept "sum operation" Disambiguation="in a commutative ring" WD="sum" WDID=Q218005 Agda=sum-Commutative-Ring}} extends the binary addition operation on a [commutative ring](commutative-algebra.commutative-rings.md) `A` to any family of elements of `A` indexed by a [standard finite type](univalent-combinatorics.standard-finite-types.md), or by diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 81bae85ee4..7251a689f8 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -45,7 +45,7 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The **sum operation** extends the binary addition operation on a +The {{#concept "sum operation" Disambiguation="in a commutative semiring" WD="sum" WDID=Q218005 Agda=sum-Commutative-Semiring}} extends the binary addition operation on a [commutative semiring](commutative-algebra.commutative-semirings.md) `R` to any family of elements of `R` indexed by a [standard finite type](univalent-combinatorics.standard-finite-types.md), or by diff --git a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md index 764ac6a7e8..8b6c06f129 100644 --- a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md @@ -30,11 +30,11 @@ open import linear-algebra.vectors-on-monoids ## Idea Given a [commutative monoid](group-theory.commutative-monoids.md) `M`, the type -`vec n M` of `M`-[vectors](linear-algebra.vectors.md) is a commutative monoid. +`vec n M` of `n`-dimensional `M`-[vectors](linear-algebra.vectors.md) is a commutative monoid given by componentwise addition. ## Definitions -### Listed vectors on commutative rings +### Listed vectors on commutative monoids ```agda module _ @@ -58,7 +58,7 @@ module _ snoc-vec-Commutative-Monoid = snoc-vec-Monoid (monoid-Commutative-Monoid M) ``` -### Functional vectors on commutative rings +### Functional vectors on commutative monoids ```agda module _ diff --git a/src/linear-algebra/vectors-on-monoids.lagda.md b/src/linear-algebra/vectors-on-monoids.lagda.md index 9bd548f8e0..1999e3be91 100644 --- a/src/linear-algebra/vectors-on-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-monoids.lagda.md @@ -27,8 +27,8 @@ open import linear-algebra.vectors ## Idea -Given a [monoid](group-theory.monoids.md) `M`, the type `vec n M` of -`M`-[vectors](linear-algebra.vectors.md) is a monoid. +Given a [monoid](group-theory.monoids.md) `M`, the type `vec n M` of `n`-dimensional +`M`-[vectors](linear-algebra.vectors.md) is a monoid given by componentwise multiplication. ## Definitions @@ -53,7 +53,7 @@ module _ snoc-vec-Monoid v r = snoc-vec v r ``` -### Functional vectors on rings +### Functional vectors on monoids ```agda module _ @@ -82,7 +82,7 @@ module _ snoc-functional-vec-Monoid = snoc-functional-vec ``` -### Zero vector on a ring +### Zero vector on a monoid #### The unit listed vector @@ -159,7 +159,7 @@ module _ pr2 (pr2 (pr2 (vec-Monoid-Monoid n))) = right-unit-law-mul-vec-Monoid ``` -#### Pointwise addition of functional vectors on a ring +#### Pointwise addition of functional vectors on a monoid ```agda module _ diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index 97f8e5fab4..81a6772911 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -38,7 +38,7 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The sum operation extends the binary addition operation on a +The {{#concept "sum operation" Disambiguation="in a ring" WD="sum" WDID=Q218005 Agda=sum-Ring}} extends the binary addition operation on a [ring](ring-theory.rings.md) `R` to any family of elements of `R` indexed by a [standard finite type](univalent-combinatorics.standard-finite-types.md), or by a [finite type](univalent-combinatorics.finite-types.md). diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 7d2efd9c1f..3201d1053a 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -42,7 +42,7 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The sum operation extends the binary addition operation on a +The {{#concept "sum operation" Disambiguation="in a semiring" WD="sum" WDID=Q218005 Agda=sum-Semiring}} extends the binary addition operation on a [semiring](ring-theory.semirings.md) `R` to any family of elements of `R` indexed by a [standard finite type](univalent-combinatorics.standard-finite-types.md), or by From a86c2adba078bbdc537706bb6f72069e38c0e354 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 11:09:47 -0700 Subject: [PATCH 50/66] Use the term 'vector of the multiplicative unit' --- src/linear-algebra/vectors-on-monoids.lagda.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/linear-algebra/vectors-on-monoids.lagda.md b/src/linear-algebra/vectors-on-monoids.lagda.md index 1999e3be91..8a5f840a8f 100644 --- a/src/linear-algebra/vectors-on-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-monoids.lagda.md @@ -82,28 +82,28 @@ module _ snoc-functional-vec-Monoid = snoc-functional-vec ``` -### Zero vector on a monoid +### The vector of the multiplicative unit of a monoid -#### The unit listed vector +#### The listed vector of the multiplicative unit ```agda module _ {l : Level} (M : Monoid l) where - unit-vec-Monoid : {n : ℕ} → vec-Monoid M n - unit-vec-Monoid = constant-vec (unit-Monoid M) + mul-unit-vec-Monoid : {n : ℕ} → vec-Monoid M n + mul-unit-vec-Monoid = constant-vec (unit-Monoid M) ``` -#### The unit functional vector +#### The functional vector of the multiplicative unit ```agda module _ {l : Level} (M : Monoid l) where - unit-functional-vec-Monoid : (n : ℕ) → functional-vec-Monoid M n - unit-functional-vec-Monoid n i = unit-Monoid M + mul-unit-functional-vec-Monoid : (n : ℕ) → functional-vec-Monoid M n + mul-unit-functional-vec-Monoid n i = unit-Monoid M ``` ### Pointwise multiplication of vectors on a monoid From 675830533620b221a54ddcbdf7a1304615ffd579 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 13:51:23 -0700 Subject: [PATCH 51/66] Progress --- src/foundation/complements-subtypes.lagda.md | 11 ++++ src/foundation/disjoint-subtypes.lagda.md | 26 ++++++++ src/foundation/unions-subtypes.lagda.md | 61 +++++++++++++++++++ .../complements-decidable-subtypes.lagda.md | 35 +++++++++++ 4 files changed, 133 insertions(+) diff --git a/src/foundation/complements-subtypes.lagda.md b/src/foundation/complements-subtypes.lagda.md index 3331a3455c..dfcbe670c3 100644 --- a/src/foundation/complements-subtypes.lagda.md +++ b/src/foundation/complements-subtypes.lagda.md @@ -10,11 +10,13 @@ module foundation.complements-subtypes where open import foundation.decidable-propositions open import foundation.decidable-subtypes open import foundation.double-negation-stable-propositions +open import foundation.dependent-pair-types open import foundation.full-subtypes open import foundation.negation open import foundation.postcomposition-functions open import foundation.powersets open import foundation.propositional-truncations +open import foundation.disjoint-subtypes open import foundation.unions-subtypes open import foundation.universe-levels @@ -93,3 +95,12 @@ module _ complement-subtype C ⊆ complement-subtype B reverses-order-complement-subtype B⊆C x x∉C x∈B = x∉C (B⊆C x x∈B) ``` + +### A subtype and its complement are disjoint + +```agda +disjoint-complement-subtype : + {l1 l2 : Level} {A : UU l1} → + (B : subtype l2 A) → disjoint-subtype B (complement-subtype B) +disjoint-complement-subtype _ _ (bx , ¬bx) = ¬bx bx +``` diff --git a/src/foundation/disjoint-subtypes.lagda.md b/src/foundation/disjoint-subtypes.lagda.md index e21739bbd5..9364b88519 100644 --- a/src/foundation/disjoint-subtypes.lagda.md +++ b/src/foundation/disjoint-subtypes.lagda.md @@ -14,6 +14,7 @@ open import foundation.intersections-subtypes open import foundation.propositions open import foundation.subtypes open import foundation.universe-levels +open import foundation.decidable-subtypes ``` @@ -38,6 +39,20 @@ module _ disjoint-subtype : UU (l1 ⊔ l2 ⊔ l3) disjoint-subtype = type-Prop disjoint-subtype-Prop + +module _ + {l1 l2 l3 : Level} {A : UU l1} + (B : decidable-subtype l2 A) (C : decidable-subtype l3 A) + where + + disjoint-decidable-subtype-Prop : Prop (l1 ⊔ l2 ⊔ l3) + disjoint-decidable-subtype-Prop = + disjoint-subtype-Prop + ( subtype-decidable-subtype B) + ( subtype-decidable-subtype C) + + disjoint-decidable-subtype : UU (l1 ⊔ l2 ⊔ l3) + disjoint-decidable-subtype = type-Prop disjoint-decidable-subtype-Prop ``` ## Properties @@ -53,3 +68,14 @@ module _ disjoint-subtype B B → is-empty (type-subtype B) is-empty-disjoint-subtype-self H (b , b∈B) = H b (b∈B , b∈B) ``` + +### Disjointness is symmetric + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} (B : subtype l2 A) (C : subtype l3 A) + where + + symmetric-disjoint-subtype : disjoint-subtype B C → disjoint-subtype C B + symmetric-disjoint-subtype H x (cx , bx) = H x (bx , cx) +``` diff --git a/src/foundation/unions-subtypes.lagda.md b/src/foundation/unions-subtypes.lagda.md index a3ae84790a..12d65d7b7c 100644 --- a/src/foundation/unions-subtypes.lagda.md +++ b/src/foundation/unions-subtypes.lagda.md @@ -7,11 +7,20 @@ module foundation.unions-subtypes where
Imports ```agda +open import foundation.action-on-identifications-functions +open import foundation.equivalences +open import foundation.empty-types +open import foundation.coproduct-types open import foundation.decidable-subtypes +open import foundation.type-arithmetic-coproduct-types open import foundation.dependent-pair-types open import foundation.disjunction +open import foundation.disjoint-subtypes +open import foundation.logical-equivalences open import foundation.large-locale-of-subtypes +open import foundation.propositions open import foundation.powersets +open import foundation.functoriality-dependent-pair-types open import foundation.propositional-truncations open import foundation.universe-levels @@ -101,3 +110,55 @@ module _ ( union-family-of-subtypes B x) ( λ (i , q) → unit-trunc-Prop (i , H i x q)) ``` + +### The union of disjoint subtypes is equivalent to their coproduct + +```agda +module _ + {l1 l2 l3 : Level} {X : UU l1} (A : subtype l2 X) (B : subtype l3 X) + (H : disjoint-subtype A B) + where + + all-elements-equal-coproduct-disjoint-prop : + (x : X) → all-elements-equal (type-Prop (A x) + type-Prop (B x)) + all-elements-equal-coproduct-disjoint-prop x (inl _) (inl _) = + ap inl (eq-type-Prop (A x)) + all-elements-equal-coproduct-disjoint-prop x (inr _) (inr _) = + ap inr (eq-type-Prop (B x)) + all-elements-equal-coproduct-disjoint-prop x (inl ax) (inr bx) = + ex-falso (H x (ax , bx)) + all-elements-equal-coproduct-disjoint-prop x (inr bx) (inl ax) = + ex-falso (H x (ax , bx)) + + is-prop-coproduct-disjoint-prop : + (x : X) → is-prop (type-Prop (A x) + type-Prop (B x)) + is-prop-coproduct-disjoint-prop x = + is-prop-all-elements-equal (all-elements-equal-coproduct-disjoint-prop x) + + coproduct-disjoint-subtype : subtype (l2 ⊔ l3) X + coproduct-disjoint-subtype x = + type-Prop (A x) + type-Prop (B x) , is-prop-coproduct-disjoint-prop x + + iff-disjunction-coproduct-disjoint-subtype : + (x : X) → type-iff-Prop (A x ∨ B x) (coproduct-disjoint-subtype x) + pr1 (iff-disjunction-coproduct-disjoint-subtype x) = + elim-disjunction (coproduct-disjoint-subtype x) inl inr + pr2 (iff-disjunction-coproduct-disjoint-subtype x) = + rec-coproduct inl-disjunction inr-disjunction + + equiv-union-subtype-coproduct-disjoint-subtype : + type-subtype (union-subtype A B) ≃ type-subtype coproduct-disjoint-subtype + equiv-union-subtype-coproduct-disjoint-subtype = + equiv-tot + ( λ x → + equiv-iff' + ( A x ∨ B x) + ( coproduct-disjoint-subtype x) + ( iff-disjunction-coproduct-disjoint-subtype x)) + + equiv-union-coproduct-disjoint-subtype : + type-subtype (union-subtype A B) ≃ type-subtype A + type-subtype B + equiv-union-coproduct-disjoint-subtype = + left-distributive-Σ-coproduct X (is-in-subtype A) (is-in-subtype B) ∘e + equiv-union-subtype-coproduct-disjoint-subtype +``` diff --git a/src/logic/complements-decidable-subtypes.lagda.md b/src/logic/complements-decidable-subtypes.lagda.md index ae2a775f33..29b4a182c2 100644 --- a/src/logic/complements-decidable-subtypes.lagda.md +++ b/src/logic/complements-decidable-subtypes.lagda.md @@ -11,12 +11,14 @@ open import foundation.complements-subtypes open import foundation.coproduct-types open import foundation.decidable-propositions open import foundation.decidable-subtypes +open import foundation.equivalences open import foundation.decidable-types open import foundation.dependent-pair-types open import foundation.double-negation-stable-propositions open import foundation.evaluation-functions open import foundation.full-subtypes open import foundation.involutions +open import foundation.disjoint-subtypes open import foundation.negation open import foundation.postcomposition-functions open import foundation.powersets @@ -51,6 +53,16 @@ complement-decidable-subtype P x = neg-Decidable-Prop (P x) ## Properties +### The complement of a decidable subtype is disjoint from the subtype + +```agda +disjoint-complement-decidable-subtype : + {l1 l2 : Level} {A : UU l1} (P : decidable-subtype l2 A) → + disjoint-decidable-subtype P (complement-decidable-subtype P) +disjoint-complement-decidable-subtype P = + disjoint-complement-subtype (subtype-decidable-subtype P) +``` + ### Taking complements is an involution on decidable subtypes ```agda @@ -98,3 +110,26 @@ module _ ( subtype-decidable-subtype P) ( is-decidable-decidable-subtype P) ``` + +### `A` is equivalent to the coproduct of a decidable subtype and its complement + +```agda +module _ + {l1 l2 : Level} {A : UU l1} (P : decidable-subtype l2 A) + where + + equiv-coproduct-subtype-complement-decidable-subtype : + A ≃ + type-decidable-subtype P + + type-decidable-subtype (complement-decidable-subtype P) + equiv-coproduct-subtype-complement-decidable-subtype = + equiv-union-coproduct-disjoint-subtype + ( subtype-decidable-subtype P) + ( subtype-decidable-subtype (complement-decidable-subtype P)) + ( disjoint-complement-decidable-subtype P) ∘e + inv-equiv + ( equiv-inclusion-is-full-subtype + ( subtype-decidable-subtype + ( union-decidable-subtype P (complement-decidable-subtype P))) + ( is-full-union-subtype-complement-decidable-subtype P)) +``` From bd9a1b9622727601cad501283f6405244c20e370 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 13:55:53 -0700 Subject: [PATCH 52/66] make pre-commit --- src/foundation/complements-subtypes.lagda.md | 4 +-- src/foundation/disjoint-subtypes.lagda.md | 2 +- src/foundation/unions-subtypes.lagda.md | 27 ++++++++++--------- .../complements-decidable-subtypes.lagda.md | 4 +-- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/foundation/complements-subtypes.lagda.md b/src/foundation/complements-subtypes.lagda.md index dfcbe670c3..11e12fc9a9 100644 --- a/src/foundation/complements-subtypes.lagda.md +++ b/src/foundation/complements-subtypes.lagda.md @@ -9,14 +9,14 @@ module foundation.complements-subtypes where ```agda open import foundation.decidable-propositions open import foundation.decidable-subtypes -open import foundation.double-negation-stable-propositions open import foundation.dependent-pair-types +open import foundation.disjoint-subtypes +open import foundation.double-negation-stable-propositions open import foundation.full-subtypes open import foundation.negation open import foundation.postcomposition-functions open import foundation.powersets open import foundation.propositional-truncations -open import foundation.disjoint-subtypes open import foundation.unions-subtypes open import foundation.universe-levels diff --git a/src/foundation/disjoint-subtypes.lagda.md b/src/foundation/disjoint-subtypes.lagda.md index 9364b88519..5b5df704da 100644 --- a/src/foundation/disjoint-subtypes.lagda.md +++ b/src/foundation/disjoint-subtypes.lagda.md @@ -8,13 +8,13 @@ module foundation.disjoint-subtypes where ```agda open import foundation.cartesian-product-types +open import foundation.decidable-subtypes open import foundation.dependent-pair-types open import foundation.empty-types open import foundation.intersections-subtypes open import foundation.propositions open import foundation.subtypes open import foundation.universe-levels -open import foundation.decidable-subtypes ```
diff --git a/src/foundation/unions-subtypes.lagda.md b/src/foundation/unions-subtypes.lagda.md index 12d65d7b7c..dcce5de9a4 100644 --- a/src/foundation/unions-subtypes.lagda.md +++ b/src/foundation/unions-subtypes.lagda.md @@ -8,20 +8,20 @@ module foundation.unions-subtypes where ```agda open import foundation.action-on-identifications-functions -open import foundation.equivalences -open import foundation.empty-types open import foundation.coproduct-types open import foundation.decidable-subtypes -open import foundation.type-arithmetic-coproduct-types open import foundation.dependent-pair-types -open import foundation.disjunction open import foundation.disjoint-subtypes -open import foundation.logical-equivalences +open import foundation.disjunction +open import foundation.empty-types +open import foundation.equivalences +open import foundation.functoriality-dependent-pair-types open import foundation.large-locale-of-subtypes -open import foundation.propositions +open import foundation.logical-equivalences open import foundation.powersets -open import foundation.functoriality-dependent-pair-types open import foundation.propositional-truncations +open import foundation.propositions +open import foundation.type-arithmetic-coproduct-types open import foundation.universe-levels open import foundation-core.subtypes @@ -135,25 +135,26 @@ module _ is-prop-coproduct-disjoint-prop x = is-prop-all-elements-equal (all-elements-equal-coproduct-disjoint-prop x) - coproduct-disjoint-subtype : subtype (l2 ⊔ l3) X - coproduct-disjoint-subtype x = + subtype-coproduct-disjoint-subtype : subtype (l2 ⊔ l3) X + subtype-coproduct-disjoint-subtype x = type-Prop (A x) + type-Prop (B x) , is-prop-coproduct-disjoint-prop x iff-disjunction-coproduct-disjoint-subtype : - (x : X) → type-iff-Prop (A x ∨ B x) (coproduct-disjoint-subtype x) + (x : X) → type-iff-Prop (A x ∨ B x) (subtype-coproduct-disjoint-subtype x) pr1 (iff-disjunction-coproduct-disjoint-subtype x) = - elim-disjunction (coproduct-disjoint-subtype x) inl inr + elim-disjunction (subtype-coproduct-disjoint-subtype x) inl inr pr2 (iff-disjunction-coproduct-disjoint-subtype x) = rec-coproduct inl-disjunction inr-disjunction equiv-union-subtype-coproduct-disjoint-subtype : - type-subtype (union-subtype A B) ≃ type-subtype coproduct-disjoint-subtype + type-subtype (union-subtype A B) ≃ + type-subtype subtype-coproduct-disjoint-subtype equiv-union-subtype-coproduct-disjoint-subtype = equiv-tot ( λ x → equiv-iff' ( A x ∨ B x) - ( coproduct-disjoint-subtype x) + ( subtype-coproduct-disjoint-subtype x) ( iff-disjunction-coproduct-disjoint-subtype x)) equiv-union-coproduct-disjoint-subtype : diff --git a/src/logic/complements-decidable-subtypes.lagda.md b/src/logic/complements-decidable-subtypes.lagda.md index 29b4a182c2..ee474aa92e 100644 --- a/src/logic/complements-decidable-subtypes.lagda.md +++ b/src/logic/complements-decidable-subtypes.lagda.md @@ -11,14 +11,14 @@ open import foundation.complements-subtypes open import foundation.coproduct-types open import foundation.decidable-propositions open import foundation.decidable-subtypes -open import foundation.equivalences open import foundation.decidable-types open import foundation.dependent-pair-types +open import foundation.disjoint-subtypes open import foundation.double-negation-stable-propositions +open import foundation.equivalences open import foundation.evaluation-functions open import foundation.full-subtypes open import foundation.involutions -open import foundation.disjoint-subtypes open import foundation.negation open import foundation.postcomposition-functions open import foundation.powersets From 6c774ad9d66f07e320a4015587337157cec8a0bd Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 14:01:53 -0700 Subject: [PATCH 53/66] Remove unnecessary coproduct disassembly --- .../pairs-with-natural-sums.lagda.md | 34 ------------------- 1 file changed, 34 deletions(-) diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md index 48b94e2368..5c89cd822e 100644 --- a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -287,37 +287,3 @@ module _ ( map-inv-equiv-permute-components-triple-with-sum-pr2 , is-retraction-map-inv-equiv-permute-components-triple-with-sum-pr2)) ``` - -### Breaking out the zero case - -```agda -module _ - (n : ℕ) - where - - decidable-subtype-zero-pair-with-sum-ℕ : - decidable-subtype lzero (pair-with-sum-ℕ n) - decidable-subtype-zero-pair-with-sum-ℕ (a , _ , _) = - is-zero-ℕ a , is-prop-is-zero-ℕ a , is-decidable-is-zero-ℕ a - - is-contr-decidable-subtype-zero-pair-with-sum-ℕ : - is-contr (type-decidable-subtype decidable-subtype-zero-pair-with-sum-ℕ) - is-contr-decidable-subtype-zero-pair-with-sum-ℕ = - ((zero-ℕ , n , right-unit-law-add-ℕ n) , refl) , - λ ((x , y , y+x=n) , x=0) → - eq-type-subtype - ( subtype-decidable-subtype decidable-subtype-zero-pair-with-sum-ℕ) - ( eq-Eq-pair-with-sum-ℕ n _ _ (inv x=0)) - - equiv-pair-with-sum-coproduct-zero-nonzero : - pair-with-sum-ℕ n ≃ - unit + - type-decidable-subtype - ( complement-decidable-subtype (decidable-subtype-zero-pair-with-sum-ℕ)) - equiv-pair-with-sum-coproduct-zero-nonzero = - equiv-coproduct - ( equiv-unit-is-contr is-contr-decidable-subtype-zero-pair-with-sum-ℕ) - ( id-equiv) ∘e - equiv-coproduct-decidable-subtype-complement - ( decidable-subtype-zero-pair-with-sum-ℕ) -``` From 420a02e092d78754ef3f274f2e1b6728c7ea45c0 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 14:07:01 -0700 Subject: [PATCH 54/66] Fixes and make pre-commit --- .../sums-commutative-rings.lagda.md | 4 +++- .../sums-commutative-semirings.lagda.md | 4 +++- .../vectors-on-commutative-monoids.lagda.md | 3 ++- src/linear-algebra/vectors-on-monoids.lagda.md | 17 +++++++++-------- src/ring-theory/sums-rings.lagda.md | 6 ++++-- src/ring-theory/sums-semirings.lagda.md | 7 ++++--- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index dde5a4c977..d2bf4fc59e 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -42,7 +42,9 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The {{#concept "sum operation" Disambiguation="in a commutative ring" WD="sum" WDID=Q218005 Agda=sum-Commutative-Ring}} extends the binary addition operation on a +The +{{#concept "sum operation" Disambiguation="in a commutative ring" WD="sum" WDID=Q218005 Agda=sum-Commutative-Ring}} +extends the binary addition operation on a [commutative ring](commutative-algebra.commutative-rings.md) `A` to any family of elements of `A` indexed by a [standard finite type](univalent-combinatorics.standard-finite-types.md), or by diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 7251a689f8..f93bf9cad0 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -45,7 +45,9 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The {{#concept "sum operation" Disambiguation="in a commutative semiring" WD="sum" WDID=Q218005 Agda=sum-Commutative-Semiring}} extends the binary addition operation on a +The +{{#concept "sum operation" Disambiguation="in a commutative semiring" WD="sum" WDID=Q218005 Agda=sum-Commutative-Semiring}} +extends the binary addition operation on a [commutative semiring](commutative-algebra.commutative-semirings.md) `R` to any family of elements of `R` indexed by a [standard finite type](univalent-combinatorics.standard-finite-types.md), or by diff --git a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md index 8b6c06f129..38e66d432e 100644 --- a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md @@ -30,7 +30,8 @@ open import linear-algebra.vectors-on-monoids ## Idea Given a [commutative monoid](group-theory.commutative-monoids.md) `M`, the type -`vec n M` of `n`-dimensional `M`-[vectors](linear-algebra.vectors.md) is a commutative monoid given by componentwise addition. +`vec n M` of `n`-dimensional `M`-[vectors](linear-algebra.vectors.md) is a +commutative monoid given by componentwise addition. ## Definitions diff --git a/src/linear-algebra/vectors-on-monoids.lagda.md b/src/linear-algebra/vectors-on-monoids.lagda.md index 8a5f840a8f..cbbc6cac15 100644 --- a/src/linear-algebra/vectors-on-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-monoids.lagda.md @@ -27,8 +27,9 @@ open import linear-algebra.vectors ## Idea -Given a [monoid](group-theory.monoids.md) `M`, the type `vec n M` of `n`-dimensional -`M`-[vectors](linear-algebra.vectors.md) is a monoid given by componentwise multiplication. +Given a [monoid](group-theory.monoids.md) `M`, the type `vec n M` of +`n`-dimensional `M`-[vectors](linear-algebra.vectors.md) is a monoid given by +componentwise multiplication. ## Definitions @@ -136,7 +137,7 @@ module _ left-unit-law-mul-vec-Monoid : {n : ℕ} (v : vec-Monoid M n) → - mul-vec-Monoid (unit-vec-Monoid M) v = v + mul-vec-Monoid (mul-unit-vec-Monoid M) v = v left-unit-law-mul-vec-Monoid empty-vec = refl left-unit-law-mul-vec-Monoid (x ∷ v) = ap-binary _∷_ @@ -145,7 +146,7 @@ module _ right-unit-law-mul-vec-Monoid : {n : ℕ} (v : vec-Monoid M n) → - mul-vec-Monoid v (unit-vec-Monoid M) = v + mul-vec-Monoid v (mul-unit-vec-Monoid M) = v right-unit-law-mul-vec-Monoid empty-vec = refl right-unit-law-mul-vec-Monoid (x ∷ v) = ap-binary _∷_ @@ -154,7 +155,7 @@ module _ vec-Monoid-Monoid : ℕ → Monoid l pr1 (vec-Monoid-Monoid n) = vec-Monoid-Semigroup n - pr1 (pr2 (vec-Monoid-Monoid n)) = unit-vec-Monoid M + pr1 (pr2 (vec-Monoid-Monoid n)) = mul-unit-vec-Monoid M pr1 (pr2 (pr2 (vec-Monoid-Monoid n))) = left-unit-law-mul-vec-Monoid pr2 (pr2 (pr2 (vec-Monoid-Monoid n))) = right-unit-law-mul-vec-Monoid ``` @@ -187,13 +188,13 @@ module _ left-unit-law-mul-functional-vec-Monoid : (n : ℕ) (v : functional-vec-Monoid M n) → - mul-functional-vec-Monoid n (unit-functional-vec-Monoid M n) v = v + mul-functional-vec-Monoid n (mul-unit-functional-vec-Monoid M n) v = v left-unit-law-mul-functional-vec-Monoid n v = eq-htpy (λ i → left-unit-law-mul-Monoid M (v i)) right-unit-law-mul-functional-vec-Monoid : (n : ℕ) (v : functional-vec-Monoid M n) → - mul-functional-vec-Monoid n v (unit-functional-vec-Monoid M n) = v + mul-functional-vec-Monoid n v (mul-unit-functional-vec-Monoid M n) = v right-unit-law-mul-functional-vec-Monoid n v = eq-htpy (λ i → right-unit-law-mul-Monoid M (v i)) @@ -201,7 +202,7 @@ module _ pr1 (functional-vec-Monoid-Monoid n) = functional-vec-Monoid-Semigroup n pr1 (pr2 (functional-vec-Monoid-Monoid n)) = - unit-functional-vec-Monoid M n + mul-unit-functional-vec-Monoid M n pr1 (pr2 (pr2 (functional-vec-Monoid-Monoid n))) = left-unit-law-mul-functional-vec-Monoid n pr2 (pr2 (pr2 (functional-vec-Monoid-Monoid n))) = diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index 81a6772911..6f26302501 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -38,8 +38,10 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The {{#concept "sum operation" Disambiguation="in a ring" WD="sum" WDID=Q218005 Agda=sum-Ring}} extends the binary addition operation on a -[ring](ring-theory.rings.md) `R` to any family of elements of `R` indexed by a +The +{{#concept "sum operation" Disambiguation="in a ring" WD="sum" WDID=Q218005 Agda=sum-Ring}} +extends the binary addition operation on a [ring](ring-theory.rings.md) `R` to +any family of elements of `R` indexed by a [standard finite type](univalent-combinatorics.standard-finite-types.md), or by a [finite type](univalent-combinatorics.finite-types.md). diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 3201d1053a..88899a28b3 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -42,9 +42,10 @@ open import univalent-combinatorics.standard-finite-types ## Idea -The {{#concept "sum operation" Disambiguation="in a semiring" WD="sum" WDID=Q218005 Agda=sum-Semiring}} extends the binary addition operation on a -[semiring](ring-theory.semirings.md) `R` to any family of elements of `R` -indexed by a +The +{{#concept "sum operation" Disambiguation="in a semiring" WD="sum" WDID=Q218005 Agda=sum-Semiring}} +extends the binary addition operation on a [semiring](ring-theory.semirings.md) +`R` to any family of elements of `R` indexed by a [standard finite type](univalent-combinatorics.standard-finite-types.md), or by a [finite type](univalent-combinatorics.finite-types.md). From dd9c8b97523acf2e32cd84cdaac7cf728f054989 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 14:10:02 -0700 Subject: [PATCH 55/66] Minor fix: --- .../products-of-tuples-of-elements-monoids.lagda.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md index d37b7e31d4..b00045fa60 100644 --- a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md @@ -174,7 +174,7 @@ module _ mul-unit-Monoid : (n : ℕ) → - mul-fin-Monoid M n (unit-functional-vec-Monoid M n) = unit-Monoid M + mul-fin-Monoid M n (mul-unit-functional-vec-Monoid M n) = unit-Monoid M mul-unit-Monoid zero-ℕ = refl mul-unit-Monoid (succ-ℕ n) = right-unit-law-mul-Monoid M _ ∙ mul-unit-Monoid n From be6c9a7c0f7797eaf096bbb7899acb882701e05b Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 14:39:06 -0700 Subject: [PATCH 56/66] Delete duplicate --- .../complements-decidable-subtypes.lagda.md | 108 ------------------ 1 file changed, 108 deletions(-) delete mode 100644 src/foundation/complements-decidable-subtypes.lagda.md diff --git a/src/foundation/complements-decidable-subtypes.lagda.md b/src/foundation/complements-decidable-subtypes.lagda.md deleted file mode 100644 index eedaa16852..0000000000 --- a/src/foundation/complements-decidable-subtypes.lagda.md +++ /dev/null @@ -1,108 +0,0 @@ -# Complements of decidable subtypes - -```agda -module foundation.complements-decidable-subtypes where -``` - -
Imports - -```agda -open import foundation.action-on-identifications-functions -open import foundation.coproduct-types -open import foundation.decidable-propositions -open import foundation.decidable-subtypes -open import foundation.dependent-pair-types -open import foundation.empty-types -open import foundation.equality-dependent-pair-types -open import foundation.equivalences -open import foundation.identity-types -open import foundation.negation -open import foundation.propositions -open import foundation.retractions -open import foundation.sections -open import foundation.universe-levels -``` - -
- -## Idea - -The -{{#concept "complement" Disambiguation="of a decidable subtype" Agda=complement-decidable-subtype}} -of a [decidable subtype](foundation.decidable-subtypes.md) `P ⊆ A` consists of -the elements that are [not](foundation-core.negation.md) in `P`. - -### The complement of a decidable subtype is decidable - -```agda -module _ - {l1 l2 : Level} - {A : UU l1} - (P : decidable-subtype l2 A) - where - - complement-decidable-subtype : decidable-subtype l2 A - complement-decidable-subtype a = neg-Decidable-Prop (P a) -``` - -### For a decidable subtype `P`, a type is equivalent to the coproduct of `P` and its complement - -```agda -module _ - {l1 l2 : Level} - {A : UU l1} - (P : decidable-subtype l2 A) - where - - map-equiv-coproduct-decidable-subtype-complement : - A → - type-decidable-subtype P + - type-decidable-subtype (complement-decidable-subtype P) - map-equiv-coproduct-decidable-subtype-complement a with - is-decidable-Decidable-Prop (P a) - ... | inl pa = inl (a , pa) - ... | inr ¬pa = inr (a , ¬pa) - - map-inv-equiv-coproduct-decidable-subtype-complement : - type-decidable-subtype P + - type-decidable-subtype (complement-decidable-subtype P) → A - map-inv-equiv-coproduct-decidable-subtype-complement (inl (a , _)) = a - map-inv-equiv-coproduct-decidable-subtype-complement (inr (a , _)) = a - - is-section-map-inv-equiv-coproduct-decidable-subtype-complement : - is-section - map-equiv-coproduct-decidable-subtype-complement - map-inv-equiv-coproduct-decidable-subtype-complement - is-section-map-inv-equiv-coproduct-decidable-subtype-complement (inl (a , pa)) - with is-decidable-Decidable-Prop (P a) - ... | inl pa' = - ap inl (eq-pair-eq-fiber (eq-type-Prop (prop-Decidable-Prop (P a)))) - ... | inr ¬pa' = ex-falso (¬pa' pa) - is-section-map-inv-equiv-coproduct-decidable-subtype-complement - (inr (a , ¬pa)) with is-decidable-Decidable-Prop (P a) - ... | inl pa' = ex-falso (¬pa pa') - ... | inr ¬pa' = - ap - ( inr) - ( eq-pair-eq-fiber (eq-type-Prop (neg-Prop (prop-Decidable-Prop (P a))))) - - is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement : - is-retraction - map-equiv-coproduct-decidable-subtype-complement - map-inv-equiv-coproduct-decidable-subtype-complement - is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement a - with is-decidable-Decidable-Prop (P a) - ... | inl _ = refl - ... | inr _ = refl - - equiv-coproduct-decidable-subtype-complement : - A ≃ - type-decidable-subtype P + - type-decidable-subtype (complement-decidable-subtype P) - equiv-coproduct-decidable-subtype-complement = - map-equiv-coproduct-decidable-subtype-complement , - ( map-inv-equiv-coproduct-decidable-subtype-complement , - is-section-map-inv-equiv-coproduct-decidable-subtype-complement) , - ( map-inv-equiv-coproduct-decidable-subtype-complement , - is-retraction-map-inv-equiv-coproduct-decidable-subtype-complement) -``` From 7abd92bfc99f846211bd9d91d6832d8754c4e8f1 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 14:45:24 -0700 Subject: [PATCH 57/66] Fixes --- src/elementary-number-theory/pairs-with-natural-sums.lagda.md | 3 ++- src/foundation.lagda.md | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md index 5c89cd822e..96f863f4db 100644 --- a/src/elementary-number-theory/pairs-with-natural-sums.lagda.md +++ b/src/elementary-number-theory/pairs-with-natural-sums.lagda.md @@ -15,7 +15,6 @@ open import elementary-number-theory.natural-numbers open import foundation.action-on-identifications-functions open import foundation.automorphisms open import foundation.cartesian-product-types -open import foundation.complements-decidable-subtypes open import foundation.complements-subtypes open import foundation.conjunction open import foundation.contractible-types @@ -38,6 +37,8 @@ open import foundation.type-arithmetic-coproduct-types open import foundation.unit-type open import foundation.universe-levels +open import logic.complements-decidable-subtypes + open import univalent-combinatorics.counting open import univalent-combinatorics.finite-types open import univalent-combinatorics.standard-finite-types diff --git a/src/foundation.lagda.md b/src/foundation.lagda.md index e8f3163f6a..fa5ed4f5b6 100644 --- a/src/foundation.lagda.md +++ b/src/foundation.lagda.md @@ -74,7 +74,6 @@ open import foundation.commuting-triangles-of-identifications public open import foundation.commuting-triangles-of-maps public open import foundation.commuting-triangles-of-morphisms-arrows public open import foundation.complements public -open import foundation.complements-decidable-subtypes public open import foundation.complements-subtypes public open import foundation.composite-maps-in-inverse-sequential-diagrams public open import foundation.composition-algebra public From 7983aa6a0c86cf205d9d8bbc4a59c59cb509f546 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 16:21:24 -0700 Subject: [PATCH 58/66] Delete unused imports --- ...l-power-series-commutative-semirings.lagda.md | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index a917a59e50..43bc427c15 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -1,6 +1,8 @@ # Formal power series on commutative semirings ```agda +{-# OPTIONS --lossy-unification #-} + module commutative-algebra.formal-power-series-commutative-semirings where ``` @@ -19,24 +21,15 @@ open import elementary-number-theory.strict-inequality-natural-numbers open import foundation.action-on-identifications-binary-functions open import foundation.action-on-identifications-functions -open import foundation.cartesian-product-types -open import foundation.complements-decidable-subtypes open import foundation.coproduct-types -open import foundation.dependent-identifications open import foundation.dependent-pair-types open import foundation.empty-types -open import foundation.equality-dependent-pair-types -open import foundation.equivalences open import foundation.function-extensionality open import foundation.function-types open import foundation.homotopies open import foundation.identity-types -open import foundation.involutions open import foundation.propositions -open import foundation.retractions -open import foundation.sections open import foundation.sets -open import foundation.transport-along-identifications open import foundation.unit-type open import foundation.unital-binary-operations open import foundation.universe-levels @@ -50,12 +43,7 @@ open import group-theory.semigroups open import ring-theory.semirings -open import univalent-combinatorics.coproduct-types -open import univalent-combinatorics.counting -open import univalent-combinatorics.decidable-subtypes open import univalent-combinatorics.dependent-pair-types -open import univalent-combinatorics.finite-types -open import univalent-combinatorics.standard-finite-types ``` From f53ec37a35745ee13bec3f0fed1a419a1597ef98 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 17:14:53 -0700 Subject: [PATCH 59/66] Remove more unused imports --- .../formal-power-series-commutative-rings.lagda.md | 1 - .../formal-power-series-commutative-semirings.lagda.md | 1 - 2 files changed, 2 deletions(-) diff --git a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md index d1cd84c879..d57d960cb8 100644 --- a/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-rings.lagda.md @@ -10,7 +10,6 @@ module commutative-algebra.formal-power-series-commutative-rings where open import commutative-algebra.commutative-rings open import commutative-algebra.commutative-semirings open import commutative-algebra.formal-power-series-commutative-semirings -open import commutative-algebra.sums-commutative-rings open import elementary-number-theory.natural-numbers diff --git a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md index 43bc427c15..512f6773a2 100644 --- a/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md +++ b/src/commutative-algebra/formal-power-series-commutative-semirings.lagda.md @@ -28,7 +28,6 @@ open import foundation.function-extensionality open import foundation.function-types open import foundation.homotopies open import foundation.identity-types -open import foundation.propositions open import foundation.sets open import foundation.unit-type open import foundation.unital-binary-operations From 1ec2559a5938894f7631ade333c31e31d4fa6089 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Sun, 23 Mar 2025 17:53:19 -0700 Subject: [PATCH 60/66] Standardize on one-based naming --- ...s-of-elements-commutative-monoids.lagda.md | 2 +- ...cts-of-tuples-of-elements-monoids.lagda.md | 2 +- .../vectors-on-commutative-monoids.lagda.md | 20 +++++++++---------- .../vectors-on-monoids.lagda.md | 20 +++++++++---------- .../vectors-on-semirings.lagda.md | 2 +- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index cf479af57f..690cc38f82 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -191,7 +191,7 @@ module _ mul-fin-Commutative-Monoid ( M) ( n) - ( unit-functional-vec-Commutative-Monoid M n) = + ( one-functional-vec-Commutative-Monoid M n) = unit-Commutative-Monoid M mul-unit-Commutative-Monoid = mul-unit-Monoid (monoid-Commutative-Monoid M) diff --git a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md index b00045fa60..c72c796510 100644 --- a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md @@ -174,7 +174,7 @@ module _ mul-unit-Monoid : (n : ℕ) → - mul-fin-Monoid M n (mul-unit-functional-vec-Monoid M n) = unit-Monoid M + mul-fin-Monoid M n (one-functional-vec-Monoid M n) = unit-Monoid M mul-unit-Monoid zero-ℕ = refl mul-unit-Monoid (succ-ℕ n) = right-unit-law-mul-Monoid M _ ∙ mul-unit-Monoid n diff --git a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md index 38e66d432e..7752df7bc2 100644 --- a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md @@ -96,7 +96,7 @@ module _ snoc-functional-vec-Monoid (monoid-Commutative-Monoid M) ``` -### Unit vector on a commutative monoid +### Vectors of the multiplicative unit of a commutative monoid #### The unit listed vector @@ -105,20 +105,20 @@ module _ {l : Level} (M : Commutative-Monoid l) where - unit-vec-Commutative-Monoid : {n : ℕ} → vec-Commutative-Monoid M n - unit-vec-Commutative-Monoid = constant-vec (unit-Commutative-Monoid M) + one-vec-Commutative-Monoid : {n : ℕ} → vec-Commutative-Monoid M n + one-vec-Commutative-Monoid = constant-vec (unit-Commutative-Monoid M) ``` -#### The unit functional vector +#### The functional vector of the multiplicative unit ```agda module _ {l : Level} (M : Commutative-Monoid l) where - unit-functional-vec-Commutative-Monoid : + one-functional-vec-Commutative-Monoid : (n : ℕ) → functional-vec-Commutative-Monoid M n - unit-functional-vec-Commutative-Monoid n i = unit-Commutative-Monoid M + one-functional-vec-Commutative-Monoid n i = unit-Commutative-Monoid M ``` ### Pointwise addition of vectors on a commutative monoid @@ -149,13 +149,13 @@ module _ left-unit-law-mul-vec-Commutative-Monoid : {n : ℕ} (v : vec-Commutative-Monoid M n) → - mul-vec-Commutative-Monoid (unit-vec-Commutative-Monoid M) v = v + mul-vec-Commutative-Monoid (one-vec-Commutative-Monoid M) v = v left-unit-law-mul-vec-Commutative-Monoid = left-unit-law-mul-vec-Monoid (monoid-Commutative-Monoid M) right-unit-law-mul-vec-Commutative-Monoid : {n : ℕ} (v : vec-Commutative-Monoid M n) → - mul-vec-Commutative-Monoid v (unit-vec-Commutative-Monoid M) = v + mul-vec-Commutative-Monoid v (one-vec-Commutative-Monoid M) = v right-unit-law-mul-vec-Commutative-Monoid = right-unit-law-mul-vec-Monoid (monoid-Commutative-Monoid M) @@ -207,14 +207,14 @@ module _ left-unit-law-mul-functional-vec-Commutative-Monoid : (n : ℕ) (v : functional-vec-Commutative-Monoid M n) → mul-functional-vec-Commutative-Monoid n - ( unit-functional-vec-Commutative-Monoid M n) v = v + ( one-functional-vec-Commutative-Monoid M n) v = v left-unit-law-mul-functional-vec-Commutative-Monoid = left-unit-law-mul-functional-vec-Monoid (monoid-Commutative-Monoid M) right-unit-law-mul-functional-vec-Commutative-Monoid : (n : ℕ) (v : functional-vec-Commutative-Monoid M n) → mul-functional-vec-Commutative-Monoid n v - ( unit-functional-vec-Commutative-Monoid M n) = v + ( one-functional-vec-Commutative-Monoid M n) = v right-unit-law-mul-functional-vec-Commutative-Monoid = right-unit-law-mul-functional-vec-Monoid (monoid-Commutative-Monoid M) diff --git a/src/linear-algebra/vectors-on-monoids.lagda.md b/src/linear-algebra/vectors-on-monoids.lagda.md index cbbc6cac15..873a226907 100644 --- a/src/linear-algebra/vectors-on-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-monoids.lagda.md @@ -92,8 +92,8 @@ module _ {l : Level} (M : Monoid l) where - mul-unit-vec-Monoid : {n : ℕ} → vec-Monoid M n - mul-unit-vec-Monoid = constant-vec (unit-Monoid M) + one-vec-Monoid : {n : ℕ} → vec-Monoid M n + one-vec-Monoid = constant-vec (unit-Monoid M) ``` #### The functional vector of the multiplicative unit @@ -103,8 +103,8 @@ module _ {l : Level} (M : Monoid l) where - mul-unit-functional-vec-Monoid : (n : ℕ) → functional-vec-Monoid M n - mul-unit-functional-vec-Monoid n i = unit-Monoid M + one-functional-vec-Monoid : (n : ℕ) → functional-vec-Monoid M n + one-functional-vec-Monoid n i = unit-Monoid M ``` ### Pointwise multiplication of vectors on a monoid @@ -137,7 +137,7 @@ module _ left-unit-law-mul-vec-Monoid : {n : ℕ} (v : vec-Monoid M n) → - mul-vec-Monoid (mul-unit-vec-Monoid M) v = v + mul-vec-Monoid (one-vec-Monoid M) v = v left-unit-law-mul-vec-Monoid empty-vec = refl left-unit-law-mul-vec-Monoid (x ∷ v) = ap-binary _∷_ @@ -146,7 +146,7 @@ module _ right-unit-law-mul-vec-Monoid : {n : ℕ} (v : vec-Monoid M n) → - mul-vec-Monoid v (mul-unit-vec-Monoid M) = v + mul-vec-Monoid v (one-vec-Monoid M) = v right-unit-law-mul-vec-Monoid empty-vec = refl right-unit-law-mul-vec-Monoid (x ∷ v) = ap-binary _∷_ @@ -155,7 +155,7 @@ module _ vec-Monoid-Monoid : ℕ → Monoid l pr1 (vec-Monoid-Monoid n) = vec-Monoid-Semigroup n - pr1 (pr2 (vec-Monoid-Monoid n)) = mul-unit-vec-Monoid M + pr1 (pr2 (vec-Monoid-Monoid n)) = one-vec-Monoid M pr1 (pr2 (pr2 (vec-Monoid-Monoid n))) = left-unit-law-mul-vec-Monoid pr2 (pr2 (pr2 (vec-Monoid-Monoid n))) = right-unit-law-mul-vec-Monoid ``` @@ -188,13 +188,13 @@ module _ left-unit-law-mul-functional-vec-Monoid : (n : ℕ) (v : functional-vec-Monoid M n) → - mul-functional-vec-Monoid n (mul-unit-functional-vec-Monoid M n) v = v + mul-functional-vec-Monoid n (one-functional-vec-Monoid M n) v = v left-unit-law-mul-functional-vec-Monoid n v = eq-htpy (λ i → left-unit-law-mul-Monoid M (v i)) right-unit-law-mul-functional-vec-Monoid : (n : ℕ) (v : functional-vec-Monoid M n) → - mul-functional-vec-Monoid n v (mul-unit-functional-vec-Monoid M n) = v + mul-functional-vec-Monoid n v (one-functional-vec-Monoid M n) = v right-unit-law-mul-functional-vec-Monoid n v = eq-htpy (λ i → right-unit-law-mul-Monoid M (v i)) @@ -202,7 +202,7 @@ module _ pr1 (functional-vec-Monoid-Monoid n) = functional-vec-Monoid-Semigroup n pr1 (pr2 (functional-vec-Monoid-Monoid n)) = - mul-unit-functional-vec-Monoid M n + one-functional-vec-Monoid M n pr1 (pr2 (pr2 (functional-vec-Monoid-Monoid n))) = left-unit-law-mul-functional-vec-Monoid n pr2 (pr2 (pr2 (functional-vec-Monoid-Monoid n))) = diff --git a/src/linear-algebra/vectors-on-semirings.lagda.md b/src/linear-algebra/vectors-on-semirings.lagda.md index cfdaa3e819..2157fb4563 100644 --- a/src/linear-algebra/vectors-on-semirings.lagda.md +++ b/src/linear-algebra/vectors-on-semirings.lagda.md @@ -97,7 +97,7 @@ module _ zero-vec-Semiring : {n : ℕ} → vec-Semiring R n zero-vec-Semiring = - unit-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) + one-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` #### The zero functional vector From 0e9722cc85ad47d8472a42f11ae9a7d27c43208c Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 26 Mar 2025 13:09:49 -0700 Subject: [PATCH 61/66] Respond to feedback --- ...s-of-elements-commutative-monoids.lagda.md | 2 +- ...cts-of-tuples-of-elements-monoids.lagda.md | 2 +- .../vectors-on-commutative-monoids.lagda.md | 111 +++++++++--------- .../vectors-on-monoids.lagda.md | 101 ++++++++-------- .../vectors-on-semirings.lagda.md | 22 ++-- 5 files changed, 122 insertions(+), 116 deletions(-) diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 690cc38f82..e710c71db7 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -191,7 +191,7 @@ module _ mul-fin-Commutative-Monoid ( M) ( n) - ( one-functional-vec-Commutative-Monoid M n) = + ( zero-functional-vec-Commutative-Monoid M n) = unit-Commutative-Monoid M mul-unit-Commutative-Monoid = mul-unit-Monoid (monoid-Commutative-Monoid M) diff --git a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md index c72c796510..aa01f7fc0a 100644 --- a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md @@ -174,7 +174,7 @@ module _ mul-unit-Monoid : (n : ℕ) → - mul-fin-Monoid M n (one-functional-vec-Monoid M n) = unit-Monoid M + mul-fin-Monoid M n (zero-functional-vec-Monoid M n) = unit-Monoid M mul-unit-Monoid zero-ℕ = refl mul-unit-Monoid (succ-ℕ n) = right-unit-law-mul-Monoid M _ ∙ mul-unit-Monoid n diff --git a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md index 7752df7bc2..04439a10a3 100644 --- a/src/linear-algebra/vectors-on-commutative-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-commutative-monoids.lagda.md @@ -33,6 +33,9 @@ Given a [commutative monoid](group-theory.commutative-monoids.md) `M`, the type `vec n M` of `n`-dimensional `M`-[vectors](linear-algebra.vectors.md) is a commutative monoid given by componentwise addition. +We use additive terminology for vectors, as is standard in linear algebra +contexts, despite using multiplicative terminology for monoids. + ## Definitions ### Listed vectors on commutative monoids @@ -96,29 +99,29 @@ module _ snoc-functional-vec-Monoid (monoid-Commutative-Monoid M) ``` -### Vectors of the multiplicative unit of a commutative monoid +### Zero vectors of a commutative monoid -#### The unit listed vector +#### The zero listed vector ```agda module _ {l : Level} (M : Commutative-Monoid l) where - one-vec-Commutative-Monoid : {n : ℕ} → vec-Commutative-Monoid M n - one-vec-Commutative-Monoid = constant-vec (unit-Commutative-Monoid M) + zero-vec-Commutative-Monoid : {n : ℕ} → vec-Commutative-Monoid M n + zero-vec-Commutative-Monoid = constant-vec (unit-Commutative-Monoid M) ``` -#### The functional vector of the multiplicative unit +#### The zero functional vector ```agda module _ {l : Level} (M : Commutative-Monoid l) where - one-functional-vec-Commutative-Monoid : + zero-functional-vec-Commutative-Monoid : (n : ℕ) → functional-vec-Commutative-Monoid M n - one-functional-vec-Commutative-Monoid n i = unit-Commutative-Monoid M + zero-functional-vec-Commutative-Monoid n i = unit-Commutative-Monoid M ``` ### Pointwise addition of vectors on a commutative monoid @@ -130,52 +133,52 @@ module _ {l : Level} (M : Commutative-Monoid l) where - mul-vec-Commutative-Monoid : + add-vec-Commutative-Monoid : {n : ℕ} → vec-Commutative-Monoid M n → vec-Commutative-Monoid M n → vec-Commutative-Monoid M n - mul-vec-Commutative-Monoid = - mul-vec-Monoid (monoid-Commutative-Monoid M) + add-vec-Commutative-Monoid = + add-vec-Monoid (monoid-Commutative-Monoid M) - associative-mul-vec-Commutative-Monoid : + associative-add-vec-Commutative-Monoid : {n : ℕ} (v1 v2 v3 : vec-Commutative-Monoid M n) → - mul-vec-Commutative-Monoid (mul-vec-Commutative-Monoid v1 v2) v3 = - mul-vec-Commutative-Monoid v1 (mul-vec-Commutative-Monoid v2 v3) - associative-mul-vec-Commutative-Monoid = - associative-mul-vec-Monoid (monoid-Commutative-Monoid M) + add-vec-Commutative-Monoid (add-vec-Commutative-Monoid v1 v2) v3 = + add-vec-Commutative-Monoid v1 (add-vec-Commutative-Monoid v2 v3) + associative-add-vec-Commutative-Monoid = + associative-add-vec-Monoid (monoid-Commutative-Monoid M) vec-Commutative-Monoid-Semigroup : ℕ → Semigroup l vec-Commutative-Monoid-Semigroup = vec-Monoid-Semigroup (monoid-Commutative-Monoid M) - left-unit-law-mul-vec-Commutative-Monoid : + left-unit-law-add-vec-Commutative-Monoid : {n : ℕ} (v : vec-Commutative-Monoid M n) → - mul-vec-Commutative-Monoid (one-vec-Commutative-Monoid M) v = v - left-unit-law-mul-vec-Commutative-Monoid = - left-unit-law-mul-vec-Monoid (monoid-Commutative-Monoid M) + add-vec-Commutative-Monoid (zero-vec-Commutative-Monoid M) v = v + left-unit-law-add-vec-Commutative-Monoid = + left-unit-law-add-vec-Monoid (monoid-Commutative-Monoid M) - right-unit-law-mul-vec-Commutative-Monoid : + right-unit-law-add-vec-Commutative-Monoid : {n : ℕ} (v : vec-Commutative-Monoid M n) → - mul-vec-Commutative-Monoid v (one-vec-Commutative-Monoid M) = v - right-unit-law-mul-vec-Commutative-Monoid = - right-unit-law-mul-vec-Monoid (monoid-Commutative-Monoid M) + add-vec-Commutative-Monoid v (zero-vec-Commutative-Monoid M) = v + right-unit-law-add-vec-Commutative-Monoid = + right-unit-law-add-vec-Monoid (monoid-Commutative-Monoid M) vec-Commutative-Monoid-Monoid : ℕ → Monoid l vec-Commutative-Monoid-Monoid = vec-Monoid-Monoid (monoid-Commutative-Monoid M) - commutative-mul-vec-Commutative-Monoid : + commutative-add-vec-Commutative-Monoid : {n : ℕ} (v w : vec-Commutative-Monoid M n) → - mul-vec-Commutative-Monoid v w = mul-vec-Commutative-Monoid w v - commutative-mul-vec-Commutative-Monoid empty-vec empty-vec = refl - commutative-mul-vec-Commutative-Monoid (x ∷ v1) (y ∷ v2) = + add-vec-Commutative-Monoid v w = add-vec-Commutative-Monoid w v + commutative-add-vec-Commutative-Monoid empty-vec empty-vec = refl + commutative-add-vec-Commutative-Monoid (x ∷ v1) (y ∷ v2) = ap-binary _∷_ (commutative-mul-Commutative-Monoid M x y) - (commutative-mul-vec-Commutative-Monoid v1 v2) + (commutative-add-vec-Commutative-Monoid v1 v2) vec-Commutative-Monoid-Commutative-Monoid : ℕ → Commutative-Monoid l vec-Commutative-Monoid-Commutative-Monoid n = vec-Commutative-Monoid-Monoid n , - commutative-mul-vec-Commutative-Monoid + commutative-add-vec-Commutative-Monoid ``` #### Pointwise addition of functional vectors on a commutative monoid @@ -185,53 +188,53 @@ module _ {l : Level} (M : Commutative-Monoid l) where - mul-functional-vec-Commutative-Monoid : + add-functional-vec-Commutative-Monoid : (n : ℕ) (v w : functional-vec-Commutative-Monoid M n) → functional-vec-Commutative-Monoid M n - mul-functional-vec-Commutative-Monoid = - mul-functional-vec-Monoid (monoid-Commutative-Monoid M) + add-functional-vec-Commutative-Monoid = + add-functional-vec-Monoid (monoid-Commutative-Monoid M) - associative-mul-functional-vec-Commutative-Monoid : + associative-add-functional-vec-Commutative-Monoid : (n : ℕ) (v1 v2 v3 : functional-vec-Commutative-Monoid M n) → - ( mul-functional-vec-Commutative-Monoid n - ( mul-functional-vec-Commutative-Monoid n v1 v2) v3) = - ( mul-functional-vec-Commutative-Monoid n v1 - ( mul-functional-vec-Commutative-Monoid n v2 v3)) - associative-mul-functional-vec-Commutative-Monoid = - associative-mul-functional-vec-Monoid (monoid-Commutative-Monoid M) + ( add-functional-vec-Commutative-Monoid n + ( add-functional-vec-Commutative-Monoid n v1 v2) v3) = + ( add-functional-vec-Commutative-Monoid n v1 + ( add-functional-vec-Commutative-Monoid n v2 v3)) + associative-add-functional-vec-Commutative-Monoid = + associative-add-functional-vec-Monoid (monoid-Commutative-Monoid M) functional-vec-Commutative-Monoid-Semigroup : ℕ → Semigroup l functional-vec-Commutative-Monoid-Semigroup = functional-vec-Monoid-Semigroup (monoid-Commutative-Monoid M) - left-unit-law-mul-functional-vec-Commutative-Monoid : + left-unit-law-add-functional-vec-Commutative-Monoid : (n : ℕ) (v : functional-vec-Commutative-Monoid M n) → - mul-functional-vec-Commutative-Monoid n - ( one-functional-vec-Commutative-Monoid M n) v = v - left-unit-law-mul-functional-vec-Commutative-Monoid = - left-unit-law-mul-functional-vec-Monoid (monoid-Commutative-Monoid M) + add-functional-vec-Commutative-Monoid n + ( zero-functional-vec-Commutative-Monoid M n) v = v + left-unit-law-add-functional-vec-Commutative-Monoid = + left-unit-law-add-functional-vec-Monoid (monoid-Commutative-Monoid M) - right-unit-law-mul-functional-vec-Commutative-Monoid : + right-unit-law-add-functional-vec-Commutative-Monoid : (n : ℕ) (v : functional-vec-Commutative-Monoid M n) → - mul-functional-vec-Commutative-Monoid n v - ( one-functional-vec-Commutative-Monoid M n) = v - right-unit-law-mul-functional-vec-Commutative-Monoid = - right-unit-law-mul-functional-vec-Monoid (monoid-Commutative-Monoid M) + add-functional-vec-Commutative-Monoid n v + ( zero-functional-vec-Commutative-Monoid M n) = v + right-unit-law-add-functional-vec-Commutative-Monoid = + right-unit-law-add-functional-vec-Monoid (monoid-Commutative-Monoid M) functional-vec-Commutative-Monoid-Monoid : ℕ → Monoid l functional-vec-Commutative-Monoid-Monoid = functional-vec-Monoid-Monoid (monoid-Commutative-Monoid M) - commutative-mul-functional-vec-Commutative-Monoid : + commutative-add-functional-vec-Commutative-Monoid : (n : ℕ) (v w : functional-vec-Commutative-Monoid M n) → - mul-functional-vec-Commutative-Monoid n v w = - mul-functional-vec-Commutative-Monoid n w v - commutative-mul-functional-vec-Commutative-Monoid _ _ _ = + add-functional-vec-Commutative-Monoid n v w = + add-functional-vec-Commutative-Monoid n w v + commutative-add-functional-vec-Commutative-Monoid _ _ _ = eq-htpy (λ k → commutative-mul-Commutative-Monoid M _ _) functional-vec-Commutative-Monoid-Commutative-Monoid : ℕ → Commutative-Monoid l functional-vec-Commutative-Monoid-Commutative-Monoid n = functional-vec-Commutative-Monoid-Monoid n , - commutative-mul-functional-vec-Commutative-Monoid n + commutative-add-functional-vec-Commutative-Monoid n ``` diff --git a/src/linear-algebra/vectors-on-monoids.lagda.md b/src/linear-algebra/vectors-on-monoids.lagda.md index 873a226907..eb934ccacd 100644 --- a/src/linear-algebra/vectors-on-monoids.lagda.md +++ b/src/linear-algebra/vectors-on-monoids.lagda.md @@ -31,6 +31,9 @@ Given a [monoid](group-theory.monoids.md) `M`, the type `vec n M` of `n`-dimensional `M`-[vectors](linear-algebra.vectors.md) is a monoid given by componentwise multiplication. +We use additive terminology for vectors, as is standard in linear algebra +contexts, despite using multiplicative terminology for monoids. + ## Definitions ### Listed vectors on monoids @@ -83,81 +86,81 @@ module _ snoc-functional-vec-Monoid = snoc-functional-vec ``` -### The vector of the multiplicative unit of a monoid +### The zero vector -#### The listed vector of the multiplicative unit +#### The listed zero vector ```agda module _ {l : Level} (M : Monoid l) where - one-vec-Monoid : {n : ℕ} → vec-Monoid M n - one-vec-Monoid = constant-vec (unit-Monoid M) + zero-vec-Monoid : {n : ℕ} → vec-Monoid M n + zero-vec-Monoid = constant-vec (unit-Monoid M) ``` -#### The functional vector of the multiplicative unit +#### The functional zero vector ```agda module _ {l : Level} (M : Monoid l) where - one-functional-vec-Monoid : (n : ℕ) → functional-vec-Monoid M n - one-functional-vec-Monoid n i = unit-Monoid M + zero-functional-vec-Monoid : (n : ℕ) → functional-vec-Monoid M n + zero-functional-vec-Monoid n i = unit-Monoid M ``` -### Pointwise multiplication of vectors on a monoid +### Pointwise addition of vectors on a monoid -#### Pointwise multiplication of listed vectors on a monoid +#### Pointwise addition of listed vectors on a monoid ```agda module _ {l : Level} (M : Monoid l) where - mul-vec-Monoid : + add-vec-Monoid : {n : ℕ} → vec-Monoid M n → vec-Monoid M n → vec-Monoid M n - mul-vec-Monoid = binary-map-vec (mul-Monoid M) + add-vec-Monoid = binary-map-vec (mul-Monoid M) - associative-mul-vec-Monoid : + associative-add-vec-Monoid : {n : ℕ} (v1 v2 v3 : vec-Monoid M n) → - mul-vec-Monoid (mul-vec-Monoid v1 v2) v3 = - mul-vec-Monoid v1 (mul-vec-Monoid v2 v3) - associative-mul-vec-Monoid empty-vec empty-vec empty-vec = refl - associative-mul-vec-Monoid (x ∷ v1) (y ∷ v2) (z ∷ v3) = + add-vec-Monoid (add-vec-Monoid v1 v2) v3 = + add-vec-Monoid v1 (add-vec-Monoid v2 v3) + associative-add-vec-Monoid empty-vec empty-vec empty-vec = refl + associative-add-vec-Monoid (x ∷ v1) (y ∷ v2) (z ∷ v3) = ap-binary _∷_ ( associative-mul-Monoid M x y z) - ( associative-mul-vec-Monoid v1 v2 v3) + ( associative-add-vec-Monoid v1 v2 v3) vec-Monoid-Semigroup : ℕ → Semigroup l pr1 (vec-Monoid-Semigroup n) = vec-Set (set-Monoid M) n - pr1 (pr2 (vec-Monoid-Semigroup n)) = mul-vec-Monoid - pr2 (pr2 (vec-Monoid-Semigroup n)) = associative-mul-vec-Monoid + pr1 (pr2 (vec-Monoid-Semigroup n)) = add-vec-Monoid + pr2 (pr2 (vec-Monoid-Semigroup n)) = associative-add-vec-Monoid - left-unit-law-mul-vec-Monoid : + left-unit-law-add-vec-Monoid : {n : ℕ} (v : vec-Monoid M n) → - mul-vec-Monoid (one-vec-Monoid M) v = v - left-unit-law-mul-vec-Monoid empty-vec = refl - left-unit-law-mul-vec-Monoid (x ∷ v) = + add-vec-Monoid (zero-vec-Monoid M) v = v + left-unit-law-add-vec-Monoid empty-vec = refl + left-unit-law-add-vec-Monoid (x ∷ v) = ap-binary _∷_ ( left-unit-law-mul-Monoid M x) - ( left-unit-law-mul-vec-Monoid v) + ( left-unit-law-add-vec-Monoid v) - right-unit-law-mul-vec-Monoid : + right-unit-law-add-vec-Monoid : {n : ℕ} (v : vec-Monoid M n) → - mul-vec-Monoid v (one-vec-Monoid M) = v - right-unit-law-mul-vec-Monoid empty-vec = refl - right-unit-law-mul-vec-Monoid (x ∷ v) = + add-vec-Monoid v (zero-vec-Monoid M) = v + right-unit-law-add-vec-Monoid empty-vec = refl + right-unit-law-add-vec-Monoid (x ∷ v) = ap-binary _∷_ ( right-unit-law-mul-Monoid M x) - ( right-unit-law-mul-vec-Monoid v) + ( right-unit-law-add-vec-Monoid v) vec-Monoid-Monoid : ℕ → Monoid l pr1 (vec-Monoid-Monoid n) = vec-Monoid-Semigroup n - pr1 (pr2 (vec-Monoid-Monoid n)) = one-vec-Monoid M - pr1 (pr2 (pr2 (vec-Monoid-Monoid n))) = left-unit-law-mul-vec-Monoid - pr2 (pr2 (pr2 (vec-Monoid-Monoid n))) = right-unit-law-mul-vec-Monoid + pr1 (pr2 (vec-Monoid-Monoid n)) = zero-vec-Monoid M + pr1 (pr2 (pr2 (vec-Monoid-Monoid n))) = left-unit-law-add-vec-Monoid + pr2 (pr2 (pr2 (vec-Monoid-Monoid n))) = right-unit-law-add-vec-Monoid ``` #### Pointwise addition of functional vectors on a monoid @@ -167,44 +170,44 @@ module _ {l : Level} (M : Monoid l) where - mul-functional-vec-Monoid : + add-functional-vec-Monoid : (n : ℕ) (v w : functional-vec-Monoid M n) → functional-vec-Monoid M n - mul-functional-vec-Monoid n = binary-map-functional-vec n (mul-Monoid M) + add-functional-vec-Monoid n = binary-map-functional-vec n (mul-Monoid M) - associative-mul-functional-vec-Monoid : + associative-add-functional-vec-Monoid : (n : ℕ) (v1 v2 v3 : functional-vec-Monoid M n) → - ( mul-functional-vec-Monoid n (mul-functional-vec-Monoid n v1 v2) v3) = - ( mul-functional-vec-Monoid n v1 (mul-functional-vec-Monoid n v2 v3)) - associative-mul-functional-vec-Monoid n v1 v2 v3 = + ( add-functional-vec-Monoid n (add-functional-vec-Monoid n v1 v2) v3) = + ( add-functional-vec-Monoid n v1 (add-functional-vec-Monoid n v2 v3)) + associative-add-functional-vec-Monoid n v1 v2 v3 = eq-htpy (λ i → associative-mul-Monoid M (v1 i) (v2 i) (v3 i)) functional-vec-Monoid-Semigroup : ℕ → Semigroup l pr1 (functional-vec-Monoid-Semigroup n) = functional-vec-Set (set-Monoid M) n pr1 (pr2 (functional-vec-Monoid-Semigroup n)) = - mul-functional-vec-Monoid n + add-functional-vec-Monoid n pr2 (pr2 (functional-vec-Monoid-Semigroup n)) = - associative-mul-functional-vec-Monoid n + associative-add-functional-vec-Monoid n - left-unit-law-mul-functional-vec-Monoid : + left-unit-law-add-functional-vec-Monoid : (n : ℕ) (v : functional-vec-Monoid M n) → - mul-functional-vec-Monoid n (one-functional-vec-Monoid M n) v = v - left-unit-law-mul-functional-vec-Monoid n v = + add-functional-vec-Monoid n (zero-functional-vec-Monoid M n) v = v + left-unit-law-add-functional-vec-Monoid n v = eq-htpy (λ i → left-unit-law-mul-Monoid M (v i)) - right-unit-law-mul-functional-vec-Monoid : + right-unit-law-add-functional-vec-Monoid : (n : ℕ) (v : functional-vec-Monoid M n) → - mul-functional-vec-Monoid n v (one-functional-vec-Monoid M n) = v - right-unit-law-mul-functional-vec-Monoid n v = + add-functional-vec-Monoid n v (zero-functional-vec-Monoid M n) = v + right-unit-law-add-functional-vec-Monoid n v = eq-htpy (λ i → right-unit-law-mul-Monoid M (v i)) functional-vec-Monoid-Monoid : ℕ → Monoid l pr1 (functional-vec-Monoid-Monoid n) = functional-vec-Monoid-Semigroup n pr1 (pr2 (functional-vec-Monoid-Monoid n)) = - one-functional-vec-Monoid M n + zero-functional-vec-Monoid M n pr1 (pr2 (pr2 (functional-vec-Monoid-Monoid n))) = - left-unit-law-mul-functional-vec-Monoid n + left-unit-law-add-functional-vec-Monoid n pr2 (pr2 (pr2 (functional-vec-Monoid-Monoid n))) = - right-unit-law-mul-functional-vec-Monoid n + right-unit-law-add-functional-vec-Monoid n ``` diff --git a/src/linear-algebra/vectors-on-semirings.lagda.md b/src/linear-algebra/vectors-on-semirings.lagda.md index 2157fb4563..788dfd5770 100644 --- a/src/linear-algebra/vectors-on-semirings.lagda.md +++ b/src/linear-algebra/vectors-on-semirings.lagda.md @@ -97,7 +97,7 @@ module _ zero-vec-Semiring : {n : ℕ} → vec-Semiring R n zero-vec-Semiring = - one-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) + zero-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` #### The zero functional vector @@ -123,14 +123,14 @@ module _ add-vec-Semiring : {n : ℕ} → vec-Semiring R n → vec-Semiring R n → vec-Semiring R n add-vec-Semiring = - mul-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) + add-vec-Commutative-Monoid (additive-commutative-monoid-Semiring R) associative-add-vec-Semiring : {n : ℕ} (v1 v2 v3 : vec-Semiring R n) → add-vec-Semiring (add-vec-Semiring v1 v2) v3 = add-vec-Semiring v1 (add-vec-Semiring v2 v3) associative-add-vec-Semiring = - associative-mul-vec-Commutative-Monoid + associative-add-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) vec-Semiring-Semigroup : ℕ → Semigroup l @@ -141,14 +141,14 @@ module _ {n : ℕ} (v : vec-Semiring R n) → add-vec-Semiring (zero-vec-Semiring R) v = v left-unit-law-add-vec-Semiring = - left-unit-law-mul-vec-Commutative-Monoid + left-unit-law-add-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) right-unit-law-add-vec-Semiring : {n : ℕ} (v : vec-Semiring R n) → add-vec-Semiring v (zero-vec-Semiring R) = v right-unit-law-add-vec-Semiring = - right-unit-law-mul-vec-Commutative-Monoid + right-unit-law-add-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) vec-Semiring-Monoid : ℕ → Monoid l @@ -160,7 +160,7 @@ module _ {n : ℕ} (v w : vec-Semiring R n) → add-vec-Semiring v w = add-vec-Semiring w v commutative-add-vec-Semiring = - commutative-mul-vec-Commutative-Monoid + commutative-add-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) vec-Semiring-Commutative-Monoid : ℕ → Commutative-Monoid l @@ -179,7 +179,7 @@ module _ add-functional-vec-Semiring : (n : ℕ) (v w : functional-vec-Semiring R n) → functional-vec-Semiring R n add-functional-vec-Semiring = - mul-functional-vec-Commutative-Monoid + add-functional-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) associative-add-functional-vec-Semiring : @@ -187,7 +187,7 @@ module _ ( add-functional-vec-Semiring n (add-functional-vec-Semiring n v1 v2) v3) = ( add-functional-vec-Semiring n v1 (add-functional-vec-Semiring n v2 v3)) associative-add-functional-vec-Semiring = - associative-mul-functional-vec-Commutative-Monoid + associative-add-functional-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) functional-vec-Semiring-Semigroup : ℕ → Semigroup l @@ -199,14 +199,14 @@ module _ (n : ℕ) (v : functional-vec-Semiring R n) → add-functional-vec-Semiring n (zero-functional-vec-Semiring R n) v = v left-unit-law-add-functional-vec-Semiring = - left-unit-law-mul-functional-vec-Commutative-Monoid + left-unit-law-add-functional-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) right-unit-law-add-functional-vec-Semiring : (n : ℕ) (v : functional-vec-Semiring R n) → add-functional-vec-Semiring n v (zero-functional-vec-Semiring R n) = v right-unit-law-add-functional-vec-Semiring = - right-unit-law-mul-functional-vec-Commutative-Monoid + right-unit-law-add-functional-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) functional-vec-Semiring-Monoid : ℕ → Monoid l @@ -218,7 +218,7 @@ module _ (n : ℕ) (v w : functional-vec-Semiring R n) → add-functional-vec-Semiring n v w = add-functional-vec-Semiring n w v commutative-add-functional-vec-Semiring = - commutative-mul-functional-vec-Commutative-Monoid + commutative-add-functional-vec-Commutative-Monoid ( additive-commutative-monoid-Semiring R) functional-vec-Semiring-Commutative-Monoid : ℕ → Commutative-Monoid l From 40adbf32b8ded5c388d51450c8ca1e64720b7dc1 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 26 Mar 2025 13:26:23 -0700 Subject: [PATCH 62/66] Update src/commutative-algebra/sums-commutative-semirings.lagda.md Co-authored-by: Fredrik Bakke --- src/commutative-algebra/sums-commutative-semirings.lagda.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index f93bf9cad0..11f349ada9 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -482,6 +482,6 @@ module _ ( λ i → sum-finite-Commutative-Semiring R A (λ a → h a i)) where h : type-Finite-Type A → Fin 2 → type-Commutative-Semiring R - h a (inl (inr star)) = f a - h a (inr star) = g a + h a (inl (inr _)) = f a + h a (inr _) = g a ``` From 1a4c5b0c52d84eb34228be69136b576a622afc65 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 26 Mar 2025 13:38:42 -0700 Subject: [PATCH 63/66] Apply suggestions from code review Co-authored-by: Fredrik Bakke --- ...products-of-tuples-of-elements-commutative-monoids.lagda.md | 3 ++- .../products-of-tuples-of-elements-monoids.lagda.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index e710c71db7..cafe195d98 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -728,7 +728,8 @@ module _ ( Σ-Finite-Type (Fin-Finite-Type zero-ℕ) B) ( λ ()) ( ind-Σ f)) - mul-fin-finite-Σ-Commutative-Monoid (succ-ℕ n) B f = equational-reasoning + mul-fin-finite-Σ-Commutative-Monoid (succ-ℕ n) B f = + equational-reasoning mul-fin-Commutative-Monoid ( M) ( succ-ℕ n) diff --git a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md index aa01f7fc0a..8b5bd33ca3 100644 --- a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md @@ -90,7 +90,7 @@ module _ ( H (inr star)) ``` -### Products are equal to the zero-th term plus the rest +### Products are equal to the zero-th term times the rest ```agda module _ From 929625eb1cdf44a5c40596ca960a7e35542c2a73 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 26 Mar 2025 13:44:34 -0700 Subject: [PATCH 64/66] Renaming --- .../sums-commutative-rings.lagda.md | 5 ++-- .../sums-commutative-semirings.lagda.md | 8 +++--- ...s-of-elements-commutative-monoids.lagda.md | 26 +++++++------------ ...cts-of-tuples-of-elements-monoids.lagda.md | 13 +++++----- src/ring-theory/sums-rings.lagda.md | 4 +-- src/ring-theory/sums-semirings.lagda.md | 10 +++---- 6 files changed, 30 insertions(+), 36 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-rings.lagda.md b/src/commutative-algebra/sums-commutative-rings.lagda.md index d2bf4fc59e..c66702d06d 100644 --- a/src/commutative-algebra/sums-commutative-rings.lagda.md +++ b/src/commutative-algebra/sums-commutative-rings.lagda.md @@ -85,10 +85,11 @@ module _ sum-one-element-Commutative-Ring = sum-one-element-Ring (ring-Commutative-Ring A) - sum-unit-Commutative-Ring : + sum-unit-finite-Commutative-Ring : (f : unit → type-Commutative-Ring A) → sum-finite-Commutative-Ring A unit-Finite-Type f = f star - sum-unit-Commutative-Ring = sum-unit-Ring (ring-Commutative-Ring A) + sum-unit-finite-Commutative-Ring = + sum-unit-finite-Ring (ring-Commutative-Ring A) sum-two-elements-Commutative-Ring : (f : functional-vec-Commutative-Ring A 2) → diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index f93bf9cad0..dba845dc54 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -21,7 +21,7 @@ open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types -open import foundation.negated-equality +-- open import foundation.negated-equality open import foundation.type-arithmetic-cartesian-product-types open import foundation.unit-type open import foundation.universe-levels @@ -90,11 +90,11 @@ module _ sum-one-element-Commutative-Semiring = sum-one-element-Semiring (semiring-Commutative-Semiring A) - sum-unit-Commutative-Semiring : + sum-unit-finite-Commutative-Semiring : (f : unit → type-Commutative-Semiring A) → sum-finite-Commutative-Semiring A unit-Finite-Type f = f star - sum-unit-Commutative-Semiring = - sum-unit-Semiring (semiring-Commutative-Semiring A) + sum-unit-finite-Commutative-Semiring = + sum-unit-finite-Semiring (semiring-Commutative-Semiring A) sum-two-elements-Commutative-Semiring : (f : functional-vec-Commutative-Semiring A 2) → diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index e710c71db7..99c5b587b2 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -186,15 +186,15 @@ module _ {l : Level} (M : Commutative-Monoid l) where - mul-unit-Commutative-Monoid : + mul-fin-unit-Commutative-Monoid : (n : ℕ) → mul-fin-Commutative-Monoid ( M) ( n) ( zero-functional-vec-Commutative-Monoid M n) = unit-Commutative-Monoid M - mul-unit-Commutative-Monoid = - mul-unit-Monoid (monoid-Commutative-Monoid M) + mul-fin-unit-Commutative-Monoid = + mul-fin-unit-Monoid (monoid-Commutative-Monoid M) ``` ### Splitting products @@ -482,26 +482,18 @@ module _ {l1 l2 : Level} (M : Commutative-Monoid l1) (A : Finite-Type l2) where - mul-unit-finite-Commutative-Monoid : + mul-finite-unit-Commutative-Monoid : is-unit-Commutative-Monoid ( M) ( mul-finite-Commutative-Monoid ( M) ( A) ( λ _ → unit-Commutative-Monoid M)) - mul-unit-finite-Commutative-Monoid = + mul-finite-unit-Commutative-Monoid = do cA ← is-finite-type-Finite-Type A - equational-reasoning - mul-finite-Commutative-Monoid M A (λ _ → unit-Commutative-Monoid M) - = - mul-count-Commutative-Monoid - ( M) - ( type-Finite-Type A) - ( cA) - ( λ _ → unit-Commutative-Monoid M) - by mul-finite-count-Commutative-Monoid M A cA _ - = unit-Commutative-Monoid M by mul-unit-Commutative-Monoid M _ + mul-finite-count-Commutative-Monoid M A cA _ ∙ + mul-fin-unit-Commutative-Monoid M _ where open do-syntax-trunc-Prop @@ -899,10 +891,10 @@ module _ where abstract - mul-finite-unit-Commutative-Monoid : + mul-unit-finite-Commutative-Monoid : (f : unit → type-Commutative-Monoid M) → mul-finite-Commutative-Monoid M unit-Finite-Type f = f star - mul-finite-unit-Commutative-Monoid f = + mul-unit-finite-Commutative-Monoid f = equational-reasoning mul-finite-Commutative-Monoid M unit-Finite-Type f = diff --git a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md index aa01f7fc0a..e545c1b7e6 100644 --- a/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-monoids.lagda.md @@ -172,12 +172,13 @@ module _ {l : Level} (M : Monoid l) where - mul-unit-Monoid : - (n : ℕ) → - mul-fin-Monoid M n (zero-functional-vec-Monoid M n) = unit-Monoid M - mul-unit-Monoid zero-ℕ = refl - mul-unit-Monoid (succ-ℕ n) = - right-unit-law-mul-Monoid M _ ∙ mul-unit-Monoid n + abstract + mul-fin-unit-Monoid : + (n : ℕ) → + mul-fin-Monoid M n (zero-functional-vec-Monoid M n) = unit-Monoid M + mul-fin-unit-Monoid zero-ℕ = refl + mul-fin-unit-Monoid (succ-ℕ n) = + right-unit-law-mul-Monoid M _ ∙ mul-fin-unit-Monoid n ``` ### Splitting products diff --git a/src/ring-theory/sums-rings.lagda.md b/src/ring-theory/sums-rings.lagda.md index 6f26302501..78a33c9046 100644 --- a/src/ring-theory/sums-rings.lagda.md +++ b/src/ring-theory/sums-rings.lagda.md @@ -76,9 +76,9 @@ module _ (f : functional-vec-Ring R 1) → sum-Ring R 1 f = head-functional-vec 0 f sum-one-element-Ring = sum-one-element-Semiring (semiring-Ring R) - sum-unit-Ring : + sum-unit-finite-Ring : (f : unit → type-Ring R) → sum-finite-Ring R unit-Finite-Type f = f star - sum-unit-Ring = sum-unit-Semiring (semiring-Ring R) + sum-unit-finite-Ring = sum-unit-finite-Semiring (semiring-Ring R) sum-two-elements-Ring : (f : functional-vec-Ring R 2) → diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 88899a28b3..137967e3f0 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -87,11 +87,11 @@ module _ mul-one-element-Commutative-Monoid ( additive-commutative-monoid-Semiring R) - sum-unit-Semiring : + sum-unit-finite-Semiring : (f : unit → type-Semiring R) → sum-finite-Semiring R unit-Finite-Type f = f star - sum-unit-Semiring = - mul-finite-unit-Commutative-Monoid (additive-commutative-monoid-Semiring R) + sum-unit-finite-Semiring = + mul-unit-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) sum-two-elements-Semiring : (f : functional-vec-Semiring R 2) → @@ -351,13 +351,13 @@ module _ (n : ℕ) → sum-Semiring R n (zero-functional-vec-Semiring R n) = zero-Semiring R sum-zero-Semiring = - mul-unit-Commutative-Monoid (additive-commutative-monoid-Semiring R) + mul-fin-unit-Commutative-Monoid (additive-commutative-monoid-Semiring R) sum-zero-finite-Semiring : {l2 : Level} (A : Finite-Type l2) → sum-finite-Semiring R A (λ _ → zero-Semiring R) = zero-Semiring R sum-zero-finite-Semiring = - mul-unit-finite-Commutative-Monoid (additive-commutative-monoid-Semiring R) + mul-finite-unit-Commutative-Monoid (additive-commutative-monoid-Semiring R) ``` ### Splitting sums From 8afed735bd0d041cdbb8c7022ba91ccd84bf708d Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 26 Mar 2025 14:22:50 -0700 Subject: [PATCH 65/66] let do --- .../sums-commutative-semirings.lagda.md | 2 +- ...s-of-elements-commutative-monoids.lagda.md | 93 ++++++++++--------- src/ring-theory/sums-semirings.lagda.md | 32 +++---- 3 files changed, 64 insertions(+), 63 deletions(-) diff --git a/src/commutative-algebra/sums-commutative-semirings.lagda.md b/src/commutative-algebra/sums-commutative-semirings.lagda.md index 2a98643345..d640aa1973 100644 --- a/src/commutative-algebra/sums-commutative-semirings.lagda.md +++ b/src/commutative-algebra/sums-commutative-semirings.lagda.md @@ -21,7 +21,7 @@ open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types --- open import foundation.negated-equality +open import foundation.negated-equality open import foundation.type-arithmetic-cartesian-product-types open import foundation.unit-type open import foundation.universe-levels diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index 6f81df9d16..a04cd90f1e 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -490,11 +490,7 @@ module _ ( A) ( λ _ → unit-Commutative-Monoid M)) mul-finite-unit-Commutative-Monoid = - do - cA ← is-finite-type-Finite-Type A - mul-finite-count-Commutative-Monoid M A cA _ ∙ - mul-fin-unit-Commutative-Monoid M _ - where + let open do-syntax-trunc-Prop (is-unit-prop-Commutative-Monoid @@ -503,6 +499,10 @@ module _ ( M) ( A) ( λ _ → unit-Commutative-Monoid M))) + in do + cA ← is-finite-type-Finite-Type A + mul-finite-count-Commutative-Monoid M A cA _ ∙ + mul-fin-unit-Commutative-Monoid M _ ``` ### Products over a finite type are homotopy invariant @@ -518,7 +518,14 @@ module _ f ~ g → mul-finite-Commutative-Monoid M A f = mul-finite-Commutative-Monoid M A g htpy-mul-finite-Commutative-Monoid {f} {g} H = - do + let + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( mul-finite-Commutative-Monoid M A f) + ( mul-finite-Commutative-Monoid M A g)) + in do cA ← is-finite-type-Finite-Type A equational-reasoning mul-finite-Commutative-Monoid M A f @@ -528,13 +535,6 @@ module _ by htpy-mul-count-Commutative-Monoid M (type-Finite-Type A) cA H = mul-finite-Commutative-Monoid M A g by inv (mul-finite-count-Commutative-Monoid M A cA g) - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Commutative-Monoid M) - ( mul-finite-Commutative-Monoid M A f) - ( mul-finite-Commutative-Monoid M A g)) ``` ### Products over finite types are preserved by equivalences @@ -552,7 +552,14 @@ module _ mul-finite-Commutative-Monoid M A f = mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H) mul-equiv-finite-Commutative-Monoid f = - do + let + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( mul-finite-Commutative-Monoid M A f) + ( mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H))) + in do cA ← is-finite-type-Finite-Type A cB ← is-finite-type-Finite-Type B equational-reasoning @@ -577,13 +584,7 @@ module _ ( f) = mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H) by inv (mul-finite-count-Commutative-Monoid M B cB _) - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Commutative-Monoid M) - ( mul-finite-Commutative-Monoid M A f) - ( mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H))) + ``` ### Products over finite types distribute over coproducts @@ -604,7 +605,20 @@ module _ ( mul-finite-Commutative-Monoid M A (f ∘ inl)) ( mul-finite-Commutative-Monoid M B (f ∘ inr)) mul-coproduct-finite-Commutative-Monoid f = - do + let + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( mul-finite-Commutative-Monoid + ( M) + ( coproduct-Finite-Type A B) + ( f)) + ( mul-Commutative-Monoid + ( M) + ( mul-finite-Commutative-Monoid M A (f ∘ inl)) + ( mul-finite-Commutative-Monoid M B (f ∘ inr)))) + in do cA@(nA , Fin-nA≃A) ← is-finite-type-Finite-Type A cB@(nB , Fin-nB≃B) ← is-finite-type-Finite-Type B equational-reasoning @@ -681,19 +695,6 @@ module _ ( B) ( cB) ( f ∘ inr))) - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Commutative-Monoid M) - ( mul-finite-Commutative-Monoid - ( M) - ( coproduct-Finite-Type A B) - ( f)) - ( mul-Commutative-Monoid - ( M) - ( mul-finite-Commutative-Monoid M A (f ∘ inl)) - ( mul-finite-Commutative-Monoid M B (f ∘ inr)))) ``` ### Products distribute over dependent pair types @@ -836,7 +837,17 @@ module _ ( A) ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)) mul-Σ-finite-Commutative-Monoid f = - do + let + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid M) + ( mul-finite-Commutative-Monoid M (Σ-Finite-Type A B) (ind-Σ f)) + ( mul-finite-Commutative-Monoid + ( M) + ( A) + ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)))) + in do cA@(nA , Fin-nA≃A) ← is-finite-type-Finite-Type A equational-reasoning mul-finite-Commutative-Monoid M (Σ-Finite-Type A B) (ind-Σ f) @@ -872,16 +883,6 @@ module _ ( A) ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)) by inv (mul-finite-count-Commutative-Monoid M A cA _) - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Commutative-Monoid M) - ( mul-finite-Commutative-Monoid M (Σ-Finite-Type A B) (ind-Σ f)) - ( mul-finite-Commutative-Monoid - ( M) - ( A) - ( λ a → mul-finite-Commutative-Monoid M (B a) (f a)))) ``` ### Products over the unit type diff --git a/src/ring-theory/sums-semirings.lagda.md b/src/ring-theory/sums-semirings.lagda.md index 137967e3f0..9c33476171 100644 --- a/src/ring-theory/sums-semirings.lagda.md +++ b/src/ring-theory/sums-semirings.lagda.md @@ -192,7 +192,14 @@ module _ mul-Semiring R x (sum-finite-Semiring R A f) = sum-finite-Semiring R A (mul-Semiring R x ∘ f) left-distributive-mul-sum-finite-Semiring A x f = - do + let + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Semiring R) + ( mul-Semiring R x (sum-finite-Semiring R A f)) + ( sum-finite-Semiring R A (mul-Semiring R x ∘ f))) + in do cA ← is-finite-type-Finite-Type A equational-reasoning mul-Semiring R x (sum-finite-Semiring R A f) @@ -222,13 +229,6 @@ module _ ( f ∘ map-equiv-count cA) = sum-finite-Semiring R A (mul-Semiring R x ∘ f) by inv (mul-finite-count-Commutative-Monoid _ A cA _) - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Semiring R) - ( mul-Semiring R x (sum-finite-Semiring R A f)) - ( sum-finite-Semiring R A (mul-Semiring R x ∘ f))) right-distributive-mul-sum-finite-Semiring : {l2 : Level} (A : Finite-Type l2) → @@ -236,7 +236,14 @@ module _ mul-Semiring R (sum-finite-Semiring R A f) x = sum-finite-Semiring R A (mul-Semiring' R x ∘ f) right-distributive-mul-sum-finite-Semiring A f x = - do + let + open + do-syntax-trunc-Prop + ( Id-Prop + ( set-Semiring R) + ( mul-Semiring R (sum-finite-Semiring R A f) x) + ( sum-finite-Semiring R A (mul-Semiring' R x ∘ f))) + in do cA ← is-finite-type-Finite-Type A equational-reasoning mul-Semiring R (sum-finite-Semiring R A f) x @@ -266,13 +273,6 @@ module _ ( x) = sum-finite-Semiring R A (mul-Semiring' R x ∘ f) by inv (mul-finite-count-Commutative-Monoid _ A cA _) - where - open - do-syntax-trunc-Prop - ( Id-Prop - ( set-Semiring R) - ( mul-Semiring R (sum-finite-Semiring R A f) x) - ( sum-finite-Semiring R A (mul-Semiring' R x ∘ f))) ``` ### Interchange law of sums and addition in a semiring From 6f9d9b899d23266971429e73e4b7fa9652efcdd8 Mon Sep 17 00:00:00 2001 From: Louis Wasserman Date: Wed, 26 Mar 2025 14:41:35 -0700 Subject: [PATCH 66/66] make pre-commit --- .../products-of-tuples-of-elements-commutative-monoids.lagda.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md index a04cd90f1e..4ad9969f5e 100644 --- a/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-tuples-of-elements-commutative-monoids.lagda.md @@ -584,7 +584,6 @@ module _ ( f) = mul-finite-Commutative-Monoid M B (f ∘ map-inv-equiv H) by inv (mul-finite-count-Commutative-Monoid M B cB _) - ``` ### Products over finite types distribute over coproducts