Univalent Groups

Table of Contents

1 Groups

module Lib.Groups where

This file defines the type of groups in univalent mathematics. It also shows that isomorphic groups can be identified.

1.1 Packages imports

The imported packages can be accessed via the following links:

import Stdlib.Prelude
import Lib.SubTypes
import Lib.Univalence
import Lib.Prop.Htpy
import Lib.Prop.Levels
import Lib.Prop.Proposition
import Lib.Prop.Set

1.2 Semi-group (definitions, accessors)

1.2.1 Definition, universe

An operation μ is associative whenever there is a witness μ (μ x y) z = μ x (μ y z).

is-assoc (X : U) (f : X  X  X) : U =
  (x y z : X)  Path X (f (f x y) z) (f x (f y z))

A semi-group is a set together with an associative operation.

has-assoc-op (X : U) : U =
  Σ (X  X  X) (is-assoc X)

is-semi-group (X : UU-Set) : U =
  has-assoc-op (Set/type X)

Semigroup : U = Σ UU-Set is-semi-group

1.2.2 Accessors

Semigroup/Set (G : Semigroup) : UU-Set = G.1

Semigroup/is-semi-group (G : Semigroup) : is-semi-group (Semigroup/Set G) = G.2  

Semigroup/type (G : Semigroup) : U = Set/type (Semigroup/Set G)

Semigroup/is-set (G : Semigroup) : is-set (Semigroup/type G) = (Semigroup/Set G).2

Semigroup/op (G : Semigroup) : (Semigroup/type G)  (Semigroup/type G)  (Semigroup/type G) =
  (Semigroup/is-semi-group G).1

Semigroup/is-assoc (G : Semigroup) : is-assoc (Semigroup/type G) (Semigroup/op G) =
  (Semigroup/is-semi-group G).2

Semigroup/map (G : Semigroup) (H : Semigroup) : U =
  Semigroup/type G  Semigroup/type H  

1.3 Monoid (definitions, accessors)

1.3.1 Definition

A semi-group is unital if there is a unit e : G that satisfies the left and right unit laws.

left-unit-law (G : Semigroup) (e : Semigroup/type G) : U =
  (y : Semigroup/type G)  Path (Semigroup/type G) (Semigroup/op G e y) y

right-unit-law (G : Semigroup) (e : Semigroup/type G) : U =
  (x : Semigroup/type G)  Path (Semigroup/type G) (Semigroup/op G x e) x

is-unital (G : Semigroup) : U =
  Σ (Semigroup/type G) (λe. (left-unit-law G e) * (right-unit-law G e))

Unital semi-groups are called monoids. As such, we can define the universe of monoids.

Monoid : U = Σ Semigroup is-unital

1.3.2 Accessors

Monoid/Semigroup (M : Monoid) : Semigroup = M.1

Monoid/is-unital (M : Monoid) : is-unital (Monoid/Semigroup M) = M.2  

Monoid/Set (M : Monoid) : UU-Set = Semigroup/Set (Monoid/Semigroup M)

Monoid/is-semi-group (M : Monoid) : is-semi-group (Monoid/Set M) = Semigroup/is-semi-group (Monoid/Semigroup M)

Monoid/type (M : Monoid) : U = Set/type (Monoid/Set M)

Monoid/is-set (M : Monoid) : is-set (Monoid/type M) = Set/is-set (Monoid/Set M)

Monoid/op (M : Monoid) : (Monoid/type M)  (Monoid/type M)  (Monoid/type M) =
  (Semigroup/op (Monoid/Semigroup M))

Monoid/is-assoc (M : Monoid) : is-assoc (Monoid/type M) (Monoid/op M) =
  (Semigroup/is-assoc (Monoid/Semigroup M))

Monoid/unit (M : Monoid) : (Monoid/type M) = (Monoid/is-unital M).1

Monoid/left-unit-law (M : Monoid) : left-unit-law (Monoid/Semigroup M) (Monoid/unit M) = (Monoid/is-unital M).2.1

Monoid/right-unit-law (M : Monoid) : right-unit-law (Monoid/Semigroup M) (Monoid/unit M) = (Monoid/is-unital M).2.2

1.3.3 Is property

The unit of a semi-group is unique when it exists. We show this by showing that being unital is a property of semi-groups rather than a structure on it, that is, we show that is-unital is a proposition.

