66
77{-# OPTIONS --safe --cubical-compatible #-}
88
9- open import Algebra.Bundles using (Group; RawGroup)
9+ open import Algebra.Bundles using (AbelianGroup; Group; RawGroup)
1010
1111module Algebra.Construct.Centre.Group {c ℓ} (G : Group c ℓ) where
1212
1313open import Algebra.Core using (Op₁; Op₂)
14- open import Function.Base using (id; _on_)
14+ open import Algebra.Definitions using (Commutative)
15+ open import Function.Base using (id; const; _$_; _on_)
1516open import Level using (_⊔_)
1617open import Relation.Unary using (Pred)
1718open import Relation.Binary.Core using (Rel)
1819import Relation.Binary.Reasoning.Setoid as ≈-Reasoning
1920
2021open import Algebra.Construct.Sub.Group G using (Subgroup)
22+ open import Algebra.Construct.Sub.Group.Normal G using (IsNormal; NormalSubgroup)
2123open import Algebra.Properties.Group G using (∙-cancelʳ)
2224
2325private
2426 module G = Group G
2527
28+
2629CommutesWith : Pred G.Carrier _
2730CommutesWith g = ∀ k → g G.∙ k G.≈ k G.∙ g
2831
@@ -34,7 +37,7 @@ private
3437 commuter : G.Carrier
3538 commutes : CommutesWith commuter
3639
37- open Carrier using (commuter; commutes)
40+ open Carrier
3841
3942 _≈_ : Rel Carrier _
4043 _≈_ = G._≈_ on commuter
@@ -44,9 +47,9 @@ private
4447 { commuter = commuter g G.∙ commuter h
4548 ; commutes = λ k → begin
4649 (commuter g G.∙ commuter h) G.∙ k ≈⟨ G.assoc _ _ _ ⟩
47- commuter g G.∙ (commuter h G.∙ k) ≈⟨ G.∙-congˡ ( commutes h k) ⟩
50+ commuter g G.∙ (commuter h G.∙ k) ≈⟨ G.∙-congˡ $ commutes h k ⟩
4851 commuter g G.∙ (k G.∙ commuter h) ≈⟨ G.assoc _ _ _ ⟨
49- commuter g G.∙ k G.∙ commuter h ≈⟨ G.∙-congʳ ( commutes g k) ⟩
52+ commuter g G.∙ k G.∙ commuter h ≈⟨ G.∙-congʳ $ commutes g k ⟩
5053 k G.∙ commuter g G.∙ commuter h ≈⟨ G.assoc _ _ _ ⟩
5154 k G.∙ (commuter g G.∙ commuter h) ∎
5255 }
@@ -60,42 +63,59 @@ private
6063 _⁻¹ : Op₁ Carrier
6164 g ⁻¹ = record
6265 { commuter = commuter g G.⁻¹
63- ; commutes = λ k → ∙-cancelʳ (commuter g) _ _ ( begin
66+ ; commutes = λ k → ∙-cancelʳ (commuter g) _ _ $ begin
6467 (commuter g G.⁻¹ G.∙ k) G.∙ (commuter g) ≈⟨ G.assoc _ _ _ ⟩
65- commuter g G.⁻¹ G.∙ (k G.∙ commuter g) ≈⟨ G.∙-congˡ ( commutes g k) ⟨
68+ commuter g G.⁻¹ G.∙ (k G.∙ commuter g) ≈⟨ G.∙-congˡ $ commutes g k ⟨
6669 commuter g G.⁻¹ G.∙ (commuter g G.∙ k) ≈⟨ G.assoc _ _ _ ⟨
67- (commuter g G.⁻¹ G.∙ commuter g) G.∙ k ≈⟨ G.∙-congʳ ( G.inverseˡ _) ⟩
70+ (commuter g G.⁻¹ G.∙ commuter g) G.∙ k ≈⟨ G.∙-congʳ $ G.inverseˡ _ ⟩
6871 G.ε G.∙ k ≈⟨ commutes ε k ⟩
69- k G.∙ G.ε ≈⟨ G.∙-congˡ ( G.inverseˡ _) ⟨
72+ k G.∙ G.ε ≈⟨ G.∙-congˡ $ G.inverseˡ _ ⟨
7073 k G.∙ (commuter g G.⁻¹ G.∙ commuter g) ≈⟨ G.assoc _ _ _ ⟨
71- (k G.∙ commuter g G.⁻¹) G.∙ (commuter g) ∎)
74+ (k G.∙ commuter g G.⁻¹) G.∙ (commuter g) ∎
7275 }
7376
77+ ∙-comm : Commutative _≈_ _∙_
78+ ∙-comm g h = commutes g $ commuter h
79+
80+
81+ open Carrier public using (commuter; commutes)
7482
75- centre : Subgroup _ _
83+ centre : NormalSubgroup _ _
7684centre = record
77- { domain = record
78- { _≈_ = _≈_
79- ; _∙_ = _∙_
80- ; ε = ε
81- ; _⁻¹ = _⁻¹
82- }
83- ; ι = commuter
84- ; ι-monomorphism = record
85- { isGroupHomomorphism = record
86- { isMonoidHomomorphism = record
87- { isMagmaHomomorphism = record
88- { isRelHomomorphism = record { cong = id }
89- ; homo = λ _ _ → G.refl
90- }
91- ; ε-homo = G.refl
85+ { subgroup = record
86+ { domain = record
87+ { _≈_ = _≈_
88+ ; _∙_ = _∙_
89+ ; ε = ε
90+ ; _⁻¹ = _⁻¹
91+ }
92+ ; ι = commuter
93+ ; ι-monomorphism = record
94+ { isGroupHomomorphism = record
95+ { isMonoidHomomorphism = record
96+ { isMagmaHomomorphism = record
97+ { isRelHomomorphism = record { cong = id }
98+ ; homo = λ _ _ → G.refl
99+ }
100+ ; ε-homo = G.refl
101+ }
102+ ; ⁻¹-homo = λ _ → G.refl
92103 }
93- ; ⁻¹-homo = λ _ → G.refl
104+ ; injective = id
94105 }
95- ; injective = id
96106 }
107+ ; isNormal = record { conjugate = const ; normal = commutes }
97108 }
98109
99- open Subgroup centre public
110+ open NormalSubgroup centre public
111+
112+ abelianGroup : AbelianGroup _ _
113+ abelianGroup = record
114+ {
115+ isAbelianGroup = record { isGroup = isGroup ; comm = ∙-comm }
116+ }
117+
118+ -- Public export
119+
120+ Z[_] = centre
100121
101- Z[_] = group
0 commit comments