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

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.520427
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.523079
M' : Type ?u.523082
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) (p • q) = Polynomial.eval r p • ↑(eval r) q

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.520427
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.523079
M' : Type ?u.523082
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), ↑(eval r) (p • ↑(single R a) b) = Polynomial.eval r p • ↑(eval r) (↑(single R a) b)

tactic: induction' p using Polynomial.induction_on' with _ _ e₁ e₂
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.520427
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.523079
M' : Type ?u.523082
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
⊢ ↑(eval r) (p • ↑(single R i) m) = Polynomial.eval r p • ↑(eval r) (↑(single R i) m)

tactic: rw [smul_zero, map_zero, smul_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.520427
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.523079
M' : Type ?u.523082
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) (p • 0) = Polynomial.eval r p • ↑(eval r) 0

tactic: intro f g 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.520427
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.523079
M' : Type ?u.523082
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),
    ↑(eval r) (p • f) = Polynomial.eval r p • ↑(eval r) f →
      ↑(eval r) (p • g) = Polynomial.eval r p • ↑(eval r) g →
        ↑(eval r) (p • (f + g)) = Polynomial.eval r p • ↑(eval r) (f + g)

tactic: rw [smul_add, map_add, e₁, e₂, map_add, smul_add]
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.520427
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.523079
M' : Type ?u.523082
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₁ : ↑(eval r) (p • f) = Polynomial.eval r p • ↑(eval r) f
e₂ : ↑(eval r) (p • g) = Polynomial.eval r p • ↑(eval r) g
⊢ ↑(eval r) (p • (f + g)) = Polynomial.eval r p • ↑(eval r) (f + g)

tactic: rw [add_smul, map_add, Polynomial.eval_add, e₁, e₂, add_smul]
state_before: case hsingle.h_add
R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.520427
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.523079
M' : Type ?u.523082
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
q : PolynomialModule R M
r : R
i : ℕ
m : M
p✝ q✝ : R[X]
e₁ : ↑(eval r) (p✝ • ↑(single R i) m) = Polynomial.eval r p✝ • ↑(eval r) (↑(single R i) m)
e₂ : ↑(eval r) (q✝ • ↑(single R i) m) = Polynomial.eval r q✝ • ↑(eval r) (↑(single R i) m)
⊢ ↑(eval r) ((p✝ + q✝) • ↑(single R i) m) = Polynomial.eval r (p✝ + q✝) • ↑(eval r) (↑(single R i) m)

tactic: rw [monomial_smul_single, eval_single, Polynomial.eval_monomial, eval_single, smul_comm, ←
  smul_smul, pow_add, mul_smul]
state_before: case hsingle.h_monomial
R : Type u_1
M : Type u_2
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
I : Ideal R
S : Type ?u.520427
inst✝⁹ : CommSemiring S
inst✝⁸ : Algebra S R
inst✝⁷ : Module S M
inst✝⁶ : IsScalarTower S R M
R' : Type ?u.523079
M' : Type ?u.523082
inst✝⁵ : CommRing R'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R' M'
inst✝² : Algebra R R'
inst✝¹ : Module R M'
inst✝ : IsScalarTower R R' M'
q : PolynomialModule R M
r : R
i : ℕ
m : M
n✝ : ℕ
a✝ : R
⊢ ↑(eval r) (↑(monomial n✝) a✝ • ↑(single R i) m) = Polynomial.eval r (↑(monomial n✝) a✝) • ↑(eval r) (↑(single R i) m)