-
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?
Conversation
jamesmckinna
left a comment
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.
8d0576a to
65c4224
Compare
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) |
| 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?
| 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) |
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.
| } | ||
|
|
||
| quotientGroup : Group c (c ⊔ ℓ ⊔ c′) | ||
| quotientGroup = record { isGroup = quotientIsGroup } |
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.
And now inline the definition above?
| quotientGroup = record { isGroup = quotientIsGroup } | |
| quotientGroup = record | |
| { isGroup = ... | |
| } |
|
In lieu of any further review comments, please see #2859 (purely!) as a comparison point, and feel free to grab anything from there which you might find useful... it just seemed the easiest way to encapsulate all the thoughts I had had about your groups-rings-modules development |
2460cf0 to
b481327
Compare
I noted that every time I used normal it was under sym This felt like a good reason to reverse it
998fe3d to
d5c518b
Compare
| infix 0 _by_ | ||
|
|
||
| data _≋_ (x y : Carrier) : Set (c ⊔ ℓ ⊔ c′) where | ||
| _by_ : ∀ g → ι g ∙ x ≈ y → x ≋ 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.
If this is instead _by_ : ∀ g → x ∙ ι g ≈ y → x ≋ y some things line up nicer when we get to integers (in particular it matches Data.Integer.DivMod.a≡a%n+[a/n]*n)
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.
Well, so be it, but be careful of having a tail wag the dog. It wouldn't be the first time that existing stdlib modules expose argument order/definitional inconsistency when exposed to new additions/refactoriings (the saga of Algebra.Properties.*.Divisibility and Data.Nat.DivMod.* being a case in point)...
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.
The alternative here would be putting more lemmas in Data.Integer.DivMod, which I want to do anyway
|
FTR, if you don't feel like augmenting this with the |
Builds off #2852, continuing towards #2729 in bitesize chunks.