File: Mathlib/Analysis/InnerProductSpace/Spectrum.lean

full_name: «_aux_Mathlib_Analysis_InnerProductSpace_Spectrum___macroRules_term⟪_,_⟫_1»
code: local notation "⟪" x ", " y "⟫" => @inner 𝕜 E _ x y
goal: Lean.Macro

full_name: LinearMap.IsSymmetric.invariant_orthogonalComplement_eigenspace
code: /-- A self-adjoint operator preserves orthogonal complements of its eigenspaces. -/
theorem invariant_orthogonalComplement_eigenspace (μ : 𝕜) (v : E) (hv : v ∈ (eigenspace T μ)ᗮ) :
    T v ∈ (eigenspace T μ)ᗮ 
goal: T v ∈ (Module.End.eigenspace T μ)ᗮ

full_name: LinearMap.IsSymmetric.conj_eigenvalue_eq_self
code: /-- The eigenvalues of a self-adjoint operator are real. -/
theorem conj_eigenvalue_eq_self {μ : 𝕜} (hμ : HasEigenvalue T μ) : conj μ = μ 
goal: (starRingEnd 𝕜) μ = μ

full_name: LinearMap.IsSymmetric.orthogonalFamily_eigenspaces
code: /-- The eigenspaces of a self-adjoint operator are mutually orthogonal. -/
theorem orthogonalFamily_eigenspaces :
    OrthogonalFamily 𝕜 (fun μ => eigenspace T μ) fun μ => (eigenspace T μ).subtypeₗᵢ 
goal: OrthogonalFamily 𝕜 (fun μ => ↥(Module.End.eigenspace T μ)) fun μ => (Module.End.eigenspace T μ).subtypeₗᵢ

full_name: LinearMap.IsSymmetric.orthogonalFamily_eigenspaces'
code: theorem orthogonalFamily_eigenspaces' :
    OrthogonalFamily 𝕜 (fun μ : Eigenvalues T => eigenspace T μ) fun μ =>
      (eigenspace T μ).subtypeₗᵢ 
goal: OrthogonalFamily 𝕜 (fun μ => ↥(Module.End.eigenspace T (↑T μ))) fun μ => (Module.End.eigenspace T (↑T μ)).subtypeₗᵢ

full_name: LinearMap.IsSymmetric.orthogonalComplement_iSup_eigenspaces_invariant
code: /-- The mutual orthogonal complement of the eigenspaces of a self-adjoint operator on an inner
product space is an invariant subspace of the operator. -/
theorem orthogonalComplement_iSup_eigenspaces_invariant ⦃v : E⦄ (hv : v ∈ (⨆ μ, eigenspace T μ)ᗮ) :
    T v ∈ (⨆ μ, eigenspace T μ)ᗮ 
goal: T v ∈ (⨆ μ, Module.End.eigenspace T μ)ᗮ

full_name: LinearMap.IsSymmetric.orthogonalComplement_iSup_eigenspaces
code: /-- The mutual orthogonal complement of the eigenspaces of a self-adjoint operator on an inner
product space has no eigenvalues. -/
theorem orthogonalComplement_iSup_eigenspaces (μ : 𝕜) :
    eigenspace (T.restrict hT.orthogonalComplement_iSup_eigenspaces_invariant) μ = ⊥ 
goal: Module.End.eigenspace (T.restrict ⋯) μ = ⊥

full_name: LinearMap.IsSymmetric.orthogonalComplement_iSup_eigenspaces_eq_bot
code: /-- The mutual orthogonal complement of the eigenspaces of a self-adjoint operator on a
finite-dimensional inner product space is trivial. -/
theorem orthogonalComplement_iSup_eigenspaces_eq_bot : (⨆ μ, eigenspace T μ)ᗮ = ⊥ 
goal: (⨆ μ, Module.End.eigenspace T μ)ᗮ = ⊥

full_name: LinearMap.IsSymmetric.orthogonalComplement_iSup_eigenspaces_eq_bot'
code: theorem orthogonalComplement_iSup_eigenspaces_eq_bot' :
    (⨆ μ : Eigenvalues T, eigenspace T μ)ᗮ = ⊥ 
goal: (⨆ μ, Module.End.eigenspace T (↑T μ))ᗮ = ⊥

full_name: LinearMap.IsSymmetric.directSumDecomposition
code: /-- The eigenspaces of a self-adjoint operator on a finite-dimensional inner product space `E` gives
an internal direct sum decomposition of `E`.

Note this takes `hT` as a `Fact` to allow it to be an instance. -/
noncomputable instance directSumDecomposition [hT : Fact T.IsSymmetric] :
    DirectSum.Decomposition fun μ : Eigenvalues T => eigenspace T μ 
goal: DirectSum.Decomposition fun μ => Module.End.eigenspace T (↑T μ)

