Skip to content

Commit 0bd8be2

Browse files
authored
Theory of Symmetric Groups
1 parent 3d5bb7d commit 0bd8be2

File tree

1 file changed

+75
-13
lines changed

1 file changed

+75
-13
lines changed

Cubical/Algebra/SymmetricGroup.agda

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,84 @@ open import Cubical.Foundations.Prelude
55
open import Cubical.Foundations.Equiv
66
open import Cubical.Foundations.HLevels
77
open 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

1314
open 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

Comments
 (0)