Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 49 additions & 17 deletions PhysLean/QuantumMechanics/DDimensions/Operators/Momentum.lean
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public import PhysLean.QuantumMechanics.DDimensions.Operators.Unbounded
public import PhysLean.QuantumMechanics.DDimensions.SpaceDHilbertSpace.SchwartzSubmodule
public import PhysLean.QuantumMechanics.PlanckConstant
public import PhysLean.SpaceAndTime.Space.Derivatives.Basic
import Mathlib.Analysis.Calculus.FDeriv.Star
/-!

# Momentum operators
Expand Down Expand Up @@ -97,31 +98,62 @@ lemma momentumOperatorSqr_apply (ψ : 𝓢(Space d, ℂ)) (x : Space d) :

-/

open SpaceDHilbertSpace
open SpaceDHilbertSpace MeasureTheory

/-- The momentum operators defined on the Schwartz submodule. -/
def momentumOperatorSchwartz : schwartzSubmodule d →ₗ[ℂ] schwartzSubmodule d :=
schwartzEquiv.toLinearMap ∘ₗ 𝐩[i].toLinearMap ∘ₗ schwartzEquiv.symm.toLinearMap

@[sorryful]
lemma momentumOperatorSchwartz_isSymmetric : (momentumOperatorSchwartz i).IsSymmetric := by
lemma momentumOperatorSchwartz_isSymmetric :
(momentumOperatorSchwartz i).IsSymmetric := by
intro ψ ψ'
obtain ⟨f, rfl⟩ := schwartzEquiv.surjective ψ
obtain ⟨f', rfl⟩ := schwartzEquiv.surjective ψ'
unfold momentumOperatorSchwartz
simp only [LinearMap.coe_comp, LinearEquiv.coe_coe, ContinuousLinearMap.coe_coe,
Function.comp_apply, LinearEquiv.symm_apply_apply, schwartzEquiv_inner, momentumOperator_apply,
neg_mul, map_neg, map_mul, Complex.conj_I, Complex.conj_ofReal, neg_neg, mul_neg]
-- Need integration by parts and `starRingEnd ∂[i] = ∂[i] starRingEnd`:
-- ⊢ ∫ (x : Space d), Complex.I * ↑↑ℏ * (starRingEnd ℂ) (Space.deriv i (⇑f) x) * f' x =
-- ∫ (x : Space d), -((starRingEnd ℂ) (f x) * (Complex.I * ↑↑ℏ * Space.deriv i (⇑f') x))
sorry

/-- The symmetric momentum unbounded operators with domain the Schwartz submodule
of the Hilbert space. -/
@[sorryful]
def momentumUnboundedOperator : UnboundedOperator (SpaceDHilbertSpace d) (SpaceDHilbertSpace d) :=
UnboundedOperator.ofSymmetric (schwartzSubmodule_dense d) (momentumOperatorSchwartz_isSymmetric i)
simp only [momentumOperatorSchwartz, LinearMap.coe_comp, LinearEquiv.coe_coe,
ContinuousLinearMap.coe_coe, Function.comp_apply, LinearEquiv.symm_apply_apply,
schwartzEquiv_inner, momentumOperator_apply, neg_mul, map_neg, map_mul, Complex.conj_I,
Complex.conj_ofReal, neg_neg, mul_neg, integral_neg]
simp_rw [show ∀ x : Space d, Complex.I * ↑↑ℏ *
(starRingEnd ℂ) (Space.deriv i (⇑f) x) * f' x = (Complex.I * ↑↑ℏ) *
((starRingEnd ℂ) (Space.deriv i (⇑f) x) * f' x) from fun x => by ring,
show ∀ x : Space d, (starRingEnd ℂ) (f x) *
(Complex.I * ↑↑ℏ * Space.deriv i (⇑f') x) = (Complex.I * ↑↑ℏ) *
((starRingEnd ℂ) (f x) * Space.deriv i (⇑f') x) from fun x => by ring]
rw [integral_const_mul, integral_const_mul, neg_mul_eq_mul_neg]; congr 1
let dS (g : 𝓢(Space d, ℂ)) :=
(SchwartzMap.evalCLM ℂ _ ℂ (basis i)) ((SchwartzMap.fderivCLM ℂ _ ℂ) g)
have hsd : ∀ x, (starRingEnd ℂ) (Space.deriv i (⇑f) x) * f' x =
fderiv ℝ (fun y => star (f y)) x (basis i) * f' x := fun x => by
congr 1; change star (fderiv ℝ (⇑f) x (basis i)) = _
rw [fderiv_star (𝕜 := ℝ)]; simp
simp_rw [hsd]
change ∫ x, fderiv ℝ (fun y => star (f y)) x (basis i) * f' x =
-(∫ x, star (f x) * fderiv ℝ (⇑f') x (basis i))
have ibp := integral_mul_fderiv_eq_neg_fderiv_mul_of_integrable
(f := fun x => star (f x)) (g := ⇑f') (v := basis i) (μ := volume)
(hf'g := ?_) (hfg' := ?_) (hfg := ?_)
(.star (SchwartzMap.differentiable f)) (SchwartzMap.differentiable f')
· rw [ibp, neg_neg]
· have h : ∀ x, (fderiv ℝ (fun x => star (f x)) x) (basis i) =
star ((dS f) x) := fun x => by
rw [fderiv_star (𝕜 := ℝ)]; simp [dS]
simp_rw [h]; exact .mul_of_top_left
(((starL' ℝ : ℂ ≃L[ℝ] ℂ).integrable_comp_iff).mpr (SchwartzMap.integrable _))
(SchwartzMap.memLp_top f' volume)
· have h : ∀ x, (fderiv ℝ (⇑f') x) (basis i) = (dS f') x := fun _ => rfl
simp_rw [h]; exact .mul_of_top_left
(((starL' ℝ : ℂ ≃L[ℝ] ℂ).integrable_comp_iff).mpr (SchwartzMap.integrable f))
(SchwartzMap.memLp_top _ volume)
· exact .mul_of_top_left
(((starL' ℝ : ℂ ≃L[ℝ] ℂ).integrable_comp_iff).mpr (SchwartzMap.integrable f))
(SchwartzMap.memLp_top f' volume)

/-- The symmetric momentum unbounded operators with domain the Schwartz
submodule of the Hilbert space. -/
def momentumUnboundedOperator :
UnboundedOperator (SpaceDHilbertSpace d) (SpaceDHilbertSpace d) :=
UnboundedOperator.ofSymmetric (schwartzSubmodule_dense d)
(momentumOperatorSchwartz_isSymmetric i)

end
end QuantumMechanics
Loading