Imports
/- Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joseph Tooby-Smith -/ module public import Mathlib.Analysis.Calculus.FDeriv.Star public import Physlib.QuantumMechanics.Operators.OneDimension.Unbounded public import Physlib.QuantumMechanics.HilbertSpaces.OneDimension.SchwartzSubmodule public import Physlib.QuantumMechanics.PlanckConstant public import Physlib.QuantumMechanics.HilbertSpaces.OneDimension.PlaneWaves

Momentum operator

In this module we define:

    The momentum operator on functions ℝ → ℂ

    The momentum operator on Schwartz maps as an unbounded operator on the Hilbert space.

We show that plane waves are generalized eigenvectors of the momentum operator.

@[expose] public section

The momentum operator on functions ℝ → ℂ

The momentum operator is defined as the map from ℝ → ℂ to ℝ → ℂ taking ψ to - i ℏ ψ'.

def momentumOperator (ψ : ) : := fun x - Complex.I * * deriv ψ x
lemma momentumOperator_eq_smul (ψ : ) : momentumOperator ψ = fun x => (- Complex.I * ) deriv ψ x := ψ: momentumOperator ψ = fun x => (-Complex.I * ) deriv ψ x All goals completed! 🐙ψ: :ContDiff 1 ψContinuous fun x => (-Complex.I * ) deriv ψ x All goals completed! 🐙ψ: :Differentiable ψc:(fun x => (-Complex.I * ) deriv (c ψ) x) = c fun x => (-Complex.I * ) deriv ψ x ψ: :Differentiable ψc:x:(-Complex.I * ) deriv (c ψ) x = (c fun x => (-Complex.I * ) deriv ψ x) x All goals completed! 🐙ψ1: ψ2: hψ1:Differentiable ψ1hψ2:Differentiable ψ2(fun x => (-Complex.I * ) deriv (ψ1 + ψ2) x) = (fun x => (-Complex.I * ) deriv ψ1 x) + fun x => (-Complex.I * ) deriv ψ2 x ψ1: ψ2: hψ1:Differentiable ψ1hψ2:Differentiable ψ2x:(-Complex.I * ) deriv (ψ1 + ψ2) x = ((fun x => (-Complex.I * ) deriv ψ1 x) + fun x => (-Complex.I * ) deriv ψ2 x) x ψ1: ψ2: hψ1:Differentiable ψ1hψ2:Differentiable ψ2x:-Complex.I * * (deriv ψ1 x + deriv ψ2 x) = -Complex.I * * deriv ψ1 x + -Complex.I * * deriv ψ2 x All goals completed! 🐙

The momentum operator on Schwartz maps

The parity operator on the Schwartz maps is defined as the linear map from 𝓢(ℝ, ℂ) to itself, such that ψ is taken to fun x => - I ℏ * ψ' x.

def momentumOperatorSchwartz : 𝓢(, ) →L[] 𝓢(, ) where toFun ψ := (- Complex.I * ) SchwartzMap.derivCLM ψ map_add' ψ1 ψ2 := ψ1:𝓢(, )ψ2:𝓢(, )(-Complex.I * ) (derivCLM ) (ψ1 + ψ2) = (-Complex.I * ) (derivCLM ) ψ1 + (-Complex.I * ) (derivCLM ) ψ2 All goals completed! 🐙 map_smul' a ψ := a:ψ:𝓢(, )(-Complex.I * ) (derivCLM ) (a ψ) = (RingHom.id ) a (-Complex.I * ) (derivCLM ) ψ All goals completed! 🐙 cont := Continuous fun ψ => (-Complex.I * ) (derivCLM ) ψ All goals completed! 🐙
ψ:𝓢(, )x:({ toFun := fun ψ => (-Complex.I * ) (derivCLM ) ψ, map_add' := momentumOperatorSchwartz._proof_3, map_smul' := momentumOperatorSchwartz._proof_4, cont := momentumOperatorSchwartz._proof_5 } ψ) x = -Complex.I * * deriv (⇑ψ) x All goals completed! 🐙

The unbounded momentum operator, whose domain is Schwartz maps.

