annotate src/NormalSubgroup.agda @ 310:b4a3ed9301cb

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 15 Sep 2023 21:12:52 +0900
parents 4dd130b93b21
children 77f01da94c4e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
302
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 {-# OPTIONS --allow-unsolved-metas #-}
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import Level hiding ( suc ; zero )
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 module NormalSubgroup where
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Algebra
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Algebra.Structures
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Algebra.Definitions
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Data.Product
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Relation.Binary.PropositionalEquality
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Algebra.Morphism.Structures
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Data.Empty
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Relation.Nullary
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open GroupMorphisms
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 GR : {c l : Level } → Group c l → RawGroup c l
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 GR G = record {
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 Carrier = Carrier G
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 ; _≈_ = _≈_ G
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 ; _∙_ = _∙_ G
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 ; ε = ε G
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 ; _⁻¹ = _⁻¹ G
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 } where open Group
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 record GAxiom {c l : Level } (G : Group c l) : Set ( c Level.⊔ l ) where
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 open Group G
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 field
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 ∙-cong : {x y u v : Carrier } → x ≈ y → u ≈ v → x ∙ u ≈ y ∙ v
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 assoc : (x y z : Carrier ) → x ∙ y ∙ z ≈ x ∙ ( y ∙ z )
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 identity : ((y : Carrier) → ε ∙ y ≈ y ) × ((y : Carrier) → y ∙ ε ≈ y )
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 inverse : ((y : Carrier) → y ⁻¹ ∙ y ≈ ε ) × ((y : Carrier) → y ∙ y ⁻¹ ≈ ε )
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 ⁻¹-cong : {x y : Carrier } → x ≈ y → x ⁻¹ ≈ y ⁻¹
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 GA : {c l : Level } → (G : Group c l) → GAxiom G
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 GA G = record {
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 ∙-cong = IsMagma.∙-cong ( IsSemigroup.isMagma ( IsMonoid.isSemigroup ( IsGroup.isMonoid isGroup)))
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 ; assoc = IsSemigroup.assoc ( IsMonoid.isSemigroup ( IsGroup.isMonoid isGroup))
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 ; identity = IsMonoid.identity ( IsGroup.isMonoid isGroup)
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 ; inverse = IsGroup.inverse isGroup
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 ; ⁻¹-cong = IsGroup.⁻¹-cong isGroup
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 } where open Group G
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 open import Relation.Binary.Structures
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 Eq : {c l : Level } → (G : Group c l) → IsEquivalence _
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 Eq G = IsMagma.isEquivalence (IsSemigroup.isMagma (IsMonoid.isSemigroup
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 (IsGroup.isMonoid (Group.isGroup G ))) )
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 _<_∙_> : {c d : Level} (m : Group c d ) → Group.Carrier m → Group.Carrier m → Group.Carrier m
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 m < x ∙ y > = Group._∙_ m x y
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 _<_≈_> : {c d : Level} (m : Group c d ) → (f g : Group.Carrier m ) → Set d
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 m < x ≈ y > = Group._≈_ m x y
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 infixr 9 _<_∙_>
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
307
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
57 record SubGroup {l c d : Level} (A : Group c d ) : Set (Level.suc (l Level.⊔ (c Level.⊔ d))) where
302
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 open Group A
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 field
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 P : Carrier → Set l
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 Pε : P ε
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 P⁻¹ : (a : Carrier ) → P a → P (a ⁻¹)
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 P≈ : {a b : Carrier } → a ≈ b → P a → P b
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 P∙ : {a b : Carrier } → P a → P b → P ( a ∙ b )
307
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
66 -- assuming Homomorphism is too strong
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
67 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
68 record NormalSubGroup {l c d : Level} (A : Group c d ) : Set (Level.suc (l Level.⊔ (c Level.⊔ d))) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
69 open Group A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
70 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
71 Psub : SubGroup {l} A
302
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 -- gN ≈ Ng
307
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
73 Pcomm : {a b : Carrier } → SubGroup.P Psub a → SubGroup.P Psub ( b ∙ ( a ∙ b ⁻¹ ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
74 P : Carrier → Set l
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
75 P = SubGroup.P Psub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
76 Pε : P ε
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
77 Pε = SubGroup.Pε Psub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
78 P⁻¹ : (a : Carrier ) → P a → P (a ⁻¹)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
79 P⁻¹ = SubGroup.P⁻¹ Psub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
80 P≈ : {a b : Carrier } → a ≈ b → P a → P b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
81 P≈ = SubGroup.P≈ Psub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
82 P∙ : {a b : Carrier } → P a → P b → P ( a ∙ b )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
83 P∙ = SubGroup.P∙ Psub
302
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 import Relation.Binary.Reasoning.Setoid as EqReasoning
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
307
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
87 record Nelm {c d e : Level} (A : Group c d ) (n : SubGroup {e} A) : Set (Level.suc e ⊔ (Level.suc c ⊔ d)) where
302
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 open Group A
307
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
89 open SubGroup n
302
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 field
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 elm : Carrier
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 Pelm : P elm
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
307
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
94 SGroup : {c d e : Level} (A : Group c d ) (n : SubGroup {e} A) → Group (Level.suc e ⊔ (Level.suc c ⊔ d)) d
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
95 SGroup {_} {_} {_} A n = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
96 Carrier = Nelm A n
302
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 ; _≈_ = λ x y → elm x ≈ elm y
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 ; _∙_ = λ x y → record { elm = elm x ∙ elm y ; Pelm = P∙ (Pelm x) (Pelm y) }
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 ; ε = record { elm = ε ; Pelm = Pε }
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 ; _⁻¹ = λ x → record { elm = (elm x) ⁻¹ ; Pelm = P⁻¹ (elm x) (Pelm x) }
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 ; isGroup = record { isMonoid = record { isSemigroup = record { isMagma = record {
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 isEquivalence = record { refl = IsEquivalence.refl (IsGroup.isEquivalence ga)
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 ; sym = IsEquivalence.sym (IsGroup.isEquivalence ga)
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 ; trans = IsEquivalence.trans (IsGroup.isEquivalence ga) }
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 ; ∙-cong = IsGroup.∙-cong ga }
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 ; assoc = λ a b c → IsGroup.assoc ga (elm a) (elm b) (elm c) }
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 ; identity = ( (λ q → proj₁ (IsGroup.identity ga) (elm q)) , (λ q → proj₂ (IsGroup.identity ga) (elm q)) ) }
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 ; inverse = ( (λ q → proj₁ (IsGroup.inverse ga) (elm q)) , (λ q → proj₂ (IsGroup.inverse ga) (elm q)) )
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 ; ⁻¹-cong = IsGroup.⁻¹-cong ga }
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 } where
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 open Group A
307
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 302
diff changeset
112 open SubGroup n
302
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 open Nelm
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 ga = Group.isGroup A
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115
3812936d52c8 remove lift
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116