Theorem: MvPolynomial.degrees_add_of_disjoint
File: Mathlib/Algebra/MvPolynomial/Degrees.lean

tactic: apply le_antisymm
state_before: R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ (p + q).degrees = p.degrees ∪ q.degrees
state_after: case a
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ (p + q).degrees ≤ p.degrees ∪ q.degrees

case a
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ p.degrees ∪ q.degrees ≤ (p + q).degrees

tactic: apply degrees_add
state_before: case a
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ (p + q).degrees ≤ p.degrees ∪ q.degrees
state_after: no goals

tactic: apply Multiset.union_le
state_before: case a
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ p.degrees ∪ q.degrees ≤ (p + q).degrees
state_after: case a.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ p.degrees ≤ (p + q).degrees

case a.h₂
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ q.degrees ≤ (p + q).degrees

tactic: apply le_degrees_add h
state_before: case a.h₁
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ p.degrees ≤ (p + q).degrees
state_after: no goals

tactic: rw [add_comm]
state_before: case a.h₂
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ q.degrees ≤ (p + q).degrees
state_after: case a.h₂
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ q.degrees ≤ (q + p).degrees

tactic: apply le_degrees_add h.symm
state_before: case a.h₂
R : Type u
S : Type v
σ : Type u_1
τ : Type u_2
r : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
h : p.degrees.Disjoint q.degrees
⊢ q.degrees ≤ (q + p).degrees
state_after: no goals