is-unital/is-prop/sg (X : U) (is-set-X : is-set X) (f : X  X  X)
                     (assoc-f : (x y z : X)  Path X (f (f x y) z) (f x (f y z))) (e : X)
                     (left-unit : left-unit-law ((X, is-set-X), (f, assoc-f)) e)
                     (right-unit : right-unit-law ((X, is-set-X), (f, assoc-f)) e) (e' : X)
                     (left-unit' : left-unit-law ((X, is-set-X), (f, assoc-f)) e')
                     (right-unit' : right-unit-law ((X, is-set-X), (f, assoc-f)) e') 
                         : Path (is-unital ((X, is-set-X), (f, assoc-f)))
                                (e, (left-unit, right-unit))
                                (e', (left-unit', right-unit')) =
  let G : Semigroup = ((X, is-set-X), (f, assoc-f)) in
  SgPath-prop X (λz. (left-unit-law G z) * (right-unit-law G z))
    (λz. is-prop/prod (left-unit-law G z) (right-unit-law G z)
          (is-prop/pi X (λy. Path X (f z y) y) (λy. is-set-X (f z y) y))
          (is-prop/pi X (λx. Path X (f x z) x) (λx. is-set-X (f x z) x)))
    (e, (left-unit, right-unit)) (e', (left-unit', right-unit'))
    (comp X e (f e e') (inv X (f e e') e (right-unit' e)) e' (left-unit e'))

is-unital/is-prop (G : Semigroup) : is-prop (is-unital G) =
  λx y. is-unital/is-prop/sg (Semigroup/type G) (Set/is-set (Semigroup/Set G)) (Semigroup/op G) (Semigroup/is-assoc G)
          x.1 x.2.1 x.2.2 y.1 y.2.1 y.2.2

1.4 Invertible monoids

A monoid is invertible if ∀ x : M, there exists x-1 such that x ⋅ x-1 = e and x-1 ⋅ x = e.

is-invertible-Monoid (M : Monoid) (x : Monoid/type M) : U =
  Σ (Monoid/type M) (λy. (Path (Monoid/type M) (Monoid/op M y x) (Monoid/unit M)) * (Path (Monoid/type M) (Monoid/op M x y) (Monoid/unit M)))

Once again, being invertible is a property of monoids.

is-invertible-Monoid/is-prop/sg (M : Monoid) (x : Monoid/type M) (y : Monoid/type M)
                                (p : Path (Monoid/type M) (Monoid/op M y x) (Monoid/unit M))
                                (q : Path (Monoid/type M) (Monoid/op M x y) (Monoid/unit M)) (y' : Monoid/type M)
                                (p' : Path (Monoid/type M) (Monoid/op M y' x) (Monoid/unit M))
                                (q' : Path (Monoid/type M) (Monoid/op M x y') (Monoid/unit M))
                                    : Path (is-invertible-Monoid M x) (y, (p, q)) (y', (p', q')) =
  let X : U = Monoid/type M
      f : X  X  X = Monoid/op M
      e : X = Monoid/unit M
  in
  SgPath-prop X (λz. (Path X (f z x) e) * (Path X (f x z) e))
    (λz. is-prop/prod (Path X (f z x) e) (Path X (f x z) e)
          (Monoid/is-set M (f z x) e)
          (Monoid/is-set M (f x z) e))
    (y, (p, q)) (y', (p', q'))
    (comp-n X five-Nat y (f e y)
      (inv X (f e y) y (Monoid/left-unit-law M y))
      (f (f y' x) y) (ap X X (λz. f z y) e (f y' x) (inv X (f y' x) e p'))
      (f y' (f x y)) (Monoid/is-assoc M y' x y)
      (f y' e) (ap X X (f y') (f x y) e q)
      y' (Monoid/right-unit-law M y'))

is-invertible-Monoid/is-prop (M : Monoid) (x : Monoid/type M) : is-prop (is-invertible-Monoid M x) =
  λy z. is-invertible-Monoid/is-prop/sg M x y.1 y.2.1 y.2.2 z.1 z.2.1 z.2.2

1.5 Groups

1.5.1 Definition

A group is a monoid such that all its elements are invertible.

left-inv  (M : Monoid) (x y : Monoid/type M) : U = Path (Monoid/type M) (Monoid/op M y x) (Monoid/unit M)
right-inv (M : Monoid) (x y : Monoid/type M) : U = Path (Monoid/type M) (Monoid/op M x y) (Monoid/unit M)

is-group' (G : Semigroup) (e : is-unital G) : U =
  Σ (Semigroup/map G G) (λi. ((x : Semigroup/type G)  left-inv (G, e) x (i x)) * ((x : Semigroup/type G)  right-inv (G, e) x (i x)))

is-group (G : Semigroup) : U = Σ (is-unital G) (is-group' G)

Group : U = Σ Semigroup is-group

1.5.2 Accessors

Group/Semigroup (G : Group) : Semigroup = G.1

Group/is-group (G : Group) : is-group (Group/Semigroup G) = G.2

Group/Set (G : Group) : UU-Set = Semigroup/Set (Group/Semigroup G)

Group/type (G : Group) : U = Semigroup/type (Group/Semigroup G)

Group/is-set (G : Group) : is-set (Group/type G) = (Group/Set G).2

Group/is-unital (G : Group) : is-unital (Group/Semigroup G) = (Group/is-group G).1

Group/Monoid (G : Group) : Monoid = (Group/Semigroup G, Group/is-unital G)

Group/is-semi-group (G : Group) : is-semi-group (Group/Set G) = Monoid/is-semi-group (Group/Monoid G)

Group/op (G : Group) : (Group/type G)  (Group/type G)  (Group/type G) = Semigroup/op (Group/Semigroup G)

Group/is-assoc (G : Group) : is-assoc (Group/type G) (Group/op G) = Semigroup/is-assoc (Group/Semigroup G)

Group/map (G H : Group) : U =
  Group/type G  Group/type H

Group/unit (G : Group) : Group/type G = Monoid/unit (Group/Monoid G)

Group/left-unit-law (G : Group) : left-unit-law (Group/Semigroup G) (Group/unit G) =
  Monoid/left-unit-law (Group/Monoid G)

Group/right-unit-law (G : Group) : right-unit-law (Group/Semigroup G) (Group/unit G) =
  Monoid/right-unit-law (Group/Monoid G)

Group/inv (G : Group) : Group/map G G = (Group/is-group G).2.1

Group/left-inv (G : Group) : (x : Group/type G)  left-inv (Group/Monoid G) x (Group/inv G x) =
  (Group/is-group G).2.2.1

Group/right-inv (G : Group) : (x : Group/type G)  right-inv (Group/Monoid G) x (Group/inv G x) =
  (Group/is-group G).2.2.2

1.5.3 Property

is-group is a proposition.

is-group'/is-prop/sg (G : Semigroup) (e : Semigroup/type G) (left-unit : left-unit-law G e) (right-unit : right-unit-law G e)
                     (i : Semigroup/map G G) (left-inv-i : (x : Semigroup/type G)  left-inv (G, (e, (left-unit, right-unit))) x (i x))
                     (right-inv-i : (x : Semigroup/type G)  right-inv (G, (e, (left-unit, right-unit))) x (i x))
                     (i' : Semigroup/map G G) (left-inv-i' : (x : Semigroup/type G)  left-inv (G, (e, (left-unit, right-unit))) x (i' x))
                     (right-inv-i' : (x : Semigroup/type G)  right-inv (G, (e, (left-unit, right-unit))) x (i' x))
                        : Path (is-group' G (e, (left-unit, right-unit))) (i, (left-inv-i, right-inv-i)) (i', (left-inv-i', right-inv-i')) =
  let X : U = Semigroup/type G
      f : X  X  X = Semigroup/op G
  in
  SgPath-prop (X  X) (λg. ((x : X)  Path X (f (g x) x) e) * ((x : X)  Path X (f x (g x)) e))
    (λg. is-prop/prod ((x : X)  Path X (f (g x) x) e) ((x : X)  Path X (f x (g x)) e)
      (is-prop/pi X (λx. Path X (f (g x) x) e) (λx. Semigroup/is-set G (f (g x) x) e))
      (is-prop/pi X (λx. Path X (f x (g x)) e) (λx. Semigroup/is-set G (f x (g x)) e)))
    (i, (left-inv-i, right-inv-i)) (i', (left-inv-i', right-inv-i'))
    (eq-htpy' X X i i'
      (λx. 
        (comp-n X five-Nat (i x) (f e (i x))
          (inv X (f e (i x)) (i x) (left-unit (i x)))
          (f (f (i' x) x) (i x)) (ap X X (λz. f z (i x)) e (f (i' x) x) (inv X (f (i' x) x) e (left-inv-i' x)))
          (f (i' x) (f x (i x))) (Semigroup/is-assoc G (i' x) x (i x))
          (f (i' x) e) (ap X X (f (i' x)) (f x (i x)) e (right-inv-i x))
          (i' x) (right-unit (i' x)))))


is-group'/is-prop (G : Semigroup) (e : is-unital G) : is-prop (is-group' G e) =
  λx y. is-group'/is-prop/sg G e.1 e.2.1 e.2.2 x.1 x.2.1 x.2.2 y.1 y.2.1 y.2.2

is-group/is-prop (G : Semigroup) : is-prop (is-group G) =
  is-prop/sg (is-unital G) (is-group' G) (is-unital/is-prop G) (is-group'/is-prop G)

1.6 Semigroups homomorphisms

1.6.1 Definition

If f is a function between two (semi-)groups G and H with associative operations μG and μH, f is a (semi-)group homomorphism if f(μG x y) = μH (f x) (f y) for any x, y of G.

preserves-mul (A B : U) (f : A  B) (g : A  A  A) (h : B  B  B) : U =
  (x y : A)  Path B (f (g x y)) (h (f x) (f y))  

Of course, a function preserving multiplication between semi-groups is a property rather than a structure, thus we can show that preserves-mul is a proposition.

Semigroup/preserves-mul (G H : Semigroup) (f : Semigroup/map G H) : U =
  preserves-mul (Semigroup/type G) (Semigroup/type H) f (Semigroup/op G) (Semigroup/op H)

preserves-mul/is-prop (G H : Semigroup) (f : Semigroup/map G H) : is-prop (Semigroup/preserves-mul G H f) =
  is-prop/pi
    ( Semigroup/type G)
    ( λx. (y : Semigroup/type G)  Path (Semigroup/type H) (f (Semigroup/op G x y)) (Semigroup/op H (f x) (f y)))
    ( λx. is-prop/pi
          ( Semigroup/type G)
          ( λy. Path (Semigroup/type H) (f (Semigroup/op G x y)) (Semigroup/op H (f x) (f y)))
          ( λy. Semigroup/is-set H (f (Semigroup/op G x y)) (Semigroup/op H (f x) (f y))))

We can hence define the type of homomorphisms for (semi-)groups.

Semigroup/hom (G H : Semigroup) : U =
  Σ (Semigroup/map G H) (Semigroup/preserves-mul G H)

1.6.2 Accessors

Semigroup/hom/map (G H : Semigroup) (f : Semigroup/hom G H) : Semigroup/map G H = f.1

Semigroup/hom/preserves-mul (G H : Semigroup) (f : Semigroup/hom G H) : Semigroup/preserves-mul G H (Semigroup/hom/map G H f) = f.2

1.6.3 Identity homomorphism

Semigroup/hom/id (G : Semigroup) : Semigroup/hom G G =
  (id (Semigroup/type G), λx y. refl (Semigroup/type G) (Semigroup/op G x y))

1.6.4 Characterization of identity

As it is a property for a function to preserve multiplication, the equality of semi-group homomorphisms is equivalent to the type of homotopies between the underlying functions. First, we show that an identity between homomorphisms implies homotopy between the underlying maps.

Semigroup/htpy (G H : Semigroup) (f g : Semigroup/hom G H) : U =
  Htpy' (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H f) (Semigroup/hom/map G H g)

Semigroup/hom/htpy/refl (G H : Semigroup) (f : Semigroup/hom G H) : Semigroup/htpy G H f f =
  Htpy'/refl (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H f)

Semigroup/hom/htpy (G H : Semigroup) (f g : Semigroup/hom G H) (p : Path (Semigroup/hom G H) f g) : Semigroup/htpy G H f g =
  J (Semigroup/hom G H) f (λh _. Htpy' (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H f) (Semigroup/hom/map G H h))
    (Semigroup/hom/htpy/refl G H f) g p

Then, we show that the above map is an equivalence. To do so, we use the fundamental theorem and hence we need to show that the total space Σ (Semigroup/hom G H) (Semigroup/hom/htpy G H) is contractible.

Semigroup/hom/htpy/is-contr (G H : Semigroup) (f : Semigroup/hom G H)
                                  : is-contr (Σ (Semigroup/hom G H) (Semigroup/htpy G H f)) =
  substructure/is-contr-total-Eq
    ( Semigroup/map G H)
    ( λg. Htpy' (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H f) g)
    ( λg. Semigroup/preserves-mul G H g)
    ( Htpy/is-contr-total-htpy (Semigroup/type G) (λ_. Semigroup/type H) (Semigroup/hom/map G H f))
    ( preserves-mul/is-prop G H)
    ( Semigroup/hom/map G H f)
    ( Htpy'/refl (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H f))
    ( Semigroup/hom/preserves-mul G H f)

We can conclude that Semigroup/hom/htpy is a family of equivalences.

Semigroup/hom/htpy/is-equiv (G H : Semigroup) (f : Semigroup/hom G H) : (g : Semigroup/hom G H)
                             is-equiv (Path (Semigroup/hom G H) f g) (Semigroup/htpy G H f g) (Semigroup/hom/htpy G H f g) =
  fundamental-theorem-id
    (Semigroup/hom G H)
    (Semigroup/htpy G H f) f
    (Semigroup/hom/htpy G H f)
    (Semigroup/hom/htpy/is-contr G H f)

Semigroup/hom/htpy/Equiv (G H : Semigroup) (f g : Semigroup/hom G H)
                              : Equiv (Path (Semigroup/hom G H) f g) (Semigroup/htpy G H f g) =
  (Semigroup/hom/htpy G H f g, Semigroup/hom/htpy/is-equiv G H f g)

Thus, we have a map from homotopies to paths.

Semigroup/hom/Eq (G H : Semigroup) (f g : Semigroup/hom G H)
                      : (Htpy' (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H f) (Semigroup/hom/map G H g))
                        Path (Semigroup/hom G H) f g =
  is-equiv/inv-map
    (Path (Semigroup/hom G H) f g)
    (Semigroup/htpy G H f g)
    (Semigroup/hom/htpy G H f g)
    (Semigroup/hom/htpy/is-equiv G H f g)

As such, the homomorphisms between semi-groups is a set: their identity types are equivalent to homotopies, i.e., to functions over propositions (as the identity types of H are propositions).

Semigroup/hom/is-set (G H : Semigroup) : is-set (Semigroup/hom G H) =
  λf g. is-prop/closed-equiv
    (Path (Semigroup/hom G H) f g)
    (Semigroup/htpy G H f g)
    (Semigroup/hom/htpy/Equiv G H f g)
    (is-prop/pi
      (Semigroup/type G)
      (λx. Path (Semigroup/type H) (Semigroup/hom/map G H f x) (Semigroup/hom/map G H g x))
      (λx. Semigroup/is-set H
            (Semigroup/hom/map G H f x)
            (Semigroup/hom/map G H g x)))

1.6.5 Closure under composition

Semigroup/hom/comp/map (G H K : Semigroup) (g : Semigroup/hom H K) (f : Semigroup/hom G H) : (Semigroup/map G K) =
  λz. Semigroup/hom/map H K g (Semigroup/hom/map G H f z)

Semigroup/hom/comp/preserves-mul (G H K : Semigroup) (f : Semigroup/hom G H) (g : Semigroup/hom H K)
                                         : Semigroup/preserves-mul G K (Semigroup/hom/comp/map G H K g f) =
  let m : Semigroup/map G H = Semigroup/hom/map G H f
      m' : Semigroup/map H K = Semigroup/hom/map H K g
      mg : Semigroup/type G  Semigroup/type G  Semigroup/type G = Semigroup/op G
      mh : Semigroup/type H  Semigroup/type H  Semigroup/type H = Semigroup/op H
      mk : Semigroup/type K  Semigroup/type K  Semigroup/type K = Semigroup/op K
  in
  λx y. comp (Semigroup/type K) (Semigroup/hom/comp/map G H K g f (mg x y)) (m' (mh (m x) (m y)))
    (ap (Semigroup/type H) (Semigroup/type K) m' (m (mg x y)) (mh (m x) (m y))
        (Semigroup/hom/preserves-mul G H f x y))
    (mk (m' (m x)) (m' (m y)))
    (Semigroup/hom/preserves-mul H K g (m x) (m y))

Semigroup/hom/comp (G H K : Semigroup) (g : Semigroup/hom H K) (f : Semigroup/hom G H) : Semigroup/hom G K =
  (Semigroup/hom/comp/map G H K g f, Semigroup/hom/comp/preserves-mul G H K f g)

1.6.6 Laws of a category

It is easy to show that homomorphisms follow the laws of a category using the identifications of homomorphic types. First, we show that id is left unit ;

Semigroup/hom/left-unit-law (G H : Semigroup) (f : Semigroup/hom G H)
                                  : Path (Semigroup/hom G H) (Semigroup/hom/comp G H H (Semigroup/hom/id H) f) f =
  Semigroup/hom/Eq G H (Semigroup/hom/comp G H H (Semigroup/hom/id H) f) f
    (λx. refl (Semigroup/type H) (Semigroup/hom/map G H f x))

And right unit.

Semigroup/hom/right-unit-law (G H : Semigroup) (f : Semigroup/hom G H)
                                   : Path (Semigroup/hom G H) (Semigroup/hom/comp G G H f (Semigroup/hom/id G)) f =
  Semigroup/hom/Eq G H (Semigroup/hom/comp G G H f (Semigroup/hom/id G)) f
    (λx. refl (Semigroup/type H) (Semigroup/hom/map G H f x))

Finally, composition is associative.

Semigroup/hom/comp/assoc (G H K L : Semigroup) (f : Semigroup/hom G H) (g : Semigroup/hom H K)
                         (h : Semigroup/hom K L) : Path (Semigroup/hom G L)
                                                        (Semigroup/hom/comp G K L h (Semigroup/hom/comp G H K g f))
                                                        (Semigroup/hom/comp G H L (Semigroup/hom/comp H K L h g) f) =
  Semigroup/hom/Eq G L
    ( Semigroup/hom/comp G K L h (Semigroup/hom/comp G H K g f))
    ( Semigroup/hom/comp G H L (Semigroup/hom/comp H K L h g) f)
    ( λx. refl
          ( Semigroup/type L)
          ( Semigroup/hom/map K L h (Semigroup/hom/map H K g (Semigroup/hom/map G H f x))))

1.6.7 Isomorphisms

An isomorphism is a bijective homomorphism.

Semigroup/hom/left-inv (G H : Semigroup) (h : Semigroup/hom G H) (h' : Semigroup/hom H G)  : U =
  Path (Semigroup/hom G G) (Semigroup/hom/comp G H G h' h) (Semigroup/hom/id G)

Semigroup/hom/right-inv (G H : Semigroup) (h : Semigroup/hom G H) (h' : Semigroup/hom H G) : U =
  Path (Semigroup/hom H H) (Semigroup/hom/comp H G H h h') (Semigroup/hom/id H)

Semigroup/is-iso (G H : Semigroup) (h : Semigroup/hom G H) : U =
  Σ (Semigroup/hom H G) (λh'. (Semigroup/hom/left-inv G H h h') * (Semigroup/hom/right-inv G H h h'))

Semigroup/is-iso/hom (G H : Semigroup) (h : Semigroup/hom G H) (i : Semigroup/is-iso G H h)
                          : Semigroup/hom H G = i.1

Semigroup/is-iso/map (G H : Semigroup) (h : Semigroup/hom G H) (i : Semigroup/is-iso G H h)
                          : Semigroup/map H G = Semigroup/hom/map H G (Semigroup/is-iso/hom G H h i)

Semigroup/is-iso/left-htpy (G H : Semigroup) (h : Semigroup/hom G H) (i : Semigroup/is-iso G H h)
                                : Semigroup/hom/left-inv G H h (Semigroup/is-iso/hom G H h i) = i.2.1

Semigroup/is-iso/right-htpy (G H : Semigroup) (h : Semigroup/hom G H) (i : Semigroup/is-iso G H h)
                                 : Semigroup/hom/right-inv G H h (Semigroup/is-iso/hom G H h i) = i.2.2

Semigroup/Iso (G H : Semigroup) : U =
  Σ (Semigroup/hom G H) (Semigroup/is-iso G H)

Semigroup/Iso/hom (G H : Semigroup) (i : Semigroup/Iso G H) : Semigroup/hom G H = i.1

Semigroup/Iso/inv-map (G H : Semigroup) (i : Semigroup/Iso G H)
                           : Semigroup/hom H G = Semigroup/is-iso/hom G H (Semigroup/Iso/hom G H i) i.2

Semigroup/Iso/left-htpy (G H : Semigroup) (i : Semigroup/Iso G H)
                             : Semigroup/hom/left-inv G H (Semigroup/Iso/hom G H i) (Semigroup/Iso/inv-map G H i) =
  Semigroup/is-iso/left-htpy G H (Semigroup/Iso/hom G H i) i.2

Semigroup/Iso/right-htpy (G H : Semigroup) (i : Semigroup/Iso G H)
                              : Semigroup/hom/right-inv G H (Semigroup/Iso/hom G H i) (Semigroup/Iso/inv-map G H i) =
  Semigroup/is-iso/right-htpy G H (Semigroup/Iso/hom G H i) i.2

Of course, being an isomorphism is still a property.

Semigroup/is-iso/is-prop (G H : Semigroup) (h : Semigroup/hom G H) : is-prop (Semigroup/is-iso G H h) =
  λk k'.
    let f : Semigroup/hom H G = Semigroup/is-iso/hom G H h k
        f' : Semigroup/hom H G = Semigroup/is-iso/hom G H h k'
    in  
    SgPath-prop
      ( Semigroup/hom H G)
      ( λi. (Semigroup/hom/left-inv G H h i) * (Semigroup/hom/right-inv G H h i))
      ( λi. is-prop/prod
            ( Semigroup/hom/left-inv G H h i)
            ( Semigroup/hom/right-inv G H h i)
            ( Semigroup/hom/is-set G G (Semigroup/hom/comp G H G i h) (Semigroup/hom/id G))
            ( Semigroup/hom/is-set H H (Semigroup/hom/comp H G H h i) (Semigroup/hom/id H)))
      k k'
      ( comp-n
        ( Semigroup/hom H G) five-Nat f
        ( Semigroup/hom/comp H H G f (Semigroup/hom/id H))
        ( inv
          ( Semigroup/hom H G)
          ( Semigroup/hom/comp H H G f (Semigroup/hom/id H)) f
          ( Semigroup/hom/right-unit-law H G f))
        ( Semigroup/hom/comp H H G f
          ( Semigroup/hom/comp H G H h f'))
        ( ap ( Semigroup/hom H H)
             ( Semigroup/hom H G)
             ( λg. (Semigroup/hom/comp H H G f g))
             ( Semigroup/hom/id H)
             ( Semigroup/hom/comp H G H h f')
             ( inv
               ( Semigroup/hom H H)
               ( Semigroup/hom/comp H G H h f')
               ( Semigroup/hom/id H)
               ( Semigroup/is-iso/right-htpy G H h k')))
        ( Semigroup/hom/comp H G G
          ( Semigroup/hom/comp G H G f h) f')
        ( Semigroup/hom/comp/assoc H G H G f' h f)
        ( Semigroup/hom/comp H G G
          ( Semigroup/hom/id G) f')
        ( ap ( Semigroup/hom G G)
             ( Semigroup/hom H G)
             ( λg. (Semigroup/hom/comp H G G g f'))
             ( Semigroup/hom/comp G H G f h)
             ( Semigroup/hom/id G)
             ( Semigroup/is-iso/left-htpy G H h k))
        f'
        ( Semigroup/hom/left-unit-law H G f'))

1.6.8 Iso G G

id is an isomorphism.

Semigroup/Iso/id (G : Semigroup) : Semigroup/Iso G G =
  ( Semigroup/hom/id G,
    ( Semigroup/hom/id G,
        ( Semigroup/hom/Eq
            G G
            (Semigroup/hom/comp G G G (Semigroup/hom/id G) (Semigroup/hom/id G))
            (Semigroup/hom/id G)
            (λx. refl (Semigroup/type G) x),
          Semigroup/hom/Eq
            G G
            (Semigroup/hom/comp G G G (Semigroup/hom/id G) (Semigroup/hom/id G))
            (Semigroup/hom/id G)
            (λx. refl (Semigroup/type G) x))))

1.7 Isomorphic semi-groups are equal

We show that isomorphic groups can be identified. First, we show that a semi-group homomorphism h is an isomorphism iff its underlying map is an equivalence. If a homomorphism is an isomorphism, then the underlying inverse map provides an inverse.

Semigroup/hom/is-iso/is-equiv (G H : Semigroup) (h : Semigroup/hom G H) (i : Semigroup/is-iso G H h)
                                    : is-equiv (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H h) =
  has-inverse/is-equiv
    ( Semigroup/type G)
    ( Semigroup/type H)
    ( Semigroup/hom/map G H h)
    ( Semigroup/is-iso/map G H h i,
      ( Semigroup/hom/htpy
          H H
          (Semigroup/hom/comp H G H h (Semigroup/is-iso/hom G H h i))
          (Semigroup/hom/id H)
          (Semigroup/is-iso/right-htpy G H h i),
        Semigroup/hom/htpy
          G G
          (Semigroup/hom/comp G H G (Semigroup/is-iso/hom G H h i) h)
          (Semigroup/hom/id G)
          (Semigroup/is-iso/left-htpy G H h i)))

For the converse, assume that the underlying map is an equivalence. Then its inverse is also a semi-group homomorphism, since we have the following chain of equations: f-1H x y) = f-1H (f (f-1 x)) (f (f-1 y))) = f-1(f (μG (f-1 x) (f-1 y))) = μG (f-1 x) (f-1 y)

Semigroup/hom/is-equiv/is-iso/hom (G H : Semigroup) (h : Semigroup/hom G H)
                                  (e : is-equiv (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H h))
                                     : Semigroup/hom H G =
  let f  : Semigroup/map G H = Semigroup/hom/map G H h
      h' : Semigroup/map H G = is-equiv/inv-map (Semigroup/type G) (Semigroup/type H) f e
      muG : Semigroup/type G  (Semigroup/map G G) = Semigroup/op G
      muH : Semigroup/type H  (Semigroup/map H H) = Semigroup/op H
  in
  ( h',
    λx y. comp-n
          ( Semigroup/type G) four-Nat
          ( h' (muH x y))
          ( h' (muH (f (h' x)) y))
          ( ap ( Semigroup/type H)
               ( Semigroup/type G)
               ( λz. h' (muH z y)) x
               ( f (h' x))
               ( inv
                 ( Semigroup/type H)
                 ( f (h' x)) x
                 ( is-equiv/inv-right-htpy (Semigroup/type G) (Semigroup/type H) f e x)))
          ( h' (muH (f (h' x)) (f (h' y))))
          ( ap ( Semigroup/type H)
               ( Semigroup/type G)
               ( λz. h' (muH (f (h' x)) z)) y
               ( f (h' y))
               ( inv
                 ( Semigroup/type H)
                 ( f (h' y)) y
                 ( is-equiv/inv-right-htpy (Semigroup/type G) (Semigroup/type H) f e y)))
        ( h' (f (muG (h' x) (h' y))))
        ( ap ( Semigroup/type H)
             ( Semigroup/type G) h'
             ( muH (f (h' x)) (f (h' y))) (f (muG (h' x) (h' y)))
             ( inv
               ( Semigroup/type H)
               ( f (muG (h' x) (h' y)))
               ( muH (f (h' x)) (f (h' y)))
               ( Semigroup/hom/preserves-mul G H h (h' x) (h' y))))
        ( muG (h' x) (h' y))
        ( is-equiv/inv-left-htpy (Semigroup/type G) (Semigroup/type H) f e (muG (h' x) (h' y))))

Semigroup/hom/is-equiv/is-iso (G H : Semigroup) (h : Semigroup/hom G H)
                              (e : is-equiv (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H h))
                                    : Semigroup/is-iso G H h =
  let h' : Semigroup/hom H G = Semigroup/hom/is-equiv/is-iso/hom G H h e in
  ( h',
    ( Semigroup/hom/Eq
        G G
        ( Semigroup/hom/comp G H G h' h)
        ( Semigroup/hom/id G)
        ( is-equiv/inv-left-htpy
            ( Semigroup/type G)
            ( Semigroup/type H)
            ( Semigroup/hom/map G H h)
            e),
      Semigroup/hom/Eq
        H H
        ( Semigroup/hom/comp H G H h h')
        ( Semigroup/hom/id H)
        ( is-equiv/inv-right-htpy
            ( Semigroup/type G)
            ( Semigroup/type H)
            ( Semigroup/hom/map G H h)
            e)))

That is, there is an equivalence between Iso G H and Σ (e : G ≅ H) e(μG x y) = μH (e x) (e y).

Semigroup/Iso/Equiv/type (G H : Semigroup) : U =
  (Σ ( Equiv (Semigroup/type G) (Semigroup/type H))
     ( λe. preserves-mul
         ( Semigroup/type G)
         ( Semigroup/type H)
         ( Equiv/map (Semigroup/type G) (Semigroup/type H) e)
         ( Semigroup/op G)
         ( Semigroup/op H)))

Semigroup/Iso/Equiv (G H : Semigroup) : Equiv (Semigroup/Iso G H) (Semigroup/Iso/Equiv/type G H) =
  Equiv/trans
    ( Semigroup/Iso G H)
    ( Σ (Semigroup/hom G H) (λh. is-equiv (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H h)))
    ( Semigroup/Iso/Equiv/type G H)
    ( subtype/Equiv-tot
        ( Semigroup/hom G H)
        ( Semigroup/is-iso G H)
        ( λh. is-equiv (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H h))
        ( Semigroup/is-iso/is-prop G H)
        ( λh. is-equiv/is-prop (Semigroup/type G) (Semigroup/type H) (Semigroup/hom/map G H h))
        ( Semigroup/hom/is-iso/is-equiv G H)
        ( Semigroup/hom/is-equiv/is-iso G H))
    ( Equiv/assoc-Sg
        ( Semigroup/map G H)
        ( Semigroup/preserves-mul G H)
        ( is-equiv (Semigroup/type G) (Semigroup/type H)))

We define the family of maps iso-eq : G = H → Iso G H by path induction.

Semigroup/iso-eq (G H : Semigroup) (p : Path Semigroup G H) : Semigroup/Iso G H =
  J Semigroup G ( λK _. Semigroup/Iso G K) ( Semigroup/Iso/id G) H p

Then, we show that this family of maps is a family of equivalences. First, we show that the sigma-type Σ (has-assoc-op G) preserves-mul is contractible.

preserves-mul-id/type (G : Semigroup) : U =
  Σ (has-assoc-op (Semigroup/type G)) (λmu. Semigroup/preserves-mul G (Semigroup/Set G, mu) (id (Semigroup/type G)))

preserves-mul-id/center (G : Semigroup) : preserves-mul-id/type G =
  ( Semigroup/is-semi-group G, λx y. refl (Semigroup/type G) (Semigroup/op G x y))

preserves-mul-id/contraction (G : Semigroup) (t : preserves-mul-id/type G) : Path (preserves-mul-id/type G) (preserves-mul-id/center G) t =
  SgPath-prop
    ( has-assoc-op (Semigroup/type G))
    ( λmu. Semigroup/preserves-mul G (Semigroup/Set G, mu) (id (Semigroup/type G)))
    ( λmu. preserves-mul/is-prop G (Semigroup/Set G, mu) (id (Semigroup/type G)))
    ( preserves-mul-id/center G) t
    ( SgPath-prop
      ( Semigroup/type G  Semigroup/type G  Semigroup/type G)
      ( is-assoc (Semigroup/type G))
      ( λmu. is-prop/pi
          ( Semigroup/type G)
          ( λx. (y z : Semigroup/type G)  Path (Semigroup/type G) (mu (mu x y) z) (mu x (mu y z)))
          ( λx. is-prop/pi
              ( Semigroup/type G)
              ( λy. (z : Semigroup/type G)  Path (Semigroup/type G) (mu (mu x y) z) (mu x (mu y z)))
              ( λy. is-prop/pi
                  ( Semigroup/type G)
                  ( λz. Path (Semigroup/type G) (mu (mu x y) z) (mu x (mu y z)))
                  ( λz. Semigroup/is-set G (mu (mu x y) z) (mu x (mu y z))))))
      ( preserves-mul-id/center G).1 t.1
      ( eq-htpy'
          ( Semigroup/type G)
          ( Semigroup/map G G)
          ( preserves-mul-id/center G).1.1 t.1.1
          ( λx. eq-htpy'
              ( Semigroup/type G)
              ( Semigroup/type G)
              (( preserves-mul-id/center G).1.1 x)
              ( t.1.1 x)
              ( λy. t.2 x y))))


preserves-mul-id/is-contr (G : Semigroup) : is-contr (preserves-mul-id/type G) = 
 ( preserves-mul-id/center G,
   preserves-mul-id/contraction G)

Then, we can show the desired property.

Semigroup/iso-eq/is-contr-Equiv-type (G : Semigroup) : is-contr (Σ Semigroup (Semigroup/Iso/Equiv/type G)) =
  str-principle-id
    UU-Set
    is-semi-group
    ( λH. Equiv (Semigroup/type G) (Set/type H))
    ( λH is-semi-group-H e.
        preserves-mul
        ( Semigroup/type G)
        ( Set/type H)
        ( Equiv/map (Semigroup/type G) (Set/type H) e)
        ( Semigroup/op G)
        ( is-semi-group-H.1))
    ( substructure/is-contr-total-Eq
        U
        ( Equiv (Semigroup/type G))
        ( is-set)
        ( ua/is-contr-total-equiv (Semigroup/type G))
        ( is-set/is-prop)
        ( Semigroup/type G)
        ( Equiv/refl (Semigroup/type G))
        ( Semigroup/is-set G))
    ( Semigroup/Set G)
    ( Equiv/refl (Semigroup/type G))
    ( preserves-mul-id/is-contr G)

Semigroup/iso-eq/contr-Iso (G : Semigroup) : is-contr (Σ Semigroup (Semigroup/Iso G)) =
  ( is-contr/is-contr-equiv
      ( Σ Semigroup (Semigroup/Iso G))
      ( Σ Semigroup (Semigroup/Iso/Equiv/type G))
      ( Equiv/Sg-fam
          Semigroup
          ( Semigroup/Iso G)
          ( Semigroup/Iso/Equiv/type G)
          ( λH. Semigroup/Iso/Equiv G H))
      ( Semigroup/iso-eq/is-contr-Equiv-type G))

lock Semigroup/hom/htpy/is-equiv

Semigroup/iso-eq/is-equiv (G : Semigroup) : (H : Semigroup)  is-equiv (Path Semigroup G H) (Semigroup/Iso G H) (Semigroup/iso-eq G H) =
  fundamental-theorem-id
    Semigroup
    ( Semigroup/Iso G) G
    ( Semigroup/iso-eq G)
    ( Semigroup/iso-eq/contr-Iso G)

Thus, isomorphic semi-groups are identifiable.

Semigroup/eq-iso (G H : Semigroup) : Semigroup/Iso G H  Path Semigroup G H =
  is-equiv/inv-map
    ( Path Semigroup G H)
    ( Semigroup/Iso G H)
    ( Semigroup/iso-eq G H)
    ( Semigroup/iso-eq/is-equiv G H)

1.8 Group homomorphisms

1.8.1 Definition

We define group homomorphisms similarly to semi-group homomorphisms.

Group/preserves-mul (G H : Group) (f : Group/map G H) : U =
  Semigroup/preserves-mul
    ( Group/Semigroup G)
    ( Group/Semigroup H)
    f

Group/hom (G H : Group) : U =
  Semigroup/hom
    ( Group/Semigroup G)
    ( Group/Semigroup H)

They come with the same accessors.

Group/hom/map (G H : Group) (f : Group/hom G H) : Group/map G H =
  Semigroup/hom/map
    ( Group/Semigroup G)
    ( Group/Semigroup H)
    f

Group/hom/preserves-mul (G H : Group) (f : Group/hom G H) : Group/preserves-mul G H (Group/hom/map G H f) =
  Semigroup/hom/preserves-mul
    ( Group/Semigroup G)
    ( Group/Semigroup H)
    f

Of course, all the properties of semi-group homomorphisms carry on to group homomorphisms. We can define them all if needed, but we don't need everything for now.

1.8.2 Identity and Composition

Identity group homomorphism:

Group/hom/id (G : Group) : Group/hom G G =
  Semigroup/hom/id
    ( Group/Semigroup G)

Composition of group homomorphisms:

Group/hom/comp (G H K : Group) (g : Group/hom H K) (f : Group/hom G H) : Group/hom G K =
  Semigroup/hom/comp
    ( Group/Semigroup G)
    ( Group/Semigroup H)
    ( Group/Semigroup K)
    g f

1.8.3 Isomorphisms

We define group isomorphisms similarly to semi-group isomorphisms.

Group/is-iso (G H : Group) (h : Group/hom G H) : U =
  Semigroup/is-iso
    ( Group/Semigroup G)
    ( Group/Semigroup H) h

Group/Iso (G H : Group) : U =
  Semigroup/Iso
    ( Group/Semigroup G)
    ( Group/Semigroup H)

1.8.4 Iso G G

Group/Iso/id (G : Group) : Group/Iso G G =
  Semigroup/Iso/id (Group/Semigroup G)

1.9 Isomorphic groups are equal

We define iso-eq for groups.

Group/iso-eq (G H : Group) (p : Path Group G H) : Group/Iso G H =
  Semigroup/iso-eq
    ( Group/Semigroup G)
    ( Group/Semigroup H)
    ( ap Group Semigroup (λt. t.1) G H p)

It is easy to show that iso-eq is a family of equivalences: it suffices to remark that being a group is a property of semi-groups. Thus, ap pr1 is an equivalence.

Group/ap-pr1/is-equiv (G H : Group)
                           : is-equiv
                                ( Path Group G H)
                                ( Path Semigroup (Group/Semigroup G) (Group/Semigroup H))
                                ( ap Group Semigroup (λt. t.1) G H) =
  pr1/is-inj Semigroup is-group (is-group/is-prop) G H

We have also shown that Semigroup/iso-eq. Hence, Group/iso-eq is again an equivalence by the 3-out-of-2 property of equivalences.

Group/iso-eq/is-equiv (G H : Group) : is-equiv (Path Group G H) (Group/Iso G H) (Group/iso-eq G H) =
  is-equiv/comp-is-equiv
    ( Path Group G H)
    ( Path Semigroup
      ( Group/Semigroup G)
      ( Group/Semigroup H))
    ( Group/Iso G H)
    ( ap Group Semigroup (λt. t.1) G H)
    ( Semigroup/iso-eq
      ( Group/Semigroup G)
      ( Group/Semigroup H))
    ( Group/ap-pr1/is-equiv G H)
    ( Semigroup/iso-eq/is-equiv
      ( Group/Semigroup G)
      ( Group/Semigroup H))

Group/eq-iso (G H : Group) : (Group/Iso G H)  Path Group G H =
  is-equiv/inv-map
    ( Path Group G H)
    ( Group/Iso G H)
    ( Group/iso-eq G H)
    ( Group/iso-eq/is-equiv G H)

1.10 Unlock

unlock Semigroup/hom/htpy/is-equiv

Author: Johann Rosain

Created: 2024-07-23 Tue 13:52

Validate