Theorem: MvPolynomial.eval₂Hom_eq_constantCoeff_of_vars
File: Mathlib/Data/MvPolynomial/Variables.lean

tactic: conv_lhs => rw [p.as_sum]
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
⊢ ↑(eval₂Hom f g) p = ↑f (↑constantCoeff p)

tactic: simp only [map_sum, eval₂Hom_monomial]
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
⊢ ↑(eval₂Hom f g) (∑ v in support p, ↑(monomial v) (coeff v p)) = ↑f (↑constantCoeff p)

tactic: by_cases h0 : constantCoeff p = 0
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
⊢ (∑ x in support p, ↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = ↑f (↑constantCoeff p)

tactic: on_goal 1 =>
  rw [h0, f.map_zero, Finset.sum_eq_zero]
  intro d hd
state_before: case pos
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ↑constantCoeff p = 0
⊢ (∑ x in support p, ↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = ↑f (↑constantCoeff p)

case neg
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ (∑ x in support p, ↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = ↑f (↑constantCoeff p)

tactic: on_goal 3 =>
  rw [constantCoeff_eq, coeff, ← Ne.def, ← Finsupp.mem_support_iff] at h0
  intro
  contradiction
state_before: case pos
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
⊢ (↑f (coeff d p) * Finsupp.prod d fun i k => g i ^ k) = 0

case neg.h₀
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
⊢ (↑f (coeff d p) * Finsupp.prod d fun i k => g i ^ k) = 0

case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ¬0 ∈ support p → (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: repeat'
  obtain ⟨i, hi⟩ : Finset.Nonempty (Finsupp.support d) := by
    rw [constantCoeff_eq, coeff, ← Finsupp.not_mem_support_iff] at h0
    rw [Finset.nonempty_iff_ne_empty, Ne.def, Finsupp.support_eq_empty]
    rintro rfl
    contradiction
  rw [Finsupp.prod, Finset.prod_eq_zero hi, MulZeroClass.mul_zero]
  rw [hp, zero_pow (Nat.pos_of_ne_zero <| Finsupp.mem_support_iff.mp hi)]
  rw [mem_vars]
  exact ⟨d, hd, hi⟩
state_before: case pos
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
⊢ (↑f (coeff d p) * Finsupp.prod d fun i k => g i ^ k) = 0

case neg.h₀
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
⊢ (↑f (coeff d p) * Finsupp.prod d fun i k => g i ^ k) = 0

tactic: rw [h0, f.map_zero, Finset.sum_eq_zero]
state_before: case pos
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ↑constantCoeff p = 0
⊢ (∑ x in support p, ↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = ↑f (↑constantCoeff p)

tactic: intro d hd
state_before: case pos
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ↑constantCoeff p = 0
⊢ ∀ (x : σ →₀ ℕ), x ∈ support p → (↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = 0

tactic: rw [h0, f.map_zero, Finset.sum_eq_zero]
state_before: case pos
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ↑constantCoeff p = 0
⊢ (∑ x in support p, ↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = ↑f (↑constantCoeff p)

tactic: intro d hd
state_before: case pos
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ↑constantCoeff p = 0
⊢ ∀ (x : σ →₀ ℕ), x ∈ support p → (↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = 0

tactic: rw [Finset.sum_eq_single (0 : σ →₀ ℕ)]
state_before: case neg
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ (∑ x in support p, ↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = ↑f (↑constantCoeff p)

tactic: intro d hd hd0
state_before: case neg.h₀
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ∀ (b : σ →₀ ℕ), b ∈ support p → b ≠ 0 → (↑f (coeff b p) * Finsupp.prod b fun i k => g i ^ k) = 0

case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ¬0 ∈ support p → (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: rw [Finsupp.prod_zero_index, mul_one]
state_before: case neg
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = ↑f (↑constantCoeff p)

tactic: rfl
state_before: case neg
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ↑f (coeff 0 p) = ↑f (↑constantCoeff p)

tactic: rw [Finset.sum_eq_single (0 : σ →₀ ℕ)]
state_before: case neg
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ (∑ x in support p, ↑f (coeff x p) * Finsupp.prod x fun i k => g i ^ k) = ↑f (↑constantCoeff p)

tactic: intro d hd hd0
state_before: case neg.h₀
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ∀ (b : σ →₀ ℕ), b ∈ support p → b ≠ 0 → (↑f (coeff b p) * Finsupp.prod b fun i k => g i ^ k) = 0

case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ¬0 ∈ support p → (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: rw [Finsupp.prod_zero_index, mul_one]
state_before: case neg
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = ↑f (↑constantCoeff p)

tactic: rfl
state_before: case neg
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ↑f (coeff 0 p) = ↑f (↑constantCoeff p)

tactic: rw [constantCoeff_eq, coeff, ← Ne.def, ← Finsupp.mem_support_iff] at h0
state_before: case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ¬0 ∈ support p → (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: intro
state_before: case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : 0 ∈ p.support
⊢ ¬0 ∈ support p → (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: contradiction
state_before: case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : 0 ∈ p.support
a✝ : ¬0 ∈ support p
⊢ (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: rw [constantCoeff_eq, coeff, ← Ne.def, ← Finsupp.mem_support_iff] at h0
state_before: case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
⊢ ¬0 ∈ support p → (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: intro
state_before: case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : 0 ∈ p.support
⊢ ¬0 ∈ support p → (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: contradiction
state_before: case neg.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : 0 ∈ p.support
a✝ : ¬0 ∈ support p
⊢ (↑f (coeff 0 p) * Finsupp.prod 0 fun i k => g i ^ k) = 0

tactic: obtain ⟨i, hi⟩ : Finset.Nonempty (Finsupp.support d) := by
  rw [constantCoeff_eq, coeff, ← Finsupp.not_mem_support_iff] at h0
  rw [Finset.nonempty_iff_ne_empty, Ne.def, Finsupp.support_eq_empty]
  rintro rfl
  contradiction
state_before: case neg.h₀
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
⊢ (↑f (coeff d p) * Finsupp.prod d fun i k => g i ^ k) = 0

tactic: rw [Finsupp.prod, Finset.prod_eq_zero hi, MulZeroClass.mul_zero]
state_before: case neg.h₀.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
i : σ
hi : i ∈ d.support
⊢ (↑f (coeff d p) * Finsupp.prod d fun i k => g i ^ k) = 0

tactic: rw [hp, zero_pow (Nat.pos_of_ne_zero <| Finsupp.mem_support_iff.mp hi)]
state_before: case neg.h₀.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
i : σ
hi : i ∈ d.support
⊢ g i ^ ↑d i = 0

tactic: rw [mem_vars]
state_before: case neg.h₀.intro.a
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
i : σ
hi : i ∈ d.support
⊢ i ∈ vars p

tactic: exact ⟨d, hd, hi⟩
state_before: case neg.h₀.intro.a
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
i : σ
hi : i ∈ d.support
⊢ ∃ d x, i ∈ d.support

tactic: rw [constantCoeff_eq, coeff, ← Finsupp.not_mem_support_iff] at h0
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬↑constantCoeff p = 0
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
⊢ Finset.Nonempty d.support

tactic: rw [Finset.nonempty_iff_ne_empty, Ne.def, Finsupp.support_eq_empty]
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬¬0 ∈ p.support
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
⊢ Finset.Nonempty d.support

tactic: rintro rfl
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬¬0 ∈ p.support
d : σ →₀ ℕ
hd : d ∈ support p
hd0 : d ≠ 0
⊢ ¬d = 0

tactic: contradiction
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.482825
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q : MvPolynomial σ R
inst✝ : CommSemiring S
f : R →+* S
g : σ → S
p : MvPolynomial σ R
hp : ∀ (i : σ), i ∈ vars p → g i = 0
h0 : ¬¬0 ∈ p.support
hd : 0 ∈ support p
hd0 : 0 ≠ 0
⊢ False