Theorem: Commute.pow_dvd_add_pow_of_pow_eq_zero_right
File: Mathlib/Algebra/Ring/Divisibility/Lemmas.lean

tactic: rw [h_comm.add_pow']
state_before: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
⊢ x ^ m ∣ (x + y) ^ p
state_after: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
⊢ x ^ m ∣ ∑ m ∈ Finset.antidiagonal p, p.choose m.1 • (x ^ m.1 * y ^ m.2)

tactic: refine Finset.dvd_sum fun ⟨i, j⟩ hij ↦ ?_
state_before: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
⊢ x ^ m ∣ ∑ m ∈ Finset.antidiagonal p, p.choose m.1 • (x ^ m.1 * y ^ m.2)
state_after: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : (i, j) ∈ Finset.antidiagonal p
⊢ x ^ m ∣ p.choose (i, j).1 • (x ^ (i, j).1 * y ^ (i, j).2)

tactic: replace hij : i + j = p := by simpa using hij
state_before: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : (i, j) ∈ Finset.antidiagonal p
⊢ x ^ m ∣ p.choose (i, j).1 • (x ^ (i, j).1 * y ^ (i, j).2)
state_after: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
⊢ x ^ m ∣ p.choose (i, j).1 • (x ^ (i, j).1 * y ^ (i, j).2)

tactic: apply dvd_nsmul_of_dvd
state_before: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
⊢ x ^ m ∣ p.choose (i, j).1 • (x ^ (i, j).1 * y ^ (i, j).2)
state_after: case h
R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
⊢ x ^ m ∣ x ^ (i, j).1 * y ^ (i, j).2

tactic: rcases le_or_lt m i with (hi : m ≤ i) | (hi : i + 1 ≤ m)
state_before: case h
R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
⊢ x ^ m ∣ x ^ (i, j).1 * y ^ (i, j).2
state_after: case h.inl
R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
hi : m ≤ i
⊢ x ^ m ∣ x ^ (i, j).1 * y ^ (i, j).2

case h.inr
R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
hi : i + 1 ≤ m
⊢ x ^ m ∣ x ^ (i, j).1 * y ^ (i, j).2

tactic: simpa using hij
state_before: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : (i, j) ∈ Finset.antidiagonal p
⊢ i + j = p
state_after: no goals

tactic: exact dvd_mul_of_dvd_left (pow_dvd_pow x hi) _
state_before: case h.inl
R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
hi : m ≤ i
⊢ x ^ m ∣ x ^ (i, j).1 * y ^ (i, j).2
state_after: no goals

tactic: simp [pow_eq_zero_of_le (by omega : n ≤ j) hy]
state_before: case h.inr
R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
hi : i + 1 ≤ m
⊢ x ^ m ∣ x ^ (i, j).1 * y ^ (i, j).2
state_after: no goals

tactic: omega
state_before: R : Type u_1
x y : R
n m p : ℕ
hp : n + m ≤ p + 1
inst✝ : Semiring R
h_comm : Commute x y
hy : y ^ n = 0
x✝ : ℕ × ℕ
i j : ℕ
hij : i + j = p
hi : i + 1 ≤ m
⊢ n ≤ j
state_after: no goals