-
Notifications
You must be signed in to change notification settings - Fork 297
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Merged by Bors] - feat(analysis/inner_product_space/spectrum): diagonalization of self-adjoint endomorphisms (finite dimension) #9995
Conversation
🎉 Great news! Looks like all the dependencies have been resolved:
💡 To add or remove a dependency please update this issue/PR description. Brought to you by Dependent Issues (:robot: ). Happy coding! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few nits but otherwise this looks great.
bors d+
I do have one question though: the main results here hold with the weaker assumption that E
is complete rather than finite-dimensional. Is there a reason not just to go straight for the stronger versions?
an internal direct sum decomposition of `E`. -/ | ||
lemma direct_sum_submodule_is_internal : | ||
direct_sum.submodule_is_internal (λ μ : eigenvalues T, eigenspace T μ) := | ||
by convert hT.orthogonal_family_eigenspaces'.submodule_is_internal_iff.mpr |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can this convert
be avoided? Is it some annoying decidability typeclass issue that renders it necessary?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes -- I would love to know how to fix it!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The need for by convert
is indeed due to two different decidability typeclasses, one classical, one not.
To be precise if you add [decidable_eq ι]
to the lemma orthogonal_family.submodule_is_internal_iff
then you can drop the by convert
here.
I believe that you should add [decidable_eq ι]
as an argument to orthogonal_family.submodule_is_internal_iff
and also add [decidable_eq 𝕜]
as an argument here (i.e., to direct_sum_submodule_is_internal
) because otherwise these lemmas contain classical decidability instances (which is a Bad Thing).
Maybe @eric-wieser could confirm / refute my claims given his recent helpful words on Zulip
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To be precise if you add
[decidable_eq ι]
to the lemmaorthogonal_family.submodule_is_internal_iff
then you can drop theby convert
here.
Indeed. Thank you!!
I believe that you should ... also add
[decidable_eq 𝕜]
as an argument here (i.e., todirect_sum_submodule_is_internal
)
Should I also add [decidable_eq 𝕜]
as an argument to orthogonal_family.submodule_is_internal_iff
? Or only here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I defer to a true decidability expert.
I think the way I would settle this is to remove open_locale classical
(I recommend never using it) and see what decidability assumptions you then need to add to make the statements of your lemmas typecheck. And of course if any proofs break just invoke the classical
tactic.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK, removed classical
from projection.lean
and spectrum.lean
!
✌️ hrmacbeth can now approve this pull request. To approve and merge a pull request, simply reply with |
What do you mean exactly? If you're talking about the result for compact operators, I believe I need to define compact operators and also define and write an API for the Hilbert sum of an (infinite) family of inner product spaces. But I'm heading there :). Is there another version you have in mind? |
Good clarification, I should indeed have said "with the weaker assumption that |
There's quite a bit of infrastructure needed for the infinite-dimensional case (the Hilbert sum API in particular). So I think we'll want this more elementary finite-dimensional version which uses But I have been bearing the infinite-dimensional version in mind when structuring this file: did you notice that everything down to lemma orthogonal_supr_eigenspaces (μ : 𝕜) :
eigenspace (T.restrict hT.orthogonal_supr_eigenspaces_invariant) μ = ⊥ : in this file and everything down to lemma has_eigenvector_of_is_max_on (hT : is_self_adjoint (T : E →ₗ[𝕜] E)) {x₀ : E}
(hx₀ : x₀ ≠ 0) (hextr : is_max_on T.re_apply_inner_self (sphere (0:E) ∥x₀∥) x₀) :
has_eigenvector (T : E →ₗ[𝕜] E) ↑(⨆ x : {x : E // x ≠ 0}, rayleigh_quotient x) x₀ := in the Rayleigh file has no We can talk more on Zulip if you're curious about the approach. |
Co-authored-by: Oliver Nash <github@olivernash.org>
Totally agreed, and indeed this is already a very useful and gratifying result! I especially agree about the point about needing a findim version that does not invoke the infdim direct sum machinery etc.
I did notice this!
I have no more questions but I'm always happy to chat! |
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
bors r+ |
…adjoint endomorphisms (finite dimension) (#9995) Diagonalization of a self-adjoint endomorphism `T` of a finite-dimensional inner product space `E` over either `ℝ` or `ℂ`: construct a linear isometry `T.diagonalization` from `E` to the direct sum of `T`'s eigenspaces, such that `T` conjugated by `T.diagonalization` is diagonal: ```lean lemma diagonalization_apply_self_apply (v : E) (μ : eigenvalues T) : hT.diagonalization (T v) μ = (μ : 𝕜) • hT.diagonalization v μ ``` Co-authored-by: Frédéric Dupuis <dupuisf@iro.umontreal.ca>
Pull request successfully merged into master. Build succeeded: |
Diagonalization of a self-adjoint endomorphism
T
of a finite-dimensional inner product spaceE
over eitherℝ
orℂ
: construct a linear isometryT.diagonalization
fromE
to the direct sum ofT
's eigenspaces, such thatT
conjugated byT.diagonalization
is diagonal:1 ≤ p
#9922eigenvalues
of an endomorphism #10027