full_name: LinearMap.IsSymmetric.directSum_decompose_apply
code: theorem directSum_decompose_apply [_hT : Fact T.IsSymmetric] (x : E) (μ : Eigenvalues T) :
    DirectSum.decompose (fun μ : Eigenvalues T => eigenspace T μ) x μ =
      orthogonalProjection (eigenspace T μ) x 
goal: ((DirectSum.decompose fun μ => Module.End.eigenspace T (↑T μ)) x) μ =
  (orthogonalProjection (Module.End.eigenspace T (↑T μ))) x

full_name: LinearMap.IsSymmetric.direct_sum_isInternal
code: /-- The eigenspaces of a self-adjoint operator on a finite-dimensional inner product space `E` gives
an internal direct sum decomposition of `E`. -/
theorem direct_sum_isInternal : DirectSum.IsInternal fun μ : Eigenvalues T => eigenspace T μ 
goal: DirectSum.IsInternal fun μ => Module.End.eigenspace T (↑T μ)

full_name: LinearMap.IsSymmetric.diagonalization
code: /-- Isometry from an inner product space `E` to the direct sum of the eigenspaces of some
self-adjoint operator `T` on `E`. -/
noncomputable def diagonalization : E ≃ₗᵢ[𝕜] PiLp 2 fun μ : Eigenvalues T => eigenspace T μ 
goal: E ≃ₗᵢ[𝕜] PiLp 2 fun μ => ↥(Module.End.eigenspace T (↑T μ))

full_name: LinearMap.IsSymmetric.diagonalization_symm_apply
code: @[simp]
theorem diagonalization_symm_apply (w : PiLp 2 fun μ : Eigenvalues T => eigenspace T μ) :
    hT.diagonalization.symm w = ∑ μ, w μ 
goal: hT.diagonalization.symm w = ∑ μ : Module.End.Eigenvalues T, ↑(w μ)

full_name: LinearMap.IsSymmetric.diagonalization_apply_self_apply
code: /-- *Diagonalization theorem*, *spectral theorem*; version 1: A self-adjoint operator `T` on a
finite-dimensional inner product space `E` acts diagonally on the decomposition of `E` into the
direct sum of the eigenspaces of `T`. -/
theorem diagonalization_apply_self_apply (v : E) (μ : Eigenvalues T) :
    hT.diagonalization (T v) μ = (μ : 𝕜) • hT.diagonalization v μ 
goal: hT.diagonalization (T v) μ = ↑T μ • hT.diagonalization v μ

full_name: LinearMap.IsSymmetric.eigenvectorBasis_def
code: /-- A choice of orthonormal basis of eigenvectors for self-adjoint operator `T` on a
finite-dimensional inner product space `E`.

TODO Postcompose with a permutation so that these eigenvectors are listed in increasing order of
eigenvalue. -/
noncomputable irreducible_def eigenvectorBasis : OrthonormalBasis (Fin n) 𝕜 E 
goal: hT.eigenvectorBasis hn = DirectSum.IsInternal.subordinateOrthonormalBasis hn ⋯ ⋯

full_name: LinearMap.IsSymmetric.wrapped._@.Mathlib.Analysis.InnerProductSpace.Spectrum._hyg.1962
code: /-- A choice of orthonormal basis of eigenvectors for self-adjoint operator `T` on a
finite-dimensional inner product space `E`.

TODO Postcompose with a permutation so that these eigenvectors are listed in increasing order of
eigenvalue. -/
noncomputable irreducible_def eigenvectorBasis : OrthonormalBasis (Fin n) 𝕜 E 
goal: Subtype (Eq @LinearMap.IsSymmetric.definition✝)

full_name: LinearMap.IsSymmetric.definition._@.Mathlib.Analysis.InnerProductSpace.Spectrum._hyg.1962
code: /-- A choice of orthonormal basis of eigenvectors for self-adjoint operator `T` on a
finite-dimensional inner product space `E`.

TODO Postcompose with a permutation so that these eigenvectors are listed in increasing order of
eigenvalue. -/
noncomputable irreducible_def eigenvectorBasis : OrthonormalBasis (Fin n) 𝕜 E 
goal: OrthonormalBasis (Fin n) 𝕜 E

full_name: LinearMap.IsSymmetric.eigenvectorBasis
code: /-- A choice of orthonormal basis of eigenvectors for self-adjoint operator `T` on a
finite-dimensional inner product space `E`.

TODO Postcompose with a permutation so that these eigenvectors are listed in increasing order of
eigenvalue. -/
noncomputable irreducible_def eigenvectorBasis : OrthonormalBasis (Fin n) 𝕜 E 
goal: OrthonormalBasis (Fin n) 𝕜 E

full_name: LinearMap.IsSymmetric.definition._@.Mathlib.Analysis.InnerProductSpace.Spectrum._hyg.2231
code: /-- The sequence of real eigenvalues associated to the standard orthonormal basis of eigenvectors
for a self-adjoint operator `T` on `E`.

