|
| 1 | +/- |
| 2 | +Copyright (c) 2021 Oliver Nash. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Oliver Nash |
| 5 | +
|
| 6 | +! This file was ported from Lean 3 source module algebra.lie.solvable |
| 7 | +! leanprover-community/mathlib commit a50170a88a47570ed186b809ca754110590f9476 |
| 8 | +! Please do not edit these lines, except to modify the commit id |
| 9 | +! if you have ported upstream changes. |
| 10 | +-/ |
| 11 | +import Mathlib.Algebra.Lie.Abelian |
| 12 | +import Mathlib.Algebra.Lie.IdealOperations |
| 13 | +import Mathlib.Order.Hom.Basic |
| 14 | + |
| 15 | +/-! |
| 16 | +# Solvable Lie algebras |
| 17 | +
|
| 18 | +Like groups, Lie algebras admit a natural concept of solvability. We define this here via the |
| 19 | +derived series and prove some related results. We also define the radical of a Lie algebra and |
| 20 | +prove that it is solvable when the Lie algebra is Noetherian. |
| 21 | +
|
| 22 | +## Main definitions |
| 23 | +
|
| 24 | + * `LieAlgebra.derivedSeriesOfIdeal` |
| 25 | + * `LieAlgebra.derivedSeries` |
| 26 | + * `LieAlgebra.IsSolvable` |
| 27 | + * `LieAlgebra.isSolvableAdd` |
| 28 | + * `LieAlgebra.radical` |
| 29 | + * `LieAlgebra.radicalIsSolvable` |
| 30 | + * `LieAlgebra.derivedLengthOfIdeal` |
| 31 | + * `LieAlgebra.derivedLength` |
| 32 | + * `LieAlgebra.derivedAbelianOfIdeal` |
| 33 | +
|
| 34 | +## Tags |
| 35 | +
|
| 36 | +lie algebra, derived series, derived length, solvable, radical |
| 37 | +-/ |
| 38 | + |
| 39 | + |
| 40 | +universe u v w w₁ w₂ |
| 41 | + |
| 42 | +variable (R : Type u) (L : Type v) (M : Type w) {L' : Type w₁} |
| 43 | + |
| 44 | +variable [CommRing R] [LieRing L] [LieAlgebra R L] [LieRing L'] [LieAlgebra R L'] |
| 45 | + |
| 46 | +variable (I J : LieIdeal R L) {f : L' →ₗ⁅R⁆ L} |
| 47 | + |
| 48 | +namespace LieAlgebra |
| 49 | + |
| 50 | +/-- A generalisation of the derived series of a Lie algebra, whose zeroth term is a specified ideal. |
| 51 | +
|
| 52 | +It can be more convenient to work with this generalisation when considering the derived series of |
| 53 | +an ideal since it provides a type-theoretic expression of the fact that the terms of the ideal's |
| 54 | +derived series are also ideals of the enclosing algebra. |
| 55 | +
|
| 56 | +See also `LieIdeal.derivedSeries_eq_derivedSeriesOfIdeal_comap` and |
| 57 | +`LieIdeal.derivedSeries_eq_derivedSeriesOfIdeal_map` below. -/ |
| 58 | +def derivedSeriesOfIdeal (k : ℕ) : LieIdeal R L → LieIdeal R L := |
| 59 | + (fun I => ⁅I, I⁆)^[k] |
| 60 | +#align lie_algebra.derived_series_of_ideal LieAlgebra.derivedSeriesOfIdeal |
| 61 | + |
| 62 | +@[simp] |
| 63 | +theorem derivedSeriesOfIdeal_zero : derivedSeriesOfIdeal R L 0 I = I := |
| 64 | + rfl |
| 65 | +#align lie_algebra.derived_series_of_ideal_zero LieAlgebra.derivedSeriesOfIdeal_zero |
| 66 | + |
| 67 | +@[simp] |
| 68 | +theorem derivedSeriesOfIdeal_succ (k : ℕ) : |
| 69 | + derivedSeriesOfIdeal R L (k + 1) I = |
| 70 | + ⁅derivedSeriesOfIdeal R L k I, derivedSeriesOfIdeal R L k I⁆ := |
| 71 | + Function.iterate_succ_apply' (fun I => ⁅I, I⁆) k I |
| 72 | +#align lie_algebra.derived_series_of_ideal_succ LieAlgebra.derivedSeriesOfIdeal_succ |
| 73 | + |
| 74 | +/-- The derived series of Lie ideals of a Lie algebra. -/ |
| 75 | +abbrev derivedSeries (k : ℕ) : LieIdeal R L := |
| 76 | + derivedSeriesOfIdeal R L k ⊤ |
| 77 | +#align lie_algebra.derived_series LieAlgebra.derivedSeries |
| 78 | + |
| 79 | +theorem derivedSeries_def (k : ℕ) : derivedSeries R L k = derivedSeriesOfIdeal R L k ⊤ := |
| 80 | + rfl |
| 81 | +#align lie_algebra.derived_series_def LieAlgebra.derivedSeries_def |
| 82 | + |
| 83 | +variable {R L} |
| 84 | + |
| 85 | +local notation "D" => derivedSeriesOfIdeal R L |
| 86 | + |
| 87 | +theorem derivedSeriesOfIdeal_add (k l : ℕ) : D (k + l) I = D k (D l I) := by |
| 88 | + induction' k with k ih |
| 89 | + · rw [Nat.zero_add, derivedSeriesOfIdeal_zero] |
| 90 | + · rw [Nat.succ_add k l, derivedSeriesOfIdeal_succ, derivedSeriesOfIdeal_succ, ih] |
| 91 | +#align lie_algebra.derived_series_of_ideal_add LieAlgebra.derivedSeriesOfIdeal_add |
| 92 | + |
| 93 | +@[mono] |
| 94 | +theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J) (h₂ : l ≤ k) : |
| 95 | + D k I ≤ D l J := by |
| 96 | + revert l; induction' k with k ih <;> intro l h₂ |
| 97 | + · rw [Nat.zero_eq, le_zero_iff] at h₂ ; rw [h₂, derivedSeriesOfIdeal_zero]; exact h₁ |
| 98 | + · have h : l = k.succ ∨ l ≤ k := by rwa [le_iff_eq_or_lt, Nat.lt_succ_iff] at h₂ |
| 99 | + cases' h with h h |
| 100 | + · rw [h, derivedSeriesOfIdeal_succ, derivedSeriesOfIdeal_succ] |
| 101 | + exact LieSubmodule.mono_lie _ _ _ _ (ih (le_refl k)) (ih (le_refl k)) |
| 102 | + · rw [derivedSeriesOfIdeal_succ]; exact le_trans (LieSubmodule.lie_le_left _ _) (ih h) |
| 103 | +#align lie_algebra.derived_series_of_ideal_le LieAlgebra.derivedSeriesOfIdeal_le |
| 104 | + |
| 105 | +theorem derivedSeriesOfIdeal_succ_le (k : ℕ) : D (k + 1) I ≤ D k I := |
| 106 | + derivedSeriesOfIdeal_le (le_refl I) k.le_succ |
| 107 | +#align lie_algebra.derived_series_of_ideal_succ_le LieAlgebra.derivedSeriesOfIdeal_succ_le |
| 108 | + |
| 109 | +theorem derivedSeriesOfIdeal_le_self (k : ℕ) : D k I ≤ I := |
| 110 | + derivedSeriesOfIdeal_le (le_refl I) (zero_le k) |
| 111 | +#align lie_algebra.derived_series_of_ideal_le_self LieAlgebra.derivedSeriesOfIdeal_le_self |
| 112 | + |
| 113 | +theorem derivedSeriesOfIdeal_mono {I J : LieIdeal R L} (h : I ≤ J) (k : ℕ) : D k I ≤ D k J := |
| 114 | + derivedSeriesOfIdeal_le h (le_refl k) |
| 115 | +#align lie_algebra.derived_series_of_ideal_mono LieAlgebra.derivedSeriesOfIdeal_mono |
| 116 | + |
| 117 | +theorem derivedSeriesOfIdeal_antitone {k l : ℕ} (h : l ≤ k) : D k I ≤ D l I := |
| 118 | + derivedSeriesOfIdeal_le (le_refl I) h |
| 119 | +#align lie_algebra.derived_series_of_ideal_antitone LieAlgebra.derivedSeriesOfIdeal_antitone |
| 120 | + |
| 121 | +theorem derivedSeriesOfIdeal_add_le_add (J : LieIdeal R L) (k l : ℕ) : |
| 122 | + D (k + l) (I + J) ≤ D k I + D l J := by |
| 123 | + let D₁ : LieIdeal R L →o LieIdeal R L := |
| 124 | + { toFun := fun I => ⁅I, I⁆ |
| 125 | + monotone' := fun I J h => LieSubmodule.mono_lie I J I J h h } |
| 126 | + have h₁ : ∀ I J : LieIdeal R L, D₁ (I ⊔ J) ≤ D₁ I ⊔ J := by |
| 127 | + simp [LieSubmodule.lie_le_right, LieSubmodule.lie_le_left, le_sup_of_le_right] |
| 128 | + rw [← D₁.iterate_sup_le_sup_iff] at h₁ |
| 129 | + exact h₁ k l I J |
| 130 | +#align lie_algebra.derived_series_of_ideal_add_le_add LieAlgebra.derivedSeriesOfIdeal_add_le_add |
| 131 | + |
| 132 | +theorem derivedSeries_of_bot_eq_bot (k : ℕ) : derivedSeriesOfIdeal R L k ⊥ = ⊥ := by |
| 133 | + rw [eq_bot_iff]; exact derivedSeriesOfIdeal_le_self ⊥ k |
| 134 | +#align lie_algebra.derived_series_of_bot_eq_bot LieAlgebra.derivedSeries_of_bot_eq_bot |
| 135 | + |
| 136 | +theorem abelian_iff_derived_one_eq_bot : IsLieAbelian I ↔ derivedSeriesOfIdeal R L 1 I = ⊥ := by |
| 137 | + rw [derivedSeriesOfIdeal_succ, derivedSeriesOfIdeal_zero, |
| 138 | + LieSubmodule.lie_abelian_iff_lie_self_eq_bot] |
| 139 | +#align lie_algebra.abelian_iff_derived_one_eq_bot LieAlgebra.abelian_iff_derived_one_eq_bot |
| 140 | + |
| 141 | +theorem abelian_iff_derived_succ_eq_bot (I : LieIdeal R L) (k : ℕ) : |
| 142 | + IsLieAbelian (derivedSeriesOfIdeal R L k I) ↔ derivedSeriesOfIdeal R L (k + 1) I = ⊥ := by |
| 143 | + rw [add_comm, derivedSeriesOfIdeal_add I 1 k, abelian_iff_derived_one_eq_bot] |
| 144 | +#align lie_algebra.abelian_iff_derived_succ_eq_bot LieAlgebra.abelian_iff_derived_succ_eq_bot |
| 145 | + |
| 146 | +end LieAlgebra |
| 147 | + |
| 148 | +namespace LieIdeal |
| 149 | + |
| 150 | +open LieAlgebra |
| 151 | + |
| 152 | +variable {R L} |
| 153 | + |
| 154 | +theorem derivedSeries_eq_derivedSeriesOfIdeal_comap (k : ℕ) : |
| 155 | + derivedSeries R I k = (derivedSeriesOfIdeal R L k I).comap I.incl := by |
| 156 | + induction' k with k ih |
| 157 | + · simp only [Nat.zero_eq, derivedSeries_def, comap_incl_self, derivedSeriesOfIdeal_zero] |
| 158 | + · simp only [derivedSeries_def, derivedSeriesOfIdeal_succ] at ih ⊢; rw [ih] |
| 159 | + exact comap_bracket_incl_of_le I |
| 160 | + (derivedSeriesOfIdeal_le_self I k) (derivedSeriesOfIdeal_le_self I k) |
| 161 | +#align lie_ideal.derived_series_eq_derived_series_of_ideal_comap LieIdeal.derivedSeries_eq_derivedSeriesOfIdeal_comap |
| 162 | + |
| 163 | +theorem derivedSeries_eq_derivedSeriesOfIdeal_map (k : ℕ) : |
| 164 | + (derivedSeries R I k).map I.incl = derivedSeriesOfIdeal R L k I := by |
| 165 | + rw [derivedSeries_eq_derivedSeriesOfIdeal_comap, map_comap_incl, inf_eq_right] |
| 166 | + apply derivedSeriesOfIdeal_le_self |
| 167 | +#align lie_ideal.derived_series_eq_derived_series_of_ideal_map LieIdeal.derivedSeries_eq_derivedSeriesOfIdeal_map |
| 168 | + |
| 169 | +theorem derivedSeries_eq_bot_iff (k : ℕ) : |
| 170 | + derivedSeries R I k = ⊥ ↔ derivedSeriesOfIdeal R L k I = ⊥ := by |
| 171 | + rw [← derivedSeries_eq_derivedSeriesOfIdeal_map, map_eq_bot_iff, ker_incl, eq_bot_iff] |
| 172 | +#align lie_ideal.derived_series_eq_bot_iff LieIdeal.derivedSeries_eq_bot_iff |
| 173 | + |
| 174 | +theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedSeries R I k = ⊥) |
| 175 | + (hJ : derivedSeries R J l = ⊥) : derivedSeries R (I + J) (k + l) = ⊥ := by |
| 176 | + rw [LieIdeal.derivedSeries_eq_bot_iff] at hI hJ ⊢ |
| 177 | + rw [← le_bot_iff] |
| 178 | + let D := derivedSeriesOfIdeal R L; change D k I = ⊥ at hI ; change D l J = ⊥ at hJ |
| 179 | + calc |
| 180 | + D (k + l) (I + J) ≤ D k I + D l J := derivedSeriesOfIdeal_add_le_add I J k l |
| 181 | + _ ≤ ⊥ := by rw [hI, hJ]; simp |
| 182 | +#align lie_ideal.derived_series_add_eq_bot LieIdeal.derivedSeries_add_eq_bot |
| 183 | + |
| 184 | +theorem derivedSeries_map_le (k : ℕ) : (derivedSeries R L' k).map f ≤ derivedSeries R L k := by |
| 185 | + induction' k with k ih |
| 186 | + · simp only [Nat.zero_eq, derivedSeries_def, derivedSeriesOfIdeal_zero, le_top] |
| 187 | + · simp only [derivedSeries_def, derivedSeriesOfIdeal_succ] at ih ⊢ |
| 188 | + exact le_trans (map_bracket_le f) (LieSubmodule.mono_lie _ _ _ _ ih ih) |
| 189 | +#align lie_ideal.derived_series_map_le LieIdeal.derivedSeries_map_le |
| 190 | + |
| 191 | +theorem derivedSeries_map_eq (k : ℕ) (h : Function.Surjective f) : |
| 192 | + (derivedSeries R L' k).map f = derivedSeries R L k := by |
| 193 | + induction' k with k ih |
| 194 | + · change (⊤ : LieIdeal R L').map f = ⊤ |
| 195 | + rw [← f.idealRange_eq_map] |
| 196 | + exact f.idealRange_eq_top_of_surjective h |
| 197 | + · simp only [derivedSeries_def, map_bracket_eq f h, ih, derivedSeriesOfIdeal_succ] |
| 198 | +#align lie_ideal.derived_series_map_eq LieIdeal.derivedSeries_map_eq |
| 199 | + |
| 200 | +end LieIdeal |
| 201 | + |
| 202 | +namespace LieAlgebra |
| 203 | + |
| 204 | +/-- A Lie algebra is solvable if its derived series reaches 0 (in a finite number of steps). -/ |
| 205 | +class IsSolvable : Prop where |
| 206 | + solvable : ∃ k, derivedSeries R L k = ⊥ |
| 207 | +#align lie_algebra.is_solvable LieAlgebra.IsSolvable |
| 208 | + |
| 209 | +instance isSolvableBot : IsSolvable R (↥(⊥ : LieIdeal R L)) := |
| 210 | + ⟨⟨0, Subsingleton.elim _ ⊥⟩⟩ |
| 211 | +#align lie_algebra.is_solvable_bot LieAlgebra.isSolvableBot |
| 212 | + |
| 213 | +instance isSolvableAdd {I J : LieIdeal R L} [hI : IsSolvable R I] [hJ : IsSolvable R J] : |
| 214 | + IsSolvable R (↥(I + J)) := by |
| 215 | + obtain ⟨k, hk⟩ := id hI; obtain ⟨l, hl⟩ := id hJ |
| 216 | + exact ⟨⟨k + l, LieIdeal.derivedSeries_add_eq_bot hk hl⟩⟩ |
| 217 | +#align lie_algebra.is_solvable_add LieAlgebra.isSolvableAdd |
| 218 | + |
| 219 | +end LieAlgebra |
| 220 | + |
| 221 | +variable {R L} |
| 222 | + |
| 223 | +namespace Function |
| 224 | + |
| 225 | +open LieAlgebra |
| 226 | + |
| 227 | +theorem Injective.lieAlgebra_isSolvable [h₁ : IsSolvable R L] (h₂ : Injective f) : |
| 228 | + IsSolvable R L' := by |
| 229 | + obtain ⟨k, hk⟩ := id h₁ |
| 230 | + use k |
| 231 | + apply LieIdeal.bot_of_map_eq_bot h₂; rw [eq_bot_iff, ← hk] |
| 232 | + apply LieIdeal.derivedSeries_map_le |
| 233 | +#align function.injective.lie_algebra_is_solvable Function.Injective.lieAlgebra_isSolvable |
| 234 | + |
| 235 | +theorem Surjective.lieAlgebra_isSolvable [h₁ : IsSolvable R L'] (h₂ : Surjective f) : |
| 236 | + IsSolvable R L := by |
| 237 | + obtain ⟨k, hk⟩ := id h₁ |
| 238 | + use k |
| 239 | + rw [← LieIdeal.derivedSeries_map_eq k h₂, hk] |
| 240 | + simp only [LieIdeal.map_eq_bot_iff, bot_le] |
| 241 | +#align function.surjective.lie_algebra_is_solvable Function.Surjective.lieAlgebra_isSolvable |
| 242 | + |
| 243 | +end Function |
| 244 | + |
| 245 | +theorem LieHom.isSolvable_range (f : L' →ₗ⁅R⁆ L) [LieAlgebra.IsSolvable R L'] : |
| 246 | + LieAlgebra.IsSolvable R f.range := |
| 247 | + f.surjective_rangeRestrict.lieAlgebra_isSolvable |
| 248 | +#align lie_hom.is_solvable_range LieHom.isSolvable_range |
| 249 | + |
| 250 | +namespace LieAlgebra |
| 251 | + |
| 252 | +theorem solvable_iff_equiv_solvable (e : L' ≃ₗ⁅R⁆ L) : IsSolvable R L' ↔ IsSolvable R L := by |
| 253 | + constructor <;> intro h |
| 254 | + · exact e.symm.injective.lieAlgebra_isSolvable |
| 255 | + · exact e.injective.lieAlgebra_isSolvable |
| 256 | +#align lie_algebra.solvable_iff_equiv_solvable LieAlgebra.solvable_iff_equiv_solvable |
| 257 | + |
| 258 | +theorem le_solvable_ideal_solvable {I J : LieIdeal R L} (h₁ : I ≤ J) (_ : IsSolvable R J) : |
| 259 | + IsSolvable R I := |
| 260 | + (LieIdeal.homOfLe_injective h₁).lieAlgebra_isSolvable |
| 261 | +#align lie_algebra.le_solvable_ideal_solvable LieAlgebra.le_solvable_ideal_solvable |
| 262 | + |
| 263 | +variable (R L) |
| 264 | + |
| 265 | +instance (priority := 100) ofAbelianIsSolvable [IsLieAbelian L] : IsSolvable R L := by |
| 266 | + use 1 |
| 267 | + rw [← abelian_iff_derived_one_eq_bot, lie_abelian_iff_equiv_lie_abelian LieIdeal.topEquiv] |
| 268 | + infer_instance |
| 269 | +#align lie_algebra.of_abelian_is_solvable LieAlgebra.ofAbelianIsSolvable |
| 270 | + |
| 271 | +/-- The (solvable) radical of Lie algebra is the `sSup` of all solvable ideals. -/ |
| 272 | +def radical := |
| 273 | + sSup { I : LieIdeal R L | IsSolvable R I } |
| 274 | +#align lie_algebra.radical LieAlgebra.radical |
| 275 | + |
| 276 | +/-- The radical of a Noetherian Lie algebra is solvable. -/ |
| 277 | +instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) := by |
| 278 | + have hwf := LieSubmodule.wellFounded_of_noetherian R L L |
| 279 | + rw [← CompleteLattice.isSupClosedCompact_iff_wellFounded] at hwf |
| 280 | + refine' hwf { I : LieIdeal R L | IsSolvable R I } ⟨⊥, _⟩ fun I hI J hJ => _ |
| 281 | + · exact LieAlgebra.isSolvableBot R L |
| 282 | + · rw [Set.mem_setOf_eq] at hI hJ ⊢ |
| 283 | + apply LieAlgebra.isSolvableAdd R L |
| 284 | +#align lie_algebra.radical_is_solvable LieAlgebra.radicalIsSolvable |
| 285 | + |
| 286 | +/-- The `→` direction of this lemma is actually true without the `IsNoetherian` assumption. -/ |
| 287 | +theorem LieIdeal.solvable_iff_le_radical [IsNoetherian R L] (I : LieIdeal R L) : |
| 288 | + IsSolvable R I ↔ I ≤ radical R L := |
| 289 | + ⟨fun h => le_sSup h, fun h => le_solvable_ideal_solvable h inferInstance⟩ |
| 290 | +#align lie_algebra.lie_ideal.solvable_iff_le_radical LieAlgebra.LieIdeal.solvable_iff_le_radical |
| 291 | + |
| 292 | +theorem center_le_radical : center R L ≤ radical R L := |
| 293 | + have h : IsSolvable R (center R L) := inferInstance |
| 294 | + le_sSup h |
| 295 | +#align lie_algebra.center_le_radical LieAlgebra.center_le_radical |
| 296 | + |
| 297 | +/-- Given a solvable Lie ideal `I` with derived series `I = D₀ ≥ D₁ ≥ ⋯ ≥ Dₖ = ⊥`, this is the |
| 298 | +natural number `k` (the number of inclusions). |
| 299 | +
|
| 300 | +For a non-solvable ideal, the value is 0. -/ |
| 301 | +noncomputable def derivedLengthOfIdeal (I : LieIdeal R L) : ℕ := |
| 302 | + sInf { k | derivedSeriesOfIdeal R L k I = ⊥ } |
| 303 | +#align lie_algebra.derived_length_of_ideal LieAlgebra.derivedLengthOfIdeal |
| 304 | + |
| 305 | +/-- The derived length of a Lie algebra is the derived length of its 'top' Lie ideal. |
| 306 | +
|
| 307 | +See also `LieAlgebra.derivedLength_eq_derivedLengthOfIdeal`. -/ |
| 308 | +noncomputable abbrev derivedLength : ℕ := |
| 309 | + derivedLengthOfIdeal R L ⊤ |
| 310 | +#align lie_algebra.derived_length LieAlgebra.derivedLength |
| 311 | + |
| 312 | +theorem derivedSeries_of_derivedLength_succ (I : LieIdeal R L) (k : ℕ) : |
| 313 | + derivedLengthOfIdeal R L I = k + 1 ↔ |
| 314 | + IsLieAbelian (derivedSeriesOfIdeal R L k I) ∧ derivedSeriesOfIdeal R L k I ≠ ⊥ := by |
| 315 | + rw [abelian_iff_derived_succ_eq_bot] |
| 316 | + let s := { k | derivedSeriesOfIdeal R L k I = ⊥ } |
| 317 | + change sInf s = k + 1 ↔ k + 1 ∈ s ∧ k ∉ s |
| 318 | + have hs : ∀ k₁ k₂ : ℕ, k₁ ≤ k₂ → k₁ ∈ s → k₂ ∈ s := by |
| 319 | + intro k₁ k₂ h₁₂ h₁ |
| 320 | + suffices derivedSeriesOfIdeal R L k₂ I ≤ ⊥ by exact eq_bot_iff.mpr this |
| 321 | + change derivedSeriesOfIdeal R L k₁ I = ⊥ at h₁ ; rw [← h₁] |
| 322 | + exact derivedSeriesOfIdeal_antitone I h₁₂ |
| 323 | + exact Nat.sInf_upward_closed_eq_succ_iff hs k |
| 324 | +#align lie_algebra.derived_series_of_derived_length_succ LieAlgebra.derivedSeries_of_derivedLength_succ |
| 325 | + |
| 326 | +theorem derivedLength_eq_derivedLengthOfIdeal (I : LieIdeal R L) : |
| 327 | + derivedLength R I = derivedLengthOfIdeal R L I := by |
| 328 | + let s₁ := { k | derivedSeries R I k = ⊥ } |
| 329 | + let s₂ := { k | derivedSeriesOfIdeal R L k I = ⊥ } |
| 330 | + change sInf s₁ = sInf s₂ |
| 331 | + congr; ext k; exact I.derivedSeries_eq_bot_iff k |
| 332 | +#align lie_algebra.derived_length_eq_derived_length_of_ideal LieAlgebra.derivedLength_eq_derivedLengthOfIdeal |
| 333 | + |
| 334 | +variable {R L} |
| 335 | + |
| 336 | +/-- Given a solvable Lie ideal `I` with derived series `I = D₀ ≥ D₁ ≥ ⋯ ≥ Dₖ = ⊥`, this is the |
| 337 | +`k-1`th term in the derived series (and is therefore an Abelian ideal contained in `I`). |
| 338 | +
|
| 339 | +For a non-solvable ideal, this is the zero ideal, `⊥`. -/ |
| 340 | +noncomputable def derivedAbelianOfIdeal (I : LieIdeal R L) : LieIdeal R L := |
| 341 | + match derivedLengthOfIdeal R L I with |
| 342 | + | 0 => ⊥ |
| 343 | + | k + 1 => derivedSeriesOfIdeal R L k I |
| 344 | +#align lie_algebra.derived_abelian_of_ideal LieAlgebra.derivedAbelianOfIdeal |
| 345 | + |
| 346 | +theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) : |
| 347 | + IsLieAbelian (derivedAbelianOfIdeal I) := by |
| 348 | + dsimp only [derivedAbelianOfIdeal] |
| 349 | + cases' h : derivedLengthOfIdeal R L I with k |
| 350 | + · exact isLieAbelian_bot R L |
| 351 | + · rw [derivedSeries_of_derivedLength_succ] at h ; exact h.1 |
| 352 | +#align lie_algebra.abelian_derived_abelian_of_ideal LieAlgebra.abelian_derivedAbelianOfIdeal |
| 353 | + |
| 354 | +theorem derivedLength_zero (I : LieIdeal R L) [hI : IsSolvable R I] : |
| 355 | + derivedLengthOfIdeal R L I = 0 ↔ I = ⊥ := by |
| 356 | + let s := { k | derivedSeriesOfIdeal R L k I = ⊥ } |
| 357 | + change sInf s = 0 ↔ _ |
| 358 | + have hne : s ≠ ∅ := by |
| 359 | + obtain ⟨k, hk⟩ := id hI |
| 360 | + refine' Set.Nonempty.ne_empty ⟨k, _⟩ |
| 361 | + rw [derivedSeries_def, LieIdeal.derivedSeries_eq_bot_iff] at hk ; exact hk |
| 362 | + simp [hne] |
| 363 | +#align lie_algebra.derived_length_zero LieAlgebra.derivedLength_zero |
| 364 | + |
| 365 | +theorem abelian_of_solvable_ideal_eq_bot_iff (I : LieIdeal R L) [h : IsSolvable R I] : |
| 366 | + derivedAbelianOfIdeal I = ⊥ ↔ I = ⊥ := by |
| 367 | + dsimp only [derivedAbelianOfIdeal] |
| 368 | + split -- Porting note: Original tactic was `cases' h : derivedAbelianOfIdeal R L I with k` |
| 369 | + · rename_i h |
| 370 | + rw [derivedLength_zero] at h |
| 371 | + rw [h] |
| 372 | + · rename_i k h |
| 373 | + obtain ⟨_, h₂⟩ := (derivedSeries_of_derivedLength_succ R L I k).mp h |
| 374 | + have h₃ : I ≠ ⊥ := by intro contra; apply h₂; rw [contra]; apply derivedSeries_of_bot_eq_bot |
| 375 | + simp only [h₂, h₃] |
| 376 | +#align lie_algebra.abelian_of_solvable_ideal_eq_bot_iff LieAlgebra.abelian_of_solvable_ideal_eq_bot_iff |
| 377 | + |
| 378 | +end LieAlgebra |
0 commit comments