Theorem: MvPolynomial.vars_mul
File: Mathlib/Data/MvPolynomial/Variables.lean

tactic: intro i
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
⊢ vars (φ * ψ) ⊆ vars φ ∪ vars ψ

tactic: simp only [mem_vars, Finset.mem_union]
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
⊢ i ∈ vars (φ * ψ) → i ∈ vars φ ∪ vars ψ

tactic: rintro ⟨d, hd, hi⟩
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
⊢ (∃ d x, i ∈ d.support) → (∃ d x, i ∈ d.support) ∨ ∃ d x, i ∈ d.support

tactic: rw [mem_support_iff, coeff_mul] at hd
state_before: case intro.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
d : σ →₀ ℕ
hd : d ∈ support (φ * ψ)
hi : i ∈ d.support
⊢ (∃ d x, i ∈ d.support) ∨ ∃ d x, i ∈ d.support

tactic: contrapose! hd
state_before: case intro.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
d : σ →₀ ℕ
hd : ∑ x in antidiagonal d, coeff x.fst φ * coeff x.snd ψ ≠ 0
hi : i ∈ d.support
⊢ (∃ d x, i ∈ d.support) ∨ ∃ d x, i ∈ d.support

tactic: cases hd
state_before: case intro.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
d : σ →₀ ℕ
hi : i ∈ d.support
hd : (∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support) ∧ ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
⊢ ∑ x in antidiagonal d, coeff x.fst φ * coeff x.snd ψ = 0

tactic: rw [Finset.sum_eq_zero]
state_before: case intro.intro.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
d : σ →₀ ℕ
hi : i ∈ d.support
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
⊢ ∑ x in antidiagonal d, coeff x.fst φ * coeff x.snd ψ = 0

tactic: rintro ⟨d₁, d₂⟩ H
state_before: case intro.intro.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
d : σ →₀ ℕ
hi : i ∈ d.support
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
⊢ ∀ (x : (σ →₀ ℕ) × (σ →₀ ℕ)), x ∈ antidiagonal d → coeff x.fst φ * coeff x.snd ψ = 0

tactic: rw [Finsupp.mem_antidiagonal] at H
state_before: case intro.intro.intro.mk
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
d : σ →₀ ℕ
hi : i ∈ d.support
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
H : (d₁, d₂) ∈ antidiagonal d
⊢ coeff (d₁, d₂).fst φ * coeff (d₁, d₂).snd ψ = 0

tactic: subst H
state_before: case intro.intro.intro.mk
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
d : σ →₀ ℕ
hi : i ∈ d.support
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
H : (d₁, d₂).fst + (d₁, d₂).snd = d
⊢ coeff (d₁, d₂).fst φ * coeff (d₁, d₂).snd ψ = 0

tactic: obtain H | H : i ∈ d₁.support ∨ i ∈ d₂.support := by
  simpa only [Finset.mem_union] using Finsupp.support_add hi
state_before: case intro.intro.intro.mk
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
⊢ coeff (d₁, d₂).fst φ * coeff (d₁, d₂).snd ψ = 0

tactic: simpa only [Finset.mem_union] using Finsupp.support_add hi
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
⊢ i ∈ d₁.support ∨ i ∈ d₂.support

tactic: suffices coeff d₁ φ = 0 by simp [this]
state_before: case intro.intro.intro.mk.inl
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₁.support
⊢ coeff (d₁, d₂).fst φ * coeff (d₁, d₂).snd ψ = 0

tactic: rw [coeff, ← Finsupp.not_mem_support_iff]
state_before: case intro.intro.intro.mk.inl
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₁.support
⊢ coeff d₁ φ = 0

tactic: intro
state_before: case intro.intro.intro.mk.inl
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₁.support
⊢ ¬d₁ ∈ φ.support

tactic: solve_by_elim
state_before: case intro.intro.intro.mk.inl
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₁.support
a✝ : d₁ ∈ φ.support
⊢ False

tactic: simp [this]
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₁.support
this : coeff d₁ φ = 0
⊢ coeff (d₁, d₂).fst φ * coeff (d₁, d₂).snd ψ = 0

tactic: suffices coeff d₂ ψ = 0 by simp [this]
state_before: case intro.intro.intro.mk.inr
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₂.support
⊢ coeff (d₁, d₂).fst φ * coeff (d₁, d₂).snd ψ = 0

tactic: rw [coeff, ← Finsupp.not_mem_support_iff]
state_before: case intro.intro.intro.mk.inr
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₂.support
⊢ coeff d₂ ψ = 0

tactic: intro
state_before: case intro.intro.intro.mk.inr
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₂.support
⊢ ¬d₂ ∈ ψ.support

tactic: solve_by_elim
state_before: case intro.intro.intro.mk.inr
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₂.support
a✝ : d₂ ∈ ψ.support
⊢ False

tactic: simp [this]
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.160498
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p q : MvPolynomial σ R
inst✝ : DecidableEq σ
φ ψ : MvPolynomial σ R
i : σ
left✝ : ∀ (d : σ →₀ ℕ), d ∈ support φ → ¬i ∈ d.support
right✝ : ∀ (d : σ →₀ ℕ), d ∈ support ψ → ¬i ∈ d.support
d₁ d₂ : σ →₀ ℕ
hi : i ∈ ((d₁, d₂).fst + (d₁, d₂).snd).support
H : i ∈ d₂.support
this : coeff d₂ ψ = 0
⊢ coeff (d₁, d₂).fst φ * coeff (d₁, d₂).snd ψ = 0