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

Commit 6c3dda5

Browse files
committed
feat(measure_theory/measure/vector_measure): add absolute continuity for vector measures (#8779)
This PR defines absolute continuity for vector measures and shows that a signed measure is absolutely continuous wrt to a positive measure iff its total variation is absolutely continuous wrt to that measure.
1 parent 1dda1cd commit 6c3dda5

File tree

2 files changed

+162
-4
lines changed

2 files changed

+162
-4
lines changed

src/measure_theory/decomposition/jordan.lean

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,50 @@ begin
376376
simp [to_signed_measure_neg],
377377
end
378378

379+
/-- The total variation of a signed measure. -/
380+
def total_variation (s : signed_measure α) : measure α :=
381+
s.to_jordan_decomposition.pos_part + s.to_jordan_decomposition.neg_part
382+
383+
lemma total_variation_zero : (0 : signed_measure α).total_variation = 0 :=
384+
by simp [total_variation, to_jordan_decomposition_zero]
385+
386+
lemma total_variation_neg (s : signed_measure α) : (-s).total_variation = s.total_variation :=
387+
by simp [total_variation, to_jordan_decomposition_neg, add_comm]
388+
389+
lemma absolutely_continuous_iff (s : signed_measure α) (μ : vector_measure α ℝ≥0∞) :
390+
s ≪ μ ↔ s.total_variation ≪ μ.ennreal_to_measure :=
391+
begin
392+
split; intro h,
393+
{ refine measure.absolutely_continuous.mk (λ S hS₁ hS₂, _),
394+
obtain ⟨i, hi₁, hi₂, hi₃, hpos, hneg⟩ := s.to_jordan_decomposition_spec,
395+
rw [total_variation, measure.add_apply, hpos, hneg,
396+
to_measure_of_zero_le_apply _ _ _ hS₁, to_measure_of_le_zero_apply _ _ _ hS₁],
397+
rw ← vector_measure.absolutely_continuous.ennreal_to_measure at h,
398+
simp [h (measure_mono_null (i.inter_subset_right S) hS₂),
399+
h (measure_mono_null (iᶜ.inter_subset_right S) hS₂)],
400+
refl },
401+
{ refine vector_measure.absolutely_continuous.mk (λ S hS₁ hS₂, _),
402+
rw ← vector_measure.ennreal_to_measure_apply hS₁ at hS₂,
403+
have := h hS₂,
404+
rw [total_variation, measure.add_apply, add_eq_zero_iff] at this,
405+
rw [← s.to_signed_measure_to_jordan_decomposition, to_signed_measure,
406+
measure.to_signed_measure_sub_apply hS₁, this.1, this.2, ennreal.zero_to_real, sub_zero] }
407+
end
408+
409+
lemma total_variation_absolutely_continuous_iff (s : signed_measure α) (μ : measure α) :
410+
s.total_variation ≪ μ ↔
411+
s.to_jordan_decomposition.pos_part ≪ μ ∧ s.to_jordan_decomposition.neg_part ≪ μ :=
412+
begin
413+
split; intro h,
414+
{ split, all_goals
415+
{ refine measure.absolutely_continuous.mk (λ S hS₁ hS₂, _),
416+
have := h hS₂,
417+
rw [total_variation, measure.add_apply, add_eq_zero_iff] at this },
418+
exacts [this.1, this.2] },
419+
{ refine measure.absolutely_continuous.mk (λ S hS₁ hS₂, _),
420+
rw [total_variation, measure.add_apply, h.1 hS₂, h.2 hS₂, add_zero] }
421+
end
422+
379423
end signed_measure
380424

381425
end measure_theory

src/measure_theory/measure/vector_measure.lean

Lines changed: 118 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ open_locale classical big_operators nnreal ennreal
4545

4646
namespace measure_theory
4747

48-
variables {α β : Type*} [measurable_space α]
48+
variables {α β : Type*} {m : measurable_space α}
4949

5050
/-- A vector measure on a measurable space `α` is a σ-additive `M`-valued function (for some `M`
5151
an add monoid) such that the empty set and non-measurable sets are mapped to zero. -/
@@ -71,6 +71,8 @@ section
7171

7272
variables {M : Type*} [add_comm_monoid M] [topological_space M]
7373

74+
include m
75+
7476
instance : has_coe_to_fun (vector_measure α M) :=
7577
⟨λ _, set α → M, vector_measure.measure_of'⟩
7678

@@ -244,6 +246,8 @@ section add_comm_monoid
244246

245247
variables {M : Type*} [add_comm_monoid M] [topological_space M]
246248

249+
include m
250+
247251
instance : has_zero (vector_measure α M) :=
248252
⟨⟨0, rfl, λ _ _, rfl, λ _ _ _, has_sum_zero⟩⟩
249253

@@ -280,9 +284,9 @@ end add_comm_monoid
280284

281285
section add_comm_group
282286

283-
variables {M : Type*} [add_comm_group M] [topological_space M]
287+
variables {M : Type*} [add_comm_group M] [topological_space M] [topological_add_group M]
284288

285-
variables [topological_add_group M]
289+
include m
286290

287291
/-- The negative of a vector measure is a vector measure. -/
288292
def neg (v : vector_measure α M) : vector_measure α M :=
@@ -322,6 +326,8 @@ variables {M : Type*} [add_comm_monoid M] [topological_space M]
322326
variables {R : Type*} [semiring R] [distrib_mul_action R M]
323327
variables [topological_space R] [has_continuous_smul R M]
324328

329+
include m
330+
325331
/-- Given a real number `r` and a signed measure `s`, `smul r s` is the signed
326332
measure corresponding to the function `r • s`. -/
327333
def smul (r : R) (v : vector_measure α M) : vector_measure α M :=
@@ -347,6 +353,8 @@ variables {M : Type*} [add_comm_monoid M] [topological_space M]
347353
variables {R : Type*} [semiring R] [module R M]
348354
variables [topological_space R] [has_continuous_smul R M]
349355

356+
include m
357+
350358
instance [has_continuous_add M] : module R (vector_measure α M) :=
351359
function.injective.module R coe_fn_add_monoid_hom coe_injective coe_smul
352360

@@ -356,6 +364,8 @@ end vector_measure
356364

357365
namespace measure
358366

367+
include m
368+
359369
/-- A finite measure coerced into a real function is a signed measure. -/
360370
@[simps]
361371
def to_signed_measure (μ : measure α) [hμ : finite_measure μ] : signed_measure α :=
@@ -465,9 +475,34 @@ end measure
465475

466476
namespace vector_measure
467477

478+
open measure
479+
468480
section
469481

470-
variables [measurable_space β]
482+
/-- A vector measure over `ℝ≥0∞` is a measure. -/
483+
def ennreal_to_measure {m : measurable_space α} (v : vector_measure α ℝ≥0∞) : measure α :=
484+
of_measurable (λ s _, v s) v.empty (λ f hf₁ hf₂, v.of_disjoint_Union_nat hf₁ hf₂)
485+
486+
lemma ennreal_to_measure_apply {m : measurable_space α} {v : vector_measure α ℝ≥0∞}
487+
{s : set α} (hs : measurable_set s) : ennreal_to_measure v s = v s :=
488+
by rw [ennreal_to_measure, of_measurable_apply _ hs]
489+
490+
/-- The equiv between `vector_measure α ℝ≥0∞` and `measure α` formed by
491+
`measure_theory.vector_measure.ennreal_to_measure` and
492+
`measure_theory.measure.to_ennreal_vector_measure`. -/
493+
@[simps] def equiv_measure [measurable_space α] : vector_measure α ℝ≥0∞ ≃ measure α :=
494+
{ to_fun := ennreal_to_measure,
495+
inv_fun := to_ennreal_vector_measure,
496+
left_inv := λ _, ext (λ s hs,
497+
by rw [to_ennreal_vector_measure_apply_measurable hs, ennreal_to_measure_apply hs]),
498+
right_inv := λ _, measure.ext (λ s hs,
499+
by rw [ennreal_to_measure_apply hs, to_ennreal_vector_measure_apply_measurable hs]) }
500+
501+
end
502+
503+
section
504+
505+
variables [measurable_space α] [measurable_space β]
471506
variables {M : Type*} [add_comm_monoid M] [topological_space M]
472507
variables (v : vector_measure α M)
473508

@@ -486,6 +521,9 @@ if hf : measurable f then
486521
{ rw [preimage_Union, if_pos (measurable_set.Union hg₁)] }
487522
end } else 0
488523

