Theorem: MvPolynomial.eval₂_mem
File: Mathlib/Data/MvPolynomial/Basic.lean

tactic: replace hs : ∀ i, f (p.coeff i) ∈ s
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f : R →+* S
p : MvPolynomial σ R
s : subS
hs : ∀ (i : σ →₀ ℕ), i ∈ support p → ↑f (coeff i p) ∈ s
v : σ → S
hv : ∀ (i : σ), v i ∈ s
⊢ eval₂ f v p ∈ s

tactic: induction' p using MvPolynomial.induction_on''' with a a b f ha _ ih
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs : ∀ (i : σ →₀ ℕ), ↑f (coeff i p) ∈ s
⊢ eval₂ f v p ∈ s

tactic: rw [eval₂_add, eval₂_monomial]
state_before: case h_add_weak
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
⊢ eval₂ f✝ v
      ((let_fun this := ↑(monomial a) b;
        this) +
        f) ∈
    s

tactic: refine' add_mem (mul_mem _ <| prod_mem fun i _ => pow_mem (hv _) _) (ih fun i => _)
state_before: case h_add_weak
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
⊢ (↑f✝ b * Finsupp.prod a fun n e => v n ^ e) + eval₂ f✝ v f ∈ s

tactic: have := hs i
state_before: case h_add_weak.refine'_2
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
i : σ →₀ ℕ
⊢ ↑f✝ (coeff i f) ∈ s

tactic: rw [coeff_add, coeff_monomial] at this
state_before: case h_add_weak.refine'_2
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
i : σ →₀ ℕ
this :
  ↑f✝
      (coeff i
        ((let_fun this := ↑(monomial a) b;
          this) +
          f)) ∈
    s
⊢ ↑f✝ (coeff i f) ∈ s

tactic: split_ifs at this with h
state_before: case h_add_weak.refine'_2
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
i : σ →₀ ℕ
this✝ :
  ↑f✝
      (coeff i
          (let_fun this := ↑(monomial a) b;
          this) +
        coeff i f) ∈
    s
this : ↑f✝ ((if a = i then b else 0) + coeff i f) ∈ s
⊢ ↑f✝ (coeff i f) ∈ s

tactic: intro i
state_before: case hs
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f : R →+* S
p : MvPolynomial σ R
s : subS
hs : ∀ (i : σ →₀ ℕ), i ∈ support p → ↑f (coeff i p) ∈ s
v : σ → S
hv : ∀ (i : σ), v i ∈ s
⊢ ∀ (i : σ →₀ ℕ), ↑f (coeff i p) ∈ s

tactic: by_cases hi : i ∈ p.support
state_before: case hs
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f : R →+* S
p : MvPolynomial σ R
s : subS
hs : ∀ (i : σ →₀ ℕ), i ∈ support p → ↑f (coeff i p) ∈ s
v : σ → S
hv : ∀ (i : σ), v i ∈ s
i : σ →₀ ℕ
⊢ ↑f (coeff i p) ∈ s

tactic: exact hs i hi
state_before: case pos
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f : R →+* S
p : MvPolynomial σ R
s : subS
hs : ∀ (i : σ →₀ ℕ), i ∈ support p → ↑f (coeff i p) ∈ s
v : σ → S
hv : ∀ (i : σ), v i ∈ s
i : σ →₀ ℕ
hi : i ∈ support p
⊢ ↑f (coeff i p) ∈ s

tactic: rw [MvPolynomial.not_mem_support_iff.1 hi, f.map_zero]
state_before: case neg
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f : R →+* S
p : MvPolynomial σ R
s : subS
hs : ∀ (i : σ →₀ ℕ), i ∈ support p → ↑f (coeff i p) ∈ s
v : σ → S
hv : ∀ (i : σ), v i ∈ s
i : σ →₀ ℕ
hi : ¬i ∈ support p
⊢ ↑f (coeff i p) ∈ s

