Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
659eb3e
initial commit
AntoineChambert-Loir Dec 17, 2025
3dc27d3
update Mathlib.lean
AntoineChambert-Loir Dec 17, 2025
7129ac9
continuation modérée
AntoineChambert-Loir Dec 17, 2025
b5fde32
iwasawa 2, 3 and almost 4
AntoineChambert-Loir Dec 18, 2025
f9993aa
all 3 structures
AntoineChambert-Loir Dec 18, 2025
7a4c917
a bit of cleanup, and the application for 2
AntoineChambert-Loir Dec 18, 2025
4235cee
some progress
AntoineChambert-Loir Dec 18, 2025
76f4c5b
finish the proof
AntoineChambert-Loir Dec 19, 2025
9b5e614
some cleanup
AntoineChambert-Loir Dec 19, 2025
43cf29b
docstring
AntoineChambert-Loir Dec 19, 2025
e0950ff
mv file
AntoineChambert-Loir Dec 19, 2025
b2c0b6a
remove simp tag because of simpNF
AntoineChambert-Loir Dec 19, 2025
d073779
Apply suggestions from code review
AntoineChambert-Loir Jan 21, 2026
7cac192
comments from Combination
AntoineChambert-Loir Jan 21, 2026
61803be
remove superfluous parentheses
AntoineChambert-Loir Jan 21, 2026
0ec77f2
mv lemmas to other files
AntoineChambert-Loir Jan 21, 2026
4baa8a7
delete conj lemma
AntoineChambert-Loir Jan 21, 2026
031c2a4
cleanup Simple
AntoineChambert-Loir Jan 21, 2026
eb42964
use is_comm.comm
AntoineChambert-Loir Jan 21, 2026
880daf7
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Jan 22, 2026
9435956
downgrade Fintype to Finite in a lemma
AntoineChambert-Loir Jan 22, 2026
57eb0dc
adjust, make section public
AntoineChambert-Loir Jan 22, 2026
d4274bf
simplify - but that does not close the convert issue
AntoineChambert-Loir Jan 22, 2026
3bcab85
delete unused hypotheses and add docstring
AntoineChambert-Loir Jan 22, 2026
d6629cd
two space changes
AntoineChambert-Loir Jan 23, 2026
fd25572
delete two unused lemmas
AntoineChambert-Loir Jan 23, 2026
c1d8c85
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Jan 28, 2026
1eea6fb
merge master
AntoineChambert-Loir Feb 2, 2026
cc63020
adjust
AntoineChambert-Loir Feb 2, 2026
8732ecc
dispatch
AntoineChambert-Loir Feb 2, 2026
7f64362
adjust once more
AntoineChambert-Loir Feb 2, 2026
ee2fef6
remove two comments
AntoineChambert-Loir Feb 2, 2026
33e27d0
simplify proof
AntoineChambert-Loir Feb 2, 2026
1243e56
adjust namespaces
AntoineChambert-Loir Feb 2, 2026
a342590
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Feb 2, 2026
6280da9
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Feb 13, 2026
b6d2028
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Feb 21, 2026
5141284
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Mar 3, 2026
bf8897f
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Mar 3, 2026
8efb535
adjust, but this should be solved differently
AntoineChambert-Loir Mar 3, 2026
0b5a848
delete unused defeQ something line
AntoineChambert-Loir Mar 3, 2026
e1dc18d
two thirds of the comments
AntoineChambert-Loir Mar 8, 2026
8f211c5
merge two lines
AntoineChambert-Loir Mar 9, 2026
b434525
refine
AntoineChambert-Loir Mar 9, 2026
813e49f
first batch of comments
AntoineChambert-Loir Mar 10, 2026
35a81a7
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Mar 10, 2026
d2df576
try to move/redefine fintype instance
AntoineChambert-Loir Mar 10, 2026
d92f43a
revert Fintype instance, adjust to other definition
AntoineChambert-Loir Mar 10, 2026
9312e7c
actually revert modifs
AntoineChambert-Loir Mar 10, 2026
39c539f
actually revert modifs, yet again
AntoineChambert-Loir Mar 10, 2026
9c6e019
add a lemma, simplify a proof
AntoineChambert-Loir Mar 10, 2026
2ffbc95
follow TB's suggestion
AntoineChambert-Loir Mar 10, 2026
bc13b0d
adjust
AntoineChambert-Loir Mar 10, 2026
52dbc00
Apply suggestions from code review
AntoineChambert-Loir Mar 11, 2026
249b439
delete niche lemma
AntoineChambert-Loir Mar 11, 2026
e884de7
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Mar 11, 2026
4e48b85
fix last line
AntoineChambert-Loir Mar 11, 2026
62cd7bf
Merge branch 'J-IwasawaStructures' of github.com:AntoineChambert-Loir…
AntoineChambert-Loir Mar 11, 2026
316b3c9
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 11, 2026
297a61f
fix once more that f... ending linee
AntoineChambert-Loir Mar 11, 2026
938a7c0
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 11, 2026
fa45427
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Mar 11, 2026
2484806
what's happening?
AntoineChambert-Loir Mar 11, 2026
751a285
Merge branch 'J-IwasawaStructures' of github.com:AntoineChambert-Loir…
AntoineChambert-Loir Mar 11, 2026
fe47a98
Merge branch 'master' into J-IwasawaStructures
AntoineChambert-Loir Mar 11, 2026
89ac298
Apply suggestions from code review
AntoineChambert-Loir Mar 12, 2026
a495471
lint-style
AntoineChambert-Loir Mar 12, 2026
3e91703
delete Alternating/Simple
AntoineChambert-Loir Mar 12, 2026
e68a164
mv lemma to ConjAct file
AntoineChambert-Loir Mar 12, 2026
1d565c6
Merge branch 'master' into J-Simplicity
AntoineChambert-Loir Mar 12, 2026
a3d5980
add file !
AntoineChambert-Loir Mar 13, 2026
e19129c
Merge branch 'J-Simplicity' of github.com:AntoineChambert-Loir/mathli…
AntoineChambert-Loir Mar 13, 2026
810d9da
Merge branch 'master' into J-Simplicity
AntoineChambert-Loir Mar 13, 2026
2840863
add fixedPoints_ne_univ_of_isPreprimitive
AntoineChambert-Loir Mar 16, 2026
7bdfd86
Apply suggestions from code review
AntoineChambert-Loir Mar 16, 2026
5e84670
adjust to fixedPoints_ne_univ…
AntoineChambert-Loir Mar 16, 2026
f9cf09c
refactor alternatingGroup.commutator_perm_eq to use Nat.card
AntoineChambert-Loir Mar 16, 2026
ae0c8f7
Merge branch 'master' into J-Simplicity
AntoineChambert-Loir Mar 16, 2026
810df55
lint-style
AntoineChambert-Loir Mar 16, 2026
ef7888f
Merge branch 'J-Simplicity' of github.com:AntoineChambert-Loir/mathli…
AntoineChambert-Loir Mar 16, 2026
307893e
isPreprimitive wasn't necessary, faithfulSMul suffices
AntoineChambert-Loir Mar 16, 2026
b117073
apply suggestions
AntoineChambert-Loir Mar 18, 2026
23b2625
Merge branch 'master' into J-Simplicity
AntoineChambert-Loir Mar 18, 2026
02c5618
fill parameters (why is it needed?)
AntoineChambert-Loir Mar 18, 2026
615ac34
Merge branch 'J-Simplicity' of github.com:AntoineChambert-Loir/mathli…
AntoineChambert-Loir Mar 18, 2026
91a1c63
delete and dispatch SmallCard
AntoineChambert-Loir Mar 20, 2026
d12f330
pull back stuff for Perm of card le 2
AntoineChambert-Loir Mar 20, 2026
d70a1cf
add API suggested by TB and golf
AntoineChambert-Loir Mar 20, 2026
b863978
merge master
AntoineChambert-Loir Mar 24, 2026
c9e66c3
adjust notation after review
AntoineChambert-Loir Mar 24, 2026
0665045
restore changed variables
AntoineChambert-Loir Mar 24, 2026
f4a24e2
restore changed variables
AntoineChambert-Loir Mar 24, 2026
b1f1787
Merge branch 'master' into J-Simplicity
AntoineChambert-Loir Apr 3, 2026
a8b58bb
adjust merge
AntoineChambert-Loir Apr 7, 2026
2d49132
is blocked
AntoineChambert-Loir Apr 7, 2026
c8da50c
add instance to solve new problem
AntoineChambert-Loir Apr 7, 2026
ef7a7cf
Merge branch 'master' into J-Simplicity
AntoineChambert-Loir Apr 7, 2026
b3b702f
Merge branch 'master' into J-Simplicity
AntoineChambert-Loir Apr 11, 2026
1f6da86
more adjustments
AntoineChambert-Loir Apr 12, 2026
e044fac
Merge branch 'master' into J-Simplicity
AntoineChambert-Loir Apr 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Mathlib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -4683,6 +4683,7 @@ public import Mathlib.GroupTheory.SpecificGroups.Alternating
public import Mathlib.GroupTheory.SpecificGroups.Alternating.Centralizer
public import Mathlib.GroupTheory.SpecificGroups.Alternating.KleinFour
public import Mathlib.GroupTheory.SpecificGroups.Alternating.MaximalSubgroups
public import Mathlib.GroupTheory.SpecificGroups.Alternating.Simple
public import Mathlib.GroupTheory.SpecificGroups.Cyclic
public import Mathlib.GroupTheory.SpecificGroups.Cyclic.Basic
public import Mathlib.GroupTheory.SpecificGroups.Dihedral
Expand Down
4 changes: 4 additions & 0 deletions Mathlib/Algebra/Group/Subgroup/Map.lean
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,10 @@ theorem subgroupOf_eq_top {H K : Subgroup G} : H.subgroupOf K = ⊤ ↔ K ≤ H

