Groups.Symmetric.Representable

This file defines the notion of a representable element of the symmetric group. Representable elements should (and do) correspond to elements of the symmetric group in the image of the inclusion ⟨ 𝓖 ⟩ → SymGroup ⟨ 𝓖 ⟩. However they must be defined in a different way to preserve the strict associativity and unitality.

Module header

{-# OPTIONS --safe --cubical #-}

open import Cubical.Algebra.Group

module Groups.Symmetric.Representable {} (𝓖 : Group ) where

open import Cubical.Algebra.Group.GroupPath
open import Cubical.Algebra.Group.Morphisms
open import Cubical.Data.Sigma
open import Cubical.Data.Vec
open import Cubical.Foundations.Equiv
open import Cubical.Foundations.HLevels
open import Cubical.Foundations.Isomorphism
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.SIP
open import Cubical.Functions.FunExtEquiv
open import Groups.Function.Inverse
open import Groups.Symmetric
open import Groups.Symmetric.Inclusion 𝓖

open GroupStr (𝓖 .snd) using (_·_;1g;inv;is-set)
open GroupStr (SymGroup .snd) using () renaming (_·_ to _·′_; 1g to 1gs; inv to _⁻¹; is-set to is-set-sym)
open GroupStr hiding (_·_;1g;inv;is-set)

We define Representable as follows. A similar trick to the one used for inverses is used to ensure strict associativity and unitality is maintained. Without this trick the definition says that a function f is representable if f (g + h) ≡ f g + h for all g h ∈ ⟨ 𝓖 ⟩.

Representable : (f :  𝓖    𝓖 )  Type 
Representable f =  x g h  x  g · h  f x  f g · h

Repr : Type 
Repr = Σ[ f   SymGroup  ] Representable (fst f) × Representable (fst (snd f))

Set properties

Representable is a Prop and so Repr is a set.

rep-prop : (f :  𝓖    𝓖 )  isProp (Representable f)
rep-prop f = isPropΠ2  x y 
             isPropΠ2 λ w z  (is-set (f x) (f y · w)))

repΣ-set : isSet Repr
repΣ-set = isSetΣ is-set-sym λ f  isProp→isSet (isProp× (rep-prop (fst f)) (rep-prop (fst (snd f))))

As Representable f is a prop we can prove that Reprs are equal if the underlying permutations are.

repr-equality : (f g : Repr)  fst f  fst g  f  g
repr-equality (f , fr) (g , gr) p =
  ΣPathP (p , (isProp→PathP  i  isProp× (rep-prop (fst (p i))) (rep-prop (fst (snd (p i))))) fr gr))

Group properties

Representable elements are closed under group operations

repr-comp :  (f g :  𝓖    𝓖 )  Representable f  Representable g  Representable  x  f (g x))
repr-comp f g rf rg x f′ g′ p = rf (g x) (g f′) g′ (rg x f′ g′ p)

repr-id : Representable  x  x)
repr-id x g h p = p

repr-inv :  (f :  SymGroup )  Representable (fst f)  Representable (fst (snd f))
repr-inv (f , finv , ε , η) rf x g h p = η (finv g · h) x (
  x              ≡⟨ p 
  g · h          ≡⟨ cong ( h) (sym (ε g (finv g) refl)) 
  f (finv g) · h ≡⟨ sym (rf (finv g · h) (finv g) h refl) 
  f (finv g · h) )

Repr-comp :  (f f′ : Repr)  Repr
Repr-comp (f , rf , rf′) (g , rg , rg′) = f ·′ g , repr-comp (fst f) (fst g) rf rg , repr-comp (fst (snd g)) (fst (snd f)) rg′ rf′

Repr-id : Repr
Repr-id = 1gs , repr-id , repr-id

Repr-inv : (f : Repr)  Repr
Repr-inv (a@(f , finv , ε , η) , rf , rf′) = a ⁻¹ , rf′ , rf

Associativity and Unitality still hold by definition

Repr-assoc : (f g h : Repr)  Repr-comp f (Repr-comp g h)  Repr-comp (Repr-comp f g) h
Repr-assoc f g h = refl

Repr-lid : (f : Repr)  Repr-comp Repr-id f  f
Repr-lid f = refl

