Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Chapter AbelianDirectSum

Definition
ChapterAbelianDirectSum

by leonardopedro · Oct 17, 2026 · Mathlib 0df444a (Lean v4.33.1)

definitionsformalizationtimepiece

Formal definitions for the timepiece Lean 4 formalization (source chapter BookProof/ChapterAbelianDirectSum.lean): generated def bundle for ChapterAbelianDirectSum. See BookProof/ChapterAbelianDirectSum.lean for full context.

Definition code
import Definitions.Def_ChapterAbelianCyclicModel
import Definitions.Def_ChapterAbelianGelfandModel
import Mathlib
import Theorems.Thm_BookProof_ChapterAbelianCyclicModel_isProbabilityMeasure_repMeasure
import Theorems.Thm_BookProof_ChapterAbelianCyclicModel_mulRep_toLp


/-!
# Abelian algebras without a cyclic vector: the direct-sum model (plan GAP-2)

`ChapterAbelianCyclicModel` models an **arbitrary** abelian algebra — a unital
`*`-representation `π : C(X, ℂ) →⋆ₐ[ℂ] (H →L[ℂ] H)` of the continuous functions on a
compact Hausdorff space — **with a cyclic unit vector**, as multiplication operators
on `L²(μ)`.  This module removes the cyclic-vector hypothesis, exactly as
`ChapterCyclicDecomposition` / `ChapterCyclicDirectSum` / `ChapterSpectralDirectSum`
do for the algebra generated by a single normal operator, but now for a whole
abelian algebra at once.

* `repCyclicSubspace` — the closed subspace generated by `{π(f)ξ}`;
  `RepInvariant`, `repInvariant_repCyclicSubspace`, `repInvariant_orthogonal`
  (the `*`-closedness of the algebra makes the orthogonal complement of an invariant
  subspace invariant), `repCyclicSubspace_le_orthogonal`;
* `exists_rep_cyclic_decomposition` — by Zorn's lemma a family of unit vectors whose
  cyclic subspaces are pairwise orthogonal and jointly dense;
* `orthogonalFamily_repCyclicSubspace`, `isHilbertSum_repCyclicSubspace`,
  `exists_isHilbertSum_repCyclicSubspace` — the space *is* the Hilbert sum of those
  subspaces; `starProjection_commutes_rep` — the projections onto the summands lie in
  the commutant of the algebra;
* `repCyclicUnitary`, `repEmbedding`, `range_repEmbedding`,
  `repEmbedding_intertwines` — the model of a summand, built inside the ambient
  space: an isometric embedding of `L²(μ_ξ)` with range the cyclic subspace of `ξ`,
  carrying multiplication by every continuous symbol `g` into `π(g)`;
* HEADLINE `abelian_multiplication_model_general` — **every** unital
  `*`-representation of `C(X, ℂ)` on a complex Hilbert space is a direct sum of
  multiplication representations: there are Borel probability measures `μₓ` on `X`
  and isometric embeddings `Vₓ : L²(μₓ) → H` exhibiting `H` as their Hilbert sum,
  with `π(g)` acting on each summand as multiplication by `g`.  No cyclic vector, no
  generator and no separability are assumed;
* `abelian_multiplication_model_separable` — on a separable space the family is
  countable;
* `abelian_algebra_multiplication_model_general` — the Gelfand form, for a
  representation of an abstract commutative unital C\*-algebra.

Everything is `sorry`-free and `axiom`-free.
-/

noncomputable section

open MeasureTheory Complex WeakDual

namespace BookProof.ChapterAbelianDirectSum

open BookProof.ChapterAbelianGelfandModel BookProof.ChapterAbelianCyclicModel

variable {X : Type*} [TopologicalSpace X] [CompactSpace X] [T2Space X]
  [MeasurableSpace X] [BorelSpace X]
variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H]
variable (pi : C(X, ℂ) →⋆ₐ[ℂ] (H →L[ℂ] H))

/-! ## 1. Cyclic subspaces of a representation -/

