Theorem: Polynomial.eval_mul_X_sub_C
File: Mathlib/Data/Polynomial/AlgebraMap.lean

tactic: simp only [eval, eval₂_eq_sum, RingHom.id_apply]
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
⊢ eval r (p * (X - ↑C r)) = 0

tactic: have bound :=
  calc
    (p * (X - C r)).natDegree ≤ p.natDegree + (X - C r).natDegree := natDegree_mul_le
    _ ≤ p.natDegree + 1 := (add_le_add_left (natDegree_X_sub_C_le _) _)
    _ < p.natDegree + 2 := lt_add_one _
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
⊢ (sum (p * (X - ↑C r)) fun e a => a * r ^ e) = 0

tactic: rw [sum_over_range' _ _ (p.natDegree + 2) bound]
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
bound : natDegree (p * (X - ↑C r)) < natDegree p + 2
⊢ (sum (p * (X - ↑C r)) fun e a => a * r ^ e) = 0

tactic: swap
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
bound : natDegree (p * (X - ↑C r)) < natDegree p + 2
⊢ ∑ a in range (natDegree p + 2), coeff (p * (X - ↑C r)) a * r ^ a = 0

R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
bound : natDegree (p * (X - ↑C r)) < natDegree p + 2
⊢ ∀ (n : ℕ), 0 * r ^ n = 0

tactic: rw [sum_range_succ']
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
bound : natDegree (p * (X - ↑C r)) < natDegree p + 2
⊢ ∑ a in range (natDegree p + 2), coeff (p * (X - ↑C r)) a * r ^ a = 0

tactic: conv_lhs =>
  congr
  arg 2
  simp [coeff_mul_X_sub_C, sub_mul, mul_assoc, ← pow_succ]
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
bound : natDegree (p * (X - ↑C r)) < natDegree p + 2
⊢ ∑ k in range (natDegree p + 1), coeff (p * (X - ↑C r)) (k + 1) * r ^ (k + 1) + coeff (p * (X - ↑C r)) 0 * r ^ 0 = 0

tactic: rw [sum_range_sub']
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
bound : natDegree (p * (X - ↑C r)) < natDegree p + 2
⊢ ∑ k in range (natDegree p + 1), (coeff p k * r ^ (k + 1) - coeff p (k + 1) * r ^ (k + 1 + 1)) +
      coeff (p * (X - ↑C r)) 0 * r ^ 0 =
    0

tactic: simp [coeff_monomial]
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
bound : natDegree (p * (X - ↑C r)) < natDegree p + 2
⊢ coeff p 0 * r ^ (0 + 1) - coeff p (natDegree p + 1) * r ^ (natDegree p + 1 + 1) + coeff (p * (X - ↑C r)) 0 * r ^ 0 = 0

tactic: simp
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1586223
B' : Type ?u.1586226
a b : R
n : ℕ
inst✝² : CommSemiring A'
inst✝¹ : Semiring B'
inst✝ : Ring R
p : R[X]
r : R
bound : natDegree (p * (X - ↑C r)) < natDegree p + 2
⊢ ∀ (n : ℕ), 0 * r ^ n = 0