Zulip Chat Archive

Stream: maths

Topic: spectral theorem for normal endomorphisms and related pain


Jireh Loreaux (Apr 16 2024 at 18:27):

I've been thinking about giving someone a short project over the summer to establish the spectral theorem for normal endomorphisms over a finite dimensional inner product space.

In outlining the work, I ran into several problems that are not present for the spectral theorem for symmetric operators.

  1. We have a definition of symmetric operators that can be used for both LinearMap and ContinuousLinearMap (since the latter has a coercion to the former), and the type class assumptions are minimal. This is useful.
  2. One cannot do a similar thing for normal endomorphisms, because one must reference the adjoint (or star, whichever), but there are no common type class assumptions giving the user access to that (e.g., for E β†’β‚—[π•œ] E we need FiniteDimensional π•œ E, but for E β†’L[π•œ] E we need CompleteSpace E).
  3. As an example of the problems caused by (2), consider that the following statement is true for linear maps on a finite dimensional space as well, but we would need to duplicate the proof.
lemma adjoint_apply_eq_zero_iff {π•œ E : Type*} [RCLike π•œ] [NormedAddCommGroup E]
    [InnerProductSpace π•œ E] [CompleteSpace E] (f : E β†’L[π•œ] E) [IsStarNormal f] (x : E) :
    adjoint f x = 0 ↔ f x = 0 :=
  sorry
  1. In fact, all the results at the beginning of file#Analysis/InnerProductSpace/Spectrum (except the one that says eigenvalues are real) generalize to normal endomorphisms. BUT, we would need them in triplicate: one for symmetric linear maps, one for normal continuous linear maps on a complete space, and one for normal linear maps on a finite dimensional space ... gross.
  2. Moreover, there's really nothing about (4) which needs separate assumptions other than the existence of a suitable adjoint.

I'm happy to solicit solutions to these sorts of problems. One idea I considered was to have a LinearAdjoint class which supplies an adjoint for the appropriate space of endomorphisms. Some downsides: it's subject to the same problems as all of our hom classes: we can't talk about identity maps or composition. A draft implementation:

LinearAdjoint

Of course, this doesn't help with LinearPMap at all, but right now I consider it hopeless to unify that too.

Jireh Loreaux (Apr 16 2024 at 18:44):

The idea would be that LinearAdjoint.adjoint (or just adjoint if we export it) would become the default spelling of both the existing LinearMap.adjoint and ContinuousLinearMap.adjoint. Of course, we would still need docs#ContinuousLinearMap.adjoint since that's also isometric, but we would try to avoid using it in statements.

Even with this proposed class, there still doesn't seem to be a way to unify the symmetric and normal versions of the results at the top of file#LinearAlgebra/InnerProductSpace/Spectrum, because the normal versions will still require additional type class assumptions.

FrΓ©dΓ©ric Dupuis (Apr 16 2024 at 18:47):

Wouldn't it be enough to have a prop typeclass IsReasonableStar (or something :-) ) that contains the properties of star that we need for all of this?

Jireh Loreaux (Apr 16 2024 at 18:48):

No, you need the interaction with the inner product.

FrΓ©dΓ©ric Dupuis (Apr 16 2024 at 18:49):

Can't that be baked in? i.e. having an inner product is a necessary prerequisite for IsReasonableStar, along with the properties.

Jireh Loreaux (Apr 16 2024 at 18:49):

I suppose.

Jireh Loreaux (Apr 16 2024 at 18:50):

Another possible solution is to define the collection of adjointable operators, and define an adjoint operation on those. In the case of complete spaces or finite dimensional spaces, every operator is adjointable.

Jireh Loreaux (Apr 16 2024 at 19:05):

The IsReasonableStar approach still doesn't allow you to unify the IsStarNormal results with the IsSymmetric, because the former needs IsReasonableStar, but the IsSymmetric results hold even in the presence of an unreasonable star. I think this is acceptable though, and I prefer the approach to not create new data.

FrΓ©dΓ©ric Dupuis (Apr 16 2024 at 19:30):

Yeah, I'm not very enthusiastic at the prospect of creating a second version of star...

Jireh Loreaux (Apr 16 2024 at 20:29):

Even IsReasonableStar (which I called StarAdjoint) seems doomed to failure. In order for it to be useful, we would have to know that all the operations on this type with a LinearMapClass instance occur pointwise. For example:

class StarAdjoint (π•œ E : outParam Type*) (H : Type*) [RCLike π•œ] [NormedAddCommGroup E]
    [InnerProductSpace π•œ E] [Ring H] [Module π•œ H] [StarRing H] [FunLike H E E]
    [LinearMapClass H π•œ E E] : Prop where
  star_is_adjoint (f : H) (x y : E) : βŸͺstar f y, x⟫_π•œ = βŸͺy, f x⟫_π•œ
  mul_apply (f g : H) (x : E) : (f * g) x = f (g x)

But we would also need the add_apply, sub_apply, etc. as well.

Jireh Loreaux (Apr 16 2024 at 20:30):

This is also a problem with my proposed LinearAdjoint class too, I just hadn't realized it yet.

Jireh Loreaux (Apr 16 2024 at 20:30):

I'm leaning towards just accepting the triplicated theorems.

