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

Commit 96948e4

Browse files
committed
feat(measure_theory): almost everywhere measurable functions (#5568)
This PR introduces a notion of almost everywhere measurable function, i.e., a function which coincides almost everywhere with a measurable function, and builds a basic API around the notion. It will then be used in #5510 to extend the Bochner integral. The main new definition in the PR is `h : ae_measurable f μ`. It comes with `h.mk f` building a measurable function that coincides almost everywhere with `f` (these assertions are respectively `h.measurable_mk` and `h.ae_eq_mk`).
1 parent 2967793 commit 96948e4

File tree

4 files changed

+327
-4
lines changed

4 files changed

+327
-4
lines changed

src/analysis/special_functions/pow.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1493,4 +1493,9 @@ lemma measurable.ennreal_rpow_const {α} [measurable_space α] {f : α → ennre
14931493
measurable (λ a : α, (f a) ^ y) :=
14941494
hf.ennreal_rpow measurable_const
14951495

1496+
lemma ae_measurable.ennreal_rpow_const {α} [measurable_space α] {f : α → ennreal}
1497+
{μ : measure_theory.measure α} (hf : ae_measurable f μ) {y : ℝ} :
1498+
ae_measurable (λ a : α, (f a) ^ y) μ :=
1499+
ennreal.measurable_rpow_const.comp_ae_measurable hf
1500+
14961501
end measurability_ennreal

src/measure_theory/borel_space.lean

Lines changed: 101 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ import topology.G_delta
3030
is continuous, then `λ x, op (f x, g y)` is measurable;
3131
* `measurable.add` etc : dot notation for arithmetic operations on `measurable` predicates,
3232
and similarly for `dist` and `edist`;
33+
* `ae_measurable.add` : similar dot notation for almost everywhere measurable functions;
3334
* `measurable.ennreal*` : special cases for arithmetic operations on `ennreal`s.
3435
-/
3536

3637
noncomputable theory
3738

38-
open classical set filter
39+
open classical set filter measure_theory
3940
open_locale classical big_operators topological_space nnreal
4041

4142
universes u v w x y
@@ -352,10 +353,20 @@ lemma measurable.max {f g : δ → α} (hf : measurable f) (hg : measurable g) :
352353
measurable (λ a, max (f a) (g a)) :=
353354
hf.piecewise (is_measurable_le hg hf) hg
354355

356+
lemma ae_measurable.max {f g : δ → α} {μ : measure δ}
357+
(hf : ae_measurable f μ) (hg : ae_measurable g μ) : ae_measurable (λ a, max (f a) (g a)) μ :=
358+
⟨λ a, max (hf.mk f a) (hg.mk g a), hf.measurable_mk.max hg.measurable_mk,
359+
eventually_eq.comp₂ hf.ae_eq_mk _ hg.ae_eq_mk⟩
360+
355361
lemma measurable.min {f g : δ → α} (hf : measurable f) (hg : measurable g) :
356362
measurable (λ a, min (f a) (g a)) :=
357363
hf.piecewise (is_measurable_le hf hg) hg
358364

365+
lemma ae_measurable.min {f g : δ → α} {μ : measure δ}
366+
(hf : ae_measurable f μ) (hg : ae_measurable g μ) : ae_measurable (λ a, min (f a) (g a)) μ :=
367+
⟨λ a, min (hf.mk f a) (hg.mk g a), hf.measurable_mk.min hg.measurable_mk,
368+
eventually_eq.comp₂ hf.ae_eq_mk _ hg.ae_eq_mk⟩
369+
359370
end linear_order
360371

361372
/-- A continuous function from an `opens_measurable_space` to a `borel_space`
@@ -385,20 +396,40 @@ lemma continuous.measurable2 [second_countable_topology α] [second_countable_to
385396
measurable (λ a, c (f a) (g a)) :=
386397
h.measurable.comp (hf.prod_mk hg)
387398

399+
lemma continuous.ae_measurable2 [second_countable_topology α] [second_countable_topology β]
400+
{f : δ → α} {g : δ → β} {c : α → β → γ} {μ : measure δ}
401+
(h : continuous (λ p : α × β, c p.1 p.2)) (hf : ae_measurable f μ) (hg : ae_measurable g μ) :
402+
ae_measurable (λ a, c (f a) (g a)) μ :=
403+
h.measurable.comp_ae_measurable (hf.prod_mk hg)
404+
388405
lemma measurable.smul [semiring α] [second_countable_topology α]
389406
[add_comm_monoid γ] [second_countable_topology γ]
390407
[semimodule α γ] [topological_semimodule α γ]
391408
{f : δ → α} {g : δ → γ} (hf : measurable f) (hg : measurable g) :
392409
measurable (λ c, f c • g c) :=
393410
continuous_smul.measurable2 hf hg
394411

412+
lemma ae_measurable.smul [semiring α] [second_countable_topology α]
413+
[add_comm_monoid γ] [second_countable_topology γ]
414+
[semimodule α γ] [topological_semimodule α γ]
415+
{f : δ → α} {g : δ → γ} {μ : measure δ} (hf : ae_measurable f μ) (hg : ae_measurable g μ) :
416+
ae_measurable (λ c, f c • g c) μ :=
417+
continuous_smul.ae_measurable2 hf hg
418+
395419
lemma measurable.const_smul {R M : Type*} [topological_space R] [semiring R]
396420
[add_comm_monoid M] [semimodule R M] [topological_space M] [topological_semimodule R M]
397421
[measurable_space M] [borel_space M]
398422
{f : δ → M} (hf : measurable f) (c : R) :
399423
measurable (λ x, c • f x) :=
400424
(continuous_const.smul continuous_id).measurable.comp hf
401425

426+
lemma ae_measurable.const_smul {R M : Type*} [topological_space R] [semiring R]
427+
[add_comm_monoid M] [semimodule R M] [topological_space M] [topological_semimodule R M]
428+
[measurable_space M] [borel_space M]
429+
{f : δ → M} {μ : measure δ} (hf : ae_measurable f μ) (c : R) :
430+
ae_measurable (λ x, c • f x) μ :=
431+
(continuous_const.smul continuous_id).measurable.comp_ae_measurable hf
432+
402433
lemma measurable_const_smul_iff {α : Type*} [topological_space α]
403434
[division_ring α] [add_comm_monoid γ]
404435
[semimodule α γ] [topological_semimodule α γ]
@@ -407,6 +438,14 @@ lemma measurable_const_smul_iff {α : Type*} [topological_space α]
407438
⟨λ h, by simpa only [smul_smul, inv_mul_cancel hc, one_smul] using h.const_smul c⁻¹,
408439
λ h, h.const_smul c⟩
409440

441+
lemma ae_measurable_const_smul_iff {α : Type*} [topological_space α]
442+
[division_ring α] [add_comm_monoid γ]
443+
[semimodule α γ] [topological_semimodule α γ]
444+
{f : δ → γ} {μ : measure δ} {c : α} (hc : c ≠ 0) :
445+
ae_measurable (λ x, c • f x) μ ↔ ae_measurable f μ :=
446+
⟨λ h, by simpa only [smul_smul, inv_mul_cancel hc, one_smul] using h.const_smul c⁻¹,
447+
λ h, h.const_smul c⟩
448+
410449
lemma measurable.const_mul {R : Type*} [topological_space R] [measurable_space R]
411450
[borel_space R] [semiring R] [topological_semiring R]
412451
{f : δ → R} (hf : measurable f) (c : R) :
@@ -466,6 +505,12 @@ lemma measurable.mul [has_mul α] [has_continuous_mul α] [second_countable_topo
466505
{f : δ → α} {g : δ → α} : measurable f → measurable g → measurable (λ a, f a * g a) :=
467506
(@continuous_mul α _ _ _).measurable2
468507

508+
@[to_additive]
509+
lemma ae_measurable.mul [has_mul α] [has_continuous_mul α] [second_countable_topology α]
510+
{f : δ → α} {g : δ → α} {μ : measure δ}
511+
(hf : ae_measurable f μ) (hg : ae_measurable g μ) : ae_measurable (λ a, f a * g a) μ :=
512+
(@continuous_mul α _ _ _).ae_measurable2 hf hg
513+
469514
/-- A variant of `measurable.mul` that uses `*` on functions -/
470515
@[to_additive]
471516
lemma measurable.mul' [has_mul α] [has_continuous_mul α] [second_countable_topology α]
@@ -499,6 +544,11 @@ lemma measurable.inv [group α] [topological_group α] {f : δ → α} (hf : mea
499544
measurable (λ a, (f a)⁻¹) :=
500545
measurable_inv.comp hf
501546

547+
@[to_additive]
548+
lemma ae_measurable.inv [group α] [topological_group α] {f : δ → α} {μ : measure δ}
549+
(hf : ae_measurable f μ) : ae_measurable (λ a, (f a)⁻¹) μ :=
550+
measurable_inv.comp_ae_measurable hf
551+
502552
lemma measurable_inv' {α : Type*} [normed_field α] [measurable_space α] [borel_space α] :
503553
measurable (has_inv.inv : α → α) :=
504554
measurable_of_continuous_on_compl_singleton 0 continuous_on_inv'
@@ -523,6 +573,11 @@ lemma measurable.sub [add_group α] [topological_add_group α] [second_countable
523573
measurable (λ x, f x - g x) :=
524574
by simpa only [sub_eq_add_neg] using hf.add hg.neg
525575

576+
lemma ae_measurable.sub [add_group α] [topological_add_group α] [second_countable_topology α]
577+
{f g : δ → α} {μ : measure δ}
578+
(hf : ae_measurable f μ) (hg : ae_measurable g μ) : ae_measurable (λ x, f x - g x) μ :=
579+
by simpa only [sub_eq_add_neg] using hf.add hg.neg
580+
526581
lemma closed_embedding.measurable_inv_fun [n : nonempty β] {g : β → γ} (hg : closed_embedding g) :
527582
measurable (function.inv_fun g) :=
528583
begin
@@ -544,6 +599,20 @@ begin
544599
rw [@preimage_comp _ _ _ f g, preimage_image_eq _ hg.to_embedding.inj]
545600
end
546601

602+
lemma ae_measurable_comp_iff_of_closed_embedding {f : δ → β} {μ : measure δ}
603+
(g : β → γ) (hg : closed_embedding g) : ae_measurable (g ∘ f) μ ↔ ae_measurable f μ :=
604+
begin
605+
by_cases h : nonempty β,
606+
{ resetI,
607+
refine ⟨λ hf, _, λ hf, hg.continuous.measurable.comp_ae_measurable hf⟩,
608+
convert hg.measurable_inv_fun.comp_ae_measurable hf,
609+
ext x,
610+
exact (function.left_inverse_inv_fun hg.to_embedding.inj (f x)).symm },
611+
{ have H : ¬ nonempty δ, by { contrapose! h, exact nonempty.map f h },
612+
simp [(measurable_of_not_nonempty H (g ∘ f)).ae_measurable,
613+
(measurable_of_not_nonempty H f).ae_measurable] }
614+
end
615+
547616
section linear_order
548617

549618
variables [linear_order α] [order_topology α] [second_countable_topology α]
@@ -795,6 +864,10 @@ lemma measurable.edist {f g : β → α} (hf : measurable f) (hg : measurable g)
795864
measurable (λ b, edist (f b) (g b)) :=
796865
(@continuous_edist α _).measurable2 hf hg
797866

867+
lemma ae_measurable.edist {f g : β → α} {μ : measure β}
868+
(hf : ae_measurable f μ) (hg : ae_measurable g μ) : ae_measurable (λ a, edist (f a) (g a)) μ :=
869+
(@continuous_edist α _).ae_measurable2 hf hg
870+
798871
end emetric_space
799872

800873
namespace real
@@ -872,6 +945,10 @@ lemma measurable.ennreal_coe {f : α → ℝ≥0} (hf : measurable f) :
872945
measurable (λ x, (f x : ennreal)) :=
873946
ennreal.continuous_coe.measurable.comp hf
874947

948+
lemma ae_measurable.ennreal_coe {f : α → ℝ≥0} {μ : measure α} (hf : ae_measurable f μ) :
949+
ae_measurable (λ x, (f x : ennreal)) μ :=
950+
ennreal.continuous_coe.measurable.comp_ae_measurable hf
951+
875952
lemma measurable.ennreal_of_real {f : α → ℝ} (hf : measurable f) :
876953
measurable (λ x, ennreal.of_real (f x)) :=
877954
ennreal.continuous_of_real.measurable.comp hf
@@ -952,13 +1029,17 @@ lemma measurable.to_real {f : α → ennreal} (hf : measurable f) :
9521029
measurable (λ x, ennreal.to_real (f x)) :=
9531030
ennreal.measurable_to_real.comp hf
9541031

1032+
lemma ae_measurable.to_real {f : α → ennreal} {μ : measure α} (hf : ae_measurable f μ) :
1033+
ae_measurable (λ x, ennreal.to_real (f x)) μ :=
1034+
ennreal.measurable_to_real.comp_ae_measurable hf
1035+
9551036
lemma measurable.ennreal_mul {f g : α → ennreal} (hf : measurable f) (hg : measurable g) :
9561037
measurable (λ a, f a * g a) :=
9571038
ennreal.measurable_mul.comp (hf.prod_mk hg)
9581039

959-
lemma measurable.ennreal_add {f g : α → ennreal}
960-
(hf : measurable f) (hg : measurable g) : measurable (λ a, f a + g a) :=
961-
hf.add hg
1040+
lemma ae_measurable.ennreal_mul {f g : α → ennreal} {μ : measure α}
1041+
(hf : ae_measurable f μ) (hg : ae_measurable g μ) : ae_measurable (λ a, f a * g a) μ :=
1042+
ennreal.measurable_mul.comp_ae_measurable (hf.prod_mk hg)
9621043

9631044
lemma measurable.ennreal_sub {f g : α → ennreal} (hf : measurable f) (hg : measurable g) :
9641045
measurable (λ a, f a - g a) :=
@@ -979,19 +1060,31 @@ continuous_norm.measurable
9791060
lemma measurable.norm {f : β → α} (hf : measurable f) : measurable (λ a, norm (f a)) :=
9801061
measurable_norm.comp hf
9811062

1063+
lemma ae_measurable.norm {f : β → α} {μ : measure β} (hf : ae_measurable f μ) :
1064+
ae_measurable (λ a, norm (f a)) μ :=
1065+
measurable_norm.comp_ae_measurable hf
1066+
9821067
lemma measurable_nnnorm : measurable (nnnorm : α → ℝ≥0) :=
9831068
continuous_nnnorm.measurable
9841069

9851070
lemma measurable.nnnorm {f : β → α} (hf : measurable f) : measurable (λ a, nnnorm (f a)) :=
9861071
measurable_nnnorm.comp hf
9871072

1073+
lemma ae_measurable.nnnorm {f : β → α} {μ : measure β} (hf : ae_measurable f μ) :
1074+
ae_measurable (λ a, nnnorm (f a)) μ :=
1075+
measurable_nnnorm.comp_ae_measurable hf
1076+
9881077
lemma measurable_ennnorm : measurable (λ x : α, (nnnorm x : ennreal)) :=
9891078
measurable_nnnorm.ennreal_coe
9901079

9911080
lemma measurable.ennnorm {f : β → α} (hf : measurable f) :
9921081
measurable (λ a, (nnnorm (f a) : ennreal)) :=
9931082
hf.nnnorm.ennreal_coe
9941083

1084+
lemma ae_measurable.ennnorm {f : β → α} {μ : measure β} (hf : ae_measurable f μ) :
1085+
ae_measurable (λ a, (nnnorm (f a) : ennreal)) μ :=
1086+
measurable_ennnorm.comp_ae_measurable hf
1087+
9951088
end normed_group
9961089

9971090
section limits
@@ -1071,6 +1164,10 @@ lemma measurable_smul_const {f : α → 𝕜} {c : E} (hc : c ≠ 0) :
10711164
measurable (λ x, f x • c) ↔ measurable f :=
10721165
measurable_comp_iff_of_closed_embedding (λ y : 𝕜, y • c) (closed_embedding_smul_left hc)
10731166

1167+
lemma ae_measurable_smul_const {f : α → 𝕜} {μ : measure α} {c : E} (hc : c ≠ 0) :
1168+
ae_measurable (λ x, f x • c) μ ↔ ae_measurable f μ :=
1169+
ae_measurable_comp_iff_of_closed_embedding (λ y : 𝕜, y • c) (closed_embedding_smul_left hc)
1170+
10741171
end normed_space
10751172

10761173
namespace measure_theory

src/measure_theory/measurable_space.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,13 @@ hf.piecewise hs measurable_const
539539
@[to_additive]
540540
lemma measurable_one [has_one α] : measurable (1 : β → α) := @measurable_const _ _ _ _ 1
541541

542+
lemma measurable_of_not_nonempty (h : ¬ nonempty α) (f : α → β) : measurable f :=
543+
begin
544+
assume s hs,
545+
convert is_measurable.empty,
546+
exact eq_empty_of_not_nonempty h _,
547+
end
548+
542549
end measurable_functions
543550

544551
section constructions

0 commit comments

Comments
 (0)