Skip to content
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

feat(GroupTheory/MaximalSubgroups): define maximal subgroups #20499

Closed
wants to merge 12 commits into from
1 change: 1 addition & 0 deletions Mathlib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -3250,6 +3250,7 @@ import Mathlib.GroupTheory.GroupAction.Support
import Mathlib.GroupTheory.GroupExtension.Defs
import Mathlib.GroupTheory.HNNExtension
import Mathlib.GroupTheory.Index
import Mathlib.GroupTheory.MaximalSubgroups
import Mathlib.GroupTheory.MonoidLocalization.Away
import Mathlib.GroupTheory.MonoidLocalization.Basic
import Mathlib.GroupTheory.MonoidLocalization.Cardinality
Expand Down
6 changes: 6 additions & 0 deletions Mathlib/Data/SetLike/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Authors: Eric Wieser
import Mathlib.Tactic.Monotonicity.Attr
import Mathlib.Tactic.SetLike
import Mathlib.Data.Set.Basic
import Mathlib.Order.Atoms
AntoineChambert-Loir marked this conversation as resolved.
Show resolved Hide resolved

/-!
# Typeclass for types with a set-like extensionality property
Expand Down Expand Up @@ -214,4 +215,9 @@ theorem exists_of_lt : p < q → ∃ x ∈ q, x ∉ p :=
theorem lt_iff_le_and_exists : p < q ↔ p ≤ q ∧ ∃ x ∈ q, x ∉ p := by
rw [lt_iff_le_not_le, not_le_iff_exists]

theorem isCoatom_iff [OrderTop A] {K : A} :
IsCoatom K ↔ K ≠ ⊤ ∧ ∀ H g, K ≤ H → g ∉ K → g ∈ H → H = ⊤ := by
simp_rw [IsCoatom, lt_iff_le_not_le, SetLike.not_le_iff_exists,
and_comm (a := _ ≤ _), and_imp, exists_imp, ← and_imp, and_comm (a := _ ≤ _), and_comm]

end SetLike
61 changes: 61 additions & 0 deletions Mathlib/GroupTheory/MaximalSubgroups.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/-
Copyright (c) 2024 Antoine Chambert-Loir. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Antoine Chambert-Loir
-/

import Mathlib.Algebra.Group.Subgroup.Lattice
import Mathlib.Order.Atoms

/-! # Maximal subgroups

A subgroup `K` of a group `G` is maximal if it is maximal in the collection of proper subgroups
of `G`: this is defined as `IsCoatom K`.

We prove a few basic results which are essentially copied from those about maximal ideals.

Besides them, we have :
* `Subgroup.isMaximal_iff` proves that a subgroup K of G is maximal if and only if
AntoineChambert-Loir marked this conversation as resolved.
Show resolved Hide resolved
it is not ⊤ and if for all g ∈ G such that g ∉ K, every subgroup containing K and g is ⊤.
AntoineChambert-Loir marked this conversation as resolved.
Show resolved Hide resolved

## Remark on implementation

While the API is inspired from that for maximal ideals (`Ideal.IsMaximal`),
it has not been felt necessary to encapsulate this notion as a class,
AntoineChambert-Loir marked this conversation as resolved.
Show resolved Hide resolved
and it is just defined as an `abbrev` to `IsCoatom`.

Will we need to write this for all `sub`-structures ?
In fact, the essentially only justification of this file is `Subgroup.isMaximal_iff`.
Comment on lines +28 to +29
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have the same thought and so I'm not absolutely convinced about the new definition.

However I am convinced that the changes to the files Order/Atoms.lean and Ideal/Maximal.lean are desirable. How would you feel about splitting out a new PR with just those changes for quick merging?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ocfnash I agree that it would be unpleasant to rewrite the same bit of code for all sub-structures. I have the feeling that the path we're taking is to give a new definition for each maximal substructure which is IsCoatom and then we're fearing defeq abuse and we develop a new API instead of relying on that of IsCoatom. Am I wrong?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you're right. The paths I see are:

  1. Add an abbrev for each substructure + write API to reduce temptation for defeq abuse
  2. Add an abbrev for each substructure, no API, permit defeq abuse
  3. Admit that the abbrev is not really doing anything and just spell all our lemmas using IsCoatom.