TODO Postcompose with a permutation so that these eigenvalues are listed in increasing order. -/
noncomputable irreducible_def eigenvalues (i : Fin n) : ℝ 
goal: ℝ

full_name: LinearMap.IsSymmetric.wrapped._@.Mathlib.Analysis.InnerProductSpace.Spectrum._hyg.2231
code: /-- The sequence of real eigenvalues associated to the standard orthonormal basis of eigenvectors
for a self-adjoint operator `T` on `E`.

TODO Postcompose with a permutation so that these eigenvalues are listed in increasing order. -/
noncomputable irreducible_def eigenvalues (i : Fin n) : ℝ 
goal: Subtype (Eq @LinearMap.IsSymmetric.definition✝)

full_name: LinearMap.IsSymmetric.eigenvalues_def
code: /-- The sequence of real eigenvalues associated to the standard orthonormal basis of eigenvectors
for a self-adjoint operator `T` on `E`.

TODO Postcompose with a permutation so that these eigenvalues are listed in increasing order. -/
noncomputable irreducible_def eigenvalues (i : Fin n) : ℝ 
goal: hT.eigenvalues hn i = RCLike.re (↑T (DirectSum.IsInternal.subordinateOrthonormalBasisIndex hn ⋯ i ⋯))

full_name: LinearMap.IsSymmetric.eigenvalues
code: /-- The sequence of real eigenvalues associated to the standard orthonormal basis of eigenvectors
for a self-adjoint operator `T` on `E`.

TODO Postcompose with a permutation so that these eigenvalues are listed in increasing order. -/
noncomputable irreducible_def eigenvalues (i : Fin n) : ℝ 
goal: ℝ

full_name: LinearMap.IsSymmetric.hasEigenvector_eigenvectorBasis
code: theorem hasEigenvector_eigenvectorBasis (i : Fin n) :
    HasEigenvector T (hT.eigenvalues hn i) (hT.eigenvectorBasis hn i) 
goal: Module.End.HasEigenvector T (↑(hT.eigenvalues hn i)) ((hT.eigenvectorBasis hn) i)

full_name: LinearMap.IsSymmetric.hasEigenvalue_eigenvalues
code: theorem hasEigenvalue_eigenvalues (i : Fin n) : HasEigenvalue T (hT.eigenvalues hn i) 
goal: Module.End.HasEigenvalue T ↑(hT.eigenvalues hn i)

full_name: LinearMap.IsSymmetric.apply_eigenvectorBasis
code: @[simp]
theorem apply_eigenvectorBasis (i : Fin n) :
    T (hT.eigenvectorBasis hn i) = (hT.eigenvalues hn i : 𝕜) • hT.eigenvectorBasis hn i 
goal: T ((hT.eigenvectorBasis hn) i) = ↑(hT.eigenvalues hn i) • (hT.eigenvectorBasis hn) i

full_name: LinearMap.IsSymmetric.eigenvectorBasis_apply_self_apply
code: /-- *Diagonalization theorem*, *spectral theorem*; version 2: A self-adjoint operator `T` on a
finite-dimensional inner product space `E` acts diagonally on the identification of `E` with
Euclidean space induced by an orthonormal basis of eigenvectors of `T`. -/
theorem eigenvectorBasis_apply_self_apply (v : E) (i : Fin n) :
    (hT.eigenvectorBasis hn).repr (T v) i =
      hT.eigenvalues hn i * (hT.eigenvectorBasis hn).repr v i 
goal: (hT.eigenvectorBasis hn).repr (T v) i = ↑(hT.eigenvalues hn i) * (hT.eigenvectorBasis hn).repr v i

full_name: inner_product_apply_eigenvector
code: @[simp]
theorem inner_product_apply_eigenvector {μ : 𝕜} {v : E} {T : E →ₗ[𝕜] E}
    (h : v ∈ Module.End.eigenspace T μ) : ⟪v, T v⟫ = μ * (‖v‖ : 𝕜) ^ 2 
goal: ⟪v, T v⟫_𝕜 = μ * ↑‖v‖ ^ 2

full_name: eigenvalue_nonneg_of_nonneg
code: theorem eigenvalue_nonneg_of_nonneg {μ : ℝ} {T : E →ₗ[𝕜] E} (hμ : HasEigenvalue T μ)
    (hnn : ∀ x : E, 0 ≤ RCLike.re ⟪x, T x⟫) : 0 ≤ μ 
goal: 0 ≤ μ

full_name: eigenvalue_pos_of_pos
code: theorem eigenvalue_pos_of_pos {μ : ℝ} {T : E →ₗ[𝕜] E} (hμ : HasEigenvalue T μ)
    (hnn : ∀ x : E, 0 < RCLike.re ⟪x, T x⟫) : 0 < μ 
goal: 0 < μ