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! 🐙ψ:ℝ → ℂhψ:ContDiff ℝ 1 ψ⊢ Continuous fun x => (-Complex.I * ↑↑ℏ) • deriv ψ x All goals completed! 🐙ψ:ℝ → ℂhψ:Differentiable ℝ ψc:ℂ⊢ (fun x => (-Complex.I * ↑↑ℏ) • deriv (c • ψ) x) = c • fun x => (-Complex.I * ↑↑ℏ) • deriv ψ x ψ:ℝ → ℂhψ: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.volume⊢ MeasureTheory.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.volume⊢ MeasureTheory.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.volume⊢ MeasureTheory.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.volume⊢ MeasureTheory.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.volume⊢ MeasureTheory.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.volume⊢ MeasureTheory.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⊢ MeasureTheory.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.volume⊢ MeasureTheory.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.volume⊢ MeasureTheory.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⊢ MeasureTheory.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.volume⊢ MeasureTheory.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.volume⊢ MeasureTheory.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.volume⊢ MeasureTheory.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! 🐙