IMHO it's subjective but I'd tend toward 3 or maybe 2.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, I would probably go for 2., telling ourselves that defeq abuse is a problem if the def really contains stuff (so, defeq abuse for IsCoatom is problematic), but it is ok if it is just an abbrev. In a sense, the def at play here is IsCoatom and it is for that one that we should build the API and use that instead of the def. If then something is an abbrev of IsCoatom we will use the API there and that will be helping avoiding defeq abuse. Of course 3. is also OK, but I think that is mathematically pleasant to call a maximal ideal/subgroup as such rather than a "coatomic ideal".

If we all agree (@AntoineChambert-Loir : what's your take on the matter?), shall we start by this PR and simply rely on the IsCoatom API (perhaps explaining in the doc what is going on, possibly pointing to this discussion)?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The downside of 3 is that then we don't get to use typeclass inference for maximal ideals.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have the same thought and so I'm not absolutely convinced about the new definition.

However I am convinced that the changes to the files Order/Atoms.lean and Ideal/Maximal.lean are desirable. How would you feel about splitting out a new PR with just those changes for quick merging?

I'll do that this afternoon.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding the main goal of the PR : It was only used for an alternative characterization of primitive actions (#12052) that involves maximal subgroups. Let me first see if it is possible to formulate this as IsCoatom in that context.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good news: I could remove all explicit mentions of maximal subgroups in #12052, IsCoatom _ worked fine.
That doesn't make this PR absolutely obsolete, but leaves more time to think about what is necessary.
Ultimately, I would like to see formalized theorems of O'Nan-Scott and Aschbacher, Liebeck… that describe the maximal subgroups of Sn, An and geometric groups. But maybe even then, IsCoatom will suffice.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After some thought I came to the opinion that perhaps the situation maximal ideal vs maximal subgroup is not really symmetric. To my knowledge, there is a bunch of ancillary notions and constructions associated to that of maximal ideal (localization, residue field, maximal spectrum, etc.) whereas maximal subgroup are "only" CoAtoms among subgroups: certainly there are many results about them but I feel that they fewer things are "built out of them". I am sure @AntoineChambert-Loir will promptly prove me wrong, given his knowledge, but if I happen to be correct I would argue that keeping around the assumption IsCoatom (or simply introducing an abbrev and living with defeq) should be ok, and I would suggest to remove from this PR the boilerplate pertaining to maximal subgroups.

-/

variable {G : Type*} [Group G]

namespace Subgroup

/-- A subgroup is maximal if it is maximal in the collection of proper subgroups -/
@[to_additive
"An additive subgroup is maximal if it is maximal in the collection of proper additive subgroups"]
abbrev IsMaximal (K : Subgroup G) : Prop :=
IsCoatom K

@[to_additive]
theorem isMaximal_def {K : Subgroup G} : K.IsMaximal ↔ IsCoatom K := Eq.to_iff rfl
AntoineChambert-Loir marked this conversation as resolved.
Show resolved Hide resolved

@[to_additive]
theorem IsMaximal.ne_top {K : Subgroup G} (h : K.IsMaximal) : K ≠ ⊤ := h.1

@[to_additive]
theorem IsMaximal.eq_top_of_lt {K H : Subgroup G} (h : K.IsMaximal) (hH : K < H) : H = ⊤ :=
h.2 H hH

@[to_additive]
theorem isMaximal_iff {K : Subgroup G} :
K.IsMaximal ↔ K ≠ ⊤ ∧ ∀ (H : Subgroup G) (g), K ≤ H → g ∉ K → g ∈ H → H = ⊤ :=
AntoineChambert-Loir marked this conversation as resolved.
Show resolved Hide resolved
SetLike.isCoatom_iff

@[to_additive]
theorem IsMaximal.eq_of_le {K H : Subgroup G} (hK : K.IsMaximal) (hH : H ≠ ⊤) (KH : K ≤ H) :
K = H :=
eq_iff_le_not_lt.2 ⟨KH, fun h => hH (hK.2 H h)⟩

end Subgroup
Loading