@@ -4,23 +4,87 @@ module Cubical.Algebra.SymmetricGroup where
44open import Cubical.Foundations.Prelude
55open import Cubical.Foundations.Equiv
66open import Cubical.Foundations.HLevels
7+ open import Cubical.Foundations.Function
8+ open import Cubical.Foundations.Isomorphism
9+ open import Cubical.Foundations.Univalence
10+ open import Cubical.Foundations.Structure
711open import Cubical.Data.Sigma
8- open import Cubical.Data.Nat using (ℕ ; suc ; zero)
9- open import Cubical.Data.Fin using (Fin ; isSetFin)
10- open import Cubical.Data.Empty
11- open import Cubical.Relation.Nullary using (¬_)
12+ open import Cubical.Data.Nat
13+ open import Cubical.Data.SumFin
14+ open import Cubical.Data.Empty as Empty
15+ open import Cubical.Data.Bool
16+ open import Cubical.Data.Unit
1217
1318open import Cubical.Algebra.Group
19+ open import Cubical.Algebra.Group.Morphisms
20+ open import Cubical.Algebra.Group.MorphismProperties
21+ open import Cubical.Algebra.Group.GroupPath
22+ open import Cubical.Algebra.Group.Instances.Bool
23+ open import Cubical.Algebra.Group.Instances.Unit
1424
15- private
16- variable
17- ℓ : Level
25+ private variable
26+ ℓ ℓ' : Level
27+ X Y : Type ℓ
1828
19- Symmetric-Group : (X : Type ℓ) → isSet X → Group ℓ
20- Symmetric-Group X isSetX = makeGroup (idEquiv X) compEquiv invEquiv (isOfHLevel≃ 2 isSetX isSetX)
21- compEquiv-assoc compEquivEquivId compEquivIdEquiv invEquiv-is-rinv invEquiv-is-linv
29+ SymGroup : (X : Type ℓ) → isSet X → Group ℓ
30+ SymGroup X isSetX = makeGroup {G = X ≃ X} (idEquiv X) compEquiv invEquiv
31+ (isOfHLevel≃ 2 isSetX isSetX)
32+ compEquiv-assoc
33+ compEquivEquivId
34+ compEquivIdEquiv
35+ invEquiv-is-rinv
36+ invEquiv-is-linv
2237
23- -- Finite symmetrics groups
38+ FinSymGroup : ℕ → Group₀
39+ FinSymGroup n = SymGroup (Fin n) isSetFin
2440
25- Sym : ℕ → Group _
26- Sym n = Symmetric-Group (Fin n) isSetFin
41+ Sym0≃1 : GroupEquiv (FinSymGroup 0 ) UnitGroup₀
42+ Sym0≃1 = contrGroupEquivUnit $ inhProp→isContr (idEquiv _) $ isOfHLevel≃ 1 isProp⊥ isProp⊥
43+
44+ Sym0≡1 : FinSymGroup 0 ≡ UnitGroup₀
45+ Sym0≡1 = uaGroup Sym0≃1
46+
47+ Sym1≃1 : GroupEquiv (FinSymGroup 1 ) UnitGroup₀
48+ Sym1≃1 = contrGroupEquivUnit $ isOfHLevel≃ 0 isContrSumFin1 isContrSumFin1
49+
50+ Sym1≡1 : FinSymGroup 1 ≡ UnitGroup₀
51+ Sym1≡1 = uaGroup Sym1≃1
52+
53+ Sym2≃Bool : GroupEquiv (FinSymGroup 2 ) BoolGroup
54+ Sym2≃Bool = GroupIso→GroupEquiv $ invGroupIso $ ≅Bool $
55+ Fin 2 ≃ Fin 2 Iso⟨ equivCompIso SumFin2≃Bool SumFin2≃Bool ⟩
56+ Bool ≃ Bool Iso⟨ invIso univalenceIso ⟩
57+ Bool ≡ Bool Iso⟨ invIso reflectIso ⟩
58+ Bool ∎Iso
59+ where open BoolReflection
60+
61+ Sym2≡Bool : FinSymGroup 2 ≡ BoolGroup
62+ Sym2≡Bool = uaGroup Sym2≃Bool
63+
64+ SymUnit≃Unit : GroupEquiv (SymGroup Unit isSetUnit) UnitGroup₀
65+ SymUnit≃Unit = contrGroupEquivUnit $ isOfHLevel≃ 0 isContrUnit isContrUnit
66+
67+ SymUnit≡Unit : SymGroup Unit isSetUnit ≡ UnitGroup₀
68+ SymUnit≡Unit = uaGroup SymUnit≃Unit
69+
70+ SymBool≃Bool : GroupEquiv (SymGroup Bool isSetBool) BoolGroup
71+ SymBool≃Bool = GroupIso→GroupEquiv $ invGroupIso $ ≅Bool $
72+ Bool ≃ Bool Iso⟨ invIso univalenceIso ⟩
73+ Bool ≡ Bool Iso⟨ invIso reflectIso ⟩
74+ Bool ∎Iso
75+ where open BoolReflection
76+
77+ SymBool≡Bool : SymGroup Bool isSetBool ≡ BoolGroup
78+ SymBool≡Bool = uaGroup SymBool≃Bool
79+
80+ module _ (n : ℕ) where
81+
82+ ⟨Sym⟩≃factorial : ⟨ FinSymGroup n ⟩ ≃ Fin (n !)
83+ ⟨Sym⟩≃factorial = SumFin≃≃ n
84+
85+ ⟨Sym⟩≡factorial : ⟨ FinSymGroup n ⟩ ≡ Fin (n !)
86+ ⟨Sym⟩≡factorial = ua ⟨Sym⟩≃factorial
87+
88+ Sym-cong-≃ : ∀ isSetX isSetY → X ≃ Y → GroupEquiv (SymGroup X isSetX) (SymGroup Y isSetY)
89+ Sym-cong-≃ isSetX isSetY e .fst = equivComp e e
90+ Sym-cong-≃ isSetX isSetY e .snd = makeIsGroupHom λ g h → sym $ equivEq $ funExt λ x → cong (e .fst ∘ h .fst) (retEq e _)
0 commit comments