Theorem: Matrix.ker_mulVecLin_conjTranspose_mul_self
File: Mathlib/Data/Matrix/Rank.lean

tactic: ext x
state_before: l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
⊢ LinearMap.ker (mulVecLin (Aᴴ ⬝ A)) = LinearMap.ker (mulVecLin A)

tactic: simp only [LinearMap.mem_ker, mulVecLin_apply, ← mulVec_mulVec]
state_before: case h
l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
x : n → R
⊢ x ∈ LinearMap.ker (mulVecLin (Aᴴ ⬝ A)) ↔ x ∈ LinearMap.ker (mulVecLin A)

tactic: constructor
state_before: case h
l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
x : n → R
⊢ mulVec Aᴴ (mulVec A x) = 0 ↔ mulVec A x = 0

tactic: intro h
state_before: case h.mp
l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
x : n → R
⊢ mulVec Aᴴ (mulVec A x) = 0 → mulVec A x = 0

tactic: replace h := congr_arg (dotProduct (star x)) h
state_before: case h.mp
l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
x : n → R
h : mulVec Aᴴ (mulVec A x) = 0
⊢ mulVec A x = 0

tactic: haveI : NoZeroDivisors R := inferInstance
state_before: case h.mp
l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
x : n → R
h : star x ⬝ᵥ mulVec Aᴴ (mulVec A x) = star x ⬝ᵥ 0
⊢ mulVec A x = 0

tactic: rwa [dotProduct_mulVec, dotProduct_zero, vecMul_conjTranspose, star_star,
  @dotProduct_star_self_eq_zero R _ _ _ _ _ ‹_›] at h
state_before: case h.mp
l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
x : n → R
h : star x ⬝ᵥ mulVec Aᴴ (mulVec A x) = star x ⬝ᵥ 0
this : NoZeroDivisors R
⊢ mulVec A x = 0

tactic: intro h
state_before: case h.mpr
l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
x : n → R
⊢ mulVec A x = 0 → mulVec Aᴴ (mulVec A x) = 0

tactic: rw [h, mulVec_zero]
state_before: case h.mpr
l : Type ?u.235390
m : Type u_1
n : Type u_2
o : Type ?u.235399
R : Type u_3
m_fin : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : Fintype o
inst✝³ : Fintype m
inst✝² : Field R
inst✝¹ : PartialOrder R
inst✝ : StarOrderedRing R
A : Matrix m n R
x : n → R
h : mulVec A x = 0
⊢ mulVec Aᴴ (mulVec A x) = 0