Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 7f2b806

Browse files
committed
feat(analysis/inner_product_space/dual): complex Riesz representation theorem (#9924)
Now that we have conjugate-linear maps, the Riesz representation theorem can be stated in a form that works over both `ℝ` and `ℂ`, as the construction of a conjugate-linear isometric equivalence from a complete inner product space `E` to its dual. Co-authored-by: Frédéric Dupuis <dupuisf@iro.umontreal.ca>
1 parent f78b739 commit 7f2b806

File tree

1 file changed

+45
-79
lines changed

1 file changed

+45
-79
lines changed

src/analysis/inner_product_space/dual.lean

Lines changed: 45 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,14 @@ import analysis.normed_space.dual
99
/-!
1010
# The Fréchet-Riesz representation theorem
1111
12-
We consider inner product spaces, with base field over `ℝ` (the corresponding results for `ℂ`
13-
will require the definition of conjugate-linear maps). We define `to_dual_map`, a linear isometric
14-
embedding of `E` into its dual, which maps an element `x` of the space to `λ y, ⟪x, y⟫`. We also
15-
define `to_dual'` as the function taking taking a vector to its dual for a base field `𝕜`
16-
with `[is_R_or_C 𝕜]`; this is a function and not a linear map.
12+
We consider an inner product space `E` over `𝕜`, which is either `ℝ` or `ℂ`. We define
13+
`to_dual_map`, a conjugate-linear isometric embedding of `E` into its dual, which maps an element
14+
`x` of the space to `λ y, ⟪x, y⟫`.
1715
18-
Finally, under the hypothesis of completeness (i.e., for Hilbert spaces), we upgrade this to
19-
`to_dual`, a linear isometric *equivalence* of `E` onto its dual; that is, we establish the
20-
surjectivity of `to_dual'`. This is the Fréchet-Riesz representation theorem: every element of the
21-
dual of a Hilbert space `E` has the form `λ u, ⟪x, u⟫` for some `x : E`.
16+
Under the hypothesis of completeness (i.e., for Hilbert spaces), we upgrade this to `to_dual`, a
17+
conjugate-linear isometric *equivalence* of `E` onto its dual; that is, we establish the
18+
surjectivity of `to_dual_map`. This is the Fréchet-Riesz representation theorem: every element of
19+
the dual of a Hilbert space `E` has the form `λ u, ⟪x, u⟫` for some `x : E`.
2220
2321
## References
2422
@@ -37,55 +35,53 @@ universes u v
3735
namespace inner_product_space
3836
open is_R_or_C continuous_linear_map
3937

40-
section is_R_or_C
41-
4238
variables (𝕜 : Type*)
43-
variables {E : Type*} [is_R_or_C 𝕜] [inner_product_space 𝕜 E]
39+
variables (E : Type*) [is_R_or_C 𝕜] [inner_product_space 𝕜 E]
4440
local notation `⟪`x`, `y`⟫` := @inner 𝕜 E _ x y
4541
local postfix `†`:90 := star_ring_aut
4642

4743
/--
48-
Given some `x` in an inner product space, we can define its dual as the continuous linear map
49-
`λ y, ⟪x, y⟫`. Consider using `to_dual` or `to_dual_map` instead in the real case.
44+
An element `x` of an inner product space `E` induces an element of the dual space `dual 𝕜 E`,
45+
the map `λ y, ⟪x, y⟫`; moreover this operation is a conjugate-linear isometric embedding of `E`
46+
into `dual 𝕜 E`.
47+
If `E` is complete, this operation is surjective, hence a conjugate-linear isometric equivalence;
48+
see `to_dual`.
5049
-/
51-
def to_dual' : E →+ normed_space.dual 𝕜 E :=
50+
def to_dual_map : E →ₗᵢ⋆[𝕜] normed_space.dual 𝕜 E :=
5251
{ to_fun := λ x, linear_map.mk_continuous
53-
{ to_fun := λ y, ⟪x, y⟫,
54-
map_add' := λ _ _, inner_add_right,
55-
map_smul' := λ _ _, inner_smul_right }
56-
∥x∥
57-
(λ y, by { rw [is_R_or_C.norm_eq_abs], exact abs_inner_le_norm _ _ }),
58-
map_zero' := by { ext z, simp },
59-
map_add' := λ x y, by { ext z, simp [inner_add_left] } }
60-
61-
@[simp] lemma to_dual'_apply {x y : E} : to_dual' 𝕜 x y = ⟪x, y⟫ := rfl
62-
63-
/-- In an inner product space, the norm of the dual of a vector `x` is `∥x∥` -/
64-
@[simp] lemma norm_to_dual'_apply (x : E) : ∥to_dual' 𝕜 x∥ = ∥x∥ :=
65-
begin
66-
refine le_antisymm _ _,
67-
{ exact linear_map.mk_continuous_norm_le _ (norm_nonneg _) _ },
68-
{ cases eq_or_lt_of_le (norm_nonneg x) with h h,
69-
{ have : x = 0 := norm_eq_zero.mp (eq.symm h),
70-
simp [this] },
71-
{ refine (mul_le_mul_right h).mp _,
72-
calc ∥x∥ * ∥x∥ = ∥x∥ ^ 2 : by ring
73-
... = re ⟪x, x⟫ : norm_sq_eq_inner _
74-
... ≤ abs ⟪x, x⟫ : re_le_abs _
75-
... = ∥to_dual' 𝕜 x x∥ : by simp [norm_eq_abs]
76-
... ≤ ∥to_dual' 𝕜 x∥ * ∥x∥ : le_op_norm (to_dual' 𝕜 x) x } }
77-
end
78-
79-
variables (E)
80-
81-
lemma to_dual'_isometry : isometry (@to_dual' 𝕜 E _ _) :=
82-
add_monoid_hom.isometry_of_norm _ (norm_to_dual'_apply 𝕜)
52+
{ to_fun := λ y, ⟪x, y⟫,
53+
map_add' := λ _ _, inner_add_right,
54+
map_smul' := λ _ _, inner_smul_right }
55+
∥x∥
56+
(λ y, by { rw [is_R_or_C.norm_eq_abs], exact abs_inner_le_norm _ _ }),
57+
map_add' := λ x y, by { ext z, simp [inner_add_left] },
58+
map_smul' := λ c y, by { ext z, simp [inner_smul_left] },
59+
norm_map' := λ x, begin
60+
refine le_antisymm _ _,
61+
{ exact linear_map.mk_continuous_norm_le _ (norm_nonneg _) _ },
62+
{ cases eq_or_lt_of_le (norm_nonneg x) with h h,
63+
{ have : x = 0 := norm_eq_zero.mp (eq.symm h),
64+
simp [this] },
65+
{ refine (mul_le_mul_right h).mp _,
66+
calc ∥x∥ * ∥x∥ = ∥x∥ ^ 2 : by ring
67+
... = re ⟪x, x⟫ : norm_sq_eq_inner _
68+
... ≤ abs ⟪x, x⟫ : re_le_abs _
69+
... = ∥linear_map.mk_continuous _ _ _ x∥ : by simp [norm_eq_abs]
70+
... ≤ ∥linear_map.mk_continuous _ _ _∥ * ∥x∥ : le_op_norm _ x } }
71+
end }
72+
73+
variables {E}
74+
75+
@[simp] lemma to_dual_map_apply {x y : E} : to_dual_map 𝕜 E x y = ⟪x, y⟫ := rfl
76+
77+
variables (E) [complete_space E]
8378

8479
/--
8580
Fréchet-Riesz representation: any `ℓ` in the dual of a Hilbert space `E` is of the form
86-
`λ u, ⟪y, u⟫` for some `y : E`, i.e. `to_dual'` is surjective.
81+
`λ u, ⟪y, u⟫` for some `y : E`, i.e. `to_dual_map` is surjective.
8782
-/
88-
lemma to_dual'_surjective [complete_space E] : function.surjective (@to_dual' 𝕜 E _ _) :=
83+
def to_dual : E ≃ₗᵢ⋆[𝕜] normed_space.dual 𝕜 E :=
84+
linear_isometry_equiv.of_surjective (to_dual_map 𝕜 E)
8985
begin
9086
intros ℓ,
9187
set Y := ker ℓ with hY,
@@ -130,38 +126,8 @@ begin
130126
exact h₄ }
131127
end
132128