/-- **The cyclic subspace generated by a vector**: the closed linear span of the
vectors `π(f)ξ`, `f` continuous on `X`. -/
def repCyclicSubspace (xi : H) : Submodule ℂ H :=
  (Submodule.span ℂ (Set.range fun g : C(X, ℂ) => pi g xi)).topologicalClosure

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem isClosed_repCyclicSubspace (xi : H) :
    IsClosed (repCyclicSubspace pi xi : Set H) :=
  Submodule.isClosed_topologicalClosure _

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem rep_apply_mem_repCyclicSubspace (xi : H) (g : C(X, ℂ)) :
    pi g xi ∈ repCyclicSubspace pi xi :=
  Submodule.le_topologicalClosure _ (Submodule.subset_span ⟨g, rfl⟩)

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem self_mem_repCyclicSubspace (xi : H) : xi ∈ repCyclicSubspace pi xi := by
  have h := rep_apply_mem_repCyclicSubspace pi xi 1
  rwa [map_one] at h

/-! ## 2. Invariance -/

/-- A subspace invariant under the whole represented algebra. -/
def RepInvariant (M : Submodule ℂ H) : Prop :=
  ∀ (g : C(X, ℂ)) (v : H), v ∈ M → pi g v ∈ M

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem repInvariant_repCyclicSubspace (xi : H) :
    RepInvariant pi (repCyclicSubspace pi xi) := by
  intro g v hv
  have hle : Submodule.span ℂ (Set.range fun f : C(X, ℂ) => pi f xi)
      ≤ (repCyclicSubspace pi xi).comap (pi g).toLinearMap := by
    refine Submodule.span_le.mpr ?_
    rintro _ ⟨f, rfl⟩
    have hgf : pi g (pi f xi) = pi (g * f) xi := by
      rw [map_mul]
      rfl
    simp only [SetLike.mem_coe, Submodule.mem_comap, ContinuousLinearMap.coe_coe, hgf]
    exact rep_apply_mem_repCyclicSubspace pi xi (g * f)
  have hclosed : IsClosed
      ((repCyclicSubspace pi xi).comap (pi g).toLinearMap : Set H) :=
    (isClosed_repCyclicSubspace pi xi).preimage (pi g).continuous
  exact Submodule.topologicalClosure_minimal _ hle hclosed hv

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
/-- **The orthogonal complement of an invariant subspace is invariant** — this is
where `*`-closedness of the represented algebra enters. -/
theorem repInvariant_orthogonal {M : Submodule ℂ H} (hM : RepInvariant pi M) :
    RepInvariant pi Mᗮ := by
  intro g v hv
  rw [Submodule.mem_orthogonal]
  intro u hu
  have hadj : (ContinuousLinearMap.adjoint (pi g)) u = pi (star g) u := by
    have h : star (pi g) = pi (star g) := (map_star pi g).symm
    rw [← ContinuousLinearMap.star_eq_adjoint, h]
  have h0 : (inner ℂ (pi (star g) u) v : ℂ) = 0 :=
    (Submodule.mem_orthogonal M v).1 hv _ (hM (star g) u hu)
  rw [← ContinuousLinearMap.adjoint_inner_left, hadj, h0]

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
/-- The cyclic subspace of a vector orthogonal to an invariant subspace is again
orthogonal to it. -/
theorem repCyclicSubspace_le_orthogonal {M : Submodule ℂ H} (hM : RepInvariant pi M) {v : H}
    (hv : v ∈ Mᗮ) : repCyclicSubspace pi v ≤ Mᗮ := by
  refine Submodule.topologicalClosure_minimal _ (Submodule.span_le.mpr ?_)
    (Submodule.isClosed_orthogonal M)
  rintro _ ⟨g, rfl⟩
  exact repInvariant_orthogonal pi hM g v hv

/-! ## 3. The decomposition -/