FrΓ©dΓ©ric Dupuis (Apr 16 2024 at 21:02):

Is it so bad to have the add_apply and friends?

Jireh Loreaux (Apr 16 2024 at 21:03):

It makes me feel like I'm doing it wrong. And I suspect I'm just going to keep running into other issues. Maybe I'm wrong.

FrΓ©dΓ©ric Dupuis (Apr 16 2024 at 21:05):

Hard to tell without really trying it I guess.

Jireh Loreaux (Apr 16 2024 at 21:06):

There's also the issue that all the eigenspace and related material is about docs#Module.End, which means that all my statements involving this generic StarAdjoint type (H in the code above) would have to be coerced to a linear map in the statements.

Jireh Loreaux (Apr 16 2024 at 21:06):

Admittedly, that's a problem for ContinuousLinearMap too. :shrug:

YaΓ«l Dillies (Apr 16 2024 at 21:12):

Is that related to !3#16351 ?

Jireh Loreaux (Apr 16 2024 at 21:21):

you mean the pointwise action stuff? Maybe a bit, but I'm not entirely sure how to make any of the proposed solutions there work here (aside from just copying the *_apply fields into the class).

YaΓ«l Dillies (Apr 16 2024 at 21:35):

Yeah, is that an unreasonable solution?

Jireh Loreaux (Apr 16 2024 at 21:37):

As I said above, it made me feel like I was doing things wrong, because I just kept needing to add things to say "this really is a linear map, please treat it as such". But maybe these are the only facts I need.

Antoine Chambert-Loir (Apr 17 2024 at 05:31):

Eigenspaces should be defined for LinearMapClass, shouldn't they?

FrΓ©dΓ©ric Dupuis (Apr 17 2024 at 08:04):

Antoine Chambert-Loir said:

Eigenspaces should be defined for LinearMapClass, shouldn't they?

This has been on my todo list since forever!

Antoine Chambert-Loir (Apr 17 2024 at 11:04):

Suggestion: this kind of stuff should be added to the relevant file, in hope that somebody finds the courage to do it, with some specific enough format that one can gather them automatically to one big informative Todo list.

Jireh Loreaux (Apr 17 2024 at 13:23):

FrΓ©dΓ©ric Dupuis said:

Antoine Chambert-Loir said:

Eigenspaces should be defined for LinearMapClass, shouldn't they?

This has been on my todo list since forever!

I think there are two problems with doing this:

  1. You have the issue that has come up with other FunLike things of this kind: The eigenvalues / eigenvectors of some element of a LinearMapClass are not defeq to those of it's coercion to a linear map. If you have some lemmas to show they are the same, then it's not so bad, but it is a bit of an annoyance.
  2. More importantly, there's no LinearMap.id for elements in a LinearMapClass, which gets pretty annoying when you want to work with f x = ΞΌ x and you want to write it like (f - ΞΌ β€’ LinearMap.id) x = 0. Even (f - algebraMap π•œ F ΞΌ) x = 0 is probably not valid for most LinearMapClasses F, and you would still need to apply it to x.

Jireh Loreaux (Apr 17 2024 at 13:24):

You can do (↑f - ΞΌ β€’ LinearMap.id) x = 0 but then you're back to coercing.

FrΓ©dΓ©ric Dupuis (Apr 17 2024 at 18:05):

Sure, there are some downsides, but surely this can't be worse than having to coerce all the time when talking about continuous linear maps!

Eric Wieser (Apr 17 2024 at 19:20):

Jireh Loreaux said:

Even IsReasonableStar (which I called StarAdjoint) seems doomed to failure. In order for it to be useful, we would have to know that all the operations on this type with a LinearMapClass instance occur pointwise. For example:

class StarAdjoint (π•œ E : outParam Type*) (H : Type*) [RCLike π•œ] [NormedAddCommGroup E]
    [InnerProductSpace π•œ E] [Ring H] [Module π•œ H] [StarRing H] [FunLike H E E]
    [LinearMapClass H π•œ E E] : Prop where
  star_is_adjoint (f : H) (x y : E) : βŸͺstar f y, x⟫_π•œ = βŸͺy, f x⟫_π•œ
  mul_apply (f g : H) (x : E) : (f * g) x = f (g x)

But we would also need the add_apply, sub_apply, etc. as well.

Does AddMonoidHomClass deal with the add and sub lemmas?

Jireh Loreaux (Apr 17 2024 at 19:23):

No, AddMonoidHomClass H E E would tell you that for any f : H and any x y : E, that f (x + y) = f x + f y, but it's not going to tell you that for any f g : H and any x : E, that (f + g) x = f x + g x.

Antoine Chambert-Loir (Apr 17 2024 at 19:24):

Isn't it a way to add id to all these classes (when possible), and turning them into kind of categories?

Jireh Loreaux (Apr 17 2024 at 19:30):

Did you mean "Does there exist a way ..."? Not currently. The issue is composition. Given HomClass F X Y, HomClass G Y Z Lean has trouble inferring the ?H in HomClass ?H X Z.

Jireh Loreaux (Apr 17 2024 at 19:31):

Indeed, a single F could imply many more HomClasses between X and Y.

Jireh Loreaux (Apr 17 2024 at 19:36):

There's this issue #2202


Last updated: May 02 2025 at 03:31 UTC