133-
end is_R_or_C
134-
135-
section real
136-
137-
variables (F : Type*) [inner_product_space ℝ F]
138-
139-
/-- In a real inner product space `F`, the function that takes a vector `x` in `F` to its dual
140-
`λ y, ⟪x, y⟫` is an isometric linear embedding. If the space is complete (i.e. is a Hilbert space),
141-
consider using `to_dual` instead. -/
142-
-- TODO extend to `is_R_or_C` (requires a definition of conjugate linear maps)
143-
def to_dual_map : F →ₗᵢ[ℝ] (normed_space.dual ℝ F) :=
144-
{ to_fun := to_dual' ℝ,
145-
map_add' := λ x y, by { ext, simp [inner_add_left] },
146-
map_smul' := λ c x, by { ext, simp [inner_smul_left] },
147-
norm_map' := norm_to_dual'_apply ℝ }
148-
149-
variables {F}
150-
151-
@[simp] lemma to_dual_map_apply {x y : F} : to_dual_map F x y = ⟪x, y⟫_ℝ := rfl
152-
153-
variables (F) [complete_space F]
154-
155-
/--
156-
Fréchet-Riesz representation: If `F` is a Hilbert space, the function that takes a vector in `F` to
157-
its dual is an isometric linear equivalence. -/
158-
def to_dual : F ≃ₗᵢ[ℝ] (normed_space.dual ℝ F) :=
159-
linear_isometry_equiv.of_surjective (to_dual_map F) (to_dual'_surjective ℝ F)
160-
161-
variables {F}
162-
163-
@[simp] lemma to_dual_apply {x y : F} : to_dual F x y = ⟪x, y⟫_ℝ := rfl
129+
variables {E}
164130

165-
end real
131+
@[simp] lemma to_dual_apply {x y : E} : to_dual 𝕜 E x y = ⟪x, y⟫ := rfl
166132

167133
end inner_product_space

0 commit comments

Comments
 (0)