Theorem: Matrix.colSpace_eq_top_iff_linearIndependent_rows (Matroid/ForMathlib/LinearAlgebra/Matrix/Rowspace.lean)

State before:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
⊢ A.colSpace = ⊤ ↔ LinearIndependent K A.rowFun
Tactic:
rw [← not_iff_not, ← Ne, ← lt_top_iff_ne_top, ← orthSpace_lt_iff_lt, orthSpace_top,
  bot_lt_iff_ne_bot, Submodule.ne_bot_iff, Fintype.not_linearIndependent_iff]
State after:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
⊢ (∃ x ∈ A.colSpace.orthSpace, x ≠ 0) ↔ ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, g i ≠ 0

State before:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
⊢ (∃ x ∈ A.colSpace.orthSpace, x ≠ 0) ↔ ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, g i ≠ 0
Tactic:
simp only [mem_orthSpace_iff', ne_eq, ← smul_eq_mul]
State after:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
⊢ (∃ x, (∀ y ∈ A.colSpace, ∑ x_1 : m, x x_1 • y x_1 = 0) ∧ ¬x = 0) ↔ ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0

State before:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
⊢ (∃ x, (∀ y ∈ A.colSpace, ∑ x_1 : m, x x_1 • y x_1 = 0) ∧ ¬x = 0) ↔ ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
Tactic:
refine ⟨fun ⟨x,hx,h0⟩ ↦ ⟨x, ?_, ne_iff.mp h0⟩, fun ⟨x,hx,h0⟩ ↦ ⟨x, fun y hy ↦ ?_, ne_iff.mpr h0⟩⟩
State after:
case refine_1
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ x, (∀ y ∈ A.colSpace, ∑ x_1 : m, x x_1 • y x_1 = 0) ∧ ¬x = 0
x : m → K
hx : ∀ y ∈ A.colSpace, ∑ x_1 : m, x x_1 • y x_1 = 0
h0 : ¬x = 0
⊢ ∑ i : m, x i • A.rowFun i = 0

case refine_2
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
x : m → K
hx : ∑ i : m, x i • A.rowFun i = 0
h0 : ∃ i, ¬x i = 0
y : m → K
hy : y ∈ A.colSpace
⊢ ∑ x_1 : m, x x_1 • y x_1 = 0

State before:
case refine_2
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
x : m → K
hx : ∑ i : m, x i • A.rowFun i = 0
h0 : ∃ i, ¬x i = 0
y : m → K
hy : y ∈ A.colSpace
⊢ ∑ x_1 : m, x x_1 • y x_1 = 0
Tactic:
apply dotProduct_eq_zero_of_mem_span hy
State after:
case refine_2
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
x : m → K
hx : ∑ i : m, x i • A.rowFun i = 0
h0 : ∃ i, ¬x i = 0
y : m → K
hy : y ∈ A.colSpace
⊢ ∀ z ∈ range Aᵀ.rowFun, (fun i => x i) ⬝ᵥ z = 0

State before:
case refine_2
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
x : m → K
hx : ∑ i : m, x i • A.rowFun i = 0
h0 : ∃ i, ¬x i = 0
y : m → K
hy : y ∈ A.colSpace
⊢ ∀ z ∈ range Aᵀ.rowFun, (fun i => x i) ⬝ᵥ z = 0
Tactic:
rintro _ ⟨i,hi,rfl⟩
State after:
case refine_2.intro.refl
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
x : m → K
hx : ∑ i : m, x i • A.rowFun i = 0
h0 : ∃ i, ¬x i = 0
y : m → K
hy : y ∈ A.colSpace
i : n
⊢ (fun i => x i) ⬝ᵥ Aᵀ.rowFun i = 0

State before:
case refine_2.intro.refl
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
x : m → K
hx : ∑ i : m, x i • A.rowFun i = 0
h0 : ∃ i, ¬x i = 0
y : m → K
hy : y ∈ A.colSpace
i : n
⊢ (fun i => x i) ⬝ᵥ Aᵀ.rowFun i = 0
Tactic:
convert congr_fun hx i
State after:
case h.e'_2
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
x : m → K
hx : ∑ i : m, x i • A.rowFun i = 0
h0 : ∃ i, ¬x i = 0
y : m → K
hy : y ∈ A.colSpace
i : n
⊢ (fun i => x i) ⬝ᵥ Aᵀ.rowFun i = (∑ i : m, x i • A.rowFun i) i

State before:
case h.e'_2
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝ : ∃ g, ∑ i : m, g i • A.rowFun i = 0 ∧ ∃ i, ¬g i = 0
x : m → K
hx : ∑ i : m, x i • A.rowFun i = 0
h0 : ∃ i, ¬x i = 0
y : m → K
hy : y ∈ A.colSpace
i : n
⊢ (fun i => x i) ⬝ᵥ Aᵀ.rowFun i = (∑ i : m, x i • A.rowFun i) i
Tactic:
simp only [dotProduct, rowFun_transpose, transpose_apply, Finset.sum_apply, Pi.smul_apply,
  smul_eq_mul]
State after:
no goals

State before:
case h.e'_2.h
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B : Matrix m n R
K : Type u_14
inst✝¹ : Field K
A : Matrix m n K
inst✝ : Fintype m
x✝¹ : ∃ x, (∀ y ∈ A.colSpace, ∑ x_1 : m, x x_1 • y x_1 = 0) ∧ ¬x = 0
x : m → K
hx : ∀ y ∈ A.colSpace, ∑ x_1 : m, x x_1 • y x_1 = 0
h0 : ¬x = 0
x✝ : n
⊢ (∑ i : m, x i • A.rowFun i) x✝ = ∑ x_1 : m, x x_1 • (fun x => A x x✝) x_1
Tactic:
simp
State after:
no goals