Generalized eigenvectors of the momentum operator

k:ψ:𝓢(, )-(Complex.I * * (fun x => (2 * Real.pi * Complex.I * x) FourierTransform.fourier (⇑ψ) x) k) = 2 * Real.pi * * k * (planewaveFunctional k) ψ k:ψ:𝓢(, )-(Complex.I * * (2 * Real.pi * Complex.I * k * FourierTransform.fourier (⇑ψ) k)) = 2 * Real.pi * * k * (FourierTransform.fourier ψ) k k:ψ:𝓢(, )-(Complex.I ^ 2 * * Real.pi * k * FourierTransform.fourier (⇑ψ) k * 2) = * Real.pi * k * (FourierTransform.fourier ψ) k * 2 k:ψ:𝓢(, )FourierTransform.fourier (⇑ψ) k = (FourierTransform.fourier ψ) k k = 0 All goals completed! 🐙

The momentum operator is symmetric

ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume (x : ), (starRingEnd ) ((momentumOperatorSchwartz ψ1) x) * ψ2 x = (a : ), -Complex.I * * -((fderiv (fun a => (starRingEnd ) (ψ1 a)) a) 1 * ψ2 a)ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (fderiv (fun a => (starRingEnd ) (ψ1 a)) x) 1 * ψ2 x) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (starRingEnd ) (ψ1 x) * (fderiv (⇑ψ2) x) 1) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (starRingEnd ) (ψ1 x) * ψ2 x) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume x tsupport ψ2, DifferentiableAt (fun a => (starRingEnd ) (ψ1 a)) xψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume x tsupport fun a => (starRingEnd ) (ψ1 a), DifferentiableAt (⇑ψ2) x ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume (x : ), star ((momentumOperatorSchwartz ψ1) x) * ψ2 x = (a : ), -Complex.I * * -(((starL' ) ∘SL fderiv (⇑ψ1) a) 1 * ψ2 a)ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (fderiv (fun a => (starRingEnd ) (ψ1 a)) x) 1 * ψ2 x) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (starRingEnd ) (ψ1 x) * (fderiv (⇑ψ2) x) 1) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (starRingEnd ) (ψ1 x) * ψ2 x) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume x tsupport ψ2, DifferentiableAt (fun a => (starRingEnd ) (ψ1 a)) xψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume x tsupport fun a => (starRingEnd ) (ψ1 a), DifferentiableAt (⇑ψ2) x ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (fderiv (fun a => (starRingEnd ) (ψ1 a)) x) 1 * ψ2 x) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (starRingEnd ) (ψ1 x) * (fderiv (⇑ψ2) x) 1) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (starRingEnd ) (ψ1 x) * ψ2 x) MeasureTheory.volumeψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume x tsupport ψ2, DifferentiableAt (fun a => (starRingEnd ) (ψ1 a)) xψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume x tsupport fun a => (starRingEnd ) (ψ1 a), DifferentiableAt (⇑ψ2) x ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (fderiv (fun a => (starRingEnd ) (ψ1 a)) x) 1 * ψ2 x) MeasureTheory.volume ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => ((starL' ) ∘SL fderiv (⇑ψ1) x) 1 * ψ2 x) MeasureTheory.volume All goals completed! 🐙 ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (starRingEnd ) (ψ1 x) * (fderiv (⇑ψ2) x) 1) MeasureTheory.volume All goals completed! 🐙 ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volumeMeasureTheory.Integrable (fun x => (starRingEnd ) (ψ1 x) * ψ2 x) MeasureTheory.volume All goals completed! 🐙 ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume x tsupport ψ2, DifferentiableAt (fun a => (starRingEnd ) (ψ1 a)) x All goals completed! 🐙 ψ1:𝓢(, )ψ2:𝓢(, )hint: (f g : 𝓢(, )), MeasureTheory.Integrable (fun x => star (f x) * g x) MeasureTheory.volume x tsupport fun a => (starRingEnd ) (ψ1 a), DifferentiableAt (⇑ψ2) x All goals completed! 🐙