|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Gregory J. Loges. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Gregory J. Loges |
| 5 | +-/ |
| 6 | +import PhysLean.Mathematics.InnerProductSpace.Submodule |
| 7 | +import PhysLean.QuantumMechanics.DDimensions.SpaceDHilbertSpace.SchwartzSubmodule |
| 8 | +/-! |
| 9 | +
|
| 10 | +# Unbounded operators |
| 11 | +
|
| 12 | +In this file we define |
| 13 | +- `UnboundedOperator`: an unbounded operator with domain a submodule of a generic Hilbert space. |
| 14 | + All unbounded operators are assumed to be both densely defined and closable. |
| 15 | +- The closure, `UnboundedOperator.closure`, and adjoint, `UnboundedOperator.adjoint`, with notation |
| 16 | + `U† = U.adjoint`. That `U†` is densely defined is guaranteed by the closability of `U`. |
| 17 | +- The concept of a generalized eigenvector in `IsGeneralizedEigenvector`. |
| 18 | +
|
| 19 | +We prove some basic relations, making use of the density and closability assumptions: |
| 20 | +- `U.closure† = U†` in `closure_adjoint_eq_adjoint` |
| 21 | +- `U†† = U.closure` in `adjoint_adjoint_eq_closure` |
| 22 | +
|
| 23 | +## References |
| 24 | +
|
| 25 | +- K. Schmüdgen, (2012). "Unbounded self-adjoint operators on Hilbert space" (Vol. 265). Springer. |
| 26 | + https://doi.org/10.1007/978-94-007-4753-1 |
| 27 | +
|
| 28 | +-/ |
| 29 | + |
| 30 | +namespace QuantumMechanics |
| 31 | + |
| 32 | +open LinearPMap Submodule |
| 33 | + |
| 34 | +/-- An `UnboundedOperator` is a linear map from a submodule of the Hilbert space |
| 35 | + to the Hilbert space, assumed to be both densely defined and closable. -/ |
| 36 | +@[ext] |
| 37 | +structure UnboundedOperator |
| 38 | + (HS : Type*) [NormedAddCommGroup HS] [InnerProductSpace ℂ HS] [CompleteSpace HS] |
| 39 | + extends LinearPMap ℂ HS HS where |
| 40 | + /-- The domain of an unbounded operator is dense in the Hilbert space. -/ |
| 41 | + dense_domain : Dense (domain : Set HS) |
| 42 | + /-- An unbounded operator is closable. -/ |
| 43 | + is_closable : toLinearPMap.IsClosable |
| 44 | + |
| 45 | +namespace UnboundedOperator |
| 46 | + |
| 47 | +variable |
| 48 | + {HS : Type*} [NormedAddCommGroup HS] [InnerProductSpace ℂ HS] [CompleteSpace HS] |
| 49 | + (U : UnboundedOperator HS) |
| 50 | + |
| 51 | +lemma ext' (U T : UnboundedOperator HS) (h : U.toLinearPMap = T.toLinearPMap) : U = T := by |
| 52 | + apply UnboundedOperator.ext |
| 53 | + · exact toSubMulAction_inj.mp (congrArg toSubMulAction (congrArg domain h)) |
| 54 | + · exact congr_arg_heq toFun h |
| 55 | + |
| 56 | +lemma ext_iff' (U T : UnboundedOperator HS) : U = T ↔ U.toLinearPMap = T.toLinearPMap := by |
| 57 | + refine ⟨?_, UnboundedOperator.ext' U T⟩ |
| 58 | + intro h |
| 59 | + rw [h] |
| 60 | + |
| 61 | +/-! |
| 62 | +### Construction of unbounded operators |
| 63 | +-/ |
| 64 | + |
| 65 | +variable {E : Submodule ℂ HS} {hE : Dense (E : Set HS)} |
| 66 | + |
| 67 | +/-- An `UnboundedOperator` constructed from a symmetric linear map on a dense submodule `E`. -/ |
| 68 | +def ofSymmetric (f : E →ₗ[ℂ] E) (hf : f.IsSymmetric) : UnboundedOperator HS where |
| 69 | + toLinearPMap := LinearPMap.mk E (E.subtype ∘ₗ f) |
| 70 | + dense_domain := hE |
| 71 | + is_closable := by |
| 72 | + refine isClosable_iff_exists_closed_extension.mpr ?_ |
| 73 | + use (LinearPMap.mk E (E.subtype ∘ₗ f))† |
| 74 | + exact ⟨adjoint_isClosed hE, IsFormalAdjoint.le_adjoint hE hf⟩ |
| 75 | + |
| 76 | +@[simp] |
| 77 | +lemma ofSymmetric_apply {f : E →ₗ[ℂ] E} {hf : f.IsSymmetric} (ψ : E) : |
| 78 | + (ofSymmetric (hE := hE) f hf).toLinearPMap ψ = E.subtypeL (f ψ) := rfl |
| 79 | + |
| 80 | +/-! |
| 81 | +### Closure |
| 82 | +-/ |
| 83 | + |
| 84 | +section Closure |
| 85 | + |
| 86 | +/-- The closure of an unbounded operator. -/ |
| 87 | +noncomputable def closure : UnboundedOperator HS where |
| 88 | + toLinearPMap := U.toLinearPMap.closure |
| 89 | + dense_domain := Dense.mono (HasCore.le_domain (closureHasCore U.toLinearPMap)) U.dense_domain |
| 90 | + is_closable := IsClosed.isClosable (IsClosable.closure_isClosed U.is_closable) |
| 91 | + |
| 92 | +@[simp] |
| 93 | +lemma closure_toLinearPMap : U.closure.toLinearPMap = U.toLinearPMap.closure := rfl |
| 94 | + |
| 95 | +/-- An unbounded operator is closed iff the graph of its defining LinearPMap is closed. -/ |
| 96 | +def IsClosed : Prop := U.toLinearPMap.IsClosed |
| 97 | + |
| 98 | +lemma closure_isClosed : U.closure.IsClosed := IsClosable.closure_isClosed U.is_closable |
| 99 | + |
| 100 | +end Closure |
| 101 | + |
| 102 | +/-! |
| 103 | +### Adjoints |
| 104 | +-/ |
| 105 | + |
| 106 | +section Adjoints |
| 107 | + |
| 108 | +open InnerProductSpaceSubmodule |
| 109 | + |
| 110 | +/-- The adjoint of a densely defined, closable `LinearPMap` is densely defined. -/ |
| 111 | +lemma adjoint_isClosable_dense (f : LinearPMap ℂ HS HS) (h_dense : Dense (f.domain : Set HS)) |
| 112 | + (h_closable : f.IsClosable) : Dense (f†.domain : Set HS) := by |
| 113 | + by_contra hd |
| 114 | + have : ∃ x ∈ f†.domainᗮ, x ≠ 0 := by |
| 115 | + apply not_forall.mp at hd |
| 116 | + rcases hd with ⟨y, hy⟩ |
| 117 | + have hnetop : f†.domainᗮᗮ ≠ ⊤ := by |
| 118 | + rw [orthogonal_orthogonal_eq_closure] |
| 119 | + exact Ne.symm (ne_of_mem_of_not_mem' trivial hy) |
| 120 | + have hnebot : f†.domainᗮ ≠ ⊥ := by |
| 121 | + by_contra |
| 122 | + apply hnetop |
| 123 | + rwa [orthogonal_eq_top_iff] |
| 124 | + exact exists_mem_ne_zero_of_ne_bot hnebot |
| 125 | + rcases this with ⟨x, hx, hx'⟩ |
| 126 | + apply hx' |
| 127 | + apply graph_fst_eq_zero_snd f.closure _ rfl |
| 128 | + rw [← IsClosable.graph_closure_eq_closure_graph h_closable, |
| 129 | + mem_submodule_closure_iff_mem_submoduleToLp_closure, |
| 130 | + ← orthogonal_orthogonal_eq_closure, |
| 131 | + ← mem_submodule_adjoint_adjoint_iff_mem_submoduleToLp_orthogonal_orthogonal, |
| 132 | + ← LinearPMap.adjoint_graph_eq_graph_adjoint h_dense, |
| 133 | + mem_submodule_adjoint_iff_mem_submoduleToLp_orthogonal] |
| 134 | + rintro ⟨y, Uy⟩ hy |
| 135 | + simp only [neg_zero, WithLp.prod_inner_apply, inner_zero_right, add_zero] |
| 136 | + exact hx y (mem_domain_of_mem_graph hy) |
| 137 | + |
| 138 | +/-- The adjoint of an unbounded operator, denoted as `U†`. -/ |
| 139 | +noncomputable def adjoint : UnboundedOperator HS where |
| 140 | + toLinearPMap := U.toLinearPMap.adjoint |
| 141 | + dense_domain := adjoint_isClosable_dense U.toLinearPMap U.dense_domain U.is_closable |
| 142 | + is_closable := IsClosed.isClosable (adjoint_isClosed U.dense_domain) |
| 143 | + |
| 144 | +@[inherit_doc] |
| 145 | +scoped postfix:1024 "†" => UnboundedOperator.adjoint |
| 146 | + |
| 147 | +noncomputable instance instStar : Star (UnboundedOperator HS) where |
| 148 | + star := fun U ↦ U.adjoint |
| 149 | + |
| 150 | +@[simp] |
| 151 | +lemma adjoint_toLinearPMap : U†.toLinearPMap = U.toLinearPMap† := rfl |
| 152 | + |
| 153 | +lemma isSelfAdjoint_def : IsSelfAdjoint U ↔ U† = U := Iff.rfl |
| 154 | + |
| 155 | +lemma isSelfAdjoint_iff : IsSelfAdjoint U ↔ IsSelfAdjoint U.toLinearPMap := by |
| 156 | + rw [isSelfAdjoint_def, LinearPMap.isSelfAdjoint_def, ← adjoint_toLinearPMap, |
| 157 | + UnboundedOperator.ext_iff'] |
| 158 | + |
| 159 | +lemma adjoint_isClosed : (U†).IsClosed := LinearPMap.adjoint_isClosed U.dense_domain |
| 160 | + |
| 161 | +lemma closure_adjoint_eq_adjoint : U.closure† = U† := by |
| 162 | + -- Reduce to statement about graphs using density and closability assumptions |
| 163 | + apply UnboundedOperator.ext' |
| 164 | + apply LinearPMap.eq_of_eq_graph |
| 165 | + rw [adjoint_toLinearPMap, adjoint_graph_eq_graph_adjoint U.closure.dense_domain] |
| 166 | + rw [adjoint_toLinearPMap, adjoint_graph_eq_graph_adjoint U.dense_domain] |
| 167 | + rw [closure_toLinearPMap, ← IsClosable.graph_closure_eq_closure_graph U.is_closable] |
| 168 | + ext f |
| 169 | + rw [mem_submodule_closure_adjoint_iff_mem_submoduleToLp_closure_orthogonal, |
| 170 | + orthogonal_closure, mem_submodule_adjoint_iff_mem_submoduleToLp_orthogonal] |
| 171 | + |
| 172 | +lemma adjoint_adjoint_eq_closure : U†† = U.closure := by |
| 173 | + -- Reduce to statement about graphs using density and closability assumptions |
| 174 | + apply UnboundedOperator.ext' |
| 175 | + apply LinearPMap.eq_of_eq_graph |
| 176 | + rw [adjoint_toLinearPMap, adjoint_graph_eq_graph_adjoint U†.dense_domain] |
| 177 | + rw [adjoint_toLinearPMap, adjoint_graph_eq_graph_adjoint U.dense_domain] |
| 178 | + rw [closure_toLinearPMap, ← IsClosable.graph_closure_eq_closure_graph U.is_closable] |
| 179 | + ext f |
| 180 | + rw [mem_submodule_adjoint_adjoint_iff_mem_submoduleToLp_orthogonal_orthogonal, |
| 181 | + orthogonal_orthogonal_eq_closure, mem_submodule_closure_iff_mem_submoduleToLp_closure] |
| 182 | + |
| 183 | +end Adjoints |
| 184 | + |
| 185 | +/-! |
| 186 | +### Generalized eigenvectors |
| 187 | +-/ |
| 188 | + |
| 189 | +/-- A map `F : D(U) →L[ℂ] ℂ` is a generalized eigenvector of an unbounded operator `U` |
| 190 | + if there is an eigenvalue `c` such that for all `ψ ∈ D(U)`, `F (U ψ) = c ⬝ F ψ`. -/ |
| 191 | +def IsGeneralizedEigenvector (F : U.domain →L[ℂ] ℂ) (c : ℂ) : Prop := |
| 192 | + ∀ ψ : U.domain, ∃ ψ' : U.domain, ψ' = U.toFun ψ ∧ F ψ' = c • F ψ |
| 193 | + |
| 194 | +lemma isGeneralizedEigenvector_ofSymmetric_iff |
| 195 | + {f : E →ₗ[ℂ] E} (hf : f.IsSymmetric) (F : E →L[ℂ] ℂ) (c : ℂ) : |
| 196 | + IsGeneralizedEigenvector (ofSymmetric (hE := hE) f hf) F c ↔ ∀ ψ : E, F (f ψ) = c • F ψ := by |
| 197 | + constructor <;> intro h ψ |
| 198 | + · obtain ⟨ψ', hψ', hψ''⟩ := h ψ |
| 199 | + apply SetLike.coe_eq_coe.mp at hψ' |
| 200 | + subst hψ' |
| 201 | + exact hψ'' |
| 202 | + · use f ψ |
| 203 | + exact ⟨by simp, h ψ⟩ |
| 204 | + |
| 205 | +end UnboundedOperator |
| 206 | +end QuantumMechanics |
0 commit comments