-
Notifications
You must be signed in to change notification settings - Fork 382
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(CstarRing): various lemmas related to the spectral order and the CFC #13676
Conversation
PR summary 67968682d3Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
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.
Lots of simplifications. Probably for most to work you need to merge master. You may also need to add the lemmas I suggest.
I'm very happy with how this is working out. Just appealing to the Unitization
as in normal arguments is great. Thanks for doing this work. It really justifies the design of everything we've done so far.
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
…/Order.lean Co-authored-by: Jireh Loreaux <[email protected]>
…/Order.lean Co-authored-by: Jireh Loreaux <[email protected]>
…/Order.lean Co-authored-by: Jireh Loreaux <[email protected]>
…/Order.lean Co-authored-by: Jireh Loreaux <[email protected]>
…/Order.lean Co-authored-by: Jireh Loreaux <[email protected]>
…/Order.lean Co-authored-by: Jireh Loreaux <[email protected]>
In the long comment above, I think actually we want selfadjoint versions of everything. Here's what I have now. (Sorry for the complicated review; I just kept realizing things weren't quite as nice as we wanted and I knew we would want more lemmas.) Obviously not all of this goes in this file. open ComplexOrder in
instance CstarRing.instNonnegSpectrumClassComplex {A : Type*} [NormedRing A] [CompleteSpace A]
[PartialOrder A] [StarRing A] [StarOrderedRing A] [CstarRing A] [NormedAlgebra ℂ A]
[StarModule ℂ A] : NonnegSpectrumClass ℂ A where
quasispectrum_nonneg_of_nonneg a ha x := by
rw [mem_quasispectrum_iff]
refine (Or.elim · ge_of_eq fun hx ↦ ?_)
obtain ⟨y, hy, rfl⟩ := (IsSelfAdjoint.of_nonneg ha).spectrumRestricts.algebraMap_image ▸ hx
simpa using spectrum_nonneg_of_nonneg ha hy
lemma Real.spectralRadius_mem_spectrum_or {A : Type*} [NormedRing A] [NormedAlgebra ℝ A]
[CompleteSpace A] {a : A} (ha : (spectrum ℝ a).Nonempty) :
(spectralRadius ℝ a).toReal ∈ spectrum ℝ a ∨ -(spectralRadius ℝ a).toReal ∈ spectrum ℝ a := by
obtain ⟨x, hx₁, hx₂⟩ := spectrum.exists_nnnorm_eq_spectralRadius_of_nonempty ha
simp only [← hx₂, ENNReal.coe_toReal, coe_nnnorm, norm_eq_abs]
exact abs_choice x |>.imp (fun h ↦ by rwa [h]) (fun h ↦ by simpa [h])
lemma NNReal.spectralRadius_mem_spectrum {A : Type*} [NormedRing A] [NormedAlgebra ℝ A]
[CompleteSpace A] {a : A} (ha : (spectrum ℝ a).Nonempty)
(ha' : SpectrumRestricts a ContinuousMap.realToNNReal) :
(spectralRadius ℝ a).toNNReal ∈ spectrum ℝ≥0 a := by
rw [← spectrum.algebraMap_mem_iff ℝ, NNReal.algebraMap_eq_coe, ← ENNReal.toReal]
have := Real.spectralRadius_mem_spectrum_or ha
rwa [or_iff_left_of_imp (fun h ↦ ?_)] at this
have : (spectralRadius ℝ a).toReal ≤ 0 :=
nonpos_of_neg_nonneg <| ha'.rightInvOn h ▸ NNReal.zero_le_coe
simpa [le_antisymm this ENNReal.toReal_nonneg] using h
lemma Real.spectralRadius_mem_spectrum {A : Type*} [NormedRing A] [NormedAlgebra ℝ A]
[CompleteSpace A] {a : A} (ha : (spectrum ℝ a).Nonempty)
(ha' : SpectrumRestricts a ContinuousMap.realToNNReal) :
(spectralRadius ℝ a).toReal ∈ spectrum ℝ a :=
NNReal.spectralRadius_mem_spectrum ha ha'
lemma IsSelfAdjoint.toReal_spectralRadius_complex_eq_norm {a : A} (ha : IsSelfAdjoint a) :
(spectralRadius ℂ a).toReal = ‖a‖ := by
simp [ha.spectralRadius_eq_nnnorm]
lemma IsSelfAdjoint.toReal_spectralRadius_eq_norm {a : A} (ha : IsSelfAdjoint a) :
(spectralRadius ℝ a).toReal = ‖a‖ := by
simp [ha.spectrumRestricts.spectralRadius_eq, ha.spectralRadius_eq_nnnorm]
lemma CstarRing.norm_or_neg_norm_mem_spectrum [Nontrivial A] {a : A}
(ha : IsSelfAdjoint a := by cfc_tac) : ‖a‖ ∈ spectrum ℝ a ∨ -‖a‖ ∈ spectrum ℝ a := by
have ha' : SpectrumRestricts a Complex.reCLM := ha.spectrumRestricts
have := ha.toReal_spectralRadius_eq_norm
convert Real.spectralRadius_mem_spectrum_or (ha'.image ▸ (spectrum.nonempty a).image _)
lemma CstarRing.nnnorm_mem_spectrum_of_nonneg [Nontrivial A] {a : A} (ha : 0 ≤ a := by cfc_tac) :
‖a‖₊ ∈ spectrum ℝ≥0 a := by
have : IsSelfAdjoint a := .of_nonneg ha
convert NNReal.spectralRadius_mem_spectrum (a := a) ?_ (.nnreal_of_nonneg ha)
· simp [this.spectrumRestricts.spectralRadius_eq, this.spectralRadius_eq_nnnorm]
· exact this.spectrumRestricts.image ▸ (spectrum.nonempty a).image _
lemma CstarRing.norm_mem_spectrum_of_nonneg [Nontrivial A] {a : A} (ha : 0 ≤ a := by cfc_tac) :
‖a‖ ∈ spectrum ℝ a := by
simpa using spectrum.algebraMap_mem ℝ <| CstarRing.nnnorm_mem_spectrum_of_nonneg ha |
Thanks for the extensive review, @j-loreaux ! I think I've addressed everything except for the two comments I've left open. |
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.
Thanks!
bors d+
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Outdated
Show resolved
Hide resolved
Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Order.lean
Show resolved
Hide resolved
✌️ dupuisf can now approve this pull request. To approve and merge a pull request, simply reply with |
bors r+ |
… CFC (#13676) This PR proves various lemmas for C*-algebras, such as - if `a ≤ b`, then `‖a‖ ≤ ‖b‖` - `star a * b *a ≤ ‖b‖ • (star a * a)` - if `a` is positive, then `‖a‖ ∈ spectrum ℝ a`. It also puts an order instance on `Unitization ℂ A`, needed to prove the above. - [x] depends on: #13650 - [x] depends on: #13673 Co-authored-by: Frédéric Dupuis <[email protected]>
Build failed (retrying...): |
… CFC (#13676) This PR proves various lemmas for C*-algebras, such as - if `a ≤ b`, then `‖a‖ ≤ ‖b‖` - `star a * b *a ≤ ‖b‖ • (star a * a)` - if `a` is positive, then `‖a‖ ∈ spectrum ℝ a`. It also puts an order instance on `Unitization ℂ A`, needed to prove the above. - [x] depends on: #13650 - [x] depends on: #13673 Co-authored-by: Frédéric Dupuis <[email protected]>
Pull request successfully merged into master. Build succeeded: |
This PR proves various lemmas for C*-algebras, such as
a ≤ b
, then‖a‖ ≤ ‖b‖
star a * b *a ≤ ‖b‖ • (star a * a)
a
is positive, then‖a‖ ∈ spectrum ℝ a
.It also puts an order instance on
Unitization ℂ A
, needed to prove the above.StarOrderedRing
instances #13650aesop
tags relevant for provingIsSelfAdjoint a
automatically #13673