Theorem: TensorProduct.finsuppRight_apply_tmul
File: Mathlib/LinearAlgebra/DirectSum/Finsupp.lean

tactic: apply p.induction_linear
state_before: R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
⊢ (finsuppRight R M N ι) (m ⊗ₜ[R] p) = p.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)
state_after: case h0
R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
⊢ (finsuppRight R M N ι) (m ⊗ₜ[R] 0) = Finsupp.sum 0 fun i n => Finsupp.single i (m ⊗ₜ[R] n)

case hadd
R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
⊢ ∀ (f g : ι →₀ N),
    ((finsuppRight R M N ι) (m ⊗ₜ[R] f) = f.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)) →
      ((finsuppRight R M N ι) (m ⊗ₜ[R] g) = g.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)) →
        (finsuppRight R M N ι) (m ⊗ₜ[R] (f + g)) = (f + g).sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)

case hsingle
R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
⊢ ∀ (a : ι) (b : N),
    (finsuppRight R M N ι) (m ⊗ₜ[R] Finsupp.single a b) =
      (Finsupp.single a b).sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)

tactic: simp
state_before: case h0
R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
⊢ (finsuppRight R M N ι) (m ⊗ₜ[R] 0) = Finsupp.sum 0 fun i n => Finsupp.single i (m ⊗ₜ[R] n)
state_after: no goals

tactic: intros f g hf hg
state_before: case hadd
R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
⊢ ∀ (f g : ι →₀ N),
    ((finsuppRight R M N ι) (m ⊗ₜ[R] f) = f.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)) →
      ((finsuppRight R M N ι) (m ⊗ₜ[R] g) = g.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)) →
        (finsuppRight R M N ι) (m ⊗ₜ[R] (f + g)) = (f + g).sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)
state_after: case hadd
R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
f g : ι →₀ N
hf : (finsuppRight R M N ι) (m ⊗ₜ[R] f) = f.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)
hg : (finsuppRight R M N ι) (m ⊗ₜ[R] g) = g.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)
⊢ (finsuppRight R M N ι) (m ⊗ₜ[R] (f + g)) = (f + g).sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)

tactic: simp [tmul_add, map_add, hf, hg, Finsupp.sum_add_index]
state_before: case hadd
R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
f g : ι →₀ N
hf : (finsuppRight R M N ι) (m ⊗ₜ[R] f) = f.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)
hg : (finsuppRight R M N ι) (m ⊗ₜ[R] g) = g.sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)
⊢ (finsuppRight R M N ι) (m ⊗ₜ[R] (f + g)) = (f + g).sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)
state_after: no goals

tactic: simp [finsuppRight]
state_before: case hsingle
R : Type u_1
inst✝⁵ : CommSemiring R
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
N : Type u_3
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_4
inst✝ : DecidableEq ι
m : M
p : ι →₀ N
⊢ ∀ (a : ι) (b : N),
    (finsuppRight R M N ι) (m ⊗ₜ[R] Finsupp.single a b) =
      (Finsupp.single a b).sum fun i n => Finsupp.single i (m ⊗ₜ[R] n)
state_after: no goals