variable (H : Subgroup G)

@[to_additive]
instance [IsMulCommutative G] : IsMulCommutative H :=
IsMulCommutative.of_setLike_mul_comm fun a _ b _ ↦ mul_comm' a b

@[to_additive]
instance map_isMulCommutative (f : G →* G') [IsMulCommutative H] : IsMulCommutative (H.map f) := by
refine .of_setLike_mul_comm ?_
Expand Down
2 changes: 1 addition & 1 deletion Mathlib/FieldTheory/Galois/Profinite.lean
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ lemma isOpen_mulEquivToLimit_image_fixingSubgroup [IsGalois k K]
exact (isOpen_induced <| (continuous_apply (op L)).isOpen_preimage {1} trivial)
ext x
obtain ⟨σ, rfl⟩ := (mulEquivToLimit k K).surjective x
simpa using FiniteGaloisIntermediateField.mem_fixingSubgroup_iff _ _
simpa using FiniteGaloisIntermediateField.mem_fixingSubgroup_iff σ L

set_option backward.isDefEq.respectTransparency false in
lemma mulEquivToLimit_symm_continuous [IsGalois k K] : Continuous (mulEquivToLimit k K).symm := by
Expand Down
2 changes: 1 addition & 1 deletion Mathlib/GroupTheory/GroupAction/MultipleTransitivity.lean
Original file line number Diff line number Diff line change
Expand Up @@ -532,7 +532,7 @@ variable (α) in
theorem isMultiplyPretransitive (n : ℕ) :
IsMultiplyPretransitive (Perm α) α n := by
rw [isMultiplyPretransitive_iff]
exact fun x y => exists_smul_eq_embedding x y
exact exists_smul_eq_embedding

/-- The action of the permutation group of `α` on `α` is preprimitive -/
instance : IsPreprimitive (Perm α) α :=
Expand Down
18 changes: 18 additions & 0 deletions Mathlib/GroupTheory/GroupAction/SubMulAction/Combination.lean
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,24 @@ theorem mulActionHom_compl_bijective :

end compl

variable {G} in
set_option backward.isDefEq.respectTransparency false in
theorem fixedPoints_ne_univ_of_faithfulSMul
[Nontrivial G] [FaithfulSMul G α]
(n : ℕ) (hn : 0 < n) (hn' : n < Nat.card α) :
fixedPoints G (Set.powersetCard α n) ≠ _root_.Set.univ := by
have : Finite α := Nat.finite_of_card_ne_zero (Nat.ne_zero_of_lt hn')
obtain ⟨g, h⟩ := exists_ne (1 : G)
contrapose! h
replace h : (toPerm g : Perm (Set.powersetCard α n)) = 1 := by
ext1 s
exact Set.eq_univ_iff_forall.mp h s g
rwa [← toPermHom_apply, map_eq_one_iff] at h
have := Set.powersetCard.faithfulSMul (G := G) (α := α) (n := n) ?_ ?_
· exact MulAction.toPerm_injective
· exact hn
· rwa [ENat.card_eq_coe_natCard, Nat.cast_lt]

variable (α)

/-- The obvious map from a type to its 1-combinations, as an equivariant map. -/
Expand Down
67 changes: 61 additions & 6 deletions Mathlib/GroupTheory/SpecificGroups/Alternating.lean
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public import Mathlib.Data.Fintype.Units
public import Mathlib.GroupTheory.IndexNormal
public import Mathlib.GroupTheory.Perm.ConjAct
public import Mathlib.GroupTheory.Perm.Fin
public import Mathlib.GroupTheory.SpecificGroups.Cyclic
public import Mathlib.GroupTheory.Subgroup.Simple
public import Mathlib.Tactic.IntervalCases

Expand Down Expand Up @@ -143,6 +144,47 @@ theorem nat_card_alternatingGroup [Nontrivial α] :

namespace alternatingGroup

theorem isCyclic_of_card_le_three (hα : Nat.card α ≤ 3) :
IsCyclic (alternatingGroup α) := by
cases subsingleton_or_nontrivial α
· infer_instance
have : 1 < Nat.card α := Finite.one_lt_card
apply isCyclic_of_card_dvd_prime (p := 3)
rw [nat_card_alternatingGroup]
interval_cases (Nat.card α) <;> simp [Nat.factorial_succ]

theorem isMulCommutative_of_card_le_three (hα : Nat.card α ≤ 3) :
IsMulCommutative (alternatingGroup α) :=
(isCyclic_of_card_le_three hα).isMulCommutative

theorem isMulCommutative_iff_card_le_three :
IsMulCommutative (alternatingGroup α) ↔ Nat.card α ≤ 3 := by
refine ⟨fun ⟨⟨H⟩⟩ ↦ ?_, fun h ↦ (isCyclic_of_card_le_three h).isMulCommutative⟩
rw [← not_lt, ← Set.ncard_univ, Set.three_lt_ncard_iff]
push Not
intro a b c d _ _ _ _ hab hac had hbc hbd
by_contra hcd
apply Ne.symm hcd
let g : alternatingGroup α := ⟨swap a b * swap a c, by
rw [mem_alternatingGroup]
exact (isThreeCycle_swap_mul_swap_same hab hac hbc).sign⟩
let h : alternatingGroup α := ⟨swap a b * swap a d, by
rw [mem_alternatingGroup]
exact (isThreeCycle_swap_mul_swap_same hab had hbd).sign⟩
specialize H g h
simp only [MulMemClass.mk_mul_mk, Subtype.mk.injEq, Perm.ext_iff, Perm.coe_mul,
Function.comp_apply, EmbeddingLike.apply_eq_iff_eq, g, h] at H
simpa only [swap_apply_left,
swap_apply_of_ne_of_ne (Ne.symm had) (Ne.symm hbd),
swap_apply_of_ne_of_ne (Ne.symm hac) (Ne.symm hbc),
swap_apply_of_ne_of_ne (Ne.symm hac) hcd,
swap_apply_of_ne_of_ne (Ne.symm had) (Ne.symm hcd)] using H a

theorem isCyclic_iff_card_le_three :
IsCyclic (alternatingGroup α) ↔ Nat.card α ≤ 3 :=
⟨fun _ ↦ by rw [← isMulCommutative_iff_card_le_three]; exact IsCyclic.isMulCommutative,
isCyclic_of_card_le_three⟩

open Equiv.Perm

instance normal : (alternatingGroup α).Normal :=
Expand Down Expand Up @@ -171,9 +213,10 @@ theorem isConj_of {σ τ : alternatingGroup α} (hc : IsConj (σ : Perm α) (τ
exact ⟨Finset.mem_compl.1 ha, Finset.mem_compl.1 hb⟩
simp [mul_assoc, hd.commute.eq]

theorem isThreeCycle_isConj (h5 : 5 ≤ Fintype.card α) {σ τ : alternatingGroup α}
(hσ : IsThreeCycle (σ : Perm α)) (hτ : IsThreeCycle (τ : Perm α)) : IsConj σ τ :=
alternatingGroup.isConj_of (isConj_iff_cycleType_eq.2 (hσ.trans hτ.symm))
theorem isThreeCycle_isConj (h5 : 5 ≤ Nat.card α) {σ τ : alternatingGroup α}
(hσ : IsThreeCycle (σ : Perm α)) (hτ : IsThreeCycle (τ : Perm α)) : IsConj σ τ := by
simp only [Nat.card_eq_fintype_card] at h5
exact alternatingGroup.isConj_of (isConj_iff_cycleType_eq.2 (hσ.trans hτ.symm))
(by rwa [hσ.card_support])

end alternatingGroup
Expand Down Expand Up @@ -257,7 +300,7 @@ theorem _root_.alternatingGroup.closure_cycleType_eq_two_two_eq_top (h5 : 5 ≤

/-- A key lemma to prove $A_5$ is simple. Shows that any normal subgroup of an alternating group on
at least 5 elements is the entire alternating group if it contains a 3-cycle. -/
theorem IsThreeCycle.alternating_normalClosure (h5 : 5 ≤ Fintype.card α) {f : Perm α}
theorem IsThreeCycle.alternating_normalClosure (h5 : 5 ≤ Nat.card α) {f : Perm α}
(hf : IsThreeCycle f) :
normalClosure ({⟨f, hf.mem_alternatingGroup⟩} : Set (alternatingGroup α)) = ⊤ := by
rw [eq_top_iff, ← map_subtype_le_map_subtype, ← MonoidHom.range_eq_map, range_subtype,
Expand Down Expand Up @@ -319,7 +362,7 @@ theorem normalClosure_finRotate_five : normalClosure ({⟨finRotate 5,
have h3 :
IsThreeCycle (Fin.cycleRange 2 * finRotate 5 * (Fin.cycleRange 2)⁻¹ * (finRotate 5)⁻¹) :=
card_support_eq_three_iff.1 (by decide)
rw [← h3.alternating_normalClosure (by rw [card_fin])]
rw [← h3.alternating_normalClosure (by rw [Nat.card_eq_fintype_card, card_fin])]
refine normalClosure_le_normal ?_
rw [Set.singleton_subset_iff, SetLike.mem_coe]
have h :
Expand Down Expand Up @@ -415,7 +458,7 @@ instance isSimpleGroup_five : IsSimpleGroup (alternatingGroup (Fin 5)) :=
-- If `n = 3`, then `g` has a 3-cycle in its decomposition, so `g^2` is a 3-cycle.
-- `g^2` is in the normal closure of `g`, so that normal closure must be $A_5$.
· rw [eq_top_iff, ← (isThreeCycle_sq_of_three_mem_cycleType_five ng).alternating_normalClosure
(by rw [card_fin])]
(by rw [Nat.card_eq_fintype_card, card_fin])]
refine normalClosure_le_normal ?_
rw [Set.singleton_subset_iff, SetLike.mem_coe]
have h := SetLike.mem_coe.1 (subset_normalClosure
Expand Down Expand Up @@ -473,6 +516,18 @@ def ofSubtype (s : Finset α) : alternatingGroup s →* alternatingGroup α wher
map_mul' := by simp
map_one' := by simp

theorem ofSubtype_injective {s : Finset α} : Function.Injective (ofSubtype s) := by
rw [← Function.Injective.of_comp_iff (alternatingGroup α).subtype_injective]
exact Perm.ofSubtype_injective.comp (alternatingGroup s).subtype_injective

theorem ofSubtype_inj {s : Finset α} {g h : alternatingGroup s} :
ofSubtype s g = ofSubtype s h ↔ g = h :=
ofSubtype_injective.eq_iff

theorem coe_ofSubtype (s : Finset α) (k : alternatingGroup s) :
(ofSubtype s k : Equiv.Perm α) = Equiv.Perm.ofSubtype k.1 := by
rfl

theorem map_ofSubtype (s : Finset α) :
(alternatingGroup s).map (Perm.ofSubtype : Perm s →* Perm α) =
(Perm.ofSubtype : Perm s →* Perm α).range ⊓ (alternatingGroup α) := by
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ theorem centralizer_le_alternating_iff :

namespace IsThreeCycle

variable (h5 : 5 ≤ Fintype.card α) {g : alternatingGroup α} (hg : IsThreeCycle (g : Perm α))
variable (h5 : 5 ≤ Nat.card α) {g : alternatingGroup α} (hg : IsThreeCycle (g : Perm α))

include h5 hg

Expand Down Expand Up @@ -276,7 +276,7 @@ theorem alternatingGroup.commutator_perm_le :
simp [map_commutatorElement, commutatorElement_eq_one_iff_commute, Commute.all]

/-- If `n ≥ 5`, then the alternating group on `n` letters is perfect -/
theorem commutator_alternatingGroup_eq_top (h5 : 5 ≤ Fintype.card α) :
theorem commutator_alternatingGroup_eq_top (h5 : 5 ≤ Nat.card α) :
commutator (alternatingGroup α) = ⊤ := by
suffices closure {b : alternatingGroup α | (b : Perm α).IsThreeCycle} = ⊤ by
rw [eq_top_iff, ← this, Subgroup.closure_le]
Expand All @@ -286,13 +286,13 @@ theorem commutator_alternatingGroup_eq_top (h5 : 5 ≤ Fintype.card α) :
exact Subgroup.closure_closure_coe_preimage

/-- If `n ≥ 5`, then the alternating group on `n` letters is perfect (subgroup version) -/
theorem commutator_alternatingGroup_eq_self (h5 : 5 ≤ Fintype.card α) :
theorem commutator_alternatingGroup_eq_self (h5 : 5 ≤ Nat.card α) :
⁅alternatingGroup α, alternatingGroup α⁆ = alternatingGroup α := by
rw [← Subgroup.map_subtype_commutator, commutator_alternatingGroup_eq_top h5,
← MonoidHom.range_eq_map, Subgroup.range_subtype]

/-- The commutator subgroup of the permutation group is the alternating group -/
theorem alternatingGroup.commutator_perm_eq (h5 : 5 ≤ Fintype.card α) :
theorem alternatingGroup.commutator_perm_eq (h5 : 5 ≤ Nat.card α) :
commutator (Perm α) = alternatingGroup α := by
apply le_antisymm alternatingGroup.commutator_perm_le
rw [← commutator_alternatingGroup_eq_self h5]
Expand Down
Loading
Loading