-
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: subgroups
Are you sure you want to change the base?
Conversation
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.
This all looks great. I've made suggestions, but nothing is a deal-breaker.
| quotientGroup : Group c (c ⊔ ℓ ⊔ c′) | ||
| quotientGroup = record { isGroup = quotientIsGroup } | ||
|
|
||
| project : Group.Carrier G → Group.Carrier quotientGroup |
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.
My personal preference is for π (for projection), echoing ι (for inclusion), but I won't fight for it...
... maybe I should?
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.
I've got no strong feeling here
8d0576a to
65c4224
Compare
I noted that every time I used normal it was under sym This felt like a good reason to reverse it
65c4224 to
e3baf59
Compare
| private | ||
| module N = NormalSubgroup N | ||
| open NormalSubgroup N using (ι; module ι; conjugate; normal) |
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.
Can simplify this to:
| private | |
| module N = NormalSubgroup N | |
| open NormalSubgroup N using (ι; module ι; conjugate; normal) | |
| private | |
| open module N = NormalSubgroup N using (ι; module ι; conjugate; normal) |
| 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 |
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.
I'd maybe be tempted to lift this out to Algebra.Construct.Quotient.AbelianGroup to bundle up the quotient-out-of-any-subgroup construction, and simplify the downstream imports in #2855 ?
| New modules | ||
| ----------- | ||
|
|
||
| * `Algebra.Cosntruct.Quotient.Group` for the definition of quotient groups. |
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.
Typo
| * `Algebra.Cosntruct.Quotient.Group` for the definition of quotient groups. | |
| * `Algebra.Construct.Quotient.Group` for the definition of quotient groups. |
| project-isHomomorphism : IsGroupHomomorphism rawGroup (Group.rawGroup quotientGroup) project | ||
| project-isHomomorphism = record |
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.
Naming?
| project-isHomomorphism : IsGroupHomomorphism rawGroup (Group.rawGroup quotientGroup) project | |
| project-isHomomorphism = record | |
| project-isGroupHomomorphism : IsGroupHomomorphism rawGroup (Group.rawGroup quotientGroup) project | |
| project-isGroupHomomorphism = record |
Twofold reasons:
- Subsequently, for
Ring R / Ideal I, you also defineproject-isHomomorphism : IsRingHomomorphism, and maybe that's enough (let theXpath context of the algebra determine what kind ofIsXHomomorphismis defined - BUT, for
Ring, what you actually need is to separate out theisMonoidHomomorphismfield, so why not alsoisGroupHomomorphism?
| { isMonoidHomomorphism = record | ||
| { isMagmaHomomorphism = record | ||
| { isRelHomomorphism = record | ||
| { cong = ≈⇒≋ | ||
| } | ||
| ; homo = λ _ _ → ≋-refl | ||
| } | ||
| ; ε-homo = ≋-refl | ||
| } |
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.
This should be lifted out as a separate (prior) definition
project-isMagmaHomomorphism : IsMagmaHomomorphism rawMagma (Group.rawMagma quotientGroup) project
project-isMagmaHomomorphism = record
{ isRelHomomorphism = record
{ cong = ≈⇒≋
}
; homo = λ _ _ → ≋-refl
}
project-isMonoidHomomorphism : IsMonoidHomomorphism rawMonoid (Group.rawMonoid quotientGroup) project
project-isMonoidHomomorphism = record
{ isMagmaHomomorphism = project-isMagmaHomomorphism
; ε-homo = ≋-refl
}
project-isGroupHomomorphism : IsGroupHomomorphism rawGroup (Group.rawGroup quotientGroup) project
project-isGroupHomomorphism = record
{ isMonoidHomomorphism = project-isMonoidHomomorphism
; ⁻¹-homo = λ _ → ≋-refl
}|
|
||
| module Algebra.NormalSubgroup {c ℓ} (G : Group c ℓ) where | ||
|
|
||
| open import Algebra.Definitions |
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.
Unused!
| ≈⇒≋ : _≈_ ⇒ _≋_ | ||
| ≈⇒≋ {x} {y} x≈y = N.ε by trans (∙-cong ι.ε-homo x≈y) (identityˡ y) | ||
|
|
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.
| ≈⇒≋ : _≈_ ⇒ _≋_ | |
| ≈⇒≋ {x} {y} x≈y = N.ε by trans (∙-cong ι.ε-homo x≈y) (identityˡ y) |
In view of the above refactoring of reflexivity...
| ≋-refl : Reflexive _≋_ | ||
| ≋-refl {x} = N.ε by trans (∙-congʳ ι.ε-homo) (identityˡ x) |
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.
| ≋-refl : Reflexive _≋_ | |
| ≋-refl {x} = N.ε by trans (∙-congʳ ι.ε-homo) (identityˡ x) | |
| ≈⇒≋ : _≈_ ⇒ _≋_ | |
| ≈⇒≋ {x} {y} x≈y = N.ε by trans (∙-cong ι.ε-homo x≈y) (identityˡ y) | |
| ≋-refl : Reflexive _≋_ | |
| ≋-refl = ≈⇒≋ refl |
Unsurprisingly, these proofs are definitionally equal to the previous versions, but put ≈⇒≋ ('abstract' reflexivity...) higher up the food chain.
Builds off #2852, continuing towards #2729 in bitesize chunks.