Theorem: PolynomialModule.comp_eval
File: Mathlib/Data/Polynomial/Module.lean

tactic: rw [← LinearMap.comp_apply]
state_before: R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.687011
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.689663
M' : Type ?u.689666
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
p : R[X]
q : PolynomialModule R M
r : R
⊢ ↑(eval r) (↑(comp p) q) = ↑(eval (Polynomial.eval r p)) q

tactic: apply induction_linear q
state_before: R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.687011
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.689663
M' : Type ?u.689666
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
p : R[X]
q : PolynomialModule R M
r : R
⊢ ↑(LinearMap.comp (eval r) (comp p)) q = ↑(eval (Polynomial.eval r p)) q

tactic: simp_rw [map_zero]
state_before: case h0
R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.687011
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.689663
M' : Type ?u.689666
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
p : R[X]
q : PolynomialModule R M
r : R
⊢ ↑(LinearMap.comp (eval r) (comp p)) 0 = ↑(eval (Polynomial.eval r p)) 0

tactic: intro _ _ e₁ e₂
state_before: case hadd
R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.687011
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.689663
M' : Type ?u.689666
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
p : R[X]
q : PolynomialModule R M
r : R
⊢ ∀ (f g : PolynomialModule R M),
    ↑(LinearMap.comp (eval r) (comp p)) f = ↑(eval (Polynomial.eval r p)) f →
      ↑(LinearMap.comp (eval r) (comp p)) g = ↑(eval (Polynomial.eval r p)) g →
        ↑(LinearMap.comp (eval r) (comp p)) (f + g) = ↑(eval (Polynomial.eval r p)) (f + g)

tactic: simp_rw [map_add, e₁, e₂]
state_before: case hadd
R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.687011
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.689663
M' : Type ?u.689666
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
p : R[X]
q : PolynomialModule R M
r : R
f✝ g✝ : PolynomialModule R M
e₁ : ↑(LinearMap.comp (eval r) (comp p)) f✝ = ↑(eval (Polynomial.eval r p)) f✝
e₂ : ↑(LinearMap.comp (eval r) (comp p)) g✝ = ↑(eval (Polynomial.eval r p)) g✝
⊢ ↑(LinearMap.comp (eval r) (comp p)) (f✝ + g✝) = ↑(eval (Polynomial.eval r p)) (f✝ + g✝)

tactic: intro i m
state_before: case hsingle
R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.687011
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.689663
M' : Type ?u.689666
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
p : R[X]
q : PolynomialModule R M
r : R
⊢ ∀ (a : ℕ) (b : M),
    ↑(LinearMap.comp (eval r) (comp p)) (↑(single R a) b) = ↑(eval (Polynomial.eval r p)) (↑(single R a) b)

tactic: rw [LinearMap.comp_apply, comp_single, eval_single, eval_smul, eval_single, pow_zero, one_smul,
  Polynomial.eval_pow]
state_before: case hsingle
R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.687011
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.689663
M' : Type ?u.689666
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
p : R[X]
q : PolynomialModule R M
r : R
i : ℕ
m : M
⊢ ↑(LinearMap.comp (eval r) (comp p)) (↑(single R i) m) = ↑(eval (Polynomial.eval r p)) (↑(single R i) m)