Skip to content

Commit 7602bb7

Browse files
define null set and fix the definition of domination of measure/charge (#1760)
* add def of null_set * null_dominates --------- Co-authored-by: Reynald Affeldt <[email protected]>
1 parent 5e727ce commit 7602bb7

File tree

5 files changed

+222
-69
lines changed

5 files changed

+222
-69
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,20 @@
1212

1313
- in `normed_module.v`:
1414
+ lemma `limit_point_infinite_setP`
15+
- in `measure_negligible.v`:
16+
+ definition `null_set` with notation `_.-null_set`
17+
+ lemma `subset_null_set`
18+
+ lemma `negligible_null_set`
19+
+ lemma `measure0_null_setP`
20+
+ lemma `null_setU`
21+
+ definition `null_dominates`
22+
+ lemma `null_dominates_trans`
23+
+ lemma `null_content_dominatesP`
24+
25+
- in `charge.v`:
26+
+ definition `charge_dominates`
27+
+ lemma `charge_null_dominatesP`
28+
+ lemma `content_charge_dominatesP`
1529

1630
- in `sequences.v`:
1731
+ lemma `increasing_seq_injective`
@@ -22,10 +36,24 @@
2236

2337
### Changed
2438

39+
- in `charge.v`:
40+
+ `dominates_cscalel` specialized from
41+
`set _ -> \bar _` to `{measure set _ -> \bar _}`
42+
43+
- in `measurable_structure.v`:
44+
+ the notation ``` `<< ``` is now for `null_set_dominates`,
45+
the previous definition can be recovered with the lemma
46+
`null_dominatesP`
47+
2548
### Renamed
2649

2750
- in `probability.v`:
2851
+ `derivable_oo_continuous_bnd_onemXnMr` -> `derivable_oo_LRcontinuous_onemXnMr`
52+
- in `measure_negligible.v`:
53+
+ `measure_dominates_ae_eq` -> `null_dominates_ae_eq`
54+
55+
- in `charge.v`:
56+
+ `induced` -> `induced_charge`
2957

3058
### Generalized
3159

@@ -68,6 +96,12 @@
6896
- in `sequences.v`:
6997
+ notation `eq_bigsetU_seqD`
7098
(deprecated since 1.2.0)
99+
- in `measurable_structure.v`:
100+
+ definition `measure_dominates` (use `null_set_dominates` instead)
101+
+ lemma `measure_dominates_trans`
102+
103+
- in `charge.v`:
104+
+ lemma `dominates_charge_variation` (use `charge_null_dominatesP` instead)
71105

72106
### Infrastructure
73107

theories/charge.v

Lines changed: 83 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ From mathcomp Require Import lebesgue_measure lebesgue_integral.
6565
(* decomposition nuPN: hahn_decomposition nu P N *)
6666
(* charge_variation nuPN == variation of the charge nu *)
6767
(* := jordan_pos nuPN \+ jordan_neg nuPN *)
68-
(* induced intf == charge induced by a function f : T -> \bar R *)
68+
(* charge_dominates mu nuPN := content_dominates mu (charge_variation nuPN) *)
69+
(* induced_charge intf == charge induced by a function f : T -> \bar R *)
6970
(* R has type realType; T is a measurableType. *)
7071
(* intf is a proof that f is integrable over *)
7172
(* [set: T] *)
@@ -429,24 +430,27 @@ HB.instance Definition _ := isCharge.Build _ _ _ cscale
429430
End charge_scale.
430431

431432
Lemma dominates_cscalel d (T : measurableType d) (R : realType)
432-
(mu : set T -> \bar R)
433+
(mu : {measure set T -> \bar R})
433434
(nu : {charge set T -> \bar R})
434435
(c : R) : nu `<< mu -> cscale c nu `<< mu.
435-
Proof. by move=> numu E mE /numu; rewrite /cscale => ->//; rewrite mule0. Qed.
436+
Proof.
437+
move=> /null_content_dominatesP numu; apply/null_content_dominatesP => E mE.
438+
by move/(numu _ mE) => E0; apply/eqP; rewrite mule_eq0 eqe E0/= eqxx orbT.
439+
Qed.
436440

437441
Lemma dominates_cscaler d (T : measurableType d) (R : realType)
438442
(nu : {charge set T -> \bar R})
439443
(mu : set T -> \bar R)
440444
(c : R) : c != 0%R -> mu `<< nu -> mu `<< cscale c nu.
441445
Proof.
442-
move=> /negbTE c0 munu E mE /eqP; rewrite /cscale mule_eq0 eqe c0/=.
443-
by move=> /eqP/munu; exact.
446+
move=> /negbTE c0 /null_dominates_trans; apply => E nE A mA AE.
447+
by have /eqP := nE A mA AE; rewrite mule_eq0 eqe c0/= => /eqP.
444448
Qed.
445449

446450
Section charge_opp.
447451
Local Open Scope ereal_scope.
448452
Context d (T : measurableType d) (R : realType).
449-
Variables (nu : {charge set T -> \bar R}).
453+
Variable nu : {charge set T -> \bar R}.
450454

451455
Definition copp := \- nu.
452456

@@ -513,7 +517,9 @@ Lemma dominates_cadd d (T : measurableType d) (R : realType)
513517
nu0 `<< mu -> nu1 `<< mu ->
514518
cadd nu0 nu1 `<< mu.
515519
Proof.
516-
by move=> nu0mu nu1mu A mA A0; rewrite /cadd nu0mu// nu1mu// adde0.
520+
move=> /null_content_dominatesP nu0mu.
521+
move=> /null_content_dominatesP nu1mu A nA A0 mA0 A0A.
522+
by have muA0 := nA _ mA0 A0A; rewrite /cadd nu0mu// nu1mu// adde0.
517523
Qed.
518524

519525
Section pushforward_charge.
@@ -558,18 +564,15 @@ HB.instance Definition _ := isCharge.Build _ _ _
558564

559565
HB.end.
560566

561-
Section dominates_pushforward.
562-
563567
Lemma dominates_pushforward d d' (T : measurableType d) (T' : measurableType d')
564568
(R : realType) (mu : {measure set T -> \bar R})
565569
(nu : {charge set T -> \bar R}) (f : T -> T') (mf : measurable_fun setT f) :
566570
nu `<< mu -> pushforward nu f `<< pushforward mu f.
567571
Proof.
568-
by move=> numu A mA; apply: numu; rewrite -[X in measurable X]setTI; exact: mf.
572+
move=> /null_content_dominatesP numu; apply/null_content_dominatesP => A mA.
573+
by apply: numu; rewrite -[X in measurable X]setTI; exact: mf.
569574
Qed.
570575

571-
End dominates_pushforward.
572-
573576
Section positive_negative_set.
574577
Context d (T : semiRingOfSetsType d) (R : numDomainType).
575578
Implicit Types nu : set T -> \bar R.
@@ -1016,7 +1019,9 @@ Qed.
10161019
Lemma jordan_pos_dominates (mu : {measure set T -> \bar R}) :
10171020
nu `<< mu -> jordan_pos `<< mu.
10181021
Proof.
1019-
move=> nu_mu A mA muA0; have := nu_mu A mA muA0.
1022+
move=> /null_content_dominatesP nu_mu.
1023+
apply/null_content_dominatesP => A mA muA0.
1024+
have := nu_mu A mA muA0.
10201025
rewrite jordan_posE// cjordan_posE /crestr0 mem_set// /crestr/=.
10211026
have mAP : measurable (A `&` P) by exact: measurableI.
10221027
suff : mu (A `&` P) = 0 by move/(nu_mu _ mAP) => ->.
@@ -1026,7 +1031,9 @@ Qed.
10261031
Lemma jordan_neg_dominates (mu : {measure set T -> \bar R}) :
10271032
nu `<< mu -> jordan_neg `<< mu.
10281033
Proof.
1029-
move=> nu_mu A mA muA0; have := nu_mu A mA muA0.
1034+
move=> /null_content_dominatesP nu_mu.
1035+
apply/null_content_dominatesP => A mA muA0.
1036+
have := nu_mu A mA muA0.
10301037
rewrite jordan_negE// cjordan_negE /crestr0 mem_set// /crestr/=.
10311038
have mAN : measurable (A `&` N) by exact: measurableI.
10321039
suff : mu (A `&` N) = 0 by move=> /(nu_mu _ mAN) ->; rewrite oppe0.
@@ -1075,35 +1082,64 @@ HB.instance Definition _ := isCharge.Build _ _ _ mu
10751082

10761083
End charge_variation.
10771084

1078-
Lemma abse_charge_variation d (T : measurableType d) (R : realType)
1079-
(nu : {charge set T -> \bar R}) P N (PN : hahn_decomposition nu P N) A :
1080-
measurable A -> `|nu A| <= charge_variation PN A.
1081-
Proof.
1082-
move=> mA.
1083-
rewrite (jordan_decomp PN mA) /cadd/= cscaleN1 /charge_variation.
1084-
by rewrite (le_trans (lee_abs_sub _ _))// !gee0_abs.
1085-
Qed.
1085+
Definition charge_dominates d (T : measurableType d) {R : realType}
1086+
(mu : {content set T -> \bar R}) (nu : {charge set T -> \bar R})
1087+
(P N : set T) (nuPN : hahn_decomposition nu P N) :=
1088+
content_dominates mu (charge_variation nuPN).
10861089

10871090
Section charge_variation_continuous.
10881091
Local Open Scope ereal_scope.
1089-
Context {R : realType} d (T : measurableType d).
1092+
Context d (T : measurableType d) {R : realType}.
10901093
Variable nu : {charge set T -> \bar R}.
10911094
Variables (P N : set T) (nuPN : hahn_decomposition nu P N).
10921095

1093-
Lemma dominates_charge_variation (mu : {measure set T -> \bar R}) :
1096+
Lemma abse_charge_variation A :
1097+
measurable A -> `|nu A| <= charge_variation nuPN A.
1098+
Proof.
1099+
move=> mA.
1100+
rewrite (jordan_decomp nuPN mA) /cadd/= cscaleN1 /charge_variation.
1101+
by rewrite (le_trans (lee_abs_sub _ _))// !gee0_abs.
1102+
Qed.
1103+
1104+
Lemma __deprecated__dominates_charge_variation (mu : {measure set T -> \bar R}) :
10941105
nu `<< mu -> charge_variation nuPN `<< mu.
10951106
Proof.
1096-
move=> numu A mA muA0.
1097-
rewrite /charge_variation/= (jordan_pos_dominates nuPN numu)// add0e.
1098-
by rewrite (jordan_neg_dominates nuPN numu).
1107+
move=> /[dup]numu /null_content_dominatesP nu0mu0.
1108+
apply/null_content_dominatesP => A mA muA0; rewrite /charge_variation/=.
1109+
have /null_content_dominatesP ->// := jordan_pos_dominates nuPN numu.
1110+
rewrite add0e.
1111+
by have /null_content_dominatesP -> := jordan_neg_dominates nuPN numu.
1112+
Qed.
1113+
1114+
Lemma null_charge_dominatesP (mu : {measure set T -> \bar R}) :
1115+
nu `<< mu <-> charge_dominates mu nuPN.
1116+
Proof.
1117+
split => [|numu].
1118+
- move=> /[dup]numu /null_content_dominatesP nu0mu0.
1119+
move=> A mA muA0; rewrite /charge_variation/=.
1120+
have /null_content_dominatesP ->// := jordan_pos_dominates nuPN numu.
1121+
rewrite add0e.
1122+
by have /null_content_dominatesP -> := jordan_neg_dominates nuPN numu.
1123+
- apply/null_content_dominatesP => A mA /numu => /(_ mA) nuA0.
1124+
apply/eqP; rewrite -abse_eq0 eq_le abse_ge0 andbT.
1125+
by rewrite -nuA0 abse_charge_variation.
1126+
Qed.
1127+
1128+
Lemma content_charge_dominatesP (mu : {measure set T -> \bar R}) :
1129+
content_dominates mu nu <-> charge_dominates mu nuPN.
1130+
Proof.
1131+
split.
1132+
- by move/null_content_dominatesP/null_charge_dominatesP.
1133+
- by move/null_charge_dominatesP/null_content_dominatesP.
10991134
Qed.
11001135

11011136
Lemma charge_variation_continuous (mu : {measure set T -> \bar R}) :
11021137
nu `<< mu -> forall e : R, (0 < e)%R ->
11031138
exists d : R, (0 < d)%R /\
11041139
forall A, measurable A -> mu A < d%:E -> charge_variation nuPN A < e%:E.
11051140
Proof.
1106-
move=> numu; apply/not_forallP => -[e] /not_implyP[e0] /forallNP H.
1141+
move=> /[dup]nudommu /null_content_dominatesP numu.
1142+
apply/not_forallP => -[e] /not_implyP[e0] /forallNP H.
11071143
have {H} : forall n, exists A,
11081144
[/\ measurable A, mu A < (2 ^- n.+1)%:E & charge_variation nuPN A >= e%:E].
11091145
move=> n; have /not_andP[|] := H (2 ^- n.+1); first by rewrite invr_gt0.
@@ -1129,7 +1165,7 @@ have : mu (lim_sup_set F) = 0.
11291165
by move/cvg_lim : h => ->//; rewrite ltry.
11301166
have : measurable (lim_sup_set F).
11311167
by apply: bigcap_measurable => // k _; exact: bigcup_measurable.
1132-
move=> /(dominates_charge_variation numu) /[apply].
1168+
move/null_charge_dominatesP : nudommu => /[apply] /[apply].
11331169
apply/eqP; rewrite neq_lt// ltNge measure_ge0//=.
11341170
suff : charge_variation nuPN (lim_sup_set F) >= e%:E by exact: lt_le_trans.
11351171
have echarge n : e%:E <= charge_variation nuPN (\bigcup_(j >= n) F j).
@@ -1147,12 +1183,17 @@ by rewrite -ge0_fin_numE// fin_num_measure//; exact: bigcup_measurable.
11471183
Qed.
11481184

11491185
End charge_variation_continuous.
1186+
#[deprecated(since="mathcomp-analysis 1.15.0", note="use `charge_null_dominatesP` instead")]
1187+
Notation dominates_charge_variation := __deprecated__dominates_charge_variation (only parsing).
11501188

1151-
Definition induced d (T : measurableType d) {R : realType}
1189+
Definition induced_charge d (T : measurableType d) {R : realType}
11521190
(mu : {measure set T -> \bar R}) (f : T -> \bar R)
11531191
(intf : mu.-integrable [set: T] f) :=
11541192
fun A => (\int[mu]_(t in A) f t)%E.
11551193

1194+
#[deprecated(since="mathcomp-analysis 1.15.0", note="renamed to `induced_charge`")]
1195+
Notation induced := induced_charge (only parsing).
1196+
11561197
Section induced_charge.
11571198
Context d (T : measurableType d) {R : realType} (mu : {measure set T -> \bar R}).
11581199
Local Open Scope ereal_scope.
@@ -1169,7 +1210,7 @@ Qed.
11691210
Variable f : T -> \bar R.
11701211
Hypothesis intf : mu.-integrable setT f.
11711212

1172-
Local Notation nu := (induced intf).
1213+
Local Notation nu := (induced_charge intf).
11731214

11741215
Let nu0 : nu set0 = 0. Proof. by rewrite /nu integral_set0. Qed.
11751216

@@ -1211,10 +1252,10 @@ Hypothesis intf : mu.-integrable setT f.
12111252
Let intnf : mu.-integrable [set: T] (abse \o f).
12121253
Proof. exact: integrable_abse. Qed.
12131254

1214-
Lemma dominates_induced : induced intnf `<< mu.
1255+
Lemma dominates_induced : induced_charge intnf `<< mu.
12151256
Proof.
1216-
move=> /= A mA muA.
1217-
rewrite /induced; apply/eqP; rewrite -abse_eq0 eq_le abse_ge0 andbT.
1257+
apply/null_content_dominatesP => /= A mA muA.
1258+
rewrite /induced_charge; apply/eqP; rewrite -abse_eq0 eq_le abse_ge0 andbT.
12181259
rewrite (le_trans (le_abse_integral _ _ _))//=.
12191260
by case/integrableP : intnf => /= + _; exact: measurable_funTS.
12201261
rewrite le_eqVlt; apply/orP; left; apply/eqP.
@@ -1238,7 +1279,7 @@ Lemma integral_normr_continuous (e : R) : (0 < e)%R ->
12381279
exists d : R, (0 < d)%R /\
12391280
forall A, measurable A -> mu A < d%:E -> (\int[mu]_(x in A) `|f x| < e)%R.
12401281
Proof.
1241-
move=> e0; have [P [N pn]] := Hahn_decomposition (induced intnf).
1282+
move=> e0; have [P [N pn]] := Hahn_decomposition (induced_charge intnf).
12421283
have [r [r0 re]] := charge_variation_continuous pn (dominates_induced intf) e0.
12431284
exists r; split => //= A mA Ad.
12441285
have {re} := re _ mA Ad.
@@ -1721,6 +1762,7 @@ pose AP := A `&` P.
17211762
have mAP : measurable AP by exact: measurableI.
17221763
have muAP_gt0 : 0 < mu AP.
17231764
rewrite lt0e measure_ge0// andbT.
1765+
move/null_content_dominatesP in nu_mu.
17241766
apply/eqP/(contra_not (nu_mu _ mAP))/eqP; rewrite gt_eqF//.
17251767
rewrite (@lt_le_trans _ _ (sigma AP))//.
17261768
rewrite (@lt_le_trans _ _ (sigma A))//; last first.
@@ -1815,7 +1857,9 @@ pose mu_ j : {finite_measure set T -> \bar R} := mfrestr (mE j) (muEoo j).
18151857
have nuEoo i : nu (E i) < +oo by rewrite ltey_eq fin_num_measure.
18161858
pose nu_ j : {finite_measure set T -> \bar R} := mfrestr (mE j) (nuEoo j).
18171859
have nu_mu_ k : nu_ k `<< mu_ k.
1818-
by move=> S mS mu_kS0; apply: nu_mu => //; exact: measurableI.
1860+
apply/null_content_dominatesP => S mS mu_kS0.
1861+
move/null_content_dominatesP : nu_mu; apply => //.
1862+
exact: measurableI.
18191863
have [g_] := choice (fun j => radon_nikodym_finite (nu_mu_ j)).
18201864
move=> /all_and3[g_ge0 ig_ int_gE].
18211865
pose f_ j x := if x \in E j then g_ j x else 0.
@@ -2038,11 +2082,11 @@ have mf : measurable_fun E ('d nu '/d mu).
20382082
exact/measurable_funTS/(measurable_int _ (f_integrable _)).
20392083
apply: integral_ae_eq => //.
20402084
- apply: (integrableS measurableT) => //; apply: f_integrable.
2041-
exact: measure_dominates_trans numu mula.
2085+
exact: null_dominates_trans numu mula.
20422086
- apply: emeasurable_funM => //.
20432087
exact/measurable_funTS/(measurable_int _ (f_integrable _)).
20442088
- move=> A AE mA; rewrite change_of_variables//.
2045-
+ by rewrite -!f_integral//; exact: measure_dominates_trans numu mula.
2089+
+ by rewrite -!f_integral//; exact: null_dominates_trans numu mula.
20462090
+ exact: f_ge0.
20472091
+ exact: measurable_funS mf.
20482092
Qed.
@@ -2204,7 +2248,7 @@ Lemma Radon_Nikodym_chain_rule : nu `<< mu -> mu `<< la ->
22042248
('d nu '/d mu \* 'd (charge_of_finite_measure mu) '/d la).
22052249
Proof.
22062250
have [Pnu [Nnu nuPN]] := Hahn_decomposition nu.
2207-
move=> numu mula; have nula := measure_dominates_trans numu mula.
2251+
move=> numu mula; have nula := null_dominates_trans numu mula.
22082252
apply: integral_ae_eq; [exact: measurableT| |exact: emeasurable_funM|].
22092253
- exact: Radon_Nikodym_integrable.
22102254
- move=> E _ mE.

theories/measure_theory/measurable_structure.v

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,6 @@ From mathcomp Require Import ereal topology normedtype sequences.
114114
(* and the tnth projections. *)
115115
(* ``` *)
116116
(* *)
117-
(* ## More measure-theoretic definitions *)
118-
(* *)
119-
(* ``` *)
120-
(* m1 `<< m2 == m1 is absolutely continuous w.r.t. m2 or m2 dominates m1 *)
121-
(* ``` *)
122-
(* *)
123117
(******************************************************************************)
124118

125119
Set Implicit Arguments.
@@ -144,7 +138,6 @@ Reserved Notation "'<<sr' G '>>'" (format "'<<sr' G '>>'").
144138
Reserved Notation "'<<M' G '>>'" (format "'<<M' G '>>'").
145139
Reserved Notation "p .-prod" (format "p .-prod").
146140
Reserved Notation "p .-prod.-measurable" (format "p .-prod.-measurable").
147-
Reserved Notation "m1 `<< m2" (at level 51).
148141

149142
Inductive measure_display := default_measure_display.
150143
Declare Scope measure_display_scope.
@@ -1659,18 +1652,3 @@ HB.instance Definition _ := @isMeasurable.Build (measure_tuple_display d)
16591652
(n.-tuple T) (g_sigma_preimage coors) tuple_set0 tuple_setC tuple_bigcup.
16601653

16611654
End measurable_tuple.
1662-
1663-
Section absolute_continuity.
1664-
Context d (T : semiRingOfSetsType d) (R : realType).
1665-
Implicit Types m : set T -> \bar R.
1666-
1667-
Definition measure_dominates m1 m2 :=
1668-
forall A, measurable A -> m2 A = 0 -> m1 A = 0.
1669-
1670-
Local Notation "m1 `<< m2" := (measure_dominates m1 m2).
1671-
1672-
Lemma measure_dominates_trans m1 m2 m3 : m1 `<< m2 -> m2 `<< m3 -> m1 `<< m3.
1673-
Proof. by move=> m12 m23 A mA /m23-/(_ mA) /m12; exact. Qed.
1674-
1675-
End absolute_continuity.
1676-
Notation "m1 `<< m2" := (measure_dominates m1 m2).

0 commit comments

Comments
 (0)