/-- A set of unit vectors with pairwise orthogonal cyclic subspaces. -/
def OrthogonalRepCyclicFamily (S : Set H) : Prop :=
  (∀ x ∈ S, ‖x‖ = 1) ∧
    ∀ x ∈ S, ∀ y ∈ S, x ≠ y → repCyclicSubspace pi x ≤ (repCyclicSubspace pi y)ᗮ

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem repInvariant_iSup_repCyclicSubspace (S : Set H) :
    RepInvariant pi (⨆ x ∈ S, repCyclicSubspace pi x).topologicalClosure := by
  intro g v hv
  have hle : (⨆ x ∈ S, repCyclicSubspace pi x)
      ≤ ((⨆ x ∈ S, repCyclicSubspace pi x).topologicalClosure).comap (pi g).toLinearMap := by
    refine iSup_le fun x => iSup_le fun hx => ?_
    intro w hw
    simp only [Submodule.mem_comap, ContinuousLinearMap.coe_coe]
    refine Submodule.le_topologicalClosure _ ?_
    have : pi g w ∈ repCyclicSubspace pi x := repInvariant_repCyclicSubspace pi x g w hw
    exact le_iSup₂ (f := fun x (_ : x ∈ S) => repCyclicSubspace pi x) x hx this
  have hclosed : IsClosed
      (((⨆ x ∈ S, repCyclicSubspace pi x).topologicalClosure).comap
        (pi g).toLinearMap : Set H) :=
    (Submodule.isClosed_topologicalClosure _).preimage (pi g).continuous
  exact Submodule.topologicalClosure_minimal _ hle hclosed hv

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
/-- **Cyclic decomposition for a representation.**  There is a family of unit vectors
whose cyclic subspaces are pairwise orthogonal and whose span is dense: the space is
the orthogonal direct sum of subspaces cyclic for the whole algebra. -/
theorem exists_rep_cyclic_decomposition :
    ∃ S : Set H, OrthogonalRepCyclicFamily pi S ∧
      (⨆ x ∈ S, repCyclicSubspace pi x).topologicalClosure = ⊤ := by
  obtain ⟨S, hS⟩ :=
    zorn_subset {S : Set H | OrthogonalRepCyclicFamily pi S} (fun c hc hchain => by
      refine ⟨⋃₀ c, ⟨?_, ?_⟩, fun s hs => Set.subset_sUnion_of_mem hs⟩
      · rintro x ⟨s, hs, hx⟩
        exact ((hc hs).1) x hx
      · rintro x ⟨s, hs, hx⟩ y ⟨t, ht, hy⟩ hxy
        rcases hchain.total hs ht with h | h
        · exact ((hc ht).2) x (h hx) y hy hxy
        · exact ((hc hs).2) x hx y (h hy) hxy)
  refine ⟨S, hS.1, ?_⟩
  set N : Submodule ℂ H := ⨆ x ∈ S, repCyclicSubspace pi x with hN
  haveI : CompleteSpace N.topologicalClosure :=
    (Submodule.isClosed_topologicalClosure N).completeSpace_coe
  by_contra hne
  have hbot : N.topologicalClosureᗮ ≠ ⊥ := by
    intro h
    exact hne (Submodule.orthogonal_eq_bot_iff.1 h)
  obtain ⟨v, hv, hv0⟩ := Submodule.exists_mem_ne_zero_of_ne_bot hbot
  set u : H := ‖v‖⁻¹ • v with hu
  have hnv : ‖v‖ ≠ 0 := norm_ne_zero_iff.2 hv0
  have hunorm : ‖u‖ = 1 := by
    rw [hu, norm_smul]
    simp [hnv]
  have humem : u ∈ N.topologicalClosureᗮ := Submodule.smul_mem _ _ hv
  have hcyc : repCyclicSubspace pi u ≤ N.topologicalClosureᗮ :=
    repCyclicSubspace_le_orthogonal pi (repInvariant_iSup_repCyclicSubspace pi S) humem
  have hle : ∀ x ∈ S, repCyclicSubspace pi x ≤ N.topologicalClosure := fun x hx =>
    le_trans (le_iSup₂ (f := fun x (_ : x ∈ S) => repCyclicSubspace pi x) x hx)
      (Submodule.le_topologicalClosure N)
  have hnew : (insert u S) ∈ {S : Set H | OrthogonalRepCyclicFamily pi S} := by
    constructor
    · rintro x (rfl | hx)
      · exact hunorm
      · exact hS.1.1 x hx
    · have key : ∀ x ∈ S, repCyclicSubspace pi u ≤ (repCyclicSubspace pi x)ᗮ := fun x hx =>
        le_trans hcyc (Submodule.orthogonal_le (hle x hx))
      have key' : ∀ x ∈ S, repCyclicSubspace pi x ≤ (repCyclicSubspace pi u)ᗮ := fun x hx =>
        le_trans (le_trans (hle x hx) (Submodule.le_orthogonal_orthogonal _))
          (Submodule.orthogonal_le hcyc)
      rintro x (rfl | hx) y (rfl | hy) hxy
      · exact absurd rfl hxy
      · exact key y hy
      · exact key' x hx
      · exact hS.1.2 x hx y hy hxy
  have hnotmem : u ∉ S := by
    intro hmem
    have h1 : u ∈ N.topologicalClosure := hle u hmem (self_mem_repCyclicSubspace pi u)
    have : u = 0 := inner_self_eq_zero.1 ((Submodule.mem_orthogonal _ _).1 humem u h1)
    rw [this] at hunorm
    simp at hunorm
  exact hnotmem (hS.2 hnew (Set.subset_insert u S) (Set.mem_insert u S))

