analysis.inner_product_space.linear_pmap
β·
Mathlib.Analysis.InnerProductSpace.LinearPMap
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-/
import Analysis.InnerProductSpace.Adjoint
-import Topology.Algebra.Module.LinearPmap
+import Topology.Algebra.Module.LinearPMap
import Topology.Algebra.Module.Basic
#align_import analysis.inner_product_space.linear_pmap from "leanprover-community/mathlib"@"9240e8be927a0955b9a82c6c85ef499ee3a626b8"
@@ -54,11 +54,11 @@ Unbounded operators, closed operators
noncomputable section
-open IsROrC
+open RCLike
open scoped ComplexConjugate Classical
-variable {π E F G : Type _} [IsROrC π]
+variable {π E F G : Type _} [RCLike π]
variable [NormedAddCommGroup E] [InnerProductSpace π E]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -105,39 +105,39 @@ def adjointDomain : Submodule π F
#align linear_pmap.adjoint_domain LinearPMap.adjointDomain
-/
-#print LinearPMap.adjointDomainMkClm /-
+#print LinearPMap.adjointDomainMkCLM /-
/-- The operator `Ξ» x, βͺy, T xβ«` considered as a continuous linear operator from `T.adjoint_domain`
to `π`. -/
-def adjointDomainMkClm (y : T.adjointDomain) : T.domain βL[π] π :=
+def adjointDomainMkCLM (y : T.adjointDomain) : T.domain βL[π] π :=
β¨(innerββ π (y : F)).comp T.toFun, y.Propβ©
-#align linear_pmap.adjoint_domain_mk_clm LinearPMap.adjointDomainMkClm
+#align linear_pmap.adjoint_domain_mk_clm LinearPMap.adjointDomainMkCLM
-/
-#print LinearPMap.adjointDomainMkClm_apply /-
-theorem adjointDomainMkClm_apply (y : T.adjointDomain) (x : T.domain) :
- adjointDomainMkClm T y x = βͺ(y : F), T xβ« :=
+#print LinearPMap.adjointDomainMkCLM_apply /-
+theorem adjointDomainMkCLM_apply (y : T.adjointDomain) (x : T.domain) :
+ adjointDomainMkCLM T y x = βͺ(y : F), T xβ« :=
rfl
-#align linear_pmap.adjoint_domain_mk_clm_apply LinearPMap.adjointDomainMkClm_apply
+#align linear_pmap.adjoint_domain_mk_clm_apply LinearPMap.adjointDomainMkCLM_apply
-/
variable {T}
variable (hT : Dense (T.domain : Set E))
-#print LinearPMap.adjointDomainMkClmExtend /-
+#print LinearPMap.adjointDomainMkCLMExtend /-
/-- The unique continuous extension of the operator `adjoint_domain_mk_clm` to `E`. -/
-def adjointDomainMkClmExtend (y : T.adjointDomain) : E βL[π] π :=
- (T.adjointDomainMkClm y).extend (Submodule.subtypeL T.domain) hT.denseRange_val
+def adjointDomainMkCLMExtend (y : T.adjointDomain) : E βL[π] π :=
+ (T.adjointDomainMkCLM y).extend (Submodule.subtypeL T.domain) hT.denseRange_val
uniformEmbedding_subtype_val.to_uniformInducing
-#align linear_pmap.adjoint_domain_mk_clm_extend LinearPMap.adjointDomainMkClmExtend
+#align linear_pmap.adjoint_domain_mk_clm_extend LinearPMap.adjointDomainMkCLMExtend
-/
-#print LinearPMap.adjointDomainMkClmExtend_apply /-
+#print LinearPMap.adjointDomainMkCLMExtend_apply /-
@[simp]
-theorem adjointDomainMkClmExtend_apply (y : T.adjointDomain) (x : T.domain) :
- adjointDomainMkClmExtend hT y (x : E) = βͺ(y : F), T xβ« :=
+theorem adjointDomainMkCLMExtend_apply (y : T.adjointDomain) (x : T.domain) :
+ adjointDomainMkCLMExtend hT y (x : E) = βͺ(y : F), T xβ« :=
ContinuousLinearMap.extend_eq _ _ _ _ _
-#align linear_pmap.adjoint_domain_mk_clm_extend_apply LinearPMap.adjointDomainMkClmExtend_apply
+#align linear_pmap.adjoint_domain_mk_clm_extend_apply LinearPMap.adjointDomainMkCLMExtend_apply
-/
variable [CompleteSpace E]
@@ -149,7 +149,7 @@ This is an auxiliary definition needed to define the adjoint operator as a `line
the assumption that `T.domain` is dense. -/
def adjointAux : T.adjointDomain ββ[π] E
where
- toFun y := (InnerProductSpace.toDual π E).symm (adjointDomainMkClmExtend hT y)
+ toFun y := (InnerProductSpace.toDual π E).symm (adjointDomainMkCLMExtend hT y)
map_add' x y :=
hT.eq_of_inner_left fun _ => by
simp only [inner_add_left, Submodule.coe_add, InnerProductSpace.toDual_symm_apply,
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2022 Moritz Doll. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-/
-import Mathbin.Analysis.InnerProductSpace.Adjoint
-import Mathbin.Topology.Algebra.Module.LinearPmap
-import Mathbin.Topology.Algebra.Module.Basic
+import Analysis.InnerProductSpace.Adjoint
+import Topology.Algebra.Module.LinearPmap
+import Topology.Algebra.Module.Basic
#align_import analysis.inner_product_space.linear_pmap from "leanprover-community/mathlib"@"9240e8be927a0955b9a82c6c85ef499ee3a626b8"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2022 Moritz Doll. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-
-! This file was ported from Lean 3 source module analysis.inner_product_space.linear_pmap
-! leanprover-community/mathlib commit 9240e8be927a0955b9a82c6c85ef499ee3a626b8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.InnerProductSpace.Adjoint
import Mathbin.Topology.Algebra.Module.LinearPmap
import Mathbin.Topology.Algebra.Module.Basic
+#align_import analysis.inner_product_space.linear_pmap from "leanprover-community/mathlib"@"9240e8be927a0955b9a82c6c85ef499ee3a626b8"
+
/-!
# Partially defined linear operators on Hilbert spaces
mathlib commit https://github.com/leanprover-community/mathlib/commit/9240e8be927a0955b9a82c6c85ef499ee3a626b8
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
! This file was ported from Lean 3 source module analysis.inner_product_space.linear_pmap
-! leanprover-community/mathlib commit 8b981918a93bc45a8600de608cde7944a80d92b9
+! leanprover-community/mathlib commit 9240e8be927a0955b9a82c6c85ef499ee3a626b8
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.Topology.Algebra.Module.Basic
# Partially defined linear operators on Hilbert spaces
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We will develop the basics of the theory of unbounded operators on Hilbert spaces.
## Main definitions
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -68,21 +68,26 @@ local notation "βͺ" x ", " y "β«" => @inner π _ _ x y
namespace LinearPMap
+#print LinearPMap.IsFormalAdjoint /-
/-- An operator `T` is a formal adjoint of `S` if for all `x` in the domain of `T` and `y` in the
domain of `S`, we have that `βͺT x, yβ« = βͺx, S yβ«`. -/
def IsFormalAdjoint (T : E ββ.[π] F) (S : F ββ.[π] E) : Prop :=
β (x : T.domain) (y : S.domain), βͺT x, yβ« = βͺ(x : E), S yβ«
#align linear_pmap.is_formal_adjoint LinearPMap.IsFormalAdjoint
+-/
variable {T : E ββ.[π] F} {S : F ββ.[π] E}
+#print LinearPMap.IsFormalAdjoint.symm /-
@[protected]
theorem IsFormalAdjoint.symm (h : T.IsFormalAdjoint S) : S.IsFormalAdjoint T := fun y _ => by
rw [β inner_conj_symm, β inner_conj_symm (y : F), h]
#align linear_pmap.is_formal_adjoint.symm LinearPMap.IsFormalAdjoint.symm
+-/
variable (T)
+#print LinearPMap.adjointDomain /-
/-- The domain of the adjoint operator.
This definition is needed to construct the adjoint operator and the preferred version to use is
@@ -98,36 +103,46 @@ def adjointDomain : Submodule π F
rw [Set.mem_setOf_eq, LinearMap.map_smulββ] at *
exact hx.const_smul (conj a)
#align linear_pmap.adjoint_domain LinearPMap.adjointDomain
+-/
+#print LinearPMap.adjointDomainMkClm /-
/-- The operator `Ξ» x, βͺy, T xβ«` considered as a continuous linear operator from `T.adjoint_domain`
to `π`. -/
def adjointDomainMkClm (y : T.adjointDomain) : T.domain βL[π] π :=
β¨(innerββ π (y : F)).comp T.toFun, y.Propβ©
#align linear_pmap.adjoint_domain_mk_clm LinearPMap.adjointDomainMkClm
+-/
+#print LinearPMap.adjointDomainMkClm_apply /-
theorem adjointDomainMkClm_apply (y : T.adjointDomain) (x : T.domain) :
adjointDomainMkClm T y x = βͺ(y : F), T xβ« :=
rfl
#align linear_pmap.adjoint_domain_mk_clm_apply LinearPMap.adjointDomainMkClm_apply
+-/
variable {T}
variable (hT : Dense (T.domain : Set E))
+#print LinearPMap.adjointDomainMkClmExtend /-
/-- The unique continuous extension of the operator `adjoint_domain_mk_clm` to `E`. -/
def adjointDomainMkClmExtend (y : T.adjointDomain) : E βL[π] π :=
(T.adjointDomainMkClm y).extend (Submodule.subtypeL T.domain) hT.denseRange_val
uniformEmbedding_subtype_val.to_uniformInducing
#align linear_pmap.adjoint_domain_mk_clm_extend LinearPMap.adjointDomainMkClmExtend
+-/
+#print LinearPMap.adjointDomainMkClmExtend_apply /-
@[simp]
theorem adjointDomainMkClmExtend_apply (y : T.adjointDomain) (x : T.domain) :
adjointDomainMkClmExtend hT y (x : E) = βͺ(y : F), T xβ« :=
ContinuousLinearMap.extend_eq _ _ _ _ _
#align linear_pmap.adjoint_domain_mk_clm_extend_apply LinearPMap.adjointDomainMkClmExtend_apply
+-/
variable [CompleteSpace E]
+#print LinearPMap.adjointAux /-
/-- The adjoint as a linear map from its domain to `E`.
This is an auxiliary definition needed to define the adjoint operator as a `linear_pmap` without
@@ -144,34 +159,44 @@ def adjointAux : T.adjointDomain ββ[π] E
simp only [inner_smul_left, Submodule.coe_smul_of_tower, RingHom.id_apply,
InnerProductSpace.toDual_symm_apply, adjoint_domain_mk_clm_extend_apply]
#align linear_pmap.adjoint_aux LinearPMap.adjointAux
+-/
+#print LinearPMap.adjointAux_inner /-
theorem adjointAux_inner (y : T.adjointDomain) (x : T.domain) :
βͺadjointAux hT y, xβ« = βͺ(y : F), T xβ« := by
simp only [adjoint_aux, LinearMap.coe_mk, InnerProductSpace.toDual_symm_apply,
adjoint_domain_mk_clm_extend_apply]
#align linear_pmap.adjoint_aux_inner LinearPMap.adjointAux_inner
+-/
+#print LinearPMap.adjointAux_unique /-
theorem adjointAux_unique (y : T.adjointDomain) {xβ : E}
(hxβ : β x : T.domain, βͺxβ, xβ« = βͺ(y : F), T xβ«) : adjointAux hT y = xβ :=
hT.eq_of_inner_left fun v => (adjointAux_inner hT _ _).trans (hxβ v).symm
#align linear_pmap.adjoint_aux_unique LinearPMap.adjointAux_unique
+-/
variable (T)
+#print LinearPMap.adjoint /-
/-- The adjoint operator as a partially defined linear operator. -/
def adjoint : F ββ.[π] E where
domain := T.adjointDomain
toFun := if hT : Dense (T.domain : Set E) then adjointAux hT else 0
#align linear_pmap.adjoint LinearPMap.adjoint
+-/
scoped postfix:1024 "β " => LinearPMap.adjoint
+#print LinearPMap.mem_adjoint_domain_iff /-
theorem mem_adjoint_domain_iff (y : F) : y β Tβ .domain β Continuous ((innerββ π y).comp T.toFun) :=
Iff.rfl
#align linear_pmap.mem_adjoint_domain_iff LinearPMap.mem_adjoint_domain_iff
+-/
variable {T}
+#print LinearPMap.mem_adjoint_domain_of_exists /-
theorem mem_adjoint_domain_of_exists (y : F) (h : β w : E, β x : T.domain, βͺw, xβ« = βͺy, T xβ«) :
y β Tβ .domain := by
cases' h with w hw
@@ -180,29 +205,39 @@ theorem mem_adjoint_domain_of_exists (y : F) (h : β w : E, β x : T.domain,
convert this using 1
exact funext fun x => (hw x).symm
#align linear_pmap.mem_adjoint_domain_of_exists LinearPMap.mem_adjoint_domain_of_exists
+-/
+#print LinearPMap.adjoint_apply_of_not_dense /-
theorem adjoint_apply_of_not_dense (hT : Β¬Dense (T.domain : Set E)) (y : Tβ .domain) : Tβ y = 0 :=
by
change (if hT : Dense (T.domain : Set E) then adjoint_aux hT else 0) y = _
simp only [hT, not_false_iff, dif_neg, LinearMap.zero_apply]
#align linear_pmap.adjoint_apply_of_not_dense LinearPMap.adjoint_apply_of_not_dense
+-/
+#print LinearPMap.adjoint_apply_of_dense /-
theorem adjoint_apply_of_dense (y : Tβ .domain) : Tβ y = adjointAux hT y :=
by
change (if hT : Dense (T.domain : Set E) then adjoint_aux hT else 0) y = _
simp only [hT, dif_pos, LinearMap.coe_mk]
#align linear_pmap.adjoint_apply_of_dense LinearPMap.adjoint_apply_of_dense
+-/
+#print LinearPMap.adjoint_apply_eq /-
theorem adjoint_apply_eq (y : Tβ .domain) {xβ : E} (hxβ : β x : T.domain, βͺxβ, xβ« = βͺ(y : F), T xβ«) :
Tβ y = xβ :=
(adjoint_apply_of_dense hT y).symm βΈ adjointAux_unique hT _ hxβ
#align linear_pmap.adjoint_apply_eq LinearPMap.adjoint_apply_eq
+-/
+#print LinearPMap.adjoint_isFormalAdjoint /-
/-- The fundamental property of the adjoint. -/
theorem adjoint_isFormalAdjoint : Tβ .IsFormalAdjoint T := fun x =>
(adjoint_apply_of_dense hT x).symm βΈ adjointAux_inner hT x
#align linear_pmap.adjoint_is_formal_adjoint LinearPMap.adjoint_isFormalAdjoint
+-/
+#print LinearPMap.IsFormalAdjoint.le_adjoint /-
/-- The adjoint is maximal in the sense that it contains every formal adjoint. -/
theorem IsFormalAdjoint.le_adjoint (h : T.IsFormalAdjoint S) : S β€ Tβ :=
β¨-- Trivially, every `x : S.domain` is in `T.adjoint.domain`
@@ -212,6 +247,7 @@ theorem IsFormalAdjoint.le_adjoint (h : T.IsFormalAdjoint S) : S β€ Tβ :=
-- `βͺv, S xβ« = βͺv, T.adjoint yβ«` for all `v : T.domain`:
fun _ _ hxy => (adjoint_apply_eq hT _ fun _ => by rw [h.symm, hxy]).symmβ©
#align linear_pmap.is_formal_adjoint.le_adjoint LinearPMap.IsFormalAdjoint.le_adjoint
+-/
end LinearPMap
@@ -221,6 +257,7 @@ variable [CompleteSpace E] [CompleteSpace F]
variable (A : E βL[π] F) {p : Submodule π E}
+#print ContinuousLinearMap.toPMap_adjoint_eq_adjoint_toPMap_of_dense /-
/-- Restricting `A` to a dense submodule and taking the `linear_pmap.adjoint` is the same
as taking the `continuous_linear_map.adjoint` interpreted as a `linear_pmap`. -/
theorem toPMap_adjoint_eq_adjoint_toPMap_of_dense (hp : Dense (p : Set E)) :
@@ -234,6 +271,7 @@ theorem toPMap_adjoint_eq_adjoint_toPMap_of_dense (hp : Dense (p : Set E)) :
refine' LinearPMap.adjoint_apply_eq hp _ fun v => _
simp only [adjoint_inner_left, hxy, LinearMap.toPMap_apply, to_linear_map_eq_coe, coe_coe]
#align continuous_linear_map.to_pmap_adjoint_eq_adjoint_to_pmap_of_dense ContinuousLinearMap.toPMap_adjoint_eq_adjoint_toPMap_of_dense
+-/
end ContinuousLinearMap
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -216,7 +216,7 @@ variable [CompleteSpace E] [CompleteSpace F]
variable (A : E βL[π] F) {p : Submodule π E}
/-- Restricting `A` to a dense submodule and taking the `LinearPMap.adjoint` is the same
-as taking the `continuous_linear_map.adjoint` interpreted as a `linear_pmap`. -/
+as taking the `ContinuousLinearMap.adjoint` interpreted as a `LinearPMap`. -/
theorem toPMap_adjoint_eq_adjoint_toPMap_of_dense (hp : Dense (p : Set E)) :
(A.toPMap p).adjoint = A.adjoint.toPMap β€ := by
ext x y hxy
IsROrC
to RCLike
(#10819)
IsROrC
contains data, which goes against the expectation that classes prefixed with Is
are prop-valued. People have been complaining about this on and off, so this PR renames IsROrC
to RCLike
.
@@ -50,11 +50,11 @@ Unbounded operators, closed operators
noncomputable section
-open IsROrC
+open RCLike
open scoped ComplexConjugate Classical
-variable {π E F G : Type*} [IsROrC π]
+variable {π E F G : Type*} [RCLike π]
variable [NormedAddCommGroup E] [InnerProductSpace π E]
variable [NormedAddCommGroup F] [InnerProductSpace π F]
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -55,9 +55,7 @@ open IsROrC
open scoped ComplexConjugate Classical
variable {π E F G : Type*} [IsROrC π]
-
variable [NormedAddCommGroup E] [InnerProductSpace π E]
-
variable [NormedAddCommGroup F] [InnerProductSpace π F]
local notation "βͺ" x ", " y "β«" => @inner π _ _ x y
@@ -107,7 +105,6 @@ theorem adjointDomainMkCLM_apply (y : T.adjointDomain) (x : T.domain) :
#align linear_pmap.adjoint_domain_mk_clm_apply LinearPMap.adjointDomainMkCLM_apply
variable {T}
-
variable (hT : Dense (T.domain : Set E))
/-- The unique continuous extension of the operator `adjointDomainMkCLM` to `E`. -/
@@ -216,7 +213,6 @@ end LinearPMap
namespace ContinuousLinearMap
variable [CompleteSpace E] [CompleteSpace F]
-
variable (A : E βL[π] F) {p : Submodule π E}
/-- Restricting `A` to a dense submodule and taking the `LinearPMap.adjoint` is the same
Ξ» x,
in doc comments (#10727)
Use Lean 4 syntax fun x β¦
instead, matching the style guide.
This is close to exhaustive for doc comments; mathlib has about 460 remaining uses of Ξ» (not all in Lean 3 syntax).
@@ -95,8 +95,8 @@ def adjointDomain : Submodule π F where
exact hx.const_smul (conj a)
#align linear_pmap.adjoint_domain LinearPMap.adjointDomain
-/-- The operator `Ξ» x, βͺy, T xβ«` considered as a continuous linear operator from `T.adjointDomain`
-to `π`. -/
+/-- The operator `fun x β¦ βͺy, T xβ«` considered as a continuous linear operator
+from `T.adjointDomain` to `π`. -/
def adjointDomainMkCLM (y : T.adjointDomain) : T.domain βL[π] π :=
β¨(innerββ π (y : F)).comp T.toFun, y.propβ©
#align linear_pmap.adjoint_domain_mk_clm LinearPMap.adjointDomainMkCLM
Clm
-> CLM
, Cle
-> CLE
(#10018)
Rename
Complex.equivRealProdClm
β Complex.equivRealProdCLM
;
CLE
?Complex.reClm
β Complex.reCLM
;Complex.imClm
β Complex.imCLM
;Complex.conjLie
β Complex.conjLIE
;Complex.conjCle
β Complex.conjCLE
;Complex.ofRealLi
β Complex.ofRealLI
;Complex.ofRealClm
β Complex.ofRealCLM
;fderivInnerClm
β fderivInnerCLM
;LinearPMap.adjointDomainMkClm
β LinearPMap.adjointDomainMkCLM
;LinearPMap.adjointDomainMkClmExtend
β LinearPMap.adjointDomainMkCLMExtend
;IsROrC.reClm
β IsROrC.reCLM
;IsROrC.imClm
β IsROrC.imCLM
;IsROrC.conjLie
β IsROrC.conjLIE
;IsROrC.conjCle
β IsROrC.conjCLE
;IsROrC.ofRealLi
β IsROrC.ofRealLI
;IsROrC.ofRealClm
β IsROrC.ofRealCLM
;MeasureTheory.condexpL1Clm
β MeasureTheory.condexpL1CLM
;algebraMapClm
β algebraMapCLM
;WeakDual.CharacterSpace.toClm
β WeakDual.CharacterSpace.toCLM
;BoundedContinuousFunction.evalClm
β BoundedContinuousFunction.evalCLM
;ContinuousMap.evalClm
β ContinuousMap.evalCLM
;TrivSqZeroExt.fstClm
β TrivSqZeroExt.fstClm
;TrivSqZeroExt.sndClm
β TrivSqZeroExt.sndCLM
;TrivSqZeroExt.inlClm
β TrivSqZeroExt.inlCLM
;TrivSqZeroExt.inrClm
β TrivSqZeroExt.inrCLM
and related theorems.
@@ -97,30 +97,30 @@ def adjointDomain : Submodule π F where
/-- The operator `Ξ» x, βͺy, T xβ«` considered as a continuous linear operator from `T.adjointDomain`
to `π`. -/
-def adjointDomainMkClm (y : T.adjointDomain) : T.domain βL[π] π :=
+def adjointDomainMkCLM (y : T.adjointDomain) : T.domain βL[π] π :=
β¨(innerββ π (y : F)).comp T.toFun, y.propβ©
-#align linear_pmap.adjoint_domain_mk_clm LinearPMap.adjointDomainMkClm
+#align linear_pmap.adjoint_domain_mk_clm LinearPMap.adjointDomainMkCLM
-theorem adjointDomainMkClm_apply (y : T.adjointDomain) (x : T.domain) :
- adjointDomainMkClm T y x = βͺ(y : F), T xβ« :=
+theorem adjointDomainMkCLM_apply (y : T.adjointDomain) (x : T.domain) :
+ adjointDomainMkCLM T y x = βͺ(y : F), T xβ« :=
rfl
-#align linear_pmap.adjoint_domain_mk_clm_apply LinearPMap.adjointDomainMkClm_apply
+#align linear_pmap.adjoint_domain_mk_clm_apply LinearPMap.adjointDomainMkCLM_apply
variable {T}
variable (hT : Dense (T.domain : Set E))
-/-- The unique continuous extension of the operator `adjointDomainMkClm` to `E`. -/
-def adjointDomainMkClmExtend (y : T.adjointDomain) : E βL[π] π :=
- (T.adjointDomainMkClm y).extend (Submodule.subtypeL T.domain) hT.denseRange_val
+/-- The unique continuous extension of the operator `adjointDomainMkCLM` to `E`. -/
+def adjointDomainMkCLMExtend (y : T.adjointDomain) : E βL[π] π :=
+ (T.adjointDomainMkCLM y).extend (Submodule.subtypeL T.domain) hT.denseRange_val
uniformEmbedding_subtype_val.toUniformInducing
-#align linear_pmap.adjoint_domain_mk_clm_extend LinearPMap.adjointDomainMkClmExtend
+#align linear_pmap.adjoint_domain_mk_clm_extend LinearPMap.adjointDomainMkCLMExtend
@[simp]
-theorem adjointDomainMkClmExtend_apply (y : T.adjointDomain) (x : T.domain) :
- adjointDomainMkClmExtend hT y (x : E) = βͺ(y : F), T xβ« :=
+theorem adjointDomainMkCLMExtend_apply (y : T.adjointDomain) (x : T.domain) :
+ adjointDomainMkCLMExtend hT y (x : E) = βͺ(y : F), T xβ« :=
ContinuousLinearMap.extend_eq _ _ _ _ _
-#align linear_pmap.adjoint_domain_mk_clm_extend_apply LinearPMap.adjointDomainMkClmExtend_apply
+#align linear_pmap.adjoint_domain_mk_clm_extend_apply LinearPMap.adjointDomainMkCLMExtend_apply
variable [CompleteSpace E]
@@ -129,25 +129,25 @@ variable [CompleteSpace E]
This is an auxiliary definition needed to define the adjoint operator as a `LinearPMap` without
the assumption that `T.domain` is dense. -/
def adjointAux : T.adjointDomain ββ[π] E where
- toFun y := (InnerProductSpace.toDual π E).symm (adjointDomainMkClmExtend hT y)
+ toFun y := (InnerProductSpace.toDual π E).symm (adjointDomainMkCLMExtend hT y)
map_add' x y :=
hT.eq_of_inner_left fun _ => by
simp only [inner_add_left, Submodule.coe_add, InnerProductSpace.toDual_symm_apply,
- adjointDomainMkClmExtend_apply]
+ adjointDomainMkCLMExtend_apply]
map_smul' _ _ :=
hT.eq_of_inner_left fun _ => by
simp only [inner_smul_left, Submodule.coe_smul_of_tower, RingHom.id_apply,
- InnerProductSpace.toDual_symm_apply, adjointDomainMkClmExtend_apply]
+ InnerProductSpace.toDual_symm_apply, adjointDomainMkCLMExtend_apply]
#align linear_pmap.adjoint_aux LinearPMap.adjointAux
theorem adjointAux_inner (y : T.adjointDomain) (x : T.domain) :
βͺadjointAux hT y, xβ« = βͺ(y : F), T xβ« := by
simp only [adjointAux, LinearMap.coe_mk, InnerProductSpace.toDual_symm_apply,
- adjointDomainMkClmExtend_apply]
+ adjointDomainMkCLMExtend_apply]
-- Porting note(https://github.com/leanprover-community/mathlib4/issues/5026):
-- mathlib3 was finished here
simp only [AddHom.coe_mk, InnerProductSpace.toDual_symm_apply]
- rw [adjointDomainMkClmExtend_apply]
+ rw [adjointDomainMkCLMExtend_apply]
#align linear_pmap.adjoint_aux_inner LinearPMap.adjointAux_inner
theorem adjointAux_unique (y : T.adjointDomain) {xβ : E}
@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-/
import Mathlib.Analysis.InnerProductSpace.Adjoint
-import Mathlib.Topology.Algebra.Module.LinearPMap
import Mathlib.Topology.Algebra.Module.Basic
#align_import analysis.inner_product_space.linear_pmap from "leanprover-community/mathlib"@"8b981918a93bc45a8600de608cde7944a80d92b9"
@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-/
import Mathlib.Analysis.InnerProductSpace.Adjoint
-import Mathlib.Analysis.InnerProductSpace.ProdL2
import Mathlib.Topology.Algebra.Module.LinearPMap
import Mathlib.Topology.Algebra.Module.Basic
@@ -28,8 +27,6 @@ We will develop the basics of the theory of unbounded operators on Hilbert space
* `LinearPMap.IsFormalAdjoint.le_adjoint`: Every formal adjoint is contained in the adjoint
* `ContinuousLinearMap.toPMap_adjoint_eq_adjoint_toPMap_of_dense`: The adjoint on
`ContinuousLinearMap` and `LinearPMap` coincide.
-* `LinearPMap.adjoint_isClosed`: The adjoint is a closed operator.
-* `IsSelfAdjoint.isClosed`: Every self-adjoint operator is closed.
## Notation
@@ -54,7 +51,7 @@ Unbounded operators, closed operators
noncomputable section
-open IsROrC LinearPMap
+open IsROrC
open scoped ComplexConjugate Classical
@@ -271,93 +268,3 @@ theorem _root_.IsSelfAdjoint.dense_domain (hA : IsSelfAdjoint A) : Dense (A.doma
end LinearPMap
end Star
-
-/-! ### The graph of the adjoint -/
-
-namespace Submodule
-
-/-- The adjoint of a submodule
-
-Note that the adjoint is taken with respect to the L^2 inner product on `E Γ F`, which is defined
-as `WithLp 2 (E Γ F)`. -/
-protected noncomputable
-def adjoint (g : Submodule π (E Γ F)) : Submodule π (F Γ E) :=
- (g.map <| (LinearEquiv.skewSwap π F E).symm.trans
- (WithLp.linearEquiv 2 π (F Γ E)).symm).orthogonal.map (WithLp.linearEquiv 2 π (F Γ E))
-
-@[simp]
-theorem mem_adjoint_iff (g : Submodule π (E Γ F)) (x : F Γ E) :
- x β g.adjoint β
- β a b, (a, b) β g β inner (π := π) b x.fst - inner a x.snd = 0 := by
- simp only [Submodule.adjoint, Submodule.mem_map, Submodule.mem_orthogonal, LinearMap.coe_comp,
- LinearEquiv.coe_coe, WithLp.linearEquiv_symm_apply, Function.comp_apply,
- LinearEquiv.skewSwap_symm_apply, Prod.exists, WithLp.prod_inner_apply, forall_exists_index,
- and_imp, WithLp.linearEquiv_apply]
- constructor
- Β· rintro β¨y, h1, h2β© a b hab
- rw [β h2, WithLp.equiv_fst, WithLp.equiv_snd]
- specialize h1 (b, -a) a b hab rfl
- simp only [inner_neg_left, β sub_eq_add_neg] at h1
- exact h1
- Β· intro h
- refine β¨x, ?_, rflβ©
- intro u a b hab hu
- simp [β hu, β sub_eq_add_neg, h a b hab]
-
-variable {T : E ββ.[π] F} [CompleteSpace E]
-
-theorem _root_.LinearPMap.adjoint_graph_eq_graph_adjoint (hT : Dense (T.domain : Set E)) :
- Tβ .graph = T.graph.adjoint := by
- ext x
- simp only [mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left, mem_adjoint_iff,
- forall_exists_index, forall_apply_eq_imp_iff']
- constructor
- Β· rintro β¨hx, hβ© a ha
- rw [β h, (adjoint_isFormalAdjoint hT).symm β¨a, haβ© β¨x.fst, hxβ©, sub_self]
- Β· intro h
- simp_rw [sub_eq_zero] at h
- have hx : x.fst β Tβ .domain
- Β· apply mem_adjoint_domain_of_exists
- use x.snd
- rintro β¨a, haβ©
- rw [β inner_conj_symm, β h a ha, inner_conj_symm]
- use hx
- apply hT.eq_of_inner_right
- rintro β¨a, haβ©
- rw [β h a ha, (adjoint_isFormalAdjoint hT).symm β¨a, haβ© β¨x.fst, hxβ©]
-
-@[simp]
-theorem _root_.LinearPMap.graph_adjoint_toLinearPMap_eq_adjoint (hT : Dense (T.domain : Set E)) :
- T.graph.adjoint.toLinearPMap = Tβ := by
- apply eq_of_eq_graph
- rw [adjoint_graph_eq_graph_adjoint hT]
- apply Submodule.toLinearPMap_graph_eq
- intro x hx hx'
- simp only [mem_adjoint_iff, mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left,
- forall_exists_index, forall_apply_eq_imp_iff', hx', inner_zero_right, zero_sub,
- neg_eq_zero] at hx
- apply hT.eq_zero_of_inner_right
- rintro β¨a, haβ©
- exact hx a ha
-
-end Submodule
-
-/-! ### Closedness -/
-
-namespace LinearPMap
-
-variable {T : E ββ.[π] F} [CompleteSpace E]
-
-theorem adjoint_isClosed (hT : Dense (T.domain : Set E)) :
- Tβ .IsClosed := by
- rw [IsClosed, adjoint_graph_eq_graph_adjoint hT, Submodule.adjoint]
- simp only [Submodule.map_coe, WithLp.linearEquiv_apply]
- rw [Equiv.image_eq_preimage]
- exact (Submodule.isClosed_orthogonal _).preimage (WithLp.prod_continuous_equiv_symm _ _ _)
-
-/-- Every self-adjoint `LinearPMap` is closed. -/
-theorem _root_.IsSelfAdjoint.isClosed {A : E ββ.[π] E} (hA : IsSelfAdjoint A) : A.IsClosed := by
- rw [β isSelfAdjoint_def.mp hA]
- exact adjoint_isClosed hA.dense_domain
-
-end LinearPMap
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-/
import Mathlib.Analysis.InnerProductSpace.Adjoint
+import Mathlib.Analysis.InnerProductSpace.ProdL2
import Mathlib.Topology.Algebra.Module.LinearPMap
import Mathlib.Topology.Algebra.Module.Basic
@@ -27,6 +28,8 @@ We will develop the basics of the theory of unbounded operators on Hilbert space
* `LinearPMap.IsFormalAdjoint.le_adjoint`: Every formal adjoint is contained in the adjoint
* `ContinuousLinearMap.toPMap_adjoint_eq_adjoint_toPMap_of_dense`: The adjoint on
`ContinuousLinearMap` and `LinearPMap` coincide.
+* `LinearPMap.adjoint_isClosed`: The adjoint is a closed operator.
+* `IsSelfAdjoint.isClosed`: Every self-adjoint operator is closed.
## Notation
@@ -51,7 +54,7 @@ Unbounded operators, closed operators
noncomputable section
-open IsROrC
+open IsROrC LinearPMap
open scoped ComplexConjugate Classical
@@ -268,3 +271,93 @@ theorem _root_.IsSelfAdjoint.dense_domain (hA : IsSelfAdjoint A) : Dense (A.doma
end LinearPMap
end Star
+
+/-! ### The graph of the adjoint -/
+
+namespace Submodule
+
+/-- The adjoint of a submodule
+
+Note that the adjoint is taken with respect to the L^2 inner product on `E Γ F`, which is defined
+as `WithLp 2 (E Γ F)`. -/
+protected noncomputable
+def adjoint (g : Submodule π (E Γ F)) : Submodule π (F Γ E) :=
+ (g.map <| (LinearEquiv.skewSwap π F E).symm.trans
+ (WithLp.linearEquiv 2 π (F Γ E)).symm).orthogonal.map (WithLp.linearEquiv 2 π (F Γ E))
+
+@[simp]
+theorem mem_adjoint_iff (g : Submodule π (E Γ F)) (x : F Γ E) :
+ x β g.adjoint β
+ β a b, (a, b) β g β inner (π := π) b x.fst - inner a x.snd = 0 := by
+ simp only [Submodule.adjoint, Submodule.mem_map, Submodule.mem_orthogonal, LinearMap.coe_comp,
+ LinearEquiv.coe_coe, WithLp.linearEquiv_symm_apply, Function.comp_apply,
+ LinearEquiv.skewSwap_symm_apply, Prod.exists, WithLp.prod_inner_apply, forall_exists_index,
+ and_imp, WithLp.linearEquiv_apply]
+ constructor
+ Β· rintro β¨y, h1, h2β© a b hab
+ rw [β h2, WithLp.equiv_fst, WithLp.equiv_snd]
+ specialize h1 (b, -a) a b hab rfl
+ simp only [inner_neg_left, β sub_eq_add_neg] at h1
+ exact h1
+ Β· intro h
+ refine β¨x, ?_, rflβ©
+ intro u a b hab hu
+ simp [β hu, β sub_eq_add_neg, h a b hab]
+
+variable {T : E ββ.[π] F} [CompleteSpace E]
+
+theorem _root_.LinearPMap.adjoint_graph_eq_graph_adjoint (hT : Dense (T.domain : Set E)) :
+ Tβ .graph = T.graph.adjoint := by
+ ext x
+ simp only [mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left, mem_adjoint_iff,
+ forall_exists_index, forall_apply_eq_imp_iff']
+ constructor
+ Β· rintro β¨hx, hβ© a ha
+ rw [β h, (adjoint_isFormalAdjoint hT).symm β¨a, haβ© β¨x.fst, hxβ©, sub_self]
+ Β· intro h
+ simp_rw [sub_eq_zero] at h
+ have hx : x.fst β Tβ .domain
+ Β· apply mem_adjoint_domain_of_exists
+ use x.snd
+ rintro β¨a, haβ©
+ rw [β inner_conj_symm, β h a ha, inner_conj_symm]
+ use hx
+ apply hT.eq_of_inner_right
+ rintro β¨a, haβ©
+ rw [β h a ha, (adjoint_isFormalAdjoint hT).symm β¨a, haβ© β¨x.fst, hxβ©]
+
+@[simp]
+theorem _root_.LinearPMap.graph_adjoint_toLinearPMap_eq_adjoint (hT : Dense (T.domain : Set E)) :
+ T.graph.adjoint.toLinearPMap = Tβ := by
+ apply eq_of_eq_graph
+ rw [adjoint_graph_eq_graph_adjoint hT]
+ apply Submodule.toLinearPMap_graph_eq
+ intro x hx hx'
+ simp only [mem_adjoint_iff, mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left,
+ forall_exists_index, forall_apply_eq_imp_iff', hx', inner_zero_right, zero_sub,
+ neg_eq_zero] at hx
+ apply hT.eq_zero_of_inner_right
+ rintro β¨a, haβ©
+ exact hx a ha
+
+end Submodule
+
+/-! ### Closedness -/
+
+namespace LinearPMap
+
+variable {T : E ββ.[π] F} [CompleteSpace E]
+
+theorem adjoint_isClosed (hT : Dense (T.domain : Set E)) :
+ Tβ .IsClosed := by
+ rw [IsClosed, adjoint_graph_eq_graph_adjoint hT, Submodule.adjoint]
+ simp only [Submodule.map_coe, WithLp.linearEquiv_apply]
+ rw [Equiv.image_eq_preimage]
+ exact (Submodule.isClosed_orthogonal _).preimage (WithLp.prod_continuous_equiv_symm _ _ _)
+
+/-- Every self-adjoint `LinearPMap` is closed. -/
+theorem _root_.IsSelfAdjoint.isClosed {A : E ββ.[π] E} (hA : IsSelfAdjoint A) : A.IsClosed := by
+ rw [β isSelfAdjoint_def.mp hA]
+ exact adjoint_isClosed hA.dense_domain
+
+end LinearPMap
@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-/
import Mathlib.Analysis.InnerProductSpace.Adjoint
-import Mathlib.Analysis.InnerProductSpace.ProdL2
import Mathlib.Topology.Algebra.Module.LinearPMap
import Mathlib.Topology.Algebra.Module.Basic
@@ -28,8 +27,6 @@ We will develop the basics of the theory of unbounded operators on Hilbert space
* `LinearPMap.IsFormalAdjoint.le_adjoint`: Every formal adjoint is contained in the adjoint
* `ContinuousLinearMap.toPMap_adjoint_eq_adjoint_toPMap_of_dense`: The adjoint on
`ContinuousLinearMap` and `LinearPMap` coincide.
-* `LinearPMap.adjoint_isClosed`: The adjoint is a closed operator.
-* `IsSelfAdjoint.isClosed`: Every self-adjoint operator is closed.
## Notation
@@ -54,7 +51,7 @@ Unbounded operators, closed operators
noncomputable section
-open IsROrC LinearPMap
+open IsROrC
open scoped ComplexConjugate Classical
@@ -271,93 +268,3 @@ theorem _root_.IsSelfAdjoint.dense_domain (hA : IsSelfAdjoint A) : Dense (A.doma
end LinearPMap
end Star
-
-/-! ### The graph of the adjoint -/
-
-namespace Submodule
-
-/-- The adjoint of a submodule
-
-Note that the adjoint is taken with respect to the L^2 inner product on `E Γ F`, which is defined
-as `WithLp 2 (E Γ F)`. -/
-protected noncomputable
-def adjoint (g : Submodule π (E Γ F)) : Submodule π (F Γ E) :=
- (g.map <| (LinearEquiv.skewSwap π F E).symm.trans
- (WithLp.linearEquiv 2 π (F Γ E)).symm).orthogonal.map (WithLp.linearEquiv 2 π (F Γ E))
-
-@[simp]
-theorem mem_adjoint_iff (g : Submodule π (E Γ F)) (x : F Γ E) :
- x β g.adjoint β
- β a b, (a, b) β g β inner (π := π) b x.fst - inner a x.snd = 0 := by
- simp only [Submodule.adjoint, Submodule.mem_map, Submodule.mem_orthogonal, LinearMap.coe_comp,
- LinearEquiv.coe_coe, WithLp.linearEquiv_symm_apply, Function.comp_apply,
- LinearEquiv.skewSwap_symm_apply, Prod.exists, WithLp.prod_inner_apply, forall_exists_index,
- and_imp, WithLp.linearEquiv_apply]
- constructor
- Β· rintro β¨y, h1, h2β© a b hab
- rw [β h2, WithLp.equiv_fst, WithLp.equiv_snd]
- specialize h1 (b, -a) a b hab rfl
- simp only [inner_neg_left, β sub_eq_add_neg] at h1
- exact h1
- Β· intro h
- refine β¨x, ?_, rflβ©
- intro u a b hab hu
- simp [β hu, β sub_eq_add_neg, h a b hab]
-
-variable {T : E ββ.[π] F} [CompleteSpace E]
-
-theorem _root_.LinearPMap.adjoint_graph_eq_graph_adjoint (hT : Dense (T.domain : Set E)) :
- Tβ .graph = T.graph.adjoint := by
- ext x
- simp only [mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left, mem_adjoint_iff,
- forall_exists_index, forall_apply_eq_imp_iff']
- constructor
- Β· rintro β¨hx, hβ© a ha
- rw [β h, (adjoint_isFormalAdjoint hT).symm β¨a, haβ© β¨x.fst, hxβ©, sub_self]
- Β· intro h
- simp_rw [sub_eq_zero] at h
- have hx : x.fst β Tβ .domain
- Β· apply mem_adjoint_domain_of_exists
- use x.snd
- rintro β¨a, haβ©
- rw [β inner_conj_symm, β h a ha, inner_conj_symm]
- use hx
- apply hT.eq_of_inner_right
- rintro β¨a, haβ©
- rw [β h a ha, (adjoint_isFormalAdjoint hT).symm β¨a, haβ© β¨x.fst, hxβ©]
-
-@[simp]
-theorem _root_.LinearPMap.graph_adjoint_toLinearPMap_eq_adjoint (hT : Dense (T.domain : Set E)) :
- T.graph.adjoint.toLinearPMap = Tβ := by
- apply eq_of_eq_graph
- rw [adjoint_graph_eq_graph_adjoint hT]
- apply Submodule.toLinearPMap_graph_eq
- intro x hx hx'
- simp only [mem_adjoint_iff, mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left,
- forall_exists_index, forall_apply_eq_imp_iff', hx', inner_zero_right, zero_sub,
- neg_eq_zero] at hx
- apply hT.eq_zero_of_inner_right
- rintro β¨a, haβ©
- exact hx a ha
-
-end Submodule
-
-/-! ### Closedness -/
-
-namespace LinearPMap
-
-variable {T : E ββ.[π] F} [CompleteSpace E]
-
-theorem adjoint_isClosed (hT : Dense (T.domain : Set E)) :
- Tβ .IsClosed := by
- rw [IsClosed, adjoint_graph_eq_graph_adjoint hT, Submodule.adjoint]
- simp only [Submodule.map_coe, WithLp.linearEquiv_apply]
- rw [Equiv.image_eq_preimage]
- exact (Submodule.isClosed_orthogonal _).preimage (WithLp.prod_continuous_equiv_symm _ _ _)
-
-/-- Every self-adjoint `LinearPMap` is closed. -/
-theorem _root_.IsSelfAdjoint.isClosed {A : E ββ.[π] E} (hA : IsSelfAdjoint A) : A.IsClosed := by
- rw [β isSelfAdjoint_def.mp hA]
- exact adjoint_isClosed hA.dense_domain
-
-end LinearPMap
Define the graph of the adjoint and prove that the adjoint operator is always closed.
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-/
import Mathlib.Analysis.InnerProductSpace.Adjoint
+import Mathlib.Analysis.InnerProductSpace.ProdL2
import Mathlib.Topology.Algebra.Module.LinearPMap
import Mathlib.Topology.Algebra.Module.Basic
@@ -27,6 +28,8 @@ We will develop the basics of the theory of unbounded operators on Hilbert space
* `LinearPMap.IsFormalAdjoint.le_adjoint`: Every formal adjoint is contained in the adjoint
* `ContinuousLinearMap.toPMap_adjoint_eq_adjoint_toPMap_of_dense`: The adjoint on
`ContinuousLinearMap` and `LinearPMap` coincide.
+* `LinearPMap.adjoint_isClosed`: The adjoint is a closed operator.
+* `IsSelfAdjoint.isClosed`: Every self-adjoint operator is closed.
## Notation
@@ -51,7 +54,7 @@ Unbounded operators, closed operators
noncomputable section
-open IsROrC
+open IsROrC LinearPMap
open scoped ComplexConjugate Classical
@@ -268,3 +271,93 @@ theorem _root_.IsSelfAdjoint.dense_domain (hA : IsSelfAdjoint A) : Dense (A.doma
end LinearPMap
end Star
+
+/-! ### The graph of the adjoint -/
+
+namespace Submodule
+
+/-- The adjoint of a submodule
+
+Note that the adjoint is taken with respect to the L^2 inner product on `E Γ F`, which is defined
+as `WithLp 2 (E Γ F)`. -/
+protected noncomputable
+def adjoint (g : Submodule π (E Γ F)) : Submodule π (F Γ E) :=
+ (g.map <| (LinearEquiv.skewSwap π F E).symm.trans
+ (WithLp.linearEquiv 2 π (F Γ E)).symm).orthogonal.map (WithLp.linearEquiv 2 π (F Γ E))
+
+@[simp]
+theorem mem_adjoint_iff (g : Submodule π (E Γ F)) (x : F Γ E) :
+ x β g.adjoint β
+ β a b, (a, b) β g β inner (π := π) b x.fst - inner a x.snd = 0 := by
+ simp only [Submodule.adjoint, Submodule.mem_map, Submodule.mem_orthogonal, LinearMap.coe_comp,
+ LinearEquiv.coe_coe, WithLp.linearEquiv_symm_apply, Function.comp_apply,
+ LinearEquiv.skewSwap_symm_apply, Prod.exists, WithLp.prod_inner_apply, forall_exists_index,
+ and_imp, WithLp.linearEquiv_apply]
+ constructor
+ Β· rintro β¨y, h1, h2β© a b hab
+ rw [β h2, WithLp.equiv_fst, WithLp.equiv_snd]
+ specialize h1 (b, -a) a b hab rfl
+ simp only [inner_neg_left, β sub_eq_add_neg] at h1
+ exact h1
+ Β· intro h
+ refine β¨x, ?_, rflβ©
+ intro u a b hab hu
+ simp [β hu, β sub_eq_add_neg, h a b hab]
+
+variable {T : E ββ.[π] F} [CompleteSpace E]
+
+theorem _root_.LinearPMap.adjoint_graph_eq_graph_adjoint (hT : Dense (T.domain : Set E)) :
+ Tβ .graph = T.graph.adjoint := by
+ ext x
+ simp only [mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left, mem_adjoint_iff,
+ forall_exists_index, forall_apply_eq_imp_iff']
+ constructor
+ Β· rintro β¨hx, hβ© a ha
+ rw [β h, (adjoint_isFormalAdjoint hT).symm β¨a, haβ© β¨x.fst, hxβ©, sub_self]
+ Β· intro h
+ simp_rw [sub_eq_zero] at h
+ have hx : x.fst β Tβ .domain
+ Β· apply mem_adjoint_domain_of_exists
+ use x.snd
+ rintro β¨a, haβ©
+ rw [β inner_conj_symm, β h a ha, inner_conj_symm]
+ use hx
+ apply hT.eq_of_inner_right
+ rintro β¨a, haβ©
+ rw [β h a ha, (adjoint_isFormalAdjoint hT).symm β¨a, haβ© β¨x.fst, hxβ©]
+
+@[simp]
+theorem _root_.LinearPMap.graph_adjoint_toLinearPMap_eq_adjoint (hT : Dense (T.domain : Set E)) :
+ T.graph.adjoint.toLinearPMap = Tβ := by
+ apply eq_of_eq_graph
+ rw [adjoint_graph_eq_graph_adjoint hT]
+ apply Submodule.toLinearPMap_graph_eq
+ intro x hx hx'
+ simp only [mem_adjoint_iff, mem_graph_iff, Subtype.exists, exists_and_left, exists_eq_left,
+ forall_exists_index, forall_apply_eq_imp_iff', hx', inner_zero_right, zero_sub,
+ neg_eq_zero] at hx
+ apply hT.eq_zero_of_inner_right
+ rintro β¨a, haβ©
+ exact hx a ha
+
+end Submodule
+
+/-! ### Closedness -/
+
+namespace LinearPMap
+
+variable {T : E ββ.[π] F} [CompleteSpace E]
+
+theorem adjoint_isClosed (hT : Dense (T.domain : Set E)) :
+ Tβ .IsClosed := by
+ rw [IsClosed, adjoint_graph_eq_graph_adjoint hT, Submodule.adjoint]
+ simp only [Submodule.map_coe, WithLp.linearEquiv_apply]
+ rw [Equiv.image_eq_preimage]
+ exact (Submodule.isClosed_orthogonal _).preimage (WithLp.prod_continuous_equiv_symm _ _ _)
+
+/-- Every self-adjoint `LinearPMap` is closed. -/
+theorem _root_.IsSelfAdjoint.isClosed {A : E ββ.[π] E} (hA : IsSelfAdjoint A) : A.IsClosed := by
+ rw [β isSelfAdjoint_def.mp hA]
+ exact adjoint_isClosed hA.dense_domain
+
+end LinearPMap
Dual
reducible (#6998)
Following LinearAlgebra.Dual
this makes NormedSpace.Dual
reducible.
@@ -135,19 +135,10 @@ def adjointAux : T.adjointDomain ββ[π] E where
hT.eq_of_inner_left fun _ => by
simp only [inner_add_left, Submodule.coe_add, InnerProductSpace.toDual_symm_apply,
adjointDomainMkClmExtend_apply]
- -- Porting note(https://github.com/leanprover-community/mathlib4/issues/5026):
- -- mathlib3 was finished here
- rw [adjointDomainMkClmExtend_apply, adjointDomainMkClmExtend_apply,
- adjointDomainMkClmExtend_apply]
- simp only [AddSubmonoid.coe_add, Submodule.coe_toAddSubmonoid, inner_add_left]
map_smul' _ _ :=
hT.eq_of_inner_left fun _ => by
simp only [inner_smul_left, Submodule.coe_smul_of_tower, RingHom.id_apply,
InnerProductSpace.toDual_symm_apply, adjointDomainMkClmExtend_apply]
- -- Porting note(https://github.com/leanprover-community/mathlib4/issues/5026):
- -- mathlib3 was finished here
- rw [adjointDomainMkClmExtend_apply, adjointDomainMkClmExtend_apply]
- simp only [Submodule.coe_smul_of_tower, inner_smul_left]
#align linear_pmap.adjoint_aux LinearPMap.adjointAux
theorem adjointAux_inner (y : T.adjointDomain) (x : T.domain) :
Also add a couple of refl and trans attributes
@@ -73,6 +73,7 @@ def IsFormalAdjoint (T : E ββ.[π] F) (S : F ββ.[π] E) : Prop :=
variable {T : E ββ.[π] F} {S : F ββ.[π] E}
+@[symm]
protected theorem IsFormalAdjoint.symm (h : T.IsFormalAdjoint S) :
S.IsFormalAdjoint T := fun y _ => by
rw [β inner_conj_symm, β inner_conj_symm (y : F), h]
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -55,7 +55,7 @@ open IsROrC
open scoped ComplexConjugate Classical
-variable {π E F G : Type _} [IsROrC π]
+variable {π E F G : Type*} [IsROrC π]
variable [NormedAddCommGroup E] [InnerProductSpace π E]
Define the star on LinearPMap
as the adjoint and prove that every self-adjoint operator is automatically densely defined.
@@ -243,3 +243,36 @@ theorem toPMap_adjoint_eq_adjoint_toPMap_of_dense (hp : Dense (p : Set E)) :
#align continuous_linear_map.to_pmap_adjoint_eq_adjoint_to_pmap_of_dense ContinuousLinearMap.toPMap_adjoint_eq_adjoint_toPMap_of_dense
end ContinuousLinearMap
+
+section Star
+
+namespace LinearPMap
+
+variable [CompleteSpace E]
+
+instance instStar : Star (E ββ.[π] E) where
+ star := fun A β¦ A.adjoint
+
+variable {A : E ββ.[π] E}
+
+theorem isSelfAdjoint_def : IsSelfAdjoint A β Aβ = A := Iff.rfl
+
+/-- Every self-adjoint `LinearPMap` has dense domain.
+
+This is not true by definition since we define the adjoint without the assumption that the
+domain is dense, but the choice of the junk value implies that a `LinearPMap` cannot be self-adjoint
+if it does not have dense domain. -/
+theorem _root_.IsSelfAdjoint.dense_domain (hA : IsSelfAdjoint A) : Dense (A.domain : Set E) := by
+ by_contra h
+ rw [isSelfAdjoint_def] at hA
+ have h' : A.domain = β€ := by
+ rw [β hA, Submodule.eq_top_iff']
+ intro x
+ rw [mem_adjoint_domain_iff, β hA]
+ refine (innerSL π x).cont.comp ?_
+ simp [adjoint, h, continuous_const]
+ simp [h'] at h
+
+end LinearPMap
+
+end Star
@@ -2,16 +2,13 @@
Copyright (c) 2022 Moritz Doll. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Moritz Doll
-
-! This file was ported from Lean 3 source module analysis.inner_product_space.linear_pmap
-! leanprover-community/mathlib commit 8b981918a93bc45a8600de608cde7944a80d92b9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.InnerProductSpace.Adjoint
import Mathlib.Topology.Algebra.Module.LinearPMap
import Mathlib.Topology.Algebra.Module.Basic
+#align_import analysis.inner_product_space.linear_pmap from "leanprover-community/mathlib"@"8b981918a93bc45a8600de608cde7944a80d92b9"
+
/-!
# Partially defined linear operators on Hilbert spaces
Co-authored-by: Moritz Doll <moritz.doll@googlemail.com>
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file