Skip to content

Commit 7ad2b22

Browse files
committed
add: Center of a Group
1 parent b707d83 commit 7ad2b22

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ Deprecated names
7979
New modules
8080
-----------
8181

82+
* `Algebra.Construct.Centre.Group` for the definition of the centre of a group.
83+
8284
* `Algebra.Construct.Quotient.{Abelian}Group` for the definition of quotient (Abelian) groups.
8385

8486
* `Algebra.Construct.Sub.{Abelian}Group` for the definition of sub-(Abelian)groups.
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Definition of the centre of a Group
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --safe --cubical-compatible #-}
8+
9+
open import Algebra.Bundles using (Group; RawGroup)
10+
11+
module Algebra.Construct.Centre.Group {c ℓ} (G : Group c ℓ) where
12+
13+
open import Algebra.Core using (Op₁; Op₂)
14+
open import Function.Base using (id; _on_)
15+
open import Level using (_⊔_)
16+
open import Relation.Unary using (Pred)
17+
open import Relation.Binary.Core using (Rel)
18+
import Relation.Binary.Reasoning.Setoid as ≈-Reasoning
19+
20+
open import Algebra.Construct.Sub.Group G using (Subgroup)
21+
open import Algebra.Properties.Group G using (∙-cancelʳ)
22+
23+
private
24+
module G = Group G
25+
26+
CommutesWith : Pred G.Carrier _
27+
CommutesWith g = k g G.∙ k G.≈ k G.∙ g
28+
29+
private
30+
open ≈-Reasoning G.setoid
31+
32+
record Carrier : Set (c ⊔ ℓ) where
33+
field
34+
commuter : G.Carrier
35+
commutes : CommutesWith commuter
36+
37+
open Carrier using (commuter; commutes)
38+
39+
_≈_ : Rel Carrier _
40+
_≈_ = G._≈_ on commuter
41+
42+
_∙_ : Op₂ Carrier
43+
g ∙ h = record
44+
{ commuter = commuter g G.∙ commuter h
45+
; commutes = λ k begin
46+
(commuter g G.∙ commuter h) G.∙ k ≈⟨ G.assoc _ _ _ ⟩
47+
commuter g G.∙ (commuter h G.∙ k) ≈⟨ G.∙-congˡ (commutes h k) ⟩
48+
commuter g G.∙ (k G.∙ commuter h) ≈⟨ G.assoc _ _ _ ⟨
49+
commuter g G.∙ k G.∙ commuter h ≈⟨ G.∙-congʳ (commutes g k) ⟩
50+
k G.∙ commuter g G.∙ commuter h ≈⟨ G.assoc _ _ _ ⟩
51+
k G.∙ (commuter g G.∙ commuter h) ∎
52+
}
53+
54+
ε : Carrier
55+
ε = record
56+
{ commuter = G.ε
57+
; commutes = λ k G.trans (G.identityˡ k) (G.sym (G.identityʳ k))
58+
}
59+
60+
_⁻¹ : Op₁ Carrier
61+
g ⁻¹ = record
62+
{ commuter = commuter g G.⁻¹
63+
; commutes = λ k ∙-cancelʳ (commuter g) _ _ (begin
64+
(commuter g G.⁻¹ G.∙ k) G.∙ (commuter g) ≈⟨ G.assoc _ _ _ ⟩
65+
commuter g G.⁻¹ G.∙ (k G.∙ commuter g) ≈⟨ G.∙-congˡ (commutes g k) ⟨
66+
commuter g G.⁻¹ G.∙ (commuter g G.∙ k) ≈⟨ G.assoc _ _ _ ⟨
67+
(commuter g G.⁻¹ G.∙ commuter g) G.∙ k ≈⟨ G.∙-congʳ (G.inverseˡ _) ⟩
68+
G.ε G.∙ k ≈⟨ commutes ε k ⟩
69+
k G.∙ G.ε ≈⟨ G.∙-congˡ (G.inverseˡ _) ⟨
70+
k G.∙ (commuter g G.⁻¹ G.∙ commuter g) ≈⟨ G.assoc _ _ _ ⟨
71+
(k G.∙ commuter g G.⁻¹) G.∙ (commuter g) ∎)
72+
}
73+
74+
75+
centre : Subgroup _ _
76+
centre = 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
92+
}
93+
; ⁻¹-homo = λ _ G.refl
94+
}
95+
; injective = id
96+
}
97+
}
98+
99+
open Subgroup centre public
100+
101+
Z[_] = group

0 commit comments

Comments
 (0)