Mathlib.Linear­Algebra.Finite­Perron­Frobenius­Positive­Eigenvector

Finite-dimensional Perron--Frobenius infrastructure for symmetric entrywise-nonnegative irreducible real matrices: Rayleigh maxima, absolute-value maximizers, positivity propagation, and restriction/zero-extension bridges.

Basic 7 core · 4 supporting This file fixes the Euclidean-space conventions used by the finite positive Perron eigenvector substrate. ★ exists_unit_eigenvector_sphereRayleighValue

Finite Perron--Frobenius: Rayleigh-value interface

This file fixes the Euclidean-space conventions used by the finite positive Perron eigenvector substrate. It defines the quadratic form and three equivalent presentations of its top Rayleigh value: a coordinate unit-sphere sSup, a Euclidean unit-sphere sSup, and Mathlib's iSup of the Rayleigh quotient.

abbrev EVec reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

A Euclidean real vector indexed by a finite coordinate type, called a finite real coordinate vector, is given by the Euclidean space on that coordinate type.

Definition (Lean source)
ι :
Type*
EVec ι :
Type u_2
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.EVec · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Basic.lean:23
def absVec reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

The Euclidean vector obtained from a finite real vector by taking the absolute value of every coordinate is given coordinate by coordinate.

Definition (Lean source)
ι :
Type u_1
shared
x :
EVec ι
absVec x :
EVec ι
toLp 2 fun i => |x i|
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.absVec · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Basic.lean:26 · uses EVec
def rayleighForm reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

The quadratic form associated with a finite real matrix and a Euclidean coordinate vector, called its Rayleigh form, is given by the vector-matrix-vector quadratic sum.

Definition (Lean source)
ι :
Type u_1
shared
A :
Matrix ι ι ℝ
x :
EVec ι
rayleighForm A x :
∑ i, x i * (A.mulVec x) i
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.rayleighForm · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Basic.lean:30 · uses EVec
def sphereRayleighValue reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

The greatest quadratic Rayleigh-form value among the Euclidean unit vectors for a finite real matrix, called the Euclidean-sphere top Rayleigh value, is given by a supremum. For an empty coordinate type there are no unit vectors and the supremum of the empty set is zero by convention.

Definition (Lean source)
ι :
Type u_1
shared
A :
Matrix ι ι ℝ
sphereRayleighValue A :
sSup {r : ℝ | ∃ x : EVec ι, ‖x‖ = 1 ∧ r = rayleighForm A x}
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.sphereRayleighValue · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Basic.lean:34
def coordinateSphereRayleighValue reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

The greatest quadratic Rayleigh-form value among the coordinate vectors whose squared coordinates sum to one for a finite real matrix, called the coordinate-sphere top Rayleigh value, is given by a supremum. For an empty coordinate type no such vector exists and the supremum of the empty set is zero by convention.

Definition (Lean source)
ι :
Type u_1
shared
A :
Matrix ι ι ℝ
coordinateSphereRayleighValue A :
sSup {r : ℝ | ∃ x : ι → ℝ, (∑ i, x i ^ 2) = 1 ∧ r = ∑ i, x i * (A.mulVec x) i}
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.coordinateSphereRayleighValue · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Basic.lean:38
def iSupRayleighValue reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

Mathlib's supremum Rayleigh quotient for a finite real matrix, called the nonzero-vector top Rayleigh value, is given by the matrix's Euclidean linear map. For an empty coordinate type there are no nonzero vectors and the empty supremum is zero by convention.