524+
lemma map_not_measurable {f : α → β} (hf : ¬ measurable f) : v.map f = 0 :=
525+
dif_neg hf
526+
489527
lemma map_apply {f : α → β} (hf : measurable f) {s : set β} (hs : measurable_set s) :
490528
v.map f s = v (f ⁻¹' s) :=
491529
by { rw [map, dif_pos hf], exact if_pos hs }
@@ -588,6 +626,8 @@ variables {M : Type*} [add_comm_monoid M] [topological_space M]
588626
variables {R : Type*} [semiring R] [distrib_mul_action R M]
589627
variables [topological_space R] [has_continuous_smul R M]
590628

629+
include m
630+
591631
@[simp] lemma map_smul {v : vector_measure α M} {f : α → β} (c : R) :
592632
(c • v).map f = c • v.map f :=
593633
begin
@@ -619,6 +659,8 @@ variables {M : Type*} [add_comm_monoid M] [topological_space M]
619659
variables {R : Type*} [semiring R] [module R M]
620660
variables [topological_space R] [has_continuous_smul R M] [has_continuous_add M]
621661

662+
include m
663+
622664
/-- `vector_measure.map` as a linear map. -/
623665
@[simps] def mapₗ (f : α → β) : vector_measure α M →ₗ[R] vector_measure β M :=
624666
{ to_fun := λ v, v.map f,
@@ -637,6 +679,8 @@ section
637679

638680
variables {M : Type*} [topological_space M] [add_comm_monoid M] [partial_order M]
639681

682+
include m
683+
640684
/-- Vector measures over a partially ordered monoid is partially ordered.
641685
642686
This definition is consistent with `measure.partial_order`. -/
@@ -852,6 +896,8 @@ section
852896
variables {M : Type*} [topological_space M] [linear_ordered_add_comm_monoid M]
853897
variables (v w : vector_measure α M) {i j : set α}
854898

899+
include m
900+
855901
lemma exists_pos_measure_of_not_restrict_le_zero (hi : ¬ v ≤[i] 0) :
856902
∃ j : set α, measurable_set j ∧ j ⊆ i ∧ 0 < v j :=
857903
begin
@@ -869,12 +915,78 @@ section
869915
variables {M : Type*} [topological_space M] [add_comm_monoid M] [partial_order M]
870916
[covariant_class M M (+) (≤)] [has_continuous_add M]
871917

918+
include m
919+
872920
instance covariant_add_le :
873921
covariant_class (vector_measure α M) (vector_measure α M) (+) (≤) :=
874922
⟨λ u v w h i hi, add_le_add_left (h i hi) _⟩
875923

876924
end
877925

926+
section
927+
928+
variables {L M N : Type*}
929+
variables [add_comm_monoid L] [topological_space L] [add_comm_monoid M] [topological_space M]
930+
[add_comm_monoid N] [topological_space N]
931+
932+
include m
933+
934+
/-- A vector measure `v` is absolutely continuous with respect to a measure `μ` if for all sets
935+
`s`, `μ s = 0`, we have `v s = 0`. -/
936+
def absolutely_continuous (v : vector_measure α M) (w : vector_measure α N) :=
937+
∀ ⦃s : set α⦄, w s = 0 → v s = 0
938+
939+
infix ` ≪ `:50 := absolutely_continuous
940+
941+
namespace absolutely_continuous
942+
943+
variables {v : vector_measure α M} {w : vector_measure α N}
944+
945+
lemma mk (h : ∀ ⦃s : set α⦄, measurable_set s → w s = 0 → v s = 0) : v ≪ w :=
946+
begin
947+
intros s hs,
948+
by_cases hmeas : measurable_set s,
949+
{ exact h hmeas hs },
950+
{ exact not_measurable v hmeas }
951+
end
952+
953+
lemma eq {w : vector_measure α M} (h : v = w) : v ≪ w :=
954+
λ s hs, h.symm ▸ hs
955+
956+
@[refl] lemma refl (v : vector_measure α M) : v ≪ v :=
957+
eq rfl
958+
959+
@[trans] lemma trans {u : vector_measure α L} (huv : u ≪ v) (hvw : v ≪ w) : u ≪ w :=
960+
λ _ hs, huv $ hvw hs
961+
962+
lemma map [measure_space β] (h : v ≪ w) (f : α → β) :
963+
v.map f ≪ w.map f :=
964+
begin
965+
by_cases hf : measurable f,
966+
{ refine mk (λ s hs hws, _),
967+
rw map_apply _ hf hs at hws ⊢,
968+
exact h hws },
969+
{ intros s hs,
970+
rw [map_not_measurable v hf, zero_apply] }
971+
end
972+
973+
lemma ennreal_to_measure {μ : vector_measure α ℝ≥0∞} :
974+
(∀ ⦃s : set α⦄, μ.ennreal_to_measure s = 0 → v s = 0) ↔ v ≪ μ :=
975+
begin
976+
split; intro h,
977+
{ refine mk (λ s hmeas hs, h _),
978+
rw [← hs, ennreal_to_measure_apply hmeas] },
979+
{ intros s hs,
980+
by_cases hmeas : measurable_set s,
981+
{ rw ennreal_to_measure_apply hmeas at hs,
982+
exact h hs },
983+
{ exact not_measurable v hmeas } },
984+
end
985+
986+
end absolutely_continuous
987+
988+
end
989+
878990
end vector_measure
879991

880992
namespace signed_measure
@@ -883,6 +995,8 @@ open vector_measure
883995

884996
open_locale measure_theory
885997

998+
include m
999+
8861000
/-- The underlying function for `signed_measure.to_measure_of_zero_le`. -/
8871001
def to_measure_of_zero_le' (s : signed_measure α) (i : set α) (hi : 0 ≤[i] s)
8881002
(j : set α) (hj : measurable_set j) : ℝ≥0∞ :=

0 commit comments

Comments
 (0)