Documentation

TauCeti.Analysis.InnerProductSpace.Spectrum

Spectral decompositions of self-adjoint operators #

Mathlib's spectral theorem for a compact self-adjoint operator T on a Hilbert space E says that the eigenspaces of T have trivial mutual orthogonal complement (ContinuousLinearMap.orthogonalComplement_iSup_eigenspaces_eq_bot) and that the eigenspaces at nonzero eigenvalues are finite dimensional (ContinuousLinearMap.finite_dimensional_eigenspace). This file turns the first statement into the form the applications want: E has an orthonormal basis consisting of eigenvectors of T.

The construction is the classical one. Each eigenspace is closed, hence a Hilbert space in its own right, so it has a Hilbert basis; the eigenspaces are mutually orthogonal, so the union of those bases is an orthonormal family; and a vector orthogonal to the whole family is orthogonal to every eigenspace, hence zero. HilbertBasis.mkOfOrthogonalEqBot then assembles the family into a Hilbert basis of E.

In finite dimensions, this file also packages Mathlib's ordered eigenbasis into the spans of any chosen set of its eigenvectors. In particular, the negative and positive spectral subspaces, spanned by the eigenvectors with negative and with positive eigenvalue, are disjoint, invariant under the operator, and together span the whole space when the operator is injective.

No separability is assumed anywhere: the basis is indexed by a set of vectors of E, exactly as in Mathlib's exists_hilbertBasis, and the eigenvalue 0 may well carry an infinite-dimensional eigenspace. When T is injective that eigenspace is trivial and every basis vector has a nonzero eigenvalue, which is the form the eigenvalue problem of an elliptic operator uses.

Main declarations #

References #

H. Brezis, Functional Analysis, Sobolev Spaces and Partial Differential Equations, Theorem 6.11 (the Hilbert--Schmidt spectral decomposition); L. C. Evans, Partial Differential Equations, Appendix D.6.