Definition (Lean source)
ι :
Type u_1
shared
A :
Matrix ι ι ℝ
iSupRayleighValue A :
⨆ x : {x : EVec ι // x ≠ 0}, T.rayleighQuotient x
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.iSupRayleighValue · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Basic.lean:43
theorem exists_unit_eigenvector_sphereRayleighValue reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

On a nonempty finite coordinate space, a real symmetric matrix has a unit eigenvector at its Euclidean-sphere top Rayleigh value.

Formal statement
ι :
Type u_1
Nonempty ι
shared
A :
Matrix ι ι ℝ
hA :
A.IsSymm
∃ x : EVec ι,
conclusion 1
‖x‖ = 1
conclusion 2
A.mulVec x = sphereRayleighValue A • x
conclusion 3
Proof (Lean source)
theorem exists_unit_eigenvector_sphereRayleighValue [Nonempty ι] (A : Matrix ι ι ℝ) (hA : A.IsSymm) : ∃ x : EVec ι, ‖x‖ = 1 ∧ A.mulVec x = sphereRayleighValue A • x ∧ rayleighForm A x = sphereRayleighValue A := by obtain ⟨x, hx, hmax, hval⟩ := exists_unit_isMaxOn_rayleighForm A hA let T := (toEuclideanLin A).toContinuousLinearMap have hsym : (toEuclideanLin A).IsSymmetric := by rw [Matrix.isSymmetric_toEuclideanLin_iff] simpa [IsHermitian, IsSymm] using hA have hself : IsSelfAdjoint T := hsym.toSelfAdjoint.prop have hxne : x ≠ 0 := by intro hzero simp [hzero] at hx have hmaxT : IsMaxOn T.reApplyInnerSelf (sphere (0 : EVec ι) ‖x‖) x := by intro y hy change T.reApplyInnerSelf y ≤ T.reApplyInnerSelf x rw [show T.reApplyInnerSelf y = rayleighForm A y by simpa [T] using reApplyInnerSelf_toEuclideanLin_eq_rayleighForm A y, show T.reApplyInnerSelf x = rayleighForm A x by simpa [T] using reApplyInnerSelf_toEuclideanLin_eq_rayleighForm A x] apply hmax simpa [hx] using hy have heig := hself.hasEigenvector_of_isMaxOn hxne hmaxT refine ⟨x, hx, ?_, hval⟩ have htop : (⨆ y : {y : EVec ι // y ≠ 0}, T.rayleighQuotient y) = sphereRayleighValue A := by simpa [iSupRayleighValue, T] using (sphereRayleighValue_eq_iSupRayleighValue A).symm rw [htop] at heig exact congrArg ofLp heig.apply_eq_smul
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.exists_unit_eigenvector_sphereRayleighValue · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Basic.lean:123 · uses EVec , rayleighForm , sphereRayleighValue
4 supporting declarations (lemmas, instances)
Restriction 5 core · 12 supporting This file supplies the coordinate bridges used for finite connected components. ★ sphereRayleighValue_zeroExtendMatrix

Restriction and zero extension

This file supplies the coordinate bridges used for finite connected components. It defines principal-submatrix restriction and zero extension, proves the exact mulVec identities they satisfy, and relates the corresponding top Rayleigh values. Cross-boundary hypotheses are stated explicitly whenever an identity for the original matrix would otherwise be false.

def restrictMatrix reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

The principal submatrix of a real square matrix on a finite set of coordinates, called its restricted matrix, is given by selecting those rows and columns.

Definition (Lean source)
ι :
Type u_1
shared
A :
Matrix ι ι ℝ
s :
restrictMatrix A s :
Matrix s s ℝ
A.submatrix val val
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.restrictMatrix · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Restriction.lean:21
def restrictVec reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

The Euclidean vector obtained by restricting a finite real vector to a finite coordinate set, called its restricted vector, is given by retaining those coordinates.

Definition (Lean source)
ι :
Type u_1
shared
s :
x :
EVec ι
restrictVec s x :
toLp 2 fun i => x i.1
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.restrictVec · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Restriction.lean:25 · uses EVec
def zeroExtendVec reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

The Euclidean vector obtained by extending a vector on a finite coordinate subtype by zero outside that finite coordinate set, called its zero extension, is given coordinate by coordinate.

Definition (Lean source)
ι :
Type u_1
shared
s :
x :
zeroExtendVec s x :
EVec ι
toLp 2 fun i => if hi : i ∈ s then x ⟨i, hi⟩ else 0
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.zeroExtendVec · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Restriction.lean:29 · uses EVec
def zeroExtendMatrix reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

The matrix obtained by extending a matrix on a finite coordinate subtype by zero outside that coordinate set, called its zero extension, is given entry by entry.

Definition (Lean source)
ι :
Type u_1
shared
s :
B :
Matrix s s ℝ
zeroExtendMatrix s B :
Matrix ι ι ℝ
fun i j => if hi : i ∈ s then if hj : j ∈ s then B ⟨i, hi⟩ ⟨j, hj⟩ else 0 else 0
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.zeroExtendMatrix · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Restriction.lean:33
theorem sphereRayleighValue_zeroExtendMatrix reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

On a nonempty finite coordinate space, a nonempty finite coordinate set and an entrywise nonnegative subtype matrix satisfy that zero extension preserves its top Rayleigh value.

Formal statement
ι :
Type u_1
Nonempty ι
shared
s :
Nonempty s
B :
Matrix s s ℝ
hB :
∀ i j, 0 ≤ B i j
Proof (Lean source)
theorem sphereRayleighValue_zeroExtendMatrix [Nonempty ι] (s : Finset ι) [Nonempty s] (B : Matrix s s ℝ) (hB : ∀ i j, 0 ≤ B i j) : sphereRayleighValue (zeroExtendMatrix s B) = sphereRayleighValue B := by apply le_antisymm · apply csSup_le · obtain ⟨x, hx⟩ : (sphere (0 : EVec ι) 1).Nonempty := NormedSpace.sphere_nonempty.mpr (by norm_num) exact ⟨rayleighForm (zeroExtendMatrix s B) x, x, by simpa using hx, rfl⟩ · rintro r ⟨x, hx, rfl⟩ rw [rayleighForm_zeroExtendMatrix] let y := restrictVec s x have hy_norm : ‖y‖ ≤ 1 := (norm_restrictVec_le s x).trans_eq hx by_cases hy : y = 0 · change rayleighForm B y ≤ sphereRayleighValue B simpa [hy, rayleighForm, mulVec, dotProduct] using sphereRayleighValue_nonneg B hB · have hy_norm_ne : ‖y‖ ≠ 0 := norm_ne_zero_iff.mpr hy let u : EVec s := ‖y‖⁻¹ • y have hu_norm : ‖u‖ = 1 := by simp [u, norm_smul, hy_norm_ne] have hu_le : rayleighForm B u ≤ sphereRayleighValue B := rayleighForm_le_sphereRayleighValue B u hu_norm have htop : 0 ≤ sphereRayleighValue B := sphereRayleighValue_nonneg B hB have hy_sq : ‖y‖ ^ 2 ≤ 1 := by nlinarith [norm_nonneg y] have hy_eq : ‖y‖ • u = y := by simp [u, smul_smul, hy_norm_ne] calc rayleighForm B y = rayleighForm B (‖y‖ • u) := congrArg (rayleighForm B) hy_eq.symm _ = ‖y‖ ^ 2 * rayleighForm B u := rayleighForm_smul B ‖y‖ u _ ≤ ‖y‖ ^ 2 * sphereRayleighValue B := mul_le_mul_of_nonneg_left hu_le (sq_nonneg _) _ ≤ 1 * sphereRayleighValue B := mul_le_mul_of_nonneg_right hy_sq htop _ = sphereRayleighValue B := one_mul _ · apply csSup_le · obtain ⟨x, hx⟩ : (sphere (0 : EVec s) 1).Nonempty := NormedSpace.sphere_nonempty.mpr (by norm_num) exact ⟨rayleighForm B x, x, by simpa using hx, rfl⟩ · rintro r ⟨x, hx, rfl⟩ calc rayleighForm B x = rayleighForm (zeroExtendMatrix s B) (zeroExtendVec s x) := (rayleighForm_zeroExtendMatrix_zeroExtendVec s B x).symm _ ≤ sphereRayleighValue (zeroExtendMatrix s B) := rayleighForm_le_sphereRayleighValue _ _ (by simpa using hx)
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.sphereRayleighValue_zeroExtendMatrix · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Restriction.lean:190 · uses sphereRayleighValue , zeroExtendMatrix
12 supporting declarations (lemmas, instances)
Absolute­Value 1 core · 7 supporting For an entrywise-nonnegative matrix, taking coordinatewise absolute values preserves Euclidean norm and can only increase the quadratic form. ★ absVec_eigenvector_of_isMaxOn

Absolute values of Rayleigh maximizers

For an entrywise-nonnegative matrix, taking coordinatewise absolute values preserves Euclidean norm and can only increase the quadratic form. Consequently it preserves unit-sphere maximality; for a symmetric matrix the resulting nonnegative maximizer is again a top eigenvector.

theorem absVec_eigenvector_of_isMaxOn reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

On a nonempty finite coordinate space, an entrywise nonnegative symmetric real matrix, a unit-sphere vector, and its Rayleigh-form maximality ensure that the coordinatewise absolute vector is an eigenvector at the top Rayleigh value.

Formal statement
ι :
Type u_1
Nonempty ι
shared
A :
Matrix ι ι ℝ
hA_symm :
A.IsSymm
hA_nonneg :
∀ i j, 0 ≤ A i j
x :
EVec ι
hx :
x ∈ sphere (0 : EVec ι) 1
hmax :
IsMaxOn (rayleighForm A) (sphere (0 : EVec ι) 1) x
A.mulVec (absVec x) = sphereRayleighValue A • absVec x
Proof (Lean source)
theorem absVec_eigenvector_of_isMaxOn [Nonempty ι] (A : Matrix ι ι ℝ) (hA_symm : A.IsSymm) (hA_nonneg : ∀ i j, 0 ≤ A i j) {x : EVec ι} (hx : x ∈ sphere (0 : EVec ι) 1) (hmax : IsMaxOn (rayleighForm A) (sphere (0 : EVec ι) 1) x) : A.mulVec (absVec x) = sphereRayleighValue A • absVec x := by let T := (toEuclideanLin A).toContinuousLinearMap have hsym : (toEuclideanLin A).IsSymmetric := by rw [Matrix.isSymmetric_toEuclideanLin_iff] simpa [IsHermitian, IsSymm] using hA_symm have hself : IsSelfAdjoint T := hsym.toSelfAdjoint.prop have habs_norm : ‖absVec x‖ = 1 := by rw [norm_absVec] simpa [mem_sphere] using hx have habs_ne : absVec x ≠ 0 := by intro hzero simp [hzero] at habs_norm have habs_max := absVec_isMaxOn A hA_nonneg hx hmax have hmaxT : IsMaxOn T.reApplyInnerSelf (sphere (0 : EVec ι) ‖absVec x‖) (absVec x) := by intro y hy change T.reApplyInnerSelf y ≤ T.reApplyInnerSelf (absVec x) change rayleighForm A y ≤ rayleighForm A (absVec x) apply habs_max simpa [habs_norm] using hy have heig := hself.hasEigenvector_of_isMaxOn habs_ne hmaxT have htop : (⨆ y : {y : EVec ι // y ≠ 0}, T.rayleighQuotient y) = sphereRayleighValue A := by simpa [iSupRayleighValue, T] using (sphereRayleighValue_eq_iSupRayleighValue A).symm rw [htop] at heig exact congrArg ofLp heig.apply_eq_smul
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.absVec_eigenvector_of_isMaxOn · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/AbsoluteValue.lean:71 · uses EVec , absVec , rayleighForm , sphereRayleighValue
7 supporting declarations (lemmas, instances)
Main 1 core · 1 supporting This module assembles the finite-dimensional Perron--Frobenius theorem for a real symmetric irreducible nonnegative matrix. ★ finite_positive_perron_eigenvector

Finite positive Perron eigenvector

This module assembles the finite-dimensional Perron--Frobenius theorem for a real symmetric irreducible nonnegative matrix. Its eigenvalue is simultaneously identified with the coordinate unit-sphere supremum, the Euclidean unit-sphere supremum, and Mathlib's nonzero-vector iSup Rayleigh quotient.

theorem finite_positive_perron_eigenvector reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector

A real symmetric irreducible finite matrix has a strictly positive unit eigenvector whose eigenvalue is simultaneously the coordinate-sphere, Euclidean-sphere, and nonzero-vector top Rayleigh value.

Formal statement
ι :
Type u_1
shared
A :
Matrix ι ι ℝ
hA_symm :
A.IsSymm
hA_irred :
A.IsIrreducible
∃ (v : EVec ι) (ρ : ℝ),
‖v‖ = 1
conclusion 1
i :
0 < v i
conclusion 2
A.mulVec v = ρ • v
conclusion 3
rayleighForm A v = ρ
conclusion 4
conclusion 6
Proof (Lean source)
theorem finite_positive_perron_eigenvector (A : Matrix ι ι ℝ) (hA_symm : A.IsSymm) (hA_irred : A.IsIrreducible) : ∃ (v : EVec ι) (ρ : ℝ), ‖v‖ = 1 ∧ (∀ i, 0 < v i) ∧ A.mulVec v = ρ • v ∧ rayleighForm A v = ρ ∧ ρ = sphereRayleighValue A ∧ ρ = coordinateSphereRayleighValue A ∧ ρ = iSupRayleighValue A := by obtain ⟨x, hx_norm, hx_eigen, hx_top⟩ := exists_unit_eigenvector_sphereRayleighValue A hA_symm obtain ⟨habs_norm, habs_nonneg, habs_top, habs_eigen⟩ := absVec_preserves_top_eigenvector A hA_symm hA_irred.nonneg hx_norm hx_eigen hx_top refine ⟨absVec x, sphereRayleighValue A, habs_norm, ?_, habs_eigen, habs_top, rfl, ?_, ?_⟩ · exact IsIrreducible.unit_eigenvector_pos hA_irred habs_nonneg habs_norm habs_eigen · exact (coordinateSphereRayleighValue_eq_sphereRayleighValue A).symm · exact sphereRayleighValue_eq_iSupRayleighValue A
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.finite_positive_perron_eigenvector · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Main.lean:20 · uses EVec , coordinateSphereRayleighValue , iSupRayleighValue , rayleighForm , sphereRayleighValue
1 supporting declaration (lemmas, instances)
Positivity 1 core · 2 supporting This file isolates the graph-theoretic step of Perron--Frobenius: a nonzero, coordinatewise-nonnegative eigenvector of an irreducible nonnegative matrix has no zero coordinate. ★ eigenvector_pos

Positivity propagation for irreducible matrices

This file isolates the graph-theoretic step of Perron--Frobenius: a nonzero, coordinatewise-nonnegative eigenvector of an irreducible nonnegative matrix has no zero coordinate. No symmetry assumption is needed for this propagation.

theorem eigenvector_pos reviewed
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.IsIrreducible

An irreducible finite matrix and a nonnegative nonzero eigenvector ensure that every coordinate is strictly positive.

Formal statement
ι :
Type u_1
Matrix ι ι ℝ
shared
hA :
A.IsIrreducible
x :
EVec ι
hx_nonneg :
∀ i, 0 ≤ x i
hx_ne :
x ≠ 0
ρ :
hx_eigen :
A.mulVec x = ρ • x
i :
0 < x i
Proof (Lean source)
theorem IsIrreducible.eigenvector_pos {A : Matrix ι ι ℝ} (hA : A.IsIrreducible) {x : EVec ι} (hx_nonneg : ∀ i, 0 ≤ x i) (hx_ne : x ≠ 0) {ρ : ℝ} (hx_eigen : A.mulVec x = ρ • x) : ∀ i, 0 < x i := by have hpath : ∀ {i j : ι}, @Quiver.Path ι (Matrix.toQuiver A) i j → x i = 0 → x j = 0 := by intro i j p induction p with | nil => exact id | @cons j k p e ih => intro hxi exact zero_coordinate_propagates_across_positive_entry A hA.nonneg hx_nonneg hx_eigen (ih hxi) e.down intro i by_contra hxi_pos have hxi : x i = 0 := le_antisymm (le_of_not_gt hxi_pos) (hx_nonneg i) apply hx_ne ext j obtain ⟨p, _⟩ := hA.connected i j exact hpath p hxi
Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.IsIrreducible.eigenvector_pos · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Positivity.lean:34 · uses EVec
2 supporting declarations (lemmas, instances)
  • zero_coordinate_propagates_across_positive_entry theorem — An entrywise nonnegative matrix, a nonnegative eigenvector, a row coordinate where it vanishes, and a strictly positive matrix entry from that row ensure that the eigenvector also vanishes at the entry’s target coordinate.
    ι :
    Type u_1
    shared
    A :
    Matrix ι ι ℝ
    hA_nonneg :
    ∀ i j, 0 ≤ A i j
    x :
    EVec ι
    hx_nonneg :
    ∀ i, 0 ≤ x i
    ρ :
    hx_eigen :
    A.mulVec x = ρ • x
    i j :
    ι
    hxi :
    x i = 0
    hAij :
    0 < A i j
    x j = 0
    Proof (Lean source)
    theorem zero_coordinate_propagates_across_positive_entry (A : Matrix ι ι ℝ) (hA_nonneg : ∀ i j, 0 ≤ A i j) {x : EVec ι} (hx_nonneg : ∀ i, 0 ≤ x i) {ρ : ℝ} (hx_eigen : A.mulVec x = ρ • x) {i j : ι} (hxi : x i = 0) (hAij : 0 < A i j) : x j = 0 := by have hsum : ∑ k, A i k * x k = 0 := by have hi := congrFun hx_eigen i simpa [mulVec, dotProduct, hxi] using hi have hterm : A i j * x j = 0 := (Finset.sum_eq_zero_iff_of_nonneg (fun k _ => mul_nonneg (hA_nonneg i k) (hx_nonneg k))).mp hsum j (Finset.mem_univ j) exact (mul_eq_zero.mp hterm).resolve_left (ne_of_gt hAij)
    Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.zero_coordinate_propagates_across_positive_entry · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Positivity.lean:19
  • unit_eigenvector_pos theorem — An irreducible finite matrix and a normalized nonnegative eigenvector ensure that every coordinate is strictly positive.
    ι :
    Type u_1
    Matrix ι ι ℝ
    shared
    hA :
    A.IsIrreducible
    x :
    EVec ι
    hx_nonneg :
    ∀ i, 0 ≤ x i
    hx_norm :
    ‖x‖ = 1
    ρ :
    hx_eigen :
    A.mulVec x = ρ • x
    i :
    0 < x i
    Proof (Lean source)
    theorem IsIrreducible.unit_eigenvector_pos {A : Matrix ι ι ℝ} (hA : A.IsIrreducible) {x : EVec ι} (hx_nonneg : ∀ i, 0 ≤ x i) (hx_norm : ‖x‖ = 1) {ρ : ℝ} (hx_eigen : A.mulVec x = ρ • x) : ∀ i, 0 < x i := by apply eigenvector_pos hA hx_nonneg _ hx_eigen intro hx simp [hx] at hx_norm
    Causalean.Mathlib.LinearAlgebra.FinitePerronFrobeniusPositiveEigenvector.IsIrreducible.unit_eigenvector_pos · Causalean/Mathlib/LinearAlgebra/FinitePerronFrobeniusPositiveEigenvector/Positivity.lean:57