Skip to content

Commit dc585c9

Browse files
feat: Positivity/Nonnegativity of Eigenvalues of PosDef/PosSemidef Matrices (#6368)
Two lemmas: - `Matrix.PosDef.eigenvalues_pos`: $$A \in k^{n\times n}, A > 0 \implies \lambda (A) >0$$ - `Matrix.PosSemidef.eigenvalues_nonneg`: $$A \in k^{n\times n}, A \geq 0 \implies \lambda (A) \geq 0$$ Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
1 parent 1c91df4 commit dc585c9

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

Mathlib/LinearAlgebra/Matrix/PosDef.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,17 @@ theorem posSemidef_conjTranspose_mul_self (A : Matrix m n 𝕜) : Matrix.PosSemi
104104
theorem posSemidef_self_mul_conjTranspose (A : Matrix m n 𝕜) : Matrix.PosSemidef (A ⬝ Aᴴ) :=
105105
by simpa only [conjTranspose_conjTranspose] using posSemidef_conjTranspose_mul_self Aᴴ
106106

107+
/-- The eigenvalues of a positive definite matrix are positive -/
108+
lemma PosDef.eigenvalues_pos [DecidableEq n] [DecidableEq 𝕜] {A : Matrix n n 𝕜}
109+
(hA : Matrix.PosDef A) (i : n) : 0 < hA.1.eigenvalues i := by
110+
rw [hA.1.eigenvalues_eq, hA.1.transpose_eigenvectorMatrix_apply]
111+
exact hA.2 _ <| hA.1.eigenvectorBasis.orthonormal.ne_zero i
112+
113+
/-- The eigenvalues of a positive semi-definite matrix are non-negative -/
114+
lemma PosSemidef.eigenvalues_nonneg [DecidableEq n] [DecidableEq 𝕜] {A : Matrix n n 𝕜}
115+
(hA : Matrix.PosSemidef A) (i : n) : 0 ≤ hA.1.eigenvalues i :=
116+
(hA.2 _).trans_eq (hA.1.eigenvalues_eq _).symm
117+
107118
namespace PosDef
108119

109120
variable {M : Matrix n n ℝ} (hM : M.PosDef)

Mathlib/LinearAlgebra/Matrix/Spectrum.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ theorem eigenvectorMatrix_apply (i j : n) : hA.eigenvectorMatrix i j = hA.eigenv
7676
PiLp.basisFun_repr]
7777
#align matrix.is_hermitian.eigenvector_matrix_apply Matrix.IsHermitian.eigenvectorMatrix_apply
7878

79+
/-- The columns of `Matrix.IsHermitian.eigenVectorMatrix` form the basis-/
80+
theorem transpose_eigenvectorMatrix_apply (i : n) :
81+
hA.eigenvectorMatrixᵀ i = hA.eigenvectorBasis i :=
82+
funext <| fun j => eigenvectorMatrix_apply hA j i
83+
7984
theorem eigenvectorMatrixInv_apply (i j : n) :
8085
hA.eigenvectorMatrixInv i j = star (hA.eigenvectorBasis i j) := by
8186
rw [eigenvectorMatrixInv, Basis.toMatrix_apply, OrthonormalBasis.coe_toBasis_repr_apply,

0 commit comments

Comments
 (0)