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.BasicUnbounded 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 sectionA. 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.rflA LinearPMap is an unbounded operator iff it has dense domain and is closable.
def IsUnbounded (U : H →ₗ.[ℂ] H') : Prop := U.HasDenseDomain ∧ U.IsClosablelemma 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 Tlemma isSymmetric_def : T.IsSymmetric ↔ T.IsFormalAdjoint T := Iff.rflA LinearPMap is essentially self-adjoint iff its closure is self-adjoint.
def IsEssentiallySelfAdjoint [CompleteSpace H] (T : H →ₗ.[ℂ] H) : Prop := IsSelfAdjoint T.closurelemma 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.IsClosable⊢ U.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.IsClosable⊢ 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⊢ 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ψ:Hhψ:ψ ∈ 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ψ:Hhψ:ψ ∈ 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ψ:Hhψ:ψ ∈ 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ψ:Hhψ:ψ ∈ 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ψ:Hhψ:ψ ∈ 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.IsClosable⊢ U.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₂.domain⊢ ↑U₁.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₂.domain⊢ ↑U₁.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).domain⊢ ↑E ⊆ ↑(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.domain⊢ ↑T.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).domain⊢ ↑T.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.HasDenseDomain⊢ U.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 = v⊢ ⟪u, 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.
lemma isClosable_of_zero (h_zero : ⇑U = 0) : U.IsClosable := by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h_zero:↑U = 0⊢ U.IsClosable
use U.graph.topologicalClosure.toLinearPMap h H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h_zero:↑U = 0⊢ U.graph.topologicalClosure = U.graph.topologicalClosure.toLinearPMap.graph
refine (toLinearPMap_graph_eq _ fun x hx hx₁ ↦ ?_).symm h 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 = 0⊢ x.2 = 0
obtain ⟨b, hb, hb'⟩ := mem_closure_iff_seq_limit.mp hx h 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 b Filter.atTop (nhds x)⊢ x.2 = 0
have hbn : ∀ n, (b n).snd = 0 := fun n ↦ by 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 b Filter.atTop (nhds x)n:ℕ⊢ (b n).2 = 0 h 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 b Filter.atTop (nhds x)hbn:∀ (n : ℕ), (b n).2 = 0⊢ x.2 = 0 specialize hb n 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':Filter.Tendsto b Filter.atTop (nhds x)n:ℕhb:b n ∈ ↑U.graph.toAddSubmonoid⊢ (b n).2 = 0 h 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 b Filter.atTop (nhds x)hbn:∀ (n : ℕ), (b n).2 = 0⊢ x.2 = 0; simp_allh 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 b Filter.atTop (nhds x)hbn:∀ (n : ℕ), (b n).2 = 0⊢ x.2 = 0h 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 b Filter.atTop (nhds x)hbn:∀ (n : ℕ), (b n).2 = 0⊢ x.2 = 0
rw [nhds_prod_eq, h 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 b Filter.atTop (nhds x.1 ×ˢ nhds x.2)hbn:∀ (n : ℕ), (b n).2 = 0⊢ x.2 = 0 h 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 = 0⊢ x.2 = 0 Filter.tendsto_prod_iff' h 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 = 0⊢ x.2 = 0h 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 = 0⊢ x.2 = 0] at hb'h 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 = 0⊢ x.2 = 0
simp_all All goals completed! 🐙
@[aesop safe apply]
lemma IsClosable.smul (h : U.IsClosable) (c : ℂ) : (c • U).IsClosable := by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:U.IsClosablec:ℂ⊢ (c • U).IsClosable
rcases eq_zero_or_neZero c with (rfl | hc) inl H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:U.IsClosable⊢ (0 • U).IsClosableinr H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:U.IsClosablec:ℂhc:NeZero c⊢ (c • U).IsClosable
· inl H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:U.IsClosable⊢ (0 • U).IsClosable exact isClosable_of_zero (by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:U.IsClosable⊢ ↑(0 • U) = 0 simp All goals completed! 🐙)
· inr H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:U.IsClosablec:ℂhc:NeZero c⊢ (c • U).IsClosable use (c • U).graph.topologicalClosure.toLinearPMap h H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:U.IsClosablec:ℂhc:NeZero c⊢ (c • U).graph.topologicalClosure = (c • U).graph.topologicalClosure.toLinearPMap.graph
refine (toLinearPMap_graph_eq _ fun x hx hx₁ ↦ ?_).symm h 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 = 0⊢ x.2 = 0
rw [← smul_zero c, h 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 = 0⊢ x.2 = c • 0 h 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 = 0⊢ c⁻¹ • x.2 = 0 ← inv_smul_eq_iff₀ hc.ne h 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 = 0⊢ c⁻¹ • x.2 = 0 h 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 = 0⊢ c⁻¹ • x.2 = 0]h 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 = 0⊢ c⁻¹ • x.2 = 0
refine graph_fst_eq_zero_snd U.closure ?_ rfl h 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 = 0⊢ (0, c⁻¹ • x.2) ∈ U.closure.graph
rw [← h.graph_closure_eq_closure_graph h 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 = 0⊢ (0, c⁻¹ • x.2) ∈ U.graph.topologicalClosure h 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 = 0⊢ (0, c⁻¹ • x.2) ∈ U.graph.topologicalClosure]h 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 = 0⊢ (0, c⁻¹ • x.2) ∈ U.graph.topologicalClosure
apply mem_closure_iff_seq_limit.mpr h 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 = 0⊢ ∃ x_1, (∀ (n : ℕ), x_1 n ∈ ↑U.graph.toAddSubmonoid) ∧ Filter.Tendsto x_1 Filter.atTop (nhds (0, c⁻¹ • x.2))
obtain ⟨b, hb, hb'⟩ := mem_closure_iff_seq_limit.mp hx h 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 b Filter.atTop (nhds x)⊢ ∃ x_1, (∀ (n : ℕ), x_1 n ∈ ↑U.graph.toAddSubmonoid) ∧ Filter.Tendsto x_1 Filter.atTop (nhds (0, c⁻¹ • x.2))
use fun n ↦ ((b n).fst, c⁻¹ • (b n).snd) h 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 b Filter.atTop (nhds x)⊢ (∀ (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)) Filter.atTop (nhds (0, c⁻¹ • x.2))
rw [nhds_prod_eq, h 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 b Filter.atTop (nhds x.1 ×ˢ 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)) Filter.atTop (nhds 0 ×ˢ nhds (c⁻¹ • x.2)) h 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)) Filter.tendsto_prod_iff' h 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 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))] at *h 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))
refine ⟨fun n ↦ ?_, hx₁ ▸ hb'.1, hb'.2.const_smul c⁻¹⟩ h 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
obtain ⟨u, hu, hu'⟩ := hb n h 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
simp only [coe_toAddSubmonoid, SetLike.mem_coe, mem_graph_iff, Subtype.exists, ← hu'] h 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
exact ⟨u.1, u.1.2, rfl, ((inv_smul_eq_iff₀ hc.ne).mpr hu).symm⟩ 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 c⟩lemma neg_eq_neg_one_smul (U : H →ₗ.[ℂ] H') : -U = (-1 : ℂ) • U := ext (by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'⊢ (-U).domain = (-1 • U).domain simp All goals completed! 🐙) (by 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⟩ simp All goals completed! 🐙)@[aesop safe apply]
lemma IsClosable.neg (h : U.IsClosable) : (-U).IsClosable := neg_eq_neg_one_smul U ▸ h.smul _
lemma closure_smul (U : H →ₗ.[ℂ] H') {c : ℂ} (hc : c ≠ 0) : (c • U).closure = c • U.closure := by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0⊢ (c • U).closure = c • U.closure
by_cases h : U.IsClosable pos H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosable⊢ (c • U).closure = c • U.closureneg H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:¬U.IsClosable⊢ (c • U).closure = c • U.closure
· pos H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosable⊢ (c • U).closure = c • U.closure apply eq_of_eq_graph pos H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosable⊢ (c • U).closure.graph = (c • U.closure).graph
ext ⟨x₁, x₂⟩ pos H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'⊢ (x₁, x₂) ∈ (c • U).closure.graph ↔ (x₁, x₂) ∈ (c • U.closure).graph
simp only [← (h.smul c).graph_closure_eq_closure_graph, smul_graph, ← SetLike.mem_coe,
topologicalClosure_coe, map_coe, LinearMap.prodMap_apply, LinearMap.id_coe, id_eq,
LinearMap.smul_apply, mem_closure_iff_seq_limit, Set.mem_image, Prod.exists, nhds_prod_eq,
Filter.tendsto_prod_iff', ← h.graph_closure_eq_closure_graph, Prod.mk.injEq,
(eq_inv_smul_iff₀ hc).symm, exists_eq_right_right, exists_eq_right] pos H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'⊢ (∃ x,
(∀ (n : ℕ), ∃ a b, (a, b) ∈ ↑U.graph ∧ (a, c • b) = x n) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds x₂)) ↔
∃ x,
(∀ (n : ℕ), x n ∈ ↑U.graph) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds (c⁻¹ • x₂))
constructor pos.mp H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'⊢ (∃ x,
(∀ (n : ℕ), ∃ a b, (a, b) ∈ ↑U.graph ∧ (a, c • b) = x n) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds x₂)) →
∃ x,
(∀ (n : ℕ), x n ∈ ↑U.graph) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds (c⁻¹ • x₂))pos.mpr H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'⊢ (∃ x,
(∀ (n : ℕ), x n ∈ ↑U.graph) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds (c⁻¹ • x₂))) →
∃ x,
(∀ (n : ℕ), ∃ a b, (a, b) ∈ ↑U.graph ∧ (a, c • b) = x n) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds x₂) <;> pos.mp H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'⊢ (∃ x,
(∀ (n : ℕ), ∃ a b, (a, b) ∈ ↑U.graph ∧ (a, c • b) = x n) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds x₂)) →
∃ x,
(∀ (n : ℕ), x n ∈ ↑U.graph) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds (c⁻¹ • x₂))pos.mpr H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'⊢ (∃ x,
(∀ (n : ℕ), x n ∈ ↑U.graph) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds (c⁻¹ • x₂))) →
∃ x,
(∀ (n : ℕ), ∃ a b, (a, b) ∈ ↑U.graph ∧ (a, c • b) = x n) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds x₂) intro ⟨b, hb, hb₁, hb₂⟩ pos.mpr H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))⊢ ∃ x,
(∀ (n : ℕ), ∃ a b, (a, b) ∈ ↑U.graph ∧ (a, c • b) = x n) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧ Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds x₂)
· pos.mp H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), ∃ a b_1, (a, b_1) ∈ ↑U.graph ∧ (a, c • b_1) = b nhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x₂)⊢ ∃ x,
(∀ (n : ℕ), x n ∈ ↑U.graph) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧
Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds (c⁻¹ • x₂)) refine ⟨fun n ↦ ⟨(b n).1, c⁻¹ • (b n).2⟩, fun n ↦ ?_, hb₁, hb₂.const_smul c⁻¹⟩ pos.mp H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), ∃ a b_1, (a, b_1) ∈ ↑U.graph ∧ (a, c • b_1) = b nhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x₂)n:ℕ⊢ (fun n => ((b n).1, c⁻¹ • (b n).2)) n ∈ ↑U.graph
obtain ⟨u, v, huv, huv'⟩ := hb n pos.mp H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), ∃ a b_1, (a, b_1) ∈ ↑U.graph ∧ (a, c • b_1) = b nhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x₂)n:ℕu:Hv:H'huv:(u, v) ∈ ↑U.graphhuv':(u, c • v) = b n⊢ (fun n => ((b n).1, c⁻¹ • (b n).2)) n ∈ ↑U.graph
have hu := mem_domain_of_mem_graph huv pos.mp H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), ∃ a b_1, (a, b_1) ∈ ↑U.graph ∧ (a, c • b_1) = b nhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x₂)n:ℕu:Hv:H'huv:(u, v) ∈ ↑U.graphhuv':(u, c • v) = b nhu:u ∈ U.domain⊢ (fun n => ((b n).1, c⁻¹ • (b n).2)) n ∈ ↑U.graph
use ⟨⟨u, hu⟩, v⟩ h H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), ∃ a b_1, (a, b_1) ∈ ↑U.graph ∧ (a, c • b_1) = b nhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds x₂)n:ℕu:Hv:H'huv:(u, v) ∈ ↑U.graphhuv':(u, c • v) = b nhu:u ∈ U.domain⊢ (⟨u, hu⟩, v) ∈ ↑U.toFun.graph ∧
(U.domain.subtype.prodMap LinearMap.id) (⟨u, hu⟩, v) = (fun n => ((b n).1, c⁻¹ • (b n).2)) n
simp [← huv', smul_smul, inv_mul_cancel₀ hc, (image_iff hu).mpr huv] All goals completed! 🐙
· pos.mpr H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))⊢ ∃ x,
(∀ (n : ℕ), ∃ a b, (a, b) ∈ ↑U.graph ∧ (a, c • b) = x n) ∧
Filter.Tendsto (fun n => (x n).1) Filter.atTop (nhds x₁) ∧ Filter.Tendsto (fun n => (x n).2) Filter.atTop (nhds x₂) refine ⟨fun n ↦ ⟨(b n).1, c • (b n).2⟩, fun n ↦ ?_, hb₁, ?_⟩ pos.mpr.refine_1 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))n:ℕ⊢ ∃ a b_1, (a, b_1) ∈ ↑U.graph ∧ (a, c • b_1) = (fun n => ((b n).1, c • (b n).2)) npos.mpr.refine_2 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))⊢ Filter.Tendsto (fun n => ((fun n => ((b n).1, c • (b n).2)) n).2) Filter.atTop (nhds x₂)
· pos.mpr.refine_1 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))n:ℕ⊢ ∃ a b_1, (a, b_1) ∈ ↑U.graph ∧ (a, c • b_1) = (fun n => ((b n).1, c • (b n).2)) n obtain ⟨u, hu, hu'⟩ := hb n pos.mpr.refine_1 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))n:ℕu:↥U.domain × H'hu:u ∈ ↑U.toFun.graphhu':(U.domain.subtype.prodMap LinearMap.id) u = b n⊢ ∃ a b_1, (a, b_1) ∈ ↑U.graph ∧ (a, c • b_1) = (fun n => ((b n).1, c • (b n).2)) n
exact ⟨u.1, u.2, by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))n:ℕu:↥U.domain × H'hu:u ∈ ↑U.toFun.graphhu':(U.domain.subtype.prodMap LinearMap.id) u = b n⊢ (↑u.1, u.2) ∈ ↑U.graph simp_all All goals completed! 🐙, by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))n:ℕu:↥U.domain × H'hu:u ∈ ↑U.toFun.graphhu':(U.domain.subtype.prodMap LinearMap.id) u = b n⊢ (↑u.1, c • u.2) = (fun n => ((b n).1, c • (b n).2)) n simp [← hu'] All goals completed! 🐙⟩
· pos.mpr.refine_2 H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:U.IsClosablex₁:Hx₂:H'b:ℕ → H × H'hb:∀ (n : ℕ), b n ∈ ↑U.graphhb₁:Filter.Tendsto (fun n => (b n).1) Filter.atTop (nhds x₁)hb₂:Filter.Tendsto (fun n => (b n).2) Filter.atTop (nhds (c⁻¹ • x₂))⊢ Filter.Tendsto (fun n => ((fun n => ((b n).1, c • (b n).2)) n).2) Filter.atTop (nhds x₂) exact one_smul ℂ x₂ ▸ mul_inv_cancel₀ hc ▸ smul_smul c c⁻¹ x₂ ▸ hb₂.const_smul c All goals completed! 🐙
· neg H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:¬U.IsClosable⊢ (c • U).closure = c • U.closure rw [closure_def' h, neg H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:¬U.IsClosable⊢ (c • U).closure = c • U All goals completed! 🐙 closure_def' <| (not_congr <| IsClosable.smul_iff hc).mpr h neg H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'c:ℂhc:c ≠ 0h:¬U.IsClosable⊢ c • U = c • U All goals completed! 🐙] All goals completed! 🐙B.3. Adjoints
@[simp]
lemma adjoint_one [CompleteSpace H] : (1 : H →ₗ.[ℂ] H)† = 1 := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ Hinst✝:CompleteSpace H⊢ 1† = 1
ext x h H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ Hinst✝:CompleteSpace Hx:H⊢ x ∈ 1†.domain ↔ x ∈ domain 1h' H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ Hinst✝:CompleteSpace Hx:Hhf✝:x ∈ 1†.domainhg✝:x ∈ domain 1⊢ ↑1† ⟨x, hf✝⟩ = ↑1 ⟨x, hg✝⟩
· h H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ Hinst✝:CompleteSpace Hx:H⊢ x ∈ 1†.domain ↔ x ∈ domain 1 simp only [one_domain, mem_top, iff_true] h H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ Hinst✝:CompleteSpace Hx:H⊢ x ∈ 1†.domain
exact mem_adjoint_domain_of_exists _ ⟨x, fun _ ↦ rfl⟩ All goals completed! 🐙
· h' H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ Hinst✝:CompleteSpace Hx:Hhf✝:x ∈ 1†.domainhg✝:x ∈ domain 1⊢ ↑1† ⟨x, hf✝⟩ = ↑1 ⟨x, hg✝⟩ exact adjoint_apply_eq dense_univ _ fun _ ↦ rfl 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 := by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_zero:↑U = 0⊢ U† = 0
refine dExt ?_ fun x y hxy ↦ ?_ refine_1 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_zero:↑U = 0⊢ U†.domain = domain 0refine_2 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 = ↑y⊢ ↑U† x = ↑0 y
· refine_1 H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_zero:↑U = 0⊢ U†.domain = domain 0 ext refine_1 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
simp only [zero_domain, mem_top, iff_true] refine_1 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 (by 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 simp [h_zero] All goals completed! 🐙))
· refine_2 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 = ↑y⊢ ↑U† x = ↑0 y by_cases h : U.HasDenseDomain pos 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⊢ ↑U† x = ↑0 yneg 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⊢ ↑U† x = ↑0 y
· pos 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⊢ ↑U† x = ↑0 y exact adjoint_apply_eq h x (by 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⟫_ℂ simp [h_zero] All goals completed! 🐙)
· neg 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⊢ ↑U† x = ↑0 y exact adjoint_apply_of_not_dense h x 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† := by 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†
refine dExt ?_ fun x y hxy ↦ ?_ refine_1 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†).domainrefine_2 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
· refine_1 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 ext x refine_1 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
change Continuous (fun w ↦ ⟪x, c • U w⟫_ℂ) ↔ Continuous (fun w ↦ ⟪x, U w⟫_ℂ) refine_1 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 (by 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⟫_ℂ simp [inner_smul_right] All goals completed! 🐙) (continuous_const_smul_iff₀ hc)
· refine_2 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 by_cases h : U.HasDenseDomain pos 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†) yneg 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
· pos 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 refine adjoint_apply_eq (smul_domain c U ▸ h) x fun w ↦ ?_ pos 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⟫_ℂ
simp [inner_smul_left, inner_smul_right, adjoint_isFormalAdjoint h y w, hxy] All goals completed! 🐙
· neg 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 simp [adjoint_apply_of_not_dense h y, adjoint_apply_of_not_dense (smul_domain c U ▸ h) x] All goals completed! 🐙@[simp]
lemma adjoint_neg [CompleteSpace H] (U : H →ₗ.[ℂ] H') : (-U)† = -U† := by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'inst✝:CompleteSpace HU:H →ₗ.[ℂ] H'⊢ (-U)† = -U†
simp [neg_eq_neg_one_smul, adjoint_smul] All goals completed! 🐙
lemma adjoint_antitone [CompleteSpace H]
(h₁₂ : U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomain) (h_le : U₁ ≤ U₂) : U₂† ≤ U₁† := by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂⊢ U₂† ≤ U₁†
have h_agree : ∀ w : U₁.domain, U₁ w = U₂ ⟨w, h_le.1 w.2⟩ := fun w ↦ @h_le.2 w ⟨w, h_le.1 w.2⟩ rfl H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩⊢ U₂† ≤ U₁†
constructor left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩⊢ U₂†.domain ≤ U₁†.domainright H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩⊢ ∀ ⦃x : ↥U₂†.domain⦄ ⦃y : ↥U₁†.domain⦄, ↑x = ↑y → ↑U₂† x = ↑U₁† y
· left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩⊢ U₂†.domain ≤ U₁†.domain intro v left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'⊢ v ∈ U₂†.domain → v ∈ U₁†.domain
let f₁ : U₁.domain → ℂ := fun w ↦ ⟪v, U₁ w⟫_ℂ left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂ⊢ v ∈ U₂†.domain → v ∈ U₁†.domain
let f₂ : U₂.domain → ℂ := fun w ↦ ⟪v, U₂ w⟫_ℂ left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂ⊢ v ∈ U₂†.domain → v ∈ U₁†.domain
change Continuous f₂ → Continuous f₁ left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂ⊢ Continuous f₂ → Continuous f₁
suffices f₁ = fun w : U₁.domain ↦ f₂ ⟨w, h_le.1 w.2⟩ by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂthis:f₁ = fun w => f₂ ⟨↑w, ⋯⟩⊢ Continuous f₂ → Continuous f₁ left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂ⊢ f₁ = fun w => f₂ ⟨↑w, ⋯⟩ rw [this H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂthis:f₁ = fun w => f₂ ⟨↑w, ⋯⟩⊢ Continuous f₂ → Continuous fun w => f₂ ⟨↑w, ⋯⟩ H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂthis:f₁ = fun w => f₂ ⟨↑w, ⋯⟩⊢ Continuous f₂ → Continuous fun w => f₂ ⟨↑w, ⋯⟩ left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂ⊢ f₁ = fun w => f₂ ⟨↑w, ⋯⟩] H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂthis:f₁ = fun w => f₂ ⟨↑w, ⋯⟩⊢ Continuous f₂ → Continuous fun w => f₂ ⟨↑w, ⋯⟩left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂ⊢ f₁ = fun w => f₂ ⟨↑w, ⋯⟩; fun_propleft H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂ⊢ f₁ = fun w => f₂ ⟨↑w, ⋯⟩left H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩v:H'f₁:↥U₁.domain → ℂ := fun w => ⟪v, ↑U₁ w⟫_ℂf₂:↥U₂.domain → ℂ := fun w => ⟪v, ↑U₂ w⟫_ℂ⊢ f₁ = fun w => f₂ ⟨↑w, ⋯⟩
simp [f₁, f₂, h_agree] All goals completed! 🐙
· right H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩⊢ ∀ ⦃x : ↥U₂†.domain⦄ ⦃y : ↥U₁†.domain⦄, ↑x = ↑y → ↑U₂† x = ↑U₁† y intro u v huv right H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh₁₂:U₁.HasDenseDomain ∨ ¬U₂.HasDenseDomainh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑v⊢ ↑U₂† u = ↑U₁† v
rcases h₁₂ with (h₁ | h₂) right.inl H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₁:U₁.HasDenseDomain⊢ ↑U₂† u = ↑U₁† vright.inr H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₂:¬U₂.HasDenseDomain⊢ ↑U₂† u = ↑U₁† v
· right.inl H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₁:U₁.HasDenseDomain⊢ ↑U₂† u = ↑U₁† v have h₂ : U₂.HasDenseDomain := h₁.mono h_le.1 right.inl H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomain⊢ ↑U₂† u = ↑U₁† v
refine (adjoint_apply_eq h₁ v fun w ↦ ?_).symm right.inl H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainw:↥U₁.domain⊢ ⟪↑U₂† u, ↑w⟫_ℂ = ⟪↑v, ↑U₁ w⟫_ℂ
rw [adjoint_isFormalAdjoint h₂ u ⟨w, h_le.1 w.2⟩, right.inl H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainw:↥U₁.domain⊢ ⟪↑u, ↑U₂ ⟨↑w, ⋯⟩⟫_ℂ = ⟪↑v, ↑U₁ w⟫_ℂ All goals completed! 🐙 h_agree, right.inl H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainw:↥U₁.domain⊢ ⟪↑u, ↑U₂ ⟨↑w, ⋯⟩⟫_ℂ = ⟪↑v, ↑U₂ ⟨↑w, ⋯⟩⟫_ℂ All goals completed! 🐙 huv right.inl H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₁:U₁.HasDenseDomainh₂:U₂.HasDenseDomainw:↥U₁.domain⊢ ⟪↑v, ↑U₂ ⟨↑w, ⋯⟩⟫_ℂ = ⟪↑v, ↑U₂ ⟨↑w, ⋯⟩⟫_ℂ All goals completed! 🐙] All goals completed! 🐙
· right.inr H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₂:¬U₂.HasDenseDomain⊢ ↑U₂† u = ↑U₁† v have h₁ : ¬U₁.HasDenseDomain := fun h ↦ h₂ (h.mono h_le.1) right.inr H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₂:¬U₂.HasDenseDomainh₁:¬U₁.HasDenseDomain⊢ ↑U₂† u = ↑U₁† v
rw [adjoint_apply_of_not_dense h₁ v, right.inr H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₂:¬U₂.HasDenseDomainh₁:¬U₁.HasDenseDomain⊢ ↑U₂† u = 0 All goals completed! 🐙 adjoint_apply_of_not_dense h₂ u right.inr H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U₁:H →ₗ.[ℂ] H'U₂:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh_le:U₁ ≤ U₂h_agree:∀ (w : ↥U₁.domain), ↑U₁ w = ↑U₂ ⟨↑w, ⋯⟩u:↥U₂†.domainv:↥U₁†.domainhuv:↑u = ↑vh₂:¬U₂.HasDenseDomainh₁:¬U₁.HasDenseDomain⊢ 0 = 0 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₂)† := by 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₂).HasDenseDomain⊢ U₁† + U₂† ≤ (U₁ + U₂)†
have h₁ : U₁.HasDenseDomain := h₁₂.mono Set.inter_subset_left 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₁.HasDenseDomain⊢ U₁† + U₂† ≤ (U₁ + U₂)†
have h₂ : U₂.HasDenseDomain := h₁₂.mono Set.inter_subset_right 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₂† ≤ (U₁ + U₂)†
constructor left 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₂)†.domainright 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
· left 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 intro u hu left 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₂†).domain⊢ u ∈ (U₁ + U₂)†.domain
refine mem_adjoint_domain_of_exists _ ⟨U₁† ⟨u, hu.1⟩ + U₂† ⟨u, hu.2⟩, fun x ↦ ?_⟩ left 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₂).domain⊢ ⟪↑U₁† ⟨u, ⋯⟩ + ↑U₂† ⟨u, ⋯⟩, ↑x⟫_ℂ = ⟪u, ↑(U₁ + U₂) x⟫_ℂ
simp only [add_apply, inner_add_left, inner_add_right,
adjoint_isFormalAdjoint h₁ ⟨u, hu.1⟩ ⟨x, x.2.1⟩,
adjoint_isFormalAdjoint h₂ ⟨u, hu.2⟩ ⟨x, x.2.2⟩] All goals completed! 🐙
· right 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 intro u v huv right 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
refine (adjoint_apply_eq h₁₂ _ fun w ↦ ?_).symm right 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⟫_ℂ
simp only [add_apply, inner_add_left, inner_add_right, ← huv,
adjoint_isFormalAdjoint h₁ ⟨u, u.2.1⟩ ⟨w, w.2.1⟩,
adjoint_isFormalAdjoint h₂ ⟨u, u.2.2⟩ ⟨w, w.2.2⟩] All goals completed! 🐙lemma adjoint_sub_le_sub_adjoint [CompleteSpace H]
(U₁ U₂ : H →ₗ.[ℂ] H') (h₁₂ : (U₁ - U₂).HasDenseDomain) : U₁† - U₂† ≤ (U₁ - U₂)† := by 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₂).HasDenseDomain⊢ U₁† - U₂† ≤ (U₁ - U₂)†
simp only [sub_eq_add_neg, ← adjoint_neg] 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₂).HasDenseDomain⊢ U₁† + (-U₂)† ≤ (U₁ + -U₂)†
exact adjoint_add_le_add_adjoint U₁ (-U₂) h₁₂ All goals completed! 🐙
lemma adjoint_compRestricted_le_compRestricted_adjoint [CompleteSpace H] [CompleteSpace H']
(hV : V.HasDenseDomain) (hVU : (V ∘ᵣ U).HasDenseDomain) : U† ∘ᵣ V† ≤ (V ∘ᵣ U)† := by 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).HasDenseDomain⊢ U† ∘ᵣ V† ≤ (V ∘ᵣ U)†
have hU : U.HasDenseDomain := hVU.mono (compRestricted_domain_le V U) 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.HasDenseDomain⊢ U† ∘ᵣ V† ≤ (V ∘ᵣ U)†
have h : (U† ∘ᵣ V†).IsFormalAdjoint (V ∘ᵣ U) := by
intro x y 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.HasDenseDomainx:↥(U† ∘ᵣ V†).domainy:↥(V ∘ᵣ U).domain⊢ ⟪↑(U† ∘ᵣ V†) x, ↑y⟫_ℂ = ⟪↑x, ↑(V ∘ᵣ U) y⟫_ℂ 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)†
have hx := mem_domain_of_mem_compRestricted_domain x 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.HasDenseDomainx:↥(U† ∘ᵣ V†).domainy:↥(V ∘ᵣ U).domainhx:↑V† ⟨↑x, ⋯⟩ ∈ U†.domain⊢ ⟪↑(U† ∘ᵣ V†) x, ↑y⟫_ℂ = ⟪↑x, ↑(V ∘ᵣ U) y⟫_ℂ 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)†
have hy := mem_domain_of_mem_compRestricted_domain y 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.HasDenseDomainx:↥(U† ∘ᵣ V†).domainy:↥(V ∘ᵣ U).domainhx:↑V† ⟨↑x, ⋯⟩ ∈ U†.domainhy:↑U ⟨↑y, ⋯⟩ ∈ V.domain⊢ ⟪↑(U† ∘ᵣ V†) x, ↑y⟫_ℂ = ⟪↑x, ↑(V ∘ᵣ U) y⟫_ℂ 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)†
trans ⟪V† ⟨x, x.2.2⟩, U ⟨y, y.2.2⟩⟫_ℂ 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.HasDenseDomainx:↥(U† ∘ᵣ V†).domainy:↥(V ∘ᵣ U).domainhx:↑V† ⟨↑x, ⋯⟩ ∈ U†.domainhy:↑U ⟨↑y, ⋯⟩ ∈ V.domain⊢ ⟪↑(U† ∘ᵣ V†) x, ↑y⟫_ℂ = ⟪↑V† ⟨↑x, ⋯⟩, ↑U ⟨↑y, ⋯⟩⟫_ℂ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.HasDenseDomainx:↥(U† ∘ᵣ V†).domainy:↥(V ∘ᵣ U).domainhx:↑V† ⟨↑x, ⋯⟩ ∈ U†.domainhy:↑U ⟨↑y, ⋯⟩ ∈ V.domain⊢ ⟪↑V† ⟨↑x, ⋯⟩, ↑U ⟨↑y, ⋯⟩⟫_ℂ = ⟪↑x, ↑(V ∘ᵣ U) y⟫_ℂ 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)†
· 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.HasDenseDomainx:↥(U† ∘ᵣ V†).domainy:↥(V ∘ᵣ U).domainhx:↑V† ⟨↑x, ⋯⟩ ∈ U†.domainhy:↑U ⟨↑y, ⋯⟩ ∈ V.domain⊢ ⟪↑(U† ∘ᵣ V†) x, ↑y⟫_ℂ = ⟪↑V† ⟨↑x, ⋯⟩, ↑U ⟨↑y, ⋯⟩⟫_ℂ 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)† exact adjoint_isFormalAdjoint hU ⟨V† ⟨x, x.2.2⟩, hx⟩ ⟨y, y.2.2⟩ 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)†
exact adjoint_isFormalAdjoint hV ⟨x, x.2.2⟩ ⟨U ⟨y, y.2.2⟩, hy⟩ 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)† 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)†
exact ⟨fun x hx ↦ mem_adjoint_domain_of_exists _ ⟨(U† ∘ᵣ V†) ⟨x, hx⟩, h ⟨x, hx⟩⟩,
fun x y hxy ↦ (adjoint_apply_eq hVU y <| hxy ▸ h x).symm⟩ All goals completed! 🐙lemma adjoint_pow_le_pow_adjoint [CompleteSpace H] {n : ℕ} (h : (T ^ n).HasDenseDomain) :
T† ^ n ≤ (T ^ n)† := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hn:ℕh:(T ^ n).HasDenseDomain⊢ T† ^ n ≤ (T ^ n)†
induction n with
| zero => zero H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:(T ^ 0).HasDenseDomain⊢ T† ^ 0 ≤ (T ^ 0)† simp All goals completed! 🐙
| succ n ih => succ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hn:ℕih:(T ^ n).HasDenseDomain → T† ^ n ≤ (T ^ n)†h:(T ^ (n + 1)).HasDenseDomain⊢ T† ^ (n + 1) ≤ (T ^ (n + 1))†
have hTn : (T ^ n).HasDenseDomain := pow_hasDenseDomain_of_le h n.le_succ succ 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).HasDenseDomain⊢ T† ^ (n + 1) ≤ (T ^ (n + 1))†
refine le_trans ?_ (adjoint_compRestricted_le_compRestricted_adjoint hTn h) succ 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).HasDenseDomain⊢ T† ^ (n + 1) ≤ T† ∘ᵣ (npowRec n T)†
exact pow_succ' T† n ▸ compRestricted_mono_right T† (ih hTn) 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.
lemma _root_.LinearMap.continuous_iff_bounded {𝕜 E F : Type*} [NontriviallyNormedField 𝕜]
[SeminormedAddCommGroup E] [NormedSpace 𝕜 E] [SeminormedAddCommGroup F] [NormedSpace 𝕜 F]
{f : E →ₗ[𝕜] F} : Continuous f ↔ ∃ M, 0 < M ∧ ∀ x : E, ‖f x‖ ≤ M * ‖x‖ := by 𝕜:Type u_5E:Type u_6F:Type u_7inst✝⁴:NontriviallyNormedField 𝕜inst✝³:SeminormedAddCommGroup Einst✝²:NormedSpace 𝕜 Einst✝¹:SeminormedAddCommGroup Finst✝:NormedSpace 𝕜 Ff:E →ₗ[𝕜] F⊢ Continuous ⇑f ↔ ∃ M, 0 < M ∧ ∀ (x : E), ‖f x‖ ≤ M * ‖x‖
refine (and_congr_right_iff (a := IsLinearMap 𝕜 f)).mp ?_ f.isLinear 𝕜:Type u_5E:Type u_6F:Type u_7inst✝⁴:NontriviallyNormedField 𝕜inst✝³:SeminormedAddCommGroup Einst✝²:NormedSpace 𝕜 Einst✝¹:SeminormedAddCommGroup Finst✝:NormedSpace 𝕜 Ff:E →ₗ[𝕜] F⊢ IsLinearMap 𝕜 ⇑f ∧ Continuous ⇑f ↔ IsLinearMap 𝕜 ⇑f ∧ ∃ M, 0 < M ∧ ∀ (x : E), ‖f x‖ ≤ M * ‖x‖
rw [← isBoundedLinearMap_iff 𝕜:Type u_5E:Type u_6F:Type u_7inst✝⁴:NontriviallyNormedField 𝕜inst✝³:SeminormedAddCommGroup Einst✝²:NormedSpace 𝕜 Einst✝¹:SeminormedAddCommGroup Finst✝:NormedSpace 𝕜 Ff:E →ₗ[𝕜] F⊢ IsLinearMap 𝕜 ⇑f ∧ Continuous ⇑f ↔ IsBoundedLinearMap 𝕜 ⇑f 𝕜:Type u_5E:Type u_6F:Type u_7inst✝⁴:NontriviallyNormedField 𝕜inst✝³:SeminormedAddCommGroup Einst✝²:NormedSpace 𝕜 Einst✝¹:SeminormedAddCommGroup Finst✝:NormedSpace 𝕜 Ff:E →ₗ[𝕜] F⊢ IsLinearMap 𝕜 ⇑f ∧ Continuous ⇑f ↔ IsBoundedLinearMap 𝕜 ⇑f] 𝕜:Type u_5E:Type u_6F:Type u_7inst✝⁴:NontriviallyNormedField 𝕜inst✝³:SeminormedAddCommGroup Einst✝²:NormedSpace 𝕜 Einst✝¹:SeminormedAddCommGroup Finst✝:NormedSpace 𝕜 Ff:E →ₗ[𝕜] F⊢ IsLinearMap 𝕜 ⇑f ∧ Continuous ⇑f ↔ IsBoundedLinearMap 𝕜 ⇑f
exact IsBoundedLinearMap.isLinearMap_and_continuous_iff_isBoundedLinearMap f All goals completed! 🐙Continuous operators are closable.
lemma isClosable_of_continuous (h : Continuous U) : U.IsClosable := by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:Continuous ↑U⊢ U.IsClosable
use U.graph.topologicalClosure.toLinearPMap h H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'h:Continuous ↑U⊢ U.graph.topologicalClosure = U.graph.topologicalClosure.toLinearPMap.graph
refine (toLinearPMap_graph_eq _ fun x hx hx₁ ↦ ?_).symm h 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 = 0⊢ x.2 = 0
obtain ⟨b, hb, hbx⟩ := mem_closure_iff_seq_limit.mp hx h 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)⊢ x.2 = 0
rw [nhds_prod_eq h 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 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] at hbx h 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
refine norm_eq_zero.mp (tendsto_nhds_unique hbx.snd.norm ?_) h 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)
obtain ⟨M, hM, h_bound⟩ := LinearMap.continuous_iff_bounded.mp h h 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 * ‖x‖⊢ Filter.Tendsto (fun x => ‖(b x).2‖) Filter.atTop (nhds 0)
refine squeeze_zero (g := fun n ↦ M * ‖(b n).1‖) (fun _ ↦ norm_nonneg _) (fun n ↦ ?_) ?_ h.refine_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 * ‖x‖n:ℕ⊢ ‖(b n).2‖ ≤ M * ‖(b n).1‖h.refine_2 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 * ‖x‖⊢ Filter.Tendsto (fun n => M * ‖(b n).1‖) Filter.atTop (nhds 0)
· h.refine_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 * ‖x‖n:ℕ⊢ ‖(b n).2‖ ≤ M * ‖(b n).1‖ obtain ⟨y, hy₁, hy₂⟩ := (mem_graph_iff _).mp (hb n) h.refine_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 * ‖x‖n:ℕy:↥U.domainhy₁:↑y = (b n).1hy₂:↑U y = (b n).2⊢ ‖(b n).2‖ ≤ M * ‖(b n).1‖
simp only [← hy₁, ← hy₂] h.refine_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 * ‖x‖n:ℕy:↥U.domainhy₁:↑y = (b n).1hy₂:↑U y = (b n).2⊢ ‖↑U y‖ ≤ M * ‖↑y‖
exact h_bound y All goals completed! 🐙
· h.refine_2 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 * ‖x‖⊢ Filter.Tendsto (fun n => M * ‖(b n).1‖) Filter.atTop (nhds 0) exact mul_zero M ▸ (norm_eq_zero.mpr hx₁) ▸ hbx.fst.norm.const_mul M All goals completed! 🐙
A strengthening of closure_domain_le_domain_closure for continuous operators.
lemma closure_domain_eq_domain_closure_of_continuous [CompleteSpace H'] (h : Continuous U) :
U.closure.domain = U.domain.closure := by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace H'h:Continuous ↑U⊢ U.closure.domain = ↑U.domain.closure
refine eq_of_le_of_ge U.closure_domain_le_domain_closure fun x hx ↦ ?_ 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.closure⊢ x ∈ U.closure.domain
obtain ⟨M, hM, h_bound⟩ := LinearMap.continuous_iff_bounded.mp h 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 * ‖x‖⊢ x ∈ U.closure.domain
obtain ⟨b, hb, hb'⟩ := mem_closure_iff_seq_limit.mp hx 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 * ‖x‖b:ℕ → Hhb:∀ (n : ℕ), b n ∈ ↑U.domain.toAddSubmonoidhb':Filter.Tendsto b Filter.atTop (nhds x)⊢ x ∈ U.closure.domain
simp only [coe_toAddSubmonoid, SetLike.mem_coe] at hb 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domain⊢ x ∈ U.closure.domain
let Ub : ℕ → H' := fun n ↦ U ⟨b n, hb n⟩ 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩⊢ x ∈ U.closure.domain
have hCS : CauchySeq Ub := by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace H'h:Continuous ↑U⊢ 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'inst✝:CompleteSpace H'h:Continuous ↑Ux:Hhx:x ∈ ↑U.domain.closureM:ℝhM:0 < Mh_bound:∀ (x : ↥U.domain), ‖U.toFun x‖ ≤ M * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain
refine Metric.cauchySeq_iff'.mpr fun ε hε ↦ ?_ 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0⊢ ∃ N, ∀ n ≥ N, dist (Ub n) (Ub N) < ε 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain
obtain ⟨N, hN⟩ := Metric.cauchySeq_iff'.mp hb'.cauchySeq (M⁻¹ * ε) (by 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0⊢ M⁻¹ * ε > 0 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n) (b N) < M⁻¹ * ε⊢ ∃ N, ∀ n ≥ N, dist (Ub n) (Ub N) < ε 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain positivity 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 ↑Ux:Hhx:x ∈ ↑U.domain.closureM:ℝhM:0 < Mh_bound:∀ (x : ↥U.domain), ‖U.toFun x‖ ≤ M * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n) (b N) < M⁻¹ * ε⊢ ∃ N, ∀ n ≥ N, dist (Ub n) (Ub N) < ε 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.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 ↑Ux:Hhx:x ∈ ↑U.domain.closureM:ℝhM:0 < Mh_bound:∀ (x : ↥U.domain), ‖U.toFun x‖ ≤ M * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n) (b N) < M⁻¹ * ε⊢ ∃ N, ∀ n ≥ N, dist (Ub n) (Ub N) < ε 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain
refine ⟨N, fun n hn ↦ ?_⟩ 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n) (b N) < M⁻¹ * εn:ℕhn:n ≥ N⊢ dist (Ub n) (Ub N) < ε 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain
refine lt_of_le_of_lt ?_ ((lt_inv_mul_iff₀ hM).mp (hN n hn)) 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n) (b N) < M⁻¹ * εn:ℕhn:n ≥ N⊢ dist (Ub n) (Ub N) ≤ M * dist (b n) (b N) 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain
calc
_ = ‖Ub n - Ub N‖ := dist_eq_norm _ _
_ = ‖U (⟨b n, hb n⟩ - ⟨b N, hb N⟩)‖ := by 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n) (b N) < M⁻¹ * εn:ℕhn:n ≥ N⊢ ‖Ub n - Ub N‖ = ‖↑U (⟨b n, ⋯⟩ - ⟨b N, ⋯⟩)‖ 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain simp [Ub, map_sub] 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 ↑Ux:Hhx:x ∈ ↑U.domain.closureM:ℝhM:0 < Mh_bound:∀ (x : ↥U.domain), ‖U.toFun x‖ ≤ M * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain
_ ≤ M * ‖b n - b N‖ := h_bound _
_ = M * dist (b n) (b N) := by 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n) (b N) < M⁻¹ * εn:ℕhn:n ≥ N⊢ M * ‖b n - b N‖ = M * dist (b n) (b N) 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain rw [dist_eq_norm 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n) (b N) < M⁻¹ * εn:ℕhn:n ≥ N⊢ M * ‖b n - b N‖ = M * ‖b n - b N‖ 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 * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.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 ↑Ux:Hhx:x ∈ ↑U.domain.closureM:ℝhM:0 < Mh_bound:∀ (x : ↥U.domain), ‖U.toFun x‖ ≤ M * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.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 ↑Ux:Hhx:x ∈ ↑U.domain.closureM:ℝhM:0 < Mh_bound:∀ (x : ↥U.domain), ‖U.toFun x‖ ≤ M * ‖x‖b:ℕ → Hhb':Filter.Tendsto b Filter.atTop (nhds x)hb:∀ (n : ℕ), b n ∈ U.domainUb:ℕ → H' := fun n => ↑U ⟨b n, ⋯⟩hCS:CauchySeq Ub⊢ x ∈ U.closure.domain
obtain ⟨y, hy⟩ := CompleteSpace.complete hCS 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 * ‖x‖b:ℕ → 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 y⊢ x ∈ U.closure.domain
apply mem_domain_iff.mpr 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 * ‖x‖b:ℕ → 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 y⊢ ∃ y, (x, y) ∈ U.closure.graph
rw [← (isClosable_of_continuous h).graph_closure_eq_closure_graph 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 * ‖x‖b:ℕ → 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 y⊢ ∃ y, (x, y) ∈ U.graph.topologicalClosure 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 * ‖x‖b:ℕ → 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 y⊢ ∃ y, (x, y) ∈ U.graph.topologicalClosure] 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 * ‖x‖b:ℕ → 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 y⊢ ∃ y, (x, y) ∈ U.graph.topologicalClosure
use y h 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 * ‖x‖b:ℕ → 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 y⊢ (x, y) ∈ U.graph.topologicalClosure
refine mem_closure_iff_seq_limit.mpr ⟨fun n ↦ (b n, Ub n), fun n ↦ ?_, ?_⟩ h.refine_1 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 * ‖x‖b:ℕ → 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 yn:ℕ⊢ (fun n => (b n, Ub n)) n ∈ ↑U.graph.toAddSubmonoidh.refine_2 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 * ‖x‖b:ℕ → 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 y⊢ Filter.Tendsto (fun n => (b n, Ub n)) Filter.atTop (nhds (x, y))
· h.refine_1 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 * ‖x‖b:ℕ → 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 yn:ℕ⊢ (fun n => (b n, Ub n)) n ∈ ↑U.graph.toAddSubmonoid simp [hb n, Ub] All goals completed! 🐙
· h.refine_2 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 * ‖x‖b:ℕ → 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 y⊢ Filter.Tendsto (fun n => (b n, Ub n)) Filter.atTop (nhds (x, y)) rw [nhds_prod_eq h.refine_2 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 * ‖x‖b:ℕ → 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 y⊢ Filter.Tendsto (fun n => (b n, Ub n)) Filter.atTop (nhds x ×ˢ nhds y) h.refine_2 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 * ‖x‖b:ℕ → 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 y⊢ Filter.Tendsto (fun n => (b n, Ub n)) Filter.atTop (nhds x ×ˢ nhds y)]h.refine_2 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 * ‖x‖b:ℕ → 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 y⊢ Filter.Tendsto (fun n => (b n, Ub n)) Filter.atTop (nhds x ×ˢ nhds y)
exact Filter.Tendsto.prodMk hb' hy All goals completed! 🐙A continuous operator is closed iff its domain is closed.
lemma isClosed_iff_isClosed_domain_of_continuous [CompleteSpace H'] (h : Continuous U) :
U.IsClosed ↔ _root_.IsClosed (U.domain : Set H) := by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace H'h:Continuous ↑U⊢ U.IsClosed ↔ _root_.IsClosed ↑U.domain
rw [(isClosable_of_continuous h).isClosed_iff H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace H'h:Continuous ↑U⊢ U.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 ↑U⊢ U.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 ↑U⊢ U.closure = U ↔ _root_.IsClosed ↑U.domain
have h_domain := closure_domain_eq_domain_closure_of_continuous h 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.closure⊢ U.closure = U ↔ _root_.IsClosed ↑U.domain
constructor mp 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.closure⊢ U.closure = U → _root_.IsClosed ↑U.domainmpr 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.closure⊢ _root_.IsClosed ↑U.domain → U.closure = U <;> mp 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.closure⊢ U.closure = U → _root_.IsClosed ↑U.domainmpr 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.closure⊢ _root_.IsClosed ↑U.domain → U.closure = U intro hcl mpr 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.domain⊢ U.closure = U
· mp 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 exact hcl ▸ h_domain ▸ isClosed_closure All goals completed! 🐙
· mpr 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.domain⊢ U.closure = U refine (eq_of_le_of_domain_eq U.le_closure ?_).symm mpr 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.domain⊢ U.domain = U.closure.domain
exact h_domain ▸ hcl.submodule_topologicalClosure_eq.symm All goals completed! 🐙
lemma IsClosed.isClosed_toFun_graph (hU : U.IsClosed) :
_root_.IsClosed (U.toFun.graph : Set (U.domain × H')) := by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'hU:U.IsClosed⊢ _root_.IsClosed ↑U.toFun.graph
refine isClosed_of_closure_subset fun ⟨x₁, x₂⟩ hx ↦ ?_ 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.graph⊢ (x₁, x₂) ∈ ↑U.toFun.graph
simp only [SetLike.mem_coe, LinearMap.mem_graph_iff, toFun_eq_coe] 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.graph⊢ x₂ = ↑U x₁
suffices (↑x₁, x₂) ∈ U.graph.topologicalClosure by 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.graphthis:(↑x₁, x₂) ∈ U.graph.topologicalClosure⊢ x₂ = ↑U x₁ 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.graph⊢ (↑x₁, x₂) ∈ U.graph.topologicalClosure
simp_all [hU.isClosable.graph_closure_eq_closure_graph, hU.closure_eq] 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.graph⊢ (↑x₁, x₂) ∈ U.graph.topologicalClosure 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.graph⊢ (↑x₁, x₂) ∈ U.graph.topologicalClosure
obtain ⟨b, hb, hbx⟩ := mem_closure_iff_seq_limit.mp hx 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₁, x₂))⊢ (↑x₁, x₂) ∈ U.graph.topologicalClosure
apply mem_closure_iff_seq_limit.mpr 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₁, x₂))⊢ ∃ x, (∀ (n : ℕ), x n ∈ ↑U.graph.toAddSubmonoid) ∧ Filter.Tendsto x Filter.atTop (nhds (↑x₁, x₂))
rw [nhds_prod_eq 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₂) 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₂)] at * 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), by 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 simp_all 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 := by 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.domain⊢ Continuous ↑U
haveI : CompleteSpace U.domain := instCompleteSpaceSubtypeMemSubmoduleOfIsClosedCoe U.domain 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.domain⊢ Continuous ↑U
exact LinearMap.continuous_of_isClosed_graph U.toFun hU.isClosed_toFun_graph All goals completed! 🐙Closability is preserved upon adding a continuous operator.
lemma IsClosable.add_continuous
(h₁ : U₁.IsClosable) (h₂ : Continuous U₂) (h : U₁.domain ≤ U₂.domain) :
(U₁ + U₂).IsClosable := by 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₂.domain⊢ (U₁ + U₂).IsClosable
use (U₁ + U₂).graph.topologicalClosure.toLinearPMap h 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₂.domain⊢ (U₁ + U₂).graph.topologicalClosure = (U₁ + U₂).graph.topologicalClosure.toLinearPMap.graph
refine (toLinearPMap_graph_eq _ fun ⟨x₁, x₂⟩ hx hx₁ ↦ ?_).symm h 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₁:Hx₂:H'hx:(x₁, x₂) ∈ (U₁ + U₂).graph.topologicalClosurehx₁:(x₁, x₂).1 = 0⊢ (x₁, x₂).2 = 0
subst hx₁ h 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, x₂).2 = 0
refine graph_fst_eq_zero_snd U₁.closure ?_ rfl h 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₁.closure.graph
rw [← h₁.graph_closure_eq_closure_graph h 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 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 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
apply mem_closure_iff_seq_limit.mpr h 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))
obtain ⟨b, hb, hbx⟩ := mem_closure_iff_seq_limit.mp hx h 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))
simp only [coe_toAddSubmonoid, SetLike.mem_coe, mem_graph_iff, add_domain, add_apply,
Subtype.exists, exists_and_left, exists_eq_left, nhds_prod_eq] at * h 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₂)
refine ⟨fun n ↦ ((b n).1, (b n).2 - U₂ ⟨(b n).1, h (hb n).choose.1⟩), fun n ↦ ?_, ?_⟩ h.refine_1 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.refine_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₂)⊢ Filter.Tendsto (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) Filter.atTop (nhds 0 ×ˢ nhds x₂)
· h.refine_1 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 exact ⟨(hb n).choose.1, eq_sub_of_add_eq (hb n).choose_spec⟩ All goals completed! 🐙
· h.refine_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₂)⊢ Filter.Tendsto (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) Filter.atTop (nhds 0 ×ˢ nhds x₂) refine Filter.Tendsto.prodMk hbx.fst ?_ h.refine_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₂)⊢ Filter.Tendsto (fun n => (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩) Filter.atTop (nhds x₂)
refine sub_zero x₂ ▸ hbx.snd.sub ?_ h.refine_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₂)⊢ Filter.Tendsto (fun n => ↑U₂ ⟨(b n).1, ⋯⟩) Filter.atTop (nhds 0)
exact map_zero U₂ ▸ (h₂.tendsto 0).comp (tendsto_subtype_rng.mpr hbx.fst) 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 hClosedness is preserved upon adding a continuous operator.
lemma IsClosed.add_continuous [CompleteSpace H']
(h₁ : U₁.IsClosed) (h₂ : Continuous U₂) (h : U₁.domain ≤ U₂.domain) : (U₁ + U₂).IsClosed := by 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₂.domain⊢ (U₁ + U₂).IsClosed
have hcl : (U₁ + U₂).IsClosable := h₁.isClosable.add_continuous h₂ h 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₂).IsClosable⊢ (U₁ + U₂).IsClosed
refine hcl.isClosed_iff.mpr (eq_of_le_of_ge (le_of_le_graph ?_) (U₁ + U₂).le_closure) 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₂).IsClosable⊢ (U₁ + U₂).closure.graph ≤ (U₁ + U₂).graph
rw [← hcl.graph_closure_eq_closure_graph 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₂).IsClosable⊢ (U₁ + U₂).graph.topologicalClosure ≤ (U₁ + U₂).graph 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₂).IsClosable⊢ (U₁ + U₂).graph.topologicalClosure ≤ (U₁ + U₂).graph] 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₂).IsClosable⊢ (U₁ + U₂).graph.topologicalClosure ≤ (U₁ + U₂).graph
intro ⟨x₁, x₂⟩ hx 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.topologicalClosure⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
obtain ⟨b, hb, hbx⟩ := mem_closure_iff_seq_limit.mp hx 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'hb:∀ (n : ℕ), b n ∈ ↑(U₁ + U₂).graph.toAddSubmonoidhbx:Filter.Tendsto b Filter.atTop (nhds (x₁, x₂))⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
simp only [coe_toAddSubmonoid, SetLike.mem_coe, mem_graph_iff, Subtype.exists, exists_and_left,
exists_eq_left, add_domain, inf_of_le_left h] at hb 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₁, x₂))hb:∀ (n : ℕ), ∃ (x : (b n).1 ∈ U₁.domain), ↑(U₁ + U₂) ⟨(b n).1, ⋯⟩ = (b n).2⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
rw [nhds_prod_eq 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).2⊢ (x₁, x₂) ∈ (U₁ + U₂).graph 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).2⊢ (x₁, x₂) ∈ (U₁ + U₂).graph] at hbx 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).2⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
have hb₁U₂ : ∀ n, (b n).1 ∈ U₂.domain := fun n ↦ h (hb n).choose 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₂.domain⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
have hCS : CauchySeq fun n ↦ U₂ ⟨(b n).1, hb₁U₂ n⟩ := by 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₂.domain⊢ (U₁ + U₂).IsClosed 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
obtain ⟨M, hM, h_bound⟩ := LinearMap.continuous_iff_bounded.mp h₂ 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖⊢ CauchySeq fun n => ↑U₂ ⟨(b n).1, ⋯⟩ 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
refine Metric.cauchySeq_iff'.mpr fun ε hε ↦ ?_ 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0⊢ ∃ N, ∀ n ≥ N, dist (↑U₂ ⟨(b n).1, ⋯⟩) (↑U₂ ⟨(b N).1, ⋯⟩) < ε 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
obtain ⟨N, hN⟩ := Metric.cauchySeq_iff'.mp hbx.fst.cauchySeq (M⁻¹ * ε) (by 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0⊢ M⁻¹ * ε > 0 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n).1 (b N).1 < M⁻¹ * ε⊢ ∃ N, ∀ n ≥ N, dist (↑U₂ ⟨(b n).1, ⋯⟩) (↑U₂ ⟨(b N).1, ⋯⟩) < ε 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph positivity 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'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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n).1 (b N).1 < M⁻¹ * ε⊢ ∃ N, ∀ n ≥ N, dist (↑U₂ ⟨(b n).1, ⋯⟩) (↑U₂ ⟨(b N).1, ⋯⟩) < ε 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph) 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n).1 (b N).1 < M⁻¹ * ε⊢ ∃ N, ∀ n ≥ N, dist (↑U₂ ⟨(b n).1, ⋯⟩) (↑U₂ ⟨(b N).1, ⋯⟩) < ε 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
refine ⟨N, fun n hn ↦ ?_⟩ 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n).1 (b N).1 < M⁻¹ * εn:ℕhn:n ≥ N⊢ dist (↑U₂ ⟨(b n).1, ⋯⟩) (↑U₂ ⟨(b N).1, ⋯⟩) < ε 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
calc
_ = ‖U₂ (⟨(b n).1, hb₁U₂ n⟩ - ⟨(b N).1, hb₁U₂ N⟩)‖ := by 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n).1 (b N).1 < M⁻¹ * εn:ℕhn:n ≥ N⊢ dist (↑U₂ ⟨(b n).1, ⋯⟩) (↑U₂ ⟨(b N).1, ⋯⟩) = ‖↑U₂ (⟨(b n).1, ⋯⟩ - ⟨(b N).1, ⋯⟩)‖ 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph rw [map_sub, 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n).1 (b N).1 < M⁻¹ * εn:ℕhn:n ≥ N⊢ dist (↑U₂ ⟨(b n).1, ⋯⟩) (↑U₂ ⟨(b N).1, ⋯⟩) = ‖↑U₂ ⟨(b n).1, ⋯⟩ - ↑U₂ ⟨(b N).1, ⋯⟩‖ 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'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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph dist_eq_norm 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₂.domainM:ℝhM:0 < Mh_bound:∀ (x : ↥U₂.domain), ‖U₂.toFun x‖ ≤ M * ‖x‖ε:ℝhε:ε > 0N:ℕhN:∀ n ≥ N, dist (b n).1 (b N).1 < M⁻¹ * εn:ℕhn:n ≥ N⊢ ‖↑U₂ ⟨(b n).1, ⋯⟩ - ↑U₂ ⟨(b N).1, ⋯⟩‖ = ‖↑U₂ ⟨(b n).1, ⋯⟩ - ↑U₂ ⟨(b N).1, ⋯⟩‖ 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'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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph] 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'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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
_ ≤ M * ‖(b n).1 - (b N).1‖ := h_bound _
_ < ε := dist_eq_norm (b n).1 (b N).1 ▸ (lt_inv_mul_iff₀ hM).mp (hN n hn) 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, ⋯⟩⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
obtain ⟨y, hy⟩ := CompleteSpace.complete hCS 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 y⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
have hU₁ : (x₁, x₂ - y) ∈ U₁.graph := by 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₂.domain⊢ (U₁ + U₂).IsClosed 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
rw [← h₁.closure_eq, 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 y⊢ (x₁, x₂ - y) ∈ U₁.closure.graph 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 y⊢ (x₁, x₂ - y) ∈ 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'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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph ← h₁.isClosable.graph_closure_eq_closure_graph 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 y⊢ (x₁, x₂ - y) ∈ 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'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 y⊢ (x₁, x₂ - y) ∈ 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'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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph] 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 y⊢ (x₁, x₂ - y) ∈ 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'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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
apply mem_closure_iff_seq_limit.mpr 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 y⊢ ∃ x, (∀ (n : ℕ), x n ∈ ↑U₁.graph.toAddSubmonoid) ∧ Filter.Tendsto x Filter.atTop (nhds (x₁, x₂ - y)) 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
refine ⟨fun n ↦ ((b n).1, (b n).2 - U₂ ⟨(b n).1, hb₁U₂ n⟩), fun n ↦ ?_, ?_⟩ refine_1 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 yn:ℕ⊢ (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) n ∈ ↑U₁.graph.toAddSubmonoidrefine_2 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 y⊢ Filter.Tendsto (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) Filter.atTop (nhds (x₁, x₂ - y)) 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
· refine_1 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 yn:ℕ⊢ (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) n ∈ ↑U₁.graph.toAddSubmonoid 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph simp_all [add_apply, eq_sub_iff_add_eq] 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'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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
· refine_2 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 y⊢ Filter.Tendsto (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) Filter.atTop (nhds (x₁, x₂ - y)) 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph rw [nhds_prod_eq refine_2 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 y⊢ Filter.Tendsto (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) Filter.atTop (nhds x₁ ×ˢ nhds (x₂ - y)) refine_2 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 y⊢ Filter.Tendsto (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) Filter.atTop (nhds x₁ ×ˢ nhds (x₂ - y)) 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph]refine_2 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 y⊢ Filter.Tendsto (fun n => ((b n).1, (b n).2 - ↑U₂ ⟨(b n).1, ⋯⟩)) Filter.atTop (nhds x₁ ×ˢ nhds (x₂ - y)) 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
exact hbx.fst.prodMk (hbx.snd.sub hy) 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph 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₁.graph⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
have hx₁ : x₁ ∈ U₁.domain := mem_domain_of_mem_graph hU₁ 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₁.domain⊢ (x₁, x₂) ∈ (U₁ + U₂).graph
have hU₂y : U₂ ⟨x₁, h hx₁⟩ = y := by 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₂.domain⊢ (U₁ + U₂).IsClosed 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
refine tendsto_nhds_unique ((h₂.tendsto ⟨x₁, h hx₁⟩).comp ?_) (Filter.tendsto_map'_iff.mp hy) 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₁.domain⊢ Filter.Tendsto (fun x => ⟨(b x).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'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
exact tendsto_subtype_rng.mpr hbx.fst 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 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
simp_all [add_domain, add_apply] 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 hlemma adjoint_domain_of_continuous [CompleteSpace H] (h : Continuous U) : U†.domain = ⊤ := by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:Continuous ↑U⊢ U†.domain = ⊤
ext 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✝ ∈ ⊤
simp only [mem_top, iff_true, mem_adjoint_domain_iff, LinearMap.coe_comp, coe_innerₛₗ_apply] 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 (by 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⟫_ℂ fun_prop All goals completed! 🐙) h
lemma HasDenseDomain.adjoint_add_continuous [CompleteSpace H]
(h₁ : T₁.HasDenseDomain) (h₂ : Continuous T₂) (h : T₁.domain ≤ T₂.domain) :
(T₁ + T₂)† = T₁† + T₂† := by 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₂†
have h₂' : T₂†.domain = ⊤ := adjoint_domain_of_continuous h₂ 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 = ⊤⊢ (T₁ + T₂)† = T₁† + T₂†
have h₁₂ : (T₁ + T₂).HasDenseDomain := h₁.mono <| by 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 = ⊤⊢ ↑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₂).HasDenseDomain⊢ (T₁ + T₂)† = T₁† + T₂† simp [add_domain, h] 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₂)† = 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₂)† = T₁† + T₂†
refine (eq_of_le_of_domain_eq ?_ ?_).symm refine_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₂).HasDenseDomain⊢ T₁† + T₂† ≤ (T₁ + T₂)†refine_2 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
· refine_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₂).HasDenseDomain⊢ T₁† + T₂† ≤ (T₁ + T₂)† exact adjoint_add_le_add_adjoint T₁ T₂ h₁₂ All goals completed! 🐙
· refine_2 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 ext x refine_2 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:H⊢ x ∈ (T₁† + T₂†).domain ↔ x ∈ (T₁ + T₂)†.domain
simp only [add_domain, h₂', inf_top_eq] refine_2 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:H⊢ x ∈ T₁†.domain ↔ x ∈ (T₁ + T₂)†.domain
constructor refine_2.mp 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:H⊢ x ∈ T₁†.domain → x ∈ (T₁ + T₂)†.domainrefine_2.mpr 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:H⊢ x ∈ (T₁ + T₂)†.domain → x ∈ T₁†.domain <;> refine_2.mp 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:H⊢ x ∈ T₁†.domain → x ∈ (T₁ + T₂)†.domainrefine_2.mpr 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:H⊢ x ∈ (T₁ + T₂)†.domain → x ∈ T₁†.domain intro h' refine_2.mpr 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 ∈ T₁†.domain
· refine_2.mp 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 ∈ (T₁ + T₂)†.domain apply mem_adjoint_domain_of_exists refine_2.mp 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⟫_ℂ
use T₁† ⟨x, h'⟩ + T₂† ⟨x, h₂' ▸ mem_top⟩ h 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⟫_ℂ
intro y h 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₂).domain⊢ ⟪↑T₁† ⟨x, h'⟩ + ↑T₂† ⟨x, ⋯⟩, ↑y⟫_ℂ = ⟪x, ↑(T₁ + T₂) y⟫_ℂ
simp [add_apply, inner_add_left, inner_add_right,
adjoint_isFormalAdjoint h₁ ⟨x, h'⟩ ⟨y, y.2.1⟩,
adjoint_isFormalAdjoint (h₁.mono h) ⟨x, h₂' ▸ mem_top⟩ ⟨y, y.2.2⟩] All goals completed! 🐙
· refine_2.mpr 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 ∈ T₁†.domain apply mem_adjoint_domain_of_exists refine_2.mpr 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⟫_ℂ
use (T₁ + T₂)† ⟨x, h'⟩ - T₂† ⟨x, h₂' ▸ mem_top⟩ h 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⟫_ℂ
intro y h 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⟫_ℂ
simp [add_apply, inner_add_right, inner_sub_left,
adjoint_isFormalAdjoint h₁₂ ⟨x, h'⟩ ⟨y, ⟨y.2, h y.2⟩⟩,
adjoint_isFormalAdjoint (h₁.mono h) ⟨x, h₂' ▸ mem_top⟩ ⟨y, h y.2⟩] 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₂† := by 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₂†
simp only [sub_eq_add_neg, ← adjoint_neg] 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₂)†
exact h₁.adjoint_add_continuous (continuous_neg_iff.mpr h₂) h 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 := by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hy:↥A.domain⊢ u ↑y ∈ (unitaryConj u A).domain
simpa only [mem_unitaryConj_domain_iff, u.symm_apply_apply] using y.2 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) := by 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)
simp only [unitaryConj_apply, u.symm_apply_apply] 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.
lemma unitaryConj_sub_smul_surjective {z : ℂ} (h : Function.Surjective (A - z • 1).toFun) :
Function.Surjective (unitaryConj u A - z • 1).toFun := by H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFun⊢ Function.Surjective ⇑(unitaryConj u A - z • 1).toFun
intro φ H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'⊢ ∃ a, (unitaryConj u A - z • 1).toFun a = φ
obtain ⟨ξ, hξ⟩ := h (u.symm φ) H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φ⊢ ∃ a, (unitaryConj u A - z • 1).toFun a = φ
obtain ⟨w, hw⟩ : ∃ w : A.domain, A w - z • (w : H) = u.symm φ :=
⟨⟨(ξ : H), (Submodule.mem_inf.mp ξ.2).1⟩, hξ⟩ H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φw:↥A.domainhw:↑A w - z • ↑w = u.symm φ⊢ ∃ a, (unitaryConj u A - z • 1).toFun a = φ
refine ⟨⟨u (w : H), Submodule.mem_inf.mpr
⟨map_mem_unitaryConj_domain u A w, Submodule.mem_top⟩⟩, ?_⟩ H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φw:↥A.domainhw:↑A w - z • ↑w = u.symm φ⊢ (unitaryConj u A - z • 1).toFun ⟨u ↑w, ⋯⟩ = φ
show unitaryConj u A ⟨u (w : H), map_mem_unitaryConj_domain u A w⟩ - z • (u (w : H)) = φ H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φw:↥A.domainhw:↑A w - z • ↑w = u.symm φ⊢ ↑(unitaryConj u A) ⟨u ↑w, ⋯⟩ - z • u ↑w = φ
rw [unitaryConj_apply_map, H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φw:↥A.domainhw:↑A w - z • ↑w = u.symm φ⊢ u (↑A w) - z • u ↑w = φ All goals completed! 🐙 ← _root_.map_smul u, H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φw:↥A.domainhw:↑A w - z • ↑w = u.symm φ⊢ u (↑A w) - u (z • ↑w) = φ All goals completed! 🐙 ← _root_.map_sub, H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φw:↥A.domainhw:↑A w - z • ↑w = u.symm φ⊢ u (↑A w - z • ↑w) = φ All goals completed! 🐙 hw, H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φw:↥A.domainhw:↑A w - z • ↑w = u.symm φ⊢ u (u.symm φ) = φ All goals completed! 🐙 u.apply_symm_apply H:Type u_1inst✝³:NormedAddCommGroup Hinst✝²:InnerProductSpace ℂ HH':Type u_2inst✝¹:NormedAddCommGroup H'inst✝:InnerProductSpace ℂ H'u:H ≃ₗᵢ[ℂ] H'A:H →ₗ.[ℂ] Hz:ℂh:Function.Surjective ⇑(A - z • 1).toFunφ:H'ξ:↥(A - z • 1).domainhξ:(A - z • 1).toFun ξ = u.symm φw:↥A.domainhw:↑A w - z • ↑w = u.symm φ⊢ φ = φ All goals completed! 🐙] 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.2
lemma IsUnbounded.adjoint [CompleteSpace H] [CompleteSpace H'] (h : U.IsUnbounded) :
U†.IsUnbounded := by 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.IsUnbounded⊢ U†.IsUnbounded
refine ⟨?_, (adjoint_isClosed h.1).isClosable⟩ 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.IsUnbounded⊢ U†.HasDenseDomain
by_contra h_adj 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†.HasDenseDomain⊢ False
obtain ⟨y, hy⟩ := not_forall.mp h_adj 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†.domain⊢ False
have h_ne_bot : U†.domainᗮ = ⊥ → False := by 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.IsUnbounded⊢ U†.IsUnbounded 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ᗮ = ⊥ → False⊢ False
rw [← orthogonal_eq_top_iff, 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†.domain⊢ U†.domainᗮᗮ = ⊤ → False 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†.domain⊢ U†.domain.topologicalClosure = ⊤ → False 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ᗮ = ⊥ → False⊢ False orthogonal_orthogonal_eq_closure 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†.domain⊢ U†.domain.topologicalClosure = ⊤ → False 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†.domain⊢ U†.domain.topologicalClosure = ⊤ → False 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ᗮ = ⊥ → False⊢ False] 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†.domain⊢ U†.domain.topologicalClosure = ⊤ → False 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ᗮ = ⊥ → False⊢ False
exact fun a ↦ ne_of_mem_of_not_mem' mem_top hy a.symm 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ᗮ = ⊥ → False⊢ False 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ᗮ = ⊥ → False⊢ False
obtain ⟨x, hx, hx'⟩ := exists_mem_ne_zero_of_ne_bot h_ne_bot 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†.domainᗮhx':x ≠ 0⊢ False
apply hx' 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†.domainᗮhx':x ≠ 0⊢ x = 0
refine graph_fst_eq_zero_snd U.closure ?_ rfl 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†.domainᗮhx':x ≠ 0⊢ (0, x) ∈ U.closure.graph
rw [← IsClosable.graph_closure_eq_closure_graph h.2, 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†.domainᗮhx':x ≠ 0⊢ (0, x) ∈ U.graph.topologicalClosure 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†.domainᗮhx':x ≠ 0⊢ WithLp.toLp 2 ((0, x).2, -(0, x).1) ∈ (submoduleToLp U†.graph)ᗮ
mem_submodule_closure_iff_mem_submoduleToLp_closure, 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†.domainᗮhx':x ≠ 0⊢ WithLp.toLp 2 (0, x) ∈ (submoduleToLp U.graph).topologicalClosure 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†.domainᗮhx':x ≠ 0⊢ WithLp.toLp 2 ((0, x).2, -(0, x).1) ∈ (submoduleToLp U†.graph)ᗮ ← orthogonal_orthogonal_eq_closure, 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†.domainᗮhx':x ≠ 0⊢ WithLp.toLp 2 (0, x) ∈ (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†.domainᗮhx':x ≠ 0⊢ WithLp.toLp 2 ((0, x).2, -(0, x).1) ∈ (submoduleToLp U†.graph)ᗮ
← mem_submodule_adjoint_adjoint_iff_mem_submoduleToLp_orthogonal_orthogonal, 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†.domainᗮhx':x ≠ 0⊢ (0, x) ∈ U.graph.adjoint.adjoint 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†.domainᗮhx':x ≠ 0⊢ WithLp.toLp 2 ((0, x).2, -(0, x).1) ∈ (submoduleToLp U†.graph)ᗮ
← adjoint_graph_eq_graph_adjoint h.1, 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†.domainᗮhx':x ≠ 0⊢ (0, x) ∈ U†.graph.adjoint 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†.domainᗮhx':x ≠ 0⊢ WithLp.toLp 2 ((0, x).2, -(0, x).1) ∈ (submoduleToLp U†.graph)ᗮ mem_submodule_adjoint_iff_mem_submoduleToLp_orthogonal 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†.domainᗮhx':x ≠ 0⊢ WithLp.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†.domainᗮhx':x ≠ 0⊢ WithLp.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†.domainᗮhx':x ≠ 0⊢ WithLp.toLp 2 ((0, x).2, -(0, x).1) ∈ (submoduleToLp U†.graph)ᗮ
rintro ⟨y, Uy⟩ hy 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†.domainᗮhx':x ≠ 0y:H'Uy:Hhy:WithLp.toLp 2 (y, Uy) ∈ submoduleToLp U†.graph⊢ ⟪WithLp.toLp 2 (y, Uy), WithLp.toLp 2 ((0, x).2, -(0, x).1)⟫_ℂ = 0
simp only [neg_zero, WithLp.prod_inner_apply, inner_zero_right, add_zero] 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†.domainᗮhx':x ≠ 0y:H'Uy:Hhy:WithLp.toLp 2 (y, Uy) ∈ submoduleToLp U†.graph⊢ ⟪y, x⟫_ℂ = 0
exact hx y (mem_domain_of_mem_graph hy) All goals completed! 🐙lemma IsUnbounded.closure (h : U.IsUnbounded) : U.closure.IsUnbounded :=
⟨h.1.closure, h.2.closureIsClosable⟩
@[simp]
lemma IsUnbounded.adjoint_closure_eq_adjoint [CompleteSpace H] (h : U.IsUnbounded) :
U.closure† = U† := by H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnbounded⊢ U.closure† = U†
refine eq_of_eq_graph ?_ H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnbounded⊢ U.closure†.graph = U†.graph
ext H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnboundedx✝:H' × H⊢ x✝ ∈ U.closure†.graph ↔ x✝ ∈ U†.graph
rw [adjoint_graph_eq_graph_adjoint h.1, H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnboundedx✝:H' × H⊢ x✝ ∈ U.closure†.graph ↔ x✝ ∈ U.graph.adjoint All goals completed! 🐙 adjoint_graph_eq_graph_adjoint h.1.closure, H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnboundedx✝:H' × H⊢ x✝ ∈ U.closure.graph.adjoint ↔ x✝ ∈ U.graph.adjoint All goals completed! 🐙
← IsClosable.graph_closure_eq_closure_graph h.2, H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnboundedx✝:H' × H⊢ x✝ ∈ U.graph.topologicalClosure.adjoint ↔ x✝ ∈ U.graph.adjoint All goals completed! 🐙
mem_submodule_closure_adjoint_iff_mem_submoduleToLp_closure_orthogonal, H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnboundedx✝:H' × H⊢ WithLp.toLp 2 (x✝.2, -x✝.1) ∈ (submoduleToLp U.graph).topologicalClosureᗮ ↔ x✝ ∈ U.graph.adjoint All goals completed! 🐙 orthogonal_closure, H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnboundedx✝:H' × H⊢ WithLp.toLp 2 (x✝.2, -x✝.1) ∈ (submoduleToLp U.graph)ᗮ ↔ x✝ ∈ U.graph.adjoint All goals completed! 🐙
mem_submodule_adjoint_iff_mem_submoduleToLp_orthogonal H:Type u_1inst✝⁴:NormedAddCommGroup Hinst✝³:InnerProductSpace ℂ HH':Type u_2inst✝²:NormedAddCommGroup H'inst✝¹:InnerProductSpace ℂ H'U:H →ₗ.[ℂ] H'inst✝:CompleteSpace Hh:U.IsUnboundedx✝:H' × H⊢ WithLp.toLp 2 (x✝.2, -x✝.1) ∈ (submoduleToLp U.graph)ᗮ ↔ WithLp.toLp 2 (x✝.2, -x✝.1) ∈ (submoduleToLp U.graph)ᗮ All goals completed! 🐙] All goals completed! 🐙
@[simp]
lemma IsUnbounded.adjoint_adjoint_eq_closure [CompleteSpace H] [CompleteSpace H']
(h : U.IsUnbounded) :
U†† = U.closure := by 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.IsUnbounded⊢ U†† = U.closure
refine eq_of_eq_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.IsUnbounded⊢ U††.graph = U.closure.graph
ext 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.IsUnboundedx✝:H × H'⊢ x✝ ∈ U††.graph ↔ x✝ ∈ U.closure.graph
rw [adjoint_graph_eq_graph_adjoint h.adjoint.1, 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.IsUnboundedx✝:H × H'⊢ x✝ ∈ U†.graph.adjoint ↔ x✝ ∈ U.closure.graph All goals completed! 🐙 adjoint_graph_eq_graph_adjoint h.1, 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.IsUnboundedx✝:H × H'⊢ x✝ ∈ U.graph.adjoint.adjoint ↔ x✝ ∈ U.closure.graph All goals completed! 🐙
← IsClosable.graph_closure_eq_closure_graph h.2, 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.IsUnboundedx✝:H × H'⊢ x✝ ∈ U.graph.adjoint.adjoint ↔ x✝ ∈ U.graph.topologicalClosure All goals completed! 🐙
mem_submodule_adjoint_adjoint_iff_mem_submoduleToLp_orthogonal_orthogonal, 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.IsUnboundedx✝:H × H'⊢ WithLp.toLp 2 x✝ ∈ (submoduleToLp U.graph)ᗮᗮ ↔ x✝ ∈ U.graph.topologicalClosure All goals completed! 🐙
orthogonal_orthogonal_eq_closure, 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.IsUnboundedx✝:H × H'⊢ WithLp.toLp 2 x✝ ∈ (submoduleToLp U.graph).topologicalClosure ↔ x✝ ∈ U.graph.topologicalClosure All goals completed! 🐙 mem_submodule_closure_iff_mem_submoduleToLp_closure 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.IsUnboundedx✝:H × H'⊢ WithLp.toLp 2 x✝ ∈ (submoduleToLp U.graph).topologicalClosure ↔
WithLp.toLp 2 x✝ ∈ (submoduleToLp U.graph).topologicalClosure All 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_kerC.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 := by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hx:↥T.domainy:↥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
simp only [map_add, coe_add, inner_add_right, inner_add_left, map_sub, AddSubgroupClass.coe_sub,
inner_sub_right, inner_sub_left, sub_sub, map_smul, SetLike.val_smul, inner_smul_left, conj_I,
neg_mul, inner_smul_right, mul_add, mul_neg, ← mul_assoc, ← pow_two, I_sq, one_mul, neg_neg,
sub_neg_eq_add, mul_sub] H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hx:↥T.domainy:↥T.domain⊢ ⟪↑T 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
ring 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 := by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hx:↥T.domainy:↥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
simp only [map_add, coe_add, inner_add_right, inner_add_left, map_sub, AddSubgroupClass.coe_sub,
inner_sub_right, inner_sub_left, sub_sub, map_smul, SetLike.val_smul, inner_smul_left, conj_I,
neg_mul, inner_smul_right, mul_add, mul_neg, ← mul_assoc, ← pow_two, I_sq, one_mul, neg_neg,
sub_neg_eq_add, mul_sub] H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hx:↥T.domainy:↥T.domain⊢ ⟪↑T 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
ring All goals completed! 🐙
-- The analogue of `LinearMap.isSymmetric_iff_inner_map_self_real` for LinearPMap.
lemma isSymmetric_iff_inner_map_self_real :
T.IsSymmetric ↔ ∀ x : T.domain, conj ⟪T x, x⟫_ℂ = ⟪T x, x⟫_ℂ := by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] H⊢ T.IsSymmetric ↔ ∀ (x : ↥T.domain), (starRingEnd ℂ) ⟪↑T x, ↑x⟫_ℂ = ⟪↑T x, ↑x⟫_ℂ
refine ⟨fun h_symm x ↦ by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hh_symm:T.IsSymmetricx:↥T.domain⊢ (starRingEnd ℂ) ⟪↑T x, ↑x⟫_ℂ = ⟪↑T x, ↑x⟫_ℂ simp [h_symm x x] All goals completed! 🐙, fun h_re x y ↦ ?_⟩
nth_rw 2 [← inner_conj_symm, 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⟫_ℂ = (starRingEnd ℂ) ⟪↑T y, ↑x⟫_ℂ inner_map_polarization 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⟫_ℂ =
(starRingEnd ℂ)
((⟪↑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 →ₗ.[ℂ] Hh_re:∀ (x : ↥T.domain), (starRingEnd ℂ) ⟪↑T x, ↑x⟫_ℂ = ⟪↑T x, ↑x⟫_ℂx:↥T.domainy:↥T.domain⊢ ⟪↑T x, ↑y⟫_ℂ =
(starRingEnd ℂ)
((⟪↑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)
simp only [map_div₀, _root_.map_sub, _root_.map_add, map_mul, neg_mul, conj_ofNat, conj_I, h_re] 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⟫_ℂ =
(⟪↑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
rw [inner_map_polarization' 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 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] 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
simp [sub_eq_add_neg] 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† := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.HasDenseDomain⊢ T.IsSymmetric ↔ T ≤ T†
refine ⟨fun h_symm ↦ h_symm.le_adjoint h, fun h_le x y ↦ ?_⟩ H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.HasDenseDomainh_le:T ≤ T†x:↥T.domainy:↥T.domain⊢ ⟪↑T x, ↑y⟫_ℂ = ⟪↑x, ↑T y⟫_ℂ
have h_eq : T x = T† ⟨x, h_le.1 x.2⟩ := @h_le.2 x ⟨x, h_le.1 x.2⟩ rfl H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.HasDenseDomainh_le:T ≤ T†x:↥T.domainy:↥T.domainh_eq:↑T x = ↑T† ⟨↑x, ⋯⟩⊢ ⟪↑T x, ↑y⟫_ℂ = ⟪↑x, ↑T y⟫_ℂ
exact h_eq ▸ adjoint_isFormalAdjoint h _ _ All goals completed! 🐙lemma IsSymmetric.closure_le_adjoint [CompleteSpace H] (h : T.IsSymmetric) (h' : T.HasDenseDomain) :
T.closure ≤ T† := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T.closure ≤ T†
have h_adj : T†.IsClosed := adjoint_isClosed h' H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh_adj:T†.IsClosed⊢ T.closure ≤ T†
exact h_adj.closure_eq ▸ h_adj.isClosable.closure_mono (h.le_adjoint h') All goals completed! 🐙
lemma IsSymmetric.isEssentiallySelfAdjoint_iff [CompleteSpace H]
(h : T.IsSymmetric) (h' : T.HasDenseDomain) :
T.IsEssentiallySelfAdjoint ↔ T†.domain = T.closure.domain := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T.IsEssentiallySelfAdjoint ↔ T†.domain = T.closure.domain
rw [isEssentiallySelfAdjoint_def, H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ IsSelfAdjoint T.closure ↔ T†.domain = T.closure.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T† = T.closure ↔ T†.domain = T.closure.domain isSelfAdjoint_def, H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T.closure† = T.closure ↔ T†.domain = T.closure.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T† = T.closure ↔ T†.domain = T.closure.domain
(h.isUnbounded_iff_hasDenseDomain.mpr h').adjoint_closure_eq_adjoint H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T† = T.closure ↔ T†.domain = T.closure.domain H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T† = T.closure ↔ T†.domain = T.closure.domain] H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T† = T.closure ↔ T†.domain = T.closure.domain
constructor mp H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T† = T.closure → T†.domain = T.closure.domainmpr H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T†.domain = T.closure.domain → T† = T.closure <;> mp H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T† = T.closure → T†.domain = T.closure.domainmpr H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T†.domain = T.closure.domain → T† = T.closure intro h'' mpr H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T†.domain = T.closure.domain⊢ T† = T.closure
· mp H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T† = T.closure⊢ T†.domain = T.closure.domain congr All goals completed! 🐙
· mpr H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T†.domain = T.closure.domain⊢ T† = T.closure exact (eq_of_le_of_domain_eq (h.closure_le_adjoint h') h''.symm).symm All goals completed! 🐙lemma IsSymmetric.isSelfAdjoint_iff [CompleteSpace H] (h : T.IsSymmetric) (h' : T.HasDenseDomain) :
IsSelfAdjoint T ↔ T†.domain = T.domain := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ IsSelfAdjoint T ↔ T†.domain = T.domain
constructor mp H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ IsSelfAdjoint T → T†.domain = T.domainmpr H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T†.domain = T.domain → IsSelfAdjoint T <;> mp H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ IsSelfAdjoint T → T†.domain = T.domainmpr H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomain⊢ T†.domain = T.domain → IsSelfAdjoint T intro h'' mpr H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T†.domain = T.domain⊢ IsSelfAdjoint T
· mp H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':IsSelfAdjoint T⊢ T†.domain = T.domain congr All goals completed! 🐙
· mpr H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsSymmetrich':T.HasDenseDomainh'':T†.domain = T.domain⊢ IsSelfAdjoint T exact (eq_of_le_of_domain_eq ((isSymmetric_iff_le_adjoint h').mp h) h''.symm).symm All goals completed! 🐙lemma add_adjoint_isSymmetric [CompleteSpace H] (h : T.HasDenseDomain) :
(T + T.adjoint).IsSymmetric := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.HasDenseDomain⊢ (T + T†).IsSymmetric
intro x y 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⟫_ℂ
have h₁ := adjoint_isFormalAdjoint h ⟨x, x.2.2⟩ ⟨y, y.2.1⟩ 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⟫_ℂ
have h₂ := congrArg conj (adjoint_isFormalAdjoint h ⟨y, y.2.2⟩ ⟨x, x.2.1⟩) 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⟫_ℂ
simp only [inner_conj_symm] at h₂ 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⟫_ℂ
simp only [add_apply, inner_add_left, inner_add_right, h₁, h₂] 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⟫_ℂ
exact add_comm _ _ All goals completed! 🐙
@[aesop safe apply]
lemma IsSymmetric.pow (h : T.IsSymmetric) (n : ℕ) : (T ^ n).IsSymmetric := by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hh:T.IsSymmetricn:ℕ⊢ (T ^ n).IsSymmetric
induction n with
| zero => zero H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hh:T.IsSymmetric⊢ (T ^ 0).IsSymmetric exact fun _ _ ↦ rfl All goals completed! 🐙
| succ n ih => succ H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hh:T.IsSymmetricn:ℕih:(T ^ n).IsSymmetric⊢ (T ^ (n + 1)).IsSymmetric
intro x y succ H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hh:T.IsSymmetricn:ℕih:(T ^ n).IsSymmetricx:↥(T ^ (n + 1)).domainy:↥(T ^ (n + 1)).domain⊢ ⟪↑(T ^ (n + 1)) x, ↑y⟫_ℂ = ⟪↑x, ↑(T ^ (n + 1)) y⟫_ℂ
let y' : (T * T ^ n).domain := ⟨y, pow_succ' T n ▸ y.2⟩ succ 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, ⋯⟩⊢ ⟪↑(T ^ (n + 1)) x, ↑y⟫_ℂ = ⟪↑x, ↑(T ^ (n + 1)) y⟫_ℂ
let Tx : (T ^ n).domain := ⟨T ⟨x, x.2.2⟩, mem_domain_of_mem_compRestricted_domain x⟩ succ 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, ⋯⟩, ⋯⟩⊢ ⟪↑(T ^ (n + 1)) x, ↑y⟫_ℂ = ⟪↑x, ↑(T ^ (n + 1)) y⟫_ℂ
let Tny : T.domain := ⟨(T ^ n) ⟨y', y'.2.2⟩, mem_domain_of_mem_compRestricted_domain y'⟩ succ 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', ⋯⟩, ⋯⟩⊢ ⟪↑(T ^ (n + 1)) x, ↑y⟫_ℂ = ⟪↑x, ↑(T ^ (n + 1)) y⟫_ℂ
have h_eq : T Tny = (T ^ (n + 1)) y := by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hh:T.IsSymmetricn:ℕ⊢ (T ^ n).IsSymmetric succ 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⟫_ℂ
change (T * T ^ n) y' = (T ^ (n + 1)) y 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', ⋯⟩, ⋯⟩⊢ ↑(T * T ^ n) y' = ↑(T ^ (n + 1)) y succ 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⟫_ℂ
congr 1 e_12 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', ⋯⟩, ⋯⟩⊢ T * T ^ n = T ^ (n + 1)e_13 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', ⋯⟩, ⋯⟩⊢ y' ≍ ysucc 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⟫_ℂ
· e_12 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', ⋯⟩, ⋯⟩⊢ T * T ^ n = T ^ (n + 1)succ 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⟫_ℂ exact (pow_succ' T n).symm All goals completed! 🐙succ 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⟫_ℂ
· e_13 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', ⋯⟩, ⋯⟩⊢ y' ≍ ysucc 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⟫_ℂ exact (Subtype.heq_iff_coe_eq <| by 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', ⋯⟩, ⋯⟩⊢ ∀ (x : H), x ∈ (T * T ^ n).domain ↔ x ∈ (T ^ (n + 1)).domainsucc 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⟫_ℂ simp [pow_succ'] All goals completed! 🐙succ 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⟫_ℂ).mpr rflsucc 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⟫_ℂ
exact (ih Tx ⟨y', y'.2.2⟩).trans (h_eq ▸ h ⟨x, x.2.2⟩ Tny) All goals completed! 🐙@[aesop safe apply]
lemma IsSymmetric.neg (h : T.IsSymmetric) : (-T).IsSymmetric := fun x y ↦ by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hh:T.IsSymmetricx:↥(-T).domainy:↥(-T).domain⊢ ⟪↑(-T) x, ↑y⟫_ℂ = ⟪↑x, ↑(-T) y⟫_ℂ simp [h x y] All goals completed! 🐙@[aesop safe apply]
lemma IsSymmetric.add (h₁ : T₁.IsSymmetric) (h₂ : T₂.IsSymmetric) : (T₁ + T₂).IsSymmetric := by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT₁:H →ₗ.[ℂ] HT₂:H →ₗ.[ℂ] Hh₁:T₁.IsSymmetrich₂:T₂.IsSymmetric⊢ (T₁ + T₂).IsSymmetric
intro x y 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⟫_ℂ
simp [h₁ ⟨x, x.2.1⟩ ⟨y, y.2.1⟩, h₂ ⟨x, x.2.2⟩ ⟨y, y.2.2⟩, add_apply, inner_add_left,
inner_add_right] 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 ↦ by 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⟫_ℂ simp only [smul_apply, inner_smul_left, inner_smul_right, hc, h x 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 := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ Hα:Type u_4inst✝:Fintype αS:α → H →ₗ.[ℂ] Hh:∀ (a : α), (S a).IsSymmetric⊢ (LinearPMap.sum S).IsSymmetric
intro x y 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⟫_ℂ
simp [sum_apply, sum_inner, inner_sum, h _ ⟨x, sum_domain_le S _ x.2⟩ ⟨y, sum_domain_le S _ y.2⟩] All goals completed! 🐙lemma IsSymmetric.of_le (h₁ : T₁.IsSymmetric) (h_le : T₂ ≤ T₁) : T₂.IsSymmetric := by H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT₁:H →ₗ.[ℂ] HT₂:H →ₗ.[ℂ] Hh₁:T₁.IsSymmetrich_le:T₂ ≤ T₁⊢ T₂.IsSymmetric
intro x y H:Type u_1inst✝¹:NormedAddCommGroup Hinst✝:InnerProductSpace ℂ HT₁:H →ₗ.[ℂ] HT₂:H →ₗ.[ℂ] Hh₁:T₁.IsSymmetrich_le:T₂ ≤ T₁x:↥T₂.domainy:↥T₂.domain⊢ ⟪↑T₂ x, ↑y⟫_ℂ = ⟪↑x, ↑T₂ y⟫_ℂ
have hx : T₂ x = T₁ ⟨x, h_le.1 x.2⟩ := @h_le.2 x ⟨x, h_le.1 x.2⟩ rfl 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⟫_ℂ
have hy : T₂ y = T₁ ⟨y, h_le.1 y.2⟩ := @h_le.2 y ⟨y, h_le.1 y.2⟩ rfl 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⟫_ℂ
exact hx ▸ hy ▸ h₁ ⟨x, h_le.1 x.2⟩ ⟨y, h_le.1 y.2⟩ 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 := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomain⊢ T.closure.IsSymmetric
have hle : T ≤ T† := (isSymmetric_def.mp hsym).le_adjoint hdense H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T ≤ T†⊢ T.closure.IsSymmetric
have hadj_dense : T†.HasDenseDomain := hdense.mono hle.1 H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T ≤ T†hadj_dense:T†.HasDenseDomain⊢ T.closure.IsSymmetric
have hT_le : T ≤ T†† := (adjoint_isFormalAdjoint hdense).le_adjoint hadj_dense H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T ≤ T†hadj_dense:T†.HasDenseDomainhT_le:T ≤ T††⊢ T.closure.IsSymmetric
have hc : (T††).IsClosed := adjoint_isClosed hadj_dense H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T ≤ T†hadj_dense:T†.HasDenseDomainhT_le:T ≤ T††hc:T††.IsClosed⊢ T.closure.IsSymmetric
have h1 : (T††).IsSymmetric :=
(isSymmetric_iff_le_adjoint (hdense.mono hT_le.1)).mpr
(adjoint_antitone (Or.inl (hdense.mono hT_le.1)) (adjoint_antitone (Or.inl hdense) hle)) H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hhsym:T.IsSymmetrichdense:T.HasDenseDomainhle:T ≤ T†hadj_dense:T†.HasDenseDomainhT_le:T ≤ T††hc:T††.IsClosedh1:T††.IsSymmetric⊢ T.closure.IsSymmetric
exact h1.of_le (hc.closure_eq ▸ hc.isClosable.closure_mono hT_le) 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
lemma IsSelfAdjoint.isSymmetric [CompleteSpace H] (h : IsSelfAdjoint T) : T.IsSymmetric := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ T.IsSymmetric
rw [isSymmetric_def H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ T.IsFormalAdjoint T H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ T.IsFormalAdjoint T] H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ T.IsFormalAdjoint T
nth_rw 1 [← h H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ (star T).IsFormalAdjoint T] H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ (star T).IsFormalAdjoint T
exact adjoint_isFormalAdjoint h.dense_domain 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 h⟩lemma 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† := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ IsSelfAdjoint T†
apply isSelfAdjoint_def.mp at h H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T† = T⊢ IsSelfAdjoint T†
exact h.symm ▸ h All goals completed! 🐙
@[aesop safe apply]
lemma IsSelfAdjoint.smul [CompleteSpace H]
(h : IsSelfAdjoint T) {c : ℂ} (hc : c ≠ 0) (hc' : conj c = c) :
IsSelfAdjoint (c • T) := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint Tc:ℂhc:c ≠ 0hc':(starRingEnd ℂ) c = c⊢ IsSelfAdjoint (c • T)
rw [isSelfAdjoint_def, H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint Tc:ℂhc:c ≠ 0hc':(starRingEnd ℂ) c = c⊢ (c • T)† = c • T All goals completed! 🐙 T.adjoint_smul hc, H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint Tc:ℂhc:c ≠ 0hc':(starRingEnd ℂ) c = c⊢ (starRingEnd ℂ) c • T† = c • T All goals completed! 🐙 hc', H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint Tc:ℂhc:c ≠ 0hc':(starRingEnd ℂ) c = c⊢ c • T† = c • T All goals completed! 🐙 isSelfAdjoint_def.mp h H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint Tc:ℂhc:c ≠ 0hc':(starRingEnd ℂ) c = c⊢ c • T = c • 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 (by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ -1 ≠ 0 norm_num All goals completed! 🐙) (by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:IsSelfAdjoint T⊢ (starRingEnd ℂ) (-1) = -1 norm_num 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.
lemma IsSymmetric.isSelfAdjoint_of_range_eq_top [CompleteSpace H] (hsym : T.IsSymmetric)
(hdense : T.HasDenseDomain)
(hadd : (T + I • 1).toFun.range = ⊤) (hsub : (T - I • 1).toFun.range = ⊤) :
IsSelfAdjoint T := by 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 = ⊤⊢ IsSelfAdjoint T
have hplus : ∀ φ : H, ∃ ψ : T.domain, T ψ + I • (ψ : H) = φ := fun φ => by 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 = ⊤φ:H⊢ ∃ ψ, ↑T ψ + I • ↑ψ = φ 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 • ↑ψ = φ⊢ IsSelfAdjoint T
obtain ⟨ψ, hψ⟩ := LinearMap.range_eq_top.mp hadd φ 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 = ⊤φ:Hψ:↥(T + I • 1).domainhψ:(T + I • 1).toFun ψ = φ⊢ ∃ ψ, ↑T ψ + I • ↑ψ = φ 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 • ↑ψ = φ⊢ IsSelfAdjoint T
exact ⟨⟨(ψ : H), (Submodule.mem_inf.mp ψ.2).1⟩, hψ⟩ 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 • ↑ψ = φ⊢ IsSelfAdjoint 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 • ↑ψ = φ⊢ IsSelfAdjoint T
have hminus : ∀ φ : H, ∃ ψ : T.domain, T ψ - I • (ψ : H) = φ := fun φ => by 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 • ↑ψ = φφ:H⊢ ∃ ψ, ↑T ψ - I • ↑ψ = φ 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 • ↑ψ = φ⊢ IsSelfAdjoint T
obtain ⟨ψ, hψ⟩ := LinearMap.range_eq_top.mp hsub φ 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 • ↑ψ = φφ:Hψ:↥(T - I • 1).domainhψ:(T - I • 1).toFun ψ = φ⊢ ∃ ψ, ↑T ψ - I • ↑ψ = φ 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 • ↑ψ = φ⊢ IsSelfAdjoint T
exact ⟨⟨(ψ : H), (Submodule.mem_inf.mp ψ.2).1⟩, hψ⟩ 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 • ↑ψ = φ⊢ IsSelfAdjoint 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 • ↑ψ = φ⊢ IsSelfAdjoint T
rw [isSelfAdjoint_def 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 • ↑ψ = φ⊢ T† = 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 • ↑ψ = φ⊢ T† = 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 • ↑ψ = φ⊢ T† = T
have hle : T ≤ T.adjoint := (isSymmetric_def.mp hsym).le_adjoint hdense 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 ≤ T†⊢ T† = T
apply le_antisymm _ hle 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 ≤ T†⊢ T† ≤ T
apply le_of_eqLocus_ge 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 ≤ T†⊢ T†.domain ≤ T†.eqLocus T
intro w hw 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 ≤ T†w:Hhw:w ∈ T†.domain⊢ w ∈ T†.eqLocus T
let W : T.adjoint.domain := ⟨w, hw⟩ 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩⊢ w ∈ T†.eqLocus T
obtain ⟨x, hx⟩ := hminus (T.adjoint W - I • (W : H)) 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑W⊢ w ∈ T†.eqLocus T
set X : T.adjoint.domain := ⟨x, hle.1 x.2⟩ with hX 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩⊢ w ∈ T†.eqLocus T
have hxeq : T.adjoint X = T x := (hle.2 (x := x) (y := X) rfl).symm 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩hxeq:↑T† X = ↑T x⊢ w ∈ T†.eqLocus T
have hdiff : T.adjoint (W - X) = I • ((W - X) : H) := by 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 = ⊤⊢ IsSelfAdjoint 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ T†.eqLocus T
rw [LinearPMap.map_sub, 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩hxeq:↑T† X = ↑T x⊢ ↑T† W - ↑T† X = I • (↑W - ↑X) 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ T†.eqLocus T hxeq, 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩hxeq:↑T† X = ↑T x⊢ ↑T† W - ↑T x = I • (↑W - ↑X) 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ T†.eqLocus T hX, 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩hxeq:↑T† X = ↑T x⊢ ↑T† W - ↑T x = I • (↑W - ↑⟨↑x, ⋯⟩) 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ T†.eqLocus T Subtype.coe_mk, 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩hxeq:↑T† X = ↑T x⊢ ↑T† W - ↑T x = I • (w - ↑⟨↑x, ⋯⟩) 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ T†.eqLocus T smul_sub, 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩hxeq:↑T† X = ↑T x⊢ ↑T† W - ↑T x = I • w - I • ↑⟨↑x, ⋯⟩ 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ T†.eqLocus T sub_eq_sub_iff_sub_eq_sub, 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩hxeq:↑T† X = ↑T x⊢ ↑T† W - I • w = ↑T x - I • ↑⟨↑x, ⋯⟩ 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ T†.eqLocus T hx 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥T.domainhx:↑T x - I • ↑x = ↑T† W - I • ↑WX:↥T†.domain := ⟨↑x, ⋯⟩hX:X = ⟨↑x, ⋯⟩hxeq:↑T† X = ↑T x⊢ ↑T† W - I • w = ↑T† W - I • ↑W 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)⊢ w ∈ T†.eqLocus T
have hker : ∀ w : T.adjoint.domain, T.adjoint w = I • (w : H) → (w : H) = 0 := by 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 = ⊤⊢ IsSelfAdjoint 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T
intro w hw 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑w⊢ ↑w = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T
obtain ⟨v, hv⟩ := hplus (w : H) 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ ↑w = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T
suffices ⟪↑w, T v + I • v⟫_ℂ = 0 by 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑wthis:⟪↑w, ↑T v + I • ↑v⟫_ℂ = 0⊢ ↑w = 0 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ ⟪↑w, ↑T v + I • ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T
exact inner_self_eq_zero.mp (hv ▸ this) 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ ⟪↑w, ↑T v + I • ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ ⟪↑w, ↑T v + I • ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T
rw [inner_add_right, 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ ⟪↑w, ↑T v⟫_ℂ + ⟪↑w, I • ↑v⟫_ℂ = 0 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ -I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T inner_smul_right, 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ ⟪↑w, ↑T v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ -I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T ← adjoint_isFormalAdjoint hdense w v, 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ ⟪↑T† w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ -I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T hw, 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ ⟪I • ↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ -I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T
inner_smul_left, 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ (starRingEnd ℂ) I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ -I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T conj_I 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ -I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ -I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ 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 ≤ T†w✝:Hhw✝:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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)w:↥T†.domainhw:↑T† w = I • ↑wv:↥T.domainhv:↑T v + I • ↑v = ↑w⊢ -I * ⟪↑w, ↑v⟫_ℂ + I * ⟪↑w, ↑v⟫_ℂ = 0 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T
ring 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ 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 ≤ T†w:Hhw:w ∈ T†.domainW:↥T†.domain := ⟨w, hw⟩x:↥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 = 0⊢ w ∈ T†.eqLocus T
obtain rfl : w = (x : H) := sub_eq_zero.mp (hker (W - X) hdiff) 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 ≤ T†x:↥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, hw⟩hx:↑T x - I • ↑x = ↑T† W - I • ↑Whdiff:↑T† (W - X) = I • (↑W - ↑X)⊢ ↑x ∈ T†.eqLocus T
exact ⟨hw, x.2, hxeq⟩ 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.hasDenseDomainThe 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 := by 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
have h_cl : T₂.IsClosed := IsSelfAdjoint.isClosed h₂ 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₂.IsClosed⊢ T₂ = T.closure
have h_le' : T.closure ≤ T₂ := h_cl.closure_eq ▸ h_cl.isClosable.closure_mono h_le 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
exact eq_of_le_of_ge (h ▸ h₂ ▸ adjoint_antitone (Or.inl h.hasDenseDomain.closure) h_le') h_le' 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 := by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjointc:ℂhc:c ≠ 0hc':(starRingEnd ℂ) c = c⊢ (c • T).IsEssentiallySelfAdjoint
simp_all [isEssentiallySelfAdjoint_def, isSelfAdjoint_def, closure_smul _ hc, adjoint_smul _ hc] 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 (by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjoint⊢ -1 ≠ 0 norm_num All goals completed! 🐙) (by H:Type u_1inst✝²:NormedAddCommGroup Hinst✝¹:InnerProductSpace ℂ HT:H →ₗ.[ℂ] Hinst✝:CompleteSpace Hh:T.IsEssentiallySelfAdjoint⊢ (starRingEnd ℂ) (-1) = -1 norm_num All goals completed! 🐙)