-
Notifications
You must be signed in to change notification settings - Fork 78
feat: Position & momentum unbounded operators #963
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
78dc4f2
f527e6c
218fcf2
1992ff0
bf7077d
4c0e93a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -3,14 +3,27 @@ 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 | ||||||||||
| -/ | ||||||||||
| import PhysLean.QuantumMechanics.DDimensions.Operators.Unbounded | ||||||||||
| import PhysLean.QuantumMechanics.DDimensions.SpaceDHilbertSpace.SchwartzSubmodule | ||||||||||
| import PhysLean.SpaceAndTime.Space.Derivatives.Basic | ||||||||||
| /-! | ||||||||||
|
|
||||||||||
| # Position operators | ||||||||||
|
|
||||||||||
| In this module we define: | ||||||||||
| - The position vector operator on Schwartz maps, component-wise. | ||||||||||
| - The (regularized) real powers of the radius operator on Schwartz maps. | ||||||||||
| - `positionOperator i` acting on Schwartz maps `𝓢(Space d, ℂ)` by multiplication by `xᵢ`. | ||||||||||
| - `radiusRegPowOperator ε s` acting on Schwartz maps `𝓢(Space d, ℂ)` by multiplication | ||||||||||
| by `(‖x‖² + ε²)^(s/2)`, a smooth regularization of `‖x‖ˢ`. | ||||||||||
| - `positionUnboundedOperator i`, a symmetric unbounded operator acting on the Schwartz submodule | ||||||||||
| of the Hilbert space `SpaceDHilbertSpace d`. | ||||||||||
| - `radiusRegPowUnboundedOperator ε s`, a symmetric unbounded operator acting on the Schwartz | ||||||||||
| submodule of the Hilbert space `SpaceDHilbertSpace d`. For `s ≤ 0` this operator is bounded | ||||||||||
| (by `ε⁻ˢ`) and has natural domain the entire Hilbert space, but for uniformity we use the same | ||||||||||
| domain for all `s`. | ||||||||||
|
|
||||||||||
| We also introduce the following notation: | ||||||||||
| - `𝐱[i]` for `positionOperator i` | ||||||||||
| - `𝐫[ε,s]` for `radiusRegPowOperator ε s` | ||||||||||
|
|
||||||||||
| -/ | ||||||||||
|
|
||||||||||
|
|
@@ -19,45 +32,47 @@ noncomputable section | |||||||||
| open Space | ||||||||||
| open Function SchwartzMap ContDiff | ||||||||||
|
|
||||||||||
| /- | ||||||||||
| variable {d : ℕ} (i : Fin d) | ||||||||||
|
|
||||||||||
| /-! | ||||||||||
| ## Position vector operator | ||||||||||
| -/ | ||||||||||
|
|
||||||||||
| /-- Component `i` of the position operator is the continuous linear map | ||||||||||
| from `𝓢(Space d, ℂ)` to itself which maps `ψ` to `xᵢψ`. -/ | ||||||||||
| def positionOperator (i : Fin d) : 𝓢(Space d, ℂ) →L[ℂ] 𝓢(Space d, ℂ) := | ||||||||||
| SchwartzMap.smulLeftCLM ℂ (Complex.ofReal ∘ coordCLM i) | ||||||||||
| from `𝓢(Space d, ℂ)` to itself which maps `ψ` to `xᵢψ`. -/ | ||||||||||
| def positionOperator : 𝓢(Space d, ℂ) →L[ℂ] 𝓢(Space d, ℂ) := | ||||||||||
| SchwartzMap.smulLeftCLM ℂ (Complex.ofRealCLM ∘L coordCLM i) | ||||||||||
|
|
||||||||||
| @[inherit_doc positionOperator] | ||||||||||
| macro "𝐱[" i:term "]" : term => `(positionOperator $i) | ||||||||||
|
|
||||||||||
| lemma positionOperator_apply_fun (i : Fin d) (ψ : 𝓢(Space d, ℂ)) : | ||||||||||
| 𝐱[i] ψ = (fun x ↦ x i * ψ x) := by | ||||||||||
| lemma positionOperator_apply_fun (ψ : 𝓢(Space d, ℂ)) : | ||||||||||
| 𝐱[i] ψ = smulLeftCLM ℂ (coordCLM i) • ψ := by | ||||||||||
| unfold positionOperator | ||||||||||
| ext x | ||||||||||
| rw [SchwartzMap.smulLeftCLM_apply_apply] | ||||||||||
| · rw [Function.comp_apply, smul_eq_mul] | ||||||||||
| rw [coordCLM_apply, coord_apply] | ||||||||||
| · fun_prop | ||||||||||
| simp [smulLeftCLM_apply_apply (g := Complex.ofRealCLM ∘ (coordCLM i)) (by fun_prop) _ _, | ||||||||||
| smulLeftCLM_apply (g := coordCLM i) (by fun_prop) _] | ||||||||||
|
|
||||||||||
| lemma positionOperator_apply (i : Fin d) (ψ : 𝓢(Space d, ℂ)) (x : Space d) : | ||||||||||
| 𝐱[i] ψ x = x i * ψ x := by rw [positionOperator_apply_fun] | ||||||||||
| @[simp] | ||||||||||
| lemma positionOperator_apply (ψ : 𝓢(Space d, ℂ)) (x : Space d) : 𝐱[i] ψ x = x i * ψ x := by | ||||||||||
| simp [positionOperator_apply_fun, smulLeftCLM_apply (g := coordCLM i) (by fun_prop) _, | ||||||||||
| coordCLM_apply, coord_apply] | ||||||||||
|
|
||||||||||
| /- | ||||||||||
| /-! | ||||||||||
|
|
||||||||||
| ## Radius operator | ||||||||||
|
|
||||||||||
| -/ | ||||||||||
| TODO "ZGCNP" "Incorporate normRegularizedPow into Space.Norm" | ||||||||||
|
|
||||||||||
| /-- Power of regularized norm, `(‖x‖² + ε²)^(s/2)` -/ | ||||||||||
| /-- Power of regularized norm, `(‖x‖² + ε²)^(s/2)`. -/ | ||||||||||
| private def normRegularizedPow (ε s : ℝ) : Space d → ℝ := | ||||||||||
| fun x ↦ (‖x‖ ^ 2 + ε ^ 2) ^ (s / 2) | ||||||||||
|
|
||||||||||
| private lemma normRegularizedPow_hasTemperateGrowth (hε : 0 < ε) : | ||||||||||
| private lemma normRegularizedPow_hasTemperateGrowth {ε s : ℝ} (hε : 0 < ε) : | ||||||||||
| HasTemperateGrowth (normRegularizedPow (d := d) ε s) := by | ||||||||||
| -- Write `normRegularizedPow` as the composition of three simple functions | ||||||||||
| -- to take advantage of `hasTemperateGrowth_one_add_norm_sq_rpow` | ||||||||||
| -- to take advantage of `hasTemperateGrowth_one_add_norm_sq_rpow`. | ||||||||||
| let f1 := fun (x : ℝ) ↦ (ε ^ 2) ^ (s / 2) * x | ||||||||||
| let f2 := fun (x : Space d) ↦ (1 + ‖x‖ ^ 2) ^ (s / 2) | ||||||||||
| let f3 := fun (x : Space d) ↦ ε⁻¹ • x | ||||||||||
|
|
@@ -85,7 +100,7 @@ def radiusRegPowOperator (ε s : ℝ) : 𝓢(Space d, ℂ) →L[ℂ] 𝓢(Space | |||||||||
| @[inherit_doc radiusRegPowOperator] | ||||||||||
| macro "𝐫[" ε:term "," s:term "]" : term => `(radiusRegPowOperator $ε $s) | ||||||||||
|
|
||||||||||
| lemma radiusRegPowOperator_apply_fun (hε : 0 < ε) : | ||||||||||
| lemma radiusRegPowOperator_apply_fun {ε s : ℝ} (hε : 0 < ε) {ψ : 𝓢(Space d, ℂ)} : | ||||||||||
| 𝐫[ε,s] ψ = fun x ↦ (‖x‖ ^ 2 + ε ^ 2) ^ (s / 2) • ψ x := by | ||||||||||
| unfold radiusRegPowOperator | ||||||||||
| ext x | ||||||||||
|
|
@@ -94,11 +109,12 @@ lemma radiusRegPowOperator_apply_fun (hε : 0 < ε) : | |||||||||
| rw [comp_apply, smul_eq_mul, Complex.real_smul] | ||||||||||
| · exact HasTemperateGrowth.comp (by fun_prop) (normRegularizedPow_hasTemperateGrowth hε) | ||||||||||
|
|
||||||||||
| lemma radiusRegPowOperator_apply (hε : 0 < ε) : | ||||||||||
| 𝐫[ε,s] ψ x = (‖x‖ ^ 2 + ε ^ 2) ^ (s / 2) • ψ x := by | ||||||||||
| lemma radiusRegPowOperator_apply {ε s : ℝ} (hε : 0 < ε) {ψ : 𝓢(Space d, ℂ)} | ||||||||||
| {x : Space d} : 𝐫[ε,s] ψ x = (‖x‖ ^ 2 + ε ^ 2) ^ (s / 2) • ψ x := by | ||||||||||
| rw [radiusRegPowOperator_apply_fun hε] | ||||||||||
|
|
||||||||||
| lemma radiusRegPowOperator_comp_eq (hε : 0 < ε) (s t : ℝ) : | ||||||||||
| @[simp] | ||||||||||
| lemma radiusRegPowOperator_comp_eq {ε s t : ℝ} (hε : 0 < ε) : | ||||||||||
| (radiusRegPowOperator (d := d) ε s) ∘L 𝐫[ε,t] = 𝐫[ε,s+t] := by | ||||||||||
| unfold radiusRegPowOperator | ||||||||||
| ext ψ x | ||||||||||
|
|
@@ -113,23 +129,68 @@ lemma radiusRegPowOperator_comp_eq (hε : 0 < ε) (s t : ℝ) : | |||||||||
| · exact add_pos_of_nonneg_of_pos (sq_nonneg _) (sq_pos_of_pos hε) | ||||||||||
| repeat exact HasTemperateGrowth.comp (by fun_prop) (normRegularizedPow_hasTemperateGrowth hε) | ||||||||||
|
|
||||||||||
| lemma radiusRegPowOperator_zero (hε : 0 < ε) : | ||||||||||
| @[simp] | ||||||||||
| lemma radiusRegPowOperator_zero {ε : ℝ} (hε : 0 < ε) : | ||||||||||
| 𝐫[ε,0] = ContinuousLinearMap.id ℂ 𝓢(Space d, ℂ) := by | ||||||||||
| ext ψ x | ||||||||||
| rw [radiusRegPowOperator_apply hε, zero_div, Real.rpow_zero, one_smul, | ||||||||||
| ContinuousLinearMap.coe_id', id_eq] | ||||||||||
| simp [radiusRegPowOperator_apply hε] | ||||||||||
|
|
||||||||||
| lemma positionOperatorSqr_eq (hε : 0 < ε) : ∑ i, 𝐱[i] ∘L 𝐱[i] = | ||||||||||
| lemma positionOperatorSqr_eq {ε : ℝ} (hε : 0 < ε) : ∑ i, 𝐱[i] ∘L 𝐱[i] = | ||||||||||
| 𝐫[ε,2] - ε ^ 2 • ContinuousLinearMap.id ℂ 𝓢(Space d, ℂ) := by | ||||||||||
| ext ψ x | ||||||||||
| simp only [ContinuousLinearMap.coe_sum', Finset.sum_apply, SchwartzMap.sum_apply, | ||||||||||
| ContinuousLinearMap.comp_apply, ContinuousLinearMap.sub_apply, SchwartzMap.sub_apply, | ||||||||||
| ContinuousLinearMap.smul_apply, ContinuousLinearMap.id_apply, SchwartzMap.smul_apply] | ||||||||||
| simp only [positionOperator_apply_fun, radiusRegPowOperator_apply_fun hε] | ||||||||||
| simp only [← mul_assoc, ← Finset.sum_mul, ← Complex.ofReal_mul] | ||||||||||
| rw [div_self (by norm_num), Real.rpow_one, ← sub_smul, add_sub_cancel_right] | ||||||||||
| rw [Space.norm_sq_eq, Complex.real_smul, Complex.ofReal_sum] | ||||||||||
| simp only [pow_two] | ||||||||||
| simp [radiusRegPowOperator_apply hε, Space.norm_sq_eq, ← mul_assoc, ← Finset.sum_mul, | ||||||||||
| add_smul, ← pow_two] | ||||||||||
|
|
||||||||||
| /-! | ||||||||||
| ## Unbounded position operators | ||||||||||
| -/ | ||||||||||
|
|
||||||||||
| open SpaceDHilbertSpace | ||||||||||
|
|
||||||||||
| /-- The position operators defined on the Schwartz submodule. -/ | ||||||||||
| def positionOperatorSchwartz : schwartzSubmodule d →ₗ[ℂ] schwartzSubmodule d := | ||||||||||
| (schwartzEquiv (d := d)) ∘ₗ 𝐱[i].toLinearMap ∘ₗ (schwartzEquiv (d := d)).symm | ||||||||||
|
|
||||||||||
| lemma positionOperatorSchwartz_isSymmetric : (positionOperatorSchwartz i).IsSymmetric := by | ||||||||||
| intro ψ ψ' | ||||||||||
| obtain ⟨_, rfl⟩ := schwartzEquiv_exists ψ | ||||||||||
| obtain ⟨_, rfl⟩ := schwartzEquiv_exists ψ' | ||||||||||
| unfold positionOperatorSchwartz | ||||||||||
| simp only [LinearMap.coe_comp, LinearEquiv.coe_coe, comp_apply, schwartzEquiv_inner] | ||||||||||
| congr with x | ||||||||||
| simp only [LinearEquiv.symm_apply_apply, ContinuousLinearMap.coe_coe, | ||||||||||
| positionOperator_apply, map_mul, Complex.conj_ofReal] | ||||||||||
| ring | ||||||||||
|
|
||||||||||
| /-- The symmetric position unbounded operators with domain the Schwartz submodule | ||||||||||
| of the Hilbert space. -/ | ||||||||||
| def positionUnboundedOperator : UnboundedOperator (SpaceDHilbertSpace d) := | ||||||||||
| UnboundedOperator.ofSymmetric (hE := schwartzSubmodule_dense) (positionOperatorSchwartz i) | ||||||||||
| (positionOperatorSchwartz_isSymmetric i) | ||||||||||
|
|
||||||||||
| /-- The (regularized) radius operators defined on the Schwartz submodule. -/ | ||||||||||
| def radiusRegPowOperatorSchwartz (ε s : ℝ) : schwartzSubmodule d →ₗ[ℂ] schwartzSubmodule d := | ||||||||||
| (schwartzEquiv (d := d)) ∘ₗ (radiusRegPowOperator (d := d) ε s).toLinearMap ∘ₗ | ||||||||||
| (schwartzEquiv (d := d)).symm | ||||||||||
|
|
||||||||||
| lemma radiusRegPowOperatorSchwartz_isSymmetric (ε s : ℝ) (hε : 0 < ε) : | ||||||||||
| (radiusRegPowOperatorSchwartz (d := d) ε s).IsSymmetric := by | ||||||||||
| intro ψ ψ' | ||||||||||
| obtain ⟨_, rfl⟩ := schwartzEquiv_exists ψ | ||||||||||
| obtain ⟨_, rfl⟩ := schwartzEquiv_exists ψ' | ||||||||||
|
Comment on lines
+179
to
+180
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| unfold radiusRegPowOperatorSchwartz | ||||||||||
| simp only [LinearMap.coe_comp, LinearEquiv.coe_coe, comp_apply, schwartzEquiv_inner] | ||||||||||
| congr with x | ||||||||||
| simp only [LinearEquiv.symm_apply_apply, ContinuousLinearMap.coe_coe, | ||||||||||
| radiusRegPowOperator_apply hε, Complex.real_smul, map_mul, Complex.conj_ofReal] | ||||||||||
| ring | ||||||||||
|
|
||||||||||
| /-- The symmetric (regularized) radius unbounded operators with domain the Schwartz submodule | ||||||||||
| of the Hilbert space. -/ | ||||||||||
| def radiusRegPowUnboundedOperator (ε s : ℝ) (hε : 0 < ε) : | ||||||||||
| UnboundedOperator (SpaceDHilbertSpace d) := | ||||||||||
| UnboundedOperator.ofSymmetric (hE := schwartzSubmodule_dense) (radiusRegPowOperatorSchwartz ε s) | ||||||||||
| (radiusRegPowOperatorSchwartz_isSymmetric ε s hε) | ||||||||||
|
|
||||||||||
| end | ||||||||||
| end QuantumMechanics | ||||||||||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -20,29 +20,45 @@ open MeasureTheory | |||||
| open InnerProductSpace | ||||||
| open SchwartzMap | ||||||
|
|
||||||
| /-- The continuous linear map including Schwartz functions into `SpaceDHilbertSpace d`. -/ | ||||||
| def schwartzIncl {d : ℕ} : 𝓢(Space d, ℂ) →L[ℂ] SpaceDHilbertSpace d := toLpCLM ℂ (E := Space d) ℂ 2 | ||||||
|
|
||||||
| lemma schwartzIncl_injective {d : ℕ} : Function.Injective (schwartzIncl (d := d)) := | ||||||
| injective_toLp (E := Space d) 2 | ||||||
| variable {d : ℕ} | ||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
I wonder if it'd make sense to make this explicit because, while You can also decide if you'd like to make the same change on the operators. |
||||||
|
|
||||||
| lemma schwartzIncl_coe_ae {d : ℕ} (f : 𝓢(Space d, ℂ)) : f.1 =ᵐ[volume] (schwartzIncl f) := | ||||||
| (coeFn_toLp f 2).symm | ||||||
|
|
||||||
| lemma schwartzIncl_inner {d : ℕ} (f g : 𝓢(Space d, ℂ)) : | ||||||
| ⟪schwartzIncl f, schwartzIncl g⟫_ℂ = ∫ x : Space d, starRingEnd ℂ (f x) * g x := by | ||||||
| apply integral_congr_ae | ||||||
| filter_upwards [schwartzIncl_coe_ae f, schwartzIncl_coe_ae g] with _ hf hg | ||||||
| rw [← hf, ← hg, RCLike.inner_apply, mul_comm] | ||||||
| rfl | ||||||
| /-- The continuous linear map including Schwartz functions into `SpaceDHilbertSpace d`. -/ | ||||||
| def schwartzIncl : 𝓢(Space d, ℂ) →L[ℂ] SpaceDHilbertSpace d := toLpCLM ℂ (E := Space d) ℂ 2 | ||||||
|
|
||||||
| /-- The submodule of `SpaceDHilbertSpace d` consisting of Schwartz functions. -/ | ||||||
| abbrev schwartzSubmodule (d : ℕ) := (schwartzIncl (d := d)).range | ||||||
|
|
||||||
| lemma schwartzSubmodule_dense {d : ℕ} : | ||||||
| instance : CoeFun (schwartzSubmodule d) fun _ ↦ Space d → ℂ := ⟨fun ψ ↦ ψ.val⟩ | ||||||
|
|
||||||
| @[simp] | ||||||
| lemma val_eq_coe (ψ : schwartzSubmodule d) (x : Space d) : ψ.val x = ψ x := rfl | ||||||
|
|
||||||
| lemma schwartzSubmodule_dense : | ||||||
| Dense (schwartzSubmodule d : Set (SpaceDHilbertSpace d)) := | ||||||
| denseRange_toLpCLM ENNReal.top_ne_ofNat.symm | ||||||
|
|
||||||
| /-- The linear equivalence between the Schwartz functions `𝓢(Space d, ℂ)` | ||||||
| and the Schwartz submodule of `SpaceDHilbertSpace d`. -/ | ||||||
| def schwartzEquiv : 𝓢(Space d, ℂ) ≃ₗ[ℂ] schwartzSubmodule d := | ||||||
| LinearEquiv.ofInjective schwartzIncl.toLinearMap (injective_toLp (E := Space d) 2) | ||||||
|
|
||||||
| variable (f g : 𝓢(Space d, ℂ)) | ||||||
|
|
||||||
| lemma schwartzEquiv_coe_ae : (schwartzEquiv f) =ᵐ[volume] f := coeFn_toLp f 2 volume | ||||||
|
|
||||||
| lemma schwartzEquiv_inner : | ||||||
| ⟪schwartzEquiv f, schwartzEquiv g⟫_ℂ = ∫ x : Space d, starRingEnd ℂ (f x) * g x := by | ||||||
| apply integral_congr_ae | ||||||
| filter_upwards [schwartzEquiv_coe_ae f, schwartzEquiv_coe_ae g] with _ hf hg | ||||||
| simp [hf, hg, mul_comm] | ||||||
|
|
||||||
| lemma schwartzEquiv_ae_eq (h : schwartzEquiv f =ᵐ[volume] schwartzEquiv g) : f = g := | ||||||
| (EmbeddingLike.apply_eq_iff_eq _).mp (SetLike.coe_eq_coe.mp (ext_iff.mpr h)) | ||||||
|
|
||||||
| lemma schwartzEquiv_exists (ψ : schwartzSubmodule d) : ∃ f, ψ = schwartzEquiv f := by | ||||||
| use schwartzEquiv.symm ψ | ||||||
| exact (LinearEquiv.apply_symm_apply _ _).symm | ||||||
|
Comment on lines
+58
to
+60
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is basically identical to |
||||||
|
|
||||||
| end | ||||||
| end SpaceDHilbertSpace | ||||||
| end QuantumMechanics | ||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.