Theorem: MvPolynomial.eval_eval₂
File: Mathlib/Data/MvPolynomial/Basic.lean

tactic: apply induction_on p
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_3
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝³ : CommSemiring R
inst✝² : CommSemiring S₁
p✝ q : MvPolynomial σ R
f✝ : σ → R
S : Type u_1
τ : Type u_2
x : τ → S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* MvPolynomial τ S
g : σ → MvPolynomial τ S
p : MvPolynomial σ R
⊢ ↑(eval x) (eval₂ f g p) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) p

tactic: simp
state_before: case h_C
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_3
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝³ : CommSemiring R
inst✝² : CommSemiring S₁
p✝ q : MvPolynomial σ R
f✝ : σ → R
S : Type u_1
τ : Type u_2
x : τ → S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* MvPolynomial τ S
g : σ → MvPolynomial τ S
p : MvPolynomial σ R
⊢ ∀ (a : R), ↑(eval x) (eval₂ f g (↑C a)) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) (↑C a)

tactic: intro p q hp hq
state_before: case h_add
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_3
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝³ : CommSemiring R
inst✝² : CommSemiring S₁
p✝ q : MvPolynomial σ R
f✝ : σ → R
S : Type u_1
τ : Type u_2
x : τ → S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* MvPolynomial τ S
g : σ → MvPolynomial τ S
p : MvPolynomial σ R
⊢ ∀ (p q : MvPolynomial σ R),
    ↑(eval x) (eval₂ f g p) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) p →
      ↑(eval x) (eval₂ f g q) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) q →
        ↑(eval x) (eval₂ f g (p + q)) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) (p + q)

tactic: simp [hp, hq]
state_before: case h_add
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_3
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝³ : CommSemiring R
inst✝² : CommSemiring S₁
p✝¹ q✝ : MvPolynomial σ R
f✝ : σ → R
S : Type u_1
τ : Type u_2
x : τ → S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* MvPolynomial τ S
g : σ → MvPolynomial τ S
p✝ p q : MvPolynomial σ R
hp : ↑(eval x) (eval₂ f g p) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) p
hq : ↑(eval x) (eval₂ f g q) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) q
⊢ ↑(eval x) (eval₂ f g (p + q)) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) (p + q)

tactic: intro p n hp
state_before: case h_X
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_3
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝³ : CommSemiring R
inst✝² : CommSemiring S₁
p✝ q : MvPolynomial σ R
f✝ : σ → R
S : Type u_1
τ : Type u_2
x : τ → S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* MvPolynomial τ S
g : σ → MvPolynomial τ S
p : MvPolynomial σ R
⊢ ∀ (p : MvPolynomial σ R) (n : σ),
    ↑(eval x) (eval₂ f g p) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) p →
      ↑(eval x) (eval₂ f g (p * X n)) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) (p * X n)

tactic: simp [hp]
state_before: case h_X
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_3
a a' a₁ a₂ : R
e : ℕ
n✝ m : σ
s : σ →₀ ℕ
inst✝³ : CommSemiring R
inst✝² : CommSemiring S₁
p✝¹ q : MvPolynomial σ R
f✝ : σ → R
S : Type u_1
τ : Type u_2
x : τ → S
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f : R →+* MvPolynomial τ S
g : σ → MvPolynomial τ S
p✝ p : MvPolynomial σ R
n : σ
hp : ↑(eval x) (eval₂ f g p) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) p
⊢ ↑(eval x) (eval₂ f g (p * X n)) = eval₂ (RingHom.comp (eval x) f) (fun s => ↑(eval x) (g s)) (p * X n)