-- Mathlib/Algebra/Lie/OfAssociative.lean
lemma LieModule.toEnd_pow_lie (x y : L) (z : M) (n : ℕ) :
    ((φ x) ^ n) ⁅y, z⁆ =
      ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L x) ^ ij.1) y, ((φ x) ^ ij.2) z⁆

Proof state:
case succ
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
⊢ (φ x ^ (n + 1)) ⁅y, z⁆ =
    ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ (ij.2 + 1)) z⁆ +
      ∑ ij ∈ antidiagonal n, n.choose ij.2 • ⁅((ad R L) x ^ (ij.1 + 1)) y, (φ x ^ ij.2) z⁆

Tactic:
simp only [pow_succ', LinearMap.mul_apply, ih, map_sum, map_nsmul,
  toEnd_lie, nsmul_add, sum_add_distrib]

Result:
case succ
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
⊢ ∑ x_1 ∈ antidiagonal n, n.choose x_1.1 • ⁅((ad R L) x) (((ad R L) x ^ x_1.1) y), (φ x ^ x_1.2) z⁆ +
      ∑ x_1 ∈ antidiagonal n, n.choose x_1.1 • ⁅((ad R L) x ^ x_1.1) y, (φ x) ((φ x ^ x_1.2) z)⁆ =
    ∑ x_1 ∈ antidiagonal n, n.choose x_1.1 • ⁅((ad R L) x ^ x_1.1) y, (φ x) ((φ x ^ x_1.2) z)⁆ +
      ∑ x_1 ∈ antidiagonal n, n.choose x_1.2 • ⁅((ad R L) x) (((ad R L) x ^ x_1.1) y), (φ x ^ x_1.2) z⁆

Proof state:
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
⊢ (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆

Tactic:
induction n with
| zero => simp
| succ n ih =>
  rw [Finset.sum_antidiagonal_choose_succ_nsmul
    (fun i j ↦ ⁅((ad R L x) ^ i) y, ((φ x) ^ j) z⁆) n]
  simp only [pow_succ', LinearMap.mul_apply, ih, map_sum, map_nsmul,
    toEnd_lie, nsmul_add, sum_add_distrib]
  rw [add_comm, add_left_cancel_iff, sum_congr rfl]
  rintro ⟨i, j⟩ hij
  rw [mem_antidiagonal] at hij
  rw [Nat.choose_symm_of_eq_add hij.symm]

Result:
no goals

Proof state:
case succ
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
⊢ ∀ x_1 ∈ antidiagonal n,
    n.choose x_1.1 • ⁅((ad R L) x) (((ad R L) x ^ x_1.1) y), (φ x ^ x_1.2) z⁆ =
      n.choose x_1.2 • ⁅((ad R L) x) (((ad R L) x ^ x_1.1) y), (φ x ^ x_1.2) z⁆

Tactic:
rintro ⟨i, j⟩ hij

Result:
case succ.mk
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
i j : ℕ
hij : (i, j) ∈ antidiagonal n
⊢ n.choose (i, j).1 • ⁅((ad R L) x) (((ad R L) x ^ (i, j).1) y), (φ x ^ (i, j).2) z⁆ =
    n.choose (i, j).2 • ⁅((ad R L) x) (((ad R L) x ^ (i, j).1) y), (φ x ^ (i, j).2) z⁆

Proof state:
case zero
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
⊢ (φ x ^ 0) ⁅y, z⁆ = ∑ ij ∈ antidiagonal 0, Nat.choose 0 ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆

Tactic:
simp

Result:
no goals

Proof state:
case succ.mk
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
i j : ℕ
hij : (i, j).1 + (i, j).2 = n
⊢ n.choose (i, j).1 • ⁅((ad R L) x) (((ad R L) x ^ (i, j).1) y), (φ x ^ (i, j).2) z⁆ =
    n.choose (i, j).2 • ⁅((ad R L) x) (((ad R L) x ^ (i, j).1) y), (φ x ^ (i, j).2) z⁆

Tactic:
rw [Nat.choose_symm_of_eq_add hij.symm]

Result:
no goals

Proof state:
case succ.mk
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
i j : ℕ
hij : (i, j) ∈ antidiagonal n
⊢ n.choose (i, j).1 • ⁅((ad R L) x) (((ad R L) x ^ (i, j).1) y), (φ x ^ (i, j).2) z⁆ =
    n.choose (i, j).2 • ⁅((ad R L) x) (((ad R L) x ^ (i, j).1) y), (φ x ^ (i, j).2) z⁆

Tactic:
rw [mem_antidiagonal] at hij

Result:
case succ.mk
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
i j : ℕ
hij : (i, j).1 + (i, j).2 = n
⊢ n.choose (i, j).1 • ⁅((ad R L) x) (((ad R L) x ^ (i, j).1) y), (φ x ^ (i, j).2) z⁆ =
    n.choose (i, j).2 • ⁅((ad R L) x) (((ad R L) x ^ (i, j).1) y), (φ x ^ (i, j).2) z⁆

Proof state:
case succ
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
⊢ ∑ x_1 ∈ antidiagonal n, n.choose x_1.1 • ⁅((ad R L) x) (((ad R L) x ^ x_1.1) y), (φ x ^ x_1.2) z⁆ +
      ∑ x_1 ∈ antidiagonal n, n.choose x_1.1 • ⁅((ad R L) x ^ x_1.1) y, (φ x) ((φ x ^ x_1.2) z)⁆ =
    ∑ x_1 ∈ antidiagonal n, n.choose x_1.1 • ⁅((ad R L) x ^ x_1.1) y, (φ x) ((φ x ^ x_1.2) z)⁆ +
      ∑ x_1 ∈ antidiagonal n, n.choose x_1.2 • ⁅((ad R L) x) (((ad R L) x ^ x_1.1) y), (φ x ^ x_1.2) z⁆

Tactic:
rw [add_comm, add_left_cancel_iff, sum_congr rfl]

Result:
case succ
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
x y : L
z : M
n : ℕ
ih : (φ x ^ n) ⁅y, z⁆ = ∑ ij ∈ antidiagonal n, n.choose ij.1 • ⁅((ad R L) x ^ ij.1) y, (φ x ^ ij.2) z⁆
⊢ ∀ x_1 ∈ antidiagonal n,
    n.choose x_1.1 • ⁅((ad R L) x) (((ad R L) x ^ x_1.1) y), (φ x ^ x_1.2) z⁆ =
      n.choose x_1.2 • ⁅((ad R L) x) (((ad R L) x ^ x_1.1) y), (φ x ^ x_1.2) z⁆