Imports
/- Copyright (c) 2026 Gregory J. Loges. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Adam Bornemann, Gregory J. Loges -/ module public import Physlib.Mathematics.InnerProductSpace.Submodule public import Physlib.Mathematics.LinearPMap public import Physlib.Meta.TODO.Basic

Unbounded operators

i. Overview

The appropriate mathematical objects for discussing operators in non-relativistic quantum mechanics are partially-defined linear map (LinearPMap) between complex Hilbert spaces, H →ₗ.[ℂ] H'. An import class of operators in NRQM are those which are both densely defined and closable, which we refer to as unbounded. When H = H' operators may also be symmetric, self-adjoint or essentially self-adjoint (closure is self-adjoint).

In this module we collect results on how the properties HasDenseDomain, IsUnbounded, IsSymmetric, IsSelfAdjoint and IsEssentiallySelfAdjoint interact with the basic algebraic operations, closure, adjoints, unitary conjugation and each other.

Notes

    Naming convention : Definitions of LinearPMaps for quantum mechanical unbounded operators should have a name of the form […]Operator and notation should use calligraphic capital letters, e.g. mulOperator f (𝓜 f) for the multiplication operator associated with the function f.

    Implementation : Although operators encountered in quantum mechanics are almost always unbounded, we opt to implement unbounded operators via the property IsUnbounded on LinearPMap rather than as a structure UnboundedOperator extending LinearPMap. The basic reason for this is that addition/subtraction and composition of unbounded operators in general does not result in another unbounded operator. This means, for example, that any attempt to define addition of UnboundedOperators would inevitably require introducing junk values that spoil associativity.

ii. Key results

Definitions

    HasDenseDomain : An operator U : H →ₗ.[ℂ] H' has dense domain if U.domain is dense in H.

    IsUnbounded : An operator is unbounded if it is both densely defined and closable.

    IsSymmetric : An operator T : H →ₗ.[ℂ] H is symmetric if ⟪T x, y⟫_ℂ = ⟪x, T y⟫_ℂ holds for all x y : T.domain.

    IsEssentiallySelfAdjoint : An operator T : H →ₗ.[ℂ] H is essentially self-adjoint if its closure is self-adjoint.

Results

    adjoint_add_le_add_adjoint : The inequality U₁† + U₂† ≤ (U₁ + U₂)† when U₁ + U₂ has dense domain.

    unitaryConj : The conjugation u A u⁻¹ : H' →ₗ.[ℂ] H' of A by a unitary u, with domain u (A.domain).

    IsFormalAdjoint.unitaryConj : Unitary conjugation preserves formal-adjoint pairs.

    HasDenseDomain.unitaryConj_dense_domain : If A has dense domain, then so does u A u⁻¹.

    unitaryConj_sub_smul_surjective : If A - z is surjective for a scalar z : ℂ, then so is u A u⁻¹ - z.

    adjoint_compRestricted_le_compRestricted_adjoint : The inequality U† ∘ᵣ V† ≤ (V ∘ᵣ U)† when V and V ∘ᵣ U have dense domain.

    IsUnbounded.adjoint : The adjoint of an unbounded operator is also unbounded.

    IsUnbounded.adjoint_closure_eq_adjoint : An unbounded operator and its closure have the same adjoint.

    IsUnbounded.adjoint_adjoint_eq_closure : An unbounded operator U satisfies U†† = U.closure.

    IsEssentiallySelfAdjoint.unique_self_adjoint_extension : The closure of an essentially self-adjoint unbounded operator is its unique self-adjoint extension.

iii. Table of contents

    A. Definitions

    B. Basic properties

      B.1. Dense domain

      B.2. Closability

      B.3. Adjoints

      B.4. Continuity / boundedness

      B.5. Unitary conjugation

    C. Classes of operators

      C.1. Unbounded operators

      C.2. Symmetric operators

      C.3. Self-adjoint operators

      C.4. Essentially self-adjoint operators

iv. References

    [Reed and Simon, Methods of Modern Mathematical Physics, Vol. I: Functional Analysis][Reed1972]

    [Konrad Schmüdgen, Unbounded Self-Adjoint Operators on Hilbert Space][Schmudgen2012]

TODO "Prove that `IsStarNormal (T : H →ₗ.[ℂ] H)` is equivalent to `T.domain = T†.domain` and `‖T x‖ = ‖T† x‖` for all `x ∈ T.domain`."TODO "Prove basic properties of `IsStarNormal (T : H →ₗ.[ℂ] H)`, paralleling those for `IsSelfAdjoint (T : H →ₗ.[ℂ] H)`."@[expose] public section

A. Definitions

See LinearPMap.instStar and LinearPMap.isSelfAdjoint_def for the definition of IsSelfAdjoint for LinearPMaps.

A LinearPMap U has dense domain iff U.domain is dense in H.

