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

Proof steps:
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: 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
⊢ (∑ 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: rw [Finset.sum_eq_single ap, Finset.sum_eq_single aq, if_pos rfl]