33
33
-/
34
34
35
35
noncomputable theory
36
- open_locale classical
36
+ open_locale classical topological_space
37
37
universes u v
38
38
39
39
namespace normed_space
@@ -89,15 +89,15 @@ begin
89
89
classical,
90
90
by_cases h : x = 0 ,
91
91
{ simp only [h, hMp, norm_zero] },
92
- { obtain ⟨f, hf⟩ : ∃ g : E →L[𝕜] 𝕜, _ := exists_dual_vector 𝕜 x h,
92
+ { obtain ⟨f, hf₁, hfx ⟩ : ∃ f : E →L[𝕜] 𝕜, ∥f∥ = 1 ∧ f x = ∥x∥ := exists_dual_vector 𝕜 x h,
93
93
calc ∥x∥ = ∥(∥x∥ : 𝕜)∥ : is_R_or_C.norm_coe_norm.symm
94
- ... = ∥f x∥ : by rw hf. 2
94
+ ... = ∥f x∥ : by rw hfx
95
95
... ≤ M * ∥f∥ : hM f
96
- ... = M : by rw [hf. 1 , mul_one] }
96
+ ... = M : by rw [hf₁ , mul_one] }
97
97
end
98
98
99
99
lemma eq_zero_of_forall_dual_eq_zero {x : E} (h : ∀ f : dual 𝕜 E, f x = (0 : 𝕜)) : x = 0 :=
100
- norm_eq_zero .mp (le_antisymm ( norm_le_dual_bound 𝕜 x le_rfl (λ f, by simp [h f])) (norm_nonneg _ ))
100
+ norm_le_zero_iff .mp (norm_le_dual_bound 𝕜 x le_rfl (λ f, by simp [h f]))
101
101
102
102
lemma eq_zero_iff_forall_dual_eq_zero (x : E) : x = 0 ↔ ∀ g : dual 𝕜 E, g x = 0 :=
103
103
⟨λ hx, by simp [hx], λ h, eq_zero_of_forall_dual_eq_zero 𝕜 h⟩
@@ -137,9 +137,6 @@ def polar (𝕜 : Type*) [nondiscrete_normed_field 𝕜]
137
137
{E : Type *} [normed_group E] [normed_space 𝕜 E] (s : set E) : set (dual 𝕜 E) :=
138
138
{x' : dual 𝕜 E | ∀ z ∈ s, ∥ x' z ∥ ≤ 1 }
139
139
140
- open metric set normed_space
141
- open_locale topological_space
142
-
143
140
variables (𝕜 : Type *) [nondiscrete_normed_field 𝕜]
144
141
variables {E : Type *} [normed_group E] [normed_space 𝕜 E]
145
142
@@ -148,11 +145,60 @@ variables {E : Type*} [normed_group E] [normed_space 𝕜 E]
148
145
λ _ _, by simp only [zero_le_one, continuous_linear_map.zero_apply, norm_zero]
149
146
150
147
lemma polar_eq_Inter (s : set E) :
151
- polar 𝕜 s = ⋂ z ∈ s, {x' : dual 𝕜 E | ∥ x' z ∥ ≤ 1 } :=
152
- by { ext, simp only [polar, mem_bInter_iff, mem_set_of_eq], }
148
+ polar 𝕜 s = ⋂ z ∈ s, {x' : dual 𝕜 E | ∥x' z∥ ≤ 1 } :=
149
+ by simp only [polar, set_of_forall]
150
+
151
+ @[simp] lemma polar_univ : polar 𝕜 (univ : set E) = {0 } :=
152
+ begin
153
+ refine eq_singleton_iff_unique_mem.2 ⟨zero_mem_polar _ _, λ x' hx', _⟩,
154
+ ext x,
155
+ refine norm_le_zero_iff.1 (le_of_forall_le_of_dense $ λ ε hε, _),
156
+ rcases normed_field.exists_norm_lt 𝕜 hε with ⟨c, hc, hcε⟩,
157
+ calc ∥x' x∥ = ∥c∥ * ∥x' (c⁻¹ • x)∥ :
158
+ by rw [x'.map_smul, norm_smul, normed_field.norm_inv,
159
+ mul_inv_cancel_left₀ hc.ne']
160
+ ... ≤ ε * 1 : mul_le_mul hcε.le (hx' _ trivial) (norm_nonneg _) hε.le
161
+ ... = ε : mul_one _
162
+ end
163
+
164
+ lemma is_closed_polar (s : set E) : is_closed (polar 𝕜 s) :=
165
+ begin
166
+ simp only [polar_eq_Inter, ← continuous_linear_map.apply_apply _ (_ : dual 𝕜 E)],
167
+ refine is_closed_bInter (λ z hz, _),
168
+ exact is_closed_Iic.preimage (continuous_linear_map.apply 𝕜 𝕜 z).continuous.norm
169
+ end
170
+
171
+ variable (E)
172
+
173
+ /-- `polar 𝕜 : set E → set (normed_space.dual 𝕜 E)` forms an order-reversing Galois connection with
174
+ a similarly defined map `set (normed_space.dual 𝕜 E) → set E`. We use `order_dual.to_dual` and
175
+ `order_dual.of_dual` to express that `polar` is order-reversing. Instead of defining the dual
176
+ operation `unpolar s := {x : E | ∀ x' ∈ s, ∥x' x∥ ≤ 1}` we apply `polar 𝕜` again, then pull the set
177
+ from the double dual space to the original space using `normed_space.inclusion_in_double_dual`. -/
178
+ lemma polar_gc :
179
+ galois_connection (order_dual.to_dual ∘ polar 𝕜)
180
+ (λ s, inclusion_in_double_dual 𝕜 E ⁻¹' (polar 𝕜 $ order_dual.of_dual s)) :=
181
+ λ s t, ⟨λ H x hx x' hx', H hx' x hx, λ H x' hx' x hx, H hx x' hx'⟩
153
182
154
- @[simp] lemma polar_empty : polar 𝕜 (∅ : set E) = univ :=
155
- by simp only [polar, forall_false_left, mem_empty_eq, forall_const, set_of_true]
183
+ variable {E}
184
+
185
+ @[simp] lemma polar_Union {ι} (s : ι → set E) : polar 𝕜 (⋃ i, s i) = ⋂ i, polar 𝕜 (s i) :=
186
+ (polar_gc 𝕜 E).l_supr
187
+
188
+ @[simp] lemma polar_union (s t : set E) : polar 𝕜 (s ∪ t) = polar 𝕜 s ∩ polar 𝕜 t :=
189
+ (polar_gc 𝕜 E).l_sup
190
+
191
+ lemma polar_antitone : antitone (polar 𝕜 : set E → set (dual 𝕜 E)) := (polar_gc 𝕜 E).monotone_l
192
+
193
+ @[simp] lemma polar_empty : polar 𝕜 (∅ : set E) = univ := (polar_gc 𝕜 E).l_bot
194
+
195
+ @[simp] lemma polar_zero : polar 𝕜 ({0 } : set E) = univ :=
196
+ eq_univ_of_forall $ λ x', forall_eq.2 $ by { rw [map_zero, norm_zero], exact zero_le_one }
197
+
198
+ @[simp] lemma polar_closure (s : set E) : polar 𝕜 (closure s) = polar 𝕜 s :=
199
+ (polar_antitone 𝕜 subset_closure).antisymm $ (polar_gc 𝕜 E).l_le $
200
+ closure_minimal ((polar_gc 𝕜 E).le_u_l s) $
201
+ (is_closed_polar _ _).preimage (inclusion_in_double_dual 𝕜 E).continuous
156
202
157
203
variables {𝕜}
158
204
@@ -173,43 +219,52 @@ begin
173
219
rwa cancel at le,
174
220
end
175
221
222
+ lemma polar_ball_subset_closed_ball_div {c : 𝕜} (hc : 1 < ∥c∥) {r : ℝ} (hr : 0 < r) :
223
+ polar 𝕜 (ball (0 : E) r) ⊆ closed_ball (0 : dual 𝕜 E) (∥c∥ / r) :=
224
+ begin
225
+ intros x' hx',
226
+ simp only [polar, mem_set_of_eq, mem_closed_ball_zero_iff, mem_ball_zero_iff] at *,
227
+ have hcr : 0 < ∥c∥ / r, from div_pos (zero_lt_one.trans hc) hr,
228
+ refine continuous_linear_map.op_norm_le_of_shell hr hcr.le hc (λ x h₁ h₂, _),
229
+ calc ∥x' x∥ ≤ 1 : hx' _ h₂
230
+ ... ≤ (∥c∥ / r) * ∥x∥ : (inv_pos_le_iff_one_le_mul' hcr).1 (by rwa inv_div)
231
+ end
232
+
176
233
variables (𝕜)
177
234
235
+ lemma closed_ball_inv_subset_polar_closed_ball {r : ℝ} :
236
+ closed_ball (0 : dual 𝕜 E) r⁻¹ ⊆ polar 𝕜 (closed_ball (0 : E) r) :=
237
+ λ x' hx' x hx,
238
+ calc ∥x' x∥ ≤ ∥x'∥ * ∥x∥ : x'.le_op_norm x
239
+ ... ≤ r⁻¹ * r :
240
+ mul_le_mul (mem_closed_ball_zero_iff.1 hx') (mem_closed_ball_zero_iff.1 hx)
241
+ (norm_nonneg _) (dist_nonneg.trans hx')
242
+ ... = r / r : div_eq_inv_mul.symm
243
+ ... ≤ 1 : div_self_le_one r
244
+
178
245
/-- The `polar` of closed ball in a normed space `E` is the closed ball of the dual with
179
246
inverse radius. -/
180
247
lemma polar_closed_ball
181
248
{𝕜 : Type *} [is_R_or_C 𝕜] {E : Type *} [normed_group E] [normed_space 𝕜 E] {r : ℝ} (hr : 0 < r) :
182
- polar 𝕜 (closed_ball (0 : E) r) = closed_ball (0 : dual 𝕜 E) ( 1 /r) :=
249
+ polar 𝕜 (closed_ball (0 : E) r) = closed_ball (0 : dual 𝕜 E) r⁻¹ :=
183
250
begin
184
- ext x',
185
- simp only [mem_closed_ball, mem_set_of_eq, dist_zero_right],
186
- split,
187
- { intros h,
188
- apply continuous_linear_map.op_norm_le_of_ball hr (one_div_nonneg.mpr hr.le),
189
- { exact λ z hz, linear_map.bound_of_ball_bound hr 1 x'.to_linear_map h z, },
190
- { exact ring_hom_isometric.ids, }, },
191
- { intros h z hz,
192
- simp only [mem_closed_ball, dist_zero_right] at hz,
193
- have key := (continuous_linear_map.le_op_norm x' z).trans
194
- (mul_le_mul h hz (norm_nonneg _) (one_div_nonneg.mpr hr.le)),
195
- rwa [one_div_mul_cancel hr.ne.symm] at key, },
251
+ refine subset.antisymm _ (closed_ball_inv_subset_polar_closed_ball _),
252
+ intros x' h,
253
+ simp only [mem_closed_ball_zero_iff],
254
+ refine continuous_linear_map.op_norm_le_of_ball hr (inv_nonneg.mpr hr.le) (λ z hz, _),
255
+ simpa only [one_div] using linear_map.bound_of_ball_bound hr 1 x'.to_linear_map h z
196
256
end
197
257
198
258
/-- Given a neighborhood `s` of the origin in a normed space `E`, the dual norms
199
259
of all elements of the polar `polar 𝕜 s` are bounded by a constant. -/
200
- lemma polar_bounded_of_nhds_zero {s : set E} (s_nhd : s ∈ 𝓝 (0 : E)) :
201
- ∃ (c : ℝ), ∀ x' ∈ polar 𝕜 s, ∥x'∥ ≤ c :=
260
+ lemma bounded_polar_of_mem_nhds_zero {s : set E} (s_nhd : s ∈ 𝓝 (0 : E)) :
261
+ bounded ( polar 𝕜 s) :=
202
262
begin
203
263
obtain ⟨a, ha⟩ : ∃ a : 𝕜, 1 < ∥a∥ := normed_field.exists_one_lt_norm 𝕜,
204
264
obtain ⟨r, r_pos, r_ball⟩ : ∃ (r : ℝ) (hr : 0 < r), ball 0 r ⊆ s :=
205
265
metric.mem_nhds_iff.1 s_nhd,
206
- refine ⟨∥a∥ / r, λ x' hx', _⟩,
207
- have I : 0 ≤ ∥a∥ / r := div_nonneg (norm_nonneg _) r_pos.le,
208
- refine continuous_linear_map.op_norm_le_of_shell r_pos I ha (λ x hx h'x, _),
209
- have x_mem : x ∈ ball (0 : E) r, by simpa only [mem_ball_zero_iff] using h'x,
210
- calc ∥x' x∥ ≤ 1 : hx' x (r_ball x_mem)
211
- ... = (∥a∥ / r) * (r / ∥a∥) : by field_simp [r_pos.ne', (zero_lt_one.trans ha).ne']
212
- ... ≤ (∥a∥ / r) * ∥x∥ : mul_le_mul_of_nonneg_left hx I
266
+ exact bounded_closed_ball.mono ((polar_antitone 𝕜 r_ball).trans $
267
+ polar_ball_subset_closed_ball_div ha r_pos)
213
268
end
214
269
215
270
end polar_sets
0 commit comments