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

tactic: rw [← coe_vecMulLinear]
state_before: R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
⊢ (Function.Injective fun v => v ᵥ* M) ↔ LinearIndependent R fun i => M i
state_after: R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
⊢ Function.Injective ⇑M.vecMulLinear ↔ LinearIndependent R fun i => M i

tactic: simp only [← LinearMap.ker_eq_bot, Fintype.linearIndependent_iff, Submodule.eq_bot_iff,
  LinearMap.mem_ker, vecMulLinear_apply]
state_before: R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
⊢ Function.Injective ⇑M.vecMulLinear ↔ LinearIndependent R fun i => M i
state_after: R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
⊢ (∀ (x : m → R), x ᵥ* M = 0 → x = 0) ↔ ∀ (g : m → R), ∑ i : m, g i • M i = 0 → ∀ (i : m), g i = 0

tactic: refine ⟨fun h c h0 ↦ congr_fun <| h c ?_, fun h c h0 ↦ funext <| h c ?_⟩
state_before: R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
⊢ (∀ (x : m → R), x ᵥ* M = 0 → x = 0) ↔ ∀ (g : m → R), ∑ i : m, g i • M i = 0 → ∀ (i : m), g i = 0
state_after: case refine_1
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (x : m → R), x ᵥ* M = 0 → x = 0
c : m → R
h0 : ∑ i : m, c i • M i = 0
⊢ c ᵥ* M = 0

case refine_2
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (g : m → R), ∑ i : m, g i • M i = 0 → ∀ (i : m), g i = 0
c : m → R
h0 : c ᵥ* M = 0
⊢ ∑ i : m, c i • M i = 0

tactic: rw [← h0]
state_before: case refine_1
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (x : m → R), x ᵥ* M = 0 → x = 0
c : m → R
h0 : ∑ i : m, c i • M i = 0
⊢ c ᵥ* M = 0
state_after: case refine_1
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (x : m → R), x ᵥ* M = 0 → x = 0
c : m → R
h0 : ∑ i : m, c i • M i = 0
⊢ c ᵥ* M = ∑ i : m, c i • M i

tactic: ext i
state_before: case refine_1
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (x : m → R), x ᵥ* M = 0 → x = 0
c : m → R
h0 : ∑ i : m, c i • M i = 0
⊢ c ᵥ* M = ∑ i : m, c i • M i
state_after: case refine_1.h
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (x : m → R), x ᵥ* M = 0 → x = 0
c : m → R
h0 : ∑ i : m, c i • M i = 0
i : n
⊢ (c ᵥ* M) i = (∑ i : m, c i • M i) i

tactic: simp [vecMul, dotProduct]
state_before: case refine_1.h
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (x : m → R), x ᵥ* M = 0 → x = 0
c : m → R
h0 : ∑ i : m, c i • M i = 0
i : n
⊢ (c ᵥ* M) i = (∑ i : m, c i • M i) i
state_after: no goals

tactic: rw [← h0]
state_before: case refine_2
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (g : m → R), ∑ i : m, g i • M i = 0 → ∀ (i : m), g i = 0
c : m → R
h0 : c ᵥ* M = 0
⊢ ∑ i : m, c i • M i = 0
state_after: case refine_2
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (g : m → R), ∑ i : m, g i • M i = 0 → ∀ (i : m), g i = 0
c : m → R
h0 : c ᵥ* M = 0
⊢ ∑ i : m, c i • M i = c ᵥ* M

tactic: ext j
state_before: case refine_2
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (g : m → R), ∑ i : m, g i • M i = 0 → ∀ (i : m), g i = 0
c : m → R
h0 : c ᵥ* M = 0
⊢ ∑ i : m, c i • M i = c ᵥ* M
state_after: case refine_2.h
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (g : m → R), ∑ i : m, g i • M i = 0 → ∀ (i : m), g i = 0
c : m → R
h0 : c ᵥ* M = 0
j : n
⊢ (∑ i : m, c i • M i) j = (c ᵥ* M) j

tactic: simp [vecMul, dotProduct]
state_before: case refine_2.h
R✝ : Type u_1
inst✝³ : Semiring R✝
l : Type u_2
m : Type u_3
n : Type u_4
inst✝² : Fintype m
inst✝¹ : DecidableEq m
R : Type u_5
inst✝ : CommRing R
M : Matrix m n R
h : ∀ (g : m → R), ∑ i : m, g i • M i = 0 → ∀ (i : m), g i = 0
c : m → R
h0 : c ᵥ* M = 0
j : n
⊢ (∑ i : m, c i • M i) j = (c ᵥ* M) j
state_after: no goals