|
| 1 | +------------------------------------------------------------------------ |
| 2 | +-- The Agda standard library |
| 3 | +-- |
| 4 | +-- Definition of the centre of an Algebra |
| 5 | +------------------------------------------------------------------------ |
| 6 | + |
| 7 | +{-# OPTIONS --safe --cubical-compatible #-} |
| 8 | + |
| 9 | +open import Algebra.Bundles |
| 10 | + using (Group; AbelianGroup; RawMonoid; RawGroup) |
| 11 | + |
| 12 | +module Algebra.Construct.Centre.Group {c ℓ} (group : Group c ℓ) where |
| 13 | + |
| 14 | +open import Algebra.Core using (Op₁) |
| 15 | +open import Algebra.Morphism.Structures |
| 16 | +open import Algebra.Morphism.GroupMonomorphism using (isGroup) |
| 17 | +open import Function.Base using (id; const; _$_) |
| 18 | + |
| 19 | + |
| 20 | +private |
| 21 | + module G = Group group |
| 22 | + |
| 23 | +open import Relation.Binary.Reasoning.Setoid G.setoid as ≈-Reasoning |
| 24 | +open import Algebra.Properties.Group group using (∙-cancelʳ) |
| 25 | + |
| 26 | + |
| 27 | +------------------------------------------------------------------------ |
| 28 | +-- Definition |
| 29 | + |
| 30 | +-- Re-export the underlying sub-Monoid |
| 31 | + |
| 32 | +open import Algebra.Construct.Centre.Monoid G.monoid as Z public |
| 33 | + using (Center; ι; ∙-comm) |
| 34 | + |
| 35 | +-- Now, can define a commutative sub-Group |
| 36 | + |
| 37 | +_⁻¹ : Op₁ Center |
| 38 | +g ⁻¹ = record |
| 39 | + { ι = ι g G.⁻¹ |
| 40 | + ; central = λ k → ∙-cancelʳ (ι g) _ _ $ begin |
| 41 | + (ι g G.⁻¹ G.∙ k) G.∙ (ι g) ≈⟨ G.assoc _ _ _ ⟩ |
| 42 | + ι g G.⁻¹ G.∙ (k G.∙ ι g) ≈⟨ G.∙-congˡ $ Center.central g k ⟨ |
| 43 | + ι g G.⁻¹ G.∙ (ι g G.∙ k) ≈⟨ G.assoc _ _ _ ⟨ |
| 44 | + (ι g G.⁻¹ G.∙ ι g) G.∙ k ≈⟨ G.∙-congʳ $ G.inverseˡ _ ⟩ |
| 45 | + G.ε G.∙ k ≈⟨ Center.central Z.ε k ⟩ |
| 46 | + k G.∙ G.ε ≈⟨ G.∙-congˡ $ G.inverseˡ _ ⟨ |
| 47 | + k G.∙ (ι g G.⁻¹ G.∙ ι g) ≈⟨ G.assoc _ _ _ ⟨ |
| 48 | + (k G.∙ ι g G.⁻¹) G.∙ (ι g) ∎ |
| 49 | + } where open ≈-Reasoning |
| 50 | + |
| 51 | +domain : RawGroup _ _ |
| 52 | +domain = record { RawMonoid Z.domain; _⁻¹ = _⁻¹ } |
| 53 | + |
| 54 | +isGroupHomomorphism : IsGroupHomomorphism domain G.rawGroup ι |
| 55 | +isGroupHomomorphism = record |
| 56 | + { isMonoidHomomorphism = Z.isMonoidHomomorphism |
| 57 | + ; ⁻¹-homo = λ _ → G.refl |
| 58 | + } |
| 59 | + |
| 60 | +isGroupMonomorphism : IsGroupMonomorphism domain G.rawGroup ι |
| 61 | +isGroupMonomorphism = record |
| 62 | + { isGroupHomomorphism = isGroupHomomorphism |
| 63 | + ; injective = id |
| 64 | + } |
| 65 | + |
| 66 | +abelianGroup : AbelianGroup _ _ |
| 67 | +abelianGroup = record |
| 68 | + { isAbelianGroup = record |
| 69 | + { isGroup = isGroup isGroupMonomorphism G.isGroup |
| 70 | + ; comm = ∙-comm |
| 71 | + } |
| 72 | + } |
| 73 | + |
| 74 | +Z[_] = abelianGroup |
| 75 | + |
| 76 | +{- |
| 77 | + normalSubgroup : NormalSubgroup _ _ |
| 78 | + normalSubgroup = record |
| 79 | + { subgroup = record { ι-isGroupMonomorphism = isGroupMonomorphism } |
| 80 | + ; normal = record |
| 81 | + { conjugate = const |
| 82 | + ; normal = Center.central |
| 83 | + } |
| 84 | + } |
| 85 | +-} |
0 commit comments