Imports
/- Copyright (c) 2026 Gregory J. Loges. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Gregory J. Loges -/ module public import Physlib.QuantumMechanics.Operators.Unbounded public import Physlib.QuantumMechanics.HilbertSpaces.SpaceD.SchwartzSubmodule public import Physlib.QuantumMechanics.PlanckConstant public import Physlib.SpaceAndTime.Space.Derivatives.Basic import Mathlib.Analysis.Calculus.FDeriv.Star

Momentum operators

i. Overview

In this module we introduce several momentum operators for quantum mechanics on Space d.

ii. Key results

Definitions:

    momentumCLM : (components of) the momentum vector operator acting on Schwartz maps 𝓢(Space d, ℂ) as -iℏ∂ᵢ.

    momentumOperator : a symmetric unbounded operator acting on the Schwartz submodule of the Hilbert space SpaceDHilbertSpace d.

Notation:

    𝐩 for momentumOperator

iii. Table of contents

    A. Momentum vector operator

    B. Unbounded momentum vector operator

iv. References

TODO "Extend the domain of the momentum operator to the Sobolev space `H¹`."TODO "Prove that the momentum operator is self-adjoint (relies on 15310236534648318597)."@[expose] public section

A. Momentum vector operator

Component i of the momentum operator is the continuous linear map from 𝓢(Space d, ℂ) to itself which maps ψ to -iℏ ∂ᵢψ.

def momentumCLM : 𝓢(Space d, ) →L[] 𝓢(Space d, ) := (- Complex.I * ) (SchwartzMap.evalCLM (Space d) (basis i)) ∘L (SchwartzMap.fderivCLM (Space d) )
@[inherit_doc momentumCLM] notation "𝐩" => momentumCLM@[inherit_doc momentumCLM] notation "𝐩[" d' "]" => momentumCLM (d := d')lemma momentumCLM_apply_fun (ψ : 𝓢(Space d, )) : 𝐩 i ψ = (-I * ) ∂[i] ψ := rfl@[simp] lemma momentumCLM_apply (ψ : 𝓢(Space d, )) (x : Space d) : 𝐩 i ψ x = -I * * ∂[i] ψ x := rfl

B. Unbounded momentum vector operator

The momentum operator as a LinearPMap with domain the Schwartz submodule.

