Theorem: MvPolynomial.eval₂_eq_eval_map
File: Mathlib/Algebra/MvPolynomial/Basic.lean

tactic: unfold map eval
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ eval₂ f g p = (eval g) ((map f) p)
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ eval₂ f g p = (eval₂Hom (RingHom.id S₁) g) ((eval₂Hom (C.comp f) X) p)

tactic: simp only [coe_eval₂Hom]
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ eval₂ f g p = (eval₂Hom (RingHom.id S₁) g) ((eval₂Hom (C.comp f) X) p)
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ eval₂ f g p = eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p)

tactic: have h := eval₂_comp_left (eval₂Hom (RingHom.id S₁) g) (C.comp f) X p
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ eval₂ f g p = eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p)
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  (eval₂Hom (RingHom.id S₁) g) (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (⇑(eval₂Hom (RingHom.id S₁) g) ∘ X) p
⊢ eval₂ f g p = eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p)

tactic: dsimp [-eval₂_id] at h
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  (eval₂Hom (RingHom.id S₁) g) (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (⇑(eval₂Hom (RingHom.id S₁) g) ∘ X) p
⊢ eval₂ f g p = eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p)
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
⊢ eval₂ f g p = eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p)

tactic: rw [h]
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
⊢ eval₂ f g p = eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p)
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
⊢ eval₂ f g p = eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p

tactic: congr
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
⊢ eval₂ f g p = eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
state_after: case e_f
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
⊢ f = (eval₂Hom (RingHom.id S₁) g).comp (C.comp f)

case e_g
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
⊢ g = eval₂ (RingHom.id S₁) g ∘ X

tactic: ext1 a
state_before: case e_f
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
⊢ f = (eval₂Hom (RingHom.id S₁) g).comp (C.comp f)
state_after: case e_f.a
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a✝ a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
a : R
⊢ f a = ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) a

tactic: simp only [coe_eval₂Hom, RingHom.id_apply, comp_apply, eval₂_C, RingHom.coe_comp]
state_before: case e_f.a
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a✝ a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
a : R
⊢ f a = ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) a
state_after: no goals

tactic: ext1 n
state_before: case e_g
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
⊢ g = eval₂ (RingHom.id S₁) g ∘ X
state_after: case e_g.h
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n✝ m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
n : σ
⊢ g n = (eval₂ (RingHom.id S₁) g ∘ X) n

tactic: simp only [comp_apply, eval₂_X]
state_before: case e_g.h
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n✝ m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
h :
  eval₂ (RingHom.id S₁) g (eval₂ (C.comp f) X p) =
    eval₂ ((eval₂Hom (RingHom.id S₁) g).comp (C.comp f)) (eval₂ (RingHom.id S₁) g ∘ X) p
n : σ
⊢ g n = (eval₂ (RingHom.id S₁) g ∘ X) n
state_after: no goals