@@ -40,13 +40,122 @@ adjoint
40
40
-/
41
41
42
42
noncomputable theory
43
- open inner_product_space continuous_linear_map is_R_or_C
43
+ open is_R_or_C
44
44
open_locale complex_conjugate
45
45
46
46
variables {𝕜 E F G : Type *} [is_R_or_C 𝕜]
47
47
variables [inner_product_space 𝕜 E] [inner_product_space 𝕜 F] [inner_product_space 𝕜 G]
48
48
local notation `⟪`x `, `y `⟫` := @inner 𝕜 _ _ x y
49
49
50
+ namespace inner_product_space
51
+
52
+ /-! ### Self-adjoint operators -/
53
+
54
+ /-- A (not necessarily bounded) operator on an inner product space is self-adjoint, if for all
55
+ `x`, `y`, we have `⟪T x, y⟫ = ⟪x, T y⟫`. -/
56
+ def is_self_adjoint (T : E →ₗ[𝕜] E) : Prop := ∀ x y, ⟪T x, y⟫ = ⟪x, T y⟫
57
+
58
+ section real
59
+
60
+ variables {E' : Type *} [inner_product_space ℝ E']
61
+
62
+ -- Todo: Generalize this to `is_R_or_C`.
63
+ /-- An operator `T` on a `ℝ`-inner product space is self-adjoint if and only if it is
64
+ `bilin_form.is_self_adjoint` with respect to the bilinear form given by the inner product. -/
65
+ lemma is_self_adjoint_iff_bilin_form (T : E' →ₗ[ℝ] E') :
66
+ is_self_adjoint T ↔ bilin_form_of_real_inner.is_self_adjoint T :=
67
+ by simp [is_self_adjoint, bilin_form.is_self_adjoint, bilin_form.is_adjoint_pair]
68
+
69
+ end real
70
+
71
+ lemma is_self_adjoint.conj_inner_sym {T : E →ₗ[𝕜] E} (hT : is_self_adjoint T) (x y : E) :
72
+ conj ⟪T x, y⟫ = ⟪T y, x⟫ :=
73
+ by rw [hT x y, inner_conj_sym]
74
+
75
+ @[simp] lemma is_self_adjoint.apply_clm {T : E →L[𝕜] E} (hT : is_self_adjoint (T : E →ₗ[𝕜] E))
76
+ (x y : E) :
77
+ ⟪T x, y⟫ = ⟪x, T y⟫ :=
78
+ hT x y
79
+
80
+ /-- The **Hellinger--Toeplitz theorem** : if a symmetric operator is defined everywhere, then
81
+ it is automatically continuous. -/
82
+ lemma is_self_adjoint.continuous [complete_space E] {T : E →ₗ[𝕜] E} (hT : is_self_adjoint T) :
83
+ continuous T :=
84
+ begin
85
+ -- We prove it by using the closed graph theorem
86
+ refine T.continuous_of_seq_closed_graph (λ u x y hu hTu, _),
87
+ rw [←sub_eq_zero, ←inner_self_eq_zero],
88
+ have hlhs : ∀ k : ℕ, ⟪T (u k) - T x, y - T x⟫ = ⟪u k - x, T (y - T x)⟫ :=
89
+ by { intro k, rw [←T.map_sub, hT] },
90
+ refine tendsto_nhds_unique ((hTu.sub_const _).inner tendsto_const_nhds) _,
91
+ simp_rw hlhs,
92
+ rw ←@inner_zero_left 𝕜 E _ _ (T (y - T x)),
93
+ refine filter.tendsto.inner _ tendsto_const_nhds,
94
+ rw ←sub_self x,
95
+ exact hu.sub_const _,
96
+ end
97
+
98
+ /-- The **Hellinger--Toeplitz theorem** : Construct a self-adjoint operator from an everywhere
99
+ defined symmetric operator.-/
100
+ def is_self_adjoint.clm [complete_space E] {T : E →ₗ[𝕜] E}
101
+ (hT : is_self_adjoint T) : E →L[𝕜] E :=
102
+ ⟨T, hT.continuous⟩
103
+
104
+ lemma is_self_adjoint.clm_apply [complete_space E] {T : E →ₗ[𝕜] E}
105
+ (hT : is_self_adjoint T) {x : E} : hT.clm x = T x := rfl
106
+
107
+ /-- For a self-adjoint operator `T`, the function `λ x, ⟪T x, x⟫` is real-valued. -/
108
+ @[simp] lemma is_self_adjoint.coe_re_apply_inner_self_apply
109
+ {T : E →L[𝕜] E} (hT : is_self_adjoint (T : E →ₗ[𝕜] E)) (x : E) :
110
+ (T.re_apply_inner_self x : 𝕜) = ⟪T x, x⟫ :=
111
+ begin
112
+ suffices : ∃ r : ℝ, ⟪T x, x⟫ = r,
113
+ { obtain ⟨r, hr⟩ := this ,
114
+ simp [hr, T.re_apply_inner_self_apply] },
115
+ rw ← eq_conj_iff_real,
116
+ exact hT.conj_inner_sym x x
117
+ end
118
+
119
+ /-- If a self-adjoint operator preserves a submodule, its restriction to that submodule is
120
+ self-adjoint. -/
121
+ lemma is_self_adjoint.restrict_invariant {T : E →ₗ[𝕜] E} (hT : is_self_adjoint T)
122
+ {V : submodule 𝕜 E} (hV : ∀ v ∈ V, T v ∈ V) :
123
+ is_self_adjoint (T.restrict hV) :=
124
+ λ v w, hT v w
125
+
126
+ section complex
127
+
128
+ variables {V : Type *}
129
+ [inner_product_space ℂ V]
130
+
131
+ /-- A linear operator on a complex inner product space is self-adjoint precisely when
132
+ `⟪T v, v⟫_ℂ` is real for all v.-/
133
+ lemma is_self_adjoint_iff_inner_map_self_real (T : V →ₗ[ℂ] V):
134
+ is_self_adjoint T ↔ ∀ (v : V), conj ⟪T v, v⟫_ℂ = ⟪T v, v⟫_ℂ :=
135
+ begin
136
+ split,
137
+ { intros hT v,
138
+ apply is_self_adjoint.conj_inner_sym hT },
139
+ { intros h x y,
140
+ nth_rewrite 1 ← inner_conj_sym,
141
+ nth_rewrite 1 inner_map_polarization,
142
+ simp only [star_ring_end_apply, star_div', star_sub, star_add, star_mul],
143
+ simp only [← star_ring_end_apply],
144
+ rw [h (x + y), h (x - y), h (x + complex.I • y), h (x - complex.I • y)],
145
+ simp only [complex.conj_I],
146
+ rw inner_map_polarization',
147
+ norm_num,
148
+ ring },
149
+ end
150
+
151
+ end complex
152
+
153
+ end inner_product_space
154
+
155
+ /-! ### Adjoint operator -/
156
+
157
+ open inner_product_space
158
+
50
159
namespace continuous_linear_map
51
160
52
161
variables [complete_space E] [complete_space G]
@@ -307,11 +416,11 @@ lemma is_self_adjoint_adjoint_mul_self (T : E →ₗ[𝕜] E) : is_self_adjoint
307
416
308
417
/-- The Gram operator T†T is a positive operator. -/
309
418
lemma re_inner_adjoint_mul_self_nonneg (T : E →ₗ[𝕜] E) (x : E) :
310
- 0 ≤ is_R_or_C. re ⟪ x, (T.adjoint * T) x ⟫ := by {simp only [linear_map.mul_apply,
419
+ 0 ≤ re ⟪ x, (T.adjoint * T) x ⟫ := by {simp only [linear_map.mul_apply,
311
420
linear_map.adjoint_inner_right, inner_self_eq_norm_sq_to_K], norm_cast, exact sq_nonneg _}
312
421
313
422
@[simp] lemma im_inner_adjoint_mul_self_eq_zero (T : E →ₗ[𝕜] E) (x : E) :
314
- is_R_or_C. im ⟪ x, linear_map.adjoint T (T x) ⟫ = 0 := by {simp only [linear_map.mul_apply,
423
+ im ⟪ x, linear_map.adjoint T (T x) ⟫ = 0 := by {simp only [linear_map.mul_apply,
315
424
linear_map.adjoint_inner_right, inner_self_eq_norm_sq_to_K], norm_cast}
316
425
317
426
end linear_map
0 commit comments