Theorem: finsuppTensorFinsupp_apply
File: Mathlib/LinearAlgebra/DirectSum/Finsupp.lean

tactic: apply Finsupp.induction_linear f
state_before: R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
⊢ ↑(↑(finsuppTensorFinsupp R M N ι κ) (f ⊗ₜ[R] g)) (i, k) = ↑f i ⊗ₜ[R] ↑g k

tactic: simp
state_before: case h0
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
⊢ ↑(↑(finsuppTensorFinsupp R M N ι κ) (0 ⊗ₜ[R] g)) (i, k) = ↑0 i ⊗ₜ[R] ↑g k

tactic: intro f₁ f₂ hf₁ hf₂
state_before: case hadd
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
⊢ ∀ (f g_1 : ι →₀ M),
    ↑(↑(finsuppTensorFinsupp R M N ι κ) (f ⊗ₜ[R] g)) (i, k) = ↑f i ⊗ₜ[R] ↑g k →
      ↑(↑(finsuppTensorFinsupp R M N ι κ) (g_1 ⊗ₜ[R] g)) (i, k) = ↑g_1 i ⊗ₜ[R] ↑g k →
        ↑(↑(finsuppTensorFinsupp R M N ι κ) ((f + g_1) ⊗ₜ[R] g)) (i, k) = ↑(f + g_1) i ⊗ₜ[R] ↑g k

tactic: simp [add_tmul, hf₁, hf₂]
state_before: case hadd
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
f₁ f₂ : ι →₀ M
hf₁ : ↑(↑(finsuppTensorFinsupp R M N ι κ) (f₁ ⊗ₜ[R] g)) (i, k) = ↑f₁ i ⊗ₜ[R] ↑g k
hf₂ : ↑(↑(finsuppTensorFinsupp R M N ι κ) (f₂ ⊗ₜ[R] g)) (i, k) = ↑f₂ i ⊗ₜ[R] ↑g k
⊢ ↑(↑(finsuppTensorFinsupp R M N ι κ) ((f₁ + f₂) ⊗ₜ[R] g)) (i, k) = ↑(f₁ + f₂) i ⊗ₜ[R] ↑g k

tactic: intro i' m
state_before: case hsingle
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
⊢ ∀ (a : ι) (b : M),
    ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single a b ⊗ₜ[R] g)) (i, k) = ↑(Finsupp.single a b) i ⊗ₜ[R] ↑g k

tactic: apply Finsupp.induction_linear g
state_before: case hsingle
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
⊢ ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] g)) (i, k) = ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑g k

tactic: simp
state_before: case hsingle.h0
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
⊢ ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] 0)) (i, k) = ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑0 k

tactic: intro g₁ g₂ hg₁ hg₂
state_before: case hsingle.hadd
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
⊢ ∀ (f g : κ →₀ N),
    ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] f)) (i, k) = ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑f k →
      ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] g)) (i, k) = ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑g k →
        ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] (f + g))) (i, k) =
          ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑(f + g) k

tactic: simp [tmul_add, hg₁, hg₂]
state_before: case hsingle.hadd
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
g₁ g₂ : κ →₀ N
hg₁ : ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] g₁)) (i, k) = ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑g₁ k
hg₂ : ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] g₂)) (i, k) = ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑g₂ k
⊢ ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] (g₁ + g₂))) (i, k) =
    ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑(g₁ + g₂) k

tactic: intro k' n
state_before: case hsingle.hsingle
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
⊢ ∀ (a : κ) (b : N),
    ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] Finsupp.single a b)) (i, k) =
      ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑(Finsupp.single a b) k

tactic: simp only [finsuppTensorFinsupp_single]
state_before: case hsingle.hsingle
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
k' : κ
n : N
⊢ ↑(↑(finsuppTensorFinsupp R M N ι κ) (Finsupp.single i' m ⊗ₜ[R] Finsupp.single k' n)) (i, k) =
    ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑(Finsupp.single k' n) k

tactic: simp only [Finsupp.single_apply]
state_before: case hsingle.hsingle
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
k' : κ
n : N
⊢ ↑(Finsupp.single (i', k') (m ⊗ₜ[R] n)) (i, k) = ↑(Finsupp.single i' m) i ⊗ₜ[R] ↑(Finsupp.single k' n) k

tactic: by_cases h1 : (i', k') = (i, k)
state_before: case hsingle.hsingle
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
k' : κ
n : N
⊢ (if (i', k') = (i, k) then m ⊗ₜ[R] n else 0) = (if i' = i then m else 0) ⊗ₜ[R] if k' = k then n else 0

tactic: simp only [Prod.mk.inj_iff] at h1
state_before: case pos
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
k' : κ
n : N
h1 : (i', k') = (i, k)
⊢ (if (i', k') = (i, k) then m ⊗ₜ[R] n else 0) = (if i' = i then m else 0) ⊗ₜ[R] if k' = k then n else 0

tactic: simp [h1]
state_before: case pos
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
k' : κ
n : N
h1 : i' = i ∧ k' = k
⊢ (if (i', k') = (i, k) then m ⊗ₜ[R] n else 0) = (if i' = i then m else 0) ⊗ₜ[R] if k' = k then n else 0

tactic: simp only [h1, if_false]
state_before: case neg
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
k' : κ
n : N
h1 : ¬(i', k') = (i, k)
⊢ (if (i', k') = (i, k) then m ⊗ₜ[R] n else 0) = (if i' = i then m else 0) ⊗ₜ[R] if k' = k then n else 0

tactic: simp only [Prod.mk.inj_iff, not_and_or] at h1
state_before: case neg
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
k' : κ
n : N
h1 : ¬(i', k') = (i, k)
⊢ 0 = (if i' = i then m else 0) ⊗ₜ[R] if k' = k then n else 0

tactic: cases' h1 with h1 h1 <;> simp [h1]
state_before: case neg
R✝ : Type u
M✝ : Type v
N✝ : Type w
inst✝⁹ : Ring R✝
inst✝⁸ : AddCommGroup M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommGroup N✝
inst✝⁵ : Module R✝ N✝
R : Type u_1
M : Type u_2
N : Type u_3
ι : Type u_4
κ : Type u_5
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : AddCommGroup N
inst✝ : Module R N
f : ι →₀ M
g : κ →₀ N
i : ι
k : κ
i' : ι
m : M
k' : κ
n : N
h1 : ¬i' = i ∨ ¬k' = k
⊢ 0 = (if i' = i then m else 0) ⊗ₜ[R] if k' = k then n else 0