/-! ## 4. The Hilbert sum -/

instance instCompleteSpaceRepCyclicSubspace (xi : H) :
    CompleteSpace (repCyclicSubspace pi xi) :=
  (isClosed_repCyclicSubspace pi xi).completeSpace_coe

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem orthogonalFamily_repCyclicSubspace {S : Set H} (hS : OrthogonalRepCyclicFamily pi S) :
    OrthogonalFamily ℂ (fun x : S => (repCyclicSubspace pi (x : H)))
      (fun x : S => (repCyclicSubspace pi (x : H)).subtypeₗᵢ) := by
  refine OrthogonalFamily.of_pairwise ?_
  intro x y hxy
  refine Submodule.isOrtho_iff_le.2 ?_
  exact hS.2 (x : H) x.2 (y : H) y.2 (Subtype.coe_injective.ne hxy)

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
/-- **`H` is the Hilbert sum of the cyclic subspaces** of a total orthogonal cyclic
family. -/
theorem isHilbertSum_repCyclicSubspace {S : Set H} (hS : OrthogonalRepCyclicFamily pi S)
    (htop : (⨆ x ∈ S, repCyclicSubspace pi x).topologicalClosure = ⊤) :
    IsHilbertSum ℂ (fun x : S => (repCyclicSubspace pi (x : H)))
      (fun x : S => (repCyclicSubspace pi (x : H)).subtypeₗᵢ) := by
  refine IsHilbertSum.mkInternal _ (orthogonalFamily_repCyclicSubspace pi hS) ?_
  have hsup : (⨆ x : S, repCyclicSubspace pi (x : H)) = ⨆ x ∈ S, repCyclicSubspace pi x := by
    rw [iSup_subtype]
  rw [hsup, htop]

