-- Mathlib/LinearAlgebra/DirectSum/Finsupp.lean
lemma finsuppRight_apply_tmul (m : M) (p : ι →₀ N) :
    finsuppRight R M N ι (m ⊗ₜ[R] p) = p.sum fun i n ↦ Finsupp.single i (m ⊗ₜ[R] n)

Proof state:
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)

Tactic:
intros f g hf hg

Result:
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 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)

Proof state:
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)

Tactic:
simp

Result:
no goals

Proof state:
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)

Tactic:
apply p.induction_linear

Result:
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)

Proof state:
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 [finsuppRight]

Result:
no goals

Proof state:
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 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]

Result:
no goals