Skip to content

Commit d87f455

Browse files
feat(GroupTheory/SpecificGroups/Alternating/Simple): the alternating group on at least 5 letters is simple. (leanprover-community#33082)
This is preparatory material for the conclusion of the story of the proof of simplicity of the alternating group using the Iwasawa criterion which is leanprover-community#36524. Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 95b694b commit d87f455

8 files changed

Lines changed: 117 additions & 7 deletions

File tree

Mathlib/GroupTheory/GroupAction/ConjAct.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ end Units
168168

169169
variable [Group G]
170170

171+
theorem coe_smul {G : Type*} [Group G] {H : Subgroup G} (g h : H) :
172+
(ConjAct.toConjAct g • h).1 = ConjAct.toConjAct g.1 • h.1 := by
173+
rfl
174+
175+
theorem toConjAct_inv_smul (g h : G) : toConjAct g⁻¹ • h = g⁻¹ * h * g := by
176+
rw [toConjAct_smul, inv_inv]
177+
171178
-- todo: this file is not in good order; I will refactor this after the PR
172179

173180
instance : MulDistribMulAction (ConjAct G) G where
@@ -188,6 +195,9 @@ instance smulCommClass' [SMul α G] [SMulCommClass G α G] [IsScalarTower α G G
188195
theorem smul_eq_mulAut_conj (g : ConjAct G) (h : G) : g • h = MulAut.conj (ofConjAct g) h :=
189196
rfl
190197

198+
theorem toConjAct_smul_eq_mulAut_conj (g h : G) : ConjAct.toConjAct g • h = MulAut.conj g h :=
199+
rfl
200+
191201
/-- The set of fixed points of the conjugation action of `G` on itself is the center of `G`. -/
192202
theorem fixedPoints_eq_center : fixedPoints (ConjAct G) G = center G := by
193203
ext x

Mathlib/GroupTheory/Perm/ConjAct.lean

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ theorem mem_conj_support (k : ConjAct (Perm α)) (g : Perm α) (a : α) :
3939
Function.comp_apply, ConjAct.ofConjAct_inv]
4040
apply Equiv.apply_eq_iff_eq_symm_apply
4141

42+
theorem support_conj_eq_smul_support (k : ConjAct (Perm α)) (g : Equiv.Perm α) :
43+
(k • g).support = k.ofConjAct • g.support := by
44+
ext
45+
rw [mem_conj_support, ← Perm.smul_def, ConjAct.ofConjAct_inv, Finset.inv_smul_mem_iff]
46+
4247
theorem cycleFactorsFinset_conj (g k : Perm α) :
4348
(ConjAct.toConjAct k • g).cycleFactorsFinset =
4449
Finset.map (MulAut.conj k).toEquiv.toEmbedding g.cycleFactorsFinset := by
@@ -65,4 +70,13 @@ theorem cycleFactorsFinset_conj_eq
6570
simp only [inv_smul_smul]
6671
exact Finset.inv_smul_mem_iff
6772

73+
omit [Fintype α] in
74+
theorem conj_smul_range_ofSubtype [Finite α] (g : Perm α) (s : Finset α) :
75+
ConjAct.toConjAct g • (ofSubtype (p := (· ∈ s))).range =
76+
(ofSubtype (p := (· ∈ g • s))).range := by
77+
have : Fintype α := Fintype.ofFinite α
78+
ext k
79+
simp_rw [Subgroup.mem_pointwise_smul_iff_inv_smul_mem, mem_range_ofSubtype_iff]
80+
simp [support_conj_eq_smul_support, Set.subset_smul_set_iff]
81+
6882
end Equiv.Perm

Mathlib/GroupTheory/Perm/Finite.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,18 @@ lemma disjoint_closure_of_disjoint_support {S T : Set (Perm α)}
290290
apply disjoint_support_closure_of_disjoint_support
291291
exact h
292292

