algebra.lie.solvable
⟷
Mathlib.Algebra.Lie.Solvable
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -108,8 +108,8 @@ theorem derivedSeriesOfIdeal_add (k l : ℕ) : D (k + l) I = D k (D l I) :=
theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J) (h₂ : l ≤ k) :
D k I ≤ D l J := by
revert l; induction' k with k ih <;> intro l h₂
- · rw [le_zero_iff] at h₂ ; rw [h₂, derived_series_of_ideal_zero]; exact h₁
- · have h : l = k.succ ∨ l ≤ k := by rwa [le_iff_eq_or_lt, Nat.lt_succ_iff] at h₂
+ · rw [le_zero_iff] at h₂; rw [h₂, derived_series_of_ideal_zero]; exact h₁
+ · have h : l = k.succ ∨ l ≤ k := by rwa [le_iff_eq_or_lt, Nat.lt_succ_iff] at h₂
cases h
· rw [h, derived_series_of_ideal_succ, derived_series_of_ideal_succ]
exact LieSubmodule.mono_lie _ _ _ _ (ih (le_refl k)) (ih (le_refl k))
@@ -150,7 +150,7 @@ theorem derivedSeriesOfIdeal_add_le_add (J : LieIdeal R L) (k l : ℕ) :
monotone' := fun I J h => LieSubmodule.mono_lie I J I J h h }
have h₁ : ∀ I J : LieIdeal R L, D₁ (I ⊔ J) ≤ D₁ I ⊔ J := by
simp [LieSubmodule.lie_le_right, LieSubmodule.lie_le_left, le_sup_of_le_right]
- rw [← D₁.iterate_sup_le_sup_iff] at h₁
+ rw [← D₁.iterate_sup_le_sup_iff] at h₁
exact h₁ k l I J
#align lie_algebra.derived_series_of_ideal_add_le_add LieAlgebra.derivedSeriesOfIdeal_add_le_add
-/
@@ -218,7 +218,7 @@ theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedS
by
rw [LieIdeal.derivedSeries_eq_bot_iff] at hI hJ ⊢
rw [← le_bot_iff]
- let D := derived_series_of_ideal R L; change D k I = ⊥ at hI ; change D l J = ⊥ at hJ
+ let D := derived_series_of_ideal R L; change D k I = ⊥ at hI; change D l J = ⊥ at hJ
calc
D (k + l) (I + J) ≤ D k I + D l J := derived_series_of_ideal_add_le_add I J k l
_ ≤ ⊥ := by rw [hI, hJ]; simp
@@ -350,7 +350,7 @@ def radical :=
instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) :=
by
have hwf := LieSubmodule.wellFounded_of_noetherian R L L
- rw [← CompleteLattice.isSupClosedCompact_iff_wellFounded] at hwf
+ rw [← CompleteLattice.isSupClosedCompact_iff_wellFounded] at hwf
refine' hwf {I : LieIdeal R L | IsSolvable R I} ⟨⊥, _⟩ fun I hI J hJ => _
· exact LieAlgebra.isSolvableBot R L
· apply LieAlgebra.isSolvableAdd R L; exacts [hI, hJ]
@@ -402,7 +402,7 @@ theorem derivedSeries_of_derivedLength_succ (I : LieIdeal R L) (k : ℕ) :
by
intro k₁ k₂ h₁₂ h₁
suffices derived_series_of_ideal R L k₂ I ≤ ⊥ by exact eq_bot_iff.mpr this
- change derived_series_of_ideal R L k₁ I = ⊥ at h₁ ; rw [← h₁]
+ change derived_series_of_ideal R L k₁ I = ⊥ at h₁; rw [← h₁]
exact derived_series_of_ideal_antitone I h₁₂
exact Nat.sInf_upward_closed_eq_succ_iff hs k
#align lie_algebra.derived_series_of_derived_length_succ LieAlgebra.derivedSeries_of_derivedLength_succ
@@ -439,7 +439,7 @@ theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) : IsLieAbelian (derived
dsimp only [derived_abelian_of_ideal]
cases' h : derived_length_of_ideal R L I with k
· exact is_lie_abelian_bot R L
- · rw [derived_series_of_derived_length_succ] at h ; exact h.1
+ · rw [derived_series_of_derived_length_succ] at h; exact h.1
#align lie_algebra.abelian_derived_abelian_of_ideal LieAlgebra.abelian_derivedAbelianOfIdeal
-/
@@ -451,7 +451,7 @@ theorem derivedLength_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
have hne : s ≠ ∅ := by
obtain ⟨k, hk⟩ := id hI
refine' Set.Nonempty.ne_empty ⟨k, _⟩
- rw [derived_series_def, LieIdeal.derivedSeries_eq_bot_iff] at hk ; exact hk
+ rw [derived_series_def, LieIdeal.derivedSeries_eq_bot_iff] at hk; exact hk
simp [hne]
#align lie_algebra.derived_length_zero LieAlgebra.derivedLength_zero
-/
@@ -462,7 +462,7 @@ theorem abelian_of_solvable_ideal_eq_bot_iff (I : LieIdeal R L) [h : IsSolvable
by
dsimp only [derived_abelian_of_ideal]
cases' h : derived_length_of_ideal R L I with k
- · rw [derived_length_zero] at h ; rw [h]; rfl
+ · rw [derived_length_zero] at h; rw [h]; rfl
· obtain ⟨h₁, h₂⟩ := (derived_series_of_derived_length_succ R L I k).mp h
have h₃ : I ≠ ⊥ := by intro contra; apply h₂; rw [contra]; apply derived_series_of_bot_eq_bot
change derived_series_of_ideal R L k I = ⊥ ↔ I = ⊥
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -323,7 +323,7 @@ theorem solvable_iff_equiv_solvable (e : L' ≃ₗ⁅R⁆ L) : IsSolvable R L'
#print LieAlgebra.le_solvable_ideal_solvable /-
theorem le_solvable_ideal_solvable {I J : LieIdeal R L} (h₁ : I ≤ J) (h₂ : IsSolvable R J) :
IsSolvable R I :=
- (LieIdeal.homOfLe_injective h₁).lieAlgebra_isSolvable
+ (LieIdeal.inclusion_injective h₁).lieAlgebra_isSolvable
#align lie_algebra.le_solvable_ideal_solvable LieAlgebra.le_solvable_ideal_solvable
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2021 Oliver Nash. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Oliver Nash
-/
-import Mathbin.Algebra.Lie.Abelian
-import Mathbin.Algebra.Lie.IdealOperations
-import Mathbin.Order.Hom.Basic
+import Algebra.Lie.Abelian
+import Algebra.Lie.IdealOperations
+import Order.Hom.Basic
#align_import algebra.lie.solvable from "leanprover-community/mathlib"@"36938f775671ff28bea1c0310f1608e4afbb22e0"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2021 Oliver Nash. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Oliver Nash
-
-! This file was ported from Lean 3 source module algebra.lie.solvable
-! leanprover-community/mathlib commit 36938f775671ff28bea1c0310f1608e4afbb22e0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Lie.Abelian
import Mathbin.Algebra.Lie.IdealOperations
import Mathbin.Order.Hom.Basic
+#align_import algebra.lie.solvable from "leanprover-community/mathlib"@"36938f775671ff28bea1c0310f1608e4afbb22e0"
+
/-!
# Solvable Lie algebras
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -95,7 +95,6 @@ theorem derivedSeries_def (k : ℕ) : derivedSeries R L k = derivedSeriesOfIdeal
variable {R L}
--- mathport name: exprD
local notation "D" => derivedSeriesOfIdeal R L
#print LieAlgebra.derivedSeriesOfIdeal_add /-
@@ -107,6 +106,7 @@ theorem derivedSeriesOfIdeal_add (k l : ℕ) : D (k + l) I = D k (D l I) :=
#align lie_algebra.derived_series_of_ideal_add LieAlgebra.derivedSeriesOfIdeal_add
-/
+#print LieAlgebra.derivedSeriesOfIdeal_le /-
@[mono]
theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J) (h₂ : l ≤ k) :
D k I ≤ D l J := by
@@ -118,23 +118,33 @@ theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J
exact LieSubmodule.mono_lie _ _ _ _ (ih (le_refl k)) (ih (le_refl k))
· rw [derived_series_of_ideal_succ]; exact le_trans (LieSubmodule.lie_le_left _ _) (ih h)
#align lie_algebra.derived_series_of_ideal_le LieAlgebra.derivedSeriesOfIdeal_le
+-/
+#print LieAlgebra.derivedSeriesOfIdeal_succ_le /-
theorem derivedSeriesOfIdeal_succ_le (k : ℕ) : D (k + 1) I ≤ D k I :=
derivedSeriesOfIdeal_le (le_refl I) k.le_succ
#align lie_algebra.derived_series_of_ideal_succ_le LieAlgebra.derivedSeriesOfIdeal_succ_le
+-/
+#print LieAlgebra.derivedSeriesOfIdeal_le_self /-
theorem derivedSeriesOfIdeal_le_self (k : ℕ) : D k I ≤ I :=
derivedSeriesOfIdeal_le (le_refl I) (zero_le k)
#align lie_algebra.derived_series_of_ideal_le_self LieAlgebra.derivedSeriesOfIdeal_le_self
+-/
+#print LieAlgebra.derivedSeriesOfIdeal_mono /-
theorem derivedSeriesOfIdeal_mono {I J : LieIdeal R L} (h : I ≤ J) (k : ℕ) : D k I ≤ D k J :=
derivedSeriesOfIdeal_le h (le_refl k)
#align lie_algebra.derived_series_of_ideal_mono LieAlgebra.derivedSeriesOfIdeal_mono
+-/
+#print LieAlgebra.derivedSeriesOfIdeal_antitone /-
theorem derivedSeriesOfIdeal_antitone {k l : ℕ} (h : l ≤ k) : D k I ≤ D l I :=
derivedSeriesOfIdeal_le (le_refl I) h
#align lie_algebra.derived_series_of_ideal_antitone LieAlgebra.derivedSeriesOfIdeal_antitone
+-/
+#print LieAlgebra.derivedSeriesOfIdeal_add_le_add /-
theorem derivedSeriesOfIdeal_add_le_add (J : LieIdeal R L) (k l : ℕ) :
D (k + l) (I + J) ≤ D k I + D l J :=
by
@@ -146,6 +156,7 @@ theorem derivedSeriesOfIdeal_add_le_add (J : LieIdeal R L) (k l : ℕ) :
rw [← D₁.iterate_sup_le_sup_iff] at h₁
exact h₁ k l I J
#align lie_algebra.derived_series_of_ideal_add_le_add LieAlgebra.derivedSeriesOfIdeal_add_le_add
+-/
#print LieAlgebra.derivedSeries_of_bot_eq_bot /-
theorem derivedSeries_of_bot_eq_bot (k : ℕ) : derivedSeriesOfIdeal R L k ⊥ = ⊥ := by
@@ -217,6 +228,7 @@ theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedS
#align lie_ideal.derived_series_add_eq_bot LieIdeal.derivedSeries_add_eq_bot
-/
+#print LieIdeal.derivedSeries_map_le /-
theorem derivedSeries_map_le (k : ℕ) : (derivedSeries R L' k).map f ≤ derivedSeries R L k :=
by
induction' k with k ih
@@ -224,7 +236,9 @@ theorem derivedSeries_map_le (k : ℕ) : (derivedSeries R L' k).map f ≤ derive
· simp only [derived_series_def, derived_series_of_ideal_succ] at ih ⊢
exact le_trans (map_bracket_le f) (LieSubmodule.mono_lie _ _ _ _ ih ih)
#align lie_ideal.derived_series_map_le LieIdeal.derivedSeries_map_le
+-/
+#print LieIdeal.derivedSeries_map_eq /-
theorem derivedSeries_map_eq (k : ℕ) (h : Function.Surjective f) :
(derivedSeries R L' k).map f = derivedSeries R L k :=
by
@@ -234,6 +248,7 @@ theorem derivedSeries_map_eq (k : ℕ) (h : Function.Surjective f) :
exact f.ideal_range_eq_top_of_surjective h
· simp only [derived_series_def, map_bracket_eq f h, ih, derived_series_of_ideal_succ]
#align lie_ideal.derived_series_map_eq LieIdeal.derivedSeries_map_eq
+-/
end LieIdeal
@@ -268,6 +283,7 @@ namespace Function
open LieAlgebra
+#print Function.Injective.lieAlgebra_isSolvable /-
theorem Injective.lieAlgebra_isSolvable [h₁ : IsSolvable R L] (h₂ : Injective f) :
IsSolvable R L' := by
obtain ⟨k, hk⟩ := id h₁
@@ -275,7 +291,9 @@ theorem Injective.lieAlgebra_isSolvable [h₁ : IsSolvable R L] (h₂ : Injectiv
apply LieIdeal.bot_of_map_eq_bot h₂; rw [eq_bot_iff, ← hk]
apply LieIdeal.derivedSeries_map_le
#align function.injective.lie_algebra_is_solvable Function.Injective.lieAlgebra_isSolvable
+-/
+#print Function.Surjective.lieAlgebra_isSolvable /-
theorem Surjective.lieAlgebra_isSolvable [h₁ : IsSolvable R L'] (h₂ : Surjective f) :
IsSolvable R L := by
obtain ⟨k, hk⟩ := id h₁
@@ -283,6 +301,7 @@ theorem Surjective.lieAlgebra_isSolvable [h₁ : IsSolvable R L'] (h₂ : Surjec
rw [← LieIdeal.derivedSeries_map_eq k h₂, hk]
simp only [LieIdeal.map_eq_bot_iff, bot_le]
#align function.surjective.lie_algebra_is_solvable Function.Surjective.lieAlgebra_isSolvable
+-/
end Function
@@ -304,19 +323,23 @@ theorem solvable_iff_equiv_solvable (e : L' ≃ₗ⁅R⁆ L) : IsSolvable R L'
#align lie_algebra.solvable_iff_equiv_solvable LieAlgebra.solvable_iff_equiv_solvable
-/
+#print LieAlgebra.le_solvable_ideal_solvable /-
theorem le_solvable_ideal_solvable {I J : LieIdeal R L} (h₁ : I ≤ J) (h₂ : IsSolvable R J) :
IsSolvable R I :=
(LieIdeal.homOfLe_injective h₁).lieAlgebra_isSolvable
#align lie_algebra.le_solvable_ideal_solvable LieAlgebra.le_solvable_ideal_solvable
+-/
variable (R L)
+#print LieAlgebra.ofAbelianIsSolvable /-
instance (priority := 100) ofAbelianIsSolvable [IsLieAbelian L] : IsSolvable R L :=
by
use 1
rw [← abelian_iff_derived_one_eq_bot, lie_abelian_iff_equiv_lie_abelian LieIdeal.topEquiv]
infer_instance
#align lie_algebra.of_abelian_is_solvable LieAlgebra.ofAbelianIsSolvable
+-/
#print LieAlgebra.radical /-
/-- The (solvable) radical of Lie algebra is the `Sup` of all solvable ideals. -/
@@ -345,10 +368,12 @@ theorem LieIdeal.solvable_iff_le_radical [IsNoetherian R L] (I : LieIdeal R L) :
#align lie_algebra.lie_ideal.solvable_iff_le_radical LieAlgebra.LieIdeal.solvable_iff_le_radical
-/
+#print LieAlgebra.center_le_radical /-
theorem center_le_radical : center R L ≤ radical R L :=
have h : IsSolvable R (center R L) := by infer_instance
le_sSup h
#align lie_algebra.center_le_radical LieAlgebra.center_le_radical
+-/
#print LieAlgebra.derivedLengthOfIdeal /-
/-- Given a solvable Lie ideal `I` with derived series `I = D₀ ≥ D₁ ≥ ⋯ ≥ Dₖ = ⊥`, this is the
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -214,7 +214,6 @@ theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedS
calc
D (k + l) (I + J) ≤ D k I + D l J := derived_series_of_ideal_add_le_add I J k l
_ ≤ ⊥ := by rw [hI, hJ]; simp
-
#align lie_ideal.derived_series_add_eq_bot LieIdeal.derivedSeries_add_eq_bot
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/58a272265b5e05f258161260dd2c5d247213cbd3
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Oliver Nash
! This file was ported from Lean 3 source module algebra.lie.solvable
-! leanprover-community/mathlib commit a50170a88a47570ed186b809ca754110590f9476
+! leanprover-community/mathlib commit 36938f775671ff28bea1c0310f1608e4afbb22e0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.Order.Hom.Basic
/-!
# Solvable Lie algebras
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Like groups, Lie algebras admit a natural concept of solvability. We define this here via the
derived series and prove some related results. We also define the radical of a Lie algebra and
prove that it is solvable when the Lie algebra is Noetherian.
mathlib commit https://github.com/leanprover-community/mathlib/commit/13361559d66b84f80b6d5a1c4a26aa5054766725
@@ -47,6 +47,7 @@ variable (I J : LieIdeal R L) {f : L' →ₗ⁅R⁆ L}
namespace LieAlgebra
+#print LieAlgebra.derivedSeriesOfIdeal /-
/-- A generalisation of the derived series of a Lie algebra, whose zeroth term is a specified ideal.
It can be more convenient to work with this generalisation when considering the derived series of
@@ -58,39 +59,50 @@ See also `lie_ideal.derived_series_eq_derived_series_of_ideal_comap` and
def derivedSeriesOfIdeal (k : ℕ) : LieIdeal R L → LieIdeal R L :=
(fun I => ⁅I, I⁆)^[k]
#align lie_algebra.derived_series_of_ideal LieAlgebra.derivedSeriesOfIdeal
+-/
+#print LieAlgebra.derivedSeriesOfIdeal_zero /-
@[simp]
theorem derivedSeriesOfIdeal_zero : derivedSeriesOfIdeal R L 0 I = I :=
rfl
#align lie_algebra.derived_series_of_ideal_zero LieAlgebra.derivedSeriesOfIdeal_zero
+-/
+#print LieAlgebra.derivedSeriesOfIdeal_succ /-
@[simp]
theorem derivedSeriesOfIdeal_succ (k : ℕ) :
derivedSeriesOfIdeal R L (k + 1) I =
⁅derivedSeriesOfIdeal R L k I, derivedSeriesOfIdeal R L k I⁆ :=
Function.iterate_succ_apply' (fun I => ⁅I, I⁆) k I
#align lie_algebra.derived_series_of_ideal_succ LieAlgebra.derivedSeriesOfIdeal_succ
+-/
+#print LieAlgebra.derivedSeries /-
/-- The derived series of Lie ideals of a Lie algebra. -/
abbrev derivedSeries (k : ℕ) : LieIdeal R L :=
derivedSeriesOfIdeal R L k ⊤
#align lie_algebra.derived_series LieAlgebra.derivedSeries
+-/
+#print LieAlgebra.derivedSeries_def /-
theorem derivedSeries_def (k : ℕ) : derivedSeries R L k = derivedSeriesOfIdeal R L k ⊤ :=
rfl
#align lie_algebra.derived_series_def LieAlgebra.derivedSeries_def
+-/
variable {R L}
-- mathport name: exprD
local notation "D" => derivedSeriesOfIdeal R L
+#print LieAlgebra.derivedSeriesOfIdeal_add /-
theorem derivedSeriesOfIdeal_add (k l : ℕ) : D (k + l) I = D k (D l I) :=
by
induction' k with k ih
· rw [zero_add, derived_series_of_ideal_zero]
· rw [Nat.succ_add k l, derived_series_of_ideal_succ, derived_series_of_ideal_succ, ih]
#align lie_algebra.derived_series_of_ideal_add LieAlgebra.derivedSeriesOfIdeal_add
+-/
@[mono]
theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J) (h₂ : l ≤ k) :
@@ -132,19 +144,25 @@ theorem derivedSeriesOfIdeal_add_le_add (J : LieIdeal R L) (k l : ℕ) :
exact h₁ k l I J
#align lie_algebra.derived_series_of_ideal_add_le_add LieAlgebra.derivedSeriesOfIdeal_add_le_add
-theorem derived_series_of_bot_eq_bot (k : ℕ) : derivedSeriesOfIdeal R L k ⊥ = ⊥ := by
+#print LieAlgebra.derivedSeries_of_bot_eq_bot /-
+theorem derivedSeries_of_bot_eq_bot (k : ℕ) : derivedSeriesOfIdeal R L k ⊥ = ⊥ := by
rw [eq_bot_iff]; exact derived_series_of_ideal_le_self ⊥ k
-#align lie_algebra.derived_series_of_bot_eq_bot LieAlgebra.derived_series_of_bot_eq_bot
+#align lie_algebra.derived_series_of_bot_eq_bot LieAlgebra.derivedSeries_of_bot_eq_bot
+-/
+#print LieAlgebra.abelian_iff_derived_one_eq_bot /-
theorem abelian_iff_derived_one_eq_bot : IsLieAbelian I ↔ derivedSeriesOfIdeal R L 1 I = ⊥ := by
rw [derived_series_of_ideal_succ, derived_series_of_ideal_zero,
LieSubmodule.lie_abelian_iff_lie_self_eq_bot]
#align lie_algebra.abelian_iff_derived_one_eq_bot LieAlgebra.abelian_iff_derived_one_eq_bot
+-/
+#print LieAlgebra.abelian_iff_derived_succ_eq_bot /-
theorem abelian_iff_derived_succ_eq_bot (I : LieIdeal R L) (k : ℕ) :
IsLieAbelian (derivedSeriesOfIdeal R L k I) ↔ derivedSeriesOfIdeal R L (k + 1) I = ⊥ := by
rw [add_comm, derived_series_of_ideal_add I 1 k, abelian_iff_derived_one_eq_bot]
#align lie_algebra.abelian_iff_derived_succ_eq_bot LieAlgebra.abelian_iff_derived_succ_eq_bot
+-/
end LieAlgebra
@@ -154,6 +172,7 @@ open LieAlgebra
variable {R L}
+#print LieIdeal.derivedSeries_eq_derivedSeriesOfIdeal_comap /-
theorem derivedSeries_eq_derivedSeriesOfIdeal_comap (k : ℕ) :
derivedSeries R I k = (derivedSeriesOfIdeal R L k I).comap I.incl :=
by
@@ -164,19 +183,25 @@ theorem derivedSeries_eq_derivedSeriesOfIdeal_comap (k : ℕ) :
comap_bracket_incl_of_le I (derived_series_of_ideal_le_self I k)
(derived_series_of_ideal_le_self I k)
#align lie_ideal.derived_series_eq_derived_series_of_ideal_comap LieIdeal.derivedSeries_eq_derivedSeriesOfIdeal_comap
+-/
+#print LieIdeal.derivedSeries_eq_derivedSeriesOfIdeal_map /-
theorem derivedSeries_eq_derivedSeriesOfIdeal_map (k : ℕ) :
(derivedSeries R I k).map I.incl = derivedSeriesOfIdeal R L k I :=
by
rw [derived_series_eq_derived_series_of_ideal_comap, map_comap_incl, inf_eq_right]
apply derived_series_of_ideal_le_self
#align lie_ideal.derived_series_eq_derived_series_of_ideal_map LieIdeal.derivedSeries_eq_derivedSeriesOfIdeal_map
+-/
+#print LieIdeal.derivedSeries_eq_bot_iff /-
theorem derivedSeries_eq_bot_iff (k : ℕ) :
derivedSeries R I k = ⊥ ↔ derivedSeriesOfIdeal R L k I = ⊥ := by
rw [← derived_series_eq_derived_series_of_ideal_map, map_eq_bot_iff, ker_incl, eq_bot_iff]
#align lie_ideal.derived_series_eq_bot_iff LieIdeal.derivedSeries_eq_bot_iff
+-/
+#print LieIdeal.derivedSeries_add_eq_bot /-
theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedSeries R I k = ⊥)
(hJ : derivedSeries R J l = ⊥) : derivedSeries R (↥(I + J)) (k + l) = ⊥ :=
by
@@ -188,6 +213,7 @@ theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedS
_ ≤ ⊥ := by rw [hI, hJ]; simp
#align lie_ideal.derived_series_add_eq_bot LieIdeal.derivedSeries_add_eq_bot
+-/
theorem derivedSeries_map_le (k : ℕ) : (derivedSeries R L' k).map f ≤ derivedSeries R L k :=
by
@@ -211,20 +237,26 @@ end LieIdeal
namespace LieAlgebra
+#print LieAlgebra.IsSolvable /-
/-- A Lie algebra is solvable if its derived series reaches 0 (in a finite number of steps). -/
class IsSolvable : Prop where
solvable : ∃ k, derivedSeries R L k = ⊥
#align lie_algebra.is_solvable LieAlgebra.IsSolvable
+-/
+#print LieAlgebra.isSolvableBot /-
instance isSolvableBot : IsSolvable R ↥(⊥ : LieIdeal R L) :=
⟨⟨0, Subsingleton.elim _ ⊥⟩⟩
#align lie_algebra.is_solvable_bot LieAlgebra.isSolvableBot
+-/
+#print LieAlgebra.isSolvableAdd /-
instance isSolvableAdd {I J : LieIdeal R L} [hI : IsSolvable R I] [hJ : IsSolvable R J] :
IsSolvable R ↥(I + J) := by
obtain ⟨k, hk⟩ := id hI; obtain ⟨l, hl⟩ := id hJ
exact ⟨⟨k + l, LieIdeal.derivedSeries_add_eq_bot hk hl⟩⟩
#align lie_algebra.is_solvable_add LieAlgebra.isSolvableAdd
+-/
end LieAlgebra
@@ -234,42 +266,46 @@ namespace Function
open LieAlgebra
-theorem Injective.lieAlgebraIsSolvable [h₁ : IsSolvable R L] (h₂ : Injective f) : IsSolvable R L' :=
- by
+theorem Injective.lieAlgebra_isSolvable [h₁ : IsSolvable R L] (h₂ : Injective f) :
+ IsSolvable R L' := by
obtain ⟨k, hk⟩ := id h₁
use k
apply LieIdeal.bot_of_map_eq_bot h₂; rw [eq_bot_iff, ← hk]
apply LieIdeal.derivedSeries_map_le
-#align function.injective.lie_algebra_is_solvable Function.Injective.lieAlgebraIsSolvable
+#align function.injective.lie_algebra_is_solvable Function.Injective.lieAlgebra_isSolvable
-theorem Surjective.lieAlgebraIsSolvable [h₁ : IsSolvable R L'] (h₂ : Surjective f) :
+theorem Surjective.lieAlgebra_isSolvable [h₁ : IsSolvable R L'] (h₂ : Surjective f) :
IsSolvable R L := by
obtain ⟨k, hk⟩ := id h₁
use k
rw [← LieIdeal.derivedSeries_map_eq k h₂, hk]
simp only [LieIdeal.map_eq_bot_iff, bot_le]
-#align function.surjective.lie_algebra_is_solvable Function.Surjective.lieAlgebraIsSolvable
+#align function.surjective.lie_algebra_is_solvable Function.Surjective.lieAlgebra_isSolvable
end Function
-theorem LieHom.isSolvableRange (f : L' →ₗ⁅R⁆ L) [h : LieAlgebra.IsSolvable R L'] :
+#print LieHom.isSolvable_range /-
+theorem LieHom.isSolvable_range (f : L' →ₗ⁅R⁆ L) [h : LieAlgebra.IsSolvable R L'] :
LieAlgebra.IsSolvable R f.range :=
- f.surjective_rangeRestrict.lieAlgebraIsSolvable
-#align lie_hom.is_solvable_range LieHom.isSolvableRange
+ f.surjective_rangeRestrict.lieAlgebra_isSolvable
+#align lie_hom.is_solvable_range LieHom.isSolvable_range
+-/
namespace LieAlgebra
+#print LieAlgebra.solvable_iff_equiv_solvable /-
theorem solvable_iff_equiv_solvable (e : L' ≃ₗ⁅R⁆ L) : IsSolvable R L' ↔ IsSolvable R L :=
by
constructor <;> intro h
· exact e.symm.injective.lie_algebra_is_solvable
· exact e.injective.lie_algebra_is_solvable
#align lie_algebra.solvable_iff_equiv_solvable LieAlgebra.solvable_iff_equiv_solvable
+-/
-theorem leSolvableIdealSolvable {I J : LieIdeal R L} (h₁ : I ≤ J) (h₂ : IsSolvable R J) :
+theorem le_solvable_ideal_solvable {I J : LieIdeal R L} (h₁ : I ≤ J) (h₂ : IsSolvable R J) :
IsSolvable R I :=
- (LieIdeal.homOfLe_injective h₁).lieAlgebraIsSolvable
-#align lie_algebra.le_solvable_ideal_solvable LieAlgebra.leSolvableIdealSolvable
+ (LieIdeal.homOfLe_injective h₁).lieAlgebra_isSolvable
+#align lie_algebra.le_solvable_ideal_solvable LieAlgebra.le_solvable_ideal_solvable
variable (R L)
@@ -280,11 +316,14 @@ instance (priority := 100) ofAbelianIsSolvable [IsLieAbelian L] : IsSolvable R L
infer_instance
#align lie_algebra.of_abelian_is_solvable LieAlgebra.ofAbelianIsSolvable
+#print LieAlgebra.radical /-
/-- The (solvable) radical of Lie algebra is the `Sup` of all solvable ideals. -/
def radical :=
sSup {I : LieIdeal R L | IsSolvable R I}
#align lie_algebra.radical LieAlgebra.radical
+-/
+#print LieAlgebra.radicalIsSolvable /-
/-- The radical of a Noetherian Lie algebra is solvable. -/
instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) :=
by
@@ -294,18 +333,22 @@ instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) :=
· exact LieAlgebra.isSolvableBot R L
· apply LieAlgebra.isSolvableAdd R L; exacts [hI, hJ]
#align lie_algebra.radical_is_solvable LieAlgebra.radicalIsSolvable
+-/
+#print LieAlgebra.LieIdeal.solvable_iff_le_radical /-
/-- The `→` direction of this lemma is actually true without the `is_noetherian` assumption. -/
theorem LieIdeal.solvable_iff_le_radical [IsNoetherian R L] (I : LieIdeal R L) :
IsSolvable R I ↔ I ≤ radical R L :=
- ⟨fun h => le_sSup h, fun h => leSolvableIdealSolvable h inferInstance⟩
+ ⟨fun h => le_sSup h, fun h => le_solvable_ideal_solvable h inferInstance⟩
#align lie_algebra.lie_ideal.solvable_iff_le_radical LieAlgebra.LieIdeal.solvable_iff_le_radical
+-/
theorem center_le_radical : center R L ≤ radical R L :=
have h : IsSolvable R (center R L) := by infer_instance
le_sSup h
#align lie_algebra.center_le_radical LieAlgebra.center_le_radical
+#print LieAlgebra.derivedLengthOfIdeal /-
/-- Given a solvable Lie ideal `I` with derived series `I = D₀ ≥ D₁ ≥ ⋯ ≥ Dₖ = ⊥`, this is the
natural number `k` (the number of inclusions).
@@ -313,15 +356,19 @@ For a non-solvable ideal, the value is 0. -/
noncomputable def derivedLengthOfIdeal (I : LieIdeal R L) : ℕ :=
sInf {k | derivedSeriesOfIdeal R L k I = ⊥}
#align lie_algebra.derived_length_of_ideal LieAlgebra.derivedLengthOfIdeal
+-/
+#print LieAlgebra.derivedLength /-
/-- The derived length of a Lie algebra is the derived length of its 'top' Lie ideal.
See also `lie_algebra.derived_length_eq_derived_length_of_ideal`. -/
noncomputable abbrev derivedLength : ℕ :=
derivedLengthOfIdeal R L ⊤
#align lie_algebra.derived_length LieAlgebra.derivedLength
+-/
-theorem derived_series_of_derived_length_succ (I : LieIdeal R L) (k : ℕ) :
+#print LieAlgebra.derivedSeries_of_derivedLength_succ /-
+theorem derivedSeries_of_derivedLength_succ (I : LieIdeal R L) (k : ℕ) :
derivedLengthOfIdeal R L I = k + 1 ↔
IsLieAbelian (derivedSeriesOfIdeal R L k I) ∧ derivedSeriesOfIdeal R L k I ≠ ⊥ :=
by
@@ -334,8 +381,10 @@ theorem derived_series_of_derived_length_succ (I : LieIdeal R L) (k : ℕ) :
change derived_series_of_ideal R L k₁ I = ⊥ at h₁ ; rw [← h₁]
exact derived_series_of_ideal_antitone I h₁₂
exact Nat.sInf_upward_closed_eq_succ_iff hs k
-#align lie_algebra.derived_series_of_derived_length_succ LieAlgebra.derived_series_of_derived_length_succ
+#align lie_algebra.derived_series_of_derived_length_succ LieAlgebra.derivedSeries_of_derivedLength_succ
+-/
+#print LieAlgebra.derivedLength_eq_derivedLengthOfIdeal /-
theorem derivedLength_eq_derivedLengthOfIdeal (I : LieIdeal R L) :
derivedLength R I = derivedLengthOfIdeal R L I :=
by
@@ -344,9 +393,11 @@ theorem derivedLength_eq_derivedLengthOfIdeal (I : LieIdeal R L) :
change Inf s₁ = Inf s₂
congr; ext k; exact I.derived_series_eq_bot_iff k
#align lie_algebra.derived_length_eq_derived_length_of_ideal LieAlgebra.derivedLength_eq_derivedLengthOfIdeal
+-/
variable {R L}
+#print LieAlgebra.derivedAbelianOfIdeal /-
/-- Given a solvable Lie ideal `I` with derived series `I = D₀ ≥ D₁ ≥ ⋯ ≥ Dₖ = ⊥`, this is the
`k-1`th term in the derived series (and is therefore an Abelian ideal contained in `I`).
@@ -356,7 +407,9 @@ noncomputable def derivedAbelianOfIdeal (I : LieIdeal R L) : LieIdeal R L :=
| 0 => ⊥
| k + 1 => derivedSeriesOfIdeal R L k I
#align lie_algebra.derived_abelian_of_ideal LieAlgebra.derivedAbelianOfIdeal
+-/
+#print LieAlgebra.abelian_derivedAbelianOfIdeal /-
theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) : IsLieAbelian (derivedAbelianOfIdeal I) :=
by
dsimp only [derived_abelian_of_ideal]
@@ -364,8 +417,10 @@ theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) : IsLieAbelian (derived
· exact is_lie_abelian_bot R L
· rw [derived_series_of_derived_length_succ] at h ; exact h.1
#align lie_algebra.abelian_derived_abelian_of_ideal LieAlgebra.abelian_derivedAbelianOfIdeal
+-/
-theorem derived_length_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
+#print LieAlgebra.derivedLength_zero /-
+theorem derivedLength_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
derivedLengthOfIdeal R L I = 0 ↔ I = ⊥ :=
by
let s := {k | derived_series_of_ideal R L k I = ⊥}; change Inf s = 0 ↔ _
@@ -374,8 +429,10 @@ theorem derived_length_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
refine' Set.Nonempty.ne_empty ⟨k, _⟩
rw [derived_series_def, LieIdeal.derivedSeries_eq_bot_iff] at hk ; exact hk
simp [hne]
-#align lie_algebra.derived_length_zero LieAlgebra.derived_length_zero
+#align lie_algebra.derived_length_zero LieAlgebra.derivedLength_zero
+-/
+#print LieAlgebra.abelian_of_solvable_ideal_eq_bot_iff /-
theorem abelian_of_solvable_ideal_eq_bot_iff (I : LieIdeal R L) [h : IsSolvable R I] :
derivedAbelianOfIdeal I = ⊥ ↔ I = ⊥ :=
by
@@ -387,6 +444,7 @@ theorem abelian_of_solvable_ideal_eq_bot_iff (I : LieIdeal R L) [h : IsSolvable
change derived_series_of_ideal R L k I = ⊥ ↔ I = ⊥
constructor <;> contradiction
#align lie_algebra.abelian_of_solvable_ideal_eq_bot_iff LieAlgebra.abelian_of_solvable_ideal_eq_bot_iff
+-/
end LieAlgebra
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -282,7 +282,7 @@ instance (priority := 100) ofAbelianIsSolvable [IsLieAbelian L] : IsSolvable R L
/-- The (solvable) radical of Lie algebra is the `Sup` of all solvable ideals. -/
def radical :=
- sSup { I : LieIdeal R L | IsSolvable R I }
+ sSup {I : LieIdeal R L | IsSolvable R I}
#align lie_algebra.radical LieAlgebra.radical
/-- The radical of a Noetherian Lie algebra is solvable. -/
@@ -290,7 +290,7 @@ instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) :=
by
have hwf := LieSubmodule.wellFounded_of_noetherian R L L
rw [← CompleteLattice.isSupClosedCompact_iff_wellFounded] at hwf
- refine' hwf { I : LieIdeal R L | IsSolvable R I } ⟨⊥, _⟩ fun I hI J hJ => _
+ refine' hwf {I : LieIdeal R L | IsSolvable R I} ⟨⊥, _⟩ fun I hI J hJ => _
· exact LieAlgebra.isSolvableBot R L
· apply LieAlgebra.isSolvableAdd R L; exacts [hI, hJ]
#align lie_algebra.radical_is_solvable LieAlgebra.radicalIsSolvable
@@ -311,7 +311,7 @@ natural number `k` (the number of inclusions).
For a non-solvable ideal, the value is 0. -/
noncomputable def derivedLengthOfIdeal (I : LieIdeal R L) : ℕ :=
- sInf { k | derivedSeriesOfIdeal R L k I = ⊥ }
+ sInf {k | derivedSeriesOfIdeal R L k I = ⊥}
#align lie_algebra.derived_length_of_ideal LieAlgebra.derivedLengthOfIdeal
/-- The derived length of a Lie algebra is the derived length of its 'top' Lie ideal.
@@ -326,7 +326,7 @@ theorem derived_series_of_derived_length_succ (I : LieIdeal R L) (k : ℕ) :
IsLieAbelian (derivedSeriesOfIdeal R L k I) ∧ derivedSeriesOfIdeal R L k I ≠ ⊥ :=
by
rw [abelian_iff_derived_succ_eq_bot]
- let s := { k | derived_series_of_ideal R L k I = ⊥ }; change Inf s = k + 1 ↔ k + 1 ∈ s ∧ k ∉ s
+ let s := {k | derived_series_of_ideal R L k I = ⊥}; change Inf s = k + 1 ↔ k + 1 ∈ s ∧ k ∉ s
have hs : ∀ k₁ k₂ : ℕ, k₁ ≤ k₂ → k₁ ∈ s → k₂ ∈ s :=
by
intro k₁ k₂ h₁₂ h₁
@@ -339,8 +339,8 @@ theorem derived_series_of_derived_length_succ (I : LieIdeal R L) (k : ℕ) :
theorem derivedLength_eq_derivedLengthOfIdeal (I : LieIdeal R L) :
derivedLength R I = derivedLengthOfIdeal R L I :=
by
- let s₁ := { k | derivedSeries R I k = ⊥ }
- let s₂ := { k | derived_series_of_ideal R L k I = ⊥ }
+ let s₁ := {k | derivedSeries R I k = ⊥}
+ let s₂ := {k | derived_series_of_ideal R L k I = ⊥}
change Inf s₁ = Inf s₂
congr; ext k; exact I.derived_series_eq_bot_iff k
#align lie_algebra.derived_length_eq_derived_length_of_ideal LieAlgebra.derivedLength_eq_derivedLengthOfIdeal
@@ -368,7 +368,7 @@ theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) : IsLieAbelian (derived
theorem derived_length_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
derivedLengthOfIdeal R L I = 0 ↔ I = ⊥ :=
by
- let s := { k | derived_series_of_ideal R L k I = ⊥ }; change Inf s = 0 ↔ _
+ let s := {k | derived_series_of_ideal R L k I = ⊥}; change Inf s = 0 ↔ _
have hne : s ≠ ∅ := by
obtain ⟨k, hk⟩ := id hI
refine' Set.Nonempty.ne_empty ⟨k, _⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -96,8 +96,8 @@ theorem derivedSeriesOfIdeal_add (k l : ℕ) : D (k + l) I = D k (D l I) :=
theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J) (h₂ : l ≤ k) :
D k I ≤ D l J := by
revert l; induction' k with k ih <;> intro l h₂
- · rw [le_zero_iff] at h₂; rw [h₂, derived_series_of_ideal_zero]; exact h₁
- · have h : l = k.succ ∨ l ≤ k := by rwa [le_iff_eq_or_lt, Nat.lt_succ_iff] at h₂
+ · rw [le_zero_iff] at h₂ ; rw [h₂, derived_series_of_ideal_zero]; exact h₁
+ · have h : l = k.succ ∨ l ≤ k := by rwa [le_iff_eq_or_lt, Nat.lt_succ_iff] at h₂
cases h
· rw [h, derived_series_of_ideal_succ, derived_series_of_ideal_succ]
exact LieSubmodule.mono_lie _ _ _ _ (ih (le_refl k)) (ih (le_refl k))
@@ -128,7 +128,7 @@ theorem derivedSeriesOfIdeal_add_le_add (J : LieIdeal R L) (k l : ℕ) :
monotone' := fun I J h => LieSubmodule.mono_lie I J I J h h }
have h₁ : ∀ I J : LieIdeal R L, D₁ (I ⊔ J) ≤ D₁ I ⊔ J := by
simp [LieSubmodule.lie_le_right, LieSubmodule.lie_le_left, le_sup_of_le_right]
- rw [← D₁.iterate_sup_le_sup_iff] at h₁
+ rw [← D₁.iterate_sup_le_sup_iff] at h₁
exact h₁ k l I J
#align lie_algebra.derived_series_of_ideal_add_le_add LieAlgebra.derivedSeriesOfIdeal_add_le_add
@@ -159,7 +159,7 @@ theorem derivedSeries_eq_derivedSeriesOfIdeal_comap (k : ℕ) :
by
induction' k with k ih
· simp only [derived_series_def, comap_incl_self, derived_series_of_ideal_zero]
- · simp only [derived_series_def, derived_series_of_ideal_succ] at ih⊢; rw [ih]
+ · simp only [derived_series_def, derived_series_of_ideal_succ] at ih ⊢; rw [ih]
exact
comap_bracket_incl_of_le I (derived_series_of_ideal_le_self I k)
(derived_series_of_ideal_le_self I k)
@@ -180,9 +180,9 @@ theorem derivedSeries_eq_bot_iff (k : ℕ) :
theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedSeries R I k = ⊥)
(hJ : derivedSeries R J l = ⊥) : derivedSeries R (↥(I + J)) (k + l) = ⊥ :=
by
- rw [LieIdeal.derivedSeries_eq_bot_iff] at hI hJ⊢
+ rw [LieIdeal.derivedSeries_eq_bot_iff] at hI hJ ⊢
rw [← le_bot_iff]
- let D := derived_series_of_ideal R L; change D k I = ⊥ at hI; change D l J = ⊥ at hJ
+ let D := derived_series_of_ideal R L; change D k I = ⊥ at hI ; change D l J = ⊥ at hJ
calc
D (k + l) (I + J) ≤ D k I + D l J := derived_series_of_ideal_add_le_add I J k l
_ ≤ ⊥ := by rw [hI, hJ]; simp
@@ -193,7 +193,7 @@ theorem derivedSeries_map_le (k : ℕ) : (derivedSeries R L' k).map f ≤ derive
by
induction' k with k ih
· simp only [derived_series_def, derived_series_of_ideal_zero, le_top]
- · simp only [derived_series_def, derived_series_of_ideal_succ] at ih⊢
+ · simp only [derived_series_def, derived_series_of_ideal_succ] at ih ⊢
exact le_trans (map_bracket_le f) (LieSubmodule.mono_lie _ _ _ _ ih ih)
#align lie_ideal.derived_series_map_le LieIdeal.derivedSeries_map_le
@@ -289,10 +289,10 @@ def radical :=
instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) :=
by
have hwf := LieSubmodule.wellFounded_of_noetherian R L L
- rw [← CompleteLattice.isSupClosedCompact_iff_wellFounded] at hwf
+ rw [← CompleteLattice.isSupClosedCompact_iff_wellFounded] at hwf
refine' hwf { I : LieIdeal R L | IsSolvable R I } ⟨⊥, _⟩ fun I hI J hJ => _
· exact LieAlgebra.isSolvableBot R L
- · apply LieAlgebra.isSolvableAdd R L; exacts[hI, hJ]
+ · apply LieAlgebra.isSolvableAdd R L; exacts [hI, hJ]
#align lie_algebra.radical_is_solvable LieAlgebra.radicalIsSolvable
/-- The `→` direction of this lemma is actually true without the `is_noetherian` assumption. -/
@@ -331,7 +331,7 @@ theorem derived_series_of_derived_length_succ (I : LieIdeal R L) (k : ℕ) :
by
intro k₁ k₂ h₁₂ h₁
suffices derived_series_of_ideal R L k₂ I ≤ ⊥ by exact eq_bot_iff.mpr this
- change derived_series_of_ideal R L k₁ I = ⊥ at h₁; rw [← h₁]
+ change derived_series_of_ideal R L k₁ I = ⊥ at h₁ ; rw [← h₁]
exact derived_series_of_ideal_antitone I h₁₂
exact Nat.sInf_upward_closed_eq_succ_iff hs k
#align lie_algebra.derived_series_of_derived_length_succ LieAlgebra.derived_series_of_derived_length_succ
@@ -342,7 +342,7 @@ theorem derivedLength_eq_derivedLengthOfIdeal (I : LieIdeal R L) :
let s₁ := { k | derivedSeries R I k = ⊥ }
let s₂ := { k | derived_series_of_ideal R L k I = ⊥ }
change Inf s₁ = Inf s₂
- congr ; ext k; exact I.derived_series_eq_bot_iff k
+ congr; ext k; exact I.derived_series_eq_bot_iff k
#align lie_algebra.derived_length_eq_derived_length_of_ideal LieAlgebra.derivedLength_eq_derivedLengthOfIdeal
variable {R L}
@@ -362,7 +362,7 @@ theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) : IsLieAbelian (derived
dsimp only [derived_abelian_of_ideal]
cases' h : derived_length_of_ideal R L I with k
· exact is_lie_abelian_bot R L
- · rw [derived_series_of_derived_length_succ] at h; exact h.1
+ · rw [derived_series_of_derived_length_succ] at h ; exact h.1
#align lie_algebra.abelian_derived_abelian_of_ideal LieAlgebra.abelian_derivedAbelianOfIdeal
theorem derived_length_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
@@ -372,7 +372,7 @@ theorem derived_length_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
have hne : s ≠ ∅ := by
obtain ⟨k, hk⟩ := id hI
refine' Set.Nonempty.ne_empty ⟨k, _⟩
- rw [derived_series_def, LieIdeal.derivedSeries_eq_bot_iff] at hk; exact hk
+ rw [derived_series_def, LieIdeal.derivedSeries_eq_bot_iff] at hk ; exact hk
simp [hne]
#align lie_algebra.derived_length_zero LieAlgebra.derived_length_zero
@@ -381,7 +381,7 @@ theorem abelian_of_solvable_ideal_eq_bot_iff (I : LieIdeal R L) [h : IsSolvable
by
dsimp only [derived_abelian_of_ideal]
cases' h : derived_length_of_ideal R L I with k
- · rw [derived_length_zero] at h; rw [h]; rfl
+ · rw [derived_length_zero] at h ; rw [h]; rfl
· obtain ⟨h₁, h₂⟩ := (derived_series_of_derived_length_succ R L I k).mp h
have h₃ : I ≠ ⊥ := by intro contra; apply h₂; rw [contra]; apply derived_series_of_bot_eq_bot
change derived_series_of_ideal R L k I = ⊥ ↔ I = ⊥
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -96,15 +96,12 @@ theorem derivedSeriesOfIdeal_add (k l : ℕ) : D (k + l) I = D k (D l I) :=
theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J) (h₂ : l ≤ k) :
D k I ≤ D l J := by
revert l; induction' k with k ih <;> intro l h₂
- · rw [le_zero_iff] at h₂
- rw [h₂, derived_series_of_ideal_zero]
- exact h₁
+ · rw [le_zero_iff] at h₂; rw [h₂, derived_series_of_ideal_zero]; exact h₁
· have h : l = k.succ ∨ l ≤ k := by rwa [le_iff_eq_or_lt, Nat.lt_succ_iff] at h₂
cases h
· rw [h, derived_series_of_ideal_succ, derived_series_of_ideal_succ]
exact LieSubmodule.mono_lie _ _ _ _ (ih (le_refl k)) (ih (le_refl k))
- · rw [derived_series_of_ideal_succ]
- exact le_trans (LieSubmodule.lie_le_left _ _) (ih h)
+ · rw [derived_series_of_ideal_succ]; exact le_trans (LieSubmodule.lie_le_left _ _) (ih h)
#align lie_algebra.derived_series_of_ideal_le LieAlgebra.derivedSeriesOfIdeal_le
theorem derivedSeriesOfIdeal_succ_le (k : ℕ) : D (k + 1) I ≤ D k I :=
@@ -135,10 +132,8 @@ theorem derivedSeriesOfIdeal_add_le_add (J : LieIdeal R L) (k l : ℕ) :
exact h₁ k l I J
#align lie_algebra.derived_series_of_ideal_add_le_add LieAlgebra.derivedSeriesOfIdeal_add_le_add
-theorem derived_series_of_bot_eq_bot (k : ℕ) : derivedSeriesOfIdeal R L k ⊥ = ⊥ :=
- by
- rw [eq_bot_iff]
- exact derived_series_of_ideal_le_self ⊥ k
+theorem derived_series_of_bot_eq_bot (k : ℕ) : derivedSeriesOfIdeal R L k ⊥ = ⊥ := by
+ rw [eq_bot_iff]; exact derived_series_of_ideal_le_self ⊥ k
#align lie_algebra.derived_series_of_bot_eq_bot LieAlgebra.derived_series_of_bot_eq_bot
theorem abelian_iff_derived_one_eq_bot : IsLieAbelian I ↔ derivedSeriesOfIdeal R L 1 I = ⊥ := by
@@ -164,8 +159,7 @@ theorem derivedSeries_eq_derivedSeriesOfIdeal_comap (k : ℕ) :
by
induction' k with k ih
· simp only [derived_series_def, comap_incl_self, derived_series_of_ideal_zero]
- · simp only [derived_series_def, derived_series_of_ideal_succ] at ih⊢
- rw [ih]
+ · simp only [derived_series_def, derived_series_of_ideal_succ] at ih⊢; rw [ih]
exact
comap_bracket_incl_of_le I (derived_series_of_ideal_le_self I k)
(derived_series_of_ideal_le_self I k)
@@ -191,9 +185,7 @@ theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedS
let D := derived_series_of_ideal R L; change D k I = ⊥ at hI; change D l J = ⊥ at hJ
calc
D (k + l) (I + J) ≤ D k I + D l J := derived_series_of_ideal_add_le_add I J k l
- _ ≤ ⊥ := by
- rw [hI, hJ]
- simp
+ _ ≤ ⊥ := by rw [hI, hJ]; simp
#align lie_ideal.derived_series_add_eq_bot LieIdeal.derivedSeries_add_eq_bot
@@ -300,8 +292,7 @@ instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) :=
rw [← CompleteLattice.isSupClosedCompact_iff_wellFounded] at hwf
refine' hwf { I : LieIdeal R L | IsSolvable R I } ⟨⊥, _⟩ fun I hI J hJ => _
· exact LieAlgebra.isSolvableBot R L
- · apply LieAlgebra.isSolvableAdd R L
- exacts[hI, hJ]
+ · apply LieAlgebra.isSolvableAdd R L; exacts[hI, hJ]
#align lie_algebra.radical_is_solvable LieAlgebra.radicalIsSolvable
/-- The `→` direction of this lemma is actually true without the `is_noetherian` assumption. -/
@@ -335,14 +326,12 @@ theorem derived_series_of_derived_length_succ (I : LieIdeal R L) (k : ℕ) :
IsLieAbelian (derivedSeriesOfIdeal R L k I) ∧ derivedSeriesOfIdeal R L k I ≠ ⊥ :=
by
rw [abelian_iff_derived_succ_eq_bot]
- let s := { k | derived_series_of_ideal R L k I = ⊥ }
- change Inf s = k + 1 ↔ k + 1 ∈ s ∧ k ∉ s
+ let s := { k | derived_series_of_ideal R L k I = ⊥ }; change Inf s = k + 1 ↔ k + 1 ∈ s ∧ k ∉ s
have hs : ∀ k₁ k₂ : ℕ, k₁ ≤ k₂ → k₁ ∈ s → k₂ ∈ s :=
by
intro k₁ k₂ h₁₂ h₁
suffices derived_series_of_ideal R L k₂ I ≤ ⊥ by exact eq_bot_iff.mpr this
- change derived_series_of_ideal R L k₁ I = ⊥ at h₁
- rw [← h₁]
+ change derived_series_of_ideal R L k₁ I = ⊥ at h₁; rw [← h₁]
exact derived_series_of_ideal_antitone I h₁₂
exact Nat.sInf_upward_closed_eq_succ_iff hs k
#align lie_algebra.derived_series_of_derived_length_succ LieAlgebra.derived_series_of_derived_length_succ
@@ -373,20 +362,17 @@ theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) : IsLieAbelian (derived
dsimp only [derived_abelian_of_ideal]
cases' h : derived_length_of_ideal R L I with k
· exact is_lie_abelian_bot R L
- · rw [derived_series_of_derived_length_succ] at h
- exact h.1
+ · rw [derived_series_of_derived_length_succ] at h; exact h.1
#align lie_algebra.abelian_derived_abelian_of_ideal LieAlgebra.abelian_derivedAbelianOfIdeal
theorem derived_length_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
derivedLengthOfIdeal R L I = 0 ↔ I = ⊥ :=
by
- let s := { k | derived_series_of_ideal R L k I = ⊥ }
- change Inf s = 0 ↔ _
+ let s := { k | derived_series_of_ideal R L k I = ⊥ }; change Inf s = 0 ↔ _
have hne : s ≠ ∅ := by
obtain ⟨k, hk⟩ := id hI
refine' Set.Nonempty.ne_empty ⟨k, _⟩
- rw [derived_series_def, LieIdeal.derivedSeries_eq_bot_iff] at hk
- exact hk
+ rw [derived_series_def, LieIdeal.derivedSeries_eq_bot_iff] at hk; exact hk
simp [hne]
#align lie_algebra.derived_length_zero LieAlgebra.derived_length_zero
@@ -395,15 +381,9 @@ theorem abelian_of_solvable_ideal_eq_bot_iff (I : LieIdeal R L) [h : IsSolvable
by
dsimp only [derived_abelian_of_ideal]
cases' h : derived_length_of_ideal R L I with k
- · rw [derived_length_zero] at h
- rw [h]
- rfl
+ · rw [derived_length_zero] at h; rw [h]; rfl
· obtain ⟨h₁, h₂⟩ := (derived_series_of_derived_length_succ R L I k).mp h
- have h₃ : I ≠ ⊥ := by
- intro contra
- apply h₂
- rw [contra]
- apply derived_series_of_bot_eq_bot
+ have h₃ : I ≠ ⊥ := by intro contra; apply h₂; rw [contra]; apply derived_series_of_bot_eq_bot
change derived_series_of_ideal R L k I = ⊥ ↔ I = ⊥
constructor <;> contradiction
#align lie_algebra.abelian_of_solvable_ideal_eq_bot_iff LieAlgebra.abelian_of_solvable_ideal_eq_bot_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -290,7 +290,7 @@ instance (priority := 100) ofAbelianIsSolvable [IsLieAbelian L] : IsSolvable R L
/-- The (solvable) radical of Lie algebra is the `Sup` of all solvable ideals. -/
def radical :=
- supₛ { I : LieIdeal R L | IsSolvable R I }
+ sSup { I : LieIdeal R L | IsSolvable R I }
#align lie_algebra.radical LieAlgebra.radical
/-- The radical of a Noetherian Lie algebra is solvable. -/
@@ -307,12 +307,12 @@ instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) :=
/-- The `→` direction of this lemma is actually true without the `is_noetherian` assumption. -/
theorem LieIdeal.solvable_iff_le_radical [IsNoetherian R L] (I : LieIdeal R L) :
IsSolvable R I ↔ I ≤ radical R L :=
- ⟨fun h => le_supₛ h, fun h => leSolvableIdealSolvable h inferInstance⟩
+ ⟨fun h => le_sSup h, fun h => leSolvableIdealSolvable h inferInstance⟩
#align lie_algebra.lie_ideal.solvable_iff_le_radical LieAlgebra.LieIdeal.solvable_iff_le_radical
theorem center_le_radical : center R L ≤ radical R L :=
have h : IsSolvable R (center R L) := by infer_instance
- le_supₛ h
+ le_sSup h
#align lie_algebra.center_le_radical LieAlgebra.center_le_radical
/-- Given a solvable Lie ideal `I` with derived series `I = D₀ ≥ D₁ ≥ ⋯ ≥ Dₖ = ⊥`, this is the
@@ -320,7 +320,7 @@ natural number `k` (the number of inclusions).
For a non-solvable ideal, the value is 0. -/
noncomputable def derivedLengthOfIdeal (I : LieIdeal R L) : ℕ :=
- infₛ { k | derivedSeriesOfIdeal R L k I = ⊥ }
+ sInf { k | derivedSeriesOfIdeal R L k I = ⊥ }
#align lie_algebra.derived_length_of_ideal LieAlgebra.derivedLengthOfIdeal
/-- The derived length of a Lie algebra is the derived length of its 'top' Lie ideal.
@@ -344,7 +344,7 @@ theorem derived_series_of_derived_length_succ (I : LieIdeal R L) (k : ℕ) :
change derived_series_of_ideal R L k₁ I = ⊥ at h₁
rw [← h₁]
exact derived_series_of_ideal_antitone I h₁₂
- exact Nat.infₛ_upward_closed_eq_succ_iff hs k
+ exact Nat.sInf_upward_closed_eq_succ_iff hs k
#align lie_algebra.derived_series_of_derived_length_succ LieAlgebra.derived_series_of_derived_length_succ
theorem derivedLength_eq_derivedLengthOfIdeal (I : LieIdeal R L) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/3b267e70a936eebb21ab546f49a8df34dd300b25
@@ -298,7 +298,7 @@ instance radicalIsSolvable [IsNoetherian R L] : IsSolvable R (radical R L) :=
by
have hwf := LieSubmodule.wellFounded_of_noetherian R L L
rw [← CompleteLattice.isSupClosedCompact_iff_wellFounded] at hwf
- refine' hwf { I : LieIdeal R L | is_solvable R I } ⟨⊥, _⟩ fun I hI J hJ => _
+ refine' hwf { I : LieIdeal R L | IsSolvable R I } ⟨⊥, _⟩ fun I hI J hJ => _
· exact LieAlgebra.isSolvableBot R L
· apply LieAlgebra.isSolvableAdd R L
exacts[hI, hJ]
@@ -350,7 +350,7 @@ theorem derived_series_of_derived_length_succ (I : LieIdeal R L) (k : ℕ) :
theorem derivedLength_eq_derivedLengthOfIdeal (I : LieIdeal R L) :
derivedLength R I = derivedLengthOfIdeal R L I :=
by
- let s₁ := { k | derived_series R I k = ⊥ }
+ let s₁ := { k | derivedSeries R I k = ⊥ }
let s₂ := { k | derived_series_of_ideal R L k I = ⊥ }
change Inf s₁ = Inf s₂
congr ; ext k; exact I.derived_series_eq_bot_iff k
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
LinearOrderedCommGroupWithZero
(#11716)
Reconstitute the file Algebra.Order.Monoid.WithZero
from three files:
Algebra.Order.Monoid.WithZero.Defs
Algebra.Order.Monoid.WithZero.Basic
Algebra.Order.WithZero
Avoid importing it in many files. Most uses were just to get le_zero_iff
to work on Nat
.
Before
After
@@ -89,7 +89,7 @@ theorem derivedSeriesOfIdeal_add (k l : ℕ) : D (k + l) I = D k (D l I) := by
theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J) (h₂ : l ≤ k) :
D k I ≤ D l J := by
revert l; induction' k with k ih <;> intro l h₂
- · rw [Nat.zero_eq, le_zero_iff] at h₂; rw [h₂, derivedSeriesOfIdeal_zero]; exact h₁
+ · rw [Nat.zero_eq, Nat.le_zero] at h₂; rw [h₂, derivedSeriesOfIdeal_zero]; exact h₁
· have h : l = k.succ ∨ l ≤ k := by rwa [le_iff_eq_or_lt, Nat.lt_succ_iff] at h₂
cases' h with h h
· rw [h, derivedSeriesOfIdeal_succ, derivedSeriesOfIdeal_succ]
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -37,9 +37,7 @@ lie algebra, derived series, derived length, solvable, radical
universe u v w w₁ w₂
variable (R : Type u) (L : Type v) (M : Type w) {L' : Type w₁}
-
variable [CommRing R] [LieRing L] [LieAlgebra R L] [LieRing L'] [LieAlgebra R L']
-
variable (I J : LieIdeal R L) {f : L' →ₗ⁅R⁆ L}
namespace LieAlgebra
@@ -121,7 +121,7 @@ theorem derivedSeriesOfIdeal_add_le_add (J : LieIdeal R L) (k l : ℕ) :
{ toFun := fun I => ⁅I, I⁆
monotone' := fun I J h => LieSubmodule.mono_lie I J I J h h }
have h₁ : ∀ I J : LieIdeal R L, D₁ (I ⊔ J) ≤ D₁ I ⊔ J := by
- simp [LieSubmodule.lie_le_right, LieSubmodule.lie_le_left, le_sup_of_le_right]
+ simp [D₁, LieSubmodule.lie_le_right, LieSubmodule.lie_le_left, le_sup_of_le_right]
rw [← D₁.iterate_sup_le_sup_iff] at h₁
exact h₁ k l I J
#align lie_algebra.derived_series_of_ideal_add_le_add LieAlgebra.derivedSeriesOfIdeal_add_le_add
@@ -363,7 +363,7 @@ theorem derivedLength_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
obtain ⟨k, hk⟩ := id hI
refine' Set.Nonempty.ne_empty ⟨k, _⟩
rw [derivedSeries_def, LieIdeal.derivedSeries_eq_bot_iff] at hk; exact hk
- simp [hne]
+ simp [s, hne]
#align lie_algebra.derived_length_zero LieAlgebra.derivedLength_zero
theorem abelian_of_solvable_ideal_eq_bot_iff (I : LieIdeal R L) [h : IsSolvable R I] :
Note: the proof (due to Zassenhaus) makes no assumption about the characteristic of the coefficients.
@@ -351,7 +351,7 @@ theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) :
IsLieAbelian (derivedAbelianOfIdeal I) := by
dsimp only [derivedAbelianOfIdeal]
cases' h : derivedLengthOfIdeal R L I with k
- · exact isLieAbelian_bot R L
+ · infer_instance
· rw [derivedSeries_of_derivedLength_succ] at h; exact h.1
#align lie_algebra.abelian_derived_abelian_of_ideal LieAlgebra.abelian_derivedAbelianOfIdeal
Submodule.ofLe
to Submodule.inclusion
(#8470)
This matches Set.inclusion
, Subring.inclusion
, Subalgebra.inclusion
, etc.
Also renames the homOfLe
spellings in Algebra/Lie
to match.
Note that we leave LieSubalgebra.ofLe
, as this is a completely different statement!
As requested by @alreadydone.
@@ -254,7 +254,7 @@ theorem solvable_iff_equiv_solvable (e : L' ≃ₗ⁅R⁆ L) : IsSolvable R L'
theorem le_solvable_ideal_solvable {I J : LieIdeal R L} (h₁ : I ≤ J) (_ : IsSolvable R J) :
IsSolvable R I :=
- (LieIdeal.homOfLe_injective h₁).lieAlgebra_isSolvable
+ (LieIdeal.inclusion_injective h₁).lieAlgebra_isSolvable
#align lie_algebra.le_solvable_ideal_solvable LieAlgebra.le_solvable_ideal_solvable
variable (R L)
@@ -291,6 +291,13 @@ theorem center_le_radical : center R L ≤ radical R L :=
le_sSup h
#align lie_algebra.center_le_radical LieAlgebra.center_le_radical
+instance [IsSolvable R L] : IsSolvable R (⊤ : LieSubalgebra R L) := by
+ rwa [solvable_iff_equiv_solvable LieSubalgebra.topEquiv]
+
+@[simp] lemma radical_eq_top_of_isSolvable [IsSolvable R L] :
+ radical R L = ⊤ := by
+ rw [eq_top_iff]; exact le_sSup <| inferInstanceAs (IsSolvable R (⊤ : LieIdeal R L))
+
/-- Given a solvable Lie ideal `I` with derived series `I = D₀ ≥ D₁ ≥ ⋯ ≥ Dₖ = ⊥`, this is the
natural number `k` (the number of inclusions).
@@ -2,16 +2,13 @@
Copyright (c) 2021 Oliver Nash. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Oliver Nash
-
-! This file was ported from Lean 3 source module algebra.lie.solvable
-! leanprover-community/mathlib commit a50170a88a47570ed186b809ca754110590f9476
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Lie.Abelian
import Mathlib.Algebra.Lie.IdealOperations
import Mathlib.Order.Hom.Basic
+#align_import algebra.lie.solvable from "leanprover-community/mathlib"@"a50170a88a47570ed186b809ca754110590f9476"
+
/-!
# Solvable Lie algebras
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -94,7 +94,7 @@ theorem derivedSeriesOfIdeal_add (k l : ℕ) : D (k + l) I = D k (D l I) := by
theorem derivedSeriesOfIdeal_le {I J : LieIdeal R L} {k l : ℕ} (h₁ : I ≤ J) (h₂ : l ≤ k) :
D k I ≤ D l J := by
revert l; induction' k with k ih <;> intro l h₂
- · rw [Nat.zero_eq, le_zero_iff] at h₂ ; rw [h₂, derivedSeriesOfIdeal_zero]; exact h₁
+ · rw [Nat.zero_eq, le_zero_iff] at h₂; rw [h₂, derivedSeriesOfIdeal_zero]; exact h₁
· have h : l = k.succ ∨ l ≤ k := by rwa [le_iff_eq_or_lt, Nat.lt_succ_iff] at h₂
cases' h with h h
· rw [h, derivedSeriesOfIdeal_succ, derivedSeriesOfIdeal_succ]
@@ -175,7 +175,7 @@ theorem derivedSeries_add_eq_bot {k l : ℕ} {I J : LieIdeal R L} (hI : derivedS
(hJ : derivedSeries R J l = ⊥) : derivedSeries R (I + J) (k + l) = ⊥ := by
rw [LieIdeal.derivedSeries_eq_bot_iff] at hI hJ ⊢
rw [← le_bot_iff]
- let D := derivedSeriesOfIdeal R L; change D k I = ⊥ at hI ; change D l J = ⊥ at hJ
+ let D := derivedSeriesOfIdeal R L; change D k I = ⊥ at hI; change D l J = ⊥ at hJ
calc
D (k + l) (I + J) ≤ D k I + D l J := derivedSeriesOfIdeal_add_le_add I J k l
_ ≤ ⊥ := by rw [hI, hJ]; simp
@@ -318,7 +318,7 @@ theorem derivedSeries_of_derivedLength_succ (I : LieIdeal R L) (k : ℕ) :
have hs : ∀ k₁ k₂ : ℕ, k₁ ≤ k₂ → k₁ ∈ s → k₂ ∈ s := by
intro k₁ k₂ h₁₂ h₁
suffices derivedSeriesOfIdeal R L k₂ I ≤ ⊥ by exact eq_bot_iff.mpr this
- change derivedSeriesOfIdeal R L k₁ I = ⊥ at h₁ ; rw [← h₁]
+ change derivedSeriesOfIdeal R L k₁ I = ⊥ at h₁; rw [← h₁]
exact derivedSeriesOfIdeal_antitone I h₁₂
exact Nat.sInf_upward_closed_eq_succ_iff hs k
#align lie_algebra.derived_series_of_derived_length_succ LieAlgebra.derivedSeries_of_derivedLength_succ
@@ -348,7 +348,7 @@ theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) :
dsimp only [derivedAbelianOfIdeal]
cases' h : derivedLengthOfIdeal R L I with k
· exact isLieAbelian_bot R L
- · rw [derivedSeries_of_derivedLength_succ] at h ; exact h.1
+ · rw [derivedSeries_of_derivedLength_succ] at h; exact h.1
#align lie_algebra.abelian_derived_abelian_of_ideal LieAlgebra.abelian_derivedAbelianOfIdeal
theorem derivedLength_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
@@ -358,7 +358,7 @@ theorem derivedLength_zero (I : LieIdeal R L) [hI : IsSolvable R I] :
have hne : s ≠ ∅ := by
obtain ⟨k, hk⟩ := id hI
refine' Set.Nonempty.ne_empty ⟨k, _⟩
- rw [derivedSeries_def, LieIdeal.derivedSeries_eq_bot_iff] at hk ; exact hk
+ rw [derivedSeries_def, LieIdeal.derivedSeries_eq_bot_iff] at hk; exact hk
simp [hne]
#align lie_algebra.derived_length_zero LieAlgebra.derivedLength_zero
The unported dependencies are