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

tactic: classical
repeat' rw [degreeOf]
apply (Multiset.count_le_of_le j (degrees_mul f (X j))).trans
simp only [Multiset.count_add, add_le_add_iff_left]
convert Multiset.count_le_of_le j (degrees_X' (R := R) j)
rw [Multiset.count_singleton_self]
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
j : σ
f : MvPolynomial σ R
⊢ degreeOf j (f * X j) ≤ degreeOf j f + 1
state_after: no goals

tactic: repeat' rw [degreeOf]
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
j : σ
f : MvPolynomial σ R
⊢ degreeOf j (f * X j) ≤ degreeOf j f + 1
state_after: 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
j : σ
f : MvPolynomial σ R
⊢ Multiset.count j (f * X j).degrees ≤ Multiset.count j f.degrees + 1

tactic: apply (Multiset.count_le_of_le j (degrees_mul f (X j))).trans
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
j : σ
f : MvPolynomial σ R
⊢ Multiset.count j (f * X j).degrees ≤ Multiset.count j f.degrees + 1
state_after: 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
j : σ
f : MvPolynomial σ R
⊢ Multiset.count j (f.degrees + (X j).degrees) ≤ Multiset.count j f.degrees + 1

tactic: simp only [Multiset.count_add, add_le_add_iff_left]
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
j : σ
f : MvPolynomial σ R
⊢ Multiset.count j (f.degrees + (X j).degrees) ≤ Multiset.count j f.degrees + 1
state_after: 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
j : σ
f : MvPolynomial σ R
⊢ Multiset.count j (X j).degrees ≤ 1

tactic: convert Multiset.count_le_of_le j (degrees_X' (R := R) j)
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
j : σ
f : MvPolynomial σ R
⊢ Multiset.count j (X j).degrees ≤ 1
state_after: case h.e'_4
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
j : σ
f : MvPolynomial σ R
⊢ 1 = Multiset.count j {j}

tactic: rw [Multiset.count_singleton_self]
state_before: case h.e'_4
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
j : σ
f : MvPolynomial σ R
⊢ 1 = Multiset.count j {j}
state_after: no goals

tactic: rw [degreeOf]
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
j : σ
f : MvPolynomial σ R
⊢ Multiset.count j (f * X j).degrees ≤ degreeOf j f + 1
state_after: 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
j : σ
f : MvPolynomial σ R
⊢ Multiset.count j (f * X j).degrees ≤ Multiset.count j f.degrees + 1