Theorem: Matrix.nondegenerate_of_det_ne_zero
File: Mathlib/LinearAlgebra/Matrix/Nondegenerate.lean

tactic: intro v hv
state_before: m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
⊢ M.Nondegenerate
state_after: m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
hv : ∀ (w : m → A), v ⬝ᵥ M *ᵥ w = 0
⊢ v = 0

tactic: ext i
state_before: m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
hv : ∀ (w : m → A), v ⬝ᵥ M *ᵥ w = 0
⊢ v = 0
state_after: case h
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
hv : ∀ (w : m → A), v ⬝ᵥ M *ᵥ w = 0
i : m
⊢ v i = 0 i

tactic: specialize hv (M.cramer (Pi.single i 1))
state_before: case h
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
hv : ∀ (w : m → A), v ⬝ᵥ M *ᵥ w = 0
i : m
⊢ v i = 0 i
state_after: case h
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ v i = 0 i

tactic: refine (mul_eq_zero.mp ?_).resolve_right hM
state_before: case h
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ v i = 0 i
state_after: case h
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ v i * M.det = 0

tactic: convert hv
state_before: case h
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ v i * M.det = 0
state_after: case h.e'_2
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ v i * M.det = v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1)

tactic: simp only [mulVec_cramer M (Pi.single i 1), dotProduct, Pi.smul_apply, smul_eq_mul]
state_before: case h.e'_2
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ v i * M.det = v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1)
state_after: case h.e'_2
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ v i * M.det = ∑ x : m, v x * (M.det * Pi.single i 1 x)

tactic: rw [Finset.sum_eq_single i, Pi.single_eq_same, mul_one]
state_before: case h.e'_2
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ v i * M.det = ∑ x : m, v x * (M.det * Pi.single i 1 x)
state_after: case h.e'_2.h₀
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ ∀ b ∈ Finset.univ, b ≠ i → v b * (M.det * Pi.single i 1 b) = 0

case h.e'_2.h₁
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ i ∉ Finset.univ → v i * (M.det * Pi.single i 1 i) = 0

tactic: intro j _ hj
state_before: case h.e'_2.h₀
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ ∀ b ∈ Finset.univ, b ≠ i → v b * (M.det * Pi.single i 1 b) = 0
state_after: case h.e'_2.h₀
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
j : m
a✝ : j ∈ Finset.univ
hj : j ≠ i
⊢ v j * (M.det * Pi.single i 1 j) = 0

tactic: simp [hj]
state_before: case h.e'_2.h₀
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
j : m
a✝ : j ∈ Finset.univ
hj : j ≠ i
⊢ v j * (M.det * Pi.single i 1 j) = 0
state_after: no goals

tactic: intros
state_before: case h.e'_2.h₁
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
⊢ i ∉ Finset.univ → v i * (M.det * Pi.single i 1 i) = 0
state_after: case h.e'_2.h₁
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
a✝ : i ∉ Finset.univ
⊢ v i * (M.det * Pi.single i 1 i) = 0

tactic: have := Finset.mem_univ i
state_before: case h.e'_2.h₁
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
a✝ : i ∉ Finset.univ
⊢ v i * (M.det * Pi.single i 1 i) = 0
state_after: case h.e'_2.h₁
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
a✝ : i ∉ Finset.univ
this : i ∈ Finset.univ
⊢ v i * (M.det * Pi.single i 1 i) = 0

tactic: contradiction
state_before: case h.e'_2.h₁
m : Type u_1
R : Type u_2
A : Type u_3
inst✝⁴ : Fintype m
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : DecidableEq m
M : Matrix m m A
hM : M.det ≠ 0
v : m → A
i : m
hv : v ⬝ᵥ M *ᵥ M.cramer (Pi.single i 1) = 0
a✝ : i ∉ Finset.univ
this : i ∈ Finset.univ
⊢ v i * (M.det * Pi.single i 1 i) = 0
state_after: no goals