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

tactic: induction' g using PolynomialModule.induction_linear with p q hp hq
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.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
g : PolynomialModule R M
n : ℕ
⊢ ↑(↑(monomial i) r • g) n = if i ≤ n then r • ↑g (n - i) else 0

tactic: simp only [smul_zero, zero_apply, ite_self]
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.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n : ℕ
⊢ ↑(↑(monomial i) r • 0) n = if i ≤ n then r • ↑0 (n - i) else 0

tactic: simp only [smul_add, add_apply, hp, hq]
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.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n : ℕ
p q : PolynomialModule R M
hp : ↑(↑(monomial i) r • p) n = if i ≤ n then r • ↑p (n - i) else 0
hq : ↑(↑(monomial i) r • q) n = if i ≤ n then r • ↑q (n - i) else 0
⊢ ↑(↑(monomial i) r • (p + q)) n = if i ≤ n then r • ↑(p + q) (n - i) else 0

tactic: split_ifs
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.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n : ℕ
p q : PolynomialModule R M
hp : ↑(↑(monomial i) r • p) n = if i ≤ n then r • ↑p (n - i) else 0
hq : ↑(↑(monomial i) r • q) n = if i ≤ n then r • ↑q (n - i) else 0
⊢ ((if i ≤ n then r • ↑p (n - i) else 0) + if i ≤ n then r • ↑q (n - i) else 0) =
    if i ≤ n then r • ↑p (n - i) + r • ↑q (n - i) else 0

tactic: exacts [rfl, zero_add 0]
state_before: case hadd.inl
R : Type u_1
M : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
I : Ideal R
S : Type ?u.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n : ℕ
p q : PolynomialModule R M
hp : ↑(↑(monomial i) r • p) n = if i ≤ n then r • ↑p (n - i) else 0
hq : ↑(↑(monomial i) r • q) n = if i ≤ n then r • ↑q (n - i) else 0
h✝ : i ≤ n
⊢ r • ↑p (n - i) + r • ↑q (n - i) = r • ↑p (n - i) + r • ↑q (n - i)

case hadd.inr
R : Type u_1
M : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
I : Ideal R
S : Type ?u.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n : ℕ
p q : PolynomialModule R M
hp : ↑(↑(monomial i) r • p) n = if i ≤ n then r • ↑p (n - i) else 0
hq : ↑(↑(monomial i) r • q) n = if i ≤ n then r • ↑q (n - i) else 0
h✝ : ¬i ≤ n
⊢ 0 + 0 = 0

tactic: rw [monomial_smul_single, single_apply, single_apply, smul_ite, smul_zero, ← ite_and]
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.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n a✝ : ℕ
b✝ : M
⊢ ↑(↑(monomial i) r • ↑(single R a✝) b✝) n = if i ≤ n then r • ↑(↑(single R a✝) b✝) (n - i) else 0

tactic: congr
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.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n a✝ : ℕ
b✝ : M
⊢ (if i + a✝ = n then r • b✝ else 0) = if i ≤ n ∧ a✝ = n - i then r • b✝ else 0

tactic: rw [eq_iff_iff]
state_before: case hsingle.e_c
R : Type u_1
M : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
I : Ideal R
S : Type ?u.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n a✝ : ℕ
b✝ : M
⊢ (i + a✝ = n) = (i ≤ n ∧ a✝ = n - i)

tactic: constructor
state_before: case hsingle.e_c
R : Type u_1
M : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
I : Ideal R
S : Type ?u.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n a✝ : ℕ
b✝ : M
⊢ i + a✝ = n ↔ i ≤ n ∧ a✝ = n - i

tactic: rintro rfl
state_before: case hsingle.e_c.mp
R : Type u_1
M : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
I : Ideal R
S : Type ?u.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n a✝ : ℕ
b✝ : M
⊢ i + a✝ = n → i ≤ n ∧ a✝ = n - i

tactic: simp
state_before: case hsingle.e_c.mp
R : Type u_1
M : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
I : Ideal R
S : Type ?u.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
a✝ : ℕ
b✝ : M
⊢ i ≤ i + a✝ ∧ a✝ = i + a✝ - i

tactic: rintro ⟨e, rfl⟩
state_before: case hsingle.e_c.mpr
R : Type u_1
M : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
I : Ideal R
S : Type ?u.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n a✝ : ℕ
b✝ : M
⊢ i ≤ n ∧ a✝ = n - i → i + a✝ = n

tactic: rw [add_comm, tsub_add_cancel_of_le e]
state_before: case hsingle.e_c.mpr.intro
R : Type u_1
M : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
I : Ideal R
S : Type ?u.247072
inst✝³ : CommSemiring S
inst✝² : Algebra S R
inst✝¹ : Module S M
inst✝ : IsScalarTower S R M
i : ℕ
r : R
n : ℕ
b✝ : M
e : i ≤ n
⊢ i + (n - i) = n