Skip to content

Commit b0b8870

Browse files
committed
feat(Analysis/CStarAlgebra): IsIdempotentElem a ↔ spectrum R a ⊆ {0, 1} (#35916)
... also adds a tfae for `IsStarProjection` in C*-algebras and that if `star x * x` is idempotent then so is `x * star x`.
1 parent 1d9dd82 commit b0b8870

4 files changed

Lines changed: 90 additions & 6 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1585,6 +1585,7 @@ public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.NonUnit
15851585
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Note
15861586
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Order
15871587
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Pi
1588+
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Projection
15881589
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Range
15891590
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Restrict
15901591
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Unique
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/-
2+
Copyright (c) 2026 Monica Omar. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Monica Omar
5+
-/
6+
module
7+
8+
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.NonUnital
9+
import Mathlib.FieldTheory.IsAlgClosed.Spectrum
10+
11+
/-! # Continuous functional caculus and projections
12+
13+
This file collects some results related to projections, idempotents,
14+
and the continuous functional calculus. -/
15+
16+
public section
17+
18+
section Field
19+
variable (R : Type*) {A : Type*} {p : A → Prop} [Field R] [StarRing R] [MetricSpace R]
20+
[IsTopologicalSemiring R] [ContinuousStar R] [TopologicalSpace A]
21+
22+
theorem isIdempotentElem_iff_quasispectrum_subset [NonUnitalRing A] [StarRing A] [Module R A]
23+
[IsScalarTower R A A] [SMulCommClass R A A] [NonUnitalContinuousFunctionalCalculus R A p]
24+
(a : A) (ha : p a) : IsIdempotentElem a ↔ quasispectrum R a ⊆ {0, 1} := by
25+
refine ⟨IsIdempotentElem.quasispectrum_subset R, fun h ↦ ?_⟩
26+
rw [IsIdempotentElem, ← cfcₙ_id' R a, ← cfcₙ_mul _ _]
27+
exact cfcₙ_congr fun x hx ↦ by grind
28+
29+
theorem isIdempotentElem_iff_spectrum_subset [Ring A] [StarRing A] [Algebra R A]
30+
[NonUnitalContinuousFunctionalCalculus R A p] (a : A) (ha : p a) :
31+
IsIdempotentElem a ↔ spectrum R a ⊆ {0, 1} := by
32+
grind [quasispectrum_eq_spectrum_union_zero, isIdempotentElem_iff_quasispectrum_subset R]
33+
34+
end Field
35+
36+
theorem isIdempotentElem_star_mul_self_iff_isIdempotentElem_self_mul_star {A : Type*}
37+
[TopologicalSpace A] [NonUnitalRing A] [StarRing A] [Module ℝ A] [IsScalarTower ℝ A A]
38+
[SMulCommClass ℝ A A] [NonUnitalContinuousFunctionalCalculus ℝ A IsSelfAdjoint]
39+
{x : A} : IsIdempotentElem (star x * x) ↔ IsIdempotentElem (x * star x) := by
40+
simp [isIdempotentElem_iff_quasispectrum_subset ℝ, quasispectrum.mul_comm]

Mathlib/Analysis/CStarAlgebra/Projection.lean

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ module
88
public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Order
99
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.Isometric
1010

11+
import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Projection
12+
1113
/-!
1214
1315
# Projections in C⋆-algebras
@@ -31,10 +33,17 @@ public section
3133

3234
open scoped CStarAlgebra
3335

34-
section Normal
36+
section NonUnital
37+
variable {A : Type*} [TopologicalSpace A] [NonUnitalRing A] [StarRing A]
38+
39+
lemma isStarProjection_iff_quasispectrum_subset_and_isSelfAdjoint [Module ℝ A] [IsScalarTower ℝ A A]
40+
[SMulCommClass ℝ A A] [NonUnitalContinuousFunctionalCalculus ℝ A IsSelfAdjoint] {p : A} :
41+
IsStarProjection p ↔ quasispectrum ℝ p ⊆ {0, 1} ∧ IsSelfAdjoint p :=
42+
(isStarProjection_iff p).eq ▸
43+
and_congr_left_iff.mpr fun h ↦ isIdempotentElem_iff_quasispectrum_subset ℝ p h
3544

36-
variable {A : Type*} [TopologicalSpace A]
37-
[NonUnitalRing A] [StarRing A] [Module ℂ A] [IsScalarTower ℂ A A] [SMulCommClass ℂ A A]
45+
section Normal
46+
variable [Module ℂ A] [IsScalarTower ℂ A A] [SMulCommClass ℂ A A]
3847
[NonUnitalContinuousFunctionalCalculus ℂ A IsStarNormal]
3948

4049
/-- An idempotent element in a non-unital C⋆-algebra is self-adjoint iff it is normal. -/
@@ -43,15 +52,38 @@ theorem IsIdempotentElem.isSelfAdjoint_iff_isStarNormal {p : A} (hp : IsIdempote
4352
simp only [isSelfAdjoint_iff_isStarNormal_and_quasispectrumRestricts,
4453
QuasispectrumRestricts.real_iff, and_iff_left_iff_imp]
4554
intro h x hx
46-
rcases hp.quasispectrum_subset hx with (hx | hx) <;> simp [Set.mem_singleton_iff.mp hx]
55+
rcases hp.quasispectrum_subset _ hx with (hx | hx) <;> simp [Set.mem_singleton_iff.mp hx]
4756

4857
/-- An element in a non-unital C⋆-algebra is a star projection
4958
if and only if it is idempotent and normal. -/
5059
theorem isStarProjection_iff_isIdempotentElem_and_isStarNormal {p : A} :
5160
IsStarProjection p ↔ IsIdempotentElem p ∧ IsStarNormal p :=
5261
(isStarProjection_iff p).eq ▸ and_congr_right_iff.eq ▸ fun h => h.isSelfAdjoint_iff_isStarNormal
5362

63+
theorem isStarProjection_iff_quasispectrum_subset_and_isStarNormal {p : A} :
64+
IsStarProjection p ↔ quasispectrum ℂ p ⊆ {0, 1} ∧ IsStarNormal p :=
65+
isStarProjection_iff_isIdempotentElem_and_isStarNormal (p := p).eq ▸
66+
and_congr_left_iff.mpr fun h ↦ isIdempotentElem_iff_quasispectrum_subset ℂ p h
67+
5468
end Normal
69+
end NonUnital
70+
71+
section Unital
72+
variable {A : Type*} [TopologicalSpace A] [Ring A] [StarRing A]
73+
74+
lemma isStarProjection_iff_spectrum_subset_and_isSelfAdjoint [Algebra ℝ A]
75+
[NonUnitalContinuousFunctionalCalculus ℝ A IsSelfAdjoint] {p : A} :
76+
IsStarProjection p ↔ spectrum ℝ p ⊆ {0, 1} ∧ IsSelfAdjoint p :=
77+
(isStarProjection_iff p).eq ▸
78+
and_congr_left_iff.mpr fun h ↦ isIdempotentElem_iff_spectrum_subset ℝ p h
79+
80+
theorem isStarProjection_iff_spectrum_subset_and_isStarNormal [Algebra ℂ A]
81+
[NonUnitalContinuousFunctionalCalculus ℂ A IsStarNormal] {p : A} :
82+
IsStarProjection p ↔ spectrum ℂ p ⊆ {0, 1} ∧ IsStarNormal p :=
83+
isStarProjection_iff_isIdempotentElem_and_isStarNormal (p := p).eq ▸
84+
and_congr_left_iff.mpr fun h ↦ isIdempotentElem_iff_spectrum_subset ℂ p h
85+
86+
end Unital
5587

5688
namespace IsStarProjection
5789

Mathlib/FieldTheory/IsAlgClosed/Spectrum.lean

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,20 @@ theorem IsIdempotentElem.spectrum_subset (𝕜 : Type*) {A : Type*} [Field 𝕜]
167167
refine fun a ha => eq_zero_or_one_of_sq_eq_self ?_
168168
simpa [pow_two p, hp.eq, sub_eq_zero] using ha
169169

170+
lemma IsIdempotentElem.finite_spectrum (𝕜 : Type*) {A : Type*} [Field 𝕜] [Ring A] [Algebra 𝕜 A]
171+
{p : A} (hp : IsIdempotentElem p) : (spectrum 𝕜 p).Finite :=
172+
have : ({0, 1} : Set 𝕜).encard = (2 : ℕ) := Set.encard_pair (by simp)
173+
Set.finite_of_encard_le_coe (this ▸ Set.encard_le_encard (hp.spectrum_subset 𝕜))
174+
170175
set_option backward.isDefEq.respectTransparency false in
171176
open Unitization in
172-
theorem IsIdempotentElem.quasispectrum_subset {𝕜 A : Type*} [Field 𝕜] [NonUnitalRing A] [Module 𝕜 A]
173-
[IsScalarTower 𝕜 A A] [SMulCommClass 𝕜 A A] {p : A} (hp : IsIdempotentElem p) :
177+
theorem IsIdempotentElem.quasispectrum_subset (𝕜 : Type*) {A : Type*} [Field 𝕜] [NonUnitalRing A]
178+
[Module 𝕜 A] [IsScalarTower 𝕜 A A] [SMulCommClass 𝕜 A A] {p : A} (hp : IsIdempotentElem p) :
174179
quasispectrum 𝕜 p ⊆ {0, 1} :=
175180
quasispectrum_eq_spectrum_inr' 𝕜 𝕜 p ▸ (hp.inr _ |>.spectrum_subset _)
181+
182+
theorem IsIdempotentElem.finite_quasispectrum (𝕜 : Type*) {A : Type*} [Field 𝕜] [NonUnitalRing A]
183+
[Module 𝕜 A] [IsScalarTower 𝕜 A A] [SMulCommClass 𝕜 A A] {p : A} (hp : IsIdempotentElem p) :
184+
(quasispectrum 𝕜 p).Finite :=
185+
have : ({0, 1} : Set 𝕜).encard = (2 : ℕ) := Set.encard_pair (by simp)
186+
Set.finite_of_encard_le_coe (this ▸ Set.encard_le_encard (hp.quasispectrum_subset 𝕜))

0 commit comments

Comments
 (0)