Imports
/- Copyright (c) 2026 Gregory J. Loges. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Adam Bornemann, Gregory J. Loges -/ module public import Mathlib.Analysis.Distribution.TemperedDistribution public import Mathlib.Analysis.InnerProductSpace.Dual public import Physlib.SpaceAndTime.Space.Module

Hilbert spaces for quantum mechanics on Space d

i. Overview

The Hilbert spaces appropriate for doing quantum mechanics on Space d are the $L^2$-spaces SpaceDHilbertSpace d μ := Lp ℂ 2 μ, where μ is some measure on Space d. Elements of SpaceDHilbertSpace d μ are equivalence classes of functions Space d → ℂ which are square-integrable with respect to μ, i.e. ∫ x, ‖f x‖ ^ 2 ∂μ is finite, and where f and g are in the same equivalence class if they are μ-a.e. equal.

The ability of a function to be interpreted as an element of SpaceDHilbertSpace d μ is captured by the property MemHS. If one has hf : MemHS f μ for a function f : Space d → ℂ this means that f is μ-a.e. strongly measurable and square-integrable; mk hf constructs the corresponding equivalence class of f in SpaceDHilbertSpace d μ.

Given SpaceDHilbertSpace d μ and Ω : Set (Space d), the Hilbert space SpaceDHilbertSpaceOn Ω μ ≔ SpaceDHilbertSpace d (μ.restrict Ω) may be interpreted as the sub-Hilbert space consisting of those vectors with domain contained in Ω. The reason is that for each ψ in SpaceDHilbertSpaceOn Ω μ we have ψ =ᵐ[μ.restrict Ω] Ω.indicator ψ, namely the equivalence class of ψ always contains a representative which vanishes on the complement of Ω. The linear isometry restrictIncl Ω μ describes this sub-Hilbert space relationship by mapping each ψ to this special representative in its equivalence class. Similarly, we may project SpaceDHilbertSpace d μ onto SpaceDHilbertSpaceOn Ω μ by enlarging the equivalence classes, essentially dropping information about the functions on the complement of Ω.

ii. Key results

    SpaceDHilbertSpace d μ : The $L^2$-space on Space d with respect to the measure μ.

    toBra : The linear equivalence between the Hilbert space and its dual. This is the map which sends each ket to its corresponding bra and vice versa.

    MemHS f μ : The proposition capturing exactly when a function f : Space d → ℂ can be lifted to an element of the Hilbert space.

    SpaceDHilbertSpaceOn Ω μ : An abbreviation for the Hilbert space SpaceDHilbertSpace d (μ.restrict Ω) appropriate for describing the $L^2$-space of complex functions on a subset of Space d.

    subspaceProjection : The projection of SpaceDHilbertSpace d μ onto SpaceDHilbertSpaceOn Ω μ.

    subspaceIncl : The linear isometry including SpaceDHilbertSpaceOn Ω μ as a sub-Hilbert space of SpaceDHilbertspace d μ.

iii. Table of contents

    A. SpaceDHilbertSpace

      A.1. Dual space

      A.2. Membership

      A.3. Construction of elements

      A.4. Coersions

      A.5. Misc.

    B. SpaceDHilbertSpaceOn

iv. References

@[expose] public section

A. SpaceDHilbertSpace

The L²-space of μ-a.e. equal equivalence classes of functions f : Space d → ℂ for which ∫ x, ‖f x‖² ∂μ is finite.

abbrev SpaceDHilbertSpace (d : ) (μ : Measure (Space d) := volume) := Lp 2 μ

A.1. Dual space

The anti-linear equivalence between SpaceDHilbertSpace d μ and its dual.

This is the map that takes a ket to its corresponding bra and vice versa.

def toBra : SpaceDHilbertSpace d μ ≃ₛₗ[starRingEnd ] StrongDual (SpaceDHilbertSpace d μ) := toDual (SpaceDHilbertSpace d μ)
@[simp] lemma toBra_apply_apply : toBra ψ φ = ψ, φ⟫_ := rfl@[simp] lemma toBra_symm_apply (f : StrongDual (SpaceDHilbertSpace d μ)) : toBra.symm f, ψ⟫_ = f ψ := toDual_symm_apply