def HasDenseDomain (U : H →ₗ.[] H') : Prop := Dense (U.domain : Set H)
lemma hasDenseDomain_def : U.HasDenseDomain Dense (U.domain : Set H) := Iff.rfl

A LinearPMap is an unbounded operator iff it has dense domain and is closable.

def IsUnbounded (U : H →ₗ.[] H') : Prop := U.HasDenseDomain U.IsClosable
lemma isUnbounded_def : U.IsUnbounded U.HasDenseDomain U.IsClosable := Iff.rfl

A LinearPMap T is symmetric iff ⟪T x, y⟫_ℂ = ⟪x, T y⟫_ℂ for all x y : T.domain.

def IsSymmetric (T : H →ₗ.[] H) : Prop := T.IsFormalAdjoint T
lemma isSymmetric_def : T.IsSymmetric T.IsFormalAdjoint T := Iff.rfl

A LinearPMap is essentially self-adjoint iff its closure is self-adjoint.

def IsEssentiallySelfAdjoint [CompleteSpace H] (T : H →ₗ.[] H) : Prop := IsSelfAdjoint T.closure
lemma isEssentiallySelfAdjoint_def [CompleteSpace H] : T.IsEssentiallySelfAdjoint IsSelfAdjoint T.closure := Iff.rfllemma isStarNormal_def [CompleteSpace H] : IsStarNormal T T * T = T * T := isStarNormal_iff _

B. Basic properties

B.1. Dense domain

lemma HasDenseDomain.isUnbounded_iff_isClosable (h : U.HasDenseDomain) : U.IsUnbounded U.IsClosable := and_iff_right hlemma HasDenseDomain.closure (h : U.HasDenseDomain) : U.closure.HasDenseDomain := h.mono U.le_closure.1lemma closure_domain_le_domain_closure (U : H →ₗ.[] H') : U.closure.domain U.domain.closure := H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'U.closure.domain U.domain.closure H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:U.IsClosableU.closure.domain U.domain.closureH:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:¬U.IsClosableU.closure.domain U.domain.closure H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:U.IsClosableU.closure.domain U.domain.closure H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:U.IsClosableψ:H:ψ U.closure.domainψ U.domain.closure H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:U.IsClosableψ:H:ψ U.closure.domainφ:H'hψφ:(ψ, φ) U.graph.topologicalClosureψ U.domain.closure H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:U.IsClosableψ:H:ψ U.closure.domainφ:H'hψφ:(ψ, φ) U.graph.topologicalClosureb: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhb':Filter.Tendsto b Filter.atTop (nhds (ψ, φ))ψ U.domain.closure H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:U.IsClosableψ:H:ψ U.closure.domainφ:H'hψφ:(ψ, φ) U.graph.topologicalClosureb: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhb':Filter.Tendsto b Filter.atTop (nhds (ψ, φ))n:(fun n => (b n).1) n U.domain.toAddSubmonoid H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:U.IsClosableψ:H:ψ U.closure.domainφ:H'hψφ:(ψ, φ) U.graph.topologicalClosureb: H × H'hb':Filter.Tendsto b Filter.atTop (nhds (ψ, φ))n:hb: (n : ), (x : (b n).1 U.domain), U (b n).1, = (b n).2(fun n => (b n).1) n U.domain.toAddSubmonoid All goals completed! 🐙 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_cl:¬U.IsClosableU.closure.domain U.domain.closure All goals completed! 🐙lemma hasDenseDomain_iff_closure_hasDenseDomain : U.HasDenseDomain U.closure.HasDenseDomain := HasDenseDomain.closure, fun h dense_closure.mp (h.mono U.closure_domain_le_domain_closure)lemma HasDenseDomain.neg (h : U.HasDenseDomain) : (-U).HasDenseDomain := hlemma HasDenseDomain.smul (h : U.HasDenseDomain) (c : ) : (c U).HasDenseDomain := hlemma HasDenseDomain.add_of_le (h₁ : U₁.HasDenseDomain) (h_le : U₁.domain U₂.domain) : (U₁ + U₂).HasDenseDomain := h₁.mono (H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.HasDenseDomainh_le:U₁.domain U₂.domainU₁.domain (U₁ + U₂).domain All goals completed! 🐙)lemma HasDenseDomain.sub_of_le (h₁ : U₁.HasDenseDomain) (h_le : U₁.domain U₂.domain) : (U₁ - U₂).HasDenseDomain := h₁.mono (H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.HasDenseDomainh_le:U₁.domain U₂.domainU₁.domain (U₁ - U₂).domain All goals completed! 🐙)lemma HasDenseDomain.sum_of_le {E : Submodule H} (hE : Dense (E : Set H)) (h : a, E (W a).domain) : (sum W).HasDenseDomain := hE.mono (H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'α:Type u_4inst✝:Fintype αW:α H →ₗ.[] H'E:Submodule HhE:Dense Eh: (a : α), E (W a).domainE (sum W).domain All goals completed! 🐙)lemma HasDenseDomain.pow (h : T.HasDenseDomain) (h_range : x : T.domain, T x T.domain) (n : ) : (T ^ n).HasDenseDomain := H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hh:T.HasDenseDomainh_range: (x : T.domain), T x T.domainn:(T ^ n).HasDenseDomain H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hh:T.HasDenseDomainh_range: (x : T.domain), T x T.domainn:T.domain (T ^ n).domain induction n with H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hh:T.HasDenseDomainh_range: (x : T.domain), T x T.domainT.domain (T ^ 0).domain All goals completed! 🐙 H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hh:T.HasDenseDomainh_range: (x : T.domain), T x T.domainn:ih:T.domain (T ^ n).domainT.domain (T ^ (n + 1)).domain All goals completed! 🐙lemma pow_hasDenseDomain_of_le {n : } (h : (T ^ n).HasDenseDomain) {k : } (hle : k n) : (T ^ k).HasDenseDomain := h.mono <| pow_sub_mul_pow T hle compRestricted_domain_le _ _

U.rangeᗮ = U†.ker

c.f. LinearMap.orthogonal_range and ContinuousLinearMap.orthogonal_range

lemma HasDenseDomain.orthogonal_range [CompleteSpace H] (h : U.HasDenseDomain) : U.toFun.range = U.toFun.ker.map U.domain.subtype := H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainU.toFun.range = map U.domain.subtype U.toFun.ker H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'u U.toFun.range u map U.domain.subtype U.toFun.ker H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'(∀ u_1 U.toFun.range, u, u_1⟫_ = 0) (x : u U.domain), U u, = 0 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'(∀ u_1 U.toFun.range, u, u_1⟫_ = 0) (x : u U.domain), U u, = 0H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'(∃ (x : u U.domain), U u, = 0) u_1 U.toFun.range, u, u_1⟫_ = 0 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'(∀ u_1 U.toFun.range, u, u_1⟫_ = 0) (x : u U.domain), U u, = 0 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'h': u_1 U.toFun.range, u, u_1⟫_ = 0 (x : u U.domain), U u, = 0 exact mem_adjoint_domain_of_exists u 0, H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'h': u_1 U.toFun.range, u, u_1⟫_ = 0 (x : U.domain), 0, x⟫_ = u, U x⟫_ All goals completed! 🐙, adjoint_apply_eq h _ (H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'h': u_1 U.toFun.range, u, u_1⟫_ = 0 (x : U.domain), 0, x⟫_ = u, , U x⟫_ All goals completed! 🐙) H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'(∃ (x : u U.domain), U u, = 0) u_1 U.toFun.range, u, u_1⟫_ = 0 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:U.HasDenseDomainu:H'hu:u U.domainhu':U u, = 0v:H'x:U.domainhxv:U.toFun x = vu, v⟫_ = 0 All goals completed! 🐙

U†.kerᗮ = U.range.closure

lemma HasDenseDomain.orthogonal_adjoint_ker [CompleteSpace H] [CompleteSpace H'] (h : U.HasDenseDomain) : (U.toFun.ker.map U.domain.subtype) = U.toFun.range.closure := h.orthogonal_range orthogonal_orthogonal_eq_closure _

B.2. Closability

lemma IsClosed.closure_eq (h : U.IsClosed) : U.closure = U := eq_of_eq_graph (h.isClosable.graph_closure_eq_closure_graph h.submodule_topologicalClosure_eq)lemma IsClosable.isClosed_iff (h : U.IsClosable) : U.IsClosed U.closure = U := IsClosed.closure_eq, fun h' h' h.closure_isClosed

A LinearPMap with densely-defined formal adjoint is closable.

All goals completed! 🐙

A zero LinearPMap (any domain) is closable.

H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h_zero:U = 0x:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhb':Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x.1) Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x.2)hbn: (n : ), (b n).2 = 0x.2 = 0 All goals completed! 🐙
H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:U.IsClosablec:hc:NeZero cx:H × H'hx:x (c U).graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n (c U).graph.toAddSubmonoidhb':Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x.1) Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x.2)(∀ (n : ), (fun n => ((b n).1, c⁻¹ (b n).2)) n U.graph.toAddSubmonoid) Filter.Tendsto (fun n => ((b n).1, c⁻¹ (b n).2).1) Filter.atTop (nhds 0) Filter.Tendsto (fun n => ((b n).1, c⁻¹ (b n).2).2) Filter.atTop (nhds (c⁻¹ x.2)) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:U.IsClosablec:hc:NeZero cx:H × H'hx:x (c U).graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n (c U).graph.toAddSubmonoidhb':Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x.1) Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x.2)n:(fun n => ((b n).1, c⁻¹ (b n).2)) n U.graph.toAddSubmonoid H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:U.IsClosablec:hc:NeZero cx:H × H'hx:x (c U).graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n (c U).graph.toAddSubmonoidhb':Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x.1) Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x.2)n:u:(c U).domain × H'hu:u (c U).toFun.graphhu':((c U).domain.subtype.prodMap LinearMap.id) u = b n(fun n => ((b n).1, c⁻¹ (b n).2)) n U.graph.toAddSubmonoid H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:U.IsClosablec:hc:NeZero cx:H × H'hx:x (c U).graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n (c U).graph.toAddSubmonoidhb':Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x.1) Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x.2)n:u:(c U).domain × H'hu:u (c U).toFun.graphhu':((c U).domain.subtype.prodMap LinearMap.id) u = b n a, (h : a U.domain), a = (((c U).domain.subtype.prodMap LinearMap.id) u).1 U a, = c⁻¹ (((c U).domain.subtype.prodMap LinearMap.id) u).2 All goals completed! 🐙lemma IsClosable.smul_iff {c : } (hc : c 0) : (c U).IsClosable U.IsClosable := fun h one_smul U inv_mul_cancel₀ hc smul_smul c⁻¹ c U h.smul c⁻¹, fun h h.smul clemma neg_eq_neg_one_smul (U : H →ₗ.[] H') : -U = (-1 : ) U := ext (H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'(-U).domain = (-1 U).domain All goals completed! 🐙) (H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H' x : H hf : x (-U).domain hg : x (-1 U).domain⦄, (-U) x, hf = (-1 U) x, hg All goals completed! 🐙)@[aesop safe apply] lemma IsClosable.neg (h : U.IsClosable) : (-U).IsClosable := neg_eq_neg_one_smul U h.smul _All goals completed! 🐙

B.3. Adjoints

@[simp] lemma adjoint_one [CompleteSpace H] : (1 : H →ₗ.[] H) = 1 := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace Hinst✝:CompleteSpace H1 = 1 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace Hinst✝:CompleteSpace Hx:Hx 1.domain x domain 1H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace Hinst✝:CompleteSpace Hx:Hhf✝:x 1.domainhg✝:x domain 11 x, hf✝ = 1 x, hg✝ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace Hinst✝:CompleteSpace Hx:Hx 1.domain x domain 1 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace Hinst✝:CompleteSpace Hx:Hx 1.domain All goals completed! 🐙 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace Hinst✝:CompleteSpace Hx:Hhf✝:x 1.domainhg✝:x domain 11 x, hf✝ = 1 x, hg✝ All goals completed! 🐙

The adjoint of a zero LinearPMap (any domain) is zero (domain ).

lemma adjoint_of_zero [CompleteSpace H] (h_zero : U = 0) : U = 0 := H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0U = 0 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0U.domain = domain 0H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x:U.domainy:(domain 0)hxy:x = yU x = 0 y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0U.domain = domain 0 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x✝:H'x✝ U.domain x✝ domain 0 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x✝:H'x✝ U.domain exact (mem_adjoint_domain_iff _ _).mpr (continuous_of_const (H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x✝:H' (x y : U.domain), ((innerₛₗ ) x✝ ∘ₗ U.toFun) x = ((innerₛₗ ) x✝ ∘ₗ U.toFun) y All goals completed! 🐙)) H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x:U.domainy:(domain 0)hxy:x = yU x = 0 y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x:U.domainy:(domain 0)hxy:x = yh:U.HasDenseDomainU x = 0 yH:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x:U.domainy:(domain 0)hxy:x = yh:¬U.HasDenseDomainU x = 0 y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x:U.domainy:(domain 0)hxy:x = yh:U.HasDenseDomainU x = 0 y exact adjoint_apply_eq h x (H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x:U.domainy:(domain 0)hxy:x = yh:U.HasDenseDomain (x_1 : U.domain), 0 y, x_1⟫_ = x, U x_1⟫_ All goals completed! 🐙) H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh_zero:U = 0x:U.domainy:(domain 0)hxy:x = yh:¬U.HasDenseDomainU x = 0 y All goals completed! 🐙
@[simp] lemma adjoint_zero [CompleteSpace H] : (0 : H →ₗ.[] H') = 0 := adjoint_of_zero rfl@[simp] lemma adjoint_smul [CompleteSpace H] (U : H →ₗ.[] H') {c : } (hc : c 0) : (c U) = conj c U := H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0(c U) = (starRingEnd ) c U H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0(c U).domain = ((starRingEnd ) c U).domainH:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:(c U).domainy:((starRingEnd ) c U).domainhxy:x = y(c U) x = ((starRingEnd ) c U) y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0(c U).domain = ((starRingEnd ) c U).domain H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:H'x (c U).domain x ((starRingEnd ) c U).domain H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:H'(Continuous fun w => x, c U w⟫_) Continuous fun w => x, U w⟫_ exact Iff.trans (H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:H'(Continuous fun w => x, c U w⟫_) Continuous fun x_1 => c x, U x_1⟫_ All goals completed! 🐙) (continuous_const_smul_iff₀ hc) H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:(c U).domainy:((starRingEnd ) c U).domainhxy:x = y(c U) x = ((starRingEnd ) c U) y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:(c U).domainy:((starRingEnd ) c U).domainhxy:x = yh:U.HasDenseDomain(c U) x = ((starRingEnd ) c U) yH:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:(c U).domainy:((starRingEnd ) c U).domainhxy:x = yh:¬U.HasDenseDomain(c U) x = ((starRingEnd ) c U) y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:(c U).domainy:((starRingEnd ) c U).domainhxy:x = yh:U.HasDenseDomain(c U) x = ((starRingEnd ) c U) y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:(c U).domainy:((starRingEnd ) c U).domainhxy:x = yh:U.HasDenseDomainw:(c U).domain((starRingEnd ) c U) y, w⟫_ = x, (c U) w⟫_ All goals completed! 🐙 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'c:hc:c 0x:(c U).domainy:((starRingEnd ) c U).domainhxy:x = yh:¬U.HasDenseDomain(c U) x = ((starRingEnd ) c U) y All goals completed! 🐙@[simp] lemma adjoint_neg [CompleteSpace H] (U : H →ₗ.[] H') : (-U) = -U := H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU:H →ₗ.[] H'(-U) = -U All goals completed! 🐙All goals completed! 🐙lemma adjoint_add_le_add_adjoint [CompleteSpace H] (U₁ U₂ : H →ₗ.[] H') (h₁₂ : (U₁ + U₂).HasDenseDomain) : U₁ + U₂ (U₁ + U₂) := H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainU₁ + U₂ (U₁ + U₂) H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainU₁ + U₂ (U₁ + U₂) H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainU₁ + U₂ (U₁ + U₂) H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomain(U₁ + U₂).domain (U₁ + U₂).domainH:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomain x : (U₁ + U₂).domain y : (U₁ + U₂).domain⦄, x = y (U₁ + U₂) x = (U₁ + U₂) y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomain(U₁ + U₂).domain (U₁ + U₂).domain H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainu:H'hu:u (U₁ + U₂).domainu (U₁ + U₂).domain H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainu:H'hu:u (U₁ + U₂).domainx:(U₁ + U₂).domainU₁ u, + U₂ u, , x⟫_ = u, (U₁ + U₂) x⟫_ All goals completed! 🐙 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomain x : (U₁ + U₂).domain y : (U₁ + U₂).domain⦄, x = y (U₁ + U₂) x = (U₁ + U₂) y H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainu:(U₁ + U₂).domainv:(U₁ + U₂).domainhuv:u = v(U₁ + U₂) u = (U₁ + U₂) v H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ + U₂).HasDenseDomainh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainu:(U₁ + U₂).domainv:(U₁ + U₂).domainhuv:u = vw:(U₁ + U₂).domain(U₁ + U₂) u, w⟫_ = v, (U₁ + U₂) w⟫_ All goals completed! 🐙lemma adjoint_sub_le_sub_adjoint [CompleteSpace H] (U₁ U₂ : H →ₗ.[] H') (h₁₂ : (U₁ - U₂).HasDenseDomain) : U₁ - U₂ (U₁ - U₂) := H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ - U₂).HasDenseDomainU₁ - U₂ (U₁ - U₂) H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'inst✝:CompleteSpace HU₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁₂:(U₁ - U₂).HasDenseDomainU₁ + (-U₂) (U₁ + -U₂) All goals completed! 🐙H:Type u_1inst✝⁷:NormedAddCommGroup Hinst✝⁶:InnerProductSpace HH':Type u_2inst✝⁵:NormedAddCommGroup H'inst✝⁴:InnerProductSpace H'H'':Type u_3inst✝³:NormedAddCommGroup H''inst✝²:InnerProductSpace H''U:H →ₗ.[] H'V:H' →ₗ.[] H''inst✝¹:CompleteSpace Hinst✝:CompleteSpace H'hV:V.HasDenseDomainhVU:(V ∘ᵣ U).HasDenseDomainhU:U.HasDenseDomainh:(U ∘ᵣ V).IsFormalAdjoint (V ∘ᵣ U)U ∘ᵣ V (V ∘ᵣ U) All goals completed! 🐙lemma adjoint_pow_le_pow_adjoint [CompleteSpace H] {n : } (h : (T ^ n).HasDenseDomain) : T ^ n (T ^ n) := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hn:h:(T ^ n).HasDenseDomainT ^ n (T ^ n) induction n with H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:(T ^ 0).HasDenseDomainT ^ 0 (T ^ 0) All goals completed! 🐙 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hn:ih:(T ^ n).HasDenseDomain T ^ n (T ^ n)h:(T ^ (n + 1)).HasDenseDomainT ^ (n + 1) (T ^ (n + 1)) H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hn:ih:(T ^ n).HasDenseDomain T ^ n (T ^ n)h:(T ^ (n + 1)).HasDenseDomainhTn:(T ^ n).HasDenseDomainT ^ (n + 1) (T ^ (n + 1)) H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hn:ih:(T ^ n).HasDenseDomain T ^ n (T ^ n)h:(T ^ (n + 1)).HasDenseDomainhTn:(T ^ n).HasDenseDomainT ^ (n + 1) T ∘ᵣ (npowRec n T) All goals completed! 🐙

B.4. Continuity / boundedness

f : E →ₗ[𝕜] F is continuous iff there exists M > 0 s.t. ‖f x‖ ≤ M * ‖x‖ for all x : E.

This is a (convenient) immediate consequence of IsBoundedLinearMap.isLinearMap_and_continuous_iff_isBoundedLinearMap.

𝕜:Type u_5E:Type u_6F:Type u_7inst✝⁴:NontriviallyNormedField 𝕜inst✝³:SeminormedAddCommGroup Einst✝²:NormedSpace 𝕜 Einst✝¹:SeminormedAddCommGroup Finst✝:NormedSpace 𝕜 Ff:E →ₗ[𝕜] FIsLinearMap 𝕜 f Continuous f IsBoundedLinearMap 𝕜 f All goals completed! 🐙

Continuous operators are closable.

H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)x.2 = 0 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)Filter.Tendsto (fun x => (b x).2) Filter.atTop (nhds 0) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)M:hM:0 < Mh_bound: (x : U.domain), U.toFun x M * xFilter.Tendsto (fun x => (b x).2) Filter.atTop (nhds 0) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)M:hM:0 < Mh_bound: (x : U.domain), U.toFun x M * xn:(b n).2 M * (b n).1H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)M:hM:0 < Mh_bound: (x : U.domain), U.toFun x M * xFilter.Tendsto (fun n => M * (b n).1) Filter.atTop (nhds 0) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)M:hM:0 < Mh_bound: (x : U.domain), U.toFun x M * xn:(b n).2 M * (b n).1 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)M:hM:0 < Mh_bound: (x : U.domain), U.toFun x M * xn:y:U.domainhy₁:y = (b n).1hy₂:U y = (b n).2(b n).2 M * (b n).1 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)M:hM:0 < Mh_bound: (x : U.domain), U.toFun x M * xn:y:U.domainhy₁:y = (b n).1hy₂:U y = (b n).2U y M * y All goals completed! 🐙 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'h:Continuous Ux:H × H'hx:x U.graph.topologicalClosurehx₁:x.1 = 0b: H × H'hb: (n : ), b n U.graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds x.1 ×ˢ nhds x.2)M:hM:0 < Mh_bound: (x : U.domain), U.toFun x M * xFilter.Tendsto (fun n => M * (b n).1) Filter.atTop (nhds 0) All goals completed! 🐙

