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