Theorem: MvPolynomial.weightedDegree_eq_zero_iff
File: Mathlib/RingTheory/MvPolynomial/WeightedHomogeneous.lean

tactic: simp only [weightedDegree, Finsupp.total, LinearMap.toAddMonoidHom_coe, coe_lsum,
  LinearMap.coe_smulRight, LinearMap.id_coe, id_eq]
state_before: R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
⊢ (weightedDegree w) m = 0 ↔ ∀ (x : σ), m x = 0
state_after: R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
⊢ (m.sum fun i c => c • w i) = 0 ↔ ∀ (x : σ), m x = 0

tactic: rw [Finsupp.sum, Finset.sum_eq_zero_iff]
state_before: R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
⊢ (m.sum fun i c => c • w i) = 0 ↔ ∀ (x : σ), m x = 0
state_after: R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
⊢ (∀ x ∈ m.support, m x • w x = 0) ↔ ∀ (x : σ), m x = 0

tactic: apply forall_congr'
state_before: R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
⊢ (∀ x ∈ m.support, m x • w x = 0) ↔ ∀ (x : σ), m x = 0
state_after: case h
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
⊢ ∀ (a : σ), a ∈ m.support → m a • w a = 0 ↔ m a = 0

tactic: intro x
state_before: case h
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
⊢ ∀ (a : σ), a ∈ m.support → m a • w a = 0 ↔ m a = 0
state_after: case h
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
⊢ x ∈ m.support → m x • w x = 0 ↔ m x = 0

tactic: rw [Finsupp.mem_support_iff]
state_before: case h
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
⊢ x ∈ m.support → m x • w x = 0 ↔ m x = 0
state_after: case h
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
⊢ m x ≠ 0 → m x • w x = 0 ↔ m x = 0

tactic: constructor
state_before: case h
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
⊢ m x ≠ 0 → m x • w x = 0 ↔ m x = 0
state_after: case h.mp
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
⊢ (m x ≠ 0 → m x • w x = 0) → m x = 0

case h.mpr
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
⊢ m x = 0 → m x ≠ 0 → m x • w x = 0

tactic: intro hx
state_before: case h.mp
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
⊢ (m x ≠ 0 → m x • w x = 0) → m x = 0
state_after: case h.mp
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
hx : m x ≠ 0 → m x • w x = 0
⊢ m x = 0

tactic: by_contra hx'
state_before: case h.mp
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
hx : m x ≠ 0 → m x • w x = 0
⊢ m x = 0
state_after: case h.mp
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
hx : m x ≠ 0 → m x • w x = 0
hx' : ¬m x = 0
⊢ False

tactic: exact absurd (hw _ _ (hx hx')) hx'
state_before: case h.mp
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
hx : m x ≠ 0 → m x • w x = 0
hx' : ¬m x = 0
⊢ False
state_after: no goals

tactic: intro hax _
state_before: case h.mpr
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
⊢ m x = 0 → m x ≠ 0 → m x • w x = 0
state_after: case h.mpr
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
hax : m x = 0
a✝ : m x ≠ 0
⊢ m x • w x = 0

tactic: simp only [hax, zero_smul]
state_before: case h.mpr
R : Type u_1
M : Type u_2
inst✝¹ : CommSemiring R
σ : Type u_3
inst✝ : CanonicallyLinearOrderedAddCommMonoid M
w : σ → M
φ : MvPolynomial σ R
hw : NonTorsionWeight w
m : σ →₀ ℕ
x : σ
hax : m x = 0
a✝ : m x ≠ 0
⊢ m x • w x = 0
state_after: no goals