def momentumOperator : SpaceDHilbertSpace d →ₗ.[] SpaceDHilbertSpace d where domain := SchwartzSubmodule d toFun := (schwartzIncl volume).1 ∘ₗ (𝐩 i).1 ∘ₗ (schwartzEquiv volume).symm.1
@[inherit_doc momentumOperator] notation "𝓟" => momentumOperatorlemma momentumOperator_apply (ψ : SchwartzSubmodule d) : 𝓟 i ψ = schwartzEquiv volume (𝐩 i ((schwartzEquiv volume).symm ψ)) := rfllemma momentumOperator_apply_ae (ψ : SchwartzSubmodule d) : 𝓟 i ψ =ᵐ[volume] 𝐩 i ((schwartzEquiv volume).symm ψ) := schwartzEquiv_coe_ae _lemma momentumOperator_range (ψ : SchwartzSubmodule d) : 𝓟 i ψ SchwartzSubmodule d := d:i:Fin dψ:(SchwartzSubmodule d volume)(𝓟 i) ψ SchwartzSubmodule d volume All goals completed! 🐙lemma momentumOperator_hasDenseDomain : (𝓟 i).HasDenseDomain := SchwartzSubmodule.dense d _d:i:Fin df:𝓢(Space d, )g:𝓢(Space d, )heq: (x : Space d), fderiv (star f) x = (starL' ) ∘SL fderiv (⇑f) xhI₁:Integrable (fun x => star (f x)) volumehI₂:Integrable (fun x => (fderiv (⇑g) x) (basis i) * star (f x)) volumehI₃:Integrable (fun x => g x * (fderiv (star f) x) (basis i)) volumehI₄:Integrable (fun x => g x * star (f x)) volume (x : Space d), (starRingEnd ) (f x) * (-I * * Space.deriv i (⇑g) x) volume = (x : Space d), -(I * ) * ((fderiv (⇑g) x) (basis i) * star (f x)) All goals completed! 🐙 d:i:Fin df:𝓢(Space d, )g:𝓢(Space d, )heq: (x : Space d), fderiv (star f) x = (starL' ) ∘SL fderiv (⇑f) xhI₁:Integrable (fun x => star (f x)) volumehI₂:Integrable (fun x => (fderiv (⇑g) x) (basis i) * star (f x)) volumehI₃:Integrable (fun x => g x * (fderiv (star f) x) (basis i)) volumehI₄:Integrable (fun x => g x * star (f x)) volumeI * * (x : Space d), g x * (fderiv (star f) x) (basis i) = I * * - (x : Space d), (fderiv (⇑g) x) (basis i) * star (f x) d:i:Fin df:𝓢(Space d, )g:𝓢(Space d, )heq: (x : Space d), fderiv (star f) x = (starL' ) ∘SL fderiv (⇑f) xhI₁:Integrable (fun x => star (f x)) volumehI₂:Integrable (fun x => (fderiv (⇑g) x) (basis i) * star (f x)) volumehI₃:Integrable (fun x => g x * (fderiv (star f) x) (basis i)) volumehI₄:Integrable (fun x => g x * star (f x)) volume (x : Space d), g x * (fderiv (star f) x) (basis i) = - (x : Space d), (fderiv (⇑g) x) (basis i) * star (f x) exact integral_mul_fderiv_eq_neg_fderiv_mul_of_integrable hI₂ hI₃ hI₄ (d:i:Fin df:𝓢(Space d, )g:𝓢(Space d, )heq: (x : Space d), fderiv (star f) x = (starL' ) ∘SL fderiv (⇑f) xhI₁:Integrable (fun x => star (f x)) volumehI₂:Integrable (fun x => (fderiv (⇑g) x) (basis i) * star (f x)) volumehI₃:Integrable (fun x => g x * (fderiv (star f) x) (basis i)) volumehI₄:Integrable (fun x => g x * star (f x)) volume x tsupport (star f), DifferentiableAt (⇑g) x All goals completed! 🐙) (d:i:Fin df:𝓢(Space d, )g:𝓢(Space d, )heq: (x : Space d), fderiv (star f) x = (starL' ) ∘SL fderiv (⇑f) xhI₁:Integrable (fun x => star (f x)) volumehI₂:Integrable (fun x => (fderiv (⇑g) x) (basis i) * star (f x)) volumehI₃:Integrable (fun x => g x * (fderiv (star f) x) (basis i)) volumehI₄:Integrable (fun x => g x * star (f x)) volume x tsupport g, DifferentiableAt (star f) x All goals completed! 🐙)lemma momentumOperator_isUnbounded : (𝓟 i).IsUnbounded := d:i:Fin d(𝓟 i).IsUnbounded d:i:Fin d(𝓟 i).IsSymmetricd:i:Fin d(𝓟 i).HasDenseDomain d:i:Fin d(𝓟 i).IsSymmetric All goals completed! 🐙 d:i:Fin d(𝓟 i).HasDenseDomain All goals completed! 🐙

The square of the momentum operator.

def momentumSqOperator : SpaceDHilbertSpace d →ₗ.[] SpaceDHilbertSpace d := sum fun i (𝓟 i).comp (𝓟 i) (momentumOperator_range i)
lemma momentumSqOperator_eq : momentumSqOperator (d := d) = sum fun i (𝓟 i).comp (𝓟 i) (momentumOperator_range i) := rfld:hd:0 < dthis:Nonempty (Fin d) := ··· a, ((𝓟 a).comp (𝓟 a) ).domain = x, SchwartzSubmodule d volume All goals completed! 🐙