theorem ContinuousLinearMap.exists_hilbertBasis_forall_hasEigenvector_of_dense_eigenspaces {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] [CompleteSpace E] {T : E →L[𝕜] E} (hT' : (↑T).IsSymmetric) (hspan : (⨆ (mu : 𝕜), Module.End.eigenspace (↑T) mu)ᗮ = ⊥) :
∃ (s : Set E) (b : HilbertBasis (↑s) 𝕜 E) (nu : ↑s → 𝕜), ⇑b = Subtype.val ∧ ∀ (x : ↑s), Module.End.HasEigenvector (↑T) (nu x) ↑x

A symmetric operator whose eigenspaces have dense span has an orthonormal basis of eigenvectors. The basis is indexed by a set of vectors of E, as in exists_hilbertBasis, and no separability is assumed.

theorem ContinuousLinearMap.exists_hilbertBasis_forall_hasEigenvector {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] [CompleteSpace E] {T : E →L[𝕜] E} (hT : IsCompactOperator ⇑T) (hT' : (↑T).IsSymmetric) :
∃ (s : Set E) (b : HilbertBasis (↑s) 𝕜 E) (nu : ↑s → 𝕜), ⇑b = Subtype.val ∧ ∀ (x : ↑s), Module.End.HasEigenvector (↑T) (nu x) ↑x

A compact self-adjoint operator has an orthonormal basis of eigenvectors.

theorem ContinuousLinearMap.exists_hilbertBasis_forall_hasEigenvector_ne_zero_of_dense_eigenspaces {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] [CompleteSpace E] {T : E →L[𝕜] E} (hT' : (↑T).IsSymmetric) (hspan : (⨆ (mu : 𝕜), Module.End.eigenspace (↑T) mu)ᗮ = ⊥) (hker : (↑T).ker = ⊥) :
∃ (s : Set E) (b : HilbertBasis (↑s) 𝕜 E) (nu : ↑s → 𝕜), ⇑b = Subtype.val ∧ (∀ (x : ↑s), nu x ≠ 0) ∧ ∀ (x : ↑s), Module.End.HasEigenvector (↑T) (nu x) ↑x

An injective symmetric operator whose eigenspaces have dense span has an orthonormal basis of eigenvectors with nonzero eigenvalues.

theorem ContinuousLinearMap.exists_hilbertBasis_forall_hasEigenvector_ne_zero {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] [CompleteSpace E] {T : E →L[𝕜] E} (hT : IsCompactOperator ⇑T) (hT' : (↑T).IsSymmetric) (hker : (↑T).ker = ⊥) :
∃ (s : Set E) (b : HilbertBasis (↑s) 𝕜 E) (nu : ↑s → 𝕜), ⇑b = Subtype.val ∧ (∀ (x : ↑s), nu x ≠ 0) ∧ ∀ (x : ↑s), Module.End.HasEigenvector (↑T) (nu x) ↑x

An injective compact self-adjoint operator has an orthonormal basis of eigenvectors with nonzero eigenvalues. Injectivity excludes the eigenvalue 0.

theorem ContinuousLinearMap.hasSum_smul_repr_of_apply_eq_smul {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] (T : E →L[𝕜] E) {iota : Type u_3} (b : HilbertBasis iota 𝕜 E) (nu : iota → 𝕜) (hb : ∀ (i : iota), T (b i) = nu i • b i) (y : E) :
HasSum (fun (i : iota) => nu i • ↑(b.repr y) i • b i) (T y)

The spectral expansion of an operator diagonal in a Hilbert basis. Applying T term by term to the expansion of y writes T y as the sum of its eigencomponents; combined with ContinuousLinearMap.exists_hilbertBasis_forall_hasEigenvector this diagonalizes a compact self-adjoint operator.

Finite-dimensional eigenvector spans #

noncomputable def LinearMap.IsSymmetric.eigenvectorSpan {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) (s : Set (Fin n)) :
Submodule 𝕜 E

The span of the eigenvectors whose indices belong to s.

The eigenvectors are those of Mathlib's decreasingly ordered eigenbasis, so this span depends on that basis and may select only part of a repeated eigenspace. It is particularly useful with subsets cut out by inequalities on the corresponding eigenvalues.

Equations
Instances For
    @[simp]
    theorem LinearMap.IsSymmetric.mem_eigenvectorSpan_iff {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) {s : Set (Fin n)} {v : E} :
    v ∈ hT.eigenvectorSpan hn s ↔ ↑((hT.eigenvectorBasis hn).toBasis.repr v).support ⊆ s

    A vector belongs to an eigenvector span exactly when its eigenbasis representation is supported on the selected indices.

    theorem LinearMap.IsSymmetric.eigenvectorBasis_mem_eigenvectorSpan_iff {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) {s : Set (Fin n)} (i : Fin n) :

    An eigenvector from the ordered eigenbasis belongs to an eigenvector span exactly when its index is selected.

    theorem LinearMap.IsSymmetric.eigenvectorSpan_mono {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) {s t : Set (Fin n)} (hst : s ⊆ t) :

    Enlarging the set of eigenvector indices enlarges its span.

    @[simp]
    theorem LinearMap.IsSymmetric.eigenvectorSpan_union {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) (s t : Set (Fin n)) :
    hT.eigenvectorSpan hn (s ∪ t) = hT.eigenvectorSpan hn s ⊔ hT.eigenvectorSpan hn t

    The eigenvector span of a union is the sum of the two eigenvector spans.

    @[simp]
    theorem LinearMap.IsSymmetric.eigenvectorSpan_empty {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) :

    The eigenvector span of the empty set is zero.

    @[simp]
    theorem LinearMap.IsSymmetric.eigenvectorSpan_univ {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) :

    All eigenvectors together span the whole finite-dimensional inner product space.

    theorem LinearMap.IsSymmetric.disjoint_eigenvectorSpan {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) {s t : Set (Fin n)} (hst : Disjoint s t) :

    Eigenvector spans indexed by disjoint sets are disjoint.

    @[simp]
    theorem LinearMap.IsSymmetric.finrank_eigenvectorSpan {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) (s : Set (Fin n)) :

    The dimension of an eigenvector span is the number of eigenvectors selected.

    theorem LinearMap.IsSymmetric.map_eigenvectorSpan_le {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) (s : Set (Fin n)) :

    A symmetric operator preserves each of its eigenvector spans.

    noncomputable def LinearMap.IsSymmetric.negativeSpectralSubspace {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) :
    Submodule 𝕜 E

    The negative spectral subspace of a finite-dimensional symmetric operator: the span of the eigenvectors with negative eigenvalue.

    Equations
    Instances For
      noncomputable def LinearMap.IsSymmetric.positiveSpectralSubspace {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) :
      Submodule 𝕜 E

      The positive spectral subspace of a finite-dimensional symmetric operator: the span of the eigenvectors with positive eigenvalue.

      Equations
      Instances For
        @[simp]
        theorem LinearMap.IsSymmetric.mem_negativeSpectralSubspace_iff {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) {v : E} :

        A vector belongs to the negative spectral subspace exactly when its eigenbasis representation is supported on the negative eigenvalues.

        @[simp]
        theorem LinearMap.IsSymmetric.mem_positiveSpectralSubspace_iff {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) {v : E} :

        A vector belongs to the positive spectral subspace exactly when its eigenbasis representation is supported on the positive eigenvalues.

        @[simp]
        theorem LinearMap.IsSymmetric.finrank_negativeSpectralSubspace {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) :

        The dimension of the negative spectral subspace counts the negative eigenvalues, with multiplicity.

        @[simp]
        theorem LinearMap.IsSymmetric.finrank_positiveSpectralSubspace {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) :

        The dimension of the positive spectral subspace counts the positive eigenvalues, with multiplicity.

        A symmetric operator preserves its negative spectral subspace.

        A symmetric operator preserves its positive spectral subspace.

        The negative and positive spectral subspaces are disjoint.

        theorem LinearMap.IsSymmetric.eigenvalues_ne_zero_of_ker_eq_bot {𝕜 : Type u_1} {E : Type u_2} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E] {n : ℕ} [FiniteDimensional 𝕜 E] {T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) (hker : T.ker = ⊥) (i : Fin n) :
        hT.eigenvalues hn i ≠ 0

        An injective symmetric operator has no zero eigenvalue in its ordered eigenvalue family.

        For an injective symmetric operator, its negative and positive spectral subspaces are complementary: they are disjoint and together span the whole space.