Theorem: AddMonoidAlgebra.apply_add_of_supDegree_le
File: Mathlib/Algebra/MonoidAlgebra/Degree.lean

tactic: simp_rw [mul_apply, Finsupp.sum]
state_before: R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ (p * q) (ap + aq) = p ap * q aq
state_after: R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ (∑ x ∈ p.support, ∑ x_1 ∈ q.support, if x + x_1 = ap + aq then p x * q x_1 else 0) = p ap * q aq

tactic: rw [Finset.sum_eq_single ap, Finset.sum_eq_single aq, if_pos rfl]
state_before: R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ (∑ x ∈ p.support, ∑ x_1 ∈ q.support, if x + x_1 = ap + aq then p x * q x_1 else 0) = p ap * q aq
state_after: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ ∀ b ∈ q.support, b ≠ aq → (if ap + b = ap + aq then p ap * q b else 0) = 0

case h₁
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ aq ∉ q.support → (if ap + aq = ap + aq then p ap * q aq else 0) = 0

case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ ∀ b ∈ p.support, b ≠ ap → (∑ x ∈ q.support, if b + x = ap + aq then p b * q x else 0) = 0

case h₁
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ ap ∉ p.support → (∑ x ∈ q.support, if ap + x = ap + aq then p ap * q x else 0) = 0

tactic: refine fun a ha hne => if_neg (fun he => ?_)
state_before: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ ∀ b ∈ q.support, b ≠ aq → (if ap + b = ap + aq then p ap * q b else 0) = 0
state_after: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ q.support
hne : a ≠ aq
he : ap + a = ap + aq
⊢ False

tactic: apply_fun D at he
state_before: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ q.support
hne : a ≠ aq
he : ap + a = ap + aq
⊢ False
state_after: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ q.support
hne : a ≠ aq
he : D (ap + a) = D (ap + aq)
⊢ False

tactic: simp_rw [hadd] at he
state_before: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ q.support
hne : a ≠ aq
he : D (ap + a) = D (ap + aq)
⊢ False
state_after: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ q.support
hne : a ≠ aq
he : D ap + D a = D ap + D aq
⊢ False

tactic: exact (add_lt_add_left (((Finset.le_sup ha).trans hq).lt_of_ne <| hD.ne_iff.2 hne) _).ne he
state_before: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ q.support
hne : a ≠ aq
he : D ap + D a = D ap + D aq
⊢ False
state_after: no goals

tactic: intro h
state_before: case h₁
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ aq ∉ q.support → (if ap + aq = ap + aq then p ap * q aq else 0) = 0
state_after: case h₁
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
h : aq ∉ q.support
⊢ (if ap + aq = ap + aq then p ap * q aq else 0) = 0

tactic: rw [if_pos rfl, Finsupp.not_mem_support_iff.1 h, mul_zero]
state_before: case h₁
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
h : aq ∉ q.support
⊢ (if ap + aq = ap + aq then p ap * q aq else 0) = 0
state_after: no goals

tactic: refine fun a ha hne => Finset.sum_eq_zero (fun a' ha' => if_neg <| fun he => ?_)
state_before: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ ∀ b ∈ p.support, b ≠ ap → (∑ x ∈ q.support, if b + x = ap + aq then p b * q x else 0) = 0
state_after: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ p.support
hne : a ≠ ap
a' : A
ha' : a' ∈ q.support
he : a + a' = ap + aq
⊢ False

tactic: apply_fun D at he
state_before: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ p.support
hne : a ≠ ap
a' : A
ha' : a' ∈ q.support
he : a + a' = ap + aq
⊢ False
state_after: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ p.support
hne : a ≠ ap
a' : A
ha' : a' ∈ q.support
he : D (a + a') = D (ap + aq)
⊢ False

tactic: simp_rw [hadd] at he
state_before: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ p.support
hne : a ≠ ap
a' : A
ha' : a' ∈ q.support
he : D (a + a') = D (ap + aq)
⊢ False
state_after: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ p.support
hne : a ≠ ap
a' : A
ha' : a' ∈ q.support
he : D a + D a' = D ap + D aq
⊢ False

tactic: exact (add_lt_add_of_lt_of_le (((Finset.le_sup ha).trans hp).lt_of_ne <| hD.ne_iff.2 hne)
  <| (Finset.le_sup ha').trans hq).ne he
state_before: case h₀
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
a : A
ha : a ∈ p.support
hne : a ≠ ap
a' : A
ha' : a' ∈ q.support
he : D a + D a' = D ap + D aq
this : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
⊢ False
state_after: no goals

tactic: refine fun h => Finset.sum_eq_zero (fun a _ => ite_eq_right_iff.mpr <| fun _ => ?_)
state_before: case h₁
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
⊢ ap ∉ p.support → (∑ x ∈ q.support, if ap + x = ap + aq then p ap * q x else 0) = 0
state_after: case h₁
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
h : ap ∉ p.support
a : A
x✝¹ : a ∈ q.support
x✝ : ap + a = ap + aq
⊢ p ap * q a = 0

tactic: rw [Finsupp.not_mem_support_iff.mp h, zero_mul]
state_before: case h₁
R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Ring R'
inst✝⁵ : AddZeroClass A
inst✝⁴ : SemilatticeSup B
inst✝³ : Add B
inst✝² : OrderBot B
D : A → B
p q : R[A]
hadd : ∀ (a1 a2 : A), D (a1 + a2) = D a1 + D a2
inst✝¹ : CovariantClass B B (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass B B (Function.swap fun x x_1 => x + x_1) fun x x_1 => x < x_1
hD : Function.Injective D
ap aq : A
hp : supDegree D p ≤ D ap
hq : supDegree D q ≤ D aq
h : ap ∉ p.support
a : A
x✝¹ : a ∈ q.support
x✝ : ap + a = ap + aq
⊢ p ap * q a = 0
state_after: no goals