-
Notifications
You must be signed in to change notification settings - Fork 260
Normal subgroups and quotient groups #2854
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
14b2cd3
694e0a5
52c3f80
057645c
3c80fed
a9c134a
55aa35b
c4cea19
9940158
d5c518b
bf1acf9
0ecd8e0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,124 @@ | ||||||||||||
| ------------------------------------------------------------------------ | ||||||||||||
| -- The Agda standard library | ||||||||||||
| -- | ||||||||||||
| -- Quotient groups | ||||||||||||
| ------------------------------------------------------------------------ | ||||||||||||
|
|
||||||||||||
| {-# OPTIONS --safe --cubical-compatible #-} | ||||||||||||
|
|
||||||||||||
| open import Algebra.Bundles using (Group) | ||||||||||||
| open import Algebra.NormalSubgroup using (NormalSubgroup) | ||||||||||||
|
|
||||||||||||
| module Algebra.Construct.Quotient.Group {c ℓ} (G : Group c ℓ) {c′ ℓ′} (N : NormalSubgroup G c′ ℓ′) where | ||||||||||||
|
|
||||||||||||
| open Group G | ||||||||||||
|
|
||||||||||||
| import Algebra.Definitions as AlgDefs | ||||||||||||
| open import Algebra.Morphism.Structures using (IsGroupHomomorphism) | ||||||||||||
| open import Algebra.Properties.Monoid monoid | ||||||||||||
| open import Algebra.Properties.Group G using (⁻¹-anti-homo-∙) | ||||||||||||
| open import Algebra.Structures using (IsGroup) | ||||||||||||
| open import Data.Product.Base using (_,_) | ||||||||||||
| open import Function.Base using (_∘_) | ||||||||||||
| open import Function.Definitions using (Surjective) | ||||||||||||
| open import Level using (_⊔_) | ||||||||||||
| open import Relation.Binary.Core using (_⇒_) | ||||||||||||
| open import Relation.Binary.Definitions using (Reflexive; Symmetric; Transitive) | ||||||||||||
| open import Relation.Binary.Structures using (IsEquivalence) | ||||||||||||
| open import Relation.Binary.Reasoning.Setoid setoid | ||||||||||||
|
|
||||||||||||
| private | ||||||||||||
| module N = NormalSubgroup N | ||||||||||||
| open NormalSubgroup N using (ι; module ι; conjugate; normal) | ||||||||||||
|
Comment on lines
+30
to
+32
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can simplify this to:
Suggested change
|
||||||||||||
|
|
||||||||||||
| infix 0 _by_ | ||||||||||||
|
|
||||||||||||
| data _≋_ (x y : Carrier) : Set (c ⊔ ℓ ⊔ c′) where | ||||||||||||
| _by_ : ∀ g → ι g ∙ x ≈ y → x ≋ y | ||||||||||||
jamesmckinna marked this conversation as resolved.
Show resolved
Hide resolved
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If this is instead
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Well, so be it, but be careful of having a tail wag the dog. It wouldn't be the first time that existing
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The alternative here would be putting more lemmas in |
||||||||||||
|
|
||||||||||||
| ≈⇒≋ : _≈_ ⇒ _≋_ | ||||||||||||
| ≈⇒≋ {x} {y} x≈y = N.ε by trans (∙-cong ι.ε-homo x≈y) (identityˡ y) | ||||||||||||
|
|
||||||||||||
| ≋-refl : Reflexive _≋_ | ||||||||||||
| ≋-refl = ≈⇒≋ refl | ||||||||||||
|
|
||||||||||||
| ≋-sym : Symmetric _≋_ | ||||||||||||
| ≋-sym {x} {y} (g by ιg∙x≈y) = g N.⁻¹ by begin | ||||||||||||
| ι (g N.⁻¹) ∙ y ≈⟨ ∙-cong (ι.⁻¹-homo g) (sym ιg∙x≈y) ⟩ | ||||||||||||
| ι g ⁻¹ ∙ (ι g ∙ x) ≈⟨ cancelˡ (inverseˡ (ι g)) x ⟩ | ||||||||||||
| x ∎ | ||||||||||||
|
|
||||||||||||
| ≋-trans : Transitive _≋_ | ||||||||||||
| ≋-trans {x} {y} {z} (g by ιg∙x≈y) (h by ιh∙y≈z) = h N.∙ g by begin | ||||||||||||
| ι (h N.∙ g) ∙ x ≈⟨ ∙-congʳ (ι.∙-homo h g) ⟩ | ||||||||||||
| (ι h ∙ ι g) ∙ x ≈⟨ uv≈w⇒xu∙v≈xw ιg∙x≈y (ι h) ⟩ | ||||||||||||
| ι h ∙ y ≈⟨ ιh∙y≈z ⟩ | ||||||||||||
| z ∎ | ||||||||||||
|
|
||||||||||||
| ≋-isEquivalence : IsEquivalence _≋_ | ||||||||||||
| ≋-isEquivalence = record | ||||||||||||
| { refl = ≋-refl | ||||||||||||
| ; sym = ≋-sym | ||||||||||||
| ; trans = ≋-trans | ||||||||||||
| } | ||||||||||||
|
|
||||||||||||
| open AlgDefs _≋_ | ||||||||||||
|
|
||||||||||||
| ≋-∙-cong : Congruent₂ _∙_ | ||||||||||||
| ≋-∙-cong {x} {y} {u} {v} (g by ιg∙x≈y) (h by ιh∙u≈v) = g N.∙ h′ by begin | ||||||||||||
| ι (g N.∙ h′) ∙ (x ∙ u) ≈⟨ ∙-congʳ (ι.∙-homo g h′) ⟩ | ||||||||||||
| (ι g ∙ ι h′) ∙ (x ∙ u) ≈⟨ uv≈wx⇒yu∙vz≈yw∙xz (normal h x) (ι g) u ⟩ | ||||||||||||
| (ι g ∙ x) ∙ (ι h ∙ u) ≈⟨ ∙-cong ιg∙x≈y ιh∙u≈v ⟩ | ||||||||||||
| y ∙ v ∎ | ||||||||||||
| where h′ = conjugate h x | ||||||||||||
|
|
||||||||||||
| ≋-⁻¹-cong : Congruent₁ _⁻¹ | ||||||||||||
| ≋-⁻¹-cong {x} {y} (g by ιg∙x≈y) = h by begin | ||||||||||||
| ι h ∙ x ⁻¹ ≈⟨ normal (g N.⁻¹) (x ⁻¹) ⟩ | ||||||||||||
| x ⁻¹ ∙ ι (g N.⁻¹) ≈⟨ ∙-congˡ (ι.⁻¹-homo g) ⟩ | ||||||||||||
| x ⁻¹ ∙ ι g ⁻¹ ≈⟨ ⁻¹-anti-homo-∙ (ι g) x ⟨ | ||||||||||||
| (ι g ∙ x) ⁻¹ ≈⟨ ⁻¹-cong ιg∙x≈y ⟩ | ||||||||||||
| y ⁻¹ ∎ | ||||||||||||
| where h = conjugate (g N.⁻¹) (x ⁻¹) | ||||||||||||
|
|
||||||||||||
| quotientIsGroup : IsGroup _≋_ _∙_ ε _⁻¹ | ||||||||||||
| quotientIsGroup = record | ||||||||||||
| { isMonoid = record | ||||||||||||
| { isSemigroup = record | ||||||||||||
| { isMagma = record | ||||||||||||
| { isEquivalence = ≋-isEquivalence | ||||||||||||
| ; ∙-cong = ≋-∙-cong | ||||||||||||
| } | ||||||||||||
| ; assoc = λ x y z → ≈⇒≋ (assoc x y z) | ||||||||||||
| } | ||||||||||||
| ; identity = ≈⇒≋ ∘ identityˡ , ≈⇒≋ ∘ identityʳ | ||||||||||||
| } | ||||||||||||
| ; inverse = ≈⇒≋ ∘ inverseˡ , ≈⇒≋ ∘ inverseʳ | ||||||||||||
| ; ⁻¹-cong = ≋-⁻¹-cong | ||||||||||||
| } | ||||||||||||
|
|
||||||||||||
| quotientGroup : Group c (c ⊔ ℓ ⊔ c′) | ||||||||||||
| quotientGroup = record { isGroup = quotientIsGroup } | ||||||||||||
jamesmckinna marked this conversation as resolved.
Show resolved
Hide resolved
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. And now inline the definition above?
Suggested change
|
||||||||||||
|
|
||||||||||||
| _/_ : Group c (c ⊔ ℓ ⊔ c′) | ||||||||||||
| _/_ = quotientGroup | ||||||||||||
|
|
||||||||||||
| π : Group.Carrier G → Group.Carrier quotientGroup | ||||||||||||
| π x = x -- because we do all the work in the relation | ||||||||||||
|
|
||||||||||||
| π-isHomomorphism : IsGroupHomomorphism rawGroup (Group.rawGroup quotientGroup) π | ||||||||||||
| π-isHomomorphism = record | ||||||||||||
| { isMonoidHomomorphism = record | ||||||||||||
| { isMagmaHomomorphism = record | ||||||||||||
| { isRelHomomorphism = record | ||||||||||||
| { cong = ≈⇒≋ | ||||||||||||
| } | ||||||||||||
| ; homo = λ _ _ → ≋-refl | ||||||||||||
| } | ||||||||||||
| ; ε-homo = ≋-refl | ||||||||||||
| } | ||||||||||||
jamesmckinna marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||
| ; ⁻¹-homo = λ _ → ≋-refl | ||||||||||||
| } | ||||||||||||
|
|
||||||||||||
| π-surjective : Surjective _≈_ _≋_ π | ||||||||||||
| π-surjective g = g , ≈⇒≋ | ||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| ------------------------------------------------------------------------ | ||
| -- The Agda standard library | ||
| -- | ||
| -- Definition of normal subgroups | ||
| ------------------------------------------------------------------------ | ||
|
|
||
| {-# OPTIONS --safe --cubical-compatible #-} | ||
|
|
||
| open import Algebra.Bundles using (Group) | ||
|
|
||
| module Algebra.NormalSubgroup {c ℓ} (G : Group c ℓ) where | ||
|
|
||
| open import Algebra.Definitions using (Commutative) | ||
| open import Algebra.Construct.Sub.Group G using (Subgroup) | ||
| open import Level using (suc; _⊔_) | ||
|
|
||
| private | ||
| module G = Group G | ||
|
|
||
| -- every element of the subgroup commutes in G | ||
| record IsNormal {c′ ℓ′} (subgroup : Subgroup c′ ℓ′) : Set (c ⊔ ℓ ⊔ c′) where | ||
| open Subgroup subgroup | ||
| field | ||
| conjugate : ∀ n g → Carrier | ||
| normal : ∀ n g → ι (conjugate n g) G.∙ g G.≈ g G.∙ ι n | ||
|
|
||
| record NormalSubgroup c′ ℓ′ : Set (c ⊔ ℓ ⊔ suc (c′ ⊔ ℓ′)) where | ||
jamesmckinna marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| field | ||
| subgroup : Subgroup c′ ℓ′ | ||
| isNormal : IsNormal subgroup | ||
|
|
||
| open Subgroup subgroup public | ||
| open IsNormal isNormal public | ||
|
|
||
| abelian⇒subgroup-normal : ∀ {c′ ℓ′} → Commutative G._≈_ G._∙_ → (subgroup : Subgroup c′ ℓ′) → IsNormal subgroup | ||
| abelian⇒subgroup-normal ∙-comm subgroup = record { normal = λ n g → ∙-comm (ι n) g } | ||
| where open Subgroup subgroup | ||
jamesmckinna marked this conversation as resolved.
Show resolved
Hide resolved
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need this import? Cf. #2391 and see below.