Skip to content

Commit ae5d850

Browse files
affeldt-aistzstone1
andcommitted
lebesgue inner regularity lemma
Co-authored-by: zstone <zstonex@gmail.com>
1 parent 863e968 commit ae5d850

File tree

4 files changed

+113
-10
lines changed

4 files changed

+113
-10
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@
44

55
### Added
66

7+
- in `classical_sets.v`:
8+
+ lemma `setU_id2r`
9+
- in `lebesgue_measure.v`:
10+
+ lemma `compact_measurable`
11+
12+
- in `measure.v`:
13+
+ lemmas `outer_measure_subadditive`, `outer_measureU2`
14+
15+
- in `lebesgue_measure.v`:
16+
+ declare `lebesgue_measure` as a `SigmaFinite` instance
17+
+ lemma `lebesgue_regularity_inner_sup`
18+
719
### Changed
820

921
- in `constructive_ereal.v`:

classical/classical_sets.v

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,14 @@ Proof. by rewrite setUA !(setUAC _ C) -(setUA _ C) setUid. Qed.
650650
Lemma setUUr A B C : A `|` (B `|` C) = (A `|` B) `|` (A `|` C).
651651
Proof. by rewrite !(setUC A) setUUl. Qed.
652652

653+
Lemma setU_id2r C A B :
654+
(forall x, (~` B) x -> A x = C x) -> (A `|` B) = (C `|` B).
655+
Proof.
656+
move=> h; apply/seteqP; split => [x [Ax|Bx]|x [Cx|Bx]]; [|by right| |by right].
657+
- by have [|/h {}h] := pselect (B x); [by right|left; rewrite -h].
658+
- by have [|/h {}h] := pselect (B x); [by right|left; rewrite h].
659+
Qed.
660+
653661
Lemma setDE A B : A `\` B = A `&` ~` B. Proof. by []. Qed.
654662

655663
Lemma setDUK A B : A `<=` B -> A `|` (B `\` A) = B.
@@ -1028,6 +1036,7 @@ Hint Resolve subsetUl subsetUr subIsetl subIsetr subDsetl subDsetr : core.
10281036
Notation setvI := setICl.
10291037
#[deprecated(since="mathcomp-analysis 0.6", note="Use setICr instead.")]
10301038
Notation setIv := setICr.
1039+
Arguments setU_id2r {T} C {A B}.
10311040

10321041
Section set_order.
10331042
Import Order.TTheory.

theories/lebesgue_measure.v

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,12 @@ Qed.
387387
Definition lebesgue_measure := measure_extension [the measure _ _ of hlength].
388388
HB.instance Definition _ := Measure.on lebesgue_measure.
389389

390+
Let sigmaT_finite_lebesgue_measure : sigma_finite setT lebesgue_measure.
391+
Proof. exact/measure_extension_sigma_finite/hlength_sigma_finite. Qed.
392+
393+
HB.instance Definition _ := @isSigmaFinite.Build _ _ _
394+
lebesgue_measure sigmaT_finite_lebesgue_measure.
395+
390396
End itv_semiRingOfSets.
391397
Arguments hlength {R}.
392398
#[global] Hint Extern 0 (0%:E <= hlength _) => solve[apply: hlength_ge0] : core.
@@ -1424,17 +1430,19 @@ by apply: measurableI => //; exact: open_measurable.
14241430
Qed.
14251431

14261432
Lemma closed_measurable (U : set R) : closed U -> measurable U.
1433+
Proof. by move/closed_openC/open_measurable/measurableC; rewrite setCK. Qed.
1434+
1435+
Lemma compact_measurable (A : set R) : compact A -> measurable A.
14271436
Proof.
1428-
move/closed_openC=> ?; rewrite -[U]setCK; apply: measurableC.
1429-
exact: open_measurable.
1437+
by move/compact_closed => /(_ (@Rhausdorff R)); exact: closed_measurable.
14301438
Qed.
14311439

14321440
Lemma subspace_continuous_measurable_fun (D : set R) (f : subspace D -> R) :
14331441
measurable D -> continuous f -> measurable_fun D f.
14341442
Proof.
14351443
move=> mD /continuousP cf; apply: (measurability (RGenOpens.measurableE R)).
14361444
move=> _ [_ [a [b ->] <-]]; apply: open_measurable_subspace => //.
1437-
by exact/cf/interval_open.
1445+
exact/cf/interval_open.
14381446
Qed.
14391447

14401448
Corollary open_continuous_measurable_fun (D : set R) (f : R -> R) :
@@ -1975,9 +1983,9 @@ wlog : eps epspos D mD finD / exists ab : R * R, D `<=` `[ab.1, ab.2]%classic.
19751983
by apply: compact_closed => //; exact: Rhausdorff.
19761984
exact: interval_closed.
19771985
- by move=> ? [/VDab []].
1978-
have -> : D `\` (V `&` `[a, b]) = (D `&` `[a, b]) `\` V `|` D `\` `[a, b].
1979-
by rewrite setDIr eqEsubset; split => z /=; case: (z \in `[a, b]);
1980-
(try tauto); try (by case; case; left); try (by case; case; right).
1986+
rewrite setDIr (setU_id2r ((D `&` `[a, b]) `\` V)); last first.
1987+
move=> z ; rewrite setDE setCI setCK => -[?|?];
1988+
by apply/propext; split => [[]|[[]]].
19811989
have mV : measurable V.
19821990
by apply: closed_measurable; apply: compact_closed => //; exact: Rhausdorff.
19831991
rewrite [eps]splitr EFinD (measureU mu) // ?lte_add //.
@@ -1999,10 +2007,53 @@ exists (`[a, b] `&` ~` U); split.
19992007
rewrite [_ `&` ~` _ ](iffRL (disjoints_subset _ _)) ?setCK // set0U.
20002008
move: mDeps; rewrite /D' ?setDE setCI setIUr setCK [U `&` D]setIC.
20012009
move => /(le_lt_trans _); apply; apply: le_measure; last by move => ?; right.
2002-
by rewrite inE; apply: measurableI => //; apply: open_measurable.
2010+
by rewrite inE; apply: measurableI => //; exact: open_measurable.
20032011
rewrite inE; apply: measurableU.
2004-
by (apply: measurableI; first exact: open_measurable); exact: measurableC.
2005-
by apply: measurableI => //; apply: open_measurable.
2012+
by apply: measurableI; [exact: open_measurable|exact: measurableC].
2013+
by apply: measurableI => //; exact: open_measurable.
2014+
Qed.
2015+
2016+
Let lebesgue_regularity_innerE_bounded (A : set R) : measurable A ->
2017+
mu A < +oo ->
2018+
mu A = ereal_sup [set mu K | K in [set K | compact K /\ K `<=` A]].
2019+
Proof.
2020+
move=> mA muA; apply/eqP; rewrite eq_le; apply/andP; split; last first.
2021+
by apply: ub_ereal_sup => /= x [B /= [cB BA <-{x}]]; exact: le_outer_measure.
2022+
apply/lee_addgt0Pr => e e0.
2023+
have [B [cB BA /= ABe]] := lebesgue_regularity_inner mA muA e0.
2024+
rewrite -{1}(setDKU BA) (@le_trans _ _ (mu B + mu (A `\` B)))//.
2025+
by rewrite setUC outer_measureU2.
2026+
by rewrite lee_add//; [apply: ereal_sup_ub => /=; exists B|exact/ltW].
2027+
Qed.
2028+
2029+
Lemma lebesgue_regularity_inner_sup (D : set R) (eps : R) : measurable D ->
2030+
mu D = ereal_sup [set mu K | K in [set K | compact K /\ K `<=` D]].
2031+
Proof.
2032+
move=> mD; have [?|] := ltP (mu D) +oo.
2033+
exact: lebesgue_regularity_innerE_bounded.
2034+
have /sigma_finiteP [/= F RFU [Fsub ffin]] := sigma_finiteT mu.
2035+
rewrite leye_eq => /eqP /[dup] + ->.
2036+
have {1}-> : D = \bigcup_n (F n `&` D) by rewrite -setI_bigcupl -RFU setTI.
2037+
move=> FDp; apply/esym/eq_infty => M.
2038+
have : (fun n => mu (F n `&` D)) @ \oo --> +oo.
2039+
rewrite -FDp; apply: nondecreasing_cvg_mu.
2040+
- by move=> i; apply: measurableI => //; exact: (ffin i).1.
2041+
- by apply: bigcup_measurable => i _; exact: (measurableI _ _ (ffin i).1).
2042+
- by move=> n m nm; apply/subsetPset; apply: setSI; exact/subsetPset/Fsub.
2043+
move/cvgey_ge => /(_ (M + 1)%R) [N _ /(_ _ (lexx N))].
2044+
have [mFN FNoo] := ffin N.
2045+
have [] := @lebesgue_regularity_inner (F N `&` D) _ _ _ ltr01.
2046+
- exact: measurableI.
2047+
- by rewrite (le_lt_trans _ (ffin N).2)// measureIl.
2048+
move=> V [/[dup] /compact_measurable mV cptV VFND] FDV1 M1FD.
2049+
rewrite (@le_trans _ _ (mu V))//; last first.
2050+
apply: ereal_sup_ub; exists V => //=; split => //.
2051+
exact: (subset_trans VFND (@subIsetr _ _ _)).
2052+
rewrite -(@lee_add2lE _ 1)// {1}addeC -EFinD (le_trans M1FD)//.
2053+
rewrite /mu (@measureDI _ _ _ _ (F N `&` D) _ _ mV)/=; last exact: measurableI.
2054+
rewrite ltW// lte_le_add // ?ge0_fin_numE //; last first.
2055+
by rewrite measureIr//; apply: measurableI.
2056+
by rewrite -setIA (le_lt_trans _ (ffin N).2)// measureIl//; exact: measurableI.
20062057
Qed.
20072058

20082059
End lebesgue_regularity.

theories/measure.v

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3308,6 +3308,37 @@ Arguments outer_measure_ge0 {R T} _.
33083308
Arguments le_outer_measure {R T} _.
33093309
Arguments outer_measure_sigma_subadditive {R T} _.
33103310

3311+
Section outer_measureU.
3312+
Context d (T : semiRingOfSetsType d) (R : realType).
3313+
Variable mu : {outer_measure set T -> \bar R}.
3314+
Local Open Scope ereal_scope.
3315+
3316+
Lemma outer_measure_subadditive (F : nat -> set T) n :
3317+
mu (\big[setU/set0]_(i < n) F i) <= \sum_(i < n) mu (F i).
3318+
Proof.
3319+
pose F' := fun k => if (k < n)%N then F k else set0.
3320+
rewrite -(big_mkord xpredT F) big_nat (eq_bigr F')//; last first.
3321+
by move=> k /= kn; rewrite /F' kn.
3322+
rewrite -big_nat big_mkord.
3323+
have := outer_measure_sigma_subadditive mu F'.
3324+
rewrite (bigcup_splitn n) (_ : bigcup _ _ = set0) ?setU0; last first.
3325+
by rewrite bigcup0 // => k _; rewrite /F' /= ltnNge leq_addr.
3326+
move/le_trans; apply.
3327+
rewrite (nneseries_split n); last by move=> ?; exact: outer_measure_ge0.
3328+
rewrite [X in _ + X](_ : _ = 0) ?adde0//; last first.
3329+
rewrite eseries_cond/= eseries_mkcond eseries0//.
3330+
by move=> k _; case: ifPn => //; rewrite /F' leqNgt => /negbTE ->.
3331+
by apply: lee_sum => i _; rewrite /F' ltn_ord.
3332+
Qed.
3333+
3334+
Lemma outer_measureU2 A B : mu (A `|` B) <= mu A + mu B.
3335+
Proof.
3336+
have := outer_measure_subadditive (bigcup2 A B) 2.
3337+
by rewrite !big_ord_recl/= !big_ord0 setU0 adde0.
3338+
Qed.
3339+
3340+
End outer_measureU.
3341+
33113342
Lemma le_outer_measureIC (R : realFieldType) T
33123343
(mu : {outer_measure set T -> \bar R}) (A X : set T) :
33133344
mu X <= mu (X `&` A) + mu (X `&` ~` A).
@@ -3532,7 +3563,7 @@ Notation "mu .-cara.-measurable" :=
35323563

35333564
Section caratheodory_measure.
35343565
Variables (R : realType) (T : pointedType).
3535-
Variable (mu : {outer_measure set T -> \bar R}).
3566+
Variable mu : {outer_measure set T -> \bar R}.
35363567
Let U := caratheodory_type mu.
35373568

35383569
Lemma caratheodory_measure0 : mu (set0 : set U) = 0.

0 commit comments

Comments
 (0)