@@ -12,7 +12,7 @@ import measure_theory.integral.bochner
12
12
/-!
13
13
# Approximation in Lᵖ by continuous functions
14
14
15
- This file proves that bounded continuous functions are dense in `Lp E p μ`, for `1 ≤ p < ∞`, if the
15
+ This file proves that bounded continuous functions are dense in `Lp E p μ`, for `p < ∞`, if the
16
16
domain `α` of the functions is a normal topological space and the measure `μ` is weakly regular.
17
17
It also proves the same results for approximation by continuous functions with compact support
18
18
when the space is locally compact and `μ` is regular.
@@ -127,9 +127,9 @@ begin
127
127
end
128
128
129
129
/-- In a locally compact space, any function in `ℒp` can be approximated by compactly supported
130
- continuous functions when `1 ≤ p < ∞`, version in terms of `snorm`. -/
130
+ continuous functions when `p < ∞`, version in terms of `snorm`. -/
131
131
lemma mem_ℒp.exists_has_compact_support_snorm_sub_le
132
- [locally_compact_space α] [μ.regular] (hp : p ≠ ∞) (h'p : 1 ≤ p)
132
+ [locally_compact_space α] [μ.regular] (hp : p ≠ ∞)
133
133
{f : α → E} (hf : mem_ℒp f p μ) {ε : ℝ≥0 ∞} (hε : ε ≠ 0 ) :
134
134
∃ (g : α → E), has_compact_support g ∧ snorm (f - g) p μ ≤ ε ∧ continuous g ∧ mem_ℒp g p μ :=
135
135
begin
@@ -140,7 +140,7 @@ begin
140
140
-- It suffices to check that the set of functions we consider approximates characteristic
141
141
-- functions, is stable under addition and consists of ae strongly measurable functions.
142
142
-- First check the latter easy facts.
143
- apply hf.induction_dense hp h'p _ _ _ _ hε, rotate,
143
+ apply hf.induction_dense hp _ _ _ _ hε, rotate,
144
144
-- stability under addition
145
145
{ rintros f g ⟨f_cont, f_mem, hf⟩ ⟨g_cont, g_mem, hg⟩,
146
146
exact ⟨f_cont.add g_cont, f_mem.add g_mem, hf.add hg⟩ },
@@ -150,63 +150,52 @@ begin
150
150
-- We are left with approximating characteristic functions.
151
151
-- This follows from `exists_continuous_snorm_sub_le_of_closed`.
152
152
assume c t ht htμ ε hε,
153
- have h'ε : ε / 2 ≠ 0 , by simpa using hε ,
153
+ rcases exists_Lp_half E μ p hε with ⟨δ, δpos, hδ⟩ ,
154
154
obtain ⟨η, ηpos, hη⟩ : ∃ (η : ℝ≥0 ), 0 < η ∧ ∀ (s : set α), μ s ≤ η →
155
- snorm (s.indicator (λ x, c)) p μ ≤ ε / 2 , from exists_snorm_indicator_le hp c h'ε ,
155
+ snorm (s.indicator (λ x, c)) p μ ≤ δ , from exists_snorm_indicator_le hp c δpos.ne' ,
156
156
have hη_pos' : (0 : ℝ≥0 ∞) < η, from ennreal.coe_pos.2 ηpos,
157
157
obtain ⟨s, st, s_compact, μs⟩ : ∃ s ⊆ t, is_compact s ∧ μ (t \ s) < η,
158
158
from ht.exists_is_compact_diff_lt htμ.ne hη_pos'.ne',
159
159
have hsμ : μ s < ∞, from (measure_mono st).trans_lt htμ,
160
- have I1 : snorm (s.indicator (λ y, c) - t.indicator (λ y, c)) p μ ≤ ε/ 2 ,
160
+ have I1 : snorm (s.indicator (λ y, c) - t.indicator (λ y, c)) p μ ≤ δ ,
161
161
{ rw [← snorm_neg, neg_sub, ← indicator_diff st],
162
162
exact (hη _ μs.le) },
163
163
obtain ⟨k, k_compact, sk, -⟩ : ∃ (k : set α), is_compact k ∧ s ⊆ interior k ∧ k ⊆ univ,
164
164
from exists_compact_between s_compact is_open_univ (subset_univ _),
165
165
rcases exists_continuous_snorm_sub_le_of_closed hp s_compact.is_closed is_open_interior sk
166
- hsμ.ne c h'ε with ⟨f, f_cont, I2, f_bound, f_support, f_mem⟩,
167
- have I3 : snorm (f - t.indicator (λ y, c)) p μ ≤ ε, from calc
168
- snorm (f - t.indicator (λ y, c)) p μ
169
- = snorm ((f - s.indicator (λ y, c)) + (s.indicator (λ y, c) - t.indicator (λ y, c))) p μ :
170
- by simp only [sub_add_sub_cancel]
171
- ... ≤ snorm (f - s.indicator (λ y, c)) p μ
172
- + snorm (s.indicator (λ y, c) - t.indicator (λ y, c)) p μ :
173
- begin
174
- refine snorm_add_le _ _ h'p,
175
- { exact f_mem.ae_strongly_measurable.sub
176
- (ae_strongly_measurable_const.indicator s_compact.measurable_set) },
177
- { exact (ae_strongly_measurable_const.indicator s_compact.measurable_set).sub
178
- (ae_strongly_measurable_const.indicator ht) },
179
- end
180
- ... ≤ ε/2 + ε/2 : add_le_add I2 I1
181
- ... = ε : ennreal.add_halves _,
166
+ hsμ.ne c δpos.ne' with ⟨f, f_cont, I2, f_bound, f_support, f_mem⟩,
167
+ have I3 : snorm (f - t.indicator (λ y, c)) p μ ≤ ε,
168
+ { convert (hδ _ _ (f_mem.ae_strongly_measurable.sub
169
+ (ae_strongly_measurable_const.indicator s_compact.measurable_set))
170
+ ((ae_strongly_measurable_const.indicator s_compact.measurable_set).sub
171
+ (ae_strongly_measurable_const.indicator ht)) I2 I1).le,
172
+ simp only [sub_add_sub_cancel] },
182
173
refine ⟨f, I3, f_cont, f_mem, has_compact_support.intro k_compact (λ x hx, _)⟩,
183
174
rw ← function.nmem_support,
184
175
contrapose! hx,
185
176
exact interior_subset (f_support hx)
186
177
end
187
178
188
179
/-- In a locally compact space, any function in `ℒp` can be approximated by compactly supported
189
- continuous functions when `1 ≤ p < ∞`, version in terms of `∫`. -/
180
+ continuous functions when `0 < p < ∞`, version in terms of `∫`. -/
190
181
lemma mem_ℒp.exists_has_compact_support_integral_rpow_sub_le
191
- [locally_compact_space α] [μ.regular] {p : ℝ} (h'p : 1 ≤ p)
182
+ [locally_compact_space α] [μ.regular] {p : ℝ} (hp : 0 < p)
192
183
{f : α → E} (hf : mem_ℒp f (ennreal.of_real p) μ) {ε : ℝ} (hε : 0 < ε) :
193
184
∃ (g : α → E), has_compact_support g ∧ ∫ x, ‖f x - g x‖^p ∂μ ≤ ε ∧ continuous g
194
185
∧ mem_ℒp g (ennreal.of_real p) μ :=
195
186
begin
196
187
have I : 0 < ε ^ (1 /p) := real.rpow_pos_of_pos hε _,
197
188
have A : ennreal.of_real (ε ^ (1 /p)) ≠ 0 ,
198
189
by simp only [ne.def, ennreal.of_real_eq_zero, not_le, I],
199
- have B : 1 ≤ ennreal.of_real p,
200
- { convert ennreal.of_real_le_of_real h'p, exact ennreal.of_real_one.symm },
201
- rcases hf.exists_has_compact_support_snorm_sub_le ennreal.coe_ne_top B A
190
+ have B : ennreal.of_real p ≠ 0 , by simpa only [ne.def, ennreal.of_real_eq_zero, not_le] using hp,
191
+ rcases hf.exists_has_compact_support_snorm_sub_le ennreal.coe_ne_top A
202
192
with ⟨g, g_support, hg, g_cont, g_mem⟩,
203
193
change snorm _ (ennreal.of_real p) _ ≤ _ at hg,
204
194
refine ⟨g, g_support, _, g_cont, g_mem⟩,
205
- rwa [(hf.sub g_mem).snorm_eq_integral_rpow_norm (zero_lt_one.trans_le B).ne'
206
- ennreal.coe_ne_top, ennreal.of_real_le_of_real_iff I.le, one_div,
207
- ennreal.to_real_of_real (zero_le_one.trans h'p), real.rpow_le_rpow_iff _ hε.le _] at hg,
208
- { exact integral_nonneg (λ x, real.rpow_nonneg_of_nonneg (norm_nonneg _) _) },
209
- { exact inv_pos.2 (zero_lt_one.trans_le h'p) }
195
+ rwa [(hf.sub g_mem).snorm_eq_integral_rpow_norm B ennreal.coe_ne_top,
196
+ ennreal.of_real_le_of_real_iff I.le, one_div,
197
+ ennreal.to_real_of_real hp.le, real.rpow_le_rpow_iff _ hε.le (inv_pos.2 hp)] at hg,
198
+ exact integral_nonneg (λ x, real.rpow_nonneg_of_nonneg (norm_nonneg _) _),
210
199
end
211
200
212
201
/-- In a locally compact space, any integrable function can be approximated by compactly supported
@@ -217,7 +206,7 @@ lemma integrable.exists_has_compact_support_lintegral_sub_le [locally_compact_sp
217
206
∧ integrable g μ :=
218
207
begin
219
208
simp only [← mem_ℒp_one_iff_integrable, ← snorm_one_eq_lintegral_nnnorm] at hf ⊢,
220
- exact hf.exists_has_compact_support_snorm_sub_le ennreal.one_ne_top le_rfl hε,
209
+ exact hf.exists_has_compact_support_snorm_sub_le ennreal.one_ne_top hε,
221
210
end
222
211
223
212
/-- In a locally compact space, any integrable function can be approximated by compactly supported
@@ -229,12 +218,12 @@ lemma integrable.exists_has_compact_support_integral_sub_le [locally_compact_spa
229
218
begin
230
219
simp only [← mem_ℒp_one_iff_integrable, ← snorm_one_eq_lintegral_nnnorm,
231
220
← ennreal.of_real_one] at hf ⊢,
232
- simpa using hf.exists_has_compact_support_integral_rpow_sub_le le_rfl hε,
221
+ simpa using hf.exists_has_compact_support_integral_rpow_sub_le zero_lt_one hε,
233
222
end
234
223
235
- /-- Any function in `ℒp` can be approximated by bounded continuous functions when `1 ≤ p < ∞`,
224
+ /-- Any function in `ℒp` can be approximated by bounded continuous functions when `p < ∞`,
236
225
version in terms of `snorm`. -/
237
- lemma mem_ℒp.exists_bounded_continuous_snorm_sub_le [μ.weakly_regular] (hp : p ≠ ∞) (h'p : 1 ≤ p)
226
+ lemma mem_ℒp.exists_bounded_continuous_snorm_sub_le [μ.weakly_regular] (hp : p ≠ ∞)
238
227
{f : α → E} (hf : mem_ℒp f p μ) {ε : ℝ≥0 ∞} (hε : ε ≠ 0 ) :
239
228
∃ (g : α →ᵇ E), snorm (f - g) p μ ≤ ε ∧ mem_ℒp g p μ :=
240
229
begin
@@ -245,7 +234,7 @@ begin
245
234
-- It suffices to check that the set of functions we consider approximates characteristic
246
235
-- functions, is stable under addition and made of ae strongly measurable functions.
247
236
-- First check the latter easy facts.
248
- apply hf.induction_dense hp h'p _ _ _ _ hε, rotate,
237
+ apply hf.induction_dense hp _ _ _ _ hε, rotate,
249
238
-- stability under addition
250
239
{ rintros f g ⟨f_cont, f_mem, f_bd⟩ ⟨g_cont, g_mem, g_bd⟩,
251
240
refine ⟨f_cont.add g_cont, f_mem.add g_mem, _⟩,
@@ -257,58 +246,46 @@ begin
257
246
-- We are left with approximating characteristic functions.
258
247
-- This follows from `exists_continuous_snorm_sub_le_of_closed`.
259
248
assume c t ht htμ ε hε,
260
- have h'ε : ε / 2 ≠ 0 , by simpa using hε ,
249
+ rcases exists_Lp_half E μ p hε with ⟨δ, δpos, hδ⟩ ,
261
250
obtain ⟨η, ηpos, hη⟩ : ∃ (η : ℝ≥0 ), 0 < η ∧ ∀ (s : set α), μ s ≤ η →
262
- snorm (s.indicator (λ x, c)) p μ ≤ ε / 2 , from exists_snorm_indicator_le hp c h'ε ,
251
+ snorm (s.indicator (λ x, c)) p μ ≤ δ , from exists_snorm_indicator_le hp c δpos.ne' ,
263
252
have hη_pos' : (0 : ℝ≥0 ∞) < η, from ennreal.coe_pos.2 ηpos,
264
253
obtain ⟨s, st, s_closed, μs⟩ : ∃ s ⊆ t, is_closed s ∧ μ (t \ s) < η,
265
254
from ht.exists_is_closed_diff_lt htμ.ne hη_pos'.ne',
266
255
have hsμ : μ s < ∞, from (measure_mono st).trans_lt htμ,
267
- have I1 : snorm (s.indicator (λ y, c) - t.indicator (λ y, c)) p μ ≤ ε/ 2 ,
256
+ have I1 : snorm (s.indicator (λ y, c) - t.indicator (λ y, c)) p μ ≤ δ ,
268
257
{ rw [← snorm_neg, neg_sub, ← indicator_diff st],
269
258
exact (hη _ μs.le) },
270
259
rcases exists_continuous_snorm_sub_le_of_closed hp s_closed is_open_univ (subset_univ _)
271
- hsμ.ne c h'ε with ⟨f, f_cont, I2, f_bound, -, f_mem⟩,
272
- have I3 : snorm (f - t.indicator (λ y, c)) p μ ≤ ε, from calc
273
- snorm (f - t.indicator (λ y, c)) p μ
274
- = snorm ((f - s.indicator (λ y, c)) + (s.indicator (λ y, c) - t.indicator (λ y, c))) p μ :
275
- by simp only [sub_add_sub_cancel]
276
- ... ≤ snorm (f - s.indicator (λ y, c)) p μ
277
- + snorm (s.indicator (λ y, c) - t.indicator (λ y, c)) p μ :
278
- begin
279
- refine snorm_add_le _ _ h'p,
280
- { exact f_mem.ae_strongly_measurable.sub
281
- (ae_strongly_measurable_const.indicator s_closed.measurable_set) },
282
- { exact (ae_strongly_measurable_const.indicator s_closed.measurable_set).sub
283
- (ae_strongly_measurable_const.indicator ht) },
284
- end
285
- ... ≤ ε/2 + ε/2 : add_le_add I2 I1
286
- ... = ε : ennreal.add_halves _,
260
+ hsμ.ne c δpos.ne' with ⟨f, f_cont, I2, f_bound, -, f_mem⟩,
261
+ have I3 : snorm (f - t.indicator (λ y, c)) p μ ≤ ε,
262
+ { convert (hδ _ _ (f_mem.ae_strongly_measurable.sub
263
+ (ae_strongly_measurable_const.indicator s_closed.measurable_set))
264
+ ((ae_strongly_measurable_const.indicator s_closed.measurable_set).sub
265
+ (ae_strongly_measurable_const.indicator ht)) I2 I1).le,
266
+ simp only [sub_add_sub_cancel] },
287
267
refine ⟨f, I3, f_cont, f_mem, _⟩,
288
268
exact (bounded_continuous_function.of_normed_add_comm_group f f_cont _ f_bound).bounded_range,
289
269
end
290
270
291
- /-- Any function in `ℒp` can be approximated by bounded continuous functions when `1 ≤ p < ∞`,
271
+ /-- Any function in `ℒp` can be approximated by bounded continuous functions when `0 < p < ∞`,
292
272
version in terms of `∫`. -/
293
273
lemma mem_ℒp.exists_bounded_continuous_integral_rpow_sub_le
294
- [μ.weakly_regular] {p : ℝ} (h'p : 1 ≤ p)
274
+ [μ.weakly_regular] {p : ℝ} (hp : 0 < p)
295
275
{f : α → E} (hf : mem_ℒp f (ennreal.of_real p) μ) {ε : ℝ} (hε : 0 < ε) :
296
276
∃ (g : α →ᵇ E), ∫ x, ‖f x - g x‖^p ∂μ ≤ ε ∧ mem_ℒp g (ennreal.of_real p) μ :=
297
277
begin
298
278
have I : 0 < ε ^ (1 /p) := real.rpow_pos_of_pos hε _,
299
279
have A : ennreal.of_real (ε ^ (1 /p)) ≠ 0 ,
300
280
by simp only [ne.def, ennreal.of_real_eq_zero, not_le, I],
301
- have B : 1 ≤ ennreal.of_real p,
302
- { convert ennreal.of_real_le_of_real h'p, exact ennreal.of_real_one.symm },
303
- rcases hf.exists_bounded_continuous_snorm_sub_le ennreal.coe_ne_top B A
304
- with ⟨g, hg, g_mem⟩,
281
+ have B : ennreal.of_real p ≠ 0 , by simpa only [ne.def, ennreal.of_real_eq_zero, not_le] using hp,
282
+ rcases hf.exists_bounded_continuous_snorm_sub_le ennreal.coe_ne_top A with ⟨g, hg, g_mem⟩,
305
283
change snorm _ (ennreal.of_real p) _ ≤ _ at hg,
306
284
refine ⟨g, _, g_mem⟩,
307
- rwa [(hf.sub g_mem).snorm_eq_integral_rpow_norm (zero_lt_one.trans_le B).ne'
308
- ennreal.coe_ne_top, ennreal.of_real_le_of_real_iff I.le, one_div,
309
- ennreal.to_real_of_real (zero_le_one.trans h'p), real.rpow_le_rpow_iff _ hε.le _] at hg,
310
- { exact integral_nonneg (λ x, real.rpow_nonneg_of_nonneg (norm_nonneg _) _) },
311
- { exact inv_pos.2 (zero_lt_one.trans_le h'p) }
285
+ rwa [(hf.sub g_mem).snorm_eq_integral_rpow_norm B ennreal.coe_ne_top,
286
+ ennreal.of_real_le_of_real_iff I.le, one_div,
287
+ ennreal.to_real_of_real hp.le, real.rpow_le_rpow_iff _ hε.le (inv_pos.2 hp)] at hg,
288
+ exact integral_nonneg (λ x, real.rpow_nonneg_of_nonneg (norm_nonneg _) _),
312
289
end
313
290
314
291
/-- Any integrable function can be approximated by bounded continuous functions,
@@ -318,7 +295,7 @@ lemma integrable.exists_bounded_continuous_lintegral_sub_le [μ.weakly_regular]
318
295
∃ (g : α →ᵇ E), ∫⁻ x, ‖f x - g x‖₊ ∂μ ≤ ε ∧ integrable g μ :=
319
296
begin
320
297
simp only [← mem_ℒp_one_iff_integrable, ← snorm_one_eq_lintegral_nnnorm] at hf ⊢,
321
- exact hf.exists_bounded_continuous_snorm_sub_le ennreal.one_ne_top le_rfl hε,
298
+ exact hf.exists_bounded_continuous_snorm_sub_le ennreal.one_ne_top hε,
322
299
end
323
300
324
301
/-- Any integrable function can be approximated by bounded continuous functions,
@@ -329,7 +306,7 @@ lemma integrable.exists_bounded_continuous_integral_sub_le [μ.weakly_regular]
329
306
begin
330
307
simp only [← mem_ℒp_one_iff_integrable, ← snorm_one_eq_lintegral_nnnorm,
331
308
← ennreal.of_real_one] at hf ⊢,
332
- simpa using hf.exists_bounded_continuous_integral_rpow_sub_le le_rfl hε,
309
+ simpa using hf.exists_bounded_continuous_integral_rpow_sub_le zero_lt_one hε,
333
310
end
334
311
335
312
namespace Lp
@@ -348,7 +325,7 @@ begin
348
325
intros ε hε,
349
326
have A : ennreal.of_real ε ≠ 0 , by simp only [ne.def, ennreal.of_real_eq_zero, not_le, hε],
350
327
obtain ⟨g, hg, g_mem⟩ : ∃ (g : α →ᵇ E), snorm (f - g) p μ ≤ ennreal.of_real ε ∧ mem_ℒp g p μ,
351
- from (Lp.mem_ℒp f).exists_bounded_continuous_snorm_sub_le hp _i.out A,
328
+ from (Lp.mem_ℒp f).exists_bounded_continuous_snorm_sub_le hp A,
352
329
refine ⟨g_mem.to_Lp _, _, ⟨g, rfl⟩⟩,
353
330
simp only [dist_eq_norm, metric.mem_closed_ball'],
354
331
rw Lp.norm_def,
0 commit comments