analysis.inner_product_space.linear_pmap ⟷ Mathlib.Analysis.InnerProductSpace.LinearPMap

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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]
 
Diff
@@ -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,
Diff
@@ -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"
 
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
 

Changes in mathlib4

mathlib3
mathlib4
chore(Analysis): fix mathlib3 names; automated fixes (#11950)
Diff
@@ -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
chore: Rename 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.

Diff
@@ -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]
 
chore(*): remove empty lines between variable statements (#11418)

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)
Diff
@@ -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
chore: replace Lean 3 syntax Ξ» 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).

Diff
@@ -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
fix: Clm -> CLM, Cle -> CLE (#10018)

Rename

  • Complex.equivRealProdClm β†’ Complex.equivRealProdCLM;
    • TODO: should this one use 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.

Diff
@@ -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}
chore: reduce imports (#9830)

This uses the improved shake script from #9772 to reduce imports across mathlib. The corresponding noshake.json file has been added to #9772.

Co-authored-by: Mario Carneiro <di.gama@gmail.com>

Diff
@@ -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"
Revert "chore: revert #7703 (#7710)"

This reverts commit f3695eb2.

Diff
@@ -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
chore: revert #7703 (#7710)

This reverts commit 26eb2b0a.

Diff
@@ -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
chore: bump toolchain to v4.2.0-rc2 (#7703)

This includes all the changes from #7606.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
feat(Analysis/InnerProductSpace/LinearPMap): the adjoint is closed (#6537)

Define the graph of the adjoint and prove that the adjoint operator is always closed.

Diff
@@ -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
feat (NormedSpace.Dual): make Dual reducible (#6998)

Following LinearAlgebra.Dual this makes NormedSpace.Dual reducible.

Diff
@@ -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) :
feat: add some symm attributes throughout the library (#6708)

Also add a couple of refl and trans attributes

Diff
@@ -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]
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -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]
 
feat: Self-adjoint LinearPMaps are densely defined (#6075)

Define the star on LinearPMap as the adjoint and prove that every self-adjoint operator is automatically densely defined.

Diff
@@ -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
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
feat: port Analysis.InnerProductSpace.LinearPMap (#5523)

Co-authored-by: Moritz Doll <moritz.doll@googlemail.com>

Dependencies 12 + 918

919 files ported (98.7%)
406117 lines ported (98.6%)
Show graph

The unported dependencies are

The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file