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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ ∀ (a : R), ↑k (eval₂ f g (↑C a)) = eval₂ k (↑k ∘ g) (↑(map f) (↑C a))

case h_add
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ ∀ (p q : MvPolynomial σ R),
    ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p) →
      ↑k (eval₂ f g q) = eval₂ k (↑k ∘ g) (↑(map f) q) → ↑k (eval₂ f g (p + q)) = eval₂ k (↑k ∘ g) (↑(map f) (p + q))

case h_X
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ ∀ (p : MvPolynomial σ R) (n : σ),
    ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p) → ↑k (eval₂ f g (p * X n)) = eval₂ k (↑k ∘ g) (↑(map f) (p * X n))
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p)
apply MvPolynomial.induction_on p
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
r : R
⊢ ↑k (eval₂ f g (↑C r)) = eval₂ k (↑k ∘ g) (↑(map f) (↑C r))
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ ∀ (a : R), ↑k (eval₂ f g (↑C a)) = eval₂ k (↑k ∘ g) (↑(map f) (↑C a))
intro r
no goals
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
r : R
⊢ ↑k (eval₂ f g (↑C r)) = eval₂ k (↑k ∘ g) (↑(map f) (↑C r))
rw [eval₂_C, map_C, eval₂_C]
case h_add
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p✝ p q : MvPolynomial σ R
hp : ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p)
hq : ↑k (eval₂ f g q) = eval₂ k (↑k ∘ g) (↑(map f) q)
⊢ ↑k (eval₂ f g (p + q)) = eval₂ k (↑k ∘ g) (↑(map f) (p + q))
case h_add
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ ∀ (p q : MvPolynomial σ R),
    ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p) →
      ↑k (eval₂ f g q) = eval₂ k (↑k ∘ g) (↑(map f) q) → ↑k (eval₂ f g (p + q)) = eval₂ k (↑k ∘ g) (↑(map f) (p + q))
intro p q hp hq
no goals
case h_add
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p✝ p q : MvPolynomial σ R
hp : ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p)
hq : ↑k (eval₂ f g q) = eval₂ k (↑k ∘ g) (↑(map f) q)
⊢ ↑k (eval₂ f g (p + q)) = eval₂ k (↑k ∘ g) (↑(map f) (p + q))
rw [eval₂_add, k.map_add, (map f).map_add, eval₂_add, hp, hq]
case h_X
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p✝ p : MvPolynomial σ R
s : σ
hp : ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p)
⊢ ↑k (eval₂ f g (p * X s)) = eval₂ k (↑k ∘ g) (↑(map f) (p * X s))
case h_X
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ ∀ (p : MvPolynomial σ R) (n : σ),
    ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p) → ↑k (eval₂ f g (p * X n)) = eval₂ k (↑k ∘ g) (↑(map f) (p * X n))
intro p s hp
case h_X
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p✝ p : MvPolynomial σ R
s : σ
hp : ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p)
⊢ eval₂ k (↑k ∘ g) (↑(map f) p) * ↑k (g s) = eval₂ k (↑k ∘ g) (↑(map f) p) * (↑k ∘ g) s
case h_X
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p✝ p : MvPolynomial σ R
s : σ
hp : ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p)
⊢ ↑k (eval₂ f g (p * X s)) = eval₂ k (↑k ∘ g) (↑(map f) (p * X s))
rw [eval₂_mul, k.map_mul, (map f).map_mul, eval₂_mul, map_X, hp, eval₂_X, eval₂_X]
no goals
case h_X
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
f✝ : R →+* S₁
S₂ : Type u_1
inst✝ : CommSemiring S₂
k : S₁ →+* S₂
f : R →+* S₁
g : σ → S₁
p✝ p : MvPolynomial σ R
s : σ
hp : ↑k (eval₂ f g p) = eval₂ k (↑k ∘ g) (↑(map f) p)
⊢ eval₂ k (↑k ∘ g) (↑(map f) p) * ↑k (g s) = eval₂ k (↑k ∘ g) (↑(map f) p) * (↑k ∘ g) s
rfl