Theorem: MvPolynomial.eval_polynomial_eval_finSuccEquiv
File: Mathlib/Algebra/MvPolynomial/Polynomial.lean

tactic: simp only [finSuccEquiv_apply, coe_eval₂Hom, polynomial_eval_eval₂, eval_eval₂]
state_before: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ (eval x) (Polynomial.eval q ((finSuccEquiv R n) f)) = (eval fun i => Fin.cases ((eval x) q) x i) f
state_after: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ eval₂ ((eval x).comp ((Polynomial.evalRingHom q).comp (Polynomial.C.comp C)))
      (fun s => (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) s))) f =
    (eval fun i => Fin.cases ((eval x) q) x i) f

tactic: conv in RingHom.comp _ _ =>
  refine @RingHom.ext _ _ _ _ _ (RingHom.id _) fun r => ?_
  simp
state_before: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ eval₂ ((eval x).comp ((Polynomial.evalRingHom q).comp (Polynomial.C.comp C)))
      (fun s => (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) s))) f =
    (eval fun i => Fin.cases ((eval x) q) x i) f
state_after: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ eval₂ (RingHom.id R) (fun s => (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) s)))
      f =
    (eval fun i => Fin.cases ((eval x) q) x i) f

tactic: simp only [eval₂_id]
state_before: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ eval₂ (RingHom.id R) (fun s => (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) s)))
      f =
    (eval fun i => Fin.cases ((eval x) q) x i) f
state_after: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ (eval fun s => (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) s))) f =
    (eval fun i => Fin.cases ((eval x) q) x i) f

tactic: congr
state_before: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ (eval fun s => (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) s))) f =
    (eval fun i => Fin.cases ((eval x) q) x i) f
state_after: case e_a.e_f
R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ (fun s => (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) s))) = fun i =>
    Fin.cases ((eval x) q) x i

tactic: funext i
state_before: case e_a.e_f
R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
⊢ (fun s => (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) s))) = fun i =>
    Fin.cases ((eval x) q) x i
state_after: case e_a.e_f.h
R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
i : Fin (n + 1)
⊢ (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) i)) = Fin.cases ((eval x) q) x i

tactic: refine Fin.cases (by simp) (by simp) i
state_before: case e_a.e_f.h
R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
i : Fin (n + 1)
⊢ (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) i)) = Fin.cases ((eval x) q) x i
state_after: no goals

tactic: simp
state_before: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
i : Fin (n + 1)
⊢ (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) 0)) = Fin.cases ((eval x) q) x 0
state_after: no goals

tactic: simp
state_before: R : Type u_1
S : Type u_2
σ : Type u_3
n : ℕ
x : Fin n → R
inst✝ : CommSemiring R
f : MvPolynomial (Fin (n + 1)) R
q : MvPolynomial (Fin n) R
i : Fin (n + 1)
⊢ ∀ (i : Fin n),
    (eval x) (Polynomial.eval q (Fin.cases Polynomial.X (fun k => Polynomial.C (X k)) i.succ)) =
      Fin.cases ((eval x) q) x i.succ
state_after: no goals