diff --git a/src/foundation.lagda.md b/src/foundation.lagda.md index 4ebddac443d..64ea0afcd92 100644 --- a/src/foundation.lagda.md +++ b/src/foundation.lagda.md @@ -452,6 +452,7 @@ open import foundation.similarity-preserving-maps-large-similarity-relations pub open import foundation.similarity-subtypes public open import foundation.singleton-induction public open import foundation.singleton-subtypes public +open import foundation.singleton-subtypes-discrete-types public open import foundation.slice public open import foundation.small-maps public open import foundation.small-types public diff --git a/src/foundation/singleton-subtypes-discrete-types.lagda.md b/src/foundation/singleton-subtypes-discrete-types.lagda.md new file mode 100644 index 00000000000..02ef8ef27b5 --- /dev/null +++ b/src/foundation/singleton-subtypes-discrete-types.lagda.md @@ -0,0 +1,89 @@ +# Singleton subtypes of discrete types + +```agda +module foundation.singleton-subtypes-discrete-types where +``` + +
Imports + +```agda +open import foundation.action-on-identifications-functions +open import foundation.contractible-types +open import foundation.decidable-subtypes +open import foundation.dependent-pair-types +open import foundation.discrete-types +open import foundation.functoriality-coproduct-types +open import foundation.identity-types +open import foundation.sets +open import foundation.singleton-subtypes +open import foundation.universe-levels + +open import foundation-core.subtypes +open import foundation-core.transport-along-identifications +``` + +
+ +## Idea + +[Singleton subtypes](foundation.singleton-subtypes.md) on +[discrete types](foundation.discrete-types.md) are +[decidable subtypes](foundation.decidable-subtypes.md). + +## Properties + +### Any singleton subtype of a discrete type is decidable + +```agda +module _ + {l1 l2 : Level} + (XD@(X , decide-eq-X) : Discrete-Type l1) + (S : subtype l2 X) + (((x , x∈S) , is-center-x) : is-singleton-subtype S) + where + + is-decidable-is-singleton-subtype-Discrete-Type : is-decidable-subtype S + is-decidable-is-singleton-subtype-Discrete-Type y = + map-coproduct + ( λ x=y → tr (is-in-subtype S) x=y x∈S) + ( λ x≠y y∈S → x≠y (ap (inclusion-subtype S) (is-center-x (y , y∈S)))) + ( decide-eq-X x y) +``` + +### The standard decidable singleton subtype associated with an element of a discrete type + +```agda +module _ + {l : Level} + (XD@(X , decide-eq-X) : Discrete-Type l) + where + + decidable-standard-singleton-subtype-Discrete-Type : + X → decidable-subtype l X + decidable-standard-singleton-subtype-Discrete-Type y x = + ( x = y , + is-set-type-Discrete-Type XD x y , + decide-eq-X x y) +``` + +### The standard decidable singleton subtype is contractible + +```agda +module _ + {l : Level} + (XD@(X , decide-eq-X) : Discrete-Type l) + (x : X) + where + + is-contr-type-decidable-standard-singleton-subtype-Discrete-Type : + is-contr + ( type-decidable-subtype + ( decidable-standard-singleton-subtype-Discrete-Type XD x)) + is-contr-type-decidable-standard-singleton-subtype-Discrete-Type = + ( (x , refl) , + λ (y , x=y) → + eq-type-subtype + ( subtype-decidable-subtype + ( decidable-standard-singleton-subtype-Discrete-Type XD x)) + ( inv x=y)) +``` diff --git a/src/group-theory/invertible-elements-monoids.lagda.md b/src/group-theory/invertible-elements-monoids.lagda.md index d4afd9a796b..c9d8e58fc69 100644 --- a/src/group-theory/invertible-elements-monoids.lagda.md +++ b/src/group-theory/invertible-elements-monoids.lagda.md @@ -168,6 +168,9 @@ module _ is-invertible-element-Monoid M x pr2 (is-invertible-element-prop-Monoid x) = is-prop-is-invertible-element-Monoid x + + invertible-element-Monoid : UU l + invertible-element-Monoid = type-subtype is-invertible-element-prop-Monoid ``` ### Inverses are left/right inverses @@ -292,6 +295,11 @@ module _ left-unit-law-mul-Monoid M (unit-Monoid M) pr2 (pr2 is-invertible-element-unit-Monoid) = left-unit-law-mul-Monoid M (unit-Monoid M) + + invertible-element-unit-Monoid : + invertible-element-Monoid M + invertible-element-unit-Monoid = + ( unit-Monoid M , is-invertible-element-unit-Monoid) ``` ### Invertible elements are closed under multiplication @@ -350,6 +358,14 @@ module _ ( is-left-invertible-element-mul-Monoid x y ( is-left-invertible-is-invertible-element-Monoid M x H) ( is-left-invertible-is-invertible-element-Monoid M y K)) + + mul-invertible-element-Monoid : + invertible-element-Monoid M → + invertible-element-Monoid M → + invertible-element-Monoid M + mul-invertible-element-Monoid (x , is-inv-x) (y , is-inv-y) = + ( mul-Monoid M x y , + is-invertible-element-mul-Monoid x y is-inv-x is-inv-y) ``` ### The inverse of an invertible element is invertible @@ -367,6 +383,12 @@ module _ is-left-inverse-inv-is-invertible-element-Monoid M H pr2 (pr2 (is-invertible-element-inv-is-invertible-element-Monoid H)) = is-right-inverse-inv-is-invertible-element-Monoid M H + + invertible-element-inv-invertible-element-Monoid : + invertible-element-Monoid M → invertible-element-Monoid M + invertible-element-inv-invertible-element-Monoid (x , is-invertible-x) = + ( inv-is-invertible-element-Monoid M is-invertible-x , + is-invertible-element-inv-is-invertible-element-Monoid is-invertible-x) ``` ### An element is invertible if and only if multiplying by it is an equivalence @@ -400,25 +422,27 @@ module _ inv-is-invertible-element-is-equiv-mul-Monoid H = map-inv-is-equiv H (unit-Monoid M) - is-right-inverse-inv-is-invertible-element-is-equiv-mul-Monoid : - (H : is-equiv (mul-Monoid M x)) → - mul-Monoid M x (inv-is-invertible-element-is-equiv-mul-Monoid H) = - unit-Monoid M - is-right-inverse-inv-is-invertible-element-is-equiv-mul-Monoid H = - is-section-map-inv-is-equiv H (unit-Monoid M) - - is-left-inverse-inv-is-invertible-element-is-equiv-mul-Monoid : - (H : is-equiv (mul-Monoid M x)) → - mul-Monoid M (inv-is-invertible-element-is-equiv-mul-Monoid H) x = - unit-Monoid M - is-left-inverse-inv-is-invertible-element-is-equiv-mul-Monoid H = - is-injective-is-equiv H - ( ( inv (associative-mul-Monoid M _ _ _)) ∙ - ( ap - ( mul-Monoid' M x) - ( is-right-inverse-inv-is-invertible-element-is-equiv-mul-Monoid H)) ∙ - ( left-unit-law-mul-Monoid M x) ∙ - ( inv (right-unit-law-mul-Monoid M x))) + abstract + is-right-inverse-inv-is-invertible-element-is-equiv-mul-Monoid : + (H : is-equiv (mul-Monoid M x)) → + mul-Monoid M x (inv-is-invertible-element-is-equiv-mul-Monoid H) = + unit-Monoid M + is-right-inverse-inv-is-invertible-element-is-equiv-mul-Monoid H = + is-section-map-inv-is-equiv H (unit-Monoid M) + + is-left-inverse-inv-is-invertible-element-is-equiv-mul-Monoid : + (H : is-equiv (mul-Monoid M x)) → + mul-Monoid M (inv-is-invertible-element-is-equiv-mul-Monoid H) x = + unit-Monoid M + is-left-inverse-inv-is-invertible-element-is-equiv-mul-Monoid H = + is-injective-is-equiv H + ( ( inv (associative-mul-Monoid M _ _ _)) ∙ + ( ap + ( mul-Monoid' M x) + ( is-right-inverse-inv-is-invertible-element-is-equiv-mul-Monoid + ( H))) ∙ + ( left-unit-law-mul-Monoid M x) ∙ + ( inv (right-unit-law-mul-Monoid M x))) is-invertible-element-is-equiv-mul-Monoid : is-equiv (mul-Monoid M x) → is-invertible-element-Monoid M x @@ -434,25 +458,26 @@ module _ left-div-is-invertible-element-Monoid H = mul-Monoid M (inv-is-invertible-element-Monoid M H) - is-section-left-div-is-invertible-element-Monoid : - (H : is-invertible-element-Monoid M x) → - mul-Monoid M x ∘ left-div-is-invertible-element-Monoid H ~ id - is-section-left-div-is-invertible-element-Monoid H y = - ( inv (associative-mul-Monoid M _ _ _)) ∙ - ( ap - ( mul-Monoid' M y) - ( is-right-inverse-inv-is-invertible-element-Monoid M H)) ∙ - ( left-unit-law-mul-Monoid M y) - - is-retraction-left-div-is-invertible-element-Monoid : - (H : is-invertible-element-Monoid M x) → - left-div-is-invertible-element-Monoid H ∘ mul-Monoid M x ~ id - is-retraction-left-div-is-invertible-element-Monoid H y = - ( inv (associative-mul-Monoid M _ _ _)) ∙ - ( ap - ( mul-Monoid' M y) - ( is-left-inverse-inv-is-invertible-element-Monoid M H)) ∙ - ( left-unit-law-mul-Monoid M y) + abstract + is-section-left-div-is-invertible-element-Monoid : + (H : is-invertible-element-Monoid M x) → + mul-Monoid M x ∘ left-div-is-invertible-element-Monoid H ~ id + is-section-left-div-is-invertible-element-Monoid H y = + ( inv (associative-mul-Monoid M _ _ _)) ∙ + ( ap + ( mul-Monoid' M y) + ( is-right-inverse-inv-is-invertible-element-Monoid M H)) ∙ + ( left-unit-law-mul-Monoid M y) + + is-retraction-left-div-is-invertible-element-Monoid : + (H : is-invertible-element-Monoid M x) → + left-div-is-invertible-element-Monoid H ∘ mul-Monoid M x ~ id + is-retraction-left-div-is-invertible-element-Monoid H y = + ( inv (associative-mul-Monoid M _ _ _)) ∙ + ( ap + ( mul-Monoid' M y) + ( is-left-inverse-inv-is-invertible-element-Monoid M H)) ∙ + ( left-unit-law-mul-Monoid M y) is-equiv-mul-is-invertible-element-Monoid : is-invertible-element-Monoid M x → is-equiv (mul-Monoid M x) diff --git a/src/group-theory/products-of-finite-families-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-finite-families-of-elements-commutative-monoids.lagda.md index c7aa502734c..8bb6f872e2f 100644 --- a/src/group-theory/products-of-finite-families-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-finite-families-of-elements-commutative-monoids.lagda.md @@ -37,6 +37,7 @@ open import foundation.universal-property-propositional-truncation-into-sets open import foundation.universe-levels open import group-theory.commutative-monoids +open import group-theory.homomorphisms-commutative-monoids open import group-theory.products-of-finite-families-of-elements-commutative-semigroups open import group-theory.products-of-finite-sequences-of-elements-commutative-monoids @@ -781,3 +782,52 @@ module _ ( product-unit-finite-Commutative-Monoid M _))) ∙ ( right-unit-law-mul-Commutative-Monoid M _) ``` + +### Commutative monoid homomorphisms distribute over finite sums + +```agda +abstract + distributive-hom-product-finite-Commutative-Monoid : + {l1 l2 l3 : Level} (M : Commutative-Monoid l1) (N : Commutative-Monoid l2) + (φ : hom-Commutative-Monoid M N) (A : Finite-Type l3) + (u : type-Finite-Type A → type-Commutative-Monoid M) → + map-hom-Commutative-Monoid M N φ + ( product-finite-Commutative-Monoid M A u) = + product-finite-Commutative-Monoid N A (map-hom-Commutative-Monoid M N φ ∘ u) + distributive-hom-product-finite-Commutative-Monoid M N φ FA@(A , is-fin-A) u = + rec-trunc-Prop + ( Id-Prop + ( set-Commutative-Monoid N) + ( map-hom-Commutative-Monoid M N φ + ( product-finite-Commutative-Monoid M FA u)) + ( product-finite-Commutative-Monoid N FA + ( map-hom-Commutative-Monoid M N φ ∘ u))) + ( λ cA → + equational-reasoning + map-hom-Commutative-Monoid M N φ + ( product-finite-Commutative-Monoid M FA u) + = + map-hom-Commutative-Monoid M N φ + ( product-count-Commutative-Monoid M A cA u) + by + ap + ( map-hom-Commutative-Monoid M N φ) + ( eq-product-finite-product-count-Commutative-Monoid M FA cA u) + = + product-count-Commutative-Monoid N A cA + ( map-hom-Commutative-Monoid M N φ ∘ u) + by + distributive-hom-product-fin-sequence-type-Commutative-Monoid + ( M) + ( N) + ( φ) + ( _) + ( _) + = + product-finite-Commutative-Monoid N FA + ( map-hom-Commutative-Monoid M N φ ∘ u) + by + inv + ( eq-product-finite-product-count-Commutative-Monoid N FA cA _)) + ( is-fin-A) +``` diff --git a/src/group-theory/products-of-finite-sequences-of-elements-commutative-monoids.lagda.md b/src/group-theory/products-of-finite-sequences-of-elements-commutative-monoids.lagda.md index 788738eee70..646b956407f 100644 --- a/src/group-theory/products-of-finite-sequences-of-elements-commutative-monoids.lagda.md +++ b/src/group-theory/products-of-finite-sequences-of-elements-commutative-monoids.lagda.md @@ -315,6 +315,24 @@ hom-product-fin-sequence-type-Commutative-Monoid M n = product-unit-fin-sequence-type-Commutative-Monoid M n) ``` +### Commutative monoid homomorphisms distribute over the product operation + +```agda +abstract + distributive-hom-product-fin-sequence-type-Commutative-Monoid : + {l1 l2 : Level} (M : Commutative-Monoid l1) (N : Commutative-Monoid l2) + (φ : hom-Commutative-Monoid M N) + (n : ℕ) (u : fin-sequence-type-Commutative-Monoid M n) → + map-hom-Commutative-Monoid M N φ + ( product-fin-sequence-type-Commutative-Monoid M n u) = + product-fin-sequence-type-Commutative-Monoid N n + ( map-hom-Commutative-Monoid M N φ ∘ u) + distributive-hom-product-fin-sequence-type-Commutative-Monoid M N = + distributive-hom-product-fin-sequence-type-Monoid + ( monoid-Commutative-Monoid M) + ( monoid-Commutative-Monoid N) +``` + ## See also - [Products of finite families of elements in commutative monoids](group-theory.products-of-finite-families-of-elements-commutative-monoids.md) diff --git a/src/group-theory/products-of-finite-sequences-of-elements-groups.lagda.md b/src/group-theory/products-of-finite-sequences-of-elements-groups.lagda.md index aee61a6b936..2e58ced71ce 100644 --- a/src/group-theory/products-of-finite-sequences-of-elements-groups.lagda.md +++ b/src/group-theory/products-of-finite-sequences-of-elements-groups.lagda.md @@ -20,6 +20,7 @@ open import foundation.universe-levels open import foundation.whiskering-homotopies-composition open import group-theory.groups +open import group-theory.homomorphisms-groups open import group-theory.powers-of-elements-groups open import group-theory.products-of-finite-sequences-of-elements-monoids @@ -187,3 +188,19 @@ abstract product-constant-fin-sequence-type-Group G = product-constant-fin-sequence-type-Monoid (monoid-Group G) ``` + +### Group homomorphisms distribute over products + +```agda +abstract + distributive-hom-product-fin-sequence-type-Group : + {l1 l2 : Level} (G : Group l1) (H : Group l2) (φ : hom-Group G H) → + (n : ℕ) (u : fin-sequence-type-Group G n) → + map-hom-Group G H φ (product-fin-sequence-type-Group G n u) = + product-fin-sequence-type-Group H n (map-hom-Group G H φ ∘ u) + distributive-hom-product-fin-sequence-type-Group G H φ = + distributive-hom-product-fin-sequence-type-Monoid + ( monoid-Group G) + ( monoid-Group H) + ( hom-monoid-hom-Group G H φ) +``` diff --git a/src/group-theory/products-of-finite-sequences-of-elements-monoids.lagda.md b/src/group-theory/products-of-finite-sequences-of-elements-monoids.lagda.md index 7a56f01dcdb..6d5caabc975 100644 --- a/src/group-theory/products-of-finite-sequences-of-elements-monoids.lagda.md +++ b/src/group-theory/products-of-finite-sequences-of-elements-monoids.lagda.md @@ -19,6 +19,7 @@ open import foundation.unit-type open import foundation.universe-levels open import foundation.whiskering-homotopies-composition +open import group-theory.homomorphisms-monoids open import group-theory.monoids open import group-theory.powers-of-elements-monoids @@ -222,3 +223,21 @@ abstract ( product-constant-fin-sequence-type-Monoid M n x) ( refl) ``` + +### Monoid homomorphisms distribute over products + +```agda +abstract + distributive-hom-product-fin-sequence-type-Monoid : + {l1 l2 : Level} (M : Monoid l1) (N : Monoid l2) (φ : hom-Monoid M N) → + (n : ℕ) (u : fin-sequence-type-Monoid M n) → + map-hom-Monoid M N φ (product-fin-sequence-type-Monoid M n u) = + product-fin-sequence-type-Monoid N n (map-hom-Monoid M N φ ∘ u) + distributive-hom-product-fin-sequence-type-Monoid M N φ 0 u = + preserves-unit-hom-Monoid M N φ + distributive-hom-product-fin-sequence-type-Monoid M N φ (succ-ℕ n) u = + ( preserves-mul-hom-Monoid M N φ) ∙ + ( ap-mul-Monoid N + ( distributive-hom-product-fin-sequence-type-Monoid M N φ n (u ∘ inl)) + ( refl)) +``` diff --git a/src/group-theory/sums-of-finite-families-of-elements-abelian-groups.lagda.md b/src/group-theory/sums-of-finite-families-of-elements-abelian-groups.lagda.md index 10c35409ef8..be0da0d51c8 100644 --- a/src/group-theory/sums-of-finite-families-of-elements-abelian-groups.lagda.md +++ b/src/group-theory/sums-of-finite-families-of-elements-abelian-groups.lagda.md @@ -8,12 +8,14 @@ module group-theory.sums-of-finite-families-of-elements-abelian-groups where ```agda open import foundation.action-on-identifications-functions +open import foundation.contractible-types open import foundation.coproduct-types open import foundation.empty-types open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types +open import foundation.negation open import foundation.propositional-truncations open import foundation.sets open import foundation.type-arithmetic-cartesian-product-types @@ -21,11 +23,14 @@ open import foundation.unit-type open import foundation.universe-levels open import group-theory.abelian-groups +open import group-theory.homomorphisms-abelian-groups open import group-theory.products-of-finite-families-of-elements-commutative-monoids open import group-theory.sums-of-finite-sequences-of-elements-abelian-groups +open import univalent-combinatorics.complements-decidable-subtypes 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 @@ -79,7 +84,7 @@ module _ ```agda module _ {l : Level} (G : Ab l) - where + where abstract htpy-sum-finite-Ab : {l2 : Level} (A : Finite-Type l2) → @@ -94,7 +99,7 @@ module _ ```agda module _ {l : Level} (G : Ab l) - where + where abstract sum-zero-finite-Ab : {l2 : Level} (A : Finite-Type l2) → @@ -109,7 +114,7 @@ module _ module _ {l1 l2 l3 : Level} (G : Ab l1) (A : Finite-Type l2) (B : Finite-Type l3) (H : equiv-Finite-Type A B) - where + where abstract sum-equiv-finite-Ab : (f : type-Finite-Type A → type-Ab G) → @@ -127,7 +132,7 @@ module _ ```agda module _ {l1 l2 l3 : Level} (G : Ab l1) (A : Finite-Type l2) (B : Finite-Type l3) - where + where abstract distributive-sum-coproduct-finite-Ab : (f : @@ -150,7 +155,7 @@ module _ module _ {l1 l2 l3 : Level} (G : Ab l1) (A : Finite-Type l2) (B : type-Finite-Type A → Finite-Type l3) - where + where abstract sum-Σ-finite-Ab : (f : (a : type-Finite-Type A) → type-Finite-Type (B a) → type-Ab G) → @@ -166,7 +171,7 @@ module _ module _ {l1 l2 : Level} (G : Ab l1) (A : Finite-Type l2) (H : is-empty (type-Finite-Type A)) - where + where abstract eq-zero-sum-finite-is-empty-Ab : (f : type-Finite-Type A → type-Ab G) → @@ -197,7 +202,7 @@ eq-sum-finite-sum-count-Ab G = ```agda module _ {l1 l2 : Level} (G : Ab l1) (A : Finite-Type l2) - where + where abstract interchange-sum-add-finite-Ab : (f g : type-Finite-Type A → type-Ab G) → @@ -232,3 +237,78 @@ module _ by htpy-sum-finite-Ab G A (λ a → right-inverse-law-add-Ab G _) = zero-Ab G by sum-zero-finite-Ab G A) ``` + +### Sums that vanish on a decidable subtype + +```agda +module _ + {l1 l2 l3 : Level} (G : Ab l1) (A : Finite-Type l2) + (P : subset-Finite-Type l3 A) + where + + abstract + vanish-sum-decidable-subset-finite-Ab : + (f : type-Finite-Type A → type-Ab G) → + ( (a : type-Finite-Type A) → is-in-decidable-subtype P a → + is-zero-Ab G (f a)) → + sum-finite-Ab G A f = + sum-finite-Ab G + ( finite-type-complement-subset-Finite-Type A P) + ( f ∘ inclusion-complement-subset-Finite-Type A P) + vanish-sum-decidable-subset-finite-Ab = + vanish-product-decidable-subset-finite-Commutative-Monoid + ( commutative-monoid-Ab G) + ( A) + ( P) + + vanish-sum-complement-decidable-subset-finite-Ab : + (f : type-Finite-Type A → type-Ab G) → + ( (a : type-Finite-Type A) → ¬ (is-in-decidable-subtype P a) → + is-zero-Ab G (f a)) → + sum-finite-Ab G A f = + sum-finite-Ab G + ( finite-type-subset-Finite-Type A P) + ( f ∘ inclusion-subset-Finite-Type A P) + vanish-sum-complement-decidable-subset-finite-Ab = + vanish-product-complement-decidable-subset-finite-Commutative-Monoid + ( commutative-monoid-Ab G) + ( A) + ( P) +``` + +### Sums over contractible types + +```agda +module _ + {l1 l2 : Level} (G : Ab l1) (I : Finite-Type l2) + (is-contr-I : is-contr (type-Finite-Type I)) + (i : type-Finite-Type I) + where + + abstract + sum-finite-is-contr-Ab : + (f : type-Finite-Type I → type-Ab G) → + sum-finite-Ab G I f = f i + sum-finite-is-contr-Ab = + product-finite-is-contr-Commutative-Monoid + ( commutative-monoid-Ab G) + ( I) + ( is-contr-I) + ( i) +``` + +### Abelian group homomorphisms distribute over finite sums + +```agda +abstract + distributive-hom-sum-finite-Ab : + {l1 l2 l3 : Level} (G : Ab l1) (H : Ab l2) (φ : hom-Ab G H) + (I : Finite-Type l3) (u : type-Finite-Type I → type-Ab G) → + map-hom-Ab G H φ (sum-finite-Ab G I u) = + sum-finite-Ab H I (map-hom-Ab G H φ ∘ u) + distributive-hom-sum-finite-Ab G H φ = + distributive-hom-product-finite-Commutative-Monoid + ( commutative-monoid-Ab G) + ( commutative-monoid-Ab H) + ( hom-commutative-monoid-hom-Ab G H φ) +``` diff --git a/src/group-theory/sums-of-finite-sequences-of-elements-abelian-groups.lagda.md b/src/group-theory/sums-of-finite-sequences-of-elements-abelian-groups.lagda.md index e0436da8639..7059e3b434a 100644 --- a/src/group-theory/sums-of-finite-sequences-of-elements-abelian-groups.lagda.md +++ b/src/group-theory/sums-of-finite-sequences-of-elements-abelian-groups.lagda.md @@ -344,6 +344,21 @@ module _ ( neg-right-subtraction-Ab G _ _) ``` +### Abelian group homomorphisms distribute over sums + +```agda +abstract + distributive-hom-sum-fin-sequence-type-Ab : + {l1 l2 : Level} (G : Ab l1) (H : Ab l2) (φ : hom-Ab G H) → + (n : ℕ) (u : fin-sequence-type-Ab G n) → + map-hom-Ab G H φ (sum-fin-sequence-type-Ab G n u) = + sum-fin-sequence-type-Ab H n (map-hom-Ab G H φ ∘ u) + distributive-hom-sum-fin-sequence-type-Ab G H = + distributive-hom-product-fin-sequence-type-Group + ( group-Ab G) + ( group-Ab H) +``` + ## See also - [Products of finite families of elements in commutative monoids](group-theory.products-of-finite-families-of-elements-commutative-monoids.md) diff --git a/src/linear-algebra.lagda.md b/src/linear-algebra.lagda.md index dfe35b96461..bbfe7793428 100644 --- a/src/linear-algebra.lagda.md +++ b/src/linear-algebra.lagda.md @@ -7,6 +7,7 @@ module linear-algebra where open import linear-algebra.addition-linear-maps-left-modules-commutative-rings public open import linear-algebra.addition-linear-maps-left-modules-rings public +open import linear-algebra.algebra-of-square-matrices-on-commutative-rings public open import linear-algebra.bilinear-forms-real-vector-spaces public open import linear-algebra.bilinear-maps-left-modules-commutative-rings public open import linear-algebra.bilinear-maps-left-modules-rings public @@ -15,15 +16,19 @@ open import linear-algebra.cauchy-schwarz-inequality-real-inner-product-spaces p open import linear-algebra.complex-inner-product-spaces public open import linear-algebra.complex-vector-spaces public open import linear-algebra.conjugate-symmetric-sesquilinear-forms-complex-vector-spaces public -open import linear-algebra.constant-matrices public +open import linear-algebra.constant-grids public open import linear-algebra.constant-tuples public open import linear-algebra.dependent-products-left-modules-commutative-rings public open import linear-algebra.dependent-products-left-modules-rings public open import linear-algebra.dependent-products-real-vector-spaces public open import linear-algebra.dependent-products-vector-spaces public +open import linear-algebra.diagonal-grids-on-rings public open import linear-algebra.diagonal-matrices-on-rings public +open import linear-algebra.diagonals-of-square-matrices public open import linear-algebra.difference-linear-maps-left-modules-commutative-rings public open import linear-algebra.difference-linear-maps-left-modules-rings public +open import linear-algebra.dot-product-finite-sequences-in-commutative-rings public +open import linear-algebra.dot-product-finite-sequences-in-rings public open import linear-algebra.dot-product-standard-euclidean-vector-spaces public open import linear-algebra.duals-left-modules-commutative-rings public open import linear-algebra.finite-sequences-in-abelian-groups public @@ -40,7 +45,14 @@ open import linear-algebra.finite-sequences-in-semirings public open import linear-algebra.function-left-modules-rings public open import linear-algebra.function-real-vector-spaces public open import linear-algebra.function-vector-spaces public -open import linear-algebra.functoriality-matrices public +open import linear-algebra.functoriality-grids public +open import linear-algebra.general-linear-groups-finite-degree-rings public +open import linear-algebra.grids public +open import linear-algebra.grids-on-rings public +open import linear-algebra.identity-matrices-on-commutative-rings public +open import linear-algebra.identity-matrices-on-rings public +open import linear-algebra.indicator-finite-sequences-in-commutative-rings public +open import linear-algebra.indicator-finite-sequences-in-rings public open import linear-algebra.kernels-linear-maps-left-modules-commutative-rings public open import linear-algebra.kernels-linear-maps-left-modules-rings public open import linear-algebra.kernels-linear-maps-vector-spaces public @@ -61,8 +73,14 @@ open import linear-algebra.linear-maps-left-modules-rings public open import linear-algebra.linear-maps-vector-spaces public open import linear-algebra.linear-spans-left-modules-rings public open import linear-algebra.matrices public +open import linear-algebra.matrices-on-commutative-rings public open import linear-algebra.matrices-on-rings public -open import linear-algebra.multiplication-matrices public +open import linear-algebra.multiplication-diagonal-matrices-rings public +open import linear-algebra.multiplication-grids public +open import linear-algebra.multiplication-matrices-on-commutative-rings public +open import linear-algebra.multiplication-matrices-on-rings public +open import linear-algebra.multiplication-square-matrices-on-commutative-rings public +open import linear-algebra.multiplication-square-matrices-on-rings public open import linear-algebra.negation-linear-maps-left-modules-rings public open import linear-algebra.normed-complex-vector-spaces public open import linear-algebra.normed-real-vector-spaces public @@ -77,21 +95,29 @@ open import linear-algebra.real-inner-product-spaces public open import linear-algebra.real-inner-product-spaces-are-normed public open import linear-algebra.real-vector-spaces public open import linear-algebra.right-modules-rings public +open import linear-algebra.rings-of-square-matrices-on-rings public +open import linear-algebra.scalar-multiplication-grids public open import linear-algebra.scalar-multiplication-linear-maps-left-modules-commutative-rings public open import linear-algebra.scalar-multiplication-linear-maps-vector-spaces public -open import linear-algebra.scalar-multiplication-matrices public open import linear-algebra.scalar-multiplication-tuples public open import linear-algebra.scalar-multiplication-tuples-on-rings public open import linear-algebra.seminormed-complex-vector-spaces public open import linear-algebra.seminormed-real-vector-spaces public open import linear-algebra.sesquilinear-forms-complex-vector-spaces public +open import linear-algebra.square-matrices public +open import linear-algebra.square-matrices-on-commutative-rings public +open import linear-algebra.square-matrices-on-rings public open import linear-algebra.standard-euclidean-inner-product-spaces public open import linear-algebra.standard-euclidean-vector-spaces public open import linear-algebra.subsets-left-modules-commutative-rings public open import linear-algebra.subsets-left-modules-rings public open import linear-algebra.subspaces-vector-spaces public +open import linear-algebra.sums-of-finite-sequences-of-elements-left-modules-commutative-rings public +open import linear-algebra.sums-of-finite-sequences-of-elements-left-modules-rings public open import linear-algebra.sums-of-finite-sequences-of-elements-normed-real-vector-spaces public open import linear-algebra.symmetric-bilinear-forms-real-vector-spaces public +open import linear-algebra.symmetric-matrices public +open import linear-algebra.transposition-grids public open import linear-algebra.transposition-matrices public open import linear-algebra.tuples-on-commutative-monoids public open import linear-algebra.tuples-on-commutative-rings public diff --git a/src/linear-algebra/algebra-of-square-matrices-on-commutative-rings.lagda.md b/src/linear-algebra/algebra-of-square-matrices-on-commutative-rings.lagda.md new file mode 100644 index 00000000000..1f8af20a315 --- /dev/null +++ b/src/linear-algebra/algebra-of-square-matrices-on-commutative-rings.lagda.md @@ -0,0 +1,78 @@ +# The algebra of square matrices on commutative rings + +```agda +module linear-algebra.algebra-of-square-matrices-on-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.algebras-commutative-rings +open import commutative-algebra.associative-algebras-commutative-rings +open import commutative-algebra.commutative-rings +open import commutative-algebra.unital-associative-algebras-commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.dependent-pair-types +open import foundation.universe-levels + +open import group-theory.monoids + +open import linear-algebra.identity-matrices-on-commutative-rings +open import linear-algebra.multiplication-square-matrices-on-commutative-rings +open import linear-algebra.square-matrices-on-commutative-rings + +open import ring-theory.rings +``` + +
+ +## Idea + +[Square matrices](linear-algebra.square-matrices-on-commutative-rings.md) on +[commutative rings](commutative-algebra.commutative-rings.md) form a +[unital associative algebra](commutative-algebra.unital-associative-algebras-commutative-rings.md) +under +[matrix multiplication](linear-algebra.multiplication-square-matrices-on-commutative-rings.md). + +## Definition + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + where + + algebra-square-matrix-Commutative-Ring : algebra-Commutative-Ring l R + algebra-square-matrix-Commutative-Ring = + ( left-module-square-matrix-Commutative-Ring R n , + bilinear-map-mul-square-matrix-Commutative-Ring R n) + + associative-algebra-square-matrix-Commutative-Ring : + associative-algebra-Commutative-Ring l R + associative-algebra-square-matrix-Commutative-Ring = + ( algebra-square-matrix-Commutative-Ring , + associative-mul-square-matrix-Commutative-Ring R n) + + unital-associative-algebra-square-matrix-Commutative-Ring : + unital-associative-algebra-Commutative-Ring l R + unital-associative-algebra-square-matrix-Commutative-Ring = + ( associative-algebra-square-matrix-Commutative-Ring , + id-matrix-Commutative-Ring R n , + left-unit-law-mul-square-matrix-Commutative-Ring R n , + right-unit-law-mul-square-matrix-Commutative-Ring R n) + + monoid-mul-square-matrix-Commutative-Ring : Monoid l + monoid-mul-square-matrix-Commutative-Ring = + monoid-mul-unital-associative-algebra-Commutative-Ring + ( R) + ( unital-associative-algebra-square-matrix-Commutative-Ring) + + ring-square-matrix-Commutative-Ring : Ring l + ring-square-matrix-Commutative-Ring = + ring-unital-associative-algebra-Commutative-Ring + ( R) + ( unital-associative-algebra-square-matrix-Commutative-Ring) +``` diff --git a/src/linear-algebra/constant-grids.lagda.md b/src/linear-algebra/constant-grids.lagda.md new file mode 100644 index 00000000000..c37831fbf7d --- /dev/null +++ b/src/linear-algebra/constant-grids.lagda.md @@ -0,0 +1,30 @@ +# Constant grids + +```agda +module linear-algebra.constant-grids where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.constant-tuples +open import linear-algebra.grids +``` + +
+ +## Idea + +Constant grids are [grids](linear-algebra.grids.md) in which all elements are +the same. + +## Definition + +```agda +constant-grid : {l : Level} {A : UU l} {m n : ℕ} → A → grid A m n +constant-grid a = constant-tuple (constant-tuple a) +``` diff --git a/src/linear-algebra/constant-matrices.lagda.md b/src/linear-algebra/constant-matrices.lagda.md deleted file mode 100644 index e939ea23785..00000000000 --- a/src/linear-algebra/constant-matrices.lagda.md +++ /dev/null @@ -1,30 +0,0 @@ -# Constant matrices - -```agda -module linear-algebra.constant-matrices where -``` - -
Imports - -```agda -open import elementary-number-theory.natural-numbers - -open import foundation.universe-levels - -open import linear-algebra.constant-tuples -open import linear-algebra.matrices -``` - -
- -## Idea - -Constant matrices are [matrices](linear-algebra.matrices.md) in which all -elements are the same. - -## Definition - -```agda -constant-matrix : {l : Level} {A : UU l} {m n : ℕ} → A → matrix A m n -constant-matrix a = constant-tuple (constant-tuple a) -``` diff --git a/src/linear-algebra/diagonal-grids-on-rings.lagda.md b/src/linear-algebra/diagonal-grids-on-rings.lagda.md new file mode 100644 index 00000000000..1b773befdee --- /dev/null +++ b/src/linear-algebra/diagonal-grids-on-rings.lagda.md @@ -0,0 +1,58 @@ +# Diagonal grids on rings + +```agda +module linear-algebra.diagonal-grids-on-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.constant-tuples +open import linear-algebra.grids-on-rings +open import linear-algebra.tuples-on-rings + +open import lists.functoriality-tuples +open import lists.tuples + +open import ring-theory.rings +``` + +
+ +## Definitions + +A {{#concept "diagonal grid" Agda=diagonal-grid-Ring}} is a +[grid](linear-algebra.grids-on-rings.md) whose only nonzero elements are on the +diagonal of the grid. + +### Diagonal matrices + +```agda +module _ + {l : Level} (R : Ring l) + where + + diagonal-grid-Ring : (n : ℕ) → tuple-Ring R n → grid-Ring R n n + diagonal-grid-Ring zero-ℕ v = empty-tuple + diagonal-grid-Ring (succ-ℕ n) (x ∷ v) = + ( x ∷ zero-tuple-Ring R) ∷ + ( map-tuple (λ v' → zero-Ring R ∷ v') (diagonal-grid-Ring n v)) +``` + +### Scalar matrices + +```agda +module _ + {l : Level} (R : Ring l) + where + + scalar-grid-Ring : (n : ℕ) → type-Ring R → grid-Ring R n n + scalar-grid-Ring n x = diagonal-grid-Ring R n (constant-tuple x) + + identity-grid-Ring : (n : ℕ) → grid-Ring R n n + identity-grid-Ring n = scalar-grid-Ring n (one-Ring R) +``` diff --git a/src/linear-algebra/diagonal-matrices-on-rings.lagda.md b/src/linear-algebra/diagonal-matrices-on-rings.lagda.md index 45aecbdc7e1..3c95ce9a6df 100644 --- a/src/linear-algebra/diagonal-matrices-on-rings.lagda.md +++ b/src/linear-algebra/diagonal-matrices-on-rings.lagda.md @@ -1,6 +1,8 @@ -# Diagonal matrices on rings +# Diagonal rings on matrices ```agda +{-# OPTIONS --lossy-unification #-} + module linear-algebra.diagonal-matrices-on-rings where ``` @@ -9,51 +11,233 @@ module linear-algebra.diagonal-matrices-on-rings where ```agda open import elementary-number-theory.natural-numbers +open import foundation.action-on-identifications-functions +open import foundation.binary-homotopies +open import foundation.coproduct-types +open import foundation.decidable-propositions +open import foundation.dependent-pair-types +open import foundation.dependent-products-propositions +open import foundation.empty-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.propositions +open import foundation.sets +open import foundation.subtypes +open import foundation.transport-along-identifications open import foundation.universe-levels -open import linear-algebra.constant-tuples -open import linear-algebra.matrices-on-rings -open import linear-algebra.tuples-on-rings - -open import lists.functoriality-tuples -open import lists.tuples +open import linear-algebra.diagonals-of-square-matrices +open import linear-algebra.finite-sequences-in-rings +open import linear-algebra.square-matrices-on-rings +open import linear-algebra.symmetric-matrices +open import linear-algebra.transposition-matrices open import ring-theory.rings + +open import univalent-combinatorics.equality-standard-finite-types +open import univalent-combinatorics.standard-finite-types ``` -## Definitions +## Idea A -{{#concept "diagonal matrix" Agda=diagonal-matrix-Ring WD="diagonal matrix" WDID=Q332791}} -is a [matrix](linear-algebra.matrices.md) whose only nonzero elements are on the -diagonal of the matrix. +{{#concept "diagonal matrix" Disambiguation="on a ring" WD="diagonal matrix" WDID=Q332791 Agda=diagonal-matrix-Ring}} +on a [ring](ring-theory.rings.md) is a +[square matrix](linear-algebra.square-matrices-on-rings.md) `A` where if `i` is +[not equal to](foundation.negated-equality.md) `j`, then `Aᵢⱼ` is zero. + +## Definition + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + is-diagonal-prop-square-matrix-Ring : square-matrix-Ring R n → Prop l + is-diagonal-prop-square-matrix-Ring A = + Π-Prop + ( Fin n) + ( λ i → + Π-Prop (Fin n) (λ j → nonequal-Prop i j ⇒ is-zero-ring-Prop R (A i j))) + + is-diagonal-square-matrix-Ring : square-matrix-Ring R n → UU l + is-diagonal-square-matrix-Ring = + is-in-subtype is-diagonal-prop-square-matrix-Ring -### Diagonal matrices + diagonal-matrix-Ring : UU l + diagonal-matrix-Ring = type-subtype is-diagonal-prop-square-matrix-Ring + + matrix-diagonal-matrix-Ring : diagonal-matrix-Ring → square-matrix-Ring R n + matrix-diagonal-matrix-Ring = pr1 +``` + +### Constructing a diagonal matrix from the finite sequence of elements on the diagonal ```agda module _ - {l : Level} (R : Ring l) + {l : Level} + (R : Ring l) + (n : ℕ) where - diagonal-matrix-Ring : (n : ℕ) → tuple-Ring R n → matrix-Ring R n n - diagonal-matrix-Ring zero-ℕ v = empty-tuple - diagonal-matrix-Ring (succ-ℕ n) (x ∷ v) = - ( x ∷ zero-tuple-Ring R) ∷ - ( map-tuple (λ v' → zero-Ring R ∷ v') (diagonal-matrix-Ring n v)) + matrix-from-diagonal-fin-sequence-type-Ring : + fin-sequence-type-Ring R n → square-matrix-Ring R n + matrix-from-diagonal-fin-sequence-type-Ring u i j = + rec-coproduct + ( λ i=j → u i) + ( λ i≠j → zero-Ring R) + ( has-decidable-equality-Fin n i j) ``` -### Scalar matrices +## Properties + +### A matrix constructed from its diagonal is diagonal ```agda module _ - {l : Level} (R : Ring l) + {l : Level} + (R : Ring l) + (n : ℕ) where - scalar-matrix-Ring : (n : ℕ) → type-Ring R → matrix-Ring R n n - scalar-matrix-Ring n x = diagonal-matrix-Ring R n (constant-tuple x) + abstract + is-diagonal-matrix-from-diagonal-fin-sequence-type-Ring : + (u : fin-sequence-type-Ring R n) → + is-diagonal-square-matrix-Ring R n + ( matrix-from-diagonal-fin-sequence-type-Ring R n u) + is-diagonal-matrix-from-diagonal-fin-sequence-type-Ring u i j i≠j = + ap + ( rec-coproduct _ _) + ( eq-is-prop' (is-prop-is-decidable (is-set-Fin n i j)) _ (inr i≠j)) + + diagonal-matrix-fin-sequence-type-Ring : + (u : fin-sequence-type-Ring R n) → + diagonal-matrix-Ring R n + diagonal-matrix-fin-sequence-type-Ring u = + ( matrix-from-diagonal-fin-sequence-type-Ring R n u , + is-diagonal-matrix-from-diagonal-fin-sequence-type-Ring u) +``` + +### The diagonal of a matrix constructed from its diagonal is the original sequence + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where - identity-matrix-Ring : (n : ℕ) → matrix-Ring R n n - identity-matrix-Ring n = scalar-matrix-Ring n (one-Ring R) + abstract + htpy-diagonal-matrix-from-diagonal-fin-sequence-type-Ring : + (u : fin-sequence-type-Ring R n) → + diagonal-square-matrix n + ( matrix-from-diagonal-fin-sequence-type-Ring R n u) ~ + u + htpy-diagonal-matrix-from-diagonal-fin-sequence-type-Ring u i = + ap + ( rec-coproduct _ _) + ( eq-is-prop' (is-prop-is-decidable (is-set-Fin n i i)) _ (inl refl)) + + diagonal-matrix-from-diagonal-fin-sequence-type-Ring : + (u : fin-sequence-type-Ring R n) → + diagonal-square-matrix n + ( matrix-from-diagonal-fin-sequence-type-Ring R n u) = + u + diagonal-matrix-from-diagonal-fin-sequence-type-Ring u = + eq-htpy (htpy-diagonal-matrix-from-diagonal-fin-sequence-type-Ring u) +``` + +### If a matrix is diagonal, it is equal to the diagonal matrix constructed from its diagonal + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + (A : square-matrix-Ring R n) + (D : is-diagonal-square-matrix-Ring R n A) + where + + abstract + htpy-diagonal-matrix-diagonal-square-matrix-Ring : + binary-htpy + ( matrix-from-diagonal-fin-sequence-type-Ring R n + ( diagonal-square-matrix n A)) + ( A) + htpy-diagonal-matrix-diagonal-square-matrix-Ring i j + with has-decidable-equality-Fin n i j + ... | inl i=j = ap (A i) i=j + ... | inr i≠j = inv (D i j i≠j) + + diagonal-matrix-diagonal-square-matrix-Ring : + matrix-from-diagonal-fin-sequence-type-Ring R n + ( diagonal-square-matrix n A) = + A + diagonal-matrix-diagonal-square-matrix-Ring = + eq-binary-htpy _ _ htpy-diagonal-matrix-diagonal-square-matrix-Ring +``` + +### The type of diagonal `n × n` matrices is equivalent to the type of finite sequences of length `n` + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + is-equiv-matrix-from-diagonal-fin-sequence-type-Ring : + is-equiv + ( diagonal-matrix-fin-sequence-type-Ring R n) + is-equiv-matrix-from-diagonal-fin-sequence-type-Ring = + is-equiv-is-invertible + ( diagonal-square-matrix n ∘ pr1) + ( λ (A , D) → + eq-type-subtype + ( is-diagonal-prop-square-matrix-Ring R n) + ( diagonal-matrix-diagonal-square-matrix-Ring R n A D)) + ( diagonal-matrix-from-diagonal-fin-sequence-type-Ring R n) + + equiv-diagonal-matrix-fin-sequence-type-Ring : + fin-sequence-type-Ring R n ≃ diagonal-matrix-Ring R n + equiv-diagonal-matrix-fin-sequence-type-Ring = + ( diagonal-matrix-fin-sequence-type-Ring R n , + is-equiv-matrix-from-diagonal-fin-sequence-type-Ring) +``` + +### The transposition of a diagonal matrix is the diagonal matrix + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where abstract + + is-symmetric-is-diagonal-square-matrix-Ring : + (M : square-matrix-Ring R n) → + is-diagonal-square-matrix-Ring R n M → is-symmetric-square-matrix n M + is-symmetric-is-diagonal-square-matrix-Ring M H i j + with has-decidable-equality-Fin n i j + ... | inl i=j = + tr (λ k → M k i = M i k) i=j refl + ... | inr i≠j = + H j i (is-symmetric-nonequal i j i≠j) ∙ inv (H i j i≠j) + + is-symmetric-matrix-from-diagonal-fin-sequence-type-Ring : + (d : fin-sequence-type-Ring R n) → + is-symmetric-square-matrix n + ( matrix-from-diagonal-fin-sequence-type-Ring R n d) + is-symmetric-matrix-from-diagonal-fin-sequence-type-Ring d = + is-symmetric-is-diagonal-square-matrix-Ring + ( matrix-from-diagonal-fin-sequence-type-Ring R n d) + ( is-diagonal-matrix-from-diagonal-fin-sequence-type-Ring R n d) ``` diff --git a/src/linear-algebra/diagonals-of-square-matrices.lagda.md b/src/linear-algebra/diagonals-of-square-matrices.lagda.md new file mode 100644 index 00000000000..5d5c55c0c43 --- /dev/null +++ b/src/linear-algebra/diagonals-of-square-matrices.lagda.md @@ -0,0 +1,35 @@ +# Diagonals of square matrices + +```agda +module linear-algebra.diagonals-of-square-matrices where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.square-matrices + +open import lists.finite-sequences +``` + +
+ +## Idea + +The +{{#concept "diagonal" Disambiguation="of a square matrix" WD="diagonal of a matrix" WDID=Q77966258 Agda=diagonal-square-matrix}} +of an `n × n` [square matrix](linear-algebra.square-matrices.md) `A` is the +[finite sequence](lists.finite-sequences.md) of length `n` defined by +`dᵢ = Aᵢᵢ`. + +## Definition + +```agda +diagonal-square-matrix : + {l : Level} {A : UU l} (n : ℕ) → square-matrix A n → fin-sequence A n +diagonal-square-matrix n A i = A i i +``` diff --git a/src/linear-algebra/dot-product-finite-sequences-in-commutative-rings.lagda.md b/src/linear-algebra/dot-product-finite-sequences-in-commutative-rings.lagda.md new file mode 100644 index 00000000000..3bb5f3c9d2a --- /dev/null +++ b/src/linear-algebra/dot-product-finite-sequences-in-commutative-rings.lagda.md @@ -0,0 +1,60 @@ +# The dot product of finite sequences in commutative rings + +```agda +module linear-algebra.dot-product-finite-sequences-in-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings +open import commutative-algebra.sums-of-finite-sequences-of-elements-commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.identity-types +open import foundation.universe-levels + +open import linear-algebra.dot-product-finite-sequences-in-rings +open import linear-algebra.finite-sequences-in-commutative-rings +``` + +
+ +## Idea + +The +{{#concept "dot product" Disambiguation="of finite sequences in commutative rings" Agda=dot-product-fin-sequence-type-Commutative-Ring}} +of two +[finite sequences](linear-algebra.finite-sequences-in-commutative-rings.md) `u` +and `v` in a [commutative](commutative-algebra.commutative-rings.md) is the +[sum](commutative-algebra.sums-of-finite-sequences-of-elements-commutative-rings.md) +`∑ᵢ uᵢvᵢ`. + +## Definition + +```agda +dot-product-fin-sequence-type-Commutative-Ring : + {l : Level} (R : Commutative-Ring l) (n : ℕ) → + fin-sequence-type-Commutative-Ring R n → + fin-sequence-type-Commutative-Ring R n → + type-Commutative-Ring R +dot-product-fin-sequence-type-Commutative-Ring R = + dot-product-fin-sequence-type-Ring (ring-Commutative-Ring R) +``` + +## Properties + +### The dot product is symmetric + +```agda +abstract + symmetric-dot-product-fin-sequence-type-Commutative-Ring : + {l : Level} (R : Commutative-Ring l) (n : ℕ) + (u v : fin-sequence-type-Commutative-Ring R n) → + dot-product-fin-sequence-type-Commutative-Ring R n u v = + dot-product-fin-sequence-type-Commutative-Ring R n v u + symmetric-dot-product-fin-sequence-type-Commutative-Ring R n u v = + htpy-sum-fin-sequence-type-Commutative-Ring R n + ( λ i → commutative-mul-Commutative-Ring R (u i) (v i)) +``` diff --git a/src/linear-algebra/dot-product-finite-sequences-in-rings.lagda.md b/src/linear-algebra/dot-product-finite-sequences-in-rings.lagda.md new file mode 100644 index 00000000000..8bc4837c831 --- /dev/null +++ b/src/linear-algebra/dot-product-finite-sequences-in-rings.lagda.md @@ -0,0 +1,38 @@ +# The dot product of finite sequences in rings + +```agda +module linear-algebra.dot-product-finite-sequences-in-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.finite-sequences-in-rings + +open import ring-theory.rings +open import ring-theory.sums-of-finite-sequences-of-elements-rings +``` + +
+ +## Idea + +The +{{#concept "dot product" Disambiguation="of finite sequences in rings" Agda=dot-product-fin-sequence-type-Ring}} +of two [finite sequences](linear-algebra.finite-sequences-in-rings.md) `u` and +`v` in a [ring](ring-theory.rings.md) is the +[sum](ring-theory.sums-of-finite-sequences-of-elements-rings.md) `∑ᵢ uᵢvᵢ`. + +## Definition + +```agda +dot-product-fin-sequence-type-Ring : + {l : Level} (R : Ring l) (n : ℕ) → + fin-sequence-type-Ring R n → fin-sequence-type-Ring R n → type-Ring R +dot-product-fin-sequence-type-Ring R n u v = + sum-fin-sequence-type-Ring R n (λ i → mul-Ring R (u i) (v i)) +``` diff --git a/src/linear-algebra/finite-sequences-in-commutative-rings.lagda.md b/src/linear-algebra/finite-sequences-in-commutative-rings.lagda.md index bc58a7c70fc..418fc028225 100644 --- a/src/linear-algebra/finite-sequences-in-commutative-rings.lagda.md +++ b/src/linear-algebra/finite-sequences-in-commutative-rings.lagda.md @@ -1,6 +1,8 @@ # Finite sequences in commutative rings ```agda +{-# OPTIONS --lossy-unification #-} + module linear-algebra.finite-sequences-in-commutative-rings where ``` @@ -8,19 +10,24 @@ module linear-algebra.finite-sequences-in-commutative-rings where ```agda open import commutative-algebra.commutative-rings +open import commutative-algebra.function-commutative-rings open import elementary-number-theory.natural-numbers +open import foundation.homotopies open import foundation.identity-types 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 group-theory.sums-of-finite-sequences-of-elements-abelian-groups open import linear-algebra.finite-sequences-in-rings +open import linear-algebra.left-modules-commutative-rings +open import linear-algebra.sums-of-finite-sequences-of-elements-left-modules-commutative-rings + +open import lists.finite-sequences + +open import univalent-combinatorics.standard-finite-types ``` @@ -68,6 +75,27 @@ module _ snoc-fin-sequence-type-Ring (ring-Commutative-Ring R) ``` +### The left module of finite sequences in a commutative ring + +```agda +module _ + {l : Level} (R : Commutative-Ring l) + where + + left-module-fin-sequence-Commutative-Ring : + (n : ℕ) → left-module-Commutative-Ring l R + left-module-fin-sequence-Commutative-Ring n = + left-module-function-Commutative-Ring R (Fin n) + + scalar-mul-fin-sequence-type-Commutative-Ring : + (n : ℕ) → + type-Commutative-Ring R → fin-sequence-type-Commutative-Ring R n → + fin-sequence-type-Commutative-Ring R n + scalar-mul-fin-sequence-type-Commutative-Ring = + scalar-mul-fin-sequence-type-Ring + ( ring-Commutative-Ring R) +``` + ### The zero finite sequence in a commutative ring ```agda @@ -203,24 +231,28 @@ module _ {l : Level} (R : Commutative-Ring l) where - semigroup-fin-sequence-type-Commutative-Ring : ℕ → Semigroup l - semigroup-fin-sequence-type-Commutative-Ring = - semigroup-fin-sequence-type-Ring (ring-Commutative-Ring R) - - monoid-fin-sequence-type-Commutative-Ring : ℕ → Monoid l - monoid-fin-sequence-type-Commutative-Ring = - monoid-fin-sequence-type-Ring (ring-Commutative-Ring R) - - commutative-monoid-fin-sequence-type-Commutative-Ring : - ℕ → Commutative-Monoid l - commutative-monoid-fin-sequence-type-Commutative-Ring = - commutative-monoid-fin-sequence-type-Ring (ring-Commutative-Ring R) + ab-fin-sequence-type-Commutative-Ring : ℕ → Ab l + ab-fin-sequence-type-Commutative-Ring n = + ab-left-module-Commutative-Ring + ( R) + ( left-module-fin-sequence-Commutative-Ring R n) +``` - group-fin-sequence-type-Commutative-Ring : ℕ → Group l - group-fin-sequence-type-Commutative-Ring = - group-fin-sequence-type-Ring (ring-Commutative-Ring R) +### Coordinates of sequence sums - ab-fin-sequence-type-Commutative-Ring : ℕ → Ab l - ab-fin-sequence-type-Commutative-Ring = - ab-fin-sequence-type-Ring (ring-Commutative-Ring R) +```agda +abstract + coordinate-sum-fin-sequence-fin-sequence-type-Commutative-Ring : + {l : Level} (R : Commutative-Ring l) (m n : ℕ) (i : Fin n) + (v : fin-sequence (fin-sequence-type-Commutative-Ring R n) m) → + sum-fin-sequence-type-left-module-Commutative-Ring + ( R) + ( left-module-fin-sequence-Commutative-Ring R n) + ( m) + ( v) + ( i) = + sum-fin-sequence-type-Ab (ab-Commutative-Ring R) m (λ j → v j i) + coordinate-sum-fin-sequence-fin-sequence-type-Commutative-Ring R = + coordinate-sum-fin-sequence-fin-sequence-type-Ring + ( ring-Commutative-Ring R) ``` diff --git a/src/linear-algebra/finite-sequences-in-euclidean-domains.lagda.md b/src/linear-algebra/finite-sequences-in-euclidean-domains.lagda.md index 2731e775d88..60446bf841c 100644 --- a/src/linear-algebra/finite-sequences-in-euclidean-domains.lagda.md +++ b/src/linear-algebra/finite-sequences-in-euclidean-domains.lagda.md @@ -21,6 +21,7 @@ open import group-theory.monoids open import group-theory.semigroups open import linear-algebra.finite-sequences-in-commutative-rings +open import linear-algebra.left-modules-commutative-rings open import lists.finite-sequences open import lists.functoriality-finite-sequences @@ -207,32 +208,17 @@ module _ ( commutative-ring-Euclidean-Domain R) ``` -### The abelian group of pointwise addition +### The left module of finite sequences on a Euclidean domain ```agda module _ {l : Level} (R : Euclidean-Domain l) where - semigroup-fin-sequence-type-Euclidean-Domain : ℕ → Semigroup l - semigroup-fin-sequence-type-Euclidean-Domain = - semigroup-fin-sequence-type-Commutative-Ring - ( commutative-ring-Euclidean-Domain R) - - monoid-fin-sequence-type-Euclidean-Domain : ℕ → Monoid l - monoid-fin-sequence-type-Euclidean-Domain = - monoid-fin-sequence-type-Commutative-Ring - ( commutative-ring-Euclidean-Domain R) - - commutative-monoid-fin-sequence-type-Euclidean-Domain : - ℕ → Commutative-Monoid l - commutative-monoid-fin-sequence-type-Euclidean-Domain = - commutative-monoid-fin-sequence-type-Commutative-Ring - ( commutative-ring-Euclidean-Domain R) - - group-fin-sequence-type-Euclidean-Domain : ℕ → Group l - group-fin-sequence-type-Euclidean-Domain = - group-fin-sequence-type-Commutative-Ring + left-module-fin-sequence-type-Euclidean-Domain : + ℕ → left-module-Commutative-Ring l (commutative-ring-Euclidean-Domain R) + left-module-fin-sequence-type-Euclidean-Domain = + left-module-fin-sequence-Commutative-Ring ( commutative-ring-Euclidean-Domain R) ab-fin-sequence-type-Euclidean-Domain : ℕ → Ab l diff --git a/src/linear-algebra/finite-sequences-in-rings.lagda.md b/src/linear-algebra/finite-sequences-in-rings.lagda.md index 77f9dceacf0..822388f64ce 100644 --- a/src/linear-algebra/finite-sequences-in-rings.lagda.md +++ b/src/linear-algebra/finite-sequences-in-rings.lagda.md @@ -9,11 +9,10 @@ module linear-algebra.finite-sequences-in-rings where ```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.function-types open import foundation.identity-types +open import foundation.unit-type open import foundation.unital-binary-operations open import foundation.universe-levels @@ -22,10 +21,12 @@ open import group-theory.commutative-monoids open import group-theory.groups open import group-theory.monoids open import group-theory.semigroups +open import group-theory.sums-of-finite-sequences-of-elements-abelian-groups open import linear-algebra.finite-sequences-in-semirings open import linear-algebra.left-modules-rings open import linear-algebra.linear-maps-left-modules-rings +open import linear-algebra.sums-of-finite-sequences-of-elements-left-modules-rings open import lists.finite-sequences open import lists.functoriality-finite-sequences @@ -75,6 +76,11 @@ module _ fin-sequence-type-Ring : UU l fin-sequence-type-Ring = fin-sequence (type-Ring R) n + + scalar-mul-fin-sequence-type-Ring : + type-Ring R → fin-sequence-type-Ring → fin-sequence-type-Ring + scalar-mul-fin-sequence-type-Ring = + mul-left-module-Ring R left-module-fin-sequence-Ring ``` ### Inherited algebraic structures on the type of finite sequences in a ring @@ -312,3 +318,28 @@ module _ coordinate-map-fin-sequence-Ring , is-linear-coordinate-map-fin-sequence-Ring ``` + +### Coordinates of sequence sums + +```agda +abstract + coordinate-sum-fin-sequence-fin-sequence-type-Ring : + {l : Level} (R : Ring l) (m n : ℕ) (i : Fin n) + (v : fin-sequence (fin-sequence-type-Ring R n) m) → + sum-fin-sequence-type-left-module-Ring + ( R) + ( left-module-fin-sequence-Ring R n) + ( m) + ( v) + ( i) = + sum-fin-sequence-type-Ab (ab-Ring R) m (λ j → v j i) + coordinate-sum-fin-sequence-fin-sequence-type-Ring R m n i = + distributive-hom-sum-fin-sequence-type-Ab + ( ab-left-module-Ring R (left-module-fin-sequence-Ring R n)) + ( ab-Ring R) + ( hom-ab-linear-map-left-module-Ring R + ( left-module-fin-sequence-Ring R n) + ( left-module-ring-Ring R) + ( coordinate-linear-map-fin-sequence-Ring R n i)) + ( m) +``` diff --git a/src/linear-algebra/functoriality-grids.lagda.md b/src/linear-algebra/functoriality-grids.lagda.md new file mode 100644 index 00000000000..c8568bfe967 --- /dev/null +++ b/src/linear-algebra/functoriality-grids.lagda.md @@ -0,0 +1,47 @@ +# Functoriality of the type of grids + +```agda +module linear-algebra.functoriality-grids where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.grids + +open import lists.functoriality-tuples +``` + +
+ +## Idea + +Any map `f : A → B` induces a map between [grids](linear-algebra.grids.md) +`grid A m n → grid B m n`. + +## Definition + +```agda +module _ + {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) + where + + map-grid : {m n : ℕ} → grid A m n → grid B m n + map-grid = map-tuple (map-tuple f) +``` + +### Binary maps + +```agda +module _ + {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} (f : A → B → C) + where + + binary-map-grid : + {m n : ℕ} → grid A m n → grid B m n → grid C m n + binary-map-grid = binary-map-tuple (binary-map-tuple f) +``` diff --git a/src/linear-algebra/functoriality-matrices.lagda.md b/src/linear-algebra/functoriality-matrices.lagda.md deleted file mode 100644 index 58f07fa963c..00000000000 --- a/src/linear-algebra/functoriality-matrices.lagda.md +++ /dev/null @@ -1,47 +0,0 @@ -# Functoriality of the type of matrices - -```agda -module linear-algebra.functoriality-matrices where -``` - -
Imports - -```agda -open import elementary-number-theory.natural-numbers - -open import foundation.universe-levels - -open import linear-algebra.matrices - -open import lists.functoriality-tuples -``` - -
- -## Idea - -Any map `f : A → B` induces a map between [matrices](linear-algebra.matrices.md) -`matrix A m n → matrix B m n`. - -## Definition - -```agda -module _ - {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) - where - - map-matrix : {m n : ℕ} → matrix A m n → matrix B m n - map-matrix = map-tuple (map-tuple f) -``` - -### Binary maps - -```agda -module _ - {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} (f : A → B → C) - where - - binary-map-matrix : - {m n : ℕ} → matrix A m n → matrix B m n → matrix C m n - binary-map-matrix = binary-map-tuple (binary-map-tuple f) -``` diff --git a/src/linear-algebra/general-linear-groups-finite-degree-rings.lagda.md b/src/linear-algebra/general-linear-groups-finite-degree-rings.lagda.md new file mode 100644 index 00000000000..635c9aee07c --- /dev/null +++ b/src/linear-algebra/general-linear-groups-finite-degree-rings.lagda.md @@ -0,0 +1,44 @@ +# The general linear groups of finite degree over rings + +```agda +module linear-algebra.general-linear-groups-finite-degree-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import group-theory.groups + +open import linear-algebra.rings-of-square-matrices-on-rings + +open import ring-theory.groups-of-units-rings +open import ring-theory.rings +``` + +
+ +## Idea + +The +{{#concept "general linear group" Disambiguation="of finite degree over a ring" WDID=Q524607 WD="general linear group" Agda=general-linear-group-Ring}} +of degree `n : ℕ` over a [ring](ring-theory.rings.md) `R` is the +[group of units](ring-theory.groups-of-units-rings.md) of the +[ring of `n × n` square matrices](linear-algebra.rings-of-square-matrices-on-rings.md) +on `R`. + +## Definition + +```agda +general-linear-group-Ring : {l : Level} → ℕ → Ring l → Group l +general-linear-group-Ring n R = + group-of-units-Ring (ring-square-matrix-Ring R n) +``` + +## External links + +- [General linear group](https://en.wikipedia.org/wiki/General_linear_group) on + Wikipedia diff --git a/src/linear-algebra/grids-on-rings.lagda.md b/src/linear-algebra/grids-on-rings.lagda.md new file mode 100644 index 00000000000..619be38e954 --- /dev/null +++ b/src/linear-algebra/grids-on-rings.lagda.md @@ -0,0 +1,135 @@ +# Grids on rings + +```agda +module linear-algebra.grids-on-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-binary-functions +open import foundation.identity-types +open import foundation.universe-levels + +open import linear-algebra.constant-grids +open import linear-algebra.functoriality-grids +open import linear-algebra.grids +open import linear-algebra.tuples-on-rings + +open import lists.tuples + +open import ring-theory.rings +``` + +
+ +## Definitions + +A [grid](linear-algebra.grids.md) on a [ring](ring-theory.rings.md) is a grid +whose elements are elements of the ring. + +### Grids + +```agda +module _ + {l : Level} (R : Ring l) + where + + grid-Ring : ℕ → ℕ → UU l + grid-Ring m n = grid (type-Ring R) m n +``` + +### The zero grid + +```agda +module _ + {l : Level} (R : Ring l) + where + + zero-grid-Ring : {m n : ℕ} → grid-Ring R m n + zero-grid-Ring = constant-grid (zero-Ring R) +``` + +### Addition of grids on rings + +```agda +module _ + {l : Level} (R : Ring l) + where + + add-grid-Ring : {m n : ℕ} (A B : grid-Ring R m n) → grid-Ring R m n + add-grid-Ring = binary-map-grid (add-Ring R) +``` + +## Properties + +### Addition of grids is associative + +```agda +module _ + {l : Level} (R : Ring l) + where + + associative-add-grid-Ring : + {m n : ℕ} (A B C : grid-Ring R m n) → + add-grid-Ring R (add-grid-Ring R A B) C = + add-grid-Ring R A (add-grid-Ring R B C) + associative-add-grid-Ring empty-tuple empty-tuple empty-tuple = refl + associative-add-grid-Ring (v ∷ A) (w ∷ B) (z ∷ C) = + ap-binary _∷_ + ( associative-add-tuple-Ring R v w z) + ( associative-add-grid-Ring A B C) +``` + +### Addition of grids is commutative + +```agda +module _ + {l : Level} (R : Ring l) + where + + commutative-add-grid-Ring : + {m n : ℕ} (A B : grid-Ring R m n) → + add-grid-Ring R A B = add-grid-Ring R B A + commutative-add-grid-Ring empty-tuple empty-tuple = refl + commutative-add-grid-Ring (v ∷ A) (w ∷ B) = + ap-binary _∷_ + ( commutative-add-tuple-Ring R v w) + ( commutative-add-grid-Ring A B) +``` + +### Left unit law for addition of grids + +```agda +module _ + {l : Level} (R : Ring l) + where + + left-unit-law-add-grid-Ring : + {m n : ℕ} (A : grid-Ring R m n) → + add-grid-Ring R (zero-grid-Ring R) A = A + left-unit-law-add-grid-Ring empty-tuple = refl + left-unit-law-add-grid-Ring (v ∷ A) = + ap-binary _∷_ + ( left-unit-law-add-tuple-Ring R v) + ( left-unit-law-add-grid-Ring A) +``` + +### Right unit law for addition of grids + +```agda +module _ + {l : Level} (R : Ring l) + where + + right-unit-law-add-grid-Ring : + {m n : ℕ} (A : grid-Ring R m n) → + add-grid-Ring R A (zero-grid-Ring R) = A + right-unit-law-add-grid-Ring empty-tuple = refl + right-unit-law-add-grid-Ring (v ∷ A) = + ap-binary _∷_ + ( right-unit-law-add-tuple-Ring R v) + ( right-unit-law-add-grid-Ring A) +``` diff --git a/src/linear-algebra/grids.lagda.md b/src/linear-algebra/grids.lagda.md new file mode 100644 index 00000000000..e510c19b233 --- /dev/null +++ b/src/linear-algebra/grids.lagda.md @@ -0,0 +1,116 @@ +# Grids + +```agda +module linear-algebra.grids where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-binary-functions +open import foundation.contractible-types +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.universe-levels + +open import lists.functoriality-tuples +open import lists.tuples +``` + +
+ +## Idea + +An `m × n` {{#concept "grid" Agda=grid}} of elements in `A` is a +[tuple](lists.tuples.md) of length `m` of tuples of length `n` of elements of +`A`. In other words, a grid is an arrangement of elements of `A` with `m` rows +and `n` columns. + +## Definitions + +### Grids + +```agda +grid : {l : Level} (A : UU l) → ℕ → ℕ → UU l +grid A m n = tuple (tuple A n) m +``` + +### The top row of a grid + +```agda +top-row-grid : + {l : Level} {m n : ℕ} {A : UU l} → grid A (succ-ℕ m) n → tuple A n +top-row-grid (v ∷ M) = v +``` + +### The left column of a grid + +```agda +left-column-grid : + {l : Level} {m n : ℕ} {A : UU l} → grid A m (succ-ℕ n) → tuple A m +left-column-grid = map-tuple head-tuple +``` + +### The vertical tail of a grid + +```agda +vertical-tail-grid : + {l : Level} {m n : ℕ} {A : UU l} → grid A (succ-ℕ m) n → grid A m n +vertical-tail-grid M = tail-tuple M +``` + +### The horizontal tail of a grid + +```agda +horizontal-tail-grid : + {l : Level} {m n : ℕ} {A : UU l} → grid A m (succ-ℕ n) → grid A m n +horizontal-tail-grid = map-tuple tail-tuple +``` + +### The vertically empty grid + +```agda +vertically-empty-grid : + {l : Level} {n : ℕ} {A : UU l} → grid A 0 n +vertically-empty-grid = empty-tuple + +eq-vertically-empty-grid : + {l : Level} {n : ℕ} {A : UU l} + (x : grid A 0 n) → vertically-empty-grid = x +eq-vertically-empty-grid empty-tuple = refl + +is-contr-grid-zero-ℕ : + {l : Level} {n : ℕ} {A : UU l} → is-contr (grid A 0 n) +pr1 is-contr-grid-zero-ℕ = vertically-empty-grid +pr2 is-contr-grid-zero-ℕ = eq-vertically-empty-grid +``` + +### The horizontally empty grid + +```agda +horizontally-empty-grid : + {l : Level} {m : ℕ} {A : UU l} → grid A m 0 +horizontally-empty-grid {m = zero-ℕ} = empty-tuple +horizontally-empty-grid {m = succ-ℕ m} = + empty-tuple ∷ horizontally-empty-grid + +eq-horizontally-empty-grid : + {l : Level} {m : ℕ} {A : UU l} + (x : grid A m 0) → horizontally-empty-grid = x +eq-horizontally-empty-grid {m = zero-ℕ} empty-tuple = refl +eq-horizontally-empty-grid {m = succ-ℕ m} (empty-tuple ∷ M) = + ap-binary _∷_ refl (eq-horizontally-empty-grid M) + +is-contr-grid-zero-ℕ' : + {l : Level} {m : ℕ} {A : UU l} → is-contr (grid A m 0) +pr1 is-contr-grid-zero-ℕ' = horizontally-empty-grid +pr2 is-contr-grid-zero-ℕ' = eq-horizontally-empty-grid +``` + +## See also + +- [Matrices](linear-algebra.matrices.md), the analogous concept but with + [finite sequences](lists.finite-sequences.md) in the role of + [tuples](lists.tuples.md) diff --git a/src/linear-algebra/identity-matrices-on-commutative-rings.lagda.md b/src/linear-algebra/identity-matrices-on-commutative-rings.lagda.md new file mode 100644 index 00000000000..93a42c473da --- /dev/null +++ b/src/linear-algebra/identity-matrices-on-commutative-rings.lagda.md @@ -0,0 +1,41 @@ +# Identity matrices on commutative rings + +```agda +module linear-algebra.identity-matrices-on-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.identity-matrices-on-rings +open import linear-algebra.square-matrices-on-commutative-rings +``` + +
+ +## Idea + +The `n × n` +{{#concept "identity matrix" Disambiguation="on a commutative ring" WDID=Q193794 WD="identity matrix" Agda=id-matrix-Commutative-Ring}} +on a [commutative ring](commutative-algebra.commutative-rings.md) is the +[diagonal matrix](linear-algebra.diagonal-matrices-on-rings.md) with all 1s on +the diagonal. + +## Definition + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + where + + id-matrix-Commutative-Ring : square-matrix-Commutative-Ring R n + id-matrix-Commutative-Ring = id-matrix-Ring (ring-Commutative-Ring R) n +``` diff --git a/src/linear-algebra/identity-matrices-on-rings.lagda.md b/src/linear-algebra/identity-matrices-on-rings.lagda.md new file mode 100644 index 00000000000..8a50b1c18ab --- /dev/null +++ b/src/linear-algebra/identity-matrices-on-rings.lagda.md @@ -0,0 +1,42 @@ +# Identity matrices on rings + +```agda +module linear-algebra.identity-matrices-on-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.diagonal-matrices-on-rings +open import linear-algebra.square-matrices-on-rings + +open import ring-theory.rings +``` + +
+ +## Idea + +The `n × n` +{{#concept "identity matrix" Disambiguation="on a ring" WDID=Q193794 WD="identity matrix" Agda=id-matrix-Ring}} +on a [ring](ring-theory.rings.md) is the +[diagonal matrix](linear-algebra.diagonal-matrices-on-rings.md) with all 1s on +the diagonal. + +## Definition + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + id-matrix-Ring : square-matrix-Ring R n + id-matrix-Ring = + matrix-from-diagonal-fin-sequence-type-Ring R n (λ _ → one-Ring R) +``` diff --git a/src/linear-algebra/indicator-finite-sequences-in-commutative-rings.lagda.md b/src/linear-algebra/indicator-finite-sequences-in-commutative-rings.lagda.md new file mode 100644 index 00000000000..b3aa57f1efe --- /dev/null +++ b/src/linear-algebra/indicator-finite-sequences-in-commutative-rings.lagda.md @@ -0,0 +1,165 @@ +# Indicator finite sequences in commutative rings + +```agda +module linear-algebra.indicator-finite-sequences-in-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.function-extensionality +open import foundation.homotopies +open import foundation.identity-types +open import foundation.negated-equality +open import foundation.universe-levels + +open import linear-algebra.dot-product-finite-sequences-in-commutative-rings +open import linear-algebra.finite-sequences-in-commutative-rings +open import linear-algebra.indicator-finite-sequences-in-rings +open import linear-algebra.sums-of-finite-sequences-of-elements-left-modules-commutative-rings + +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +The +{{#concept "indicator finite sequence" Disambiguation="in a commutative ring" Agda=indicator-fin-sequence-type-Commutative-Ring}} +in a [commutative ring](commutative-algebra.commutative-rings.md) `R` `χᵢ` for +index `i : Fin n` is a +[finite sequence](linear-algebra.finite-sequences-in-commutative-rings.md) in +`R` `u` such that `uᵢ = 1` and `uⱼ = 0` whenever `j ≠ i`. + +## Definition + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + (i : Fin n) + where + + indicator-fin-sequence-type-Commutative-Ring : + fin-sequence-type-Commutative-Ring R n + indicator-fin-sequence-type-Commutative-Ring = + indicator-fin-sequence-type-Ring (ring-Commutative-Ring R) n i + + abstract + compute-at-index-indicator-fin-sequence-type-Commutative-Ring : + indicator-fin-sequence-type-Commutative-Ring i = one-Commutative-Ring R + compute-at-index-indicator-fin-sequence-type-Commutative-Ring = + compute-at-index-indicator-fin-sequence-type-Ring + ( ring-Commutative-Ring R) + ( n) + ( i) + + compute-at-other-index-indicator-fin-sequence-type-Commutative-Ring : + (j : Fin n) → i ≠ j → + indicator-fin-sequence-type-Commutative-Ring j = zero-Commutative-Ring R + compute-at-other-index-indicator-fin-sequence-type-Commutative-Ring = + compute-at-other-index-indicator-fin-sequence-type-Ring + ( ring-Commutative-Ring R) + ( n) + ( i) +``` + +## Properties + +### `χᵢⱼ = χⱼᵢ` + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + where abstract + + symmetric-indicator-fin-sequence-type-Commutative-Ring : + (i j : Fin n) → + indicator-fin-sequence-type-Commutative-Ring R n i j = + indicator-fin-sequence-type-Commutative-Ring R n j i + symmetric-indicator-fin-sequence-type-Commutative-Ring = + symmetric-indicator-fin-sequence-type-Ring (ring-Commutative-Ring R) n +``` + +### The dot product of an indicator sequence for index `i` with a finite sequence `v` is `v i` + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + (i : Fin n) + where abstract + + left-dot-product-indicator-fin-sequence-type-Commutative-Ring : + (u : fin-sequence-type-Commutative-Ring R n) → + dot-product-fin-sequence-type-Commutative-Ring R n + ( indicator-fin-sequence-type-Commutative-Ring R n i) + ( u) = + u i + left-dot-product-indicator-fin-sequence-type-Commutative-Ring = + left-dot-product-indicator-fin-sequence-type-Ring + ( ring-Commutative-Ring R) + ( n) + ( i) + + right-dot-product-indicator-fin-sequence-type-Commutative-Ring : + (u : fin-sequence-type-Commutative-Ring R n) → + dot-product-fin-sequence-type-Commutative-Ring R n + ( u) + ( indicator-fin-sequence-type-Commutative-Ring R n i) = + u i + right-dot-product-indicator-fin-sequence-type-Commutative-Ring = + right-dot-product-indicator-fin-sequence-type-Ring + ( ring-Commutative-Ring R) + ( n) + ( i) +``` + +### Every finite sequence in a commutative ring is a linear combination of indicator sequences + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + (v : fin-sequence-type-Commutative-Ring R n) + where abstract + + htpy-linear-combination-indicator-fin-sequence-type-Commutative-Ring : + sum-fin-sequence-type-left-module-Commutative-Ring + ( R) + ( left-module-fin-sequence-Commutative-Ring R n) + ( n) + ( λ i → + scalar-mul-fin-sequence-type-Commutative-Ring R n + ( v i) + ( indicator-fin-sequence-type-Commutative-Ring R n i)) ~ + v + htpy-linear-combination-indicator-fin-sequence-type-Commutative-Ring = + htpy-linear-combination-indicator-fin-sequence-type-Ring + ( ring-Commutative-Ring R) + ( n) + ( v) + + eq-linear-combination-indicator-fin-sequence-type-Commutative-Ring : + sum-fin-sequence-type-left-module-Commutative-Ring + ( R) + ( left-module-fin-sequence-Commutative-Ring R n) + ( n) + ( λ i → + scalar-mul-fin-sequence-type-Commutative-Ring R n + ( v i) + ( indicator-fin-sequence-type-Commutative-Ring R n i)) = + v + eq-linear-combination-indicator-fin-sequence-type-Commutative-Ring = + eq-htpy htpy-linear-combination-indicator-fin-sequence-type-Commutative-Ring +``` diff --git a/src/linear-algebra/indicator-finite-sequences-in-rings.lagda.md b/src/linear-algebra/indicator-finite-sequences-in-rings.lagda.md new file mode 100644 index 00000000000..b0b91f807d3 --- /dev/null +++ b/src/linear-algebra/indicator-finite-sequences-in-rings.lagda.md @@ -0,0 +1,318 @@ +# Indicator finite sequences in rings + +```agda +module linear-algebra.indicator-finite-sequences-in-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-functions +open import foundation.coproduct-types +open import foundation.decidable-propositions +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.negated-equality +open import foundation.propositions +open import foundation.singleton-subtypes-discrete-types +open import foundation.universe-levels + +open import group-theory.sums-of-finite-families-of-elements-abelian-groups +open import group-theory.sums-of-finite-sequences-of-elements-abelian-groups + +open import linear-algebra.dot-product-finite-sequences-in-rings +open import linear-algebra.finite-sequences-in-rings +open import linear-algebra.sums-of-finite-sequences-of-elements-left-modules-rings + +open import ring-theory.central-elements-rings +open import ring-theory.rings +open import ring-theory.sums-of-finite-families-of-elements-rings +open import ring-theory.sums-of-finite-sequences-of-elements-rings + +open import univalent-combinatorics.counting +open import univalent-combinatorics.decidable-subtypes +open import univalent-combinatorics.equality-standard-finite-types +open import univalent-combinatorics.finite-types +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +The +{{#concept "indicator finite sequence" Disambiguation="in a ring" Agda=indicator-fin-sequence-type-Ring}} +in a [ring](ring-theory.rings.md) `R` `χᵢ` for index `i : Fin n` is a +[finite sequence](linear-algebra.finite-sequences-in-rings.md) in `R` `u` such +that `uᵢ = 1` and `uⱼ = 0` whenever `j ≠ i`. + +## Definition + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + indicator-fin-sequence-type-Ring : + (i : Fin n) → fin-sequence-type-Ring R n + indicator-fin-sequence-type-Ring i j = + rec-coproduct + ( λ _ → one-Ring R) + ( λ _ → zero-Ring R) + ( has-decidable-equality-Fin n i j) + + abstract + compute-at-index-indicator-fin-sequence-type-Ring : + (i : Fin n) → indicator-fin-sequence-type-Ring i i = one-Ring R + compute-at-index-indicator-fin-sequence-type-Ring i = + ap + ( rec-coproduct (λ _ → one-Ring R) (λ _ → zero-Ring R)) + ( eq-is-prop' + ( is-prop-is-decidable (is-set-Fin n i i)) + ( has-decidable-equality-Fin n i i) + ( inl refl)) + + compute-at-other-index-indicator-fin-sequence-type-Ring : + (i j : Fin n) → i ≠ j → + indicator-fin-sequence-type-Ring i j = zero-Ring R + compute-at-other-index-indicator-fin-sequence-type-Ring i j i≠j = + ap + ( rec-coproduct (λ _ → one-Ring R) (λ _ → zero-Ring R)) + ( eq-is-prop' + ( is-prop-is-decidable (is-set-Fin n i j)) + ( has-decidable-equality-Fin n i j) + ( inr i≠j)) +``` + +## Properties + +### `χᵢⱼ = χⱼᵢ` + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where abstract + + symmetric-indicator-fin-sequence-type-Ring : + (i j : Fin n) → + indicator-fin-sequence-type-Ring R n i j = + indicator-fin-sequence-type-Ring R n j i + symmetric-indicator-fin-sequence-type-Ring i j + with has-decidable-equality-Fin n i j + ... | inl i=j = + ap + ( rec-coproduct (λ _ → one-Ring R) (λ _ → zero-Ring R)) + ( eq-is-prop' + ( is-prop-is-decidable (is-set-Fin n j i)) + ( inl (inv i=j)) + ( has-decidable-equality-Fin n j i)) + ... | inr i≠j = + ap + ( rec-coproduct (λ _ → one-Ring R) (λ _ → zero-Ring R)) + ( eq-is-prop' + ( is-prop-is-decidable (is-set-Fin n j i)) + ( inr (is-symmetric-nonequal i j i≠j)) + ( has-decidable-equality-Fin n j i)) +``` + +### Every coordinate of an indicator sequence at an index `i` is central + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + (i : Fin n) + where abstract + + is-central-element-indicator-fin-sequence-type-Ring : + (j : Fin n) → + is-central-element-Ring R (indicator-fin-sequence-type-Ring R n i j) + is-central-element-indicator-fin-sequence-type-Ring j + with has-decidable-equality-Fin n i j + ... | inl i=j = is-central-element-one-Ring R + ... | inr i≠j = is-central-element-zero-Ring R +``` + +### The dot product of an indicator sequence for index `i` with a finite sequence `v` is `v i` + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + (i : Fin n) + where abstract + + left-dot-product-indicator-fin-sequence-type-Ring : + (u : fin-sequence-type-Ring R n) → + dot-product-fin-sequence-type-Ring R n + ( indicator-fin-sequence-type-Ring R n i) + ( u) = + u i + left-dot-product-indicator-fin-sequence-type-Ring u = + equational-reasoning + dot-product-fin-sequence-type-Ring R n + ( indicator-fin-sequence-type-Ring R n i) + ( u) + = + sum-finite-Ab + ( ab-Ring R) + ( Fin-Finite-Type n) + ( λ j → mul-Ring R (indicator-fin-sequence-type-Ring R n i j) (u j)) + by + inv + ( eq-sum-finite-sum-count-Ab + ( ab-Ring R) + ( Fin-Finite-Type n) + ( count-Fin n) + ( _)) + = + sum-finite-Ab + ( ab-Ring R) + ( finite-type-subset-Finite-Type + ( Fin-Finite-Type n) + ( decidable-standard-singleton-subtype-Discrete-Type + ( Fin-Discrete-Type n) + ( i))) + ( λ (j , _) → + mul-Ring R (indicator-fin-sequence-type-Ring R n i j) (u j)) + by + vanish-sum-complement-decidable-subset-finite-Ab + ( ab-Ring R) + ( Fin-Finite-Type n) + ( decidable-standard-singleton-subtype-Discrete-Type + ( Fin-Discrete-Type n) + ( i)) + ( _) + ( λ j j≠i → + equational-reasoning + mul-Ring R (indicator-fin-sequence-type-Ring R n i j) (u j) + = mul-Ring R (zero-Ring R) (u j) + by + ap-mul-Ring R + ( compute-at-other-index-indicator-fin-sequence-type-Ring + ( R) + ( n) + ( i) + ( j) + ( is-symmetric-nonequal j i j≠i)) + ( refl) + = zero-Ring R + by left-zero-law-mul-Ring R (u j)) + = mul-Ring R (indicator-fin-sequence-type-Ring R n i i) (u i) + by + sum-finite-is-contr-Ab + ( ab-Ring R) + ( _) + ( is-contr-type-decidable-standard-singleton-subtype-Discrete-Type + ( Fin-Discrete-Type n) + ( i)) + ( i , refl) + ( _) + = mul-Ring R (one-Ring R) (u i) + by + ap-mul-Ring R + ( compute-at-index-indicator-fin-sequence-type-Ring R n i) + ( refl) + = u i + by left-unit-law-mul-Ring R (u i) + + right-dot-product-indicator-fin-sequence-type-Ring : + (u : fin-sequence-type-Ring R n) → + dot-product-fin-sequence-type-Ring R n + ( u) + ( indicator-fin-sequence-type-Ring R n i) = + u i + right-dot-product-indicator-fin-sequence-type-Ring u = + ( htpy-sum-fin-sequence-type-Ring R n + ( λ j → + inv + ( is-central-element-indicator-fin-sequence-type-Ring + ( R) + ( n) + ( i) + ( j) + ( u j)))) ∙ + ( left-dot-product-indicator-fin-sequence-type-Ring u) +``` + +### Every finite sequence in a ring is a linear combination of indicator sequences + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + (v : fin-sequence-type-Ring R n) + where abstract + + htpy-linear-combination-indicator-fin-sequence-type-Ring : + sum-fin-sequence-type-left-module-Ring + ( R) + ( left-module-fin-sequence-Ring R n) + ( n) + ( λ i → + scalar-mul-fin-sequence-type-Ring R n + ( v i) + ( indicator-fin-sequence-type-Ring R n i)) ~ + v + htpy-linear-combination-indicator-fin-sequence-type-Ring k = + equational-reasoning + sum-fin-sequence-type-left-module-Ring R + ( left-module-fin-sequence-Ring R n) n + ( λ i → + scalar-mul-fin-sequence-type-Ring R n + ( v i) + ( indicator-fin-sequence-type-Ring R n i)) + ( k) + = + sum-fin-sequence-type-Ring + ( R) + ( n) + ( λ j → + mul-Ring + ( R) + ( v j) + ( indicator-fin-sequence-type-Ring R n j k)) + by coordinate-sum-fin-sequence-fin-sequence-type-Ring R n n k _ + = + sum-fin-sequence-type-Ring + ( R) + ( n) + ( λ j → + mul-Ring + ( R) + ( v j) + ( indicator-fin-sequence-type-Ring R n k j)) + by + htpy-sum-fin-sequence-type-Ring R n + ( λ j → + ap-mul-Ring R + ( refl) + ( symmetric-indicator-fin-sequence-type-Ring R n j k)) + = v k + by right-dot-product-indicator-fin-sequence-type-Ring R n k v + + eq-linear-combination-indicator-fin-sequence-type-Ring : + sum-fin-sequence-type-left-module-Ring + ( R) + ( left-module-fin-sequence-Ring R n) + ( n) + ( λ i → + scalar-mul-fin-sequence-type-Ring R n + ( v i) + ( indicator-fin-sequence-type-Ring R n i)) = + v + eq-linear-combination-indicator-fin-sequence-type-Ring = + eq-htpy htpy-linear-combination-indicator-fin-sequence-type-Ring +``` diff --git a/src/linear-algebra/matrices-on-commutative-rings.lagda.md b/src/linear-algebra/matrices-on-commutative-rings.lagda.md new file mode 100644 index 00000000000..961f86b46f1 --- /dev/null +++ b/src/linear-algebra/matrices-on-commutative-rings.lagda.md @@ -0,0 +1,168 @@ +# Matrices on commutative rings + +```agda +module linear-algebra.matrices-on-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.identity-types +open import foundation.sets +open import foundation.universe-levels + +open import linear-algebra.left-modules-commutative-rings +open import linear-algebra.matrices-on-rings +``` + +
+ +## Idea + +A [matrix](linear-algebra.matrices.md) on a +[commutative ring](commutative-algebra.commutative-rings.md) is a matrix whose +elements are elements of the ring. + +## Definition + +```agda +matrix-Commutative-Ring : {l : Level} → Commutative-Ring l → ℕ → ℕ → UU l +matrix-Commutative-Ring R = matrix-Ring (ring-Commutative-Ring R) +``` + +## Properties + +### Matrices on a commutative ring form a left module over that ring + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (m n : ℕ) + where + + left-module-matrix-Commutative-Ring : left-module-Commutative-Ring l R + left-module-matrix-Commutative-Ring = + left-module-matrix-Ring (ring-Commutative-Ring R) m n + + set-matrix-Commutative-Ring : Set l + set-matrix-Commutative-Ring = + set-left-module-Commutative-Ring R left-module-matrix-Commutative-Ring + + add-matrix-Commutative-Ring : + matrix-Commutative-Ring R m n → matrix-Commutative-Ring R m n → + matrix-Commutative-Ring R m n + add-matrix-Commutative-Ring = + add-left-module-Commutative-Ring R left-module-matrix-Commutative-Ring + + zero-matrix-Commutative-Ring : matrix-Commutative-Ring R m n + zero-matrix-Commutative-Ring = + zero-left-module-Commutative-Ring R left-module-matrix-Commutative-Ring + + left-unit-law-add-matrix-Commutative-Ring : + (A : matrix-Commutative-Ring R m n) → + add-matrix-Commutative-Ring zero-matrix-Commutative-Ring A = A + left-unit-law-add-matrix-Commutative-Ring = + left-unit-law-add-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + right-unit-law-add-matrix-Commutative-Ring : + (A : matrix-Commutative-Ring R m n) → + add-matrix-Commutative-Ring A zero-matrix-Commutative-Ring = A + right-unit-law-add-matrix-Commutative-Ring = + right-unit-law-add-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + associative-add-matrix-Commutative-Ring : + (A B C : matrix-Commutative-Ring R m n) → + add-matrix-Commutative-Ring (add-matrix-Commutative-Ring A B) C = + add-matrix-Commutative-Ring A (add-matrix-Commutative-Ring B C) + associative-add-matrix-Commutative-Ring = + associative-add-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + commutative-add-matrix-Commutative-Ring : + (A B : matrix-Commutative-Ring R m n) → + add-matrix-Commutative-Ring A B = add-matrix-Commutative-Ring B A + commutative-add-matrix-Commutative-Ring = + commutative-add-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + neg-matrix-Commutative-Ring : + matrix-Commutative-Ring R m n → matrix-Commutative-Ring R m n + neg-matrix-Commutative-Ring = + neg-left-module-Commutative-Ring R left-module-matrix-Commutative-Ring + + left-inverse-law-add-matrix-Commutative-Ring : + (A : matrix-Commutative-Ring R m n) → + add-matrix-Commutative-Ring (neg-matrix-Commutative-Ring A) A = + zero-matrix-Commutative-Ring + left-inverse-law-add-matrix-Commutative-Ring = + left-inverse-law-add-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + right-inverse-law-add-matrix-Commutative-Ring : + (A : matrix-Commutative-Ring R m n) → + add-matrix-Commutative-Ring A (neg-matrix-Commutative-Ring A) = + zero-matrix-Commutative-Ring + right-inverse-law-add-matrix-Commutative-Ring = + right-inverse-law-add-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + scalar-mul-matrix-Commutative-Ring : + type-Commutative-Ring R → matrix-Commutative-Ring R m n → + matrix-Commutative-Ring R m n + scalar-mul-matrix-Commutative-Ring = + mul-left-module-Commutative-Ring R left-module-matrix-Commutative-Ring + + left-unit-law-scalar-mul-matrix-Commutative-Ring : + (A : matrix-Commutative-Ring R m n) → + scalar-mul-matrix-Commutative-Ring (one-Commutative-Ring R) A = A + left-unit-law-scalar-mul-matrix-Commutative-Ring = + left-unit-law-mul-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + associative-scalar-mul-matrix-Commutative-Ring : + (r s : type-Commutative-Ring R) (A : matrix-Commutative-Ring R m n) → + scalar-mul-matrix-Commutative-Ring (mul-Commutative-Ring R r s) A = + scalar-mul-matrix-Commutative-Ring + ( r) + ( scalar-mul-matrix-Commutative-Ring s A) + associative-scalar-mul-matrix-Commutative-Ring = + associative-mul-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + left-distributive-scalar-mul-add-matrix-Commutative-Ring : + (r : type-Commutative-Ring R) (A B : matrix-Commutative-Ring R m n) → + scalar-mul-matrix-Commutative-Ring r (add-matrix-Commutative-Ring A B) = + add-matrix-Commutative-Ring + ( scalar-mul-matrix-Commutative-Ring r A) + ( scalar-mul-matrix-Commutative-Ring r B) + left-distributive-scalar-mul-add-matrix-Commutative-Ring = + left-distributive-mul-add-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) + + right-distributive-scalar-mul-add-matrix-Commutative-Ring : + (r s : type-Commutative-Ring R) (A : matrix-Commutative-Ring R m n) → + scalar-mul-matrix-Commutative-Ring (add-Commutative-Ring R r s) A = + add-matrix-Commutative-Ring + ( scalar-mul-matrix-Commutative-Ring r A) + ( scalar-mul-matrix-Commutative-Ring s A) + right-distributive-scalar-mul-add-matrix-Commutative-Ring = + right-distributive-mul-add-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring) +``` diff --git a/src/linear-algebra/matrices-on-rings.lagda.md b/src/linear-algebra/matrices-on-rings.lagda.md index dc0b7373112..1b726285dfb 100644 --- a/src/linear-algebra/matrices-on-rings.lagda.md +++ b/src/linear-algebra/matrices-on-rings.lagda.md @@ -9,127 +9,132 @@ module linear-algebra.matrices-on-rings where ```agda open import elementary-number-theory.natural-numbers -open import foundation.action-on-identifications-binary-functions open import foundation.identity-types +open import foundation.sets open import foundation.universe-levels -open import linear-algebra.constant-matrices -open import linear-algebra.functoriality-matrices -open import linear-algebra.matrices -open import linear-algebra.tuples-on-rings +open import group-theory.abelian-groups -open import lists.tuples +open import linear-algebra.finite-sequences-in-rings +open import linear-algebra.function-left-modules-rings +open import linear-algebra.left-modules-rings +open import linear-algebra.matrices open import ring-theory.rings + +open import univalent-combinatorics.standard-finite-types ``` -## Definitions +## Idea A [matrix](linear-algebra.matrices.md) on a [ring](ring-theory.rings.md) is a matrix whose elements are elements of the ring. -### Matrices - -```agda -module _ - {l : Level} (R : Ring l) - where - - matrix-Ring : ℕ → ℕ → UU l - matrix-Ring m n = matrix (type-Ring R) m n -``` - -### The zero matrix +## Definition ```agda -module _ - {l : Level} (R : Ring l) - where - - zero-matrix-Ring : {m n : ℕ} → matrix-Ring R m n - zero-matrix-Ring = constant-matrix (zero-Ring R) -``` - -### Addition of matrices on rings - -```agda -module _ - {l : Level} (R : Ring l) - where - - add-matrix-Ring : {m n : ℕ} (A B : matrix-Ring R m n) → matrix-Ring R m n - add-matrix-Ring = binary-map-matrix (add-Ring R) +matrix-Ring : {l : Level} → Ring l → ℕ → ℕ → UU l +matrix-Ring R = matrix (type-Ring R) ``` ## Properties -### Addition of matrices is associative +### Matrices on a ring form a left module over that ring ```agda module _ - {l : Level} (R : Ring l) + {l : Level} + (R : Ring l) + (m n : ℕ) where - associative-add-matrix-Ring : - {m n : ℕ} (A B C : matrix-Ring R m n) → - add-matrix-Ring R (add-matrix-Ring R A B) C = - add-matrix-Ring R A (add-matrix-Ring R B C) - associative-add-matrix-Ring empty-tuple empty-tuple empty-tuple = refl - associative-add-matrix-Ring (v ∷ A) (w ∷ B) (z ∷ C) = - ap-binary _∷_ - ( associative-add-tuple-Ring R v w z) - ( associative-add-matrix-Ring A B C) -``` + left-module-matrix-Ring : left-module-Ring l R + left-module-matrix-Ring = + function-left-module-Ring + ( R) + ( function-left-module-ring-Ring R (Fin n)) + ( Fin m) -### Addition of matrices is commutative + set-matrix-Ring : Set l + set-matrix-Ring = set-left-module-Ring R left-module-matrix-Ring -```agda -module _ - {l : Level} (R : Ring l) - where + ab-matrix-Ring : Ab l + ab-matrix-Ring = ab-left-module-Ring R left-module-matrix-Ring - commutative-add-matrix-Ring : - {m n : ℕ} (A B : matrix-Ring R m n) → - add-matrix-Ring R A B = add-matrix-Ring R B A - commutative-add-matrix-Ring empty-tuple empty-tuple = refl - commutative-add-matrix-Ring (v ∷ A) (w ∷ B) = - ap-binary _∷_ - ( commutative-add-tuple-Ring R v w) - ( commutative-add-matrix-Ring A B) -``` + add-matrix-Ring : matrix-Ring R m n → matrix-Ring R m n → matrix-Ring R m n + add-matrix-Ring = add-left-module-Ring R left-module-matrix-Ring -### Left unit law for addition of matrices - -```agda -module _ - {l : Level} (R : Ring l) - where + zero-matrix-Ring : matrix-Ring R m n + zero-matrix-Ring = zero-left-module-Ring R left-module-matrix-Ring left-unit-law-add-matrix-Ring : - {m n : ℕ} (A : matrix-Ring R m n) → - add-matrix-Ring R (zero-matrix-Ring R) A = A - left-unit-law-add-matrix-Ring empty-tuple = refl - left-unit-law-add-matrix-Ring (v ∷ A) = - ap-binary _∷_ - ( left-unit-law-add-tuple-Ring R v) - ( left-unit-law-add-matrix-Ring A) -``` + (A : matrix-Ring R m n) → add-matrix-Ring zero-matrix-Ring A = A + left-unit-law-add-matrix-Ring = + left-unit-law-add-left-module-Ring R left-module-matrix-Ring -### Right unit law for addition of matrices + right-unit-law-add-matrix-Ring : + (A : matrix-Ring R m n) → add-matrix-Ring A zero-matrix-Ring = A + right-unit-law-add-matrix-Ring = + right-unit-law-add-left-module-Ring R left-module-matrix-Ring -```agda -module _ - {l : Level} (R : Ring l) - where + associative-add-matrix-Ring : + (A B C : matrix-Ring R m n) → + add-matrix-Ring (add-matrix-Ring A B) C = + add-matrix-Ring A (add-matrix-Ring B C) + associative-add-matrix-Ring = + associative-add-left-module-Ring R left-module-matrix-Ring - right-unit-law-add-matrix-Ring : - {m n : ℕ} (A : matrix-Ring R m n) → - add-matrix-Ring R A (zero-matrix-Ring R) = A - right-unit-law-add-matrix-Ring empty-tuple = refl - right-unit-law-add-matrix-Ring (v ∷ A) = - ap-binary _∷_ - ( right-unit-law-add-tuple-Ring R v) - ( right-unit-law-add-matrix-Ring A) + commutative-add-matrix-Ring : + (A B : matrix-Ring R m n) → + add-matrix-Ring A B = add-matrix-Ring B A + commutative-add-matrix-Ring = + commutative-add-left-module-Ring R left-module-matrix-Ring + + neg-matrix-Ring : matrix-Ring R m n → matrix-Ring R m n + neg-matrix-Ring = neg-left-module-Ring R left-module-matrix-Ring + + left-inverse-law-add-matrix-Ring : + (A : matrix-Ring R m n) → + add-matrix-Ring (neg-matrix-Ring A) A = zero-matrix-Ring + left-inverse-law-add-matrix-Ring = + left-inverse-law-add-left-module-Ring R left-module-matrix-Ring + + right-inverse-law-add-matrix-Ring : + (A : matrix-Ring R m n) → + add-matrix-Ring A (neg-matrix-Ring A) = zero-matrix-Ring + right-inverse-law-add-matrix-Ring = + right-inverse-law-add-left-module-Ring R left-module-matrix-Ring + + scalar-mul-matrix-Ring : type-Ring R → matrix-Ring R m n → matrix-Ring R m n + scalar-mul-matrix-Ring = + mul-left-module-Ring R left-module-matrix-Ring + + left-unit-law-scalar-mul-matrix-Ring : + (A : matrix-Ring R m n) → + scalar-mul-matrix-Ring (one-Ring R) A = A + left-unit-law-scalar-mul-matrix-Ring = + left-unit-law-mul-left-module-Ring R left-module-matrix-Ring + + associative-scalar-mul-matrix-Ring : + (r s : type-Ring R) (A : matrix-Ring R m n) → + scalar-mul-matrix-Ring (mul-Ring R r s) A = + scalar-mul-matrix-Ring r (scalar-mul-matrix-Ring s A) + associative-scalar-mul-matrix-Ring = + associative-mul-left-module-Ring R left-module-matrix-Ring + + left-distributive-scalar-mul-add-matrix-Ring : + (r : type-Ring R) (A B : matrix-Ring R m n) → + scalar-mul-matrix-Ring r (add-matrix-Ring A B) = + add-matrix-Ring (scalar-mul-matrix-Ring r A) (scalar-mul-matrix-Ring r B) + left-distributive-scalar-mul-add-matrix-Ring = + left-distributive-mul-add-left-module-Ring R left-module-matrix-Ring + + right-distributive-scalar-mul-add-matrix-Ring : + (r s : type-Ring R) (A : matrix-Ring R m n) → + scalar-mul-matrix-Ring (add-Ring R r s) A = + add-matrix-Ring (scalar-mul-matrix-Ring r A) (scalar-mul-matrix-Ring s A) + right-distributive-scalar-mul-add-matrix-Ring = + right-distributive-mul-add-left-module-Ring R left-module-matrix-Ring ``` diff --git a/src/linear-algebra/matrices.lagda.md b/src/linear-algebra/matrices.lagda.md index cbc676603e2..82fa4a0a996 100644 --- a/src/linear-algebra/matrices.lagda.md +++ b/src/linear-algebra/matrices.lagda.md @@ -9,15 +9,17 @@ module linear-algebra.matrices where ```agda open import elementary-number-theory.natural-numbers -open import foundation.action-on-identifications-binary-functions -open import foundation.contractible-types open import foundation.dependent-pair-types -open import foundation.dependent-products-contractible-types -open import foundation.identity-types +open import foundation.dependent-products-truncated-types +open import foundation.function-types +open import foundation.sets +open import foundation.truncated-types +open import foundation.truncation-levels open import foundation.universe-levels -open import lists.functoriality-tuples -open import lists.tuples +open import lists.finite-sequences + +open import univalent-combinatorics.standard-finite-types ``` @@ -25,87 +27,143 @@ open import lists.tuples ## Idea An `m × n` {{#concept "matrix" Agda=matrix WD="matrix" WDID=Q44337}} of elements -in `A` is an arrangement of elements of A with `m` rows and `n` columns. In -other words, a matrix is a [tuple](lists.tuples.md) of length `m` of tuples of -length `n` of elements of `A`. - -## Definitions +in `A` is a [finite sequence](lists.finite-sequences.md) of length `m` of finite +sequences of length `n` in `A`. -### Matrices +## Definition ```agda matrix : {l : Level} (A : UU l) → ℕ → ℕ → UU l -matrix A m n = tuple (tuple A n) m +matrix A m n = fin-sequence (fin-sequence A n) m ``` +## Properties + ### The top row of a matrix ```agda -top-row-matrix : - {l : Level} {m n : ℕ} {A : UU l} → matrix A (succ-ℕ m) n → tuple A n -top-row-matrix (v ∷ M) = v +module _ + {l : Level} + {A : UU l} + (m n : ℕ) + where + + top-row-matrix : matrix A (succ-ℕ m) n → fin-sequence A n + top-row-matrix = head-fin-sequence m ``` -### The left column of a matrix +### The vertical tail of a matrix ```agda -left-column-matrix : - {l : Level} {m n : ℕ} {A : UU l} → matrix A m (succ-ℕ n) → tuple A m -left-column-matrix = map-tuple head-tuple +module _ + {l : Level} + {A : UU l} + (m n : ℕ) + where + + vertical-tail-matrix : matrix A (succ-ℕ m) n → matrix A m n + vertical-tail-matrix = tail-fin-sequence m ``` -### The vertical tail of a matrix +### The bottom row of a matrix ```agda -vertical-tail-matrix : - {l : Level} {m n : ℕ} {A : UU l} → matrix A (succ-ℕ m) n → matrix A m n -vertical-tail-matrix M = tail-tuple M +module _ + {l : Level} + {A : UU l} + (m n : ℕ) + where + + bottom-row-matrix : matrix A (succ-ℕ m) n → fin-sequence A n + bottom-row-matrix M = last-fin-sequence m M +``` + +### The vertical initial segment of a matrix + +```agda +module _ + {l : Level} + {A : UU l} + (m n : ℕ) + where + + vertical-init-matrix : matrix A (succ-ℕ m) n → matrix A m n + vertical-init-matrix M = init-fin-sequence m M +``` + +### The first column of a matrix + +```agda +module _ + {l : Level} + {A : UU l} + (m n : ℕ) + where + + first-column-matrix : matrix A m (succ-ℕ n) → fin-sequence A m + first-column-matrix M = head-fin-sequence n ∘ M ``` ### The horizontal tail of a matrix ```agda -horizontal-tail-matrix : - {l : Level} {m n : ℕ} {A : UU l} → matrix A m (succ-ℕ n) → matrix A m n -horizontal-tail-matrix = map-tuple tail-tuple +module _ + {l : Level} + {A : UU l} + (m n : ℕ) + where + + horizontal-tail-matrix : matrix A m (succ-ℕ n) → matrix A m n + horizontal-tail-matrix M = tail-fin-sequence n ∘ M ``` -### The vertically empty matrix +### The last column of a matrix ```agda -vertically-empty-matrix : - {l : Level} {n : ℕ} {A : UU l} → matrix A 0 n -vertically-empty-matrix = empty-tuple - -eq-vertically-empty-matrix : - {l : Level} {n : ℕ} {A : UU l} - (x : matrix A 0 n) → vertically-empty-matrix = x -eq-vertically-empty-matrix empty-tuple = refl - -is-contr-matrix-zero-ℕ : - {l : Level} {n : ℕ} {A : UU l} → is-contr (matrix A 0 n) -pr1 is-contr-matrix-zero-ℕ = vertically-empty-matrix -pr2 is-contr-matrix-zero-ℕ = eq-vertically-empty-matrix +module _ + {l : Level} + {A : UU l} + (m n : ℕ) + where + + last-column-matrix : matrix A m (succ-ℕ n) → fin-sequence A m + last-column-matrix M = last-fin-sequence n ∘ M ``` -### The horizontally empty matrix +### The horizontal initial segment of a matrix ```agda -horizontally-empty-matrix : - {l : Level} {m : ℕ} {A : UU l} → matrix A m 0 -horizontally-empty-matrix {m = zero-ℕ} = empty-tuple -horizontally-empty-matrix {m = succ-ℕ m} = - empty-tuple ∷ horizontally-empty-matrix - -eq-horizontally-empty-matrix : - {l : Level} {m : ℕ} {A : UU l} - (x : matrix A m 0) → horizontally-empty-matrix = x -eq-horizontally-empty-matrix {m = zero-ℕ} empty-tuple = refl -eq-horizontally-empty-matrix {m = succ-ℕ m} (empty-tuple ∷ M) = - ap-binary _∷_ refl (eq-horizontally-empty-matrix M) - -is-contr-matrix-zero-ℕ' : - {l : Level} {m : ℕ} {A : UU l} → is-contr (matrix A m 0) -pr1 is-contr-matrix-zero-ℕ' = horizontally-empty-matrix -pr2 is-contr-matrix-zero-ℕ' = eq-horizontally-empty-matrix +module _ + {l : Level} + {A : UU l} + (m n : ℕ) + where + + horizontal-init-matrix : matrix A m (succ-ℕ n) → matrix A m n + horizontal-init-matrix M = init-fin-sequence n ∘ M ``` + +### Truncation of matrix types + +```agda +abstract + is-trunc-matrix : + (k : 𝕋) {l : Level} {A : UU l} (m n : ℕ) → + is-trunc k A → + is-trunc k (matrix A m n) + is-trunc-matrix k m n tA = + is-trunc-function-type k (is-trunc-function-type k tA) + +matrix-Set : {l : Level} → Set l → ℕ → ℕ → Set l +matrix-Set (A , is-set-A) m n = + ( matrix A m n , + is-trunc-matrix zero-𝕋 m n is-set-A) +``` + +## See also + +- [Grids](linear-algebra.grids.md), the analogous concept but with + [tuples](lists.tuples.md) in the role of + [finite sequences](lists.finite-sequences.md) +- [Square matrices](linear-algebra.square-matrices.md) +- [Matrices on rings](linear-algebra.matrices-on-rings.md) diff --git a/src/linear-algebra/multiplication-diagonal-matrices-rings.lagda.md b/src/linear-algebra/multiplication-diagonal-matrices-rings.lagda.md new file mode 100644 index 00000000000..bfef9a1e0c8 --- /dev/null +++ b/src/linear-algebra/multiplication-diagonal-matrices-rings.lagda.md @@ -0,0 +1,209 @@ +# Multiplication by diagonal matrices over rings + +```agda +module linear-algebra.multiplication-diagonal-matrices-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.binary-homotopies +open import foundation.coproduct-types +open import foundation.homotopies +open import foundation.identity-types +open import foundation.universe-levels + +open import linear-algebra.diagonal-matrices-on-rings +open import linear-algebra.finite-sequences-in-rings +open import linear-algebra.indicator-finite-sequences-in-rings +open import linear-algebra.matrices-on-rings +open import linear-algebra.multiplication-matrices-on-rings +open import linear-algebra.transposition-matrices + +open import ring-theory.rings +open import ring-theory.sums-of-finite-sequences-of-elements-rings + +open import univalent-combinatorics.equality-standard-finite-types +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +Given a [diagonal matrix](linear-algebra.diagonal-matrices-on-rings.md) `M` on a +[ring](ring-theory.rings.md) `R` with diagonal `d`, `MN` is `N` with row `i` +multiplied by `dᵢ`, and `NM` is `N` with column `j` multiplied by `dⱼ`. + +## Properties + +### The row at index `i` of a diagonal matrix with diagonal `d` is `dᵢ * χᵢ` + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + (d : fin-sequence-type-Ring R n) + where abstract + + htpy-row-matrix-from-diagonal-fin-sequence-type-Ring : + (i : Fin n) → + matrix-from-diagonal-fin-sequence-type-Ring R n d i ~ + scalar-mul-fin-sequence-type-Ring R n + ( d i) + ( indicator-fin-sequence-type-Ring R n i) + htpy-row-matrix-from-diagonal-fin-sequence-type-Ring i j + with has-decidable-equality-Fin n i j + ... | inl i=j = + inv (right-unit-law-mul-Ring R (d i)) + ... | inr i≠j = + inv (right-zero-law-mul-Ring R (d i)) +``` + +### Left multiplication by a diagonal matrix with diagonal `d` multiplies row `i` by `dᵢ` + +```agda +module _ + {l : Level} + (R : Ring l) + (m n : ℕ) + (d : fin-sequence-type-Ring R m) + where abstract + + compute-left-mul-diagonal-matrix-Ring : + (M : matrix-Ring R m n) (i : Fin m) (j : Fin n) → + mul-matrix-Ring R m m n + ( matrix-from-diagonal-fin-sequence-type-Ring R m d) + ( M) + ( i) + ( j) = + mul-Ring R (d i) (M i j) + compute-left-mul-diagonal-matrix-Ring M i j = + equational-reasoning + sum-fin-sequence-type-Ring R m + ( λ k → + mul-Ring R + ( matrix-from-diagonal-fin-sequence-type-Ring R m d i k) + ( M k j)) + = + sum-fin-sequence-type-Ring R m + ( λ k → + mul-Ring R + ( mul-Ring R + ( d i) + ( indicator-fin-sequence-type-Ring R m i k)) + ( M k j)) + by + htpy-sum-fin-sequence-type-Ring R m + ( λ k → + ap-mul-Ring R + ( htpy-row-matrix-from-diagonal-fin-sequence-type-Ring R + ( m) + ( d) + ( i) + ( k)) + ( refl)) + = + sum-fin-sequence-type-Ring R m + ( λ k → + mul-Ring R + ( d i) + ( mul-Ring R + ( indicator-fin-sequence-type-Ring R m i k) + ( M k j))) + by + htpy-sum-fin-sequence-type-Ring R m + ( λ k → associative-mul-Ring R _ _ _) + = + mul-Ring R + ( d i) + ( sum-fin-sequence-type-Ring R m + ( λ k → + mul-Ring R + ( indicator-fin-sequence-type-Ring R m i k) + ( M k j))) + by inv (left-distributive-mul-sum-fin-sequence-type-Ring R m _ _) + = mul-Ring R (d i) (M i j) + by + ap-mul-Ring R + ( refl) + ( left-dot-product-indicator-fin-sequence-type-Ring R m i + ( transpose-matrix m n M j)) +``` + +### Right multiplication by a diagonal matrix with diagonal `d` multiplies column `j` by `dⱼ` + +```agda +module _ + {l : Level} + (R : Ring l) + (m n : ℕ) + (d : fin-sequence-type-Ring R n) + where abstract + + compute-right-mul-diagonal-matrix-Ring : + (M : matrix-Ring R m n) (i : Fin m) (j : Fin n) → + mul-matrix-Ring R m n n + ( M) + ( matrix-from-diagonal-fin-sequence-type-Ring R n d) + ( i) + ( j) = + mul-Ring R (M i j) (d j) + compute-right-mul-diagonal-matrix-Ring M i j = + equational-reasoning + sum-fin-sequence-type-Ring R n + ( λ k → + mul-Ring R + ( M i k) + ( matrix-from-diagonal-fin-sequence-type-Ring R n d k j)) + = + sum-fin-sequence-type-Ring R n + ( λ k → + mul-Ring R + ( M i k) + ( matrix-from-diagonal-fin-sequence-type-Ring R n d j k)) + by + htpy-sum-fin-sequence-type-Ring R n + ( λ k → + ap-mul-Ring R + ( refl) + ( is-symmetric-matrix-from-diagonal-fin-sequence-type-Ring + ( R) + ( n) + ( d) + ( j) + ( k))) + = + sum-fin-sequence-type-Ring R n + ( λ k → + mul-Ring R + ( M i k) + ( mul-Ring R + ( d j) + ( indicator-fin-sequence-type-Ring R n j k))) + by + htpy-sum-fin-sequence-type-Ring R n + ( λ k → + ap-mul-Ring R + ( refl) + ( htpy-row-matrix-from-diagonal-fin-sequence-type-Ring + ( R) + ( n) + ( d) + ( j) + ( k))) + = + sum-fin-sequence-type-Ring R n + ( λ k → + mul-Ring R + ( mul-Ring R (M i k) (d j)) + ( indicator-fin-sequence-type-Ring R n j k)) + by + htpy-sum-fin-sequence-type-Ring R n + ( λ k → inv (associative-mul-Ring R _ _ _)) + = mul-Ring R (M i j) (d j) + by right-dot-product-indicator-fin-sequence-type-Ring R n j _ +``` diff --git a/src/linear-algebra/multiplication-matrices.lagda.md b/src/linear-algebra/multiplication-grids.lagda.md similarity index 77% rename from src/linear-algebra/multiplication-matrices.lagda.md rename to src/linear-algebra/multiplication-grids.lagda.md index 7d30a008b07..e65cb32f541 100644 --- a/src/linear-algebra/multiplication-matrices.lagda.md +++ b/src/linear-algebra/multiplication-grids.lagda.md @@ -1,7 +1,7 @@ -# Multiplication of matrices +# Multiplication of grids ```agda -module linear-algebra.multiplication-matrices where +module linear-algebra.multiplication-grids where ```
Imports @@ -14,24 +14,24 @@ module linear-algebra.multiplication-matrices where ## Definition -### Multiplication of matrices +### Multiplication of grids ```agda {- -mul-tuple-matrix : {l : Level} → {K : UU l} → {m n : ℕ} → +mul-tuple-grid : {l : Level} → {K : UU l} → {m n : ℕ} → (K → K → K) → (K → K → K) → K → tuple K m → Mat K m n → tuple K n -mul-tuple-matrix _ _ zero empty-tuple empty-tuple = diagonal-product zero -mul-tuple-matrix mulK addK zero (x ∷ xs) (v ∷ vs) = +mul-tuple-grid _ _ zero empty-tuple empty-tuple = diagonal-product zero +mul-tuple-grid mulK addK zero (x ∷ xs) (v ∷ vs) = add-tuple addK (mul-scalar-tuple mulK x v) - (mul-tuple-matrix mulK addK zero xs vs) + (mul-tuple-grid mulK addK zero xs vs) mul-Mat : {l' : Level} → {K : UU l'} → {l m n : ℕ} → (K → K → K) → (K → K → K) → K → Mat K l m → Mat K m n → Mat K l n mul-Mat _ _ zero empty-tuple _ = empty-tuple mul-Mat mulK addK zero (v ∷ vs) m = - mul-tuple-matrix mulK addK zero v m + mul-tuple-grid mulK addK zero v m ∷ mul-Mat mulK addK zero vs m -} ``` @@ -52,7 +52,7 @@ mul-transpose mulK-comm (a ∷ as) b = {!!} -} ``` -## Properties of Matrix Multiplication +## Properties of Grid Multiplication - distributive laws (incomplete) - associativity (TODO) @@ -68,7 +68,7 @@ module _ {zero : K} where - left-distributive-tuple-matrix : + left-distributive-tuple-grid : {n m : ℕ} → ( {l : ℕ} → diagonal-product {n = l} zero = @@ -77,23 +77,23 @@ module _ ((x y : K) → addK x y = addK y x) → ((x y z : K) → addK x (addK y z) = addK (addK x y) z) → (a : tuple K n) (b : Mat K n m) (c : Mat K n m) → - ( mul-tuple-matrix mulK addK zero a (add-Mat addK b c)) = + ( mul-tuple-grid mulK addK zero a (add-Mat addK b c)) = ( add-tuple ( addK) - ( mul-tuple-matrix mulK addK zero a b) - ( mul-tuple-matrix mulK addK zero a c)) - left-distributive-tuple-matrix id-tuple _ _ _ empty-tuple empty-tuple empty-tuple = + ( mul-tuple-grid mulK addK zero a b) + ( mul-tuple-grid mulK addK zero a c)) + left-distributive-tuple-grid id-tuple _ _ _ empty-tuple empty-tuple empty-tuple = id-tuple - left-distributive-tuple-matrix + left-distributive-tuple-grid id-tuple k-distr addK-comm addK-associative (a ∷ as) (r1 ∷ r1s) (r2 ∷ r2s) = ap ( λ r → add-tuple addK r - (mul-tuple-matrix mulK addK zero as (add-Mat addK r1s r2s))) + (mul-tuple-grid mulK addK zero as (add-Mat addK r1s r2s))) (left-distributive-scalar-tuple {zero = zero} k-distr a r1 r2) ∙ (ap (λ r → add-tuple addK (add-tuple addK (map-tuple (mulK a) r1) (mul-scalar-tuple mulK a r2)) r) - (left-distributive-tuple-matrix + (left-distributive-tuple-grid id-tuple k-distr addK-comm addK-associative as r1s r2s) ∙ lemma-shuffle) where @@ -118,7 +118,7 @@ module _ ∙ commutative-add-tuples {zero = zero} addK-comm (add-tuple addK y w) (add-tuple addK x z))))))) - left-distributive-matrices : + left-distributive-grids : {n m p : ℕ} → ({l : ℕ} → diagonal-product {n = l} zero = @@ -129,19 +129,19 @@ module _ (a : Mat K m n) (b : Mat K n p) (c : Mat K n p) → ( mul-Mat mulK addK zero a (add-Mat addK b c)) = ( add-Mat addK (mul-Mat mulK addK zero a b) (mul-Mat mulK addK zero a c)) - left-distributive-matrices _ _ _ _ empty-tuple _ _ = refl - left-distributive-matrices id-tuple k-distr addK-comm addK-associative (a ∷ as) b c = + left-distributive-grids _ _ _ _ empty-tuple _ _ = refl + left-distributive-grids id-tuple k-distr addK-comm addK-associative (a ∷ as) b c = (ap (λ r → r ∷ mul-Mat mulK addK zero as (add-Mat addK b c)) - (left-distributive-tuple-matrix + (left-distributive-tuple-grid id-tuple k-distr addK-comm addK-associative a b c)) - ∙ ap (_∷_ (add-tuple addK (mul-tuple-matrix mulK addK zero a b) - (mul-tuple-matrix mulK addK zero a c))) - (left-distributive-matrices + ∙ ap (_∷_ (add-tuple addK (mul-tuple-grid mulK addK zero a b) + (mul-tuple-grid mulK addK zero a c))) + (left-distributive-grids id-tuple k-distr addK-comm addK-associative as b c) -} {- TODO: right distributivity - right-distributive-matrices : + right-distributive-grids : {n m p : ℕ} → ({l : ℕ} → diagonal-product {n = l} zero = @@ -152,23 +152,23 @@ module _ (b : Mat K n p) (c : Mat K n p) (d : Mat K p m) → mul-Mat mulK addK zero (add-Mat addK b c) d = add-Mat addK (mul-Mat mulK addK zero b d) (mul-Mat mulK addK zero c d) - right-distributive-matrices _ _ _ _ empty-tuple empty-tuple _ = refl - right-distributive-matrices + right-distributive-grids _ _ _ _ empty-tuple empty-tuple _ = refl + right-distributive-grids {p = .zero-ℕ} id-tuple k-distr addK-comm addK-associative (b ∷ bs) (c ∷ cs) empty-tuple = {!!} - right-distributive-matrices + right-distributive-grids id-tuple k-distr addK-comm addK-associative (b ∷ bs) (c ∷ cs) (d ∷ ds) = {!!} -- this might also need a proof that zero is the additive identity TODO: associativity - associative-mul-matrices : + associative-mul-grids : {l : Level} {K : UU l} {n m p q : ℕ} → {addK : K → K → K} {mulK : K → K → K} {zero : K} → (x : Mat K m n) → (y : Mat K n p) → (z : Mat K p q) → mul-Mat mulK addK zero x (mul-Mat mulK addK zero y z) = mul-Mat mulK addK zero (mul-Mat mulK addK zero x y) z - associative-mul-matrices x y z = {!!} + associative-mul-grids x y z = {!!} -} ``` diff --git a/src/linear-algebra/multiplication-matrices-on-commutative-rings.lagda.md b/src/linear-algebra/multiplication-matrices-on-commutative-rings.lagda.md new file mode 100644 index 00000000000..430661cbf04 --- /dev/null +++ b/src/linear-algebra/multiplication-matrices-on-commutative-rings.lagda.md @@ -0,0 +1,225 @@ +# Multiplication of matrices on commutative rings + +```agda +module linear-algebra.multiplication-matrices-on-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings +open import commutative-algebra.sums-of-finite-sequences-of-elements-commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.binary-homotopies +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.universe-levels + +open import linear-algebra.bilinear-maps-left-modules-commutative-rings +open import linear-algebra.matrices-on-commutative-rings +open import linear-algebra.multiplication-matrices-on-rings +``` + +
+ +## Idea + +[Matrix multiplication](linear-algebra.multiplication-matrices-on-rings.md) on +[commutative rings](commutative-algebra.commutative-rings.md) is a +[bilinear map](linear-algebra.bilinear-maps-left-modules-commutative-rings.md). + +## Definition + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (m n p : ℕ) + where + + mul-matrix-Commutative-Ring : + matrix-Commutative-Ring R m n → matrix-Commutative-Ring R n p → + matrix-Commutative-Ring R m p + mul-matrix-Commutative-Ring = + mul-matrix-Ring (ring-Commutative-Ring R) m n p +``` + +## Properties + +### Multiplication of matrices is associative + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + where + + abstract + associative-mul-matrix-Commutative-Ring : + (m n p q : ℕ) + (A : matrix-Commutative-Ring R m n) + (B : matrix-Commutative-Ring R n p) + (C : matrix-Commutative-Ring R p q) → + mul-matrix-Commutative-Ring R m p q + ( mul-matrix-Commutative-Ring R m n p A B) + ( C) = + mul-matrix-Commutative-Ring R m n q + ( A) + ( mul-matrix-Commutative-Ring R n p q B C) + associative-mul-matrix-Commutative-Ring = + associative-mul-matrix-Ring (ring-Commutative-Ring R) +``` + +### Multiplication of matrices is distributive over addition + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (m n p : ℕ) + where + + abstract + left-distributive-mul-add-matrix-Commutative-Ring : + (A : matrix-Commutative-Ring R m n) + (B C : matrix-Commutative-Ring R n p) → + mul-matrix-Commutative-Ring R m n p + ( A) + ( add-matrix-Commutative-Ring R n p B C) = + add-matrix-Commutative-Ring R m p + ( mul-matrix-Commutative-Ring R m n p A B) + ( mul-matrix-Commutative-Ring R m n p A C) + left-distributive-mul-add-matrix-Commutative-Ring = + left-distributive-mul-add-matrix-Ring (ring-Commutative-Ring R) m n p + + right-distributive-mul-add-matrix-Commutative-Ring : + (A B : matrix-Commutative-Ring R m n) + (C : matrix-Commutative-Ring R n p) → + mul-matrix-Commutative-Ring R m n p + ( add-matrix-Commutative-Ring R m n A B) + ( C) = + add-matrix-Commutative-Ring R m p + ( mul-matrix-Commutative-Ring R m n p A C) + ( mul-matrix-Commutative-Ring R m n p B C) + right-distributive-mul-add-matrix-Commutative-Ring = + right-distributive-mul-add-matrix-Ring (ring-Commutative-Ring R) m n p +``` + +### `(rA)B = r(AB)` + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (m n p : ℕ) + where + + abstract + associative-scalar-mul-mul-matrix-Commutative-Ring : + (r : type-Commutative-Ring R) + (A : matrix-Commutative-Ring R m n) + (B : matrix-Commutative-Ring R n p) → + mul-matrix-Commutative-Ring R m n p + ( scalar-mul-matrix-Commutative-Ring R m n r A) + ( B) = + scalar-mul-matrix-Commutative-Ring R m p + ( r) + ( mul-matrix-Commutative-Ring R m n p A B) + associative-scalar-mul-mul-matrix-Commutative-Ring = + associative-scalar-mul-mul-matrix-Ring (ring-Commutative-Ring R) m n p +``` + +### `A(rB) = r(AB)` + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (m n p : ℕ) + (A : matrix-Commutative-Ring R m n) + (r : type-Commutative-Ring R) + (B : matrix-Commutative-Ring R n p) + where + + abstract + htpy-left-swap-mul-scalar-mul-matrix-Ring : + binary-htpy + ( mul-matrix-Commutative-Ring R m n p + ( A) + ( scalar-mul-matrix-Commutative-Ring R n p r B)) + ( scalar-mul-matrix-Commutative-Ring R m p + ( r) + ( mul-matrix-Commutative-Ring R m n p A B)) + htpy-left-swap-mul-scalar-mul-matrix-Ring i k = + ( htpy-sum-fin-sequence-type-Commutative-Ring R n + ( λ j → left-swap-mul-Commutative-Ring R (A i j) r (B j k))) ∙ + ( inv + ( left-distributive-mul-sum-fin-sequence-type-Commutative-Ring R n r _)) + + left-swap-mul-scalar-mul-matrix-Ring : + mul-matrix-Commutative-Ring R m n p + ( A) + ( scalar-mul-matrix-Commutative-Ring R n p r B) = + scalar-mul-matrix-Commutative-Ring R m p + ( r) + ( mul-matrix-Commutative-Ring R m n p A B) + left-swap-mul-scalar-mul-matrix-Ring = + eq-binary-htpy _ _ htpy-left-swap-mul-scalar-mul-matrix-Ring +``` + +### Matrix multiplication is a bilinear map + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (m n p : ℕ) + where + + is-linear-on-left-mul-matrix-Commutative-Ring : + is-linear-on-left-binary-map-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring R m n) + ( left-module-matrix-Commutative-Ring R n p) + ( left-module-matrix-Commutative-Ring R m p) + ( mul-matrix-Commutative-Ring R m n p) + is-linear-on-left-mul-matrix-Commutative-Ring B = + ( ( λ A A' → + right-distributive-mul-add-matrix-Commutative-Ring R m n p A A' B) , + ( λ r A → + associative-scalar-mul-mul-matrix-Commutative-Ring R m n p r A B)) + + is-linear-on-right-mul-matrix-Commutative-Ring : + is-linear-on-right-binary-map-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring R m n) + ( left-module-matrix-Commutative-Ring R n p) + ( left-module-matrix-Commutative-Ring R m p) + ( mul-matrix-Commutative-Ring R m n p) + is-linear-on-right-mul-matrix-Commutative-Ring A = + ( left-distributive-mul-add-matrix-Commutative-Ring R m n p A , + left-swap-mul-scalar-mul-matrix-Ring R m n p A) + + is-bilinear-map-mul-matrix-Commutative-Ring : + is-bilinear-map-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring R m n) + ( left-module-matrix-Commutative-Ring R n p) + ( left-module-matrix-Commutative-Ring R m p) + ( mul-matrix-Commutative-Ring R m n p) + is-bilinear-map-mul-matrix-Commutative-Ring = + ( is-linear-on-left-mul-matrix-Commutative-Ring , + is-linear-on-right-mul-matrix-Commutative-Ring) + + bilinear-map-mul-matrix-Commutative-Ring : + bilinear-map-left-module-Commutative-Ring + ( R) + ( left-module-matrix-Commutative-Ring R m n) + ( left-module-matrix-Commutative-Ring R n p) + ( left-module-matrix-Commutative-Ring R m p) + bilinear-map-mul-matrix-Commutative-Ring = + ( mul-matrix-Commutative-Ring R m n p , + is-bilinear-map-mul-matrix-Commutative-Ring) +``` diff --git a/src/linear-algebra/multiplication-matrices-on-rings.lagda.md b/src/linear-algebra/multiplication-matrices-on-rings.lagda.md new file mode 100644 index 00000000000..4fc0cbc6797 --- /dev/null +++ b/src/linear-algebra/multiplication-matrices-on-rings.lagda.md @@ -0,0 +1,242 @@ +# Multiplication of matrices on rings + +```agda +{-# OPTIONS --lossy-unification #-} + +module linear-algebra.multiplication-matrices-on-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.binary-homotopies +open import foundation.identity-types +open import foundation.universe-levels + +open import linear-algebra.matrices-on-rings + +open import ring-theory.rings +open import ring-theory.sums-of-finite-families-of-elements-rings +open import ring-theory.sums-of-finite-sequences-of-elements-rings + +open import univalent-combinatorics.finite-types +``` + +
+ +## Idea + +In a [ring](ring-theory.rings.md) `R`, the +{{#concept "product" Disambiguation="of two matrices over a ring" Agda=mul-matrix-Ring}} +of an `m × n` [matrix](linear-algebra.matrices-on-rings.md) `A` and an `n × p` +matrix `B` is the `m × p` matrix defined by `(AB)ᵢₖ = ∑ⱼ AᵢⱼBⱼₖ`. + +## Definition + +```agda +module _ + {l : Level} + (R : Ring l) + (m n p : ℕ) + where + + mul-matrix-Ring : + matrix-Ring R m n → matrix-Ring R n p → matrix-Ring R m p + mul-matrix-Ring A B i k = + sum-fin-sequence-type-Ring R + ( n) + ( λ j → mul-Ring R (A i j) (B j k)) +``` + +## Properties + +### Multiplication of matrices is associative + +```agda +module _ + {l : Level} + (R : Ring l) + (m n p q : ℕ) + where + + abstract + htpy-associative-mul-matrix-Ring : + (A : matrix-Ring R m n) + (B : matrix-Ring R n p) + (C : matrix-Ring R p q) → + binary-htpy + ( mul-matrix-Ring R m p q (mul-matrix-Ring R m n p A B) C) + ( mul-matrix-Ring R m n q A (mul-matrix-Ring R n p q B C)) + htpy-associative-mul-matrix-Ring A B C i j = + equational-reasoning + sum-fin-sequence-type-Ring R + ( p) + ( λ a → + mul-Ring R + ( sum-fin-sequence-type-Ring R + ( n) + ( λ b → mul-Ring R (A i b) (B b a))) + ( C a j)) + = + sum-fin-sequence-type-Ring R + ( p) + ( λ a → + sum-finite-Ring R + ( Fin-Finite-Type n) + ( λ b → mul-Ring R (A i b) (mul-Ring R (B b a) (C a j)))) + by + htpy-sum-fin-sequence-type-Ring R + ( p) + ( λ a → + ( right-distributive-mul-sum-fin-sequence-type-Ring R n _ _) ∙ + ( htpy-sum-fin-sequence-type-Ring R n + ( λ b → associative-mul-Ring R _ _ _)) ∙ + ( inv (eq-sum-finite-sum-fin-sequence-Ring R n _))) + = + sum-finite-Ring R + ( Fin-Finite-Type p) + ( λ a → + sum-finite-Ring R + ( Fin-Finite-Type n) + ( λ b → mul-Ring R (A i b) (mul-Ring R (B b a) (C a j)))) + by inv (eq-sum-finite-sum-fin-sequence-Ring R p _) + = + sum-finite-Ring R + ( Fin-Finite-Type n) + ( λ b → + sum-finite-Ring R + ( Fin-Finite-Type p) + ( λ a → mul-Ring R (A i b) (mul-Ring R (B b a) (C a j)))) + by interchange-sum-sum-finite-Ring R _ _ _ + = + sum-finite-Ring R + ( Fin-Finite-Type n) + ( λ b → + mul-Ring R + ( A i b) + ( mul-matrix-Ring R n p q B C b j)) + by + htpy-sum-finite-Ring R _ + ( λ b → + ( eq-sum-finite-sum-fin-sequence-Ring R p _) ∙ + ( inv + ( left-distributive-mul-sum-fin-sequence-type-Ring R p _ _))) + = + mul-matrix-Ring R m n q + ( A) + ( mul-matrix-Ring R n p q B C) + ( i) + ( j) + by eq-sum-finite-sum-fin-sequence-Ring R n _ + + associative-mul-matrix-Ring : + (A : matrix-Ring R m n) + (B : matrix-Ring R n p) + (C : matrix-Ring R p q) → + mul-matrix-Ring R m p q (mul-matrix-Ring R m n p A B) C = + mul-matrix-Ring R m n q A (mul-matrix-Ring R n p q B C) + associative-mul-matrix-Ring A B C = + eq-binary-htpy _ _ + ( htpy-associative-mul-matrix-Ring A B C) +``` + +### Left distributivity of matrix multiplication over addition + +```agda +module _ + {l : Level} + (R : Ring l) + (m n p : ℕ) + (A : matrix-Ring R m n) + (B C : matrix-Ring R n p) + where + + abstract + htpy-left-distributive-mul-add-matrix-Ring : + binary-htpy + ( mul-matrix-Ring R m n p A (add-matrix-Ring R n p B C)) + ( add-matrix-Ring R m p + ( mul-matrix-Ring R m n p A B) + ( mul-matrix-Ring R m n p A C)) + htpy-left-distributive-mul-add-matrix-Ring i k = + ( htpy-sum-fin-sequence-type-Ring R + ( n) + ( λ j → left-distributive-mul-add-Ring R _ _ _)) ∙ + ( inv (interchange-add-sum-fin-sequence-type-Ring R n _ _)) + + left-distributive-mul-add-matrix-Ring : + mul-matrix-Ring R m n p A (add-matrix-Ring R n p B C) = + add-matrix-Ring R m p + ( mul-matrix-Ring R m n p A B) + ( mul-matrix-Ring R m n p A C) + left-distributive-mul-add-matrix-Ring = + eq-binary-htpy _ _ htpy-left-distributive-mul-add-matrix-Ring +``` + +### Right distributivity of matrix multiplication over addition + +```agda +module _ + {l : Level} + (R : Ring l) + (m n p : ℕ) + (A B : matrix-Ring R m n) + (C : matrix-Ring R n p) + where + + abstract + htpy-right-distributive-mul-add-matrix-Ring : + binary-htpy + ( mul-matrix-Ring R m n p (add-matrix-Ring R m n A B) C) + ( add-matrix-Ring R m p + ( mul-matrix-Ring R m n p A C) + ( mul-matrix-Ring R m n p B C)) + htpy-right-distributive-mul-add-matrix-Ring i k = + ( htpy-sum-fin-sequence-type-Ring R + ( n) + ( λ j → right-distributive-mul-add-Ring R _ _ _)) ∙ + ( inv (interchange-add-sum-fin-sequence-type-Ring R n _ _)) + + right-distributive-mul-add-matrix-Ring : + mul-matrix-Ring R m n p (add-matrix-Ring R m n A B) C = + add-matrix-Ring R m p + ( mul-matrix-Ring R m n p A C) + ( mul-matrix-Ring R m n p B C) + right-distributive-mul-add-matrix-Ring = + eq-binary-htpy _ _ htpy-right-distributive-mul-add-matrix-Ring +``` + +### `(cA)B = c(AB)` + +```agda +module _ + {l : Level} + (R : Ring l) + (m n p : ℕ) + (r : type-Ring R) + (A : matrix-Ring R m n) + (B : matrix-Ring R n p) + where + + abstract + htpy-associative-scalar-mul-mul-matrix-Ring : + binary-htpy + ( mul-matrix-Ring R m n p (scalar-mul-matrix-Ring R m n r A) B) + ( scalar-mul-matrix-Ring R m p r (mul-matrix-Ring R m n p A B)) + htpy-associative-scalar-mul-mul-matrix-Ring i k = + ( htpy-sum-fin-sequence-type-Ring R n + ( λ j → associative-mul-Ring R r _ _)) ∙ + ( inv (left-distributive-mul-sum-fin-sequence-type-Ring R n r _)) + + associative-scalar-mul-mul-matrix-Ring : + mul-matrix-Ring R m n p (scalar-mul-matrix-Ring R m n r A) B = + scalar-mul-matrix-Ring R m p r (mul-matrix-Ring R m n p A B) + associative-scalar-mul-mul-matrix-Ring = + eq-binary-htpy _ _ htpy-associative-scalar-mul-mul-matrix-Ring +``` + +## See also + +- [Multiplication of square matrices on rings](linear-algebra.multiplication-square-matrices-on-rings.md) diff --git a/src/linear-algebra/multiplication-square-matrices-on-commutative-rings.lagda.md b/src/linear-algebra/multiplication-square-matrices-on-commutative-rings.lagda.md new file mode 100644 index 00000000000..0685a798a52 --- /dev/null +++ b/src/linear-algebra/multiplication-square-matrices-on-commutative-rings.lagda.md @@ -0,0 +1,137 @@ +# Multiplication of square matrices on commutative rings + +```agda +module linear-algebra.multiplication-square-matrices-on-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.universe-levels + +open import group-theory.monoids + +open import linear-algebra.bilinear-maps-left-modules-commutative-rings +open import linear-algebra.identity-matrices-on-commutative-rings +open import linear-algebra.multiplication-matrices-on-commutative-rings +open import linear-algebra.multiplication-square-matrices-on-rings +open import linear-algebra.square-matrices-on-commutative-rings +``` + +
+ +## Idea + +[Matrix multiplication](linear-algebra.multiplication-matrices-on-commutative-rings.md) +on [square matrices](linear-algebra.square-matrices-on-commutative-rings.md) on +a [commutative ring](commutative-algebra.commutative-rings.md) `R` is a +[bilinear map](linear-algebra.bilinear-maps-left-modules-commutative-rings.md). + +## Definition + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + where + + mul-square-matrix-Commutative-Ring : + square-matrix-Commutative-Ring R n → + square-matrix-Commutative-Ring R n → + square-matrix-Commutative-Ring R n + mul-square-matrix-Commutative-Ring = + mul-square-matrix-Ring (ring-Commutative-Ring R) n +``` + +## Properties + +### Associativity of matrix multiplication + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + where + + abstract + associative-mul-square-matrix-Commutative-Ring : + (A B C : square-matrix-Commutative-Ring R n) → + mul-square-matrix-Commutative-Ring R n + ( mul-square-matrix-Commutative-Ring R n A B) + ( C) = + mul-square-matrix-Commutative-Ring R n + ( A) + ( mul-square-matrix-Commutative-Ring R n B C) + associative-mul-square-matrix-Commutative-Ring = + associative-mul-matrix-Commutative-Ring R n n n n +``` + +### Unit laws of square matrix multiplication + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + where + + abstract + left-unit-law-mul-square-matrix-Commutative-Ring : + (A : square-matrix-Commutative-Ring R n) → + mul-square-matrix-Commutative-Ring R n + ( id-matrix-Commutative-Ring R n) + ( A) = + A + left-unit-law-mul-square-matrix-Commutative-Ring = + left-unit-law-mul-square-matrix-Ring (ring-Commutative-Ring R) n + + right-unit-law-mul-square-matrix-Commutative-Ring : + (A : square-matrix-Commutative-Ring R n) → + mul-square-matrix-Commutative-Ring R n + ( A) + ( id-matrix-Commutative-Ring R n) = + A + right-unit-law-mul-square-matrix-Commutative-Ring = + right-unit-law-mul-square-matrix-Ring (ring-Commutative-Ring R) n +``` + +### Multiplication of square matrices in a commutative ring is a bilinear map + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + where + + is-bilinear-map-mul-square-matrix-Commutative-Ring : + is-bilinear-map-left-module-Commutative-Ring + ( R) + ( left-module-square-matrix-Commutative-Ring R n) + ( left-module-square-matrix-Commutative-Ring R n) + ( left-module-square-matrix-Commutative-Ring R n) + ( mul-square-matrix-Commutative-Ring R n) + is-bilinear-map-mul-square-matrix-Commutative-Ring = + is-bilinear-map-mul-matrix-Commutative-Ring R n n n + + bilinear-map-mul-square-matrix-Commutative-Ring : + bilinear-map-left-module-Commutative-Ring + ( R) + ( left-module-square-matrix-Commutative-Ring R n) + ( left-module-square-matrix-Commutative-Ring R n) + ( left-module-square-matrix-Commutative-Ring R n) + bilinear-map-mul-square-matrix-Commutative-Ring = + bilinear-map-mul-matrix-Commutative-Ring R n n n +``` + +## See also + +- [The algebra of square matrices over commutative rings](linear-algebra.algebra-of-square-matrices-on-commutative-rings.md) diff --git a/src/linear-algebra/multiplication-square-matrices-on-rings.lagda.md b/src/linear-algebra/multiplication-square-matrices-on-rings.lagda.md new file mode 100644 index 00000000000..f554195e650 --- /dev/null +++ b/src/linear-algebra/multiplication-square-matrices-on-rings.lagda.md @@ -0,0 +1,239 @@ +# Multiplication of square matrices on rings + +```agda +{-# OPTIONS --lossy-unification #-} +module linear-algebra.multiplication-square-matrices-on-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-functions +open import foundation.binary-homotopies +open import foundation.coproduct-types +open import foundation.decidable-propositions +open import foundation.dependent-pair-types +open import foundation.function-types +open import foundation.identity-types +open import foundation.propositions +open import foundation.sets +open import foundation.singleton-subtypes-discrete-types +open import foundation.torsorial-type-families +open import foundation.universe-levels + +open import group-theory.monoids +open import group-theory.semigroups + +open import linear-algebra.diagonal-matrices-on-rings +open import linear-algebra.identity-matrices-on-rings +open import linear-algebra.multiplication-matrices-on-rings +open import linear-algebra.square-matrices-on-rings + +open import ring-theory.rings +open import ring-theory.sums-of-finite-families-of-elements-rings +open import ring-theory.sums-of-finite-sequences-of-elements-rings + +open import univalent-combinatorics.decidable-subtypes +open import univalent-combinatorics.equality-standard-finite-types +open import univalent-combinatorics.finite-types +open import univalent-combinatorics.standard-finite-types +``` + +
+ +## Idea + +This file describes properties of +[multiplication](linear-algebra.multiplication-matrices-on-rings.md) of +[square matrices](linear-algebra.square-matrices-on-rings.md) on +[rings](ring-theory.rings.md). + +## Definition + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + mul-square-matrix-Ring : + square-matrix-Ring R n → square-matrix-Ring R n → square-matrix-Ring R n + mul-square-matrix-Ring = mul-matrix-Ring R n n n +``` + +## Properties + +### Associativity of square matrix multiplication + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + associative-mul-square-matrix-Ring : + (A B C : square-matrix-Ring R n) → + mul-square-matrix-Ring R n (mul-square-matrix-Ring R n A B) C = + mul-square-matrix-Ring R n A (mul-square-matrix-Ring R n B C) + associative-mul-square-matrix-Ring = + associative-mul-matrix-Ring R n n n n +``` + +### The left identity law of square matrix multiplication + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + (A : square-matrix-Ring R n) + where + + abstract + htpy-left-unit-law-mul-square-matrix-Ring : + binary-htpy + ( mul-square-matrix-Ring R n (id-matrix-Ring R n) A) + ( A) + htpy-left-unit-law-mul-square-matrix-Ring i j = + equational-reasoning + sum-fin-sequence-type-Ring R n + ( λ k → mul-Ring R (id-matrix-Ring R n i k) (A k j)) + = + sum-finite-Ring R + ( Fin-Finite-Type n) + ( λ k → mul-Ring R (id-matrix-Ring R n i k) (A k j)) + by inv (eq-sum-finite-sum-fin-sequence-Ring R n _) + = + sum-finite-Ring R + ( finite-type-subset-Finite-Type + ( Fin-Finite-Type n) + ( decidable-standard-singleton-subtype-Discrete-Type + ( Fin-Discrete-Type n) i)) + ( λ (k , i=k) → mul-Ring R (id-matrix-Ring R n i k) (A k j)) + by + vanish-sum-complement-decidable-subset-finite-Ring + ( R) + ( Fin-Finite-Type n) + ( decidable-standard-singleton-subtype-Discrete-Type + ( Fin-Discrete-Type n) + ( i)) + ( _) + ( λ k i≠k → + equational-reasoning + mul-Ring R (id-matrix-Ring R n i k) (A k j) + = mul-Ring R (zero-Ring R) (A k j) + by + ap-mul-Ring R + ( ap + ( rec-coproduct _ _) + ( eq-type-Prop + ( is-decidable-Prop (Id-Prop (Fin-Set n) i k)) + { y = inr (i≠k ∘ inv)})) + ( refl) + = zero-Ring R + by left-zero-law-mul-Ring R _) + = mul-Ring R (id-matrix-Ring R n i i) (A i j) + by sum-finite-is-contr-Ring R _ (is-torsorial-Id' i) (i , refl) _ + = mul-Ring R (one-Ring R) (A i j) + by + ap-mul-Ring R + ( ap + ( rec-coproduct _ _) + ( eq-type-Prop + ( is-decidable-Prop (Id-Prop (Fin-Set n) i i)) + { y = inl refl})) + ( refl) + = A i j + by left-unit-law-mul-Ring R _ + + left-unit-law-mul-square-matrix-Ring : + mul-square-matrix-Ring R n (id-matrix-Ring R n) A = A + left-unit-law-mul-square-matrix-Ring = + eq-binary-htpy _ _ htpy-left-unit-law-mul-square-matrix-Ring +``` + +### The right identity law of matrix multiplication + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + (A : square-matrix-Ring R n) + where + + abstract + htpy-right-unit-law-mul-square-matrix-Ring : + binary-htpy + ( mul-square-matrix-Ring R n A (id-matrix-Ring R n)) + ( A) + htpy-right-unit-law-mul-square-matrix-Ring i j = + equational-reasoning + sum-fin-sequence-type-Ring R + ( n) + ( λ k → mul-Ring R (A i k) (id-matrix-Ring R n k j)) + = + sum-finite-Ring R + ( Fin-Finite-Type n) + ( λ k → mul-Ring R (A i k) (id-matrix-Ring R n k j)) + by inv (eq-sum-finite-sum-fin-sequence-Ring R n _) + = + sum-finite-Ring R + ( finite-type-subset-Finite-Type + ( Fin-Finite-Type n) + ( decidable-standard-singleton-subtype-Discrete-Type + ( Fin-Discrete-Type n) + ( j))) + ( λ (k , k=j) → mul-Ring R (A i k) (id-matrix-Ring R n k j)) + by + vanish-sum-complement-decidable-subset-finite-Ring + ( R) + ( Fin-Finite-Type n) + ( decidable-standard-singleton-subtype-Discrete-Type + ( Fin-Discrete-Type n) + ( j)) + ( _) + ( λ k k≠j → + equational-reasoning + mul-Ring R (A i k) (id-matrix-Ring R n k j) + = mul-Ring R (A i k) (zero-Ring R) + by + ap-mul-Ring + ( R) + ( refl) + ( ap + ( rec-coproduct _ _) + ( eq-type-Prop + ( is-decidable-Prop (Id-Prop (Fin-Set n) k j)) + { y = inr k≠j})) + = zero-Ring R + by right-zero-law-mul-Ring R _) + = mul-Ring R (A i j) (id-matrix-Ring R n j j) + by sum-finite-is-contr-Ring R _ (is-torsorial-Id' j) (j , refl) _ + = mul-Ring R (A i j) (one-Ring R) + by + ap-mul-Ring + ( R) + ( refl) + ( ap + ( rec-coproduct _ _) + ( eq-type-Prop + ( is-decidable-Prop (Id-Prop (Fin-Set n) j j)) + { y = inl refl})) + = A i j + by right-unit-law-mul-Ring R _ + + right-unit-law-mul-square-matrix-Ring : + mul-square-matrix-Ring R n A (id-matrix-Ring R n) = A + right-unit-law-mul-square-matrix-Ring = + eq-binary-htpy _ _ htpy-right-unit-law-mul-square-matrix-Ring +``` + +## See also + +- [Rings of square matrices on rings](linear-algebra.rings-of-square-matrices-on-rings.md), + which shows that square matrices form a ring under multiplication diff --git a/src/linear-algebra/rings-of-square-matrices-on-rings.lagda.md b/src/linear-algebra/rings-of-square-matrices-on-rings.lagda.md new file mode 100644 index 00000000000..b9bed48e2f5 --- /dev/null +++ b/src/linear-algebra/rings-of-square-matrices-on-rings.lagda.md @@ -0,0 +1,61 @@ +# The rings of square matrices on rings + +```agda +module linear-algebra.rings-of-square-matrices-on-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.dependent-pair-types +open import foundation.universe-levels + +open import group-theory.monoids + +open import linear-algebra.identity-matrices-on-rings +open import linear-algebra.multiplication-matrices-on-rings +open import linear-algebra.multiplication-square-matrices-on-rings +open import linear-algebra.square-matrices-on-rings + +open import ring-theory.rings +``` + +
+ +## Idea + +For any `n : ℕ`, `n × n` +[square matrices](linear-algebra.square-matrices-on-rings.md) on a +[ring](ring-theory.rings.md) `R` themselves form a ring under +[multiplication](linear-algebra.multiplication-square-matrices-on-rings.md). + +## Definition + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + ring-square-matrix-Ring : Ring l + ring-square-matrix-Ring = + ( ab-square-matrix-Ring R n , + ( mul-square-matrix-Ring R n , + associative-mul-square-matrix-Ring R n) , + ( id-matrix-Ring R n , + left-unit-law-mul-square-matrix-Ring R n , + right-unit-law-mul-square-matrix-Ring R n) , + left-distributive-mul-add-matrix-Ring R n n n , + right-distributive-mul-add-matrix-Ring R n n n) + + monoid-mul-square-matrix-Ring : Monoid l + monoid-mul-square-matrix-Ring = + multiplicative-monoid-Ring ring-square-matrix-Ring +``` + +## See also + +- [The algebra of multiplication of square matrices on commutative rings](linear-algebra.algebra-of-square-matrices-on-commutative-rings.md) diff --git a/src/linear-algebra/scalar-multiplication-matrices.lagda.md b/src/linear-algebra/scalar-multiplication-grids.lagda.md similarity index 52% rename from src/linear-algebra/scalar-multiplication-matrices.lagda.md rename to src/linear-algebra/scalar-multiplication-grids.lagda.md index e911d6a34fc..fe67ace60f1 100644 --- a/src/linear-algebra/scalar-multiplication-matrices.lagda.md +++ b/src/linear-algebra/scalar-multiplication-grids.lagda.md @@ -1,7 +1,7 @@ -# Scalar multiplication on matrices +# Scalar multiplication on grids ```agda -module linear-algebra.scalar-multiplication-matrices where +module linear-algebra.scalar-multiplication-grids where ```
Imports @@ -11,15 +11,15 @@ open import elementary-number-theory.natural-numbers open import foundation.universe-levels -open import linear-algebra.matrices +open import linear-algebra.grids open import linear-algebra.scalar-multiplication-tuples ```
```agda -scalar-mul-matrix : +scalar-mul-grid : {l1 l2 : Level} {B : UU l1} {A : UU l2} {m n : ℕ} → - (B → A → A) → B → matrix A m n → matrix A m n -scalar-mul-matrix μ = scalar-mul-tuple (scalar-mul-tuple μ) + (B → A → A) → B → grid A m n → grid A m n +scalar-mul-grid μ = scalar-mul-tuple (scalar-mul-tuple μ) ``` diff --git a/src/linear-algebra/square-matrices-on-commutative-rings.lagda.md b/src/linear-algebra/square-matrices-on-commutative-rings.lagda.md new file mode 100644 index 00000000000..e613ca5a08b --- /dev/null +++ b/src/linear-algebra/square-matrices-on-commutative-rings.lagda.md @@ -0,0 +1,53 @@ +# Square matrices on commutative rings + +```agda +module linear-algebra.square-matrices-on-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.left-modules-commutative-rings +open import linear-algebra.matrices-on-commutative-rings +open import linear-algebra.square-matrices-on-rings +``` + +
+ +## Idea + +A +{{#concept "square matrix" Disambiguation="over a commutative ring" WDID=Q2739329 WD="square matrix" Agda=square-matrix-Commutative-Ring}} +on a [commutative ring](commutative-algebra.commutative-rings.md) `R` of size +`n` is an `n × n` [matrix](linear-algebra.matrices-on-commutative-rings.md) on +`R`. + +## Definition + +```agda +square-matrix-Commutative-Ring : + {l : Level} → Commutative-Ring l → ℕ → UU l +square-matrix-Commutative-Ring R = square-matrix-Ring (ring-Commutative-Ring R) +``` + +## Properties + +### Square matrices on a commutative ring form a left module + +```agda +module _ + {l : Level} + (R : Commutative-Ring l) + (n : ℕ) + where + + left-module-square-matrix-Commutative-Ring : left-module-Commutative-Ring l R + left-module-square-matrix-Commutative-Ring = + left-module-matrix-Commutative-Ring R n n +``` diff --git a/src/linear-algebra/square-matrices-on-rings.lagda.md b/src/linear-algebra/square-matrices-on-rings.lagda.md new file mode 100644 index 00000000000..268f9aa459a --- /dev/null +++ b/src/linear-algebra/square-matrices-on-rings.lagda.md @@ -0,0 +1,63 @@ +# Square matrices on rings + +```agda +module linear-algebra.square-matrices-on-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.sets +open import foundation.universe-levels + +open import group-theory.abelian-groups + +open import linear-algebra.left-modules-rings +open import linear-algebra.matrices-on-rings + +open import ring-theory.rings +``` + +
+ +## Idea + +A +{{#concept "square matrix" Disambiguation="over a ring" WDID=Q2739329 WD="square matrix" Agda=square-matrix-Ring}} +on a [ring](ring-theory.rings.md) `R` is a +[matrix](linear-algebra.matrices-on-rings.md) over `R` that is `n × n` for some +`n`. + +## Definition + +```agda +square-matrix-Ring : {l : Level} → Ring l → ℕ → UU l +square-matrix-Ring R n = matrix-Ring R n n +``` + +## Properties + +### Square matrices in a ring form a set + +```agda +set-square-matrix-Ring : {l : Level} → Ring l → ℕ → Set l +set-square-matrix-Ring R n = set-matrix-Ring R n n +``` + +### Square matrices on a ring form a left module + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + left-module-square-matrix-Ring : left-module-Ring l R + left-module-square-matrix-Ring = left-module-matrix-Ring R n n + + ab-square-matrix-Ring : Ab l + ab-square-matrix-Ring = ab-matrix-Ring R n n +``` diff --git a/src/linear-algebra/square-matrices.lagda.md b/src/linear-algebra/square-matrices.lagda.md new file mode 100644 index 00000000000..9561071e8c7 --- /dev/null +++ b/src/linear-algebra/square-matrices.lagda.md @@ -0,0 +1,30 @@ +# Square matrices + +```agda +module linear-algebra.square-matrices where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import linear-algebra.matrices +``` + +
+ +## Idea + +A +{{#concept "square matrix" WD="square matrix" WDID=Q2739329 Agda=square-matrix}} +is a [matrix](linear-algebra.matrices.md) that is `n × n` for some `n`. + +## Definition + +```agda +square-matrix : {l : Level} → UU l → ℕ → UU l +square-matrix A n = matrix A n n +``` diff --git a/src/linear-algebra/sums-of-finite-sequences-of-elements-left-modules-commutative-rings.lagda.md b/src/linear-algebra/sums-of-finite-sequences-of-elements-left-modules-commutative-rings.lagda.md new file mode 100644 index 00000000000..2cd4e581f6f --- /dev/null +++ b/src/linear-algebra/sums-of-finite-sequences-of-elements-left-modules-commutative-rings.lagda.md @@ -0,0 +1,49 @@ +# Sums of finite sequences of elements in left modules over commutative rings + +```agda +module linear-algebra.sums-of-finite-sequences-of-elements-left-modules-commutative-rings where +``` + +
Imports + +```agda +open import commutative-algebra.commutative-rings + +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import group-theory.sums-of-finite-sequences-of-elements-abelian-groups + +open import linear-algebra.left-modules-commutative-rings + +open import lists.finite-sequences +``` + +
+ +## Idea + +The +{{#concept "sum" Disambiguation="of elements of left modules over commutative rings" Agda=sum-fin-sequence-type-left-module-Commutative-Ring}} +operation on [left modules](linear-algebra.left-modules-commutative-rings.md) +over [commutative rings](commutative-algebra.commutative-rings.md) generalizes +its binary addition operation to any +[finite sequence](lists.finite-sequences.md) of elements of the module. + +## Definition + +```agda +module _ + {l1 l2 : Level} + (R : Commutative-Ring l1) + (M : left-module-Commutative-Ring l2 R) + where + + sum-fin-sequence-type-left-module-Commutative-Ring : + (n : ℕ) → + fin-sequence (type-left-module-Commutative-Ring R M) n → + type-left-module-Commutative-Ring R M + sum-fin-sequence-type-left-module-Commutative-Ring = + sum-fin-sequence-type-Ab (ab-left-module-Commutative-Ring R M) +``` diff --git a/src/linear-algebra/sums-of-finite-sequences-of-elements-left-modules-rings.lagda.md b/src/linear-algebra/sums-of-finite-sequences-of-elements-left-modules-rings.lagda.md new file mode 100644 index 00000000000..b965f3409a7 --- /dev/null +++ b/src/linear-algebra/sums-of-finite-sequences-of-elements-left-modules-rings.lagda.md @@ -0,0 +1,47 @@ +# Sums of finite sequences of elements in left modules over rings + +```agda +module linear-algebra.sums-of-finite-sequences-of-elements-left-modules-rings where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.universe-levels + +open import group-theory.sums-of-finite-sequences-of-elements-abelian-groups + +open import linear-algebra.left-modules-rings + +open import lists.finite-sequences + +open import ring-theory.rings +``` + +
+ +## Idea + +The +{{#concept "sum" Disambiguation="of elements of left modules over rings" Agda=sum-fin-sequence-type-left-module-Ring}} +operation on [left modules](linear-algebra.left-modules-rings.md) over +[rings](ring-theory.rings.md) generalizes its binary addition operation to any +[finite sequence](lists.finite-sequences.md) of elements of the module. + +## Definition + +```agda +module _ + {l1 l2 : Level} + (R : Ring l1) + (M : left-module-Ring l2 R) + where + + sum-fin-sequence-type-left-module-Ring : + (n : ℕ) → + fin-sequence (type-left-module-Ring R M) n → type-left-module-Ring R M + sum-fin-sequence-type-left-module-Ring = + sum-fin-sequence-type-Ab (ab-left-module-Ring R M) +``` diff --git a/src/linear-algebra/symmetric-matrices.lagda.md b/src/linear-algebra/symmetric-matrices.lagda.md new file mode 100644 index 00000000000..ff453921501 --- /dev/null +++ b/src/linear-algebra/symmetric-matrices.lagda.md @@ -0,0 +1,36 @@ +# Symmetric matrices + +```agda +module linear-algebra.symmetric-matrices where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.binary-homotopies +open import foundation.sets +open import foundation.universe-levels + +open import linear-algebra.square-matrices +open import linear-algebra.transposition-matrices +``` + +
+ +## Idea + +A +{{#concept "symmetric matrix" WDID=Q339011 WD="symmetric matrix" Agda=is-symmetric-square-matrix}} +is a [square matrix](linear-algebra.square-matrices.md) `M` with `Mᵢⱼ = Mⱼᵢ` for +all `i` and `j`. + +## Definition + +```agda +is-symmetric-square-matrix : + {l : Level} {A : UU l} (n : ℕ) → square-matrix A n → UU l +is-symmetric-square-matrix n M = + binary-htpy (transpose-square-matrix n M) M +``` diff --git a/src/linear-algebra/transposition-grids.lagda.md b/src/linear-algebra/transposition-grids.lagda.md new file mode 100644 index 00000000000..de65adc2e3e --- /dev/null +++ b/src/linear-algebra/transposition-grids.lagda.md @@ -0,0 +1,71 @@ +# Transposition of grids + +```agda +module linear-algebra.transposition-grids where +``` + +
Imports + +```agda +open import elementary-number-theory.natural-numbers + +open import foundation.action-on-identifications-binary-functions +open import foundation.action-on-identifications-functions +open import foundation.identity-types +open import foundation.universe-levels + +open import linear-algebra.grids + +open import lists.functoriality-tuples +open import lists.tuples +``` + +
+ +## Idea + +The +{{#concept "transposition of a grid" WD="grid transposition" WDID=Q77961711 Agda=transpose-grid}} +is the operation on [grids](linear-algebra.grids.md) that turns rows into +columns and columns into rows. + +## Definition + +```agda +transpose-grid : + {l : Level} → {A : UU l} → {m n : ℕ} → grid A m n → grid A n m +transpose-grid {n = zero-ℕ} x = empty-tuple +transpose-grid {n = succ-ℕ n} x = + map-tuple head-tuple x ∷ transpose-grid (map-tuple tail-tuple x) +``` + +## Properties + +```agda +is-involution-transpose-grid : + {l : Level} → {A : UU l} → {m n : ℕ} → + (x : grid A m n) → x = transpose-grid (transpose-grid x) +is-involution-transpose-grid {m = zero-ℕ} empty-tuple = refl +is-involution-transpose-grid {m = succ-ℕ m} (r ∷ rs) = + ( ap (_∷_ r) (is-involution-transpose-grid rs)) ∙ + ( ap-binary _∷_ + ( lemma-first-row r rs) (ap transpose-grid (lemma-rest r rs))) + where + lemma-first-row : + {l : Level} → {A : UU l} → {m n : ℕ} → (x : tuple A n) → + (xs : grid A m n) → + x = map-tuple head-tuple (transpose-grid (x ∷ xs)) + lemma-first-row {n = zero-ℕ} empty-tuple _ = refl + lemma-first-row {n = succ-ℕ m} (k ∷ ks) xs = + ap (_∷_ k) (lemma-first-row ks (map-tuple tail-tuple xs)) + + lemma-rest : + {l : Level} → {A : UU l} → {m n : ℕ} → (x : tuple A n) → + (xs : grid A m n) → + transpose-grid xs = map-tuple tail-tuple (transpose-grid (x ∷ xs)) + lemma-rest {n = zero-ℕ} empty-tuple xs = refl + lemma-rest {n = succ-ℕ n} (k ∷ ks) xs = + ap + ( _∷_ (map-tuple head-tuple xs)) + ( lemma-rest (tail-tuple (k ∷ ks)) (map-tuple tail-tuple xs)) +``` diff --git a/src/linear-algebra/transposition-matrices.lagda.md b/src/linear-algebra/transposition-matrices.lagda.md index 72d36918e13..c5c9a36419e 100644 --- a/src/linear-algebra/transposition-matrices.lagda.md +++ b/src/linear-algebra/transposition-matrices.lagda.md @@ -9,15 +9,10 @@ module linear-algebra.transposition-matrices where ```agda open import elementary-number-theory.natural-numbers -open import foundation.action-on-identifications-binary-functions -open import foundation.action-on-identifications-functions -open import foundation.identity-types open import foundation.universe-levels open import linear-algebra.matrices - -open import lists.functoriality-tuples -open import lists.tuples +open import linear-algebra.square-matrices ```
@@ -25,47 +20,17 @@ open import lists.tuples ## Idea The -{{#concept "transposition of a matrix" WD="matrix transposition" WDID=Q77961711 Agda=transpose-matrix}} -is the operation on [matrices](linear-algebra.matrices.md) that turns rows into -columns and columns into rows. +{{#concept "transpose" WDID=Q77961711 WD="matrix transposition" Agda=transpose-matrix}} +of a [matrix](linear-algebra.matrices.md) `M` is the matrix `Mᵀᵢⱼ ≔ Mⱼᵢ`. ## Definition ```agda transpose-matrix : - {l : Level} → {A : UU l} → {m n : ℕ} → matrix A m n → matrix A n m -transpose-matrix {n = zero-ℕ} x = empty-tuple -transpose-matrix {n = succ-ℕ n} x = - map-tuple head-tuple x ∷ transpose-matrix (map-tuple tail-tuple x) -``` - -## Properties - -```agda -is-involution-transpose-matrix : - {l : Level} → {A : UU l} → {m n : ℕ} → - (x : matrix A m n) → x = transpose-matrix (transpose-matrix x) -is-involution-transpose-matrix {m = zero-ℕ} empty-tuple = refl -is-involution-transpose-matrix {m = succ-ℕ m} (r ∷ rs) = - ( ap (_∷_ r) (is-involution-transpose-matrix rs)) ∙ - ( ap-binary _∷_ - ( lemma-first-row r rs) (ap transpose-matrix (lemma-rest r rs))) - where - lemma-first-row : - {l : Level} → {A : UU l} → {m n : ℕ} → (x : tuple A n) → - (xs : matrix A m n) → - x = map-tuple head-tuple (transpose-matrix (x ∷ xs)) - lemma-first-row {n = zero-ℕ} empty-tuple _ = refl - lemma-first-row {n = succ-ℕ m} (k ∷ ks) xs = - ap (_∷_ k) (lemma-first-row ks (map-tuple tail-tuple xs)) + {l : Level} {A : UU l} (m n : ℕ) → matrix A m n → matrix A n m +transpose-matrix m n M i j = M j i - lemma-rest : - {l : Level} → {A : UU l} → {m n : ℕ} → (x : tuple A n) → - (xs : matrix A m n) → - transpose-matrix xs = map-tuple tail-tuple (transpose-matrix (x ∷ xs)) - lemma-rest {n = zero-ℕ} empty-tuple xs = refl - lemma-rest {n = succ-ℕ n} (k ∷ ks) xs = - ap - ( _∷_ (map-tuple head-tuple xs)) - ( lemma-rest (tail-tuple (k ∷ ks)) (map-tuple tail-tuple xs)) +transpose-square-matrix : + {l : Level} {A : UU l} (n : ℕ) → square-matrix A n → square-matrix A n +transpose-square-matrix n = transpose-matrix n n ``` diff --git a/src/ring-theory/sums-of-finite-families-of-elements-rings.lagda.md b/src/ring-theory/sums-of-finite-families-of-elements-rings.lagda.md index 6358f9fcaa5..6505de4c004 100644 --- a/src/ring-theory/sums-of-finite-families-of-elements-rings.lagda.md +++ b/src/ring-theory/sums-of-finite-families-of-elements-rings.lagda.md @@ -7,23 +7,35 @@ module ring-theory.sums-of-finite-families-of-elements-rings where
Imports ```agda +open import elementary-number-theory.natural-numbers + +open import foundation.contractible-types open import foundation.coproduct-types open import foundation.empty-types open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types +open import foundation.negation +open import foundation.type-arithmetic-cartesian-product-types open import foundation.unit-type open import foundation.universe-levels +open import group-theory.sums-of-finite-families-of-elements-abelian-groups + +open import linear-algebra.finite-sequences-in-rings + open import ring-theory.rings open import ring-theory.sums-of-finite-families-of-elements-semirings open import ring-theory.sums-of-finite-sequences-of-elements-rings +open import univalent-combinatorics.complements-decidable-subtypes 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 ```
@@ -190,3 +202,108 @@ eq-sum-finite-sum-count-Ring : eq-sum-finite-sum-count-Ring R = eq-sum-finite-sum-count-Semiring (semiring-Ring R) ``` + +### The sum of a finite sequence is the sum over the type of indices of that sequence + +```agda +module _ + {l : Level} + (R : Ring l) + (n : ℕ) + where + + abstract + eq-sum-finite-sum-fin-sequence-Ring : + (u : fin-sequence-type-Ring R n) → + sum-finite-Ring R (Fin-Finite-Type n) u = sum-fin-sequence-type-Ring R n u + eq-sum-finite-sum-fin-sequence-Ring = + eq-sum-finite-sum-count-Ring R (Fin-Finite-Type n) (count-Fin n) +``` + +### Interchanging nested sums + +```agda +module _ + {l1 l2 l3 : Level} (R : Ring l1) + (A : Finite-Type l2) (B : Finite-Type l3) + where + + abstract + interchange-sum-sum-finite-Ring : + (u : type-Finite-Type A → type-Finite-Type B → type-Ring R) → + sum-finite-Ring R A (λ a → sum-finite-Ring R B (λ b → u a b)) = + sum-finite-Ring R B (λ b → sum-finite-Ring R A (λ a → u a b)) + interchange-sum-sum-finite-Ring u = + equational-reasoning + sum-finite-Ring R A (λ a → sum-finite-Ring R B (u a)) + = sum-finite-Ring R (Σ-Finite-Type A (λ _ → B)) (ind-Σ u) + by inv (sum-Σ-finite-Ring R A (λ _ → B) u) + = sum-finite-Ring R (Σ-Finite-Type B (λ _ → A)) (λ (b , a) → u a b) + by + sum-equiv-finite-Ring R + ( Σ-Finite-Type A (λ _ → B)) + ( Σ-Finite-Type B (λ _ → A)) + ( commutative-product) + ( ind-Σ u) + = sum-finite-Ring R B (λ b → sum-finite-Ring R A (λ a → u a b)) + by sum-Σ-finite-Ring R B (λ _ → A) (λ b a → u a b) +``` + +### Sums that vanish on a decidable subtype + +```agda +module _ + {l1 l2 l3 : Level} (R : Ring l1) (A : Finite-Type l2) + (P : subset-Finite-Type l3 A) + where + + abstract + vanish-sum-decidable-subset-finite-Ring : + (f : type-Finite-Type A → type-Ring R) → + ( (a : type-Finite-Type A) → is-in-decidable-subtype P a → + is-zero-Ring R (f a)) → + sum-finite-Ring R A f = + sum-finite-Ring R + ( finite-type-complement-subset-Finite-Type A P) + ( f ∘ inclusion-complement-subset-Finite-Type A P) + vanish-sum-decidable-subset-finite-Ring = + vanish-sum-decidable-subset-finite-Ab + ( ab-Ring R) + ( A) + ( P) + + vanish-sum-complement-decidable-subset-finite-Ring : + (f : type-Finite-Type A → type-Ring R) → + ( (a : type-Finite-Type A) → ¬ (is-in-decidable-subtype P a) → + is-zero-Ring R (f a)) → + sum-finite-Ring R A f = + sum-finite-Ring R + ( finite-type-subset-Finite-Type A P) + ( f ∘ inclusion-subset-Finite-Type A P) + vanish-sum-complement-decidable-subset-finite-Ring = + vanish-sum-complement-decidable-subset-finite-Ab + ( ab-Ring R) + ( A) + ( P) +``` + +### Sums over contractible types + +```agda +module _ + {l1 l2 : Level} (R : Ring l1) (I : Finite-Type l2) + (is-contr-I : is-contr (type-Finite-Type I)) + (i : type-Finite-Type I) + where + + abstract + sum-finite-is-contr-Ring : + (f : type-Finite-Type I → type-Ring R) → + sum-finite-Ring R I f = f i + sum-finite-is-contr-Ring = + sum-finite-is-contr-Ab + ( ab-Ring R) + ( I) + ( is-contr-I) + ( i) +```