A strengthening of closure_domain_le_domain_closure for continuous operators.

H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Ux:Hhx:x U.domain.closureM:hM:0 < Mh_bound: (x : U.domain), U.toFun x M * xb: Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb: (n : ), b n U.domainUb: H' := fun n => U b n, hCS:CauchySeq Uby:H'hy:Filter.map Ub Filter.atTop nhds yFilter.Tendsto (fun n => (b n, Ub n)) Filter.atTop (nhds x ×ˢ nhds y) All goals completed! 🐙

A continuous operator is closed iff its domain is closed.

H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous UU.closure = U _root_.IsClosed U.domain H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closureU.closure = U _root_.IsClosed U.domain H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closureU.closure = U _root_.IsClosed U.domainH:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closure_root_.IsClosed U.domain U.closure = U H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closureU.closure = U _root_.IsClosed U.domainH:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closure_root_.IsClosed U.domain U.closure = U H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closurehcl:_root_.IsClosed U.domainU.closure = U H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closurehcl:U.closure = U_root_.IsClosed U.domain All goals completed! 🐙 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closurehcl:_root_.IsClosed U.domainU.closure = U H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace H'h:Continuous Uh_domain:U.closure.domain = U.domain.closurehcl:_root_.IsClosed U.domainU.domain = U.closure.domain All goals completed! 🐙
H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'hU:U.IsClosedx✝:U.domain × H'x₁:U.domainx₂:H'hx:(x₁, x₂) _root_.closure U.toFun.graphb: U.domain × H'hb: (n : ), b n U.toFun.graphhbx:Filter.Tendsto b Filter.atTop (nhds x₁ ×ˢ nhds x₂) x, (∀ (n : ), x n U.graph.toAddSubmonoid) Filter.Tendsto x Filter.atTop (nhds x₁ ×ˢ nhds x₂) refine fun n ((b n).1, (b n).2), H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U:H →ₗ.[] H'hU:U.IsClosedx✝:U.domain × H'x₁:U.domainx₂:H'hx:(x₁, x₂) _root_.closure U.toFun.graphb: U.domain × H'hb: (n : ), b n U.toFun.graphhbx:Filter.Tendsto b Filter.atTop (nhds x₁ ×ˢ nhds x₂) (n : ), (fun n => ((b n).1, (b n).2)) n U.graph.toAddSubmonoid All goals completed! 🐙, Filter.Tendsto.prodMk (tendsto_subtype_rng.mp hbx.fst) hbx.snd

