Skip to content

Commit 5ec8c3f

Browse files
committed
feat: convenience lemmas for continuity of the continuous functional calculus in the operator variable (leanprover-community#33628)
If `a : X → A` is continuous and `A` is a C⋆-algebra and `f` is continuous on a neighborhood of the union of the spectra of `a x`, then `fun x ↦ cfc f (a x)` is continuous (assuming that `a x` satisfies the relevant predicate for the continuous functional calculus). This is slightly weaker than our existing theorems for the continuity of the continuous functional calculus (compare with `Continuous.cfc`), but it is often easier to apply in practice. In particular, it uses upper hemicontinuity of the spectrum to automatically satisfy some of the hypotheses in `Continuous.cfc` at the cost of requiring a *neighborhood* (instead of just compact sets containing the spectra). Indeed, in leanprover-community#33617 we use this to establish continuity of common functions defined in terms of the continuous functional calculus, such as `CFC.log`, `CFC.nnrpow`, `CFC.rpow`, `CFC.sqrt` and `CFC.abs`. - [ ] depends on: leanprover-community#33623 - [ ] depends on: leanprover-community#33624 - [ ] depends on: leanprover-community#33625 - [ ] depends on: leanprover-community#33626 - [ ] depends on: leanprover-community#33627
1 parent 5660741 commit 5ec8c3f

1 file changed

Lines changed: 184 additions & 0 deletions

File tree

Mathlib/Analysis/CStarAlgebra/ContinuousFunctionalCalculus/Continuity.lean

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,35 @@ theorem ContinuousOn.cfc' [TopologicalSpace X] {s : Set 𝕜} (hs : IsCompact s)
314314
filter_upwards [self_mem_nhdsWithin] with x hx
315315
exact ha x hx
316316

317+
/-- If `f : 𝕜 → 𝕜` is continuous on `s` and `a : X → A` is continuous on `t : Set X`,
318+
and `a x` satisfies the predicate `p` associated to `𝕜` and `s` is a common neighborhood of the
319+
spectra of `a x` for all `x ∈ t`, then `fun x ↦ cfc f (a x)` is continuous on `t`.
320+
321+
This is weaker than `ContinuousOn.cfc` since it requires `f` to be continuous on a *neighborhood* of
322+
the spectra, but in practice it is often easier to apply because `s` is not required to be compact,
323+
nor does it require an indexed family of compact sets. This is proven using `ContinuousOn.cfc` and
324+
`upperHemicontinuous_spectrum` to produce the necessary family of compact sets. -/
325+
theorem ContinuousOn.cfc_of_mem_nhdsSet [CompleteSpace A] [TopologicalSpace X] {s : Set 𝕜}
326+
(f : 𝕜 → 𝕜) {a : X → A} {t : Set X} (hs : s ∈ 𝓝ˢ (⋃ x ∈ t, spectrum 𝕜 (a x)))
327+
(ha_cont : ContinuousOn a t) (ha' : ∀ x ∈ t, p (a x) := by cfc_tac)
328+
(hf : ContinuousOn f s := by cfc_cont_tac) :
329+
ContinuousOn (fun x ↦ cfc f (a x)) t := by
330+
have hs' := hs
331+
simp only [nhdsSet_iUnion, mem_iSup] at hs'
332+
have (x : t) : ∃ S, IsCompact S ∧ (∀ᶠ (x' : A) in 𝓝 (a x), spectrum 𝕜 x' ⊆ S) ∧ S ⊆ s:= by
333+
obtain ⟨S, ⟨hS₁, hS₂⟩, hS₃⟩ :=
334+
spectrum.isCompact (𝕜 := 𝕜) (a x) |>.nhdsSet_basis_isCompact.mem_iff.mp (hs' x x.2)
335+
refine ⟨S, hS₂, ?_, hS₃⟩
336+
exact upperHemicontinuous_spectrum 𝕜 A |>.upperHemicontinuousAt (a x) _ hS₁ |>.mono
337+
fun _ ↦ subset_of_mem_nhdsSet
338+
choose S hS₁ hS₂ hS₃ using this
339+
classical
340+
refine ha_cont.cfc (s := fun x : X ↦ if hx : x ∈ t then S ⟨x, hx⟩ else ∅) f
341+
(by simpa +contextual using hS₁) ?_ ha' ?_
342+
all_goals simp +contextual only [↓reduceDIte]
343+
· exact fun x₀ hx₀ ↦ ha_cont.continuousWithinAt hx₀ |>.eventually <| hS₂ ⟨x₀, hx₀⟩
344+
· exact fun x hx ↦ hf.mono <| hS₃ ⟨x, hx⟩
345+
317346
/-- Suppose `a : X → Set A` is continuous and `a x` satisfies the predicate `p` for all `x`.
318347
Suppose further that `s : X → Set 𝕜` is a family of compact sets `s x₀` contains the spectrum of
319348
`a x` for all sufficiently close `x`. If `f : 𝕜 → 𝕜` is continuous on each `s x`, then
@@ -336,6 +365,21 @@ theorem Continuous.cfc' [TopologicalSpace X] {s : Set 𝕜} (hs : IsCompact s) (
336365
rw [← continuousOn_univ] at ha_cont ⊢
337366
exact ha_cont.cfc' hs f (fun x _ ↦ ha x) (fun x _ ↦ ha' x)
338367

368+
/-- If `f : 𝕜 → 𝕜` is continuous on `s` and `a : X → A` is continuous and `a x` satisfies the
369+
predicate `p` associated to `𝕜` and `s` is a common neighborhood of the spectra of `a x` for
370+
all `x`, then `fun x ↦ cfc f (a x)` is continuous.
371+
372+
This is weaker than `Continuous.cfc` since it requires `f` to be continuous on a *neighborhood* of
373+
the spectra, but in practice it is often easier to apply because `s` is not required to be compact,
374+
nor does it require an indexed family of compact sets. This is proven using `Continuous.cfc` and
375+
`upperHemicontinuous_spectrum` to produce the necessary family of compact sets. -/
376+
theorem Continuous.cfc_of_mem_nhdsSet [CompleteSpace A] [TopologicalSpace X] {s : Set 𝕜}
377+
(f : 𝕜 → 𝕜) {a : X → A} (hs : s ∈ 𝓝ˢ (⋃ x, spectrum 𝕜 (a x))) (ha_cont : Continuous a)
378+
(ha' : ∀ x, p (a x) := by cfc_tac) (hf : ContinuousOn f s := by cfc_cont_tac) :
379+
Continuous (fun x ↦ cfc f (a x)) := by
380+
rw [← continuousOn_univ] at ha_cont ⊢
381+
exact ha_cont.cfc_of_mem_nhdsSet f (by simpa) (by simpa)
382+
339383
end RCLike
340384

341385
section NNReal
@@ -437,6 +481,36 @@ theorem ContinuousOn.cfc_nnreal' [TopologicalSpace X] {s : Set ℝ≥0} (hs : Is
437481
filter_upwards [self_mem_nhdsWithin] with x hx
438482
exact ha x hx
439483

484+
/-- If `f : ℝ≥0 → ℝ≥0` is continuous on `s` and `a : X → A` is continuous on `t : Set X`,
485+
and `a x` is nonnegative for all `x ∈ t` and `s` is a common neighborhood of the
486+
spectra of `a x` for all `x ∈ t`, then `fun x ↦ cfc f (a x)` is continuous on `t`.
487+
488+
This is weaker than `ContinuousOn.cfc_nnreal` since it requires `f` to be continuous on a
489+
*neighborhood* of the spectra, but in practice it is often easier to apply because `s` is not
490+
required to be compact, nor does it require an indexed family of compact sets. This is proven using
491+
`ContinuousOn.cfc_nnreal` and `upperHemicontinuous_spectrum_nnreal` to produce the necessary family
492+
of compact sets. -/
493+
theorem ContinuousOn.cfc_nnreal_of_mem_nhdsSet [CompleteSpace A] [TopologicalSpace X] {s : Set ℝ≥0}
494+
(f : ℝ≥0 → ℝ≥0) {a : X → A} {t : Set X} (hs : s ∈ 𝓝ˢ (⋃ x ∈ t, spectrum ℝ≥0 (a x)))
495+
(ha_cont : ContinuousOn a t) (ha' : ∀ x ∈ t, 0 ≤ a x := by cfc_tac)
496+
(hf : ContinuousOn f s := by cfc_cont_tac) :
497+
ContinuousOn (fun x ↦ cfc f (a x)) t := by
498+
have hs' := hs
499+
simp only [nhdsSet_iUnion, mem_iSup] at hs'
500+
have (x : t) : ∃ S, IsCompact S ∧ (∀ᶠ (x' : A) in 𝓝 (a x), spectrum ℝ≥0 x' ⊆ S) ∧ S ⊆ s:= by
501+
obtain ⟨S, ⟨hS₁, hS₂⟩, hS₃⟩ :=
502+
spectrum.isCompact_nnreal (a x) |>.nhdsSet_basis_isCompact.mem_iff.mp (hs' x x.2)
503+
refine ⟨S, hS₂, ?_, hS₃⟩
504+
exact upperHemicontinuous_spectrum_nnreal A |>.upperHemicontinuousAt (a x) _ hS₁ |>.mono
505+
fun _ ↦ subset_of_mem_nhdsSet
506+
choose S hS₁ hS₂ hS₃ using this
507+
classical
508+
refine ha_cont.cfc_nnreal (s := fun x : X ↦ if hx : x ∈ t then S ⟨x, hx⟩ else ∅) f
509+
(by simpa +contextual using hS₁) ?_ ha' ?_
510+
all_goals simp +contextual only [↓reduceDIte]
511+
· exact fun x₀ hx₀ ↦ ha_cont.continuousWithinAt hx₀ |>.eventually <| hS₂ ⟨x₀, hx₀⟩
512+
· exact fun x hx ↦ hf.mono <| hS₃ ⟨x, hx⟩
513+
440514
/-- Suppose `a : X → Set A` is a continuous family of nonnegative elements.
441515
Suppose further that `s : X → Set ℝ≥0` is a family of compact sets such that `s x₀` contains the
442516
spectrum of `a x` for all sufficiently close `x`. If `f : ℝ≥0 → ℝ≥0` is continuous on each `s x`,
@@ -459,6 +533,22 @@ theorem Continuous.cfc_nnreal' [TopologicalSpace X] {s : Set ℝ≥0} (hs : IsCo
459533
rw [← continuousOn_univ] at ha_cont ⊢
460534
exact ha_cont.cfc_nnreal' hs f (fun x _ ↦ ha x) (fun x _ ↦ ha' x)
461535

536+
/-- If `f : ℝ≥0 → ℝ≥0` is continuous on `s` and `a : X → A` is continuous and `a x` is nonnegative
537+
for all `x` and `s` is a common neighborhood of the spectra of `a x` for all `x`, then
538+
`fun x ↦ cfc f (a x)` is continuous.
539+
540+
This is weaker than `Continuous.cfc_nnreal` since it requires `f` to be continuous on a
541+
*neighborhood* of the spectra, but in practice it is often easier to apply because `s` is not
542+
required to be compact, nor does it require an indexed family of compact sets. This is proven using
543+
`Continuous.cfc_nnreal` and `upperHemicontinuous_spectrum_nnreal` to produce the necessary family
544+
of compact sets. -/
545+
theorem Continuous.cfc_nnreal_of_mem_nhdsSet [CompleteSpace A] [TopologicalSpace X] {s : Set ℝ≥0}
546+
(f : ℝ≥0 → ℝ≥0) {a : X → A} (hs : s ∈ 𝓝ˢ (⋃ x, spectrum ℝ≥0 (a x))) (ha_cont : Continuous a)
547+
(ha' : ∀ x, 0 ≤ a x := by cfc_tac) (hf : ContinuousOn f s := by cfc_cont_tac) :
548+
Continuous (fun x ↦ cfc f (a x)) := by
549+
rw [← continuousOn_univ] at ha_cont ⊢
550+
exact ha_cont.cfc_nnreal_of_mem_nhdsSet f (by simpa) (by simpa)
551+
462552
end NNReal
463553

464554
end Right
@@ -731,6 +821,36 @@ theorem ContinuousOn.cfcₙ' [TopologicalSpace X] {s : Set 𝕜} (hs : IsCompact
731821
filter_upwards [self_mem_nhdsWithin] with x hx
732822
exact ha x hx
733823

824+
/-- If `f : 𝕜 → 𝕜` is continuous on `s` and `f 0 = 0` and `a : X → A` is continuous on `t : Set X`,
825+
and `a x` satisfies the predicate `p` associated to `𝕜` and `s` is a common neighborhood of the
826+
quasispectra of `a x` for all `x ∈ t`, then `fun x ↦ cfcₙ f (a x)` is continuous on `t`.
827+
828+
This is weaker than `ContinuousOn.cfcₙ` since it requires `f` to be continuous on a
829+
*neighborhood* of the quasispectra, but in practice it is often easier to apply because `s` is not
830+
required to be compact, nor does it require an indexed family of compact sets. This is proven using
831+
`ContinuousOn.cfcₙ` and `upperHemicontinuous_quasispectrum` to produce the necessary family of
832+
compact sets. -/
833+
theorem ContinuousOn.cfcₙ_of_mem_nhdsSet [CompleteSpace A] [TopologicalSpace X] {s : Set 𝕜}
834+
(f : 𝕜 → 𝕜) {a : X → A} {t : Set X} (hs : s ∈ 𝓝ˢ (⋃ x ∈ t, quasispectrum 𝕜 (a x)))
835+
(ha_cont : ContinuousOn a t) (ha' : ∀ x ∈ t, p (a x) := by cfc_tac)
836+
(hf : ContinuousOn f s := by cfc_cont_tac) (hf0 : f 0 = 0 := by cfc_zero_tac) :
837+
ContinuousOn (fun x ↦ cfcₙ f (a x)) t := by
838+
have hs' := hs
839+
simp only [nhdsSet_iUnion, mem_iSup] at hs'
840+
have (x : t) : ∃ S, IsCompact S ∧ (∀ᶠ (x' : A) in 𝓝 (a x), quasispectrum 𝕜 x' ⊆ S) ∧ S ⊆ s := by
841+
obtain ⟨S, ⟨hS₁, hS₂⟩, hS₃⟩ :=
842+
quasispectrum.isCompact (𝕜 := 𝕜) (a x) |>.nhdsSet_basis_isCompact.mem_iff.mp (hs' x x.2)
843+
refine ⟨S, hS₂, ?_, hS₃⟩
844+
exact upperHemicontinuous_quasispectrum 𝕜 A |>.upperHemicontinuousAt (a x) _ hS₁ |>.mono
845+
fun _ ↦ subset_of_mem_nhdsSet
846+
choose S hS₁ hS₂ hS₃ using this
847+
classical
848+
refine ha_cont.cfcₙ (s := fun x : X ↦ if hx : x ∈ t then S ⟨x, hx⟩ else ∅) f
849+
(by simpa +contextual using hS₁) ?_ ha' ?_
850+
all_goals simp +contextual only [↓reduceDIte]
851+
· exact fun x₀ hx₀ ↦ ha_cont.continuousWithinAt hx₀ |>.eventually <| hS₂ ⟨x₀, hx₀⟩
852+
· exact fun x hx ↦ hf.mono <| hS₃ ⟨x, hx⟩
853+
734854
/-- Suppose `a : X → Set A` is continuous and `a x` satisfies the predicate `p` for all `x`.
735855
Suppose further that `s : X → Set 𝕜` is a family of compact sets `s x₀` contains the spectrum of
736856
`a x` for all sufficiently close `x`. If `f : 𝕜 → 𝕜` is continuous on each `s x` and `f 0 = 0`, then
@@ -755,6 +875,23 @@ theorem Continuous.cfcₙ' [TopologicalSpace X] {s : Set 𝕜} (hs : IsCompact s
755875
rw [← continuousOn_univ] at ha_cont ⊢
756876
exact ha_cont.cfcₙ' hs f (fun x _ ↦ ha x) (fun x _ ↦ ha' x)
757877

878+
/-- If `f : 𝕜 → 𝕜` is continuous on `s` and `f 0 = 0` and `a : X → A` is continuous and `a x`
879+
satisfies the predicate `p` associated to `𝕜` and `s` is a common neighborhood of the quasispectra
880+
of `a x` for all `x`, then `fun x ↦ cfcₙ f (a x)` is continuous.
881+
882+
This is weaker than `Continuous.cfcₙ` since it requires `f` to be continuous on a *neighborhood* of
883+
the quasispectra, but in practice it is often easier to apply because `s` is not required to be
884+
compact, nor does it require an indexed family of compact sets. This is proven using
885+
`Continuous.cfcₙ` and `upperHemicontinuous_quasispectrum` to produce the necessary family of
886+
compact sets. -/
887+
theorem Continuous.cfcₙ_of_mem_nhdsSet [CompleteSpace A] [TopologicalSpace X] {s : Set 𝕜}
888+
(f : 𝕜 → 𝕜) {a : X → A} (hs : s ∈ 𝓝ˢ (⋃ x, quasispectrum 𝕜 (a x))) (ha_cont : Continuous a)
889+
(ha' : ∀ x, p (a x) := by cfc_tac) (hf : ContinuousOn f s := by cfc_cont_tac)
890+
(hf0 : f 0 = 0 := by cfc_zero_tac) :
891+
Continuous (fun x ↦ cfcₙ f (a x)) := by
892+
rw [← continuousOn_univ] at ha_cont ⊢
893+
exact ha_cont.cfcₙ_of_mem_nhdsSet f (by simpa) (by simpa)
894+
758895
end RCLike
759896

760897
section NNReal
@@ -859,6 +996,36 @@ theorem ContinuousOn.cfcₙ_nnreal' [TopologicalSpace X] {s : Set ℝ≥0} (hs :
859996
filter_upwards [self_mem_nhdsWithin] with x hx
860997
exact ha x hx
861998

999+
/-- If `f : ℝ≥0 → ℝ≥0` is continuous on `s` and `f 0 = 0` and `a : X → A` is continuous on
1000+
`t : Set X`, and `a x` is nonnegative for all `x ∈ t` and `s` is a common neighborhood of the
1001+
quasispectra of `a x` for all `x ∈ t`, then `fun x ↦ cfcₙ f (a x)` is continuous on `t`.
1002+
1003+
This is weaker than `ContinuousOn.cfcₙ_nnreal` since it requires `f` to be continuous on a
1004+
*neighborhood* of the quasispectra, but in practice it is often easier to apply because `s` is not
1005+
required to be compact, nor does it require an indexed family of compact sets. This is proven using
1006+
`ContinuousOn.cfcₙ_nnreal` and `upperHemicontinuous_quasispectrum_nnreal` to produce the necessary
1007+
family of compact sets. -/
1008+
theorem ContinuousOn.cfcₙ_nnreal_of_mem_nhdsSet [CompleteSpace A] [TopologicalSpace X] {s : Set ℝ≥0}
1009+
(f : ℝ≥0 → ℝ≥0) {a : X → A} {t : Set X} (hs : s ∈ 𝓝ˢ (⋃ x ∈ t, quasispectrum ℝ≥0 (a x)))
1010+
(ha_cont : ContinuousOn a t) (ha' : ∀ x ∈ t, 0 ≤ a x := by cfc_tac)
1011+
(hf : ContinuousOn f s := by cfc_cont_tac) (hf0 : f 0 = 0 := by cfc_zero_tac) :
1012+
ContinuousOn (fun x ↦ cfcₙ f (a x)) t := by
1013+
have hs' := hs
1014+
simp only [nhdsSet_iUnion, mem_iSup] at hs'
1015+
have (x : t) : ∃ S, IsCompact S ∧ (∀ᶠ (x' : A) in 𝓝 (a x), quasispectrum ℝ≥0 x' ⊆ S) ∧ S ⊆ s:= by
1016+
obtain ⟨S, ⟨hS₁, hS₂⟩, hS₃⟩ :=
1017+
quasispectrum.isCompact_nnreal (a x) |>.nhdsSet_basis_isCompact.mem_iff.mp (hs' x x.2)
1018+
refine ⟨S, hS₂, ?_, hS₃⟩
1019+
exact upperHemicontinuous_quasispectrum_nnreal A |>.upperHemicontinuousAt (a x) _ hS₁ |>.mono
1020+
fun _ ↦ subset_of_mem_nhdsSet
1021+
choose S hS₁ hS₂ hS₃ using this
1022+
classical
1023+
refine ha_cont.cfcₙ_nnreal (s := fun x : X ↦ if hx : x ∈ t then S ⟨x, hx⟩ else ∅) f
1024+
(by simpa +contextual using hS₁) ?_ ha' ?_
1025+
all_goals simp +contextual only [↓reduceDIte]
1026+
· exact fun x₀ hx₀ ↦ ha_cont.continuousWithinAt hx₀ |>.eventually <| hS₂ ⟨x₀, hx₀⟩
1027+
· exact fun x hx ↦ hf.mono <| hS₃ ⟨x, hx⟩
1028+
8621029
/-- Suppose `a : X → Set A` is a continuous family of nonnegative elements.
8631030
Suppose further that `s : X → Set ℝ≥0` is a family of compact sets such that `s x₀` contains the
8641031
spectrum of `a x` for all sufficiently close `x`. If `f : ℝ≥0 → ℝ≥0` is continuous on each `s x`
@@ -883,6 +1050,23 @@ theorem Continuous.cfcₙ_nnreal' [TopologicalSpace X] {s : Set ℝ≥0} (hs : I
8831050
rw [← continuousOn_univ] at ha_cont ⊢
8841051
exact ha_cont.cfcₙ_nnreal' hs f (fun x _ ↦ ha x) (fun x _ ↦ ha' x)
8851052

1053+
/-- If `f : ℝ≥0 → ℝ≥0` is continuous on `s` and `f 0 = 0` and `a : X → A` is continuous and `a x` is
1054+
nonnegative for all `x` and `s` is a common neighborhood of the quasispectra of `a x` for all `x`,
1055+
then `fun x ↦ cfcₙ f (a x)` is continuous.
1056+
1057+
This is weaker than `Continuous.cfcₙ_nnreal` since it requires `f` to be continuous on a
1058+
*neighborhood* of the quasispectra, but in practice it is often easier to apply because `s` is not
1059+
required to be compact, nor does it require an indexed family of compact sets. This is proven using
1060+
`Continuous.cfcₙ_nnreal` and `upperHemicontinuous_quasispectrum_nnreal` to produce the necessary
1061+
family of compact sets. -/
1062+
theorem Continuous.cfcₙ_nnreal_of_mem_nhdsSet [CompleteSpace A] [TopologicalSpace X] {s : Set ℝ≥0}
1063+
(f : ℝ≥0 → ℝ≥0) {a : X → A} (hs : s ∈ 𝓝ˢ (⋃ x, quasispectrum ℝ≥0 (a x)))
1064+
(ha_cont : Continuous a) (ha' : ∀ x, 0 ≤ a x := by cfc_tac)
1065+
(hf : ContinuousOn f s := by cfc_cont_tac) (hf0 : f 0 = 0 := by cfc_zero_tac) :
1066+
Continuous (fun x ↦ cfcₙ f (a x)) := by
1067+
rw [← continuousOn_univ] at ha_cont ⊢
1068+
exact ha_cont.cfcₙ_nnreal_of_mem_nhdsSet f (by simpa) (by simpa)
1069+
8861070
end NNReal
8871071

8881072
end Right

0 commit comments

Comments
 (0)