Skip to content

Commit 7ffc1c2

Browse files
committed
chore(GroupTheory): rename IsSolvable to Group.IsSolvable (leanprover-community#41820)
Renames `IsSolvable` to `Group.IsSolvable`.
1 parent 8449c32 commit 7ffc1c2

7 files changed

Lines changed: 112 additions & 67 deletions

File tree

Archive/Wiedijk100Theorems/AbelRuffini.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ theorem not_solvable_by_rad (p : ℕ) (x : ℂ) (hx : aeval x (Φ ℚ a b) = 0)
155155
have h_irred := irreducible_Phi a b p hp hpa hpb hp2b
156156
apply mt (isSolvable_gal_of_irreducible · h_irred hx)
157157
intro h
158-
refine Equiv.Perm.not_solvable _ (le_of_eq ?_)
159-
(solvable_of_surjective (gal_Phi a b hab h_irred).2)
158+
refine Equiv.Perm.not_isSolvable _ (le_of_eq ?_)
159+
(Group.isSolvable_of_surjective (gal_Phi a b hab h_irred).2)
160160
rw_mod_cast [Cardinal.mk_fintype, complex_roots_Phi a b h_irred.separable]
161161

162162
theorem not_solvable_by_rad' (x : ℂ) (hx : aeval x (Φ ℚ 4 2) = 0) : x ∉ solvableByRad ℚ ℂ := by

Mathlib/FieldTheory/AbelRuffini.lean

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,59 +30,60 @@ open Polynomial
3030

3131
variable {F E : Type*} [Field F] [Field E] [Algebra F E]
3232

33-
theorem gal_zero_isSolvable : IsSolvable (0 : F[X]).Gal := by infer_instance
33+
theorem gal_zero_isSolvable : Group.IsSolvable (0 : F[X]).Gal := by infer_instance
3434

35-
theorem gal_one_isSolvable : IsSolvable (1 : F[X]).Gal := by infer_instance
35+
theorem gal_one_isSolvable : Group.IsSolvable (1 : F[X]).Gal := by infer_instance
3636

37-
theorem gal_C_isSolvable (x : F) : IsSolvable (C x).Gal := by infer_instance
37+
theorem gal_C_isSolvable (x : F) : Group.IsSolvable (C x).Gal := by infer_instance
3838

39-
theorem gal_X_isSolvable : IsSolvable (X : F[X]).Gal := by infer_instance
39+
theorem gal_X_isSolvable : Group.IsSolvable (X : F[X]).Gal := by infer_instance
4040

41-
theorem gal_X_sub_C_isSolvable (x : F) : IsSolvable (X - C x).Gal := by infer_instance
41+
theorem gal_X_sub_C_isSolvable (x : F) : Group.IsSolvable (X - C x).Gal := by infer_instance
4242

43-
theorem gal_X_pow_isSolvable (n : ℕ) : IsSolvable (X ^ n : F[X]).Gal := by infer_instance
43+
theorem gal_X_pow_isSolvable (n : ℕ) : Group.IsSolvable (X ^ n : F[X]).Gal := by infer_instance
4444

45-
theorem gal_mul_isSolvable {p q : F[X]} (_ : IsSolvable p.Gal) (_ : IsSolvable q.Gal) :
46-
IsSolvable (p * q).Gal :=
47-
solvable_of_solvable_injective (Gal.restrictProd_injective p q)
45+
theorem gal_mul_isSolvable {p q : F[X]} (_ : Group.IsSolvable p.Gal) (_ : Group.IsSolvable q.Gal) :
46+
Group.IsSolvable (p * q).Gal :=
47+
Group.isSolvable_of_isSolvable_injective (Gal.restrictProd_injective p q)
4848

49-
theorem gal_prod_isSolvable {s : Multiset F[X]} (hs : ∀ p ∈ s, IsSolvable (Gal p)) :
50-
IsSolvable s.prod.Gal := by
49+
theorem gal_prod_isSolvable {s : Multiset F[X]} (hs : ∀ p ∈ s, Group.IsSolvable (Gal p)) :
50+
Group.IsSolvable s.prod.Gal := by
5151
apply Multiset.induction_on' s
5252
· exact gal_one_isSolvable
5353
· intro p t hps _ ht
5454
rw [Multiset.insert_eq_cons, Multiset.prod_cons]
5555
exact gal_mul_isSolvable (hs p hps) ht
5656

5757
theorem gal_isSolvable_of_splits {p q : F[X]}
58-
(_ : Fact ((p.map (algebraMap F q.SplittingField)).Splits)) (hq : IsSolvable q.Gal) :
59-
IsSolvable p.Gal :=
60-
haveI : IsSolvable (q.SplittingField ≃ₐ[F] q.SplittingField) := hq
61-
solvable_of_surjective (AlgEquiv.restrictNormalHom_surjective q.SplittingField)
58+
(_ : Fact ((p.map (algebraMap F q.SplittingField)).Splits)) (hq : Group.IsSolvable q.Gal) :
59+
Group.IsSolvable p.Gal :=
60+
haveI : Group.IsSolvable (q.SplittingField ≃ₐ[F] q.SplittingField) := hq
61+
Group.isSolvable_of_surjective (AlgEquiv.restrictNormalHom_surjective q.SplittingField)
6262

6363
theorem gal_isSolvable_tower (p q : F[X]) (hpq : (p.map (algebraMap F q.SplittingField)).Splits)
64-
(hp : IsSolvable p.Gal) (hq : IsSolvable (q.map (algebraMap F p.SplittingField)).Gal) :
65-
IsSolvable q.Gal := by
64+
(hp : Group.IsSolvable p.Gal)
65+
(hq : Group.IsSolvable (q.map (algebraMap F p.SplittingField)).Gal) :
66+
Group.IsSolvable q.Gal := by
6667
let K := p.SplittingField
6768
let L := q.SplittingField
6869
have : Fact ((p.map (algebraMap F L)).Splits) := ⟨hpq⟩
6970
let ϕ : Gal(L/K) ≃* (q.map (algebraMap F K)).Gal :=
7071
(IsSplittingField.algEquiv L (q.map (algebraMap F K))).autCongr
7172
have ϕ_inj : Function.Injective ϕ.toMonoidHom := ϕ.injective
72-
have : IsSolvable Gal(K/F) := hp
73-
have : IsSolvable Gal(L/K) := solvable_of_solvable_injective ϕ_inj
73+
have : Group.IsSolvable Gal(K/F) := hp
74+
have : Group.IsSolvable Gal(L/K) := Group.isSolvable_of_isSolvable_injective ϕ_inj
7475
exact isSolvable_of_isScalarTower F p.SplittingField q.SplittingField
7576

7677
section GalXPowSubC
7778

7879
set_option backward.isDefEq.respectTransparency false in
79-
theorem gal_X_pow_sub_one_isSolvable (n : ℕ) : IsSolvable (X ^ n - 1 : F[X]).Gal := by
80+
theorem gal_X_pow_sub_one_isSolvable (n : ℕ) : Group.IsSolvable (X ^ n - 1 : F[X]).Gal := by
8081
by_cases hn : n = 0
8182
· rw [hn, pow_zero, sub_self]
8283
exact gal_zero_isSolvable
8384
have hn' : 0 < n := pos_iff_ne_zero.mpr hn
8485
have hn'' : (X ^ n - 1 : F[X]) ≠ 0 := X_pow_sub_C_ne_zero hn' 1
85-
apply isSolvable_of_comm
86+
apply Group.isSolvable_of_comm
8687
intro σ τ
8788
ext a ha
8889
simp only [mem_rootSet_of_ne hn'', map_sub, aeval_X_pow, aeval_one, sub_eq_zero] at ha
@@ -96,7 +97,7 @@ theorem gal_X_pow_sub_one_isSolvable (n : ℕ) : IsSolvable (X ^ n - 1 : F[X]).G
9697

9798
set_option backward.isDefEq.respectTransparency false in
9899
theorem gal_X_pow_sub_C_isSolvable_aux (n : ℕ) (a : F)
99-
(h : ((X ^ n - 1 : F[X]).map (RingHom.id F)).Splits) : IsSolvable (X ^ n - C a).Gal := by
100+
(h : ((X ^ n - 1 : F[X]).map (RingHom.id F)).Splits) : Group.IsSolvable (X ^ n - C a).Gal := by
100101
by_cases ha : a = 0
101102
· rw [ha, C_0, sub_zero]
102103
exact gal_X_pow_isSolvable n
@@ -114,7 +115,7 @@ theorem gal_X_pow_sub_C_isSolvable_aux (n : ℕ) (a : F)
114115
(Splits.degree_eq_one_of_irreducible (h.of_dvd (map_ne_zero hn''')
115116
(minpoly.dvd F c (by rwa [map_id, map_sub, sub_eq_zero, aeval_X_pow, aeval_one])))
116117
(minpoly.irreducible ((SplittingField.instNormal (X ^ n - C a)).isIntegral c))))
117-
apply isSolvable_of_comm
118+
apply Group.isSolvable_of_comm
118119
intro σ τ
119120
ext b hb
120121
rw [mem_rootSet_of_ne hn'', map_sub, aeval_X_pow, aeval_C, sub_eq_zero] at hb
@@ -172,7 +173,7 @@ theorem splits_X_pow_sub_one_of_X_pow_sub_C {F : Type*} [Field F] {E : Type*} [F
172173
hs', ← C_pow, hb, ← mul_assoc, C_mul_C, one_mul]
173174
rfl
174175

175-
theorem gal_X_pow_sub_C_isSolvable (n : ℕ) (x : F) : IsSolvable (X ^ n - C x).Gal := by
176+
theorem gal_X_pow_sub_C_isSolvable (n : ℕ) (x : F) : Group.IsSolvable (X ^ n - C x).Gal := by
176177
by_cases hx : x = 0
177178
· rw [hx, C_0, sub_zero]
178179
exact gal_X_pow_isSolvable n
@@ -259,7 +260,7 @@ protected theorem solvableByRad.induction (motive : ∀ x, x ∈ solvableByRad F
259260
exact h
260261

261262
private theorem induction_rad {x : E} (hx : x ∈ solvableByRad F E) {n : ℕ} (hn : n ≠ 0)
262-
(hα : IsSolvable (minpoly F (x ^ n)).Gal) : IsSolvable (minpoly F x).Gal := by
263+
(hα : Group.IsSolvable (minpoly F (x ^ n)).Gal) : Group.IsSolvable (minpoly F x).Gal := by
263264
let p := minpoly F (x ^ n)
264265
have hp : p.comp (X ^ n) ≠ 0 := by
265266
intro h
@@ -288,8 +289,8 @@ open IntermediateField
288289

289290
private theorem induction_step {x y z : E}
290291
(hx : x ∈ solvableByRad F E) (hy : y ∈ solvableByRad F E) (hz : z ∈ solvableByRad F E)
291-
(hx' : IsSolvable (minpoly F x).Gal) (hy' : IsSolvable (minpoly F y).Gal) (hz' : z ∈ F⟮x, y⟯) :
292-
IsSolvable (minpoly F z).Gal := by
292+
(hx' : Group.IsSolvable (minpoly F x).Gal) (hy' : Group.IsSolvable (minpoly F y).Gal)
293+
(hz' : z ∈ F⟮x, y⟯) : Group.IsSolvable (minpoly F z).Gal := by
293294
let p := minpoly F x
294295
let q := minpoly F y
295296
have hpq := SplittingField.splits (p * q)
@@ -313,7 +314,7 @@ private theorem induction_step {x y z : E}
313314
infer_instance
314315

315316
theorem isSolvable_gal_minpoly {x : E} (hx : x ∈ solvableByRad F E) :
316-
IsSolvable (minpoly F x).Gal := by
317+
Group.IsSolvable (minpoly F x).Gal := by
317318
induction hx using solvableByRad.induction with
318319
| mem y => rw [minpoly.eq_X_sub_C E]; infer_instance
319320
| add y z hy hz hy' hz' =>
@@ -328,11 +329,11 @@ alias solvableByRad.isSolvable := isSolvable_gal_minpoly
328329
/-- **Abel-Ruffini Theorem** (one direction): An irreducible polynomial with a `solvableByRad` root
329330
has a solvable Galois group. -/
330331
theorem isSolvable_gal_of_irreducible {x : E} (hx : x ∈ solvableByRad F E) {q : F[X]}
331-
(q_irred : Irreducible q) (q_aeval : aeval x q = 0) : IsSolvable q.Gal := by
332-
have : IsSolvable (q * C q.leadingCoeff⁻¹).Gal := by
332+
(q_irred : Irreducible q) (q_aeval : aeval x q = 0) : Group.IsSolvable q.Gal := by
333+
have : Group.IsSolvable (q * C q.leadingCoeff⁻¹).Gal := by
333334
rw [minpoly.eq_of_irreducible q_irred q_aeval]
334335
exact isSolvable_gal_minpoly hx
335-
refine solvable_of_surjective (Gal.restrictDvd_surjective ⟨C q.leadingCoeff⁻¹, rfl⟩ ?_)
336+
refine Group.isSolvable_of_surjective (Gal.restrictDvd_surjective ⟨C q.leadingCoeff⁻¹, rfl⟩ ?_)
336337
aesop
337338

338339
@[deprecated (since := "2026-02-28")]

Mathlib/FieldTheory/Normal/Basic.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,16 +243,16 @@ theorem Normal.minpoly_eq_iff_mem_orbit [h : Normal F E] {x y : E} :
243243

244244
variable (F K₁)
245245

246-
theorem isSolvable_of_isScalarTower [Normal F K₁] [h1 : IsSolvable (K₁ ≃ₐ[F] K₁)]
247-
[h2 : IsSolvable (E ≃ₐ[K₁] E)] : IsSolvable Gal(E/F) := by
246+
theorem isSolvable_of_isScalarTower [Normal F K₁] [h1 : Group.IsSolvable (K₁ ≃ₐ[F] K₁)]
247+
[h2 : Group.IsSolvable (E ≃ₐ[K₁] E)] : Group.IsSolvable Gal(E/F) := by
248248
let f : (E ≃ₐ[K₁] E) →* Gal(E/F) :=
249249
{ toFun := fun ϕ =>
250250
AlgEquiv.ofAlgHom (ϕ.toAlgHom.restrictScalars F) (ϕ.symm.toAlgHom.restrictScalars F)
251251
(AlgHom.ext fun x => ϕ.apply_symm_apply x) (AlgHom.ext fun x => ϕ.symm_apply_apply x)
252252
map_one' := AlgEquiv.ext fun _ => rfl
253253
map_mul' := fun _ _ => AlgEquiv.ext fun _ => rfl }
254254
refine
255-
solvable_of_ker_le_range f (AlgEquiv.restrictNormalHom K₁) fun ϕ hϕ =>
255+
Group.isSolvable_of_ker_le_range f (AlgEquiv.restrictNormalHom K₁) fun ϕ hϕ =>
256256
⟨{ ϕ with commutes' := fun x => ?_ }, AlgEquiv.ext fun _ => rfl⟩
257257
exact Eq.trans (ϕ.restrictNormal_commutes K₁ x).symm (congr_arg _ (AlgEquiv.ext_iff.mp hϕ x))
258258

Mathlib/GroupTheory/IsPerfect.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ lemma not_isNilpotent [Nontrivial G] [IsPerfect G] : ¬ IsNilpotent G :=
8282
open scoped IsMulCommutative in
8383
variable (G) in
8484
lemma not_isMulCommutative [Nontrivial G] [IsPerfect G] : ¬ IsMulCommutative G :=
85-
fun _ ↦ (not_isSolvable G) CommGroup.isSolvable
85+
fun _ ↦ (not_isSolvable G) inferInstance
8686

8787
instance subsingleton_of_isMulCommutative
8888
[hG : IsPerfect G] [h_comm : IsMulCommutative G] : Subsingleton G := by

Mathlib/GroupTheory/Nilpotent.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,7 @@ theorem Group.nilpotencyClass_pi [Fintype η] [∀ i, IsNilpotent (Gs i)] :
11581158
end FinitePi
11591159

11601160
/-- A nilpotent subgroup is solvable -/
1161-
instance (priority := 100) IsNilpotent.to_isSolvable [h : IsNilpotent G] : IsSolvable G := by
1161+
instance (priority := 100) IsNilpotent.to_isSolvable [h : IsNilpotent G] : Group.IsSolvable G := by
11621162
obtain ⟨n, hn⟩ := nilpotent_iff_lowerCentralSeries.1 h
11631163
use n
11641164
rw [eq_bot_iff, ← hn]

Mathlib/GroupTheory/Solvable.lean

Lines changed: 70 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -101,31 +101,45 @@ section Solvable
101101

102102
variable (G)
103103

104+
namespace Group
105+
104106
/-- A group `G` is solvable if its derived series is eventually trivial. We use this definition
105107
because it's the most convenient one to work with. -/
106108
@[mk_iff isSolvable_def, wikidata Q759832]
107109
class IsSolvable : Prop where
108110
/-- A group `G` is solvable if its derived series is eventually trivial. -/
109111
solvable : ∃ n : ℕ, derivedSeries G n = ⊥
110112

111-
instance (priority := 100) CommGroup.isSolvable {G : Type*} [CommGroup G] : IsSolvable G :=
113+
@[deprecated (since := "2026-07-16")]
114+
alias _root_.IsSolvable := Group.IsSolvable
115+
116+
@[deprecated (since := "2026-07-17")]
117+
alias _root_.isSolvable_def := Group.isSolvable_def
118+
119+
instance (priority := 100) {G : Type*} [CommGroup G] : IsSolvable G :=
112120
⟨⟨1, le_bot_iff.mp (Abelianization.commutator_subset_ker (MonoidHom.id G))⟩⟩
113121

114122
theorem isSolvable_of_comm {G : Type*} [hG : Group G] (h : ∀ a b : G, a * b = b * a) :
115123
IsSolvable G := by
116124
let hG' : CommGroup G := { hG with mul_comm := h }
117125
cases hG
118-
exact CommGroup.isSolvable
126+
infer_instance
127+
128+
@[deprecated (since := "2026-07-16")]
129+
alias _root_.isSolvable_of_comm := Group.isSolvable_of_comm
119130

120131
theorem isSolvable_of_top_eq_bot (h : (⊤ : Subgroup G) = ⊥) : IsSolvable G :=
121132
⟨⟨0, h⟩⟩
122133

123-
instance (priority := 100) isSolvable_of_subsingleton [Subsingleton G] : IsSolvable G :=
134+
@[deprecated (since := "2026-07-16")]
135+
alias _root_.isSolvable_of_top_eq_bot := Group.isSolvable_of_top_eq_bot
136+
137+
instance (priority := 100) [Subsingleton G] : IsSolvable G :=
124138
isSolvable_of_top_eq_bot G (by simp [eq_iff_true_of_subsingleton])
125139

126140
variable {G}
127141

128-
theorem solvable_of_ker_le_range {G' G'' : Type*} [Group G'] [Group G''] (f : G' →* G)
142+
theorem isSolvable_of_ker_le_range {G' G'' : Type*} [Group G'] [Group G''] (f : G' →* G)
129143
(g : G →* G'') (hfg : g.ker ≤ f.range) [hG' : IsSolvable G'] [hG'' : IsSolvable G''] :
130144
IsSolvable G := by
131145
obtain ⟨n, hn⟩ := id hG''
@@ -138,23 +152,32 @@ theorem solvable_of_ker_le_range {G' G'' : Type*} [Group G'] [Group G''] (f : G'
138152
(le_bot_iff.mp ((map_derivedSeries_le_derivedSeries g n).trans hn.le))).trans hfg
139153
| succ m hm => exact commutator_le_map_commutator hm hm
140154

141-
theorem solvable_of_solvable_injective (hf : Function.Injective f) [IsSolvable G'] :
155+
@[deprecated (since := "2026-07-16")]
156+
alias _root_.solvable_of_ker_le_range := isSolvable_of_ker_le_range
157+
158+
theorem isSolvable_of_isSolvable_injective (hf : Function.Injective f) [IsSolvable G'] :
142159
IsSolvable G :=
143-
solvable_of_ker_le_range (1 : G' →* G) f ((f.ker_eq_bot hf).symm ▸ bot_le)
160+
isSolvable_of_ker_le_range (1 : G' →* G) f ((f.ker_eq_bot hf).symm ▸ bot_le)
161+
162+
@[deprecated (since := "2026-07-16")]
163+
alias _root_.solvable_of_solvable_injective := isSolvable_of_isSolvable_injective
164+
165+
instance (H : Subgroup G) [IsSolvable G] : IsSolvable H :=
166+
isSolvable_of_isSolvable_injective H.subtype_injective
144167

145-
instance subgroup_solvable_of_solvable (H : Subgroup G) [IsSolvable G] : IsSolvable H :=
146-
solvable_of_solvable_injective H.subtype_injective
168+
theorem isSolvable_of_surjective (hf : Function.Surjective f) [IsSolvable G] : IsSolvable G' :=
169+
isSolvable_of_ker_le_range f (1 : G' →* G) (f.range_eq_top_of_surjective hf ▸ le_top)
147170

148-
theorem solvable_of_surjective (hf : Function.Surjective f) [IsSolvable G] : IsSolvable G' :=
149-
solvable_of_ker_le_range f (1 : G' →* G) (f.range_eq_top_of_surjective hf ▸ le_top)
171+
@[deprecated (since := "2026-07-16")]
172+
alias _root_.solvable_of_surjective := isSolvable_of_surjective
150173

151-
instance solvable_quotient_of_solvable (H : Subgroup G) [H.Normal] [IsSolvable G] :
174+
instance (H : Subgroup G) [H.Normal] [IsSolvable G] :
152175
IsSolvable (G ⧸ H) :=
153-
solvable_of_surjective (QuotientGroup.mk'_surjective H)
176+
isSolvable_of_surjective (QuotientGroup.mk'_surjective H)
154177

155-
instance solvable_prod {G' : Type*} [Group G'] [IsSolvable G] [IsSolvable G'] :
178+
instance {G' : Type*} [Group G'] [IsSolvable G] [IsSolvable G'] :
156179
IsSolvable (G × G') :=
157-
solvable_of_ker_le_range (MonoidHom.inl G G') (MonoidHom.snd G G') fun x hx =>
180+
isSolvable_of_ker_le_range (MonoidHom.inl G G') (MonoidHom.snd G G') fun x hx =>
158181
⟨x.1, Prod.ext rfl hx.symm⟩
159182

160183
variable (G) in
@@ -168,17 +191,24 @@ theorem IsSolvable.commutator_lt_top_of_nontrivial [hG : IsSolvable G] [Nontrivi
168191
| zero => exact derivedSeries_zero G
169192
| succ n h => rwa [derivedSeries_succ, h]
170193

194+
@[deprecated (since := "2026-07-16")]
195+
alias _root_.IsSolvable.commutator_lt_top_of_nontrivial :=
196+
Group.IsSolvable.commutator_lt_top_of_nontrivial
197+
171198
theorem IsSolvable.commutator_lt_of_ne_bot [IsSolvable G] {H : Subgroup G} (hH : H ≠ ⊥) :
172199
⁅H, H⁆ < H := by
173200
rw [← nontrivial_iff_ne_bot] at hH
174201
rw [← H.range_subtype, MonoidHom.range_eq_map, ← map_commutator, map_subtype_lt_map_subtype]
175202
exact commutator_lt_top_of_nontrivial H
176203

204+
@[deprecated (since := "2026-07-16")]
205+
alias _root_.IsSolvable.commutator_lt_of_ne_bot := Group.IsSolvable.commutator_lt_of_ne_bot
206+
177207
theorem isSolvable_iff_commutator_lt [WellFoundedLT (Subgroup G)] :
178208
IsSolvable G ↔ ∀ H : Subgroup G, H ≠ ⊥ → ⁅H, H⁆ < H := by
179209
refine ⟨fun _ _ ↦ IsSolvable.commutator_lt_of_ne_bot, fun h ↦ ?_⟩
180210
suffices h : IsSolvable (⊤ : Subgroup G) from
181-
solvable_of_surjective (MonoidHom.range_eq_top.mp (range_subtype ⊤))
211+
isSolvable_of_surjective (MonoidHom.range_eq_top.mp (range_subtype ⊤))
182212
induction (⊤ : Subgroup G) using WellFoundedLT.induction with | ind H hH
183213
rcases eq_or_ne H ⊥ with rfl | h'
184214
· infer_instance
@@ -193,6 +223,11 @@ theorem isSolvable_iff_commutator_lt [WellFoundedLT (Subgroup G)] :
193223
← MonoidHom.range_eq_map, ← MonoidHom.range_eq_map, range_subtype, range_subtype]
194224
| succ n ih => rw [derivedSeries_succ, map_commutator, ih, derivedSeries_succ, map_commutator]
195225

226+
@[deprecated (since := "2026-07-16")]
227+
alias _root_.isSolvable_iff_commutator_lt := Group.isSolvable_iff_commutator_lt
228+
229+
end Group
230+
196231
end Solvable
197232

198233
section IsSimpleGroup
@@ -208,8 +243,8 @@ theorem IsSimpleGroup.derivedSeries_succ {n : ℕ} : derivedSeries G n.succ = co
208243
· rw [h, commutator_bot_left]
209244
· rwa [h]
210245

211-
theorem IsSimpleGroup.comm_iff_isSolvable : (∀ a b : G, a * b = b * a) ↔ IsSolvable G :=
212-
⟨isSolvable_of_comm, fun ⟨⟨n, hn⟩⟩ => by
246+
theorem IsSimpleGroup.comm_iff_isSolvable : (∀ a b : G, a * b = b * a) ↔ Group.IsSolvable G :=
247+
Group.isSolvable_of_comm, fun ⟨⟨n, hn⟩⟩ => by
213248
cases n
214249
· intro a b
215250
refine (mem_bot.1 ?_).trans (mem_bot.1 ?_).symm <;>
@@ -224,31 +259,40 @@ end IsSimpleGroup
224259

225260
section PermNotSolvable
226261

227-
theorem not_solvable_of_mem_derivedSeries {g : G} (h1 : g ≠ 1)
228-
(h2 : ∀ n : ℕ, g ∈ derivedSeries G n) : ¬IsSolvable G :=
229-
mt (isSolvable_def _).mp
262+
theorem not_isSolvable_of_mem_derivedSeries {g : G} (h1 : g ≠ 1)
263+
(h2 : ∀ n : ℕ, g ∈ derivedSeries G n) : ¬Group.IsSolvable G :=
264+
mt (Group.isSolvable_def _).mp
230265
(not_exists_of_forall_not fun n h =>
231266
h1 (Subgroup.mem_bot.mp ((congr_arg (g ∈ ·) h).mp (h2 n))))
232267

233-
theorem Equiv.Perm.fin_5_not_solvable : ¬IsSolvable (Equiv.Perm (Fin 5)) := by
268+
@[deprecated (since := "2026-07-16")]
269+
alias not_solvable_of_mem_derivedSeries := not_isSolvable_of_mem_derivedSeries
270+
271+
theorem Equiv.Perm.not_isSolvable_fin_5 : ¬Group.IsSolvable (Equiv.Perm (Fin 5)) := by
234272
let x : Equiv.Perm (Fin 5) := ⟨![1, 2, 0, 3, 4], ![2, 0, 1, 3, 4], by decide, by decide⟩
235273
let y : Equiv.Perm (Fin 5) := ⟨![3, 4, 2, 0, 1], ![3, 4, 2, 0, 1], by decide, by decide⟩
236274
let z : Equiv.Perm (Fin 5) := ⟨![0, 3, 2, 1, 4], ![0, 3, 2, 1, 4], by decide, by decide⟩
237275
have key : x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹ := by unfold x y z; decide
238-
refine not_solvable_of_mem_derivedSeries (show x ≠ 1 by decide) fun n => ?_
276+
refine not_isSolvable_of_mem_derivedSeries (show x ≠ 1 by decide) fun n => ?_
239277
induction n with
240278
| zero => exact mem_top x
241279
| succ n ih =>
242280
rw [key, (derivedSeries_normal _ _).mem_comm_iff, inv_mul_cancel_left]
243281
exact commutator_mem_commutator ih ((derivedSeries_normal _ _).conj_mem _ ih _)
244282

245-
theorem Equiv.Perm.not_solvable (X : Type*) (hX : 5 ≤ Cardinal.mk X) :
246-
¬IsSolvable (Equiv.Perm X) := by
283+
@[deprecated (since := "2026-07-16")]
284+
alias Equiv.Perm.fin_5_not_solvable := Equiv.Perm.not_isSolvable_fin_5
285+
286+
theorem Equiv.Perm.not_isSolvable (X : Type*) (hX : 5 ≤ Cardinal.mk X) :
287+
¬Group.IsSolvable (Equiv.Perm X) := by
247288
intro h
248289
have key : Nonempty (Fin 5 ↪ X) := by
249290
rwa [← Cardinal.lift_mk_le, Cardinal.mk_fin, Cardinal.lift_natCast, Cardinal.lift_id]
250291
exact
251-
Equiv.Perm.fin_5_not_solvable
252-
(solvable_of_solvable_injective (Equiv.Perm.viaEmbeddingHom_injective (Nonempty.some key)))
292+
Equiv.Perm.not_isSolvable_fin_5 (Group.isSolvable_of_isSolvable_injective
293+
(Equiv.Perm.viaEmbeddingHom_injective (Nonempty.some key)))
294+
295+
@[deprecated (since := "2026-07-16")]
296+
alias Equiv.Perm.not_solvable := Equiv.Perm.not_isSolvable
253297

254298
end PermNotSolvable

0 commit comments

Comments
 (0)