Repr-rid : (f : Repr)  Repr-comp f Repr-id  f
Repr-rid f = refl

We can prove the invertibility properties

Repr-inv-left : (f : Repr)  Repr-comp (Repr-inv f) f  Repr-id
Repr-inv-left f = repr-equality (Repr-comp (Repr-inv f) f) Repr-id
                               (·InvL (SymGroup .snd) (fst f))

Repr-inv-right : (f : Repr)  Repr-comp f (Repr-inv f)  Repr-id
Repr-inv-right f = repr-equality (Repr-comp f (Repr-inv f)) Repr-id
                                (·InvR (SymGroup .snd) (fst f))

and the following invertibility property holds definitionally

Repr-inv-comp : (f g : Repr)  Repr-inv (Repr-comp f g)  Repr-comp (Repr-inv g) (Repr-inv f)
Repr-inv-comp f g = refl

and hence representable elements of the symmetric group themselves form a group.

RSymGroup : Group 
RSymGroup = makeGroup
  Repr-id
  Repr-comp
  Repr-inv
  repΣ-set
  Repr-assoc
  Repr-lid
  Repr-rid
  Repr-inv-right
  Repr-inv-left

open GroupStr (RSymGroup .snd) using () renaming (_·_ to _*_; 1g to 1gr; inv to invᵣ)

Isomorphism

As stated above, an element is representable if and only if it is in the image of the inclusion homomorphism.

We first have that every included element is representable.

inc-rep :  (a :  𝓖 )  Representable (fst (inc a))
inc-rep a x g h p =
 a · x ≡⟨ cong (a ·_) p 
 a · (g · h) ≡⟨ ·Assoc (𝓖 .snd) a g h 
 (a · g) · h 
and that any representable element is the image of an included element
Repr-inc :  (f : Repr)  Σ[ g   𝓖  ] inc g  fst f
Repr-inc (a@(f , rest) , rf , rf′) = (f 1g) ,
 inverse-equality-lemma (inc (f 1g)) a is-set is-set
 λ x  sym (rf x 1g x (sym (·IdL (𝓖 .snd) x)))
This allows us to define incᵣ
incᵣ :  𝓖   Repr
incᵣ g = inc g , inc-rep g , repr-inv (inc g) (inc-rep g)

and show that it is an equivalence.

open Iso

incᵣ-iso : Iso  𝓖  Repr
incᵣ-iso .fun = incᵣ
incᵣ-iso .inv f = fst (Repr-inc f)
incᵣ-iso .leftInv g =
  inc-injective (fst (Repr-inc (incᵣ g))) g (snd (Repr-inc (incᵣ g)))
incᵣ-iso .rightInv f =
  repr-equality (incᵣ (fst (Repr-inc f))) f (snd (Repr-inc f))

incᵣ-equiv :  𝓖   Repr
incᵣ-equiv = isoToEquiv incᵣ-iso

Further it is also a group homomorphism.

incᵣ-homo :  g h  incᵣ (g · h)  incᵣ g * incᵣ h
incᵣ-homo g h =
  repr-equality (incᵣ (g · h)) (incᵣ g * incᵣ h) (inc-homo g h)

incᵣ-pres1 : incᵣ-equiv .fst 1g  1gr
incᵣ-pres1 = repr-equality (incᵣ-equiv .fst 1g) 1gr inc-pres1

incᵣ-presinv : (x :  𝓖 )  incᵣ-equiv .fst (GroupStr.inv (snd 𝓖) x)  invᵣ (incᵣ-equiv .fst x)
incᵣ-presinv x = repr-equality (incᵣ-equiv .fst (GroupStr.inv (snd 𝓖) x)) (invᵣ (incᵣ-equiv .fst x)) (inc-pres-inv x)

incᵣ-group-iso : GroupEquiv 𝓖 RSymGroup
incᵣ-group-iso = incᵣ-equiv , record { pres· = incᵣ-homo ; pres1 = incᵣ-pres1 ; presinv = incᵣ-presinv }

Using the structure identity principle, ⟨ 𝓖 ⟩ and RSymgroup ⟨ 𝓖 ⟩ are actually equal.

inc≡ : 𝓖  RSymGroup
inc≡ = equivFun (GroupPath 𝓖 RSymGroup) incᵣ-group-iso