293+
theorem mem_range_ofSubtype_iff {p : α → Prop} [DecidablePred p] {g : Perm α} :
294+
g ∈ (ofSubtype : Perm (Subtype p) →* Perm α).range ↔ (g.support : Set α) ⊆ setOf p := by
295+
constructor
296+
· rintro ⟨k, rfl⟩ x
297+
simp only [Finset.mem_coe, mem_support_ofSubtype, Set.mem_setOf_eq]
298+
exact fun ⟨hx, _⟩ ↦ hx
299+
· intro hg
300+
refine ⟨g.subtypePerm fun x ↦ ?_, ofSubtype_subtypePerm _ fun x hx ↦ hg (mem_support.mpr hx)⟩
301+
by_cases hx : g x = x
302+
· rw [hx]
303+
· refine iff_of_true (hg ?_) (hg ?_) <;> simpa
304+
293305
end Fintype
294306

295307
end Equiv.Perm

Mathlib/GroupTheory/Perm/Sign.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -579,8 +579,8 @@ theorem sign_extendDomain (e : Perm α) {p : β → Prop} [DecidablePred p] (f :
579579
simp only [Equiv.Perm.extendDomain, sign_subtypeCongr, sign_permCongr, sign_refl, mul_one]
580580

581581
@[simp]
582-
theorem sign_ofSubtype {p : α → Prop} [DecidablePred p] (f : Equiv.Perm (Subtype p)) :
583-
sign (ofSubtype f) = sign f :=
582+
theorem sign_ofSubtype {p : α → Prop} [DecidablePred p] [Fintype (Subtype p)]
583+
(f : Equiv.Perm (Subtype p)) : sign (ofSubtype f) = sign f :=
584584
sign_extendDomain f (Equiv.refl (Subtype p))
585585

586586
end congr

Mathlib/GroupTheory/Perm/Support.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,10 @@ theorem support_ofSubtype {p : α → Prop} [DecidablePred p] (u : Perm (Subtype
365365
· simp only [forall_prop_of_true hx, ofSubtype_apply_of_mem u hx, ← Subtype.coe_inj]
366366
· simp only [forall_prop_of_false hx, ofSubtype_apply_of_not_mem u hx]
367367

368+
theorem mem_support_ofSubtype {p : α → Prop} [DecidablePred p] (x : α) (u : Perm (Subtype p)) :
369+
x ∈ (ofSubtype u).support ↔ ∃ (hx : p x), ⟨x, hx⟩ ∈ u.support := by
370+
simp [support_ofSubtype]
371+
368372
theorem mem_support_of_mem_noncommProd_support {α β : Type*} [DecidableEq β] [Fintype β]
369373
{s : Finset α} {f : α → Perm β}
370374
{comm : (s : Set α).Pairwise (Commute on f)} {x : β} (hx : x ∈ (s.noncommProd f comm).support) :

Mathlib/GroupTheory/SpecificGroups/Alternating.lean

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ Authors: Aaron Anderson, Antoine Chambert-Loir
55
-/
66
module
77

8-
public import Mathlib.Algebra.Ring.CharZero
98
public import Mathlib.Data.Fintype.Units
109
public import Mathlib.GroupTheory.IndexNormal
10+
public import Mathlib.GroupTheory.Perm.ConjAct
1111
public import Mathlib.GroupTheory.Perm.Fin
1212
public import Mathlib.GroupTheory.Subgroup.Simple
13-
public import Mathlib.Logic.Equiv.Fin.Rotate
1413
public import Mathlib.Tactic.IntervalCases
1514

1615
/-!
@@ -205,8 +204,19 @@ theorem closure_three_cycles_eq_alternating :
205204
rw [List.prod_cons, List.prod_cons, ← mul_assoc]
206205
apply mul_mem <;> grind [IsSwap.mul_mem_closure_three_cycles]
207206

207+
theorem isThreeCycle_subset_alternatingGroup :
208+
{g : Perm α | g.IsThreeCycle} ⊆ alternatingGroup α :=
209+
fun _ ↦ IsThreeCycle.mem_alternatingGroup
210+
211+
theorem _root_.alternatingGroup.closure_isThreeCycles_eq_top :
212+
Subgroup.closure {g : alternatingGroup α | Equiv.Perm.IsThreeCycle (g : Equiv.Perm α)} = ⊤ := by
213+
rw [← map_subtype_inj, MonoidHom.map_closure]
214+
have : (alternatingGroup α).subtype '' _ = {g : Perm α | IsThreeCycle g} :=
215+
Subtype.coe_image_of_subset isThreeCycle_subset_alternatingGroup
216+
aesop
217+
208218
/-- The alternating group is the closure of the set of permutations with cycle type (2, 2). -/
209-
theorem closure_cycleType_eq_2_2_eq_alternatingGroup (h5 : 5 ≤ Nat.card α) :
219+
theorem closure_cycleType_eq_two_two_eq_alternatingGroup (h5 : 5 ≤ Nat.card α) :
210220
Subgroup.closure {g : Perm α | g.cycleType = {2, 2}} = alternatingGroup α := by
211221
apply le_antisymm
212222
· rw [Subgroup.closure_le]
@@ -227,6 +237,24 @@ theorem closure_cycleType_eq_2_2_eq_alternatingGroup (h5 : 5 ≤ Nat.card α) :
227237
· apply Subgroup.subset_closure
228238
exact cycleType_swap_mul_swap_of_nodup (by grind [Finset.mem_compl])
229239

240+
@[deprecated (since := "2026-03-10")]
241+
alias closure_cycleType_eq_2_2_eq_alternatingGroup :=
242+
closure_cycleType_eq_two_two_eq_alternatingGroup
243+
244+
theorem cycleType_eq_two_two_subset_alternatingGroup :
245+
{g : Perm α | g.cycleType = {2, 2}} ⊆ alternatingGroup α := by
246+
intro g hg
247+
rw [Set.mem_setOf_eq] at hg
248+
simp [sign_of_cycleType, hg, ← Units.val_inj]
249+
250+
theorem _root_.alternatingGroup.closure_cycleType_eq_two_two_eq_top (h5 : 5 ≤ Nat.card α) :
251+
Subgroup.closure {g : alternatingGroup α | (g : Perm α).cycleType = {2, 2}} = ⊤ := by
252+
rw [← map_subtype_inj, MonoidHom.map_closure]
253+
have : (alternatingGroup α).subtype '' _ = {g : Perm α | g.cycleType = {2, 2}} :=
254+
Subtype.coe_image_of_subset cycleType_eq_two_two_subset_alternatingGroup
255+
have := closure_cycleType_eq_two_two_eq_alternatingGroup h5
256+
aesop
257+
230258
/-- A key lemma to prove $A_5$ is simple. Shows that any normal subgroup of an alternating group on
231259
at least 5 elements is the entire alternating group if it contains a 3-cycle. -/
232260
theorem IsThreeCycle.alternating_normalClosure (h5 : 5 ≤ Fintype.card α) {f : Perm α}
@@ -437,6 +465,43 @@ theorem center_eq_bot (hα4 : 4 ≤ Nat.card α) :
437465
simp only [← Subgroup.mk_smul k this, ← mul_smul, hg']
438466
simp [k, hc.2.symm, hd.2.symm]
439467

468+
/-- The element of `alternatingGroup α` induced by an element
469+
of `alternatingGroup s`, when `s : Finset α`. -/
470+
def ofSubtype (s : Finset α) : alternatingGroup s →* alternatingGroup α where
471+
toFun x := ⟨Perm.ofSubtype (x : Perm s), by
472+
rw [mem_alternatingGroup, sign_ofSubtype, mem_alternatingGroup.mp x.prop]⟩
473+
map_mul' := by simp
474+
map_one' := by simp
475+
476+
theorem map_ofSubtype (s : Finset α) :
477+
(alternatingGroup s).map (Perm.ofSubtype : Perm s →* Perm α) =
478+
(Perm.ofSubtype : Perm s →* Perm α).range ⊓ (alternatingGroup α) := by
479+
ext k
480+
rw [Subgroup.mem_map, Subgroup.mem_inf, MonoidHom.mem_range]
481+
grind [sign_ofSubtype, mem_alternatingGroup]
482+
483+
theorem ofSubtype_comp_subtype (s : Finset α) : (alternatingGroup α).subtype.comp (ofSubtype s) =
484+
Perm.ofSubtype.comp (alternatingGroup s).subtype := by
485+
rfl
486+
487+
theorem range_ofSubtype (s : Finset α) : (ofSubtype s).range =
488+
(Perm.ofSubtype (p := (· ∈ s))).range.subgroupOf (alternatingGroup α) := by
489+
rw [← map_subtype_inj, ← MonoidHom.range_comp, ofSubtype_comp_subtype, MonoidHom.range_comp,
490+
range_subtype, subgroupOf_map_subtype, map_ofSubtype]
491+
492+
theorem mem_range_ofSubtype_iff (s : Finset α) (k : alternatingGroup α) :
493+
k ∈ (ofSubtype s).range ↔ (k : Perm α).support ⊆ s := by
494+
rw [range_ofSubtype, mem_subgroupOf, Perm.mem_range_ofSubtype_iff]
495+
simp
496+
497+
open Pointwise in
498+
theorem conj_smul_range_ofSubtype (s : Finset α) (g : alternatingGroup α) :
499+
MulAut.conj g • (ofSubtype s).range = (ofSubtype (g • s)).range := by
500+
ext k
501+
simp_rw [mem_pointwise_smul_iff_inv_smul_mem, mem_range_ofSubtype_iff, ← map_inv,
502+
MulAut.smul_def, ← ConjAct.toConjAct_smul_eq_mulAut_conj, ConjAct.coe_smul]
503+
simp [support_conj_eq_smul_support, Finset.subset_smul_finset_iff, Subgroup.smul_def]
504+
440505
end alternatingGroup
441506

442507
namespace Equiv.Perm

Mathlib/GroupTheory/SpecificGroups/Alternating/MaximalSubgroups.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,12 @@ theorem stabilizer.surjective_toPerm {s : Set α} (hs : sᶜ.Nontrivial) :
9797
exact (Set.disjoint_left.mp hk_support) hx
9898
intro g
9999
rcases Int.units_eq_one_or (sign g) with hsg | hsg
100-
· use! ofSubtype g
100+
· use! Equiv.Perm.ofSubtype g
101101
· simp [mem_alternatingGroup, hsg]
102102
· rw [mem_stabilizer_iff, Submonoid.mk_smul]
103103
exact ofSubtype_mem_stabilizer g
104104
· aesop
105-
· use! ofSubtype g * k
105+
· use! Equiv.Perm.ofSubtype g * k
106106
· simp [mem_alternatingGroup, hk_swap.sign_eq, hsg]
107107
· rw [mem_stabilizer_iff, Submonoid.mk_smul, mul_smul, hks, ofSubtype_mem_stabilizer]
108108
· ext x

Mathlib/GroupTheory/SpecificGroups/KleinFour.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ instance {G : Type*} [AddGroup G] [IsAddKleinFour G] : IsKleinFour (Multiplicati
7373

7474
namespace IsKleinFour
7575

76+
@[to_additive]
77+
theorem isMulCommutative {G : Type*} [Group G] [IsKleinFour G] :
78+
IsMulCommutative G where
79+
is_comm.comm := mul_comm_of_exponent_two exponent_two
80+
7681
/-- This instance is scoped, because it always applies (which makes linting and typeclass inference
7782
potentially *a lot* slower). -/
7883
@[to_additive]

0 commit comments

Comments
 (0)