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