The closed graph theorem for partial linear maps: a closed operator with closed domain is continuous.

This follows immediately from LinearMap.continuous_of_isClosed_graph and the completeness of H and H'.

lemma IsClosed.continuous_of_isClosed_domain [CompleteSpace H] [CompleteSpace H'] (hU : U.IsClosed) (h : _root_.IsClosed (U.domain : Set H)) : Continuous U := H:Type u_1inst✝⁵:NormedAddCommGroup Hinst✝⁴:InnerProductSpace HH':Type u_2inst✝³:NormedAddCommGroup H'inst✝²:InnerProductSpace H'U:H →ₗ.[] H'inst✝¹:CompleteSpace Hinst✝:CompleteSpace H'hU:U.IsClosedh:_root_.IsClosed U.domainContinuous U H:Type u_1inst✝⁵:NormedAddCommGroup Hinst✝⁴:InnerProductSpace HH':Type u_2inst✝³:NormedAddCommGroup H'inst✝²:InnerProductSpace H'U:H →ₗ.[] H'inst✝¹:CompleteSpace Hinst✝:CompleteSpace H'hU:U.IsClosedh:_root_.IsClosed U.domainthis:CompleteSpace U.domainContinuous U All goals completed! 🐙

Closability is preserved upon adding a continuous operator.

H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosure(0, (0, x₂).2) U₁.graph.topologicalClosure H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosure x, (∀ (n : ), x n U₁.graph.toAddSubmonoid) Filter.Tendsto x Filter.atTop (nhds (0, (0, x₂).2)) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hb: (n : ), b n (U₁ + U₂).graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds (0, x₂)) x, (∀ (n : ), x n U₁.graph.toAddSubmonoid) Filter.Tendsto x Filter.atTop (nhds (0, (0, x₂).2)) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hb: (n : ), (x : (b n).1 U₁.domain U₂.domain), U₁ (b n).1, + U₂ (b n).1, = (b n).2hbx:Filter.Tendsto b Filter.atTop (nhds 0 ×ˢ nhds x₂) x, (∀ (n : ), (x_1 : (x n).1 U₁.domain), U₁ (x n).1, = (x n).2) Filter.Tendsto x Filter.atTop (nhds 0 ×ˢ nhds x₂) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hb: (n : ), (x : (b n).1 U₁.domain U₂.domain), U₁ (b n).1, + U₂ (b n).1, = (b n).2hbx:Filter.Tendsto b Filter.atTop (nhds 0 ×ˢ nhds x₂)n: (x : ((fun n => ((b n).1, (b n).2 - U₂ (b n).1, )) n).1 U₁.domain), U₁ ((fun n => ((b n).1, (b n).2 - U₂ (b n).1, )) n).1, = ((fun n => ((b n).1, (b n).2 - U₂ (b n).1, )) n).2H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hb: (n : ), (x : (b n).1 U₁.domain U₂.domain), U₁ (b n).1, + U₂ (b n).1, = (b n).2hbx:Filter.Tendsto b Filter.atTop (nhds 0 ×ˢ nhds x₂)Filter.Tendsto (fun n => ((b n).1, (b n).2 - U₂ (b n).1, )) Filter.atTop (nhds 0 ×ˢ nhds x₂) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hb: (n : ), (x : (b n).1 U₁.domain U₂.domain), U₁ (b n).1, + U₂ (b n).1, = (b n).2hbx:Filter.Tendsto b Filter.atTop (nhds 0 ×ˢ nhds x₂)n: (x : ((fun n => ((b n).1, (b n).2 - U₂ (b n).1, )) n).1 U₁.domain), U₁ ((fun n => ((b n).1, (b n).2 - U₂ (b n).1, )) n).1, = ((fun n => ((b n).1, (b n).2 - U₂ (b n).1, )) n).2 All goals completed! 🐙 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hb: (n : ), (x : (b n).1 U₁.domain U₂.domain), U₁ (b n).1, + U₂ (b n).1, = (b n).2hbx:Filter.Tendsto b Filter.atTop (nhds 0 ×ˢ nhds x₂)Filter.Tendsto (fun n => ((b n).1, (b n).2 - U₂ (b n).1, )) Filter.atTop (nhds 0 ×ˢ nhds x₂) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hb: (n : ), (x : (b n).1 U₁.domain U₂.domain), U₁ (b n).1, + U₂ (b n).1, = (b n).2hbx:Filter.Tendsto b Filter.atTop (nhds 0 ×ˢ nhds x₂)Filter.Tendsto (fun n => (b n).2 - U₂ (b n).1, ) Filter.atTop (nhds x₂) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'h₁:U₁.IsClosableh₂:Continuous U₂h:U₁.domain U₂.domainx✝:H × H'x₂:H'hx:(0, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hb: (n : ), (x : (b n).1 U₁.domain U₂.domain), U₁ (b n).1, + U₂ (b n).1, = (b n).2hbx:Filter.Tendsto b Filter.atTop (nhds 0 ×ˢ nhds x₂)Filter.Tendsto (fun n => U₂ (b n).1, ) Filter.atTop (nhds 0) All goals completed! 🐙

