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

Commit 4cd6179

Browse files
committed
refactor(measure_theory/simple_func_dense): generalize L1.simple_func.dense_embedding to Lp (#8209)
This PR generalizes all the more abstract results about approximation by simple functions, from L1 to Lp (`p ≠ ∞`). Notably, this includes * the definition `Lp.simple_func`, the `add_subgroup` of `Lp` of classes containing a simple representative * the coercion `Lp.simple_func.coe_to_Lp` from this subgroup to `Lp`, as a continuous linear map * `Lp.simple_func.dense_embedding`, this subgroup is dense in `Lp` * `mem_ℒp.induction`, to prove a predicate holds for `mem_ℒp` functions it suffices to prove that it behaves appropriately on `mem_ℒp` simple functions Many lemmas get renamed from `L1.simple_func.*` to `Lp.simple_func.*`, and have hypotheses or conclusions changed from `integrable` to `mem_ℒp`. I take the opportunity to streamline the construction by deleting some instances which typeclass inference can find, and some lemmas which are re-statements of more general results about `add_subgroup`s in normed groups. In my opinion, this extra material obscures the structure of the construction. Here is a list of the definitions deleted: - `instance : has_coe (α →₁ₛ[μ] E) (α →₁[μ] E)` - `instance : has_coe_to_fun (α →₁ₛ[μ] E)` - `instance : inhabited (α →₁ₛ[μ] E)` - `protected def normed_group : normed_group (α →₁ₛ[μ] E)` and lemmas deleted (in the `L1.simple_func` namespace unless specified): - `simple_func.tendsto_approx_on_univ_L1` - `eq` - `eq_iff` - `eq_iff'` - `coe_zero` - `coe_add` - `coe_neg` - `coe_sub` - `edist_eq` - `dist_eq` - `norm_eq` - `lintegral_edist_to_simple_func_lt_top` - `dist_to_simple_func`
1 parent a9cb722 commit 4cd6179

File tree

5 files changed

+243
-238
lines changed

5 files changed

+243
-238
lines changed

src/group_theory/subgroup.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ instance has_div : has_div H := ⟨λ a b, ⟨a / b, H.div_mem a.2 b.2⟩⟩
313313
@[simp, norm_cast, to_additive] lemma coe_mul (x y : H) : (↑(x * y) : G) = ↑x * ↑y := rfl
314314
@[simp, norm_cast, to_additive] lemma coe_one : ((1 : H) : G) = 1 := rfl
315315
@[simp, norm_cast, to_additive] lemma coe_inv (x : H) : ↑(x⁻¹ : H) = (x⁻¹ : G) := rfl
316+
@[simp, norm_cast, to_additive] lemma coe_div (x y : H) : (↑(x / y) : G) = ↑x / ↑y := rfl
316317
@[simp, norm_cast, to_additive] lemma coe_mk (x : G) (hx : x ∈ H) : ((⟨x, hx⟩ : H) : G) = x := rfl
317318

318319
attribute [norm_cast] add_subgroup.coe_add add_subgroup.coe_zero

src/measure_theory/bochner_integration.lean

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ noncomputable theory
140140
open_locale classical topological_space big_operators nnreal ennreal measure_theory
141141
open set filter topological_space ennreal emetric
142142

143+
local attribute [instance] fact_one_le_one_ennreal
144+
143145
namespace measure_theory
144146

145147
variables {α E F 𝕜 : Type*} [measurable_space α]
@@ -370,7 +372,7 @@ end simple_func
370372

371373
namespace L1
372374

373-
open ae_eq_fun
375+
open ae_eq_fun Lp.simple_func Lp
374376

375377
variables
376378
[normed_group E] [second_countable_topology E] [measurable_space E] [borel_space E]
@@ -384,7 +386,7 @@ namespace simple_func
384386
lemma norm_eq_integral (f : α →₁ₛ[μ] E) : ∥f∥ = ((to_simple_func f).map norm).integral μ :=
385387
begin
386388
rw [norm_to_simple_func, simple_func.integral_eq_lintegral],
387-
{ simp only [simple_func.map_apply, of_real_norm_eq_coe_nnnorm] },
389+
{ simp only [simple_func.map_apply, of_real_norm_eq_coe_nnnorm, snorm_one_eq_lintegral_nnnorm] },
388390
{ exact (simple_func.integrable f).norm },
389391
{ exact eventually_of_forall (λ x, norm_nonneg _) }
390392
end
@@ -420,7 +422,7 @@ and prove basic properties of this integral. -/
420422

421423
variables [normed_field 𝕜] [normed_space 𝕜 E] [normed_space ℝ E] [smul_comm_class ℝ 𝕜 E]
422424

423-
local attribute [instance] simple_func.normed_group simple_func.normed_space
425+
local attribute [instance] simple_func.normed_space
424426

425427
/-- The Bochner integral over simple functions in L1 space. -/
426428
def integral (f : α →₁ₛ[μ] E) : E := ((to_simple_func f)).integral μ
@@ -487,7 +489,7 @@ begin
487489
{ filter_upwards [to_simple_func_eq_to_fun (pos_part f), Lp.coe_fn_pos_part (f : α →₁[μ] ℝ),
488490
to_simple_func_eq_to_fun f],
489491
assume a h₁ h₂ h₃,
490-
rw [h₁, ← coe_coe, coe_pos_part, h₂, coe_coe, ← h₃] },
492+
convert h₂ },
491493
refine ae_eq.mono (assume a h, _),
492494
rw [h, eq]
493495
end
@@ -554,16 +556,15 @@ variables [normed_space ℝ E] [nondiscrete_normed_field 𝕜] [normed_space
554556

555557
section integration_in_L1
556558

557-
local notation `to_L1` := coe_to_L1 α E ℝ
558-
local attribute [instance] simple_func.normed_group simple_func.normed_space
559+
local attribute [instance] simple_func.normed_space
559560

560561
open continuous_linear_map
561562

562563
variables (𝕜) [measurable_space 𝕜] [opens_measurable_space 𝕜]
563564
/-- The Bochner integral in L1 space as a continuous linear map. -/
564565
def integral_clm' : (α →₁[μ] E) →L[𝕜] E :=
565566
(integral_clm' α E 𝕜 μ).extend
566-
(coe_to_L1 α E 𝕜) simple_func.dense_range simple_func.uniform_inducing
567+
(coe_to_Lp α E 𝕜) (simple_func.dense_range one_ne_top) simple_func.uniform_inducing
567568

568569
variables {𝕜}
569570

@@ -577,7 +578,7 @@ lemma integral_eq (f : α →₁[μ] E) : integral f = integral_clm f := rfl
577578

578579
@[norm_cast] lemma simple_func.integral_L1_eq_integral (f : α →₁ₛ[μ] E) :
579580
integral (f : α →₁[μ] E) = (simple_func.integral f) :=
580-
uniformly_extend_of_ind simple_func.uniform_inducing simple_func.dense_range
581+
uniformly_extend_of_ind simple_func.uniform_inducing (simple_func.dense_range one_ne_top)
581582
(simple_func.integral_clm α E μ).uniform_continuous _
582583

583584
variables (α E)
@@ -626,15 +627,15 @@ begin
626627
-- Use `is_closed_property` and `is_closed_eq`
627628
refine @is_closed_property _ _ _ (coe : (α →₁ₛ[μ] ℝ) → (α →₁[μ] ℝ))
628629
(λ f : α →₁[μ] ℝ, integral f = ∥Lp.pos_part f∥ - ∥Lp.neg_part f∥)
629-
L1.simple_func.dense_range (is_closed_eq _ _) _ f,
630+
(simple_func.dense_range one_ne_top) (is_closed_eq _ _) _ f,
630631
{ exact cont _ },
631632
{ refine continuous.sub (continuous_norm.comp Lp.continuous_pos_part)
632633
(continuous_norm.comp Lp.continuous_neg_part) },
633634
-- Show that the property holds for all simple functions in the `L¹` space.
634635
{ assume s,
635636
norm_cast,
636-
rw [← simple_func.norm_eq, ← simple_func.norm_eq],
637-
exact simple_func.integral_eq_norm_pos_part_sub _}
637+
rw [← coe_norm_subgroup, ← coe_norm_subgroup],
638+
exact simple_func.integral_eq_norm_pos_part_sub _ }
638639
end
639640

640641
end pos_part
@@ -1107,9 +1108,9 @@ end
11071108
lemma simple_func.integral_eq_integral (f : α →ₛ E) (hfi : integrable f μ) :
11081109
f.integral μ = ∫ x, f x ∂μ :=
11091110
begin
1110-
rw [integral_eq f hfi, ← L1.simple_func.to_L1_eq_to_L1,
1111+
rw [integral_eq f hfi, ← L1.simple_func.to_Lp_one_eq_to_L1,
11111112
L1.simple_func.integral_L1_eq_integral, L1.simple_func.integral_eq_integral],
1112-
exact simple_func.integral_congr hfi (L1.simple_func.to_simple_func_to_L1 _ _).symm
1113+
exact simple_func.integral_congr hfi (Lp.simple_func.to_simple_func_to_Lp _ _).symm
11131114
end
11141115

11151116
lemma simple_func.integral_eq_sum (f : α →ₛ E) (hfi : integrable f μ) :

src/measure_theory/integrable_on.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ alias measure.finite_at_filter.integrable_at_filter_of_tendsto ← filter.tendst
262262

263263
variables [borel_space E] [second_countable_topology E]
264264

265-
lemma integrable_add [opens_measurable_space E] {f g : α → E}
265+
lemma integrable_add_of_disjoint {f g : α → E}
266266
(h : disjoint (support f) (support g)) (hf : measurable f) (hg : measurable g) :
267267
integrable (f + g) μ ↔ integrable f μ ∧ integrable g μ :=
268268
begin

src/measure_theory/lp_space.lean

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,6 +1339,20 @@ begin
13391339
exact le_rfl,
13401340
end
13411341

1342+
variables (hs)
1343+
1344+
lemma snorm_indicator_le {E : Type*} [normed_group E] (f : α → E) :
1345+
snorm (s.indicator f) p μ ≤ snorm f p μ :=
1346+
begin
1347+
refine snorm_mono_ae (eventually_of_forall (λ x, _)),
1348+
suffices : ∥s.indicator f x∥₊ ≤ ∥f x∥₊,
1349+
{ exact nnreal.coe_mono this },
1350+
rw nnnorm_indicator_eq_indicator_nnnorm,
1351+
exact s.indicator_le_self _ x,
1352+
end
1353+
1354+
variables {hs}
1355+
13421356
lemma snorm_indicator_const {c : G} (hs : measurable_set s) (hp : p ≠ 0) (hp_top : p ≠ ∞) :
13431357
snorm (s.indicator (λ x, c)) p μ = ∥c∥₊ * (μ s) ^ (1 / p.to_real) :=
13441358
begin
@@ -1363,6 +1377,10 @@ begin
13631377
{ exact snorm_indicator_const hs hp hp_top, },
13641378
end
13651379

1380+
lemma mem_ℒp.indicator (hs : measurable_set s) (hf : mem_ℒp f p μ) :
1381+
mem_ℒp (s.indicator f) p μ :=
1382+
⟨hf.ae_measurable.indicator hs, lt_of_le_of_lt (snorm_indicator_le f) hf.snorm_lt_top⟩
1383+
13661384
lemma mem_ℒp_indicator_const (p : ℝ≥0∞) (hs : measurable_set s) (c : E) (hμsc : c = 0 ∨ μ s ≠ ∞) :
13671385
mem_ℒp (s.indicator (λ _, c)) p μ :=
13681386
begin
@@ -1390,6 +1408,9 @@ end
13901408
end indicator
13911409

13921410
section indicator_const_Lp
1411+
1412+
open set function
1413+
13931414
variables {s : set α} {hs : measurable_set s} {hμs : μ s ≠ ∞} {c : E}
13941415
[borel_space E] [second_countable_topology E]
13951416

@@ -1428,6 +1449,15 @@ begin
14281449
{ exact norm_indicator_const_Lp hp_pos hp_top, },
14291450
end
14301451

1452+
lemma mem_ℒp_add_of_disjoint {f g : α → E}
1453+
(h : disjoint (support f) (support g)) (hf : measurable f) (hg : measurable g) :
1454+
mem_ℒp (f + g) p μ ↔ mem_ℒp f p μ ∧ mem_ℒp g p μ :=
1455+
begin
1456+
refine ⟨λ hfg, ⟨_, _⟩, λ h, h.1.add h.2⟩,
1457+
{ rw ← indicator_add_eq_left h, exact hfg.indicator (measurable_set_support hf) },
1458+
{ rw ← indicator_add_eq_right h, exact hfg.indicator (measurable_set_support hg) }
1459+
end
1460+
14311461
/-- The indicator of a disjoint union of two sets is the sum of the indicators of the sets. -/
14321462
lemma indicator_const_Lp_disjoint_union {s t : set α} (hs : measurable_set s)
14331463
(ht : measurable_set t) (hμs : μ s ≠ ∞) (hμt : μ t ≠ ∞) (hst : s ∩ t = ∅) (c : E) :

0 commit comments

Comments
 (0)