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

tactic: have := AddMonoidAlgebra.support_mul a b hn
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n✝ m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
n : σ →₀ ℕ
hn : n ∈ support (a * b)
⊢ (sum n fun x e => e) ≤ totalDegree a + totalDegree b

tactic: simp only [Finset.mem_biUnion, Finset.mem_singleton] at this
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n✝ m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
n : σ →₀ ℕ
hn : n ∈ support (a * b)
this : n ∈ Finset.biUnion a.support fun a₁ => Finset.biUnion b.support fun a₂ => {a₁ + a₂}
⊢ (sum n fun x e => e) ≤ totalDegree a + totalDegree b

tactic: rcases this with ⟨a₁, h₁, a₂, h₂, rfl⟩
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n✝ m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
n : σ →₀ ℕ
hn : n ∈ support (a * b)
this : ∃ a_1, a_1 ∈ a.support ∧ ∃ a, a ∈ b.support ∧ n = a_1 + a
⊢ (sum n fun x e => e) ≤ totalDegree a + totalDegree b

tactic: rw [Finsupp.sum_add_index']
state_before: case intro.intro.intro.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
a₁ : σ →₀ ℕ
h₁ : a₁ ∈ a.support
a₂ : σ →₀ ℕ
h₂ : a₂ ∈ b.support
hn : a₁ + a₂ ∈ support (a * b)
⊢ (sum (a₁ + a₂) fun x e => e) ≤ totalDegree a + totalDegree b

tactic: dsimp [totalDegree]
state_before: case intro.intro.intro.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
a₁ : σ →₀ ℕ
h₁ : a₁ ∈ a.support
a₂ : σ →₀ ℕ
h₂ : a₂ ∈ b.support
hn : a₁ + a₂ ∈ support (a * b)
⊢ ((sum a₁ fun x e => e) + sum a₂ fun x e => e) ≤ totalDegree a + totalDegree b

tactic: exact add_le_add (le_totalDegree h₁) (le_totalDegree h₂)
state_before: case intro.intro.intro.intro
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
a₁ : σ →₀ ℕ
h₁ : a₁ ∈ a.support
a₂ : σ →₀ ℕ
h₂ : a₂ ∈ b.support
hn : a₁ + a₂ ∈ support (a * b)
⊢ ((sum a₁ fun x e => e) + sum a₂ fun x e => e) ≤
    (Finset.sup (support a) fun s => sum s fun x e => e) + Finset.sup (support b) fun s => sum s fun x e => e

tactic: intro _
state_before: case intro.intro.intro.intro.h_zero
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
a₁ : σ →₀ ℕ
h₁ : a₁ ∈ a.support
a₂ : σ →₀ ℕ
h₂ : a₂ ∈ b.support
hn : a₁ + a₂ ∈ support (a * b)
⊢ σ → 0 = 0

tactic: rfl
state_before: case intro.intro.intro.intro.h_zero
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
a₁ : σ →₀ ℕ
h₁ : a₁ ∈ a.support
a₂ : σ →₀ ℕ
h₂ : a₂ ∈ b.support
hn : a₁ + a₂ ∈ support (a * b)
a✝ : σ
⊢ 0 = 0

tactic: intro _ b₁ b₂
state_before: case intro.intro.intro.intro.h_add
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
a₁ : σ →₀ ℕ
h₁ : a₁ ∈ a.support
a₂ : σ →₀ ℕ
h₂ : a₂ ∈ b.support
hn : a₁ + a₂ ∈ support (a * b)
⊢ σ → ∀ (b₁ b₂ : ℕ), b₁ + b₂ = b₁ + b₂

tactic: rfl
state_before: case intro.intro.intro.intro.h_add
R : Type u
S : Type v
σ : Type u_1
τ : Type ?u.449883
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝ : CommSemiring R
p q a b : MvPolynomial σ R
a₁ : σ →₀ ℕ
h₁ : a₁ ∈ a.support
a₂ : σ →₀ ℕ
h₂ : a₂ ∈ b.support
hn : a₁ + a₂ ∈ support (a * b)
a✝ : σ
b₁ b₂ : ℕ
⊢ b₁ + b₂ = b₁ + b₂