@@ -101,31 +101,45 @@ section Solvable
101101
102102variable (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]
107109class 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
114122theorem 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
120131theorem 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
126140variable {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
160183variable (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+
171198theorem 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+
177207theorem 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+
196231end Solvable
197232
198233section 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
225260section 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
254298end PermNotSolvable
0 commit comments