Theorem: LieAlgebra.derivedLength_zero
File: Mathlib/Algebra/Lie/Solvable.lean

tactic: let s := { k | derivedSeriesOfIdeal R L k I = ⊥ }
state_before: R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I✝ J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
I : LieIdeal R L
hI : IsSolvable R { x // x ∈ ↑I }
⊢ derivedLengthOfIdeal R L I = 0 ↔ I = ⊥

tactic: change sInf s = 0 ↔ _
state_before: R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I✝ J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
I : LieIdeal R L
hI : IsSolvable R { x // x ∈ ↑I }
s : Set ℕ := {k | derivedSeriesOfIdeal R L k I = ⊥}
⊢ derivedLengthOfIdeal R L I = 0 ↔ I = ⊥

tactic: 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
state_before: R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I✝ J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
I : LieIdeal R L
hI : IsSolvable R { x // x ∈ ↑I }
s : Set ℕ := {k | derivedSeriesOfIdeal R L k I = ⊥}
⊢ sInf s = 0 ↔ I = ⊥

tactic: simp [hne]
state_before: R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I✝ J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
I : LieIdeal R L
hI : IsSolvable R { x // x ∈ ↑I }
s : Set ℕ := {k | derivedSeriesOfIdeal R L k I = ⊥}
hne : s ≠ ∅
⊢ sInf s = 0 ↔ I = ⊥

tactic: obtain ⟨k, hk⟩ := id hI
state_before: R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I✝ J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
I : LieIdeal R L
hI : IsSolvable R { x // x ∈ ↑I }
s : Set ℕ := {k | derivedSeriesOfIdeal R L k I = ⊥}
⊢ s ≠ ∅

tactic: refine' Set.Nonempty.ne_empty ⟨k, _⟩
state_before: case mk.intro
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I✝ J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
I : LieIdeal R L
hI : IsSolvable R { x // x ∈ ↑I }
s : Set ℕ := {k | derivedSeriesOfIdeal R L k I = ⊥}
k : ℕ
hk : derivedSeries R { x // x ∈ ↑I } k = ⊥
⊢ s ≠ ∅

tactic: rw [derivedSeries_def, LieIdeal.derivedSeries_eq_bot_iff] at hk
state_before: case mk.intro
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I✝ J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
I : LieIdeal R L
hI : IsSolvable R { x // x ∈ ↑I }
s : Set ℕ := {k | derivedSeriesOfIdeal R L k I = ⊥}
k : ℕ
hk : derivedSeries R { x // x ∈ ↑I } k = ⊥
⊢ k ∈ s

tactic: exact hk
state_before: case mk.intro
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I✝ J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
I : LieIdeal R L
hI : IsSolvable R { x // x ∈ ↑I }
s : Set ℕ := {k | derivedSeriesOfIdeal R L k I = ⊥}
k : ℕ
hk : derivedSeriesOfIdeal R L k I = ⊥
⊢ k ∈ s