/-- The unitary identification of `H` with the `ℓ²`-sum of the cyclic subspaces. -/
def repCyclicHilbertEquiv {S : Set H} (hS : OrthogonalRepCyclicFamily pi S)
    (htop : (⨆ x ∈ S, repCyclicSubspace pi x).topologicalClosure = ⊤) :
    H ≃ₗᵢ[ℂ] lp (fun x : S => (repCyclicSubspace pi (x : H))) 2 :=
  (isHilbertSum_repCyclicSubspace pi hS htop).linearIsometryEquiv

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
/-- For every representation the space is the Hilbert sum of cyclic subspaces. -/
theorem exists_isHilbertSum_repCyclicSubspace :
    ∃ S : Set H, OrthogonalRepCyclicFamily pi S ∧
      IsHilbertSum ℂ (fun x : S => (repCyclicSubspace pi (x : H)))
        (fun x : S => (repCyclicSubspace pi (x : H)).subtypeₗᵢ) := by
  obtain ⟨S, hS, htop⟩ := exists_rep_cyclic_decomposition pi
  exact ⟨S, hS, isHilbertSum_repCyclicSubspace pi hS htop⟩

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
/-- **The orthogonal projection onto an invariant subspace lies in the commutant** of
the represented algebra. -/
theorem starProjection_commutes_rep {M : Submodule ℂ H} [M.HasOrthogonalProjection]
    (hM : RepInvariant pi M) (g : C(X, ℂ)) (v : H) :
    M.starProjection (pi g v) = pi g (M.starProjection v) := by
  refine Submodule.eq_starProjection_of_mem_orthogonal'
    (hM g _ (M.starProjection_apply_mem v))
    (repInvariant_orthogonal pi hM g _ (M.sub_starProjection_mem_orthogonal v)) ?_
  rw [← map_add]
  congr 1
  abel

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem commute_starProjection_rep {M : Submodule ℂ H} [M.HasOrthogonalProjection]
    (hM : RepInvariant pi M) (g : C(X, ℂ)) :
    Commute M.starProjection (pi g) := by
  ext v
  simpa [ContinuousLinearMap.mul_apply] using starProjection_commutes_rep pi hM g v

/-! ## 5. The model of a summand, built inside the ambient space -/

variable (xi : H)

