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

tactic: by_cases hi : i ∈ f.support
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval : p ∣ eval z f
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
⊢ p ∣ coeff f i * z ^ i

tactic: rw [eval, eval₂_eq_sum, sum_def] at dvd_eval
state_before: case pos
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval : p ∣ eval z f
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : i ∈ support f
⊢ p ∣ coeff f i * z ^ i

tactic: rw [← Finset.insert_erase hi, Finset.sum_insert (Finset.not_mem_erase _ _)] at dvd_eval
state_before: case pos
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval : p ∣ ∑ n in support f, ↑(RingHom.id S) (coeff f n) * z ^ n
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : i ∈ support f
⊢ p ∣ coeff f i * z ^ i

tactic: refine' (dvd_add_left _).mp dvd_eval
state_before: case pos
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval :
  p ∣ ↑(RingHom.id S) (coeff f i) * z ^ i + ∑ x in Finset.erase (support f) i, ↑(RingHom.id S) (coeff f x) * z ^ x
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : i ∈ support f
⊢ p ∣ coeff f i * z ^ i

tactic: apply Finset.dvd_sum
state_before: case pos
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval :
  p ∣ ↑(RingHom.id S) (coeff f i) * z ^ i + ∑ x in Finset.erase (support f) i, ↑(RingHom.id S) (coeff f x) * z ^ x
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : i ∈ support f
⊢ p ∣ ∑ x in Finset.erase (support f) i, ↑(RingHom.id S) (coeff f x) * z ^ x

tactic: intro j hj
state_before: case pos.h
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval :
  p ∣ ↑(RingHom.id S) (coeff f i) * z ^ i + ∑ x in Finset.erase (support f) i, ↑(RingHom.id S) (coeff f x) * z ^ x
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : i ∈ support f
⊢ ∀ (x : ℕ), x ∈ Finset.erase (support f) i → p ∣ ↑(RingHom.id S) (coeff f x) * z ^ x

tactic: exact dvd_terms j (Finset.ne_of_mem_erase hj)
state_before: case pos.h
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval :
  p ∣ ↑(RingHom.id S) (coeff f i) * z ^ i + ∑ x in Finset.erase (support f) i, ↑(RingHom.id S) (coeff f x) * z ^ x
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : i ∈ support f
j : ℕ
hj : j ∈ Finset.erase (support f) i
⊢ p ∣ ↑(RingHom.id S) (coeff f j) * z ^ j

tactic: convert dvd_zero p
state_before: case neg
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval : p ∣ eval z f
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : ¬i ∈ support f
⊢ p ∣ coeff f i * z ^ i

tactic: rw [not_mem_support_iff] at hi
state_before: case h.e'_4
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval : p ∣ eval z f
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : ¬i ∈ support f
⊢ coeff f i * z ^ i = 0

tactic: simp [hi]
state_before: case h.e'_4
R : Type u
S : Type v
T : Type w
A : Type z
A' : Type ?u.1578454
B' : Type ?u.1578457
a b : R
n : ℕ
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B'
inst✝⁵ : CommSemiring R
p✝ q : R[X]
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
B : Type ?u.1578670
inst✝² : Semiring B
inst✝¹ : Algebra R B
x : A
inst✝ : CommRing S
f✝ : R →+* S
z p : S
f : S[X]
i : ℕ
dvd_eval : p ∣ eval z f
dvd_terms : ∀ (j : ℕ), j ≠ i → p ∣ coeff f j * z ^ j
hi : coeff f i = 0
⊢ coeff f i * z ^ i = 0