Skip to content

Commit c52fabc

Browse files
committed
feat(ContinuousFunctionalCalculus): add several lemmas involving the CFC and algebraMap (#14065)
This PR adds several lemmas about the interaction between the (non-unital) CFC and `algebraMap`. Several lemmas require some sort of nontriviality statement for the CFC (i.e. the predicate can't be false everywhere), I just stated it as an `hp : p 0` hypothesis in the lemma statements; it seems like the most convenient way in practice and probably the easiest to automate. Co-authored-by: Jireh Loreaux <loreaujy@gmail.com>
1 parent 343699a commit c52fabc

File tree

3 files changed

+57
-5
lines changed

3 files changed

+57
-5
lines changed

Mathlib/Analysis/NormedSpace/Star/ContinuousFunctionalCalculus/Instances.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ lemma SpectrumRestricts.eq_zero_of_neg {a : A} (ha : IsSelfAdjoint a)
415415
a = 0 := by
416416
nontriviality A
417417
rw [SpectrumRestricts.nnreal_iff] at ha₁ ha₂
418-
apply eq_zero_of_spectrum_subset_zero (R := ℝ) a
418+
apply CFC.eq_zero_of_spectrum_subset_zero (R := ℝ) a
419419
rw [Set.subset_singleton_iff]
420420
simp only [← spectrum.neg_eq, Set.mem_neg] at ha₂
421421
peel ha₁ with x hx _

Mathlib/Topology/ContinuousFunction/FunctionalCalculus.lean

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -569,19 +569,58 @@ lemma cfc_comp_polynomial (q : R[X]) (f : R → R) (a : A)
569569
cfc (f <| q.eval ·) a = cfc f (aeval a q) := by
570570
rw [cfc_comp' .., cfc_polynomial ..]
571571

572-
lemma eq_algebraMap_of_spectrum_subset_singleton (r : R) (h_spec : spectrum R a ⊆ {r})
572+
lemma CFC.eq_algebraMap_of_spectrum_subset_singleton (r : R) (h_spec : spectrum R a ⊆ {r})
573573
(ha : p a := by cfc_tac) : a = algebraMap R A r := by
574574
simpa [cfc_id R a, cfc_const r a] using
575575
cfc_congr (f := id) (g := fun _ : R ↦ r) (a := a) fun x hx ↦ by simpa using h_spec hx
576576

577-
lemma eq_zero_of_spectrum_subset_zero (h_spec : spectrum R a ⊆ {0}) (ha : p a := by cfc_tac) :
577+
lemma CFC.eq_zero_of_spectrum_subset_zero (h_spec : spectrum R a ⊆ {0}) (ha : p a := by cfc_tac) :
578578
a = 0 := by
579579
simpa using eq_algebraMap_of_spectrum_subset_singleton a 0 h_spec
580580

581-
lemma eq_one_of_spectrum_subset_one (h_spec : spectrum R a ⊆ {1}) (ha : p a := by cfc_tac) :
581+
lemma CFC.eq_one_of_spectrum_subset_one (h_spec : spectrum R a ⊆ {1}) (ha : p a := by cfc_tac) :
582582
a = 1 := by
583583
simpa using eq_algebraMap_of_spectrum_subset_singleton a 1 h_spec
584584

585+
lemma CFC.spectrum_algebraMap_subset (r : R) : spectrum R (algebraMap R A r) ⊆ {r} := by
586+
rw [← cfc_const r 0 (cfc_predicate_zero R),
587+
cfc_map_spectrum (fun _ ↦ r) 0 (cfc_predicate_zero R)]
588+
rintro - ⟨x, -, rfl⟩
589+
simp
590+
591+
lemma CFC.spectrum_algebraMap_eq [Nontrivial A] (r : R) :
592+
spectrum R (algebraMap R A r) = {r} := by
593+
have hp : p 0 := cfc_predicate_zero R
594+
rw [← cfc_const r 0 hp, cfc_map_spectrum (fun _ => r) 0 hp]
595+
exact Set.Nonempty.image_const (⟨0, spectrum.zero_mem (R := R) not_isUnit_zero⟩) _
596+
597+
lemma CFC.spectrum_zero_eq [Nontrivial A] :
598+
spectrum R (0 : A) = {0} := by
599+
have : (0 : A) = algebraMap R A 0 := Eq.symm (RingHom.map_zero (algebraMap R A))
600+
rw [this, spectrum_algebraMap_eq]
601+
602+
lemma CFC.spectrum_one_eq [Nontrivial A] :
603+
spectrum R (1 : A) = {1} := by
604+
have : (1 : A) = algebraMap R A 1 := Eq.symm (RingHom.map_one (algebraMap R A))
605+
rw [this, spectrum_algebraMap_eq]
606+
607+
@[simp]
608+
lemma cfc_algebraMap (r : R) (f : R → R) : cfc f (algebraMap R A r) = algebraMap R A (f r) := by
609+
have h₁ : ContinuousOn f (spectrum R (algebraMap R A r)) :=
610+
continuousOn_singleton _ _ |>.mono <| CFC.spectrum_algebraMap_subset r
611+
rw [cfc_apply f (algebraMap R A r) (cfc_predicate_algebraMap r),
612+
← AlgHomClass.commutes (cfcHom (p := p) (cfc_predicate_algebraMap r)) (f r)]
613+
congr
614+
ext ⟨x, hx⟩
615+
apply CFC.spectrum_algebraMap_subset r at hx
616+
simp_all
617+
618+
@[simp] lemma cfc_apply_zero {f : R → R} : cfc f (0 : A) = algebraMap R A (f 0) := by
619+
simpa using cfc_algebraMap (A := A) 0 f
620+
621+
@[simp] lemma cfc_apply_one {f : R → R} : cfc f (1 : A) = algebraMap R A (f 1) := by
622+
simpa using cfc_algebraMap (A := A) 1 f
623+
585624
end CFC
586625

587626
end Basic

Mathlib/Topology/ContinuousFunction/NonUnitalFunctionalCalculus.lean

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,10 +434,23 @@ lemma cfcₙ_comp_star (hf : ContinuousOn f (star '' (σₙ R a)) := by cfc_cont
434434
cfcₙ (f <| star ·) a = cfcₙ f (star a) := by
435435
rw [cfcₙ_comp' f star a, cfcₙ_star_id a]
436436

437-
lemma eq_zero_of_quasispectrum_eq_zero (h_spec : σₙ R a ⊆ {0}) (ha : p a := by cfc_tac) :
437+
lemma CFC.eq_zero_of_quasispectrum_eq_zero (h_spec : σₙ R a ⊆ {0}) (ha : p a := by cfc_tac) :
438438
a = 0 := by
439439
simpa [cfcₙ_id R a] using cfcₙ_congr (a := a) (f := id) (g := fun _ : R ↦ 0) fun x ↦ by simp_all
440440

441+
lemma CFC.quasispectrum_zero_eq : σₙ R (0 : A) = {0} := by
442+
refine Set.eq_singleton_iff_unique_mem.mpr ⟨quasispectrum.zero_mem R 0, fun x hx ↦ ?_⟩
443+
rw [← cfcₙ_zero R (0 : A),
444+
cfcₙ_map_quasispectrum _ _ (by cfc_cont_tac) (by cfc_zero_tac) (cfcₙ_predicate_zero R)] at hx
445+
simp_all
446+
447+
@[simp] lemma cfcₙ_apply_zero {f : R → R} : cfcₙ f (0 : A) = 0 := by
448+
by_cases hf0 : f 0 = 0
449+
· nth_rw 2 [← cfcₙ_zero R 0]
450+
apply cfcₙ_congr
451+
simpa [CFC.quasispectrum_zero_eq]
452+
· exact cfcₙ_apply_of_not_map_zero _ hf0
453+
441454
end CFCn
442455

443456
end Main

0 commit comments

Comments
 (0)