Theorem: Matrix.toLin_self
File: Mathlib/LinearAlgebra/Matrix/ToLin.lean

tactic: rw [Matrix.toLin_apply, Finset.sum_congr rfl fun j _hj => ?_]
state_before: R : Type u_3
inst✝⁷ : CommSemiring R
l : Type ?u.1718698
m : Type u_1
n : Type u_2
inst✝⁶ : Fintype n
inst✝⁵ : Fintype m
inst✝⁴ : DecidableEq n
M₁ : Type u_5
M₂ : Type u_4
inst✝³ : AddCommMonoid M₁
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M₁
inst✝ : Module R M₂
v₁ : Basis n R M₁
v₂ : Basis m R M₂
M : Matrix m n R
i : n
⊢ ↑(↑(toLin v₁ v₂) M) (↑v₁ i) = ∑ j : m, M j i • ↑v₂ j

tactic: rw [Basis.repr_self, Matrix.mulVec, dotProduct, Finset.sum_eq_single i, Finsupp.single_eq_same,
  mul_one]
state_before: R : Type u_3
inst✝⁷ : CommSemiring R
l : Type ?u.1718698
m : Type u_1
n : Type u_2
inst✝⁶ : Fintype n
inst✝⁵ : Fintype m
inst✝⁴ : DecidableEq n
M₁ : Type u_5
M₂ : Type u_4
inst✝³ : AddCommMonoid M₁
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M₁
inst✝ : Module R M₂
v₁ : Basis n R M₁
v₂ : Basis m R M₂
M : Matrix m n R
i : n
j : m
_hj : j ∈ Finset.univ
⊢ mulVec M (↑(↑v₁.repr (↑v₁ i))) j • ↑v₂ j = M j i • ↑v₂ j

tactic: intro i' _ i'_ne
state_before: case h₀
R : Type u_3
inst✝⁷ : CommSemiring R
l : Type ?u.1718698
m : Type u_1
n : Type u_2
inst✝⁶ : Fintype n
inst✝⁵ : Fintype m
inst✝⁴ : DecidableEq n
M₁ : Type u_5
M₂ : Type u_4
inst✝³ : AddCommMonoid M₁
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M₁
inst✝ : Module R M₂
v₁ : Basis n R M₁
v₂ : Basis m R M₂
M : Matrix m n R
i : n
j : m
_hj : j ∈ Finset.univ
⊢ ∀ (b : n), b ∈ Finset.univ → b ≠ i → M j b * ↑(Finsupp.single i 1) b = 0

tactic: rw [Finsupp.single_eq_of_ne i'_ne.symm, MulZeroClass.mul_zero]
state_before: case h₀
R : Type u_3
inst✝⁷ : CommSemiring R
l : Type ?u.1718698
m : Type u_1
n : Type u_2
inst✝⁶ : Fintype n
inst✝⁵ : Fintype m
inst✝⁴ : DecidableEq n
M₁ : Type u_5
M₂ : Type u_4
inst✝³ : AddCommMonoid M₁
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M₁
inst✝ : Module R M₂
v₁ : Basis n R M₁
v₂ : Basis m R M₂
M : Matrix m n R
i : n
j : m
_hj : j ∈ Finset.univ
i' : n
a✝ : i' ∈ Finset.univ
i'_ne : i' ≠ i
⊢ M j i' * ↑(Finsupp.single i 1) i' = 0

tactic: intros
state_before: case h₁
R : Type u_3
inst✝⁷ : CommSemiring R
l : Type ?u.1718698
m : Type u_1
n : Type u_2
inst✝⁶ : Fintype n
inst✝⁵ : Fintype m
inst✝⁴ : DecidableEq n
M₁ : Type u_5
M₂ : Type u_4
inst✝³ : AddCommMonoid M₁
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M₁
inst✝ : Module R M₂
v₁ : Basis n R M₁
v₂ : Basis m R M₂
M : Matrix m n R
i : n
j : m
_hj : j ∈ Finset.univ
⊢ ¬i ∈ Finset.univ → M j i * ↑(Finsupp.single i 1) i = 0

tactic: have := Finset.mem_univ i
state_before: case h₁
R : Type u_3
inst✝⁷ : CommSemiring R
l : Type ?u.1718698
m : Type u_1
n : Type u_2
inst✝⁶ : Fintype n
inst✝⁵ : Fintype m
inst✝⁴ : DecidableEq n
M₁ : Type u_5
M₂ : Type u_4
inst✝³ : AddCommMonoid M₁
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M₁
inst✝ : Module R M₂
v₁ : Basis n R M₁
v₂ : Basis m R M₂
M : Matrix m n R
i : n
j : m
_hj : j ∈ Finset.univ
a✝ : ¬i ∈ Finset.univ
⊢ M j i * ↑(Finsupp.single i 1) i = 0

tactic: contradiction
state_before: case h₁
R : Type u_3
inst✝⁷ : CommSemiring R
l : Type ?u.1718698
m : Type u_1
n : Type u_2
inst✝⁶ : Fintype n
inst✝⁵ : Fintype m
inst✝⁴ : DecidableEq n
M₁ : Type u_5
M₂ : Type u_4
inst✝³ : AddCommMonoid M₁
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M₁
inst✝ : Module R M₂
v₁ : Basis n R M₁
v₂ : Basis m R M₂
M : Matrix m n R
i : n
j : m
_hj : j ∈ Finset.univ
a✝ : ¬i ∈ Finset.univ
this : i ∈ Finset.univ
⊢ M j i * ↑(Finsupp.single i 1) i = 0