tactic: exact zero_mem s
state_before: case neg
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f : R →+* S
p : MvPolynomial σ R
s : subS
hs : ∀ (i : σ →₀ ℕ), i ∈ support p → ↑f (coeff i p) ∈ s
v : σ → S
hv : ∀ (i : σ), v i ∈ s
i : σ →₀ ℕ
hi : ¬i ∈ support p
⊢ 0 ∈ s

tactic: simpa using hs 0
state_before: case h_C
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f (coeff i p) ∈ s
a : R
hs : ∀ (i : σ →₀ ℕ), ↑f (coeff i (↑C a)) ∈ s
⊢ eval₂ f v (↑C a) ∈ s

tactic: have := hs a
state_before: case h_add_weak.refine'_1
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
⊢ ↑f✝ b ∈ s

tactic: rwa [coeff_add, MvPolynomial.not_mem_support_iff.1 ha, add_zero, coeff_monomial,
  if_pos rfl] at this
state_before: case h_add_weak.refine'_1
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
this :
  ↑f✝
      (coeff a
        ((let_fun this := ↑(monomial a) b;
          this) +
          f)) ∈
    s
⊢ ↑f✝ b ∈ s

tactic: subst h
state_before: case h_add_weak.refine'_2.inl
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
i : σ →₀ ℕ
this✝ :
  ↑f✝
      (coeff i
          (let_fun this := ↑(monomial a) b;
          this) +
        coeff i f) ∈
    s
this : ↑f✝ ((if a = i then b else 0) + coeff i f) ∈ s
h : a = i
⊢ ↑f✝ (coeff i f) ∈ s

tactic: rw [MvPolynomial.not_mem_support_iff.1 ha, map_zero]
state_before: case h_add_weak.refine'_2.inl
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
this✝ :
  ↑f✝
      (coeff a
          (let_fun this := ↑(monomial a) b;
          this) +
        coeff a f) ∈
    s
this : ↑f✝ ((if a = a then b else 0) + coeff a f) ∈ s
⊢ ↑f✝ (coeff a f) ∈ s

tactic: exact zero_mem _
state_before: case h_add_weak.refine'_2.inl
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
this✝ :
  ↑f✝
      (coeff a
          (let_fun this := ↑(monomial a) b;
          this) +
        coeff a f) ∈
    s
this : ↑f✝ ((if a = a then b else 0) + coeff a f) ∈ s
⊢ 0 ∈ s

tactic: rwa [if_neg h, zero_add] at this
state_before: case h_add_weak.refine'_2.inr
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_2
a✝¹ a' a₁ a₂ : R
e : ℕ
n m : σ
s✝ : σ →₀ ℕ
inst✝⁴ : CommSemiring R
inst✝³ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Type u_1
subS : Type u_3
inst✝² : CommSemiring S
inst✝¹ : SetLike subS S
inst✝ : SubsemiringClass subS S
f✝ : R →+* S
p : MvPolynomial σ R
s : subS
v : σ → S
hv : ∀ (i : σ), v i ∈ s
hs✝ : ∀ (i : σ →₀ ℕ), ↑f✝ (coeff i p) ∈ s
a : σ →₀ ℕ
b : R
f : (σ →₀ ℕ) →₀ R
ha : ¬a ∈ f.support
a✝ : b ≠ 0
ih : (∀ (i : σ →₀ ℕ), ↑f✝ (coeff i f) ∈ s) → eval₂ f✝ v f ∈ s
hs :
  ∀ (i : σ →₀ ℕ),
    ↑f✝
        (coeff i
          ((let_fun this := ↑(monomial a) b;
            this) +
            f)) ∈
      s
i : σ →₀ ℕ
this✝ :
  ↑f✝
      (coeff i
          (let_fun this := ↑(monomial a) b;
          this) +
        coeff i f) ∈
    s
this : ↑f✝ ((if a = i then b else 0) + coeff i f) ∈ s
h : ¬a = i
⊢ ↑f✝ (coeff i f) ∈ s