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

tactic: dsimp only [derivedAbelianOfIdeal]
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
h : IsSolvable R { x // x ∈ ↑I }
⊢ derivedAbelianOfIdeal I = ⊥ ↔ I = ⊥

tactic: split
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
h : IsSolvable R { x // x ∈ ↑I }
⊢ (match derivedLengthOfIdeal R L I with
      | 0 => ⊥
      | Nat.succ k => derivedSeriesOfIdeal R L k I) =
      ⊥ ↔
    I = ⊥

tactic: rename_i h
state_before: case h_1
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
h : IsSolvable R { x // x ∈ ↑I }
x✝ : ℕ
heq✝ : derivedLengthOfIdeal R L I = 0
⊢ ⊥ = ⊥ ↔ I = ⊥

tactic: rw [derivedLength_zero] at h
state_before: case h_1
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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ : ℕ
h : derivedLengthOfIdeal R L I = 0
⊢ ⊥ = ⊥ ↔ I = ⊥

tactic: rw [h]
state_before: case h_1
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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ : ℕ
h : I = ⊥
⊢ ⊥ = ⊥ ↔ I = ⊥

tactic: rename_i k h
state_before: case h_2
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
h : IsSolvable R { x // x ∈ ↑I }
x✝ k✝ : ℕ
heq✝ : derivedLengthOfIdeal R L I = Nat.succ k✝
⊢ derivedSeriesOfIdeal R L k✝ I = ⊥ ↔ I = ⊥

tactic: obtain ⟨_, h₂⟩ := (derivedSeries_of_derivedLength_succ R L I k).mp h
state_before: case h_2
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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ k : ℕ
h : derivedLengthOfIdeal R L I = Nat.succ k
⊢ derivedSeriesOfIdeal R L k I = ⊥ ↔ I = ⊥

tactic: have h₃ : I ≠ ⊥ := by intro contra; apply h₂; rw [contra]; apply derivedSeries_of_bot_eq_bot
state_before: case h_2.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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ k : ℕ
h : derivedLengthOfIdeal R L I = Nat.succ k
left✝ : IsLieAbelian { x // x ∈ ↑(derivedSeriesOfIdeal R L k I) }
h₂ : derivedSeriesOfIdeal R L k I ≠ ⊥
⊢ derivedSeriesOfIdeal R L k I = ⊥ ↔ I = ⊥

tactic: simp only [h₂, h₃]
state_before: case h_2.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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ k : ℕ
h : derivedLengthOfIdeal R L I = Nat.succ k
left✝ : IsLieAbelian { x // x ∈ ↑(derivedSeriesOfIdeal R L k I) }
h₂ : derivedSeriesOfIdeal R L k I ≠ ⊥
h₃ : I ≠ ⊥
⊢ derivedSeriesOfIdeal R L k I = ⊥ ↔ I = ⊥

tactic: intro contra
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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ k : ℕ
h : derivedLengthOfIdeal R L I = Nat.succ k
left✝ : IsLieAbelian { x // x ∈ ↑(derivedSeriesOfIdeal R L k I) }
h₂ : derivedSeriesOfIdeal R L k I ≠ ⊥
⊢ I ≠ ⊥

tactic: apply h₂
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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ k : ℕ
h : derivedLengthOfIdeal R L I = Nat.succ k
left✝ : IsLieAbelian { x // x ∈ ↑(derivedSeriesOfIdeal R L k I) }
h₂ : derivedSeriesOfIdeal R L k I ≠ ⊥
contra : I = ⊥
⊢ False

tactic: rw [contra]
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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ k : ℕ
h : derivedLengthOfIdeal R L I = Nat.succ k
left✝ : IsLieAbelian { x // x ∈ ↑(derivedSeriesOfIdeal R L k I) }
h₂ : derivedSeriesOfIdeal R L k I ≠ ⊥
contra : I = ⊥
⊢ derivedSeriesOfIdeal R L k I = ⊥

tactic: apply derivedSeries_of_bot_eq_bot
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
h✝ : IsSolvable R { x // x ∈ ↑I }
x✝ k : ℕ
h : derivedLengthOfIdeal R L I = Nat.succ k
left✝ : IsLieAbelian { x // x ∈ ↑(derivedSeriesOfIdeal R L k I) }
h₂ : derivedSeriesOfIdeal R L k I ≠ ⊥
contra : I = ⊥
⊢ derivedSeriesOfIdeal R L k ⊥ = ⊥