A.2. Membership

For a function f : Space d → ℂ, the proposition MemHS f μ means that the function f can be lifted to an element of the Hilbert space.

def MemHS (f : Space d ) (μ : Measure (Space d) := volume) : Prop := MemLp f 2 μ

Elements of the Hilbert space satisfy the property MemHS.

lemma memHS_coe : MemHS ψ μ := Lp.memLp ψ

A function f : Space d → ℂ satisfies MemHS f μ if and only if it is μ-a.e. strongly measurable and ∫ x, ‖f x‖ ^ 2 ∂μ is finite.

lemma memHS_iff : MemHS f μ AEStronglyMeasurable f μ Integrable (fun x f x ^ 2) μ := and_congr_right fun h (and_iff_right h).symm.trans (memLp_two_iff_integrable_sq_norm h)
lemma mem_iff {f : Space d →ₘ[μ] } : f SpaceDHilbertSpace d μ MemHS f μ := Lp.mem_Lp_iff_memLp@[simp] lemma MemHS.zero : MemHS (0 : Space d ) μ := MemLp.zerolemma MemHS.neg (hf : MemHS f μ) : MemHS (-f) μ := MemLp.neg hflemma memHS_neg_iff : MemHS (-f) μ MemHS f μ := memLp_neg_ifflemma MemHS.add (hf : MemHS f μ) (hg : MemHS g μ) : MemHS (f + g) μ := MemLp.add hf hglemma MemHS.sub (hf : MemHS f μ) (hg : MemHS g μ) : MemHS (f - g) μ := MemLp.sub hf hglemma MemHS.const_smul (c : ) (hf : MemHS f μ) : MemHS (c f) μ := MemLp.const_smul hf clemma memHS_const_smul_iff {c : } (hc : c 0) : MemHS (c f) μ MemHS f μ := fun h inv_smul_smul₀ hc f h.const_smul c⁻¹, MemHS.const_smul clemma MemHS.ae_eq (hfg : f =ᵐ[μ] g) (hf : MemHS f μ) : MemHS g μ := MemLp.ae_eq hfg hflemma memHS_congr_ae (hfg : f =ᵐ[μ] g) : MemHS f μ MemHS g μ := memLp_congr_ae hfglemma MemHS.congr_norm (hf : MemHS f μ) (hg : AEStronglyMeasurable g μ) (hfg : ∀ᵐ x μ, f x = g x) : MemHS g μ := MemLp.congr_norm hf hg hfglemma memHS_congr_norm (hf : AEStronglyMeasurable f μ) (hg : AEStronglyMeasurable g μ) (hfg : ∀ᵐ x μ, f x = g x) : MemHS f μ MemHS g μ := memLp_congr_norm hf hg hfglemma MemHS.mono (hf : MemHS f μ) (hg : AEStronglyMeasurable g μ) (hfg : ∀ᵐ x μ, g x f x) : MemHS g μ := MemLp.mono hf hg hfglemma MemHS.mono_measure (h : μ' μ) (hf : MemHS f μ) : MemHS f μ' := MemLp.mono_measure h hflemma MemHS.restrict (Ω : Set (Space d)) (hf : MemHS f μ) : MemHS f (μ.restrict Ω) := hf.mono_measure restrict_le_selflemma MemHS.mono_restrict {Ω Ω' : Set (Space d)} (h : Ω' Ω) (hf : MemHS f (μ.restrict Ω)) : MemHS f (μ.restrict Ω') := hf.mono_measure (μ.restrict_mono_set h)lemma MemHS.indicator {Ω : Set (Space d)} ( : MeasurableSet Ω) (hf : MemHS f μ) : MemHS (Ω.indicator f) μ := MemLp.indicator hf

If f is a member of the Hilbert space with measure restricted to Ω then the representative Ω.indicator f which vanishes outside Ω is a member of SpaceDHilbertSpace d μ.

lemma MemHS.indicator_of_restrict {Ω : Set (Space d)} ( : MeasurableSet Ω) (hf : MemHS f (μ.restrict Ω)) : MemHS (Ω.indicator f) μ := d:μ:Measure (Space d)f:Space d Ω:Set (Space d):MeasurableSet Ωhf:MemHS f (μ.restrict Ω)MemHS (Ω.indicator f) μ d:μ:Measure (Space d)f:Space d Ω:Set (Space d):MeasurableSet Ωhf:MemHS f (μ.restrict Ω)Integrable (fun x => Ω.indicator f x ^ 2) μ d:μ:Measure (Space d)f:Space d Ω:Set (Space d):MeasurableSet Ωhf:MemHS f (μ.restrict Ω)(Ω.indicator fun x => f x ^ 2) =ᵐ[μ] fun x => Ω.indicator f x ^ 2 d:μ:Measure (Space d)f:Space d Ω:Set (Space d):MeasurableSet Ωhf:MemHS f (μ.restrict Ω)x:Space dΩ.indicator (fun x => f x ^ 2) x = Ω.indicator f x ^ 2 d:μ:Measure (Space d)f:Space d Ω:Set (Space d):MeasurableSet Ωhf:MemHS f (μ.restrict Ω)x:Space dh✝:x ΩΩ.indicator (fun x => f x ^ 2) x = Ω.indicator f x ^ 2d:μ:Measure (Space d)f:Space d Ω:Set (Space d):MeasurableSet Ωhf:MemHS f (μ.restrict Ω)x:Space dh✝:x ΩΩ.indicator (fun x => f x ^ 2) x = Ω.indicator f x ^ 2 d:μ:Measure (Space d)f:Space d Ω:Set (Space d):MeasurableSet Ωhf:MemHS f (μ.restrict Ω)x:Space dh✝:x ΩΩ.indicator (fun x => f x ^ 2) x = Ω.indicator f x ^ 2d:μ:Measure (Space d)f:Space d Ω:Set (Space d):MeasurableSet Ωhf:MemHS f (μ.restrict Ω)x:Space dh✝:x ΩΩ.indicator (fun x => f x ^ 2) x = Ω.indicator f x ^ 2 All goals completed! 🐙

A.3. Construction of elements

Given a function f : Space d → ℂ such that MemHS f μ is true via hf, mk hf is the element of the Hilbert space defined by f.

def mk : SpaceDHilbertSpace d μ := AEEqFun.mk f hf.1, mem_iff.mpr <| hf.ae_eq (AEEqFun.coeFn_mk f hf.1).symm
@[simp] lemma mk_neg : mk hf.neg = -mk hf := rfl@[simp] lemma mk_add : mk (hf.add hg) = mk hf + mk hg := rfl@[simp] lemma mk_sub : mk (hf.sub hg) = mk hf - mk hg := rfl@[simp] lemma mk_const_smul (c : ) : mk (hf.const_smul c) = c mk hf := rfllemma mk_eq_iff : mk hf = mk hg f =ᵐ[μ] g := d:μ:Measure (Space d)f:Space d g:Space d hf:MemHS f μhg:MemHS g μmk hf = mk hg f =ᵐ[μ] g All goals completed! 🐙lemma mk_surjective : (f : Space d ) (hf : MemHS f μ), mk hf = ψ := ψ, memHS_coe ψ, d:μ:Measure (Space d)ψ:(SpaceDHilbertSpace d μ)mk = ψ All goals completed! 🐙lemma coeFn_mk : mk hf =ᵐ[μ] f := AEEqFun.coeFn_mk f hf.1lemma inner_mk_mk : mk hf, mk hg⟫_ = x, starRingEnd (f x) * g x μ := d:μ:Measure (Space d)f:Space d g:Space d hf:MemHS f μhg:MemHS g μmk hf, mk hg⟫_ = (x : Space d), (starRingEnd ) (f x) * g x μ d:μ:Measure (Space d)f:Space d g:Space d hf:MemHS f μhg:MemHS g μ(fun a => (mk hf) a, (mk hg) a⟫_) =ᵐ[μ] fun a => (starRingEnd ) (f a) * g a d:μ:Measure (Space d)f:Space d g:Space d hf:MemHS f μhg:MemHS g μ (a : Space d), (mk hf) a = f a (mk hg) a = g a (mk hf) a, (mk hg) a⟫_ = (starRingEnd ) (f a) * g a All goals completed! 🐙

A.4. Coersions

lemma coeFn_zero : (0 : SpaceDHilbertSpace d μ) =ᵐ[μ] 0 := Lp.coeFn_zero _ _ _lemma coeFn_neg : (-ψ) =ᵐ[μ] -ψ := Lp.coeFn_neg _lemma coeFn_add : (ψ.val + φ.val) =ᵐ[μ] ψ + φ := Lp.coeFn_add _ _lemma coeFn_sub : (ψ.val - φ.val) =ᵐ[μ] ψ - φ := Lp.coeFn_sub _ _lemma coeFn_smul : (c ψ) =ᵐ[μ] c ψ := Lp.coeFn_smul _ _

A.5. Misc.

The tempered distribution associated to a state.

abbrev toTemperedDistribution [μ.HasTemperateGrowth] (ψ : SpaceDHilbertSpace d μ) : 𝓢'(Space d, ) := Lp.toTemperedDistribution ψ

The embedding of states into tempered distributions as a continuous linear map.

abbrev toTemperedDistributionCLM (d : ) (μ : Measure (Space d) := volume) [μ.HasTemperateGrowth] : SpaceDHilbertSpace d μ →L[] 𝓢'(Space d, ) := Lp.toTemperedDistributionCLM μ 2

B. SpaceDHilbertSpaceOn

TODO "Upgrade subspaceProjection to a ContinuousLinearMap when Lp.LpToLpOfMeasureLeSMul becomes available."

The L²-space SpaceDHilbertSpace d (μ.restrict Ω).

Elements are equivalence classes of functions which agree μ-a.e. on Ω and which have ∫ x in Ω, ‖f x‖ ^ 2 ∂μ finite.

abbrev SpaceDHilbertSpaceOn {d : } (Ω : Set (Space d)) (μ : Measure (Space d) := volume) := SpaceDHilbertSpace d (μ.restrict Ω)

The linear map projecting SpaceDHilbertSpace d μ onto SpaceDHilbertSpaceOn Ω μ.

d:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ✝:(SpaceDHilbertSpace d μ)φ:(SpaceDHilbertSpaceOn Ω μ)c:ψ:(SpaceDHilbertSpace d μ)(c ψ) =ᵐ[μ.restrict Ω] (RingHom.id ) c ψ All goals completed! 🐙
lemma subspaceProjection_norm_le : subspaceProjection Ω μ ψ ψ := d:Ω:Set (Space d)μ:Measure (Space d)ψ:(SpaceDHilbertSpace d μ)(subspaceProjection Ω μ) ψ ψ d:Ω:Set (Space d)μ:Measure (Space d)ψ:(SpaceDHilbertSpace d μ)eLpNorm (↑((subspaceProjection Ω μ) ψ)) 2 (μ.restrict Ω) eLpNorm (↑ψ) 2 μ d:Ω:Set (Space d)μ:Measure (Space d)ψ:(SpaceDHilbertSpace d μ)eLpNorm (↑ψ) 2 (μ.restrict Ω) eLpNorm (↑ψ) 2 μ All goals completed! 🐙

The linear isometry including SpaceDHilbertSpaceOn Ω μ as a sub-Hilbert space of SpaceDHilbertSpace d μ, defined by mapping ψ to Ω.indicator ψ.

d:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ✝:(SpaceDHilbertSpace d μ)φ:(SpaceDHilbertSpaceOn Ω μ)c:ψ:(SpaceDHilbertSpaceOn Ω μ)Ω.indicator (c ψ) =ᵐ[μ] Ω.indicator fun x => (RingHom.id ) c ψ x All goals completed! 🐙 norm_map' ψ := d:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ✝:(SpaceDHilbertSpace d μ)φ:(SpaceDHilbertSpaceOn Ω μ)ψ:(SpaceDHilbertSpaceOn Ω μ){ toFun := fun ψ => SpaceDHilbertSpace.mk , map_add' := , map_smul' := } ψ = ψ calc _ = (eLpNorm (mk ((memHS_coe ψ).indicator_of_restrict )) 2 μ).toReal := rfl _ = (eLpNorm (Ω.indicator ψ) 2 μ).toReal := congrArg _ (eLpNorm_congr_ae (coeFn_mk _)) _ = ψ := congrArg _ (eLpNorm_indicator_eq_eLpNorm_restrict )
d:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ:(SpaceDHilbertSpaceOn Ω μ)h:Ω.indicator ((subspaceProjection Ω μ) ((subspaceIncl μ) ψ)) =ᵐ[μ] Ω.indicator ((subspaceIncl μ) ψ)Ω.indicator ((subspaceProjection Ω μ) ((subspaceIncl μ) ψ)) =ᵐ[μ] Ω.indicator ψ d:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ:(SpaceDHilbertSpaceOn Ω μ)h:Ω.indicator ((subspaceProjection Ω μ) ((subspaceIncl μ) ψ)) =ᵐ[μ] Ω.indicator ((subspaceIncl μ) ψ)x:Space d((subspaceIncl μ) ψ) x = Ω.indicator (↑ψ) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑((subspaceIncl μ) ψ)) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑ψ) x d:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ:(SpaceDHilbertSpaceOn Ω μ)h:Ω.indicator ((subspaceProjection Ω μ) ((subspaceIncl μ) ψ)) =ᵐ[μ] Ω.indicator ((subspaceIncl μ) ψ)x:Space dh✝:x Ω((subspaceIncl μ) ψ) x = Ω.indicator (↑ψ) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑((subspaceIncl μ) ψ)) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑ψ) xd:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ:(SpaceDHilbertSpaceOn Ω μ)h:Ω.indicator ((subspaceProjection Ω μ) ((subspaceIncl μ) ψ)) =ᵐ[μ] Ω.indicator ((subspaceIncl μ) ψ)x:Space dh✝:x Ω((subspaceIncl μ) ψ) x = Ω.indicator (↑ψ) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑((subspaceIncl μ) ψ)) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑ψ) x d:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ:(SpaceDHilbertSpaceOn Ω μ)h:Ω.indicator ((subspaceProjection Ω μ) ((subspaceIncl μ) ψ)) =ᵐ[μ] Ω.indicator ((subspaceIncl μ) ψ)x:Space dh✝:x Ω((subspaceIncl μ) ψ) x = Ω.indicator (↑ψ) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑((subspaceIncl μ) ψ)) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑ψ) xd:Ω:Set (Space d):MeasurableSet Ωμ:Measure (Space d)ψ:(SpaceDHilbertSpaceOn Ω μ)h:Ω.indicator ((subspaceProjection Ω μ) ((subspaceIncl μ) ψ)) =ᵐ[μ] Ω.indicator ((subspaceIncl μ) ψ)x:Space dh✝:x Ω((subspaceIncl μ) ψ) x = Ω.indicator (↑ψ) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑((subspaceIncl μ) ψ)) x Ω.indicator (↑((subspaceProjection Ω μ) ((subspaceIncl μ) ψ))) x = Ω.indicator (↑ψ) x All goals completed! 🐙@[simp] lemma subspaceProjection_subspaceIncl_apply : subspaceProjection Ω μ (subspaceIncl μ φ) = φ := leftInverse_subspaceProjection μ φinclude in lemma subspaceProjection_surjective : Surjective (subspaceProjection Ω μ) := (leftInverse_subspaceProjection μ).surjective