omit [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem repCyclicSubspace_eq_closure_range :
    (repCyclicSubspace pi xi : Set H) = closure (Set.range (repVec pi xi)) := by
  have hrange : (Set.range fun g : C(X, ℂ) => pi g xi) = Set.range (repVec pi xi) := rfl
  have hspan : Submodule.span ℂ (Set.range fun g : C(X, ℂ) => pi g xi)
      = LinearMap.range (repVec pi xi) := by
    rw [hrange, ← LinearMap.coe_range, Submodule.span_eq]
  rw [repCyclicSubspace, hspan]
  exact Submodule.topologicalClosure_coe _

/-- The generating map `f ↦ π(f)ξ`, seen as a map into the cyclic subspace of `ξ`. -/
def repVecTo : C(X, ℂ) →ₗ[ℂ] repCyclicSubspace pi xi :=
  LinearMap.codRestrict _ (repVec pi xi) (rep_apply_mem_repCyclicSubspace pi xi)

omit [T2Space X] [MeasurableSpace X] [BorelSpace X] in
@[simp] theorem repVecTo_apply (f : C(X, ℂ)) : (repVecTo pi xi f : H) = pi f xi := rfl

omit [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem denseRange_repVecTo : DenseRange (repVecTo pi xi) := by
  change Dense (Set.range (repVecTo pi xi))
  rw [Topology.IsInducing.subtypeVal.dense_iff]
  intro m
  have hm : (m : H) ∈ closure (Set.range (repVec pi xi)) := by
    rw [← repCyclicSubspace_eq_closure_range]
    exact m.2
  refine closure_mono ?_ hm
  rintro _ ⟨f, rfl⟩
  exact ⟨repVecTo pi xi f, ⟨f, rfl⟩, rfl⟩

/-- **The model of a cyclic summand**: since `‖π(f)ξ‖ = ‖f‖_{L²(μ_ξ)}` with no
cyclicity hypothesis, `f ↦ π(f)ξ` extends to a unitary from `L²(μ_ξ)` onto the cyclic
subspace of `ξ`. -/
def repCyclicUnitary : Lp ℂ 2 (repMeasure pi xi) ≃ₗᵢ[ℂ] repCyclicSubspace pi xi :=
  (LinearEquiv.refl ℂ C(X, ℂ)).extendOfIsometry
    (ContinuousMap.toLp 2 (repMeasure pi xi) ℂ).toLinearMap
    (repVecTo pi xi)
    (ContinuousMap.toLp_denseRange ℂ _ (μ := repMeasure pi xi) (by simp))
    (denseRange_repVecTo pi xi)
    (fun f => by simpa using (norm_rep_apply pi xi f))

@[simp] theorem repCyclicUnitary_toLp (f : C(X, ℂ)) :
    repCyclicUnitary pi xi (ContinuousMap.toLp 2 (repMeasure pi xi) ℂ f) = repVecTo pi xi f :=
  LinearEquiv.extendOfIsometry_eq _ _ _ _ _ _ f

/-- The model read inside the ambient space: an isometric embedding of `L²(μ_ξ)` into
`H` with range the cyclic subspace of `ξ`. -/
def repEmbedding : Lp ℂ 2 (repMeasure pi xi) →ₗᵢ[ℂ] H :=
  (repCyclicSubspace pi xi).subtypeₗᵢ.comp (repCyclicUnitary pi xi).toLinearIsometry

@[simp] theorem repEmbedding_apply (u : Lp ℂ 2 (repMeasure pi xi)) :
    repEmbedding pi xi u = (repCyclicUnitary pi xi u : H) := rfl

@[simp] theorem repEmbedding_toLp (f : C(X, ℂ)) :
    repEmbedding pi xi (ContinuousMap.toLp 2 (repMeasure pi xi) ℂ f) = pi f xi := by
  simp [repEmbedding]

theorem mem_repCyclicSubspace_repEmbedding (u : Lp ℂ 2 (repMeasure pi xi)) :
    repEmbedding pi xi u ∈ repCyclicSubspace pi xi := (repCyclicUnitary pi xi u).2

theorem range_repEmbedding :
    LinearMap.range (repEmbedding pi xi).toLinearMap = repCyclicSubspace pi xi := by
  apply le_antisymm
  · rintro _ ⟨u, rfl⟩
    exact mem_repCyclicSubspace_repEmbedding pi xi u
  · intro v hv
    refine ⟨(repCyclicUnitary pi xi).symm ⟨v, hv⟩, ?_⟩
    change (repCyclicUnitary pi xi ((repCyclicUnitary pi xi).symm ⟨v, hv⟩) : H) = v
    rw [LinearIsometryEquiv.apply_symm_apply]

/-- **The embedding intertwines multiplication by a continuous symbol with the
representation**: `V M_g = π(g) V`. -/
theorem repEmbedding_intertwines (g : C(X, ℂ)) (u : Lp ℂ 2 (repMeasure pi xi)) :
    repEmbedding pi xi (mulRep (repMeasure pi xi) g u) = pi g (repEmbedding pi xi u) := by
  have hdense : DenseRange
      ((ContinuousMap.toLp 2 (repMeasure pi xi) ℂ).toLinearMap :
        C(X, ℂ) → Lp ℂ 2 (repMeasure pi xi)) :=
    ContinuousMap.toLp_denseRange ℂ _ (μ := repMeasure pi xi) (by simp)
  have hcont₁ : Continuous fun v : Lp ℂ 2 (repMeasure pi xi) =>
      repEmbedding pi xi (mulRep (repMeasure pi xi) g v) :=
    (repEmbedding pi xi).continuous.comp (mulRep (repMeasure pi xi) g).continuous
  have hcont₂ : Continuous fun v : Lp ℂ 2 (repMeasure pi xi) =>
      pi g (repEmbedding pi xi v) :=
    (pi g).continuous.comp (repEmbedding pi xi).continuous
  have hfun : (fun v : Lp ℂ 2 (repMeasure pi xi) =>
        repEmbedding pi xi (mulRep (repMeasure pi xi) g v))
      = fun v : Lp ℂ 2 (repMeasure pi xi) => pi g (repEmbedding pi xi v) := by
    refine hdense.equalizer hcont₁ hcont₂ (funext fun f => ?_)
    simp only [Function.comp_apply, ContinuousLinearMap.coe_coe]
    rw [mulRep_toLp pi xi g f, repEmbedding_toLp, repEmbedding_toLp, map_mul]
    rfl
  exact congrFun hfun u

/-! ## 6. Gluing the summand models -/

variable {pi}

omit [CompleteSpace H] in
theorem inner_eq_zero_of_le_orthogonal {M N : Submodule ℂ H} (h : M ≤ Nᗮ) {a b : H}
    (ha : a ∈ M) (hb : b ∈ N) : inner ℂ a b = 0 := by
  have h0 := (Submodule.mem_orthogonal N a).1 (h ha) b hb
  simpa [inner_eq_zero_symm] using h0

theorem orthogonalFamily_repEmbedding {S : Set H} (hS : OrthogonalRepCyclicFamily pi S) :
    OrthogonalFamily ℂ (fun x : S => Lp ℂ 2 (repMeasure pi (x : H)))
      (fun x : S => repEmbedding pi (x : H)) := by
  intro x y hxy u v
  have hle := hS.2 (x : H) x.2 (y : H) y.2 (Subtype.coe_injective.ne hxy)
  exact inner_eq_zero_of_le_orthogonal hle
    (mem_repCyclicSubspace_repEmbedding pi (x : H) u)
    (mem_repCyclicSubspace_repEmbedding pi (y : H) v)

variable (pi)

/-- **HEADLINE (the general multiplication model of an abelian algebra).**  For every
unital `*`-representation `π` of `C(X, ℂ)` on a complex Hilbert space there are Borel
probability measures `μₓ` on `X` and isometric embeddings `Vₓ : L²(μₓ) → H` which
exhibit `H` as the Hilbert sum of the spaces `L²(μₓ)` and carry multiplication by
every continuous symbol `g` into `π(g)`.

Every abelian algebra of operators is a direct sum of multiplication algebras: no
cyclic vector, no generator and no separability are assumed. -/
theorem abelian_multiplication_model_general :
    ∃ (S : Set H) (mu : S → Measure X) (V : ∀ x : S, Lp ℂ 2 (mu x) →ₗᵢ[ℂ] H),
      (∀ x : S, IsProbabilityMeasure (mu x)) ∧
      IsHilbertSum ℂ (fun x : S => Lp ℂ 2 (mu x)) V ∧
      (∀ (x : S) (g : C(X, ℂ)) (u : Lp ℂ 2 (mu x)),
        V x (mulRep (mu x) g u) = pi g (V x u)) := by
  obtain ⟨S, hS, htop⟩ := exists_rep_cyclic_decomposition pi
  refine ⟨S, fun x => repMeasure pi (x : H), fun x => repEmbedding pi (x : H),
    fun x => isProbabilityMeasure_repMeasure pi (x : H) (hS.1 (x : H) x.2), ?_,
    fun x g u => repEmbedding_intertwines pi (x : H) g u⟩
  refine IsHilbertSum.mk (orthogonalFamily_repEmbedding hS) ?_
  have hrange : (⨆ x : S, LinearMap.range (repEmbedding pi (x : H)).toLinearMap)
      = ⨆ x ∈ S, repCyclicSubspace pi x := by
    rw [iSup_subtype]
    exact iSup_congr fun x => iSup_congr fun _ => range_repEmbedding pi x
  rw [hrange, htop]

/-! ## 7. The separable case -/

variable {pi}

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem inner_eq_zero_of_orthogonalRepCyclicFamily {S : Set H}
    (hS : OrthogonalRepCyclicFamily pi S) {x y : H} (hx : x ∈ S) (hy : y ∈ S) (hxy : x ≠ y) :
    inner ℂ x y = (0 : ℂ) :=
  inner_eq_zero_of_le_orthogonal (hS.2 x hx y hy hxy) (self_mem_repCyclicSubspace pi x)
    (self_mem_repCyclicSubspace pi y)

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
theorem one_lt_dist_of_orthogonalRepCyclicFamily {S : Set H}
    (hS : OrthogonalRepCyclicFamily pi S) {x y : H} (hx : x ∈ S) (hy : y ∈ S) (hxy : x ≠ y) :
    1 < dist x y := by
  have h := inner_eq_zero_of_orthogonalRepCyclicFamily hS hx hy hxy
  have hxn : ‖x‖ = 1 := hS.1 x hx
  have hyn : ‖y‖ = 1 := hS.1 y hy
  have hneg : inner ℂ x (-y) = (0 : ℂ) := by simp [h]
  have h2 : ‖x + -y‖ * ‖x + -y‖ = 2 := by
    rw [norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero x (-y) hneg, hxn, norm_neg, hyn]
    norm_num
  have hd : dist x y = ‖x + -y‖ := by rw [dist_eq_norm, sub_eq_add_neg]
  nlinarith [norm_nonneg (x + -y), hd, h2]

omit [CompactSpace X] [T2Space X] [MeasurableSpace X] [BorelSpace X] in
/-- On a separable space such a family is countable. -/
theorem countable_orthogonalRepCyclicFamily [TopologicalSpace.SeparableSpace H] {S : Set H}
    (hS : OrthogonalRepCyclicFamily pi S) : S.Countable := by
  refine Set.PairwiseDisjoint.countable_of_isOpen (s := fun x : H => Metric.ball x (1 / 2)) ?_
    (fun x _ => Metric.isOpen_ball) (fun x _ => ⟨x, Metric.mem_ball_self (by norm_num)⟩)
  intro x hx y hy hxy
  refine Metric.ball_disjoint_ball ?_
  have := one_lt_dist_of_orthogonalRepCyclicFamily hS hx hy hxy
  linarith

variable (pi)

/-- **HEADLINE (the separable case).**  On a separable complex Hilbert space every
abelian algebra, presented as a unital `*`-representation of `C(X, ℂ)`, is a
*countable* direct sum of multiplication algebras. -/
theorem abelian_multiplication_model_separable [TopologicalSpace.SeparableSpace H] :
    ∃ (S : Set H) (mu : S → Measure X) (V : ∀ x : S, Lp ℂ 2 (mu x) →ₗᵢ[ℂ] H),
      S.Countable ∧
      (∀ x : S, IsProbabilityMeasure (mu x)) ∧
      IsHilbertSum ℂ (fun x : S => Lp ℂ 2 (mu x)) V ∧
      (∀ (x : S) (g : C(X, ℂ)) (u : Lp ℂ 2 (mu x)),
        V x (mulRep (mu x) g u) = pi g (V x u)) := by
  obtain ⟨S, hS, htop⟩ := exists_rep_cyclic_decomposition pi
  refine ⟨S, fun x => repMeasure pi (x : H), fun x => repEmbedding pi (x : H),
    countable_orthogonalRepCyclicFamily hS,
    fun x => isProbabilityMeasure_repMeasure pi (x : H) (hS.1 (x : H) x.2), ?_,
    fun x g u => repEmbedding_intertwines pi (x : H) g u⟩
  refine IsHilbertSum.mk (orthogonalFamily_repEmbedding hS) ?_
  have hrange : (⨆ x : S, LinearMap.range (repEmbedding pi (x : H)).toLinearMap)
      = ⨆ x ∈ S, repCyclicSubspace pi x := by
    rw [iSup_subtype]
    exact iSup_congr fun x => iSup_congr fun _ => range_repEmbedding pi x
  rw [hrange, htop]

end BookProof.ChapterAbelianDirectSum

/-! ## 8. The Gelfand form -/

namespace BookProof.ChapterAbelianDirectSum

open BookProof.ChapterAbelianGelfandModel BookProof.ChapterAbelianCyclicModel

variable {A : Type*} [CommCStarAlgebra A]
variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H]



end BookProof.ChapterAbelianDirectSum

end
Source
https://github.com/leonardopedro/timepiece/blob/61595bc/BookProof/ChapterAbelianDirectSum.lean

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me