Closability is preserved upon subtracting a continuous operator.

lemma IsClosable.sub_continuous (h₁ : U₁.IsClosable) (h₂ : Continuous U₂) (h : U₁.domain U₂.domain) : (U₁ - U₂).IsClosable := sub_eq_add_neg U₁ U₂ h₁.add_continuous h₂.neg h

Closedness is preserved upon adding a continuous operator.

H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U₁:H →ₗ.[] H'U₂:H →ₗ.[] H'inst✝:CompleteSpace H'h₁:U₁.IsClosedh₂:Continuous U₂h:U₁.domain U₂.domainhcl:(U₁ + U₂).IsClosablex₁:Hx₂:H'hx:(x₁, x₂) (U₁ + U₂).graph.topologicalClosureb: H × H'hbx:Filter.Tendsto b Filter.atTop (nhds x₁ ×ˢ nhds x₂)hb: (n : ), (x : (b n).1 U₁.domain), (U₁ + U₂) (b n).1, = (b n).2hb₁U₂: (n : ), (b n).1 U₂.domainhCS:CauchySeq fun n => U₂ (b n).1, y:H'hy:Filter.map (fun n => U₂ (b n).1, ) Filter.atTop nhds yhU₁:(x₁, x₂ - y) U₁.graphhx₁:x₁ U₁.domainhU₂y:U₂ x₁, = y(x₁, x₂) (U₁ + U₂).graph All goals completed! 🐙

Closedness is preserved upon subtracting a continuous operator.

