-
Notifications
You must be signed in to change notification settings - Fork 259
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.
| Normal : ∀ {c′ ℓ′} → Subgroup c′ ℓ′ → Set (c ⊔ ℓ ⊔ c′) | ||
| Normal subgroup = ∀ n g → ∃[ n′ ] ι n′ G.∙ g G.≈ g G.∙ ι 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.
On the Structures/Bundles convention, should we call this IsNormal?
| Normal subgroup = ∀ n g → ∃[ n′ ] ι n′ G.∙ g G.≈ g G.∙ ι n | ||
| where open Subgroup subgroup | ||
|
|
||
| record NormalSubgroup c′ ℓ′ : Set (c ⊔ ℓ ⊔ suc (c′ ⊔ ℓ′)) where |
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 hence this becomes (simply?) Normal, as the Bundled version of IsNormal?
| record NormalSubgroup c′ ℓ′ : Set (c ⊔ ℓ ⊔ suc (c′ ⊔ ℓ′)) where | ||
| field | ||
| subgroup : Subgroup c′ ℓ′ | ||
| normal : Normal 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.
| normal : Normal subgroup | |
| isNormal : IsNormal subgroup |
?
|
|
||
| open Subgroup subgroup public | ||
|
|
||
| abelian⇒subgroup-normal : ∀ {c′ ℓ′} → Commutative G._≈_ G._∙_ → (subgroup : Subgroup c′ ℓ′) → Normal 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.
Again
| abelian⇒subgroup-normal : ∀ {c′ ℓ′} → Commutative G._≈_ G._∙_ → (subgroup : Subgroup c′ ℓ′) → Normal subgroup | |
| abelian⇒subgroup-normal : ∀ {c′ ℓ′} → Commutative G._≈_ G._∙_ → (subgroup : Subgroup c′ ℓ′) → IsNormal subgroup |
| 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
| 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.
Are you sticking with this version, or the symmetric one which multiplies on each side of the equation?
| data _≋_ (x y : Carrier) : Set (c ⊔ ℓ ⊔ c′) where | |
| _by_ : ∀ g → ι g ∙ x ≈ y → x ≋ y | |
| data _≋_ (x y : Carrier) : Set (c ⊔ ℓ ⊔ c′) where | |
| by: ∀ g h → ι g ∙ x ≈ ι h ∙ y → x ≋ y |
plus some smart constructors/pattern synonyms to achieve the various properties?
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 want to experiment with the symmetric version more, but:
- it means we need to carry around more data, operationally (minor issue)
- I think it works out pretty close to being equivalent to this construction on the Grothendieck group for a cancellative monoid, and if that's the case I'd rather have that in two steps explicitly
|
|
||
| -- every element of the subgroup commutes in G | ||
| Normal : ∀ {c′ ℓ′} → Subgroup c′ ℓ′ → Set (c ⊔ ℓ ⊔ c′) | ||
| Normal subgroup = ∀ n g → ∃[ n′ ] ι n′ G.∙ g G.≈ g G.∙ ι 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.
How does flipping the old definition improve matters?
Curious...
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 you look at the diff of the commit that flipped this (e3baf59#diff-4b2ec40733e56b6ad2e835149fee88672cc51d5ec131be90521ea0098f4813cc) in the quotient groups module, previously every time I was using normal I had to sym it, this way I can use it directly
Builds off #2852, continuing towards #2729 in bitesize chunks.