- 
                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
  
    | 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
 
| 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 ?
Builds off #2852, continuing towards #2729 in bitesize chunks.