lemma IsClosed.sub_continuous [CompleteSpace H'] (h₁ : U₁.IsClosed) (h₂ : Continuous U₂) (h : U₁.domain U₂.domain) : (U₁ - U₂).IsClosed := sub_eq_add_neg U₁ U₂ h₁.add_continuous h₂.neg h
lemma adjoint_domain_of_continuous [CompleteSpace H] (h : Continuous U) : U.domain = := H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:Continuous UU.domain = H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:Continuous Ux✝:H'x✝ U.domain x✝ H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:Continuous Ux✝:H'Continuous ((fun w => x✝, w⟫_) U.toFun) exact Continuous.comp (H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace H'U:H →ₗ.[] H'inst✝:CompleteSpace Hh:Continuous Ux✝:H'Continuous fun w => x✝, w⟫_ All goals completed! 🐙) hH:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomain(T₁ + T₂) = T₁ + T₂ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainT₁ + T₂ (T₁ + T₂)H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomain(T₁ + T₂).domain = (T₁ + T₂).domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainT₁ + T₂ (T₁ + T₂) All goals completed! 🐙 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomain(T₁ + T₂).domain = (T₁ + T₂).domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hx (T₁ + T₂).domain x (T₁ + T₂).domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hx T₁.domain x (T₁ + T₂).domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hx T₁.domain x (T₁ + T₂).domainH:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hx (T₁ + T₂).domain x T₁.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hx T₁.domain x (T₁ + T₂).domainH:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hx (T₁ + T₂).domain x T₁.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x (T₁ + T₂).domainx T₁.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x T₁.domainx (T₁ + T₂).domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x T₁.domain w, (x_1 : (T₁ + T₂).domain), w, x_1⟫_ = x, (T₁ + T₂) x_1⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x T₁.domain (x_1 : (T₁ + T₂).domain), T₁ x, h' + T₂ x, , x_1⟫_ = x, (T₁ + T₂) x_1⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x T₁.domainy:(T₁ + T₂).domainT₁ x, h' + T₂ x, , y⟫_ = x, (T₁ + T₂) y⟫_ All goals completed! 🐙 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x (T₁ + T₂).domainx T₁.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x (T₁ + T₂).domain w, (x_1 : T₁.domain), w, x_1⟫_ = x, T₁ x_1⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x (T₁ + T₂).domain (x_1 : T₁.domain), (T₁ + T₂) x, h' - T₂ x, , x_1⟫_ = x, T₁ x_1⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domainh₂':T₂.domain = h₁₂:(T₁ + T₂).HasDenseDomainx:Hh':x (T₁ + T₂).domainy:T₁.domain(T₁ + T₂) x, h' - T₂ x, , y⟫_ = x, T₁ y⟫_ All goals completed! 🐙lemma HasDenseDomain.adjoint_sub_continuous [CompleteSpace H] (h₁ : T₁.HasDenseDomain) (h₂ : Continuous T₂) (h : T₁.domain T₂.domain) : (T₁ - T₂) = T₁ - T₂ := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domain(T₁ - T₂) = T₁ - T₂ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hinst✝:CompleteSpace Hh₁:T₁.HasDenseDomainh₂:Continuous T₂h:T₁.domain T₂.domain(T₁ + -T₂) = T₁ + (-T₂) All goals completed! 🐙

B.5. Unitary conjugation

The conjugation u A u⁻¹ of a partially-defined operator A : H →ₗ.[ℂ] H by a unitary u : H ≃ₗᵢ[ℂ] H', with domain u (A.domain) = u⁻¹ ⁻¹' (A.domain) and action y ↦ u (A (u⁻¹ y)). Since u and u⁻¹ are -linear, the result is again -linear.

def unitaryConj : H' →ₗ.[] H' where domain := A.domain.comap (u.symm.toLinearEquiv : H' →ₗ[] H) toFun := u.toLinearEquiv.toLinearMap.comp <| A.toFun.comp (((u.symm.toLinearEquiv : H' →ₗ[] H).comp (A.domain.comap (u.symm.toLinearEquiv : H' →ₗ[] H)).subtype).codRestrict A.domain fun x => x.2)

Membership in the conjugated domain: x ∈ D(u A u⁻¹) ↔ u⁻¹ x ∈ D(A).

lemma mem_unitaryConj_domain_iff {x : H'} : x (unitaryConj u A).domain u.symm x A.domain := Iff.rfl

The defining formula (u A u⁻¹) x = u (A (u⁻¹ x)).

lemma unitaryConj_apply (x : (unitaryConj u A).domain) : unitaryConj u A x = u (A u.symm (x : H'), (mem_unitaryConj_domain_iff u A).mp x.2) := rfl

u maps D(A) into D(u A u⁻¹).

lemma map_mem_unitaryConj_domain (y : A.domain) : u (y : H) (unitaryConj u A).domain := H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'u:H ≃ₗᵢ[] H'A:H →ₗ.[] Hy:A.domainu y (unitaryConj u A).domain All goals completed! 🐙

The action on the image domain: (u A u⁻¹)(u y) = u (A y) for y ∈ D(A).

lemma unitaryConj_apply_map (y : A.domain) : unitaryConj u A u (y : H), map_mem_unitaryConj_domain u A y = u (A y) := H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace H'u:H ≃ₗᵢ[] H'A:H →ₗ.[] Hy:A.domain(unitaryConj u A) u y, = u (A y) All goals completed! 🐙

If A has dense domain, then so does u A u⁻¹: the domain u⁻¹ ⁻¹' (A.domain) is the preimage of a dense set under a homeomorphism.

lemma HasDenseDomain.unitaryConj_dense_domain (hdense : A.HasDenseDomain) : (unitaryConj u A).HasDenseDomain := hdense.preimage u.symm.toHomeomorph.isOpenMap

If A - z is surjective for a scalar z : ℂ, then so is u A u⁻¹ - z.

All goals completed! 🐙

C. Classes of operators

C.1. Unbounded operators

lemma IsUnbounded.hasDenseDomain (h : U.IsUnbounded) : U.HasDenseDomain := h.1lemma IsUnbounded.isClosable (h : U.IsUnbounded) : U.IsClosable := h.2H:Type u_1inst✝⁵:NormedAddCommGroup Hinst✝⁴:InnerProductSpace HH':Type u_2inst✝³:NormedAddCommGroup H'inst✝²:InnerProductSpace H'U:H →ₗ.[] H'inst✝¹:CompleteSpace Hinst✝:CompleteSpace H'h:U.IsUnboundedh_adj:¬U.HasDenseDomainy:H'hy:y _root_.closure U.domainh_ne_bot:U.domain = Falsex:H'hx:x U.domainhx':x 0WithLp.toLp 2 ((0, x).2, -(0, x).1) (submoduleToLp U.graph) H:Type u_1inst✝⁵:NormedAddCommGroup Hinst✝⁴:InnerProductSpace HH':Type u_2inst✝³:NormedAddCommGroup H'inst✝²:InnerProductSpace H'U:H →ₗ.[] H'inst✝¹:CompleteSpace Hinst✝:CompleteSpace H'h:U.IsUnboundedh_adj:¬U.HasDenseDomainy✝:H'hy✝:y _root_.closure U.domainh_ne_bot:U.domain = Falsex:H'hx:x U.domainhx':x 0y:H'Uy:Hhy:WithLp.toLp 2 (y, Uy) submoduleToLp U.graphWithLp.toLp 2 (y, Uy), WithLp.toLp 2 ((0, x).2, -(0, x).1)⟫_ = 0 H:Type u_1inst✝⁵:NormedAddCommGroup Hinst✝⁴:InnerProductSpace HH':Type u_2inst✝³:NormedAddCommGroup H'inst✝²:InnerProductSpace H'U:H →ₗ.[] H'inst✝¹:CompleteSpace Hinst✝:CompleteSpace H'h:U.IsUnboundedh_adj:¬U.HasDenseDomainy✝:H'hy✝:y _root_.closure U.domainh_ne_bot:U.domain = Falsex:H'hx:x U.domainhx':x 0y:H'Uy:Hhy:WithLp.toLp 2 (y, Uy) submoduleToLp U.graphy, x⟫_ = 0 All goals completed! 🐙lemma IsUnbounded.closure (h : U.IsUnbounded) : U.closure.IsUnbounded := h.1.closure, h.2.closureIsClosableAll goals completed! 🐙All goals completed! 🐙lemma IsUnbounded.le_adjoint_adjoint [CompleteSpace H] [CompleteSpace H'] (h : U.IsUnbounded) : U U := h.adjoint_adjoint_eq_closure U.le_closurelemma IsUnbounded.isClosed_iff [CompleteSpace H] [CompleteSpace H'] (h : U.IsUnbounded) : U.IsClosed U = U := h.adjoint_adjoint_eq_closure h.2.isClosed_iff

U†.rangeᗮ = U.closure.ker

lemma IsUnbounded.orthogonal_adjoint_range [CompleteSpace H] [CompleteSpace H'] (h : U.IsUnbounded) : U.toFun.range = U.closure.toFun.ker.map U.closure.domain.subtype := h.adjoint_adjoint_eq_closure h.adjoint.hasDenseDomain.orthogonal_range

U.closure.kerᗮ = U†.range

lemma IsUnbounded.orthogonal_closure_ker [CompleteSpace H] [CompleteSpace H'] (h : U.IsUnbounded) : (U.closure.toFun.ker.map U.closure.domain.subtype) = U.toFun.range.closure := h.adjoint_adjoint_eq_closure h.adjoint.hasDenseDomain.orthogonal_adjoint_ker

C.2. Symmetric operators

The analogue of inner_map_polarization for LinearPMap.

lemma inner_map_polarization (x y : T.domain) : T y, x⟫_ = (T (x + y), (x + y)⟫_ - T (x - y), (x - y)⟫_ + I * T (x + I y), (x + I y)⟫_ - I * T (x - I y), (x - I y)⟫_) / 4 := H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hx:T.domainy:T.domainT y, x⟫_ = (T (x + y), (x + y)⟫_ - T (x - y), (x - y)⟫_ + I * T (x + I y), (x + I y)⟫_ - I * T (x - I y), (x - I y)⟫_) / 4 H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hx:T.domainy:T.domainT y, x⟫_ = (T x, x⟫_ + T y, x⟫_ + (T x, y⟫_ + T y, y⟫_) - (T x, x⟫_ - (T y, x⟫_ + (T x, y⟫_ - T y, y⟫_))) + (I * T x, x⟫_ + T y, x⟫_ + (-T x, y⟫_ + I * T y, y⟫_)) - (I * T x, x⟫_ + -T y, x⟫_ - (-T x, y⟫_ + -(I * T y, y⟫_)))) / 4 All goals completed! 🐙

The analogue of inner_map_polarization' for LinearPMap.

theorem inner_map_polarization' (x y : T.domain) : T x, y⟫_ = (T (x + y), (x + y)⟫_ - T (x - y), (x - y)⟫_ - I * T (x + I y), (x + I y)⟫_ + I * T (x - I y), (x - I y)⟫_) / 4 := H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hx:T.domainy:T.domainT x, y⟫_ = (T (x + y), (x + y)⟫_ - T (x - y), (x - y)⟫_ - I * T (x + I y), (x + I y)⟫_ + I * T (x - I y), (x - I y)⟫_) / 4 H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hx:T.domainy:T.domainT x, y⟫_ = (T x, x⟫_ + T y, x⟫_ + (T x, y⟫_ + T y, y⟫_) - (T x, x⟫_ - (T y, x⟫_ + (T x, y⟫_ - T y, y⟫_)) + (I * T x, x⟫_ + T y, x⟫_ + (-T x, y⟫_ + I * T y, y⟫_))) + (I * T x, x⟫_ + -T y, x⟫_ - (-T x, y⟫_ + -(I * T y, y⟫_)))) / 4 All goals completed! 🐙
H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hh_re: (x : T.domain), (starRingEnd ) T x, x⟫_ = T x, x⟫_x:T.domainy:T.domain(T (x + y), (x + y)⟫_ - T (x - y), (x - y)⟫_ - I * T (x + I y), (x + I y)⟫_ + I * T (x - I y), (x - I y)⟫_) / 4 = (T (x + y), (x + y)⟫_ - T (x - y), (x - y)⟫_ + -(I * T (x + I y), (x + I y)⟫_) - -(I * T (x - I y), (x - I y)⟫_)) / 4 All goals completed! 🐙lemma IsSymmetric.isClosable [CompleteSpace H] (h : T.IsSymmetric) (h' : T.HasDenseDomain) : T.IsClosable := isClosable_iff_exists_closed_extension.mpr T, adjoint_isClosed h', h.le_adjoint h'lemma IsSymmetric.isUnbounded_iff_hasDenseDomain [CompleteSpace H] (h : T.IsSymmetric) : T.IsUnbounded T.HasDenseDomain := and_iff_left_of_imp h.isClosablelemma isSymmetric_iff_le_adjoint [CompleteSpace H] (h : T.HasDenseDomain) : T.IsSymmetric T T := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomainT.IsSymmetric T T H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomainh_le:T Tx:T.domainy:T.domainT x, y⟫_ = x, T y⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomainh_le:T Tx:T.domainy:T.domainh_eq:T x = T x, T x, y⟫_ = x, T y⟫_ All goals completed! 🐙lemma IsSymmetric.closure_le_adjoint [CompleteSpace H] (h : T.IsSymmetric) (h' : T.HasDenseDomain) : T.closure T := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainT.closure T H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh_adj:T.IsClosedT.closure T All goals completed! 🐙H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainT = T.closure T.domain = T.closure.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainT = T.closure T.domain = T.closure.domainH:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainT.domain = T.closure.domain T = T.closure H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainT = T.closure T.domain = T.closure.domainH:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainT.domain = T.closure.domain T = T.closure H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T.domain = T.closure.domainT = T.closure H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T = T.closureT.domain = T.closure.domain All goals completed! 🐙 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T.domain = T.closure.domainT = T.closure All goals completed! 🐙lemma IsSymmetric.isSelfAdjoint_iff [CompleteSpace H] (h : T.IsSymmetric) (h' : T.HasDenseDomain) : IsSelfAdjoint T T.domain = T.domain := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainIsSelfAdjoint T T.domain = T.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainIsSelfAdjoint T T.domain = T.domainH:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainT.domain = T.domain IsSelfAdjoint T H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainIsSelfAdjoint T T.domain = T.domainH:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainT.domain = T.domain IsSelfAdjoint T H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T.domain = T.domainIsSelfAdjoint T H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':IsSelfAdjoint TT.domain = T.domain All goals completed! 🐙 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T.domain = T.domainIsSelfAdjoint T All goals completed! 🐙lemma add_adjoint_isSymmetric [CompleteSpace H] (h : T.HasDenseDomain) : (T + T.adjoint).IsSymmetric := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomain(T + T).IsSymmetric H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomainx:(T + T).domainy:(T + T).domain(T + T) x, y⟫_ = x, (T + T) y⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomainx:(T + T).domainy:(T + T).domainh₁:T x, , y, ⟫_ = x, , T y, ⟫_(T + T) x, y⟫_ = x, (T + T) y⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomainx:(T + T).domainy:(T + T).domainh₁:T x, , y, ⟫_ = x, , T y, ⟫_h₂:(starRingEnd ) T y, , x, ⟫_ = (starRingEnd ) y, , T x, ⟫_(T + T) x, y⟫_ = x, (T + T) y⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomainx:(T + T).domainy:(T + T).domainh₁:T x, , y, ⟫_ = x, , T y, ⟫_h₂:x, T y, ⟫_ = T x, , y⟫_(T + T) x, y⟫_ = x, (T + T) y⟫_ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.HasDenseDomainx:(T + T).domainy:(T + T).domainh₁:T x, , y, ⟫_ = x, , T y, ⟫_h₂:x, T y, ⟫_ = T x, , y⟫_T x, , y⟫_ + x, T y, ⟫_ = x, T y, ⟫_ + T x, , y⟫_ All goals completed! 🐙H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hh:T.IsSymmetricn:ih:(T ^ n).IsSymmetricx:(T ^ (n + 1)).domainy:(T ^ (n + 1)).domainy':(T * T ^ n).domain := y, Tx:(T ^ n).domain := T x, , Tny:T.domain := (T ^ n) y', , h_eq:T Tny = (T ^ (n + 1)) y(T ^ (n + 1)) x, y⟫_ = x, (T ^ (n + 1)) y⟫_ All goals completed! 🐙@[aesop safe apply] lemma IsSymmetric.neg (h : T.IsSymmetric) : (-T).IsSymmetric := fun x y H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hh:T.IsSymmetricx:(-T).domainy:(-T).domain(-T) x, y⟫_ = x, (-T) y⟫_ All goals completed! 🐙@[aesop safe apply] lemma IsSymmetric.add (h₁ : T₁.IsSymmetric) (h₂ : T₂.IsSymmetric) : (T₁ + T₂).IsSymmetric := H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hh₁:T₁.IsSymmetrich₂:T₂.IsSymmetric(T₁ + T₂).IsSymmetric H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hh₁:T₁.IsSymmetrich₂:T₂.IsSymmetricx:(T₁ + T₂).domainy:(T₁ + T₂).domain(T₁ + T₂) x, y⟫_ = x, (T₁ + T₂) y⟫_ All goals completed! 🐙@[aesop safe apply] lemma IsSymmetric.sub (h₁ : T₁.IsSymmetric) (h₂ : T₂.IsSymmetric) : (T₁ - T₂).IsSymmetric := sub_eq_add_neg T₁ T₂ h₁.add h₂.neg@[aesop safe apply] lemma IsSymmetric.smul (h : T.IsSymmetric) {c : } (hc : conj c = c) : (c T).IsSymmetric := fun x y H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT:H →ₗ.[] Hh:T.IsSymmetricc:hc:(starRingEnd ) c = cx:(c T).domainy:(c T).domain(c T) x, y⟫_ = x, (c T) y⟫_ All goals completed! 🐙@[aesop safe apply] lemma IsSymmetric.real_smul (h : T.IsSymmetric) (r : ) : (r T).IsSymmetric := h.smul (conj_ofReal r)@[aesop safe apply] lemma IsSymmetric.sum (h : a, (S a).IsSymmetric) : (sum S).IsSymmetric := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace Hα:Type u_4inst✝:Fintype αS:α H →ₗ.[] Hh: (a : α), (S a).IsSymmetric(LinearPMap.sum S).IsSymmetric H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace Hα:Type u_4inst✝:Fintype αS:α H →ₗ.[] Hh: (a : α), (S a).IsSymmetricx:(LinearPMap.sum S).domainy:(LinearPMap.sum S).domain(LinearPMap.sum S) x, y⟫_ = x, (LinearPMap.sum S) y⟫_ All goals completed! 🐙lemma IsSymmetric.of_le (h₁ : T₁.IsSymmetric) (h_le : T₂ T₁) : T₂.IsSymmetric := H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hh₁:T₁.IsSymmetrich_le:T₂ T₁T₂.IsSymmetric H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hh₁:T₁.IsSymmetrich_le:T₂ T₁x:T₂.domainy:T₂.domainT₂ x, y⟫_ = x, T₂ y⟫_ H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hh₁:T₁.IsSymmetrich_le:T₂ T₁x:T₂.domainy:T₂.domainhx:T₂ x = T₁ x, T₂ x, y⟫_ = x, T₂ y⟫_ H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace HT₁:H →ₗ.[] HT₂:H →ₗ.[] Hh₁:T₁.IsSymmetrich_le:T₂ T₁x:T₂.domainy:T₂.domainhx:T₂ x = T₁ x, hy:T₂ y = T₁ y, T₂ x, y⟫_ = x, T₂ y⟫_ All goals completed! 🐙

The closure of a symmetric densely-defined operator is symmetric: T†† is a symmetric closed extension of T, so it extends T.closure, whose symmetry then descends.

lemma IsSymmetric.closure [CompleteSpace H] (hsym : T.IsSymmetric) (hdense : T.HasDenseDomain) : T.closure.IsSymmetric := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainT.closure.IsSymmetric H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T TT.closure.IsSymmetric H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T Thadj_dense:T.HasDenseDomainT.closure.IsSymmetric H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T Thadj_dense:T.HasDenseDomainhT_le:T TT.closure.IsSymmetric H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T Thadj_dense:T.HasDenseDomainhT_le:T Thc:T.IsClosedT.closure.IsSymmetric H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T Thadj_dense:T.HasDenseDomainhT_le:T Thc:T.IsClosedh1:T.IsSymmetricT.closure.IsSymmetric All goals completed! 🐙

A LinearPMap constructed from a symmetric LinearMap with dense domain is an unbounded operator.

lemma isUnbounded_of_dense_of_isSymmetric [CompleteSpace H] {E : Submodule H} (hE : Dense (E : Set H)) {f : E →ₗ[] H} (h : x y : E, f x, y⟫_ = x, f y⟫_) : (mk E f).IsUnbounded := hE, IsSymmetric.isClosable h hE

Variant of of_dense_of_isSymmetric for an endomorphism satisfying LinearMap.IsSymmetric.

lemma isUnbounded_of_dense_of_isSymmetric' [CompleteSpace H] {E : Submodule H} (hE : Dense (E : Set H)) {f : E →ₗ[] E} (h : f.IsSymmetric) : (mk E (E.subtype ∘ₗ f)).IsUnbounded := hE, IsSymmetric.isClosable h hE

C.3. Self-adjoint operators

H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:IsSelfAdjoint TT.IsFormalAdjoint T nth_rw 1 [H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T(star T).IsFormalAdjoint TH:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T(star T).IsFormalAdjoint T All goals completed! 🐙lemma IsSelfAdjoint.isClosed [CompleteSpace H] (h : IsSelfAdjoint T) : T.IsClosed := h adjoint_isClosed h.dense_domainlemma IsSelfAdjoint.isClosable [CompleteSpace H] (h : IsSelfAdjoint T) : T.IsClosable := (isClosed h).isClosablelemma IsSelfAdjoint.isUnbounded [CompleteSpace H] (h : IsSelfAdjoint T) : T.IsUnbounded := h.dense_domain, isClosable hlemma IsSelfAdjoint.isEssentiallySelfAdjoint [CompleteSpace H] (h : IsSelfAdjoint T) : T.IsEssentiallySelfAdjoint := isEssentiallySelfAdjoint_def.mpr (h.isClosed.closure_eq.symm h)@[aesop safe apply] lemma IsSelfAdjoint.adjoint [CompleteSpace H] (h : IsSelfAdjoint T) : IsSelfAdjoint T := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:IsSelfAdjoint TIsSelfAdjoint T H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T = TIsSelfAdjoint T All goals completed! 🐙All goals completed! 🐙@[aesop safe apply] lemma IsSelfAdjoint.real_smul [CompleteSpace H] (h : IsSelfAdjoint T) {r : } (hr : r 0) : IsSelfAdjoint (r T) := smul h (ofReal_ne_zero.mpr hr) (conj_ofReal r)@[aesop safe apply] lemma IsSelfAdjoint.neg [CompleteSpace H] (h : IsSelfAdjoint T) : IsSelfAdjoint (-T) := neg_eq_neg_one_smul T smul h (H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T-1 0 All goals completed! 🐙) (H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T(starRingEnd ) (-1) = -1 All goals completed! 🐙)

Self-adjointness from surjectivity of T ± i: a symmetric, densely-defined operator T for which T + I • 1 and T - I • 1 both have full range is self-adjoint.

H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhadd:(T + I 1).toFun.range = hsub:(T - I 1).toFun.range = hplus: (φ : H), ψ, T ψ + I ψ = φhminus: (φ : H), ψ, T ψ - I ψ = φhle:T Tw:Hhw:w T.domainW:T.domain := w, hwx:T.domainhx:T x - I x = T W - I WX:T.domain := x, hX:X = x, hxeq:T X = T xhdiff:T (W - X) = I (W - X)hker: (w : T.domain), T w = I w w = 0w T.eqLocus T H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhadd:(T + I 1).toFun.range = hsub:(T - I 1).toFun.range = hplus: (φ : H), ψ, T ψ + I ψ = φhminus: (φ : H), ψ, T ψ - I ψ = φhle:T Tx:T.domainX:T.domain := x, hX:X = x, hxeq:T X = T xhker: (w : T.domain), T w = I w w = 0hw:x T.domainW:T.domain := x, hwhx:T x - I x = T W - I Whdiff:T (W - X) = I (W - X)x T.eqLocus T All goals completed! 🐙

C.4. Essentially self-adjoint operators

lemma IsEssentiallySelfAdjoint.hasDenseDomain [CompleteSpace H] (h : T.IsEssentiallySelfAdjoint) : T.HasDenseDomain := hasDenseDomain_iff_closure_hasDenseDomain.mpr h.dense_domainlemma IsEssentiallySelfAdjoint.isSymmetric [CompleteSpace H] (h : T.IsEssentiallySelfAdjoint) : T.IsSymmetric := (IsSelfAdjoint.isSymmetric h).of_le T.le_closurelemma IsEssentiallySelfAdjoint.isClosable [CompleteSpace H] (h : T.IsEssentiallySelfAdjoint) : T.IsClosable := h.isSymmetric.isClosable h.hasDenseDomainlemma IsEssentiallySelfAdjoint.isUnbounded [CompleteSpace H] (h : T.IsEssentiallySelfAdjoint) : T.IsUnbounded := h.isSymmetric.isUnbounded_iff_hasDenseDomain.mpr h.hasDenseDomain

The closure is the unique self-adjoint extension of an essentially self-adjoint operator.

lemma IsEssentiallySelfAdjoint.unique_self_adjoint_extension [CompleteSpace H] (h : T.IsEssentiallySelfAdjoint) {T₂ : H →ₗ.[] H} (h_le : T T₂) (h₂ : IsSelfAdjoint T₂) : T₂ = T.closure := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjointT₂:H →ₗ.[] Hh_le:T T₂h₂:IsSelfAdjoint T₂T₂ = T.closure H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjointT₂:H →ₗ.[] Hh_le:T T₂h₂:IsSelfAdjoint T₂h_cl:T₂.IsClosedT₂ = T.closure H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjointT₂:H →ₗ.[] Hh_le:T T₂h₂:IsSelfAdjoint T₂h_cl:T₂.IsClosedh_le':T.closure T₂T₂ = T.closure All goals completed! 🐙
@[aesop safe apply] lemma IsEssentiallySelfAdjoint.smul [CompleteSpace H] (h : T.IsEssentiallySelfAdjoint) {c : } (hc : c 0) (hc' : conj c = c) : (c T).IsEssentiallySelfAdjoint := H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjointc:hc:c 0hc':(starRingEnd ) c = c(c T).IsEssentiallySelfAdjoint All goals completed! 🐙@[aesop safe apply] lemma IsEssentiallySelfAdjoint.real_smul [CompleteSpace H] (h : T.IsEssentiallySelfAdjoint) {r : } (hr : r 0) : (r T).IsEssentiallySelfAdjoint := h.smul (ofReal_ne_zero.mpr hr) (conj_ofReal r)@[aesop safe apply] lemma IsEssentiallySelfAdjoint.neg [CompleteSpace H] (h : T.IsEssentiallySelfAdjoint) : (-T).IsEssentiallySelfAdjoint := neg_eq_neg_one_smul T h.smul (H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjoint-1 0 All goals completed! 🐙) (H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace HT:H →ₗ.[] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjoint(starRingEnd ) (-1) = -1 All goals completed! 🐙)