diff --git a/PhysLean/QuantumMechanics/DDimensions/Operators/Commutation.lean b/PhysLean/QuantumMechanics/DDimensions/Operators/Commutation.lean index 4134f285b..f0055c8f7 100644 --- a/PhysLean/QuantumMechanics/DDimensions/Operators/Commutation.lean +++ b/PhysLean/QuantumMechanics/DDimensions/Operators/Commutation.lean @@ -126,8 +126,10 @@ lemma position_commutation_momentum {d : β„•} (i j : Fin d) : ⁅𝐱[i], 𝐩[j rw [positionOperator_apply, momentumOperator_apply_fun] rw [momentumOperator_apply, positionOperator_apply_fun] simp only [neg_mul, Pi.smul_apply, smul_eq_mul, mul_neg, sub_neg_eq_add] - - have h : (fun x ↦ ↑(x i) * ψ x) = (fun (x : Space d) ↦ x i) β€’ ψ := rfl + have h : ⇑(smulLeftCLM β„‚ ⇑(Space.coordCLM i) β€’ ψ) = (fun (x : Space d) ↦ x i) β€’ ψ := by + ext x + rw [ContinuousLinearMap.smul_def, smulLeftCLM_apply_apply (by fun_prop), Space.coordCLM_apply] + simp only [Space.coord_apply, Complex.real_smul, Pi.smul_apply'] rw [h] rw [Space.deriv_smul (by fun_prop) (SchwartzMap.differentiableAt ψ)] rw [Space.deriv_component, ite_cond_symm j i] diff --git a/PhysLean/QuantumMechanics/DDimensions/Operators/Momentum.lean b/PhysLean/QuantumMechanics/DDimensions/Operators/Momentum.lean index 474175a4d..79668021c 100644 --- a/PhysLean/QuantumMechanics/DDimensions/Operators/Momentum.lean +++ b/PhysLean/QuantumMechanics/DDimensions/Operators/Momentum.lean @@ -3,15 +3,23 @@ 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.SpaceAndTime.Space.Derivatives.Basic +import PhysLean.QuantumMechanics.DDimensions.Operators.Unbounded +import PhysLean.QuantumMechanics.DDimensions.SpaceDHilbertSpace.SchwartzSubmodule import PhysLean.QuantumMechanics.PlanckConstant +import PhysLean.SpaceAndTime.Space.Derivatives.Basic /-! # Momentum vector operator In this module we define: -- The momentum operator on Schwartz maps, component-wise. -- The momentum squared operator on Schwartz maps. +- `momentumOperator i` acting on Schwartz maps `𝓒(Space d, β„‚)` as `-Iβ„βˆ‚α΅’`. +- `momentumOperatorSqr` acting on Schwartz maps `𝓒(Space d, β„‚)` as `βˆ‘α΅’ 𝐩[i]∘𝐩[i]`. +- `momentumUnboundedOperator i`, a symmetric unbounded operator acting on the Schwartz submodule + of the Hilbert space `SpaceDHilbertSpace d`. + +We also introduce the following notation: +- `𝐩[i]` for `momentumOperator i` +- `𝐩²` for `momentumOperatorSqr` -/ @@ -21,33 +29,67 @@ open Constants open Space open ContDiff SchwartzMap +variable {d : β„•} (i : Fin d) + /-- Component `i` of the momentum operator is the continuous linear map from `𝓒(Space d, β„‚)` to itself which maps `ψ` to `-iℏ βˆ‚α΅’Οˆ`. -/ -def momentumOperator {d : β„•} (i : Fin d) : 𝓒(Space d, β„‚) β†’L[β„‚] 𝓒(Space d, β„‚) := +def momentumOperator : 𝓒(Space d, β„‚) β†’L[β„‚] 𝓒(Space d, β„‚) := (- Complex.I * ℏ) β€’ (SchwartzMap.evalCLM β„‚ (Space d) β„‚ (basis i)) ∘L (SchwartzMap.fderivCLM β„‚ (Space d) β„‚) @[inherit_doc momentumOperator] macro "𝐩[" i:term "]" : term => `(momentumOperator $i) -lemma momentumOperator_apply_fun {d : β„•} (i : Fin d) (ψ : 𝓒(Space d, β„‚)) : +lemma momentumOperator_apply_fun (ψ : 𝓒(Space d, β„‚)) : 𝐩[i] ψ = (- Complex.I * ℏ) β€’ βˆ‚[i] ψ := rfl -lemma momentumOperator_apply {d : β„•} (i : Fin d) (ψ : 𝓒(Space d, β„‚)) (x : Space d) : +@[simp] +lemma momentumOperator_apply (ψ : 𝓒(Space d, β„‚)) (x : Space d) : 𝐩[i] ψ x = - Complex.I * ℏ * βˆ‚[i] ψ x := rfl /-- The square of the momentum operator, `𝐩² ≔ βˆ‘α΅’ 𝐩ᡒ∘𝐩ᡒ`. -/ -def momentumOperatorSqr {d : β„•} : 𝓒(Space d, β„‚) β†’L[β„‚] 𝓒(Space d, β„‚) := βˆ‘ i, 𝐩[i] ∘L 𝐩[i] +def momentumOperatorSqr : 𝓒(Space d, β„‚) β†’L[β„‚] 𝓒(Space d, β„‚) := βˆ‘ i, 𝐩[i] ∘L 𝐩[i] @[inherit_doc momentumOperatorSqr] notation "𝐩²" => momentumOperatorSqr -lemma momentumOperatorSqr_apply {d : β„•} (ψ : 𝓒(Space d, β„‚)) (x : Space d) : +lemma momentumOperatorSqr_apply (ψ : 𝓒(Space d, β„‚)) (x : Space d) : 𝐩² ψ x = βˆ‘ i, 𝐩[i] (𝐩[i] ψ) x := by dsimp only [momentumOperatorSqr] rw [← SchwartzMap.coe_coeHom] simp only [ContinuousLinearMap.coe_sum', ContinuousLinearMap.coe_comp', Finset.sum_apply, Function.comp_apply, map_sum] +/-! +## Unbounded momentum operators +-/ + +open SpaceDHilbertSpace + +/-- The momentum operators defined on the Schwartz submodule. -/ +def momentumOperatorSchwartz : schwartzSubmodule d β†’β‚—[β„‚] schwartzSubmodule d := + (schwartzEquiv (d := d)) βˆ˜β‚— 𝐩[i].toLinearMap βˆ˜β‚— (schwartzEquiv (d := d)).symm + +@[sorryful] +lemma momentumOperatorSchwartz_isSymmetric : (momentumOperatorSchwartz i).IsSymmetric := by + intro ψ ψ' + obtain ⟨f, rfl⟩ := schwartzEquiv_exists ψ + obtain ⟨f', rfl⟩ := schwartzEquiv_exists ψ' + 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) := + UnboundedOperator.ofSymmetric (hE := schwartzSubmodule_dense) (momentumOperatorSchwartz i) + (momentumOperatorSchwartz_isSymmetric i) + end end QuantumMechanics diff --git a/PhysLean/QuantumMechanics/DDimensions/Operators/Position.lean b/PhysLean/QuantumMechanics/DDimensions/Operators/Position.lean index 8523a01c4..b695b3ee4 100644 --- a/PhysLean/QuantumMechanics/DDimensions/Operators/Position.lean +++ b/PhysLean/QuantumMechanics/DDimensions/Operators/Position.lean @@ -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 ψ' + 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 diff --git a/PhysLean/QuantumMechanics/DDimensions/Operators/Unbounded.lean b/PhysLean/QuantumMechanics/DDimensions/Operators/Unbounded.lean index aaae63111..c9deef589 100644 --- a/PhysLean/QuantumMechanics/DDimensions/Operators/Unbounded.lean +++ b/PhysLean/QuantumMechanics/DDimensions/Operators/Unbounded.lean @@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE. Authors: Gregory J. Loges -/ import PhysLean.Mathematics.InnerProductSpace.Submodule -import PhysLean.QuantumMechanics.DDimensions.SpaceDHilbertSpace.SchwartzSubmodule /-! # Unbounded operators diff --git a/PhysLean/QuantumMechanics/DDimensions/SpaceDHilbertSpace/SchwartzSubmodule.lean b/PhysLean/QuantumMechanics/DDimensions/SpaceDHilbertSpace/SchwartzSubmodule.lean index b7e25c449..5b1d700eb 100644 --- a/PhysLean/QuantumMechanics/DDimensions/SpaceDHilbertSpace/SchwartzSubmodule.lean +++ b/PhysLean/QuantumMechanics/DDimensions/SpaceDHilbertSpace/SchwartzSubmodule.lean @@ -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 : β„•} -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 + end end SpaceDHilbertSpace end QuantumMechanics