Documentation

LeanPool.DavisKahan.ForTauCeti.Analysis.InnerProductSpace.SelfAdjointFunctionalCalculus

Finite-dimensional self-adjoint functional calculus #

For a symmetric endomorphism on a finite-dimensional real or complex inner-product space, apply a real scalar function to the ordered eigenvalues and reconstruct the operator in the associated orthonormal eigenbasis.

The construction is intended as a small RCLike counterpart of the continuous functional calculus. It is sufficient for functions such as arcsin and the totalized tangent functions used by finite-dimensional operator-angle theory.

Provenance #

noncomputable def TauCeti.selfAdjointFunctionalCalculus {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f : โ„ โ†’ โ„) :
E โ†’โ‚—[๐•œ] E

Apply a real function to the spectrum of a finite-dimensional symmetric endomorphism.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem TauCeti.selfAdjointFunctionalCalculus_add {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f g : โ„ โ†’ โ„) :

    The calculus is additive in the symbol: a finite sum of rank-one terms, added coefficientwise.

    theorem TauCeti.selfAdjointFunctionalCalculus_smul {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (c : โ„) (f : โ„ โ†’ โ„) :

    The calculus is real-homogeneous in the symbol.

    theorem TauCeti.selfAdjointFunctionalCalculus_apply_eigenvectorBasis {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f : โ„ โ†’ โ„) (k : Fin (Module.finrank ๐•œ E)) :
    (selfAdjointFunctionalCalculus hT f) ((hT.eigenvectorBasis โ‹ฏ) k) = โ†‘(f (hT.eigenvalues โ‹ฏ k)) โ€ข (hT.eigenvectorBasis โ‹ฏ) k

    The functional calculus acts diagonally in the chosen eigenbasis.

    theorem TauCeti.selfAdjointFunctionalCalculus_isSymmetric {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f : โ„ โ†’ โ„) :

    Applying a real function to a symmetric operator remains symmetric.

    theorem TauCeti.selfAdjointFunctionalCalculus_isPositive {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) {f : โ„ โ†’ โ„} (hf : โˆ€ (i : Fin (Module.finrank ๐•œ E)), 0 โ‰ค f (hT.eigenvalues โ‹ฏ i)) :

    A symbol nonnegative on the spectrum gives a positive operator.

    Each rank-one summand is positive, and the coefficient f (ฮปแตข) scales it by a nonnegative real. Only the values at the eigenvalues matter, so the hypothesis is stated there rather than on all of โ„.

    theorem TauCeti.norm_selfAdjointFunctionalCalculus_apply_le {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f : โ„ โ†’ โ„) {M : โ„} (hM0 : 0 โ‰ค M) (hM : โˆ€ (i : Fin (Module.finrank ๐•œ E)), |f (hT.eigenvalues โ‹ฏ i)| โ‰ค M) (x : E) :

    The calculus is bounded by the sup of the symbol on the spectrum.

    Parseval in the eigenbasis: the calculus multiplies the i-th coordinate of x by f (ฮปแตข), so the squared norm is a weighted sum of the coordinate weights. This is the estimate continuity of f โ†ฆ calculus hT f rests on.

    theorem TauCeti.selfAdjointFunctionalCalculus_id {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) :

    The identity function recovers the original symmetric operator.

    theorem TauCeti.selfAdjointFunctionalCalculus_congr_op {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T S : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (hS : S.IsSymmetric) (h : T = S) (f : โ„ โ†’ โ„) :

    The calculus depends only on the operator, not on the symmetry witness. The operator occurs solely inside that witness's type, so a plain rewrite cannot reach it; this is the bridge that lets callers replace it.

    theorem TauCeti.selfAdjointFunctionalCalculus_congr {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) {f g : โ„ โ†’ โ„} (hfg : โˆ€ (i : Fin (Module.finrank ๐•œ E)), f (hT.eigenvalues โ‹ฏ i) = g (hT.eigenvalues โ‹ฏ i)) :

    Functions agreeing on every eigenvalue produce the same operator.

    theorem TauCeti.selfAdjointFunctionalCalculus_comp {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f g : โ„ โ†’ โ„) :

    Composition corresponds to pointwise multiplication of scalar functions.

    @[simp]
    theorem TauCeti.selfAdjointFunctionalCalculus_zero {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) :

    Constant zero gives the zero operator.

    theorem TauCeti.selfAdjointFunctionalCalculus_real_smul_id {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] (r : โ„) (f : โ„ โ†’ โ„) :
    have hS := โ‹ฏ; selfAdjointFunctionalCalculus hS f = โ†‘(f r) โ€ข LinearMap.id

    Functional calculus of a real scalar multiple of the identity is scalar evaluation. This is the finite RCLike bridge used by planar angle models.

    theorem TauCeti.selfAdjointFunctionalCalculus_apply_of_apply_eq_smul {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f : โ„ โ†’ โ„) {x : E} {lam : โ„} (hx : T x = โ†‘lam โ€ข x) :
    (selfAdjointFunctionalCalculus hT f) x = โ†‘(f lam) โ€ข x

    Functional calculus on an arbitrary eigenvector. Unlike the basis lemma, this form is stable on repeated eigenspaces and is the key commutant property.

    theorem TauCeti.selfAdjointFunctionalCalculus_intertwines {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {F : Type u_3} [NormedAddCommGroup F] [InnerProductSpace ๐•œ F] [FiniteDimensional ๐•œ F] {A : E โ†’โ‚—[๐•œ] E} (hA : A.IsSymmetric) {B : F โ†’โ‚—[๐•œ] F} (hB : B.IsSymmetric) (J : E โ†’โ‚—[๐•œ] F) (hJ : J โˆ˜โ‚— A = B โˆ˜โ‚— J) (f : โ„ โ†’ โ„) :

    Finite self-adjoint functional calculus preserves intertwiners.

    If J A = B J for symmetric finite-dimensional operators, then applying the same real scalar function to both spectra preserves that relation. The proof uses an eigenbasis of A: intertwining sends each basis vector either to zero or to a B-eigenvector with the same eigenvalue, and the functional calculus therefore acts by the same scalar on both sides.

    This is the finite RCLike counterpart of the continuous-functional-calculus intertwiner used by the infinite-dimensional theory.

    theorem TauCeti.repr_eq_zero_of_calculus_apply_eq_smul {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f : โ„ โ†’ โ„) {x : E} {lam : โ„} (hx : (selfAdjointFunctionalCalculus hT f) x = โ†‘lam โ€ข x) {i : Fin (Module.finrank ๐•œ E)} (hi : f (hT.eigenvalues โ‹ฏ i) โ‰  lam) :
    ((hT.eigenvectorBasis โ‹ฏ).repr x).ofLp i = 0

    An eigenvector of f(T) is blind to the eigenvalues f does not send to its eigenvalue.

    If f(T) x = lam โ€ข x, then x has no component along an eigenvector of T whose eigenvalue f moves away from lam. This is the one computation behind both transfer lemmas below, and it is selfAdjointFunctionalCalculus_isSymmetric applied to the pair (f(T) (b i), f(T) x).

    theorem TauCeti.selfAdjointFunctionalCalculus_apply_of_calculus_apply_eq_smul {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f g : โ„ โ†’ โ„) {x : E} {lam mu : โ„} (hx : (selfAdjointFunctionalCalculus hT f) x = โ†‘lam โ€ข x) (hfg : โˆ€ (i : Fin (Module.finrank ๐•œ E)), f (hT.eigenvalues โ‹ฏ i) = lam โ†’ g (hT.eigenvalues โ‹ฏ i) = mu) :

    Transfer of an eigenvector between two symbols of the same operator.

    If f(T) scales x by lam, and a second symbol g takes the constant value mu at every eigenvalue that f sends to lam, then g(T) scales x by mu. Taking f = id recovers selfAdjointFunctionalCalculus_apply_of_apply_eq_smul.

    This is what lets an eigenvector of an operator that is defined as a functional calculus โ€” an operator angle ฮ˜ = arcsin (sin ฮ˜), say โ€” be pushed through a different symbol without ever naming the eigenbasis.

    theorem TauCeti.exists_eigenvalue_of_calculus_apply_eq_smul {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (f : โ„ โ†’ โ„) {x : E} {lam : โ„} (hx0 : x โ‰  0) (hx : (selfAdjointFunctionalCalculus hT f) x = โ†‘lam โ€ข x) :
    โˆƒ (i : Fin (Module.finrank ๐•œ E)), f (hT.eigenvalues โ‹ฏ i) = lam

    A nonzero eigenvector of f(T) exhibits its eigenvalue as a value of f.

    Contrapositive of repr_eq_zero_of_calculus_apply_eq_smul: if f missed lam at every eigenvalue of T, then every coordinate of x in the eigenbasis would vanish. This is what pins the range of an operator angle: an eigenvalue of arcsin (sin ฮ˜) is an actual arcsine, hence lies in [-ฯ€/2, ฯ€/2].

    theorem TauCeti.selfAdjointFunctionalCalculus_one {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) :

    The constant function 1 gives the identity operator.

    theorem TauCeti.selfAdjointFunctionalCalculus_pow {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) (n : โ„•) :
    (selfAdjointFunctionalCalculus hT fun (x : โ„) => x ^ n) = T ^ n

    The calculus agrees with polynomial evaluation on monomials.

    Induction on n from ..._one and ..._comp; the base is the identity operator and the step is multiplicativity of the symbol. This is what makes the calculus an algebra map extending Polynomial.aeval, the property any route to the Mathlib CFC goes through.

    theorem TauCeti.selfAdjointFunctionalCalculus_indicator {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsSymmetric) {S : Set โ„} (hS : โˆ€ (i : Fin (Module.finrank ๐•œ E)), hT.eigenvalues โ‹ฏ i โˆˆ S) (g : โ„ โ†’ โ„) :

    Extending a symbol by zero off a set containing the spectrum changes nothing.

    The calculus sees f only at the eigenvalues, so restricting a symbol to any set containing them and extending by zero leaves the operator alone. This is what lets a g : C(spectrum โ„ a, โ„) be turned into an โ„ โ†’ โ„ for the finite calculus without the algebra operations drifting: indicator commutes with + and *, and the mismatch at 1 is invisible here.

    Multiplicativity in pointwise-product form, the shape an algebra map needs.

    selfAdjointFunctionalCalculus_comp states this with an explicit lambda. f * g on โ„ โ†’ โ„ is that lambda definitionally, but rw matches syntactically and Lean normalises the lambda to *, so the algebra-map fields need this spelling.

    noncomputable def TauCeti.extendSymbol {S : Set โ„} (g : C(โ†‘S, โ„)) :

    Extend a continuous function on a subset of โ„ to all of โ„ by zero.

    The finite calculus consumes โ„ โ†’ โ„, while cfcHom is stated on C(spectrum โ„ a, โ„); this is the bridge between the two. It is multiplicative and additive outright โ€” both sides vanish off S โ€” and selfAdjointFunctionalCalculus_indicator covers the unit, the one operation it does not respect.

    Equations
    Instances For
      @[simp]
      theorem TauCeti.extendSymbol_apply_of_mem {S : Set โ„} (g : C(โ†‘S, โ„)) {x : โ„} (hx : x โˆˆ S) :

      On S the extension by zero agrees with the symbol.

      @[simp]
      theorem TauCeti.extendSymbol_apply_of_not_mem {S : Set โ„} (g : C(โ†‘S, โ„)) {x : โ„} (hx : x โˆ‰ S) :

      Off S the extension is zero. With extendSymbol_apply_of_mem this determines extendSymbol pointwise, so a consumer never has to reduce through the body.

      theorem TauCeti.extendSymbol_eq_indicator {S : Set โ„} (g : C(โ†‘S, โ„)) (f : โ„ โ†’ โ„) (hf : โˆ€ (x : โ„) (hx : x โˆˆ S), f x = g โŸจx, hxโŸฉ) :

      extendSymbol as a set indicator, the form the calculus bridge consumes.

      theorem TauCeti.extendSymbol_mul {S : Set โ„} (gโ‚ gโ‚‚ : C(โ†‘S, โ„)) :
      extendSymbol (gโ‚ * gโ‚‚) = fun (x : โ„) => extendSymbol gโ‚ x * extendSymbol gโ‚‚ x

      Extension by zero is multiplicative: both sides vanish off S.

      theorem TauCeti.extendSymbol_add {S : Set โ„} (gโ‚ gโ‚‚ : C(โ†‘S, โ„)) :
      extendSymbol (gโ‚ + gโ‚‚) = extendSymbol gโ‚ + extendSymbol gโ‚‚

      Extension by zero is additive.

      @[simp]
      theorem TauCeti.extendSymbol_zero {S : Set โ„} :
      extendSymbol 0 = fun (x : โ„) => 0

      Extension by zero sends the zero symbol to the zero function.

      The extension of the constant symbol 1 is the indicator of S -- not the constant function 1, which is why extension by zero is not unital.

      Every operator commuting with a symmetric map commutes with its finite real functional calculus. This includes repeated eigenvalues: the proof uses that the commuting operator preserves each eigenspace.

      noncomputable def LinearMap.IsPositive.sqrt {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsPositive) :
      E โ†’โ‚—[๐•œ] E

      Spectral positive square root of a positive symmetric operator T, as the functional calculus of Real.sqrt: sqrt T = โˆ‘แตข โˆšฮปแตข โ€ข (rank-one projection onto the i-th eigenvector), where ฮปแตข โ‰ฅ 0 are the eigenvalues of T. Source: Horn--Johnson Thm 7.2.6.

      This was once a second noncomputable def with that sum written out, and the library proved the two coincide by rfl โ€” one object defined twice. The duplicate has been collapsed; the uniqueness theory that only the square root has (sqrt_unique, ker_sqrt, range_sqrt, sqrt_mul_self) is unchanged and still lives in ForTauCeti/Analysis/InnerProductSpace/PositiveSqrt.lean, which now imports this module rather than the other way round.

      Equations
      Instances For
        theorem TauCeti.selfAdjointFunctionalCalculus_sqrt {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T : E โ†’โ‚—[๐•œ] E} (hT : T.IsPositive) :

        The spectral square root is the finite self-adjoint functional calculus of Real.sqrt. True by definition; kept because it is the name downstream proofs rewrite with.

        theorem TauCeti.sqrt_comm {๐•œ : Type u_1} {E : Type u_2} [RCLike ๐•œ] [NormedAddCommGroup E] [InnerProductSpace ๐•œ E] [FiniteDimensional ๐•œ E] {T B : E โ†’โ‚—[๐•œ] E} (hT : T.IsPositive) (hBT : B โˆ˜โ‚— T = T โˆ˜โ‚— B) :

        Commutation passes from a positive operator to its positive square root.