Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
50a0484
Use the term 'grid' for the tuple-based concept, and 'matrix' for the…
lowasser Apr 15, 2026
5a17f4e
Progress
lowasser May 1, 2026
29581be
Merge branch 'master' into matrix-grid
lowasser May 1, 2026
994ce3f
Use 'grid' for two-dimensional tuples, and 'matrix' for two-dimension…
lowasser May 1, 2026
bde13e6
Progress
lowasser May 1, 2026
b2a8bd7
Merge branch 'master' into matrix-grid
lowasser May 26, 2026
ef091a9
make pre-commit
lowasser May 26, 2026
c47a5f4
Progress
lowasser May 26, 2026
ce01367
Fix import
lowasser May 26, 2026
2092f08
Merge branch 'matrix-grid' into matrix-mul-algebra
lowasser May 26, 2026
ff07bfc
Matrix multiplication
lowasser May 26, 2026
67de3c9
Square matrices
lowasser May 26, 2026
c5a4e50
Merge branch 'matrix-grid' into matrix-mul-algebra
lowasser May 26, 2026
1473cce
Multiplication of matrices
lowasser May 30, 2026
534f2dc
Indicator sequences
lowasser Jun 2, 2026
348e1df
Every linear map from R^m to R^n is homotopic to a matrix multiplication
lowasser Jun 2, 2026
ed411e4
Fix concept links
lowasser Jun 2, 2026
bf3b1f9
Progress
lowasser Jun 5, 2026
4969a29
Progress
lowasser Jun 5, 2026
77e3863
Merge branch 'indicator-sequences-rings' into permutation-matrices
lowasser Jun 5, 2026
fb78bd9
Progress
lowasser Jun 5, 2026
c438d87
Progress
lowasser Jun 5, 2026
3ffd175
Merge branch 'indicator-sequences-rings' into permutation-matrices
lowasser Jun 5, 2026
8b2097f
Docs
lowasser Jun 5, 2026
c8983c2
Merge branch 'indicator-sequences-rings' into permutation-matrices
lowasser Jun 5, 2026
3594998
Progress
lowasser Jun 5, 2026
a39a1ec
Progress
lowasser Jun 5, 2026
0737029
Progress
lowasser Jun 5, 2026
daa388c
Merge branch 'indicator-sequences-rings' into permutation-matrices
lowasser Jun 5, 2026
3877420
make pre-commit
lowasser Jun 5, 2026
680d9cb
Fix link
lowasser Jun 6, 2026
46d04b8
Merge branch 'matrix-mul-algebra' into permutation-matrices
lowasser Jun 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/foundation.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
27 changes: 27 additions & 0 deletions src/foundation/equivalences.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,33 @@ module _
( is-equiv-q))
```

### For an equivalence `e`, `map-equiv e x = y` if and only if `map-inv-equiv e y = x`

```agda
module _
{l1 l2 : Level}
{A : UU l1}
{B : UU l2}
(e : A ≃ B)
where abstract

eq-map-inv-equiv-eq-map-equiv :
(x : A) (y : B) → map-equiv e x = y → map-inv-equiv e y = x
eq-map-inv-equiv-eq-map-equiv x _ refl =
is-retraction-map-inv-equiv e x

eq-map-equiv-eq-map-inv-equiv :
(x : A) (y : B) → map-inv-equiv e y = x → map-equiv e x = y
eq-map-equiv-eq-map-inv-equiv _ y refl =
is-section-map-inv-equiv e y

eq-map-inv-equiv-iff-eq-map-equiv :
(x : A) (y : B) → (map-equiv e x = y) ↔ (map-inv-equiv e y = x)
eq-map-inv-equiv-iff-eq-map-equiv x y =
( eq-map-inv-equiv-eq-map-equiv x y ,
eq-map-equiv-eq-map-inv-equiv x y)
```

## See also

- For the notion of coherently invertible maps, also known as half-adjoint
Expand Down
89 changes: 89 additions & 0 deletions src/foundation/singleton-subtypes-discrete-types.lagda.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Singleton subtypes of discrete types

```agda
module foundation.singleton-subtypes-discrete-types where
```

<details><summary>Imports</summary>

```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
```

</details>

## 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))
```
6 changes: 4 additions & 2 deletions src/group-theory/homomorphisms-abelian-groups.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ open import group-theory.homomorphisms-semigroups

## Idea

Homomorphisms between abelian groups are just homomorphisms between their
underlying groups.
{{#concept "Homomorphisms" Disambiguation="between abelian groups" Agda=hom-Ab}}
between [abelian groups](group-theory.abelian-groups.md) are just
[homomorphisms](group-theory.homomorphisms-groups.md) between their underlying
[groups](group-theory.groups.md).

## Definition

Expand Down
101 changes: 63 additions & 38 deletions src/group-theory/invertible-elements-monoids.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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)
```
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Loading
Loading