Skip to content

Commit fcd460e

Browse files
committed
simplify lemmas and clarify presentation by introducing two definitions
1 parent cc39103 commit fcd460e

File tree

4 files changed

+67
-64
lines changed

4 files changed

+67
-64
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
+ lemma `negligible_null_set`
1111
+ lemma `measure_null_setP`
1212
+ lemma `null_setU`
13-
+ definition `null_set_dominates`
13+
+ definition `null_dominates`
1414
+ lemma `null_dominates_trans`
15-
+ lemma `measure_null_dominatesP`
16-
+ lemma `measure_charge_dominatesP`
15+
+ lemma `content_null_dominatesP`
1716

1817
- in `charge.v`:
18+
+ definition `charge_dominates`
1919
+ lemma `charge_null_dominatesP`
20+
+ lemma `content_charge_dominatesP`
2021

2122
### Changed
2223

@@ -47,6 +48,9 @@
4748
+ definition `measure_dominates` (use `null_set_dominates` instead)
4849
+ lemma `measure_dominates_trans`
4950

51+
- in `charge.v`:
52+
+ lemma `dominates_charge_variation` (use `charge_null_dominatesP` instead)
53+
5054
### Infrastructure
5155

5256
### Misc

theories/charge.v

Lines changed: 43 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ 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+
(* charge_dominates mu nuPN := content_dominates mu (charge_variation nuPN) *)
6869
(* 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 *)
@@ -433,7 +434,7 @@ Lemma dominates_cscalel d (T : measurableType d) (R : realType)
433434
(nu : {charge set T -> \bar R})
434435
(c : R) : nu `<< mu -> cscale c nu `<< mu.
435436
Proof.
436-
move=> /measure_null_dominatesP numu; apply/measure_null_dominatesP => E mE.
437+
move=> /content_null_dominatesP numu; apply/content_null_dominatesP => E mE.
437438
by move/(numu _ mE) => E0; apply/eqP; rewrite mule_eq0 eqe E0/= eqxx orbT.
438439
Qed.
439440

@@ -516,8 +517,8 @@ Lemma dominates_cadd d (T : measurableType d) (R : realType)
516517
nu0 `<< mu -> nu1 `<< mu ->
517518
cadd nu0 nu1 `<< mu.
518519
Proof.
519-
move=> /measure_null_dominatesP nu0mu.
520-
move=> /measure_null_dominatesP nu1mu A nA A0 mA0 A0A.
520+
move=> /content_null_dominatesP nu0mu.
521+
move=> /content_null_dominatesP nu1mu A nA A0 mA0 A0A.
521522
by have muA0 := nA _ mA0 A0A; rewrite /cadd nu0mu// nu1mu// adde0.
522523
Qed.
523524

@@ -563,19 +564,15 @@ HB.instance Definition _ := isCharge.Build _ _ _
563564

564565
HB.end.
565566

566-
Section dominates_pushforward.
567-
568567
Lemma dominates_pushforward d d' (T : measurableType d) (T' : measurableType d')
569568
(R : realType) (mu : {measure set T -> \bar R})
570569
(nu : {charge set T -> \bar R}) (f : T -> T') (mf : measurable_fun setT f) :
571570
nu `<< mu -> pushforward nu f `<< pushforward mu f.
572571
Proof.
573-
move=> /measure_null_dominatesP numu; apply/measure_null_dominatesP => A mA.
572+
move=> /content_null_dominatesP numu; apply/content_null_dominatesP => A mA.
574573
by apply: numu; rewrite -[X in measurable X]setTI; exact: mf.
575574
Qed.
576575

577-
End dominates_pushforward.
578-
579576
Section positive_negative_set.
580577
Context d (T : semiRingOfSetsType d) (R : numDomainType).
581578
Implicit Types nu : set T -> \bar R.
@@ -1022,8 +1019,8 @@ Qed.
10221019
Lemma jordan_pos_dominates (mu : {measure set T -> \bar R}) :
10231020
nu `<< mu -> jordan_pos `<< mu.
10241021
Proof.
1025-
move=> /measure_null_dominatesP nu_mu.
1026-
apply/measure_null_dominatesP => A mA muA0.
1022+
move=> /content_null_dominatesP nu_mu.
1023+
apply/content_null_dominatesP => A mA muA0.
10271024
have := nu_mu A mA muA0.
10281025
rewrite jordan_posE// cjordan_posE /crestr0 mem_set// /crestr/=.
10291026
have mAP : measurable (A `&` P) by exact: measurableI.
@@ -1034,8 +1031,8 @@ Qed.
10341031
Lemma jordan_neg_dominates (mu : {measure set T -> \bar R}) :
10351032
nu `<< mu -> jordan_neg `<< mu.
10361033
Proof.
1037-
move=> /measure_null_dominatesP nu_mu.
1038-
apply/measure_null_dominatesP => A mA muA0.
1034+
move=> /content_null_dominatesP nu_mu.
1035+
apply/content_null_dominatesP => A mA muA0.
10391036
have := nu_mu A mA muA0.
10401037
rewrite jordan_negE// cjordan_negE /crestr0 mem_set// /crestr/=.
10411038
have mAN : measurable (A `&` N) by exact: measurableI.
@@ -1085,9 +1082,14 @@ HB.instance Definition _ := isCharge.Build _ _ _ mu
10851082

10861083
End charge_variation.
10871084

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).
1089+
10881090
Section charge_variation_continuous.
10891091
Local Open Scope ereal_scope.
1090-
Context {R : realType} d (T : measurableType d).
1092+
Context d (T : measurableType d) {R : realType}.
10911093
Variable nu : {charge set T -> \bar R}.
10921094
Variables (P N : set T) (nuPN : hahn_decomposition nu P N).
10931095

@@ -1099,34 +1101,44 @@ rewrite (jordan_decomp nuPN mA) /cadd/= cscaleN1 /charge_variation.
10991101
by rewrite (le_trans (lee_abs_sub _ _))// !gee0_abs.
11001102
Qed.
11011103

1102-
Lemma dominates_charge_variation (mu : {measure set T -> \bar R}) :
1104+
Lemma __deprecated__dominates_charge_variation (mu : {measure set T -> \bar R}) :
11031105
nu `<< mu -> charge_variation nuPN `<< mu.
11041106
Proof.
1105-
move=> /[dup]numu /measure_null_dominatesP nu0mu0.
1106-
apply/measure_null_dominatesP => A mA muA0; rewrite /charge_variation/=.
1107-
have /measure_null_dominatesP ->// := jordan_pos_dominates nuPN numu.
1107+
move=> /[dup]numu /content_null_dominatesP nu0mu0.
1108+
apply/content_null_dominatesP => A mA muA0; rewrite /charge_variation/=.
1109+
have /content_null_dominatesP ->// := jordan_pos_dominates nuPN numu.
11081110
rewrite add0e.
1109-
by have /measure_null_dominatesP -> := jordan_neg_dominates nuPN numu.
1111+
by have /content_null_dominatesP -> := jordan_neg_dominates nuPN numu.
11101112
Qed.
11111113

11121114
Lemma charge_null_dominatesP (mu : {measure set T -> \bar R}) :
1113-
nu `<< mu <->
1114-
(forall A, measurable A -> mu A = 0 -> charge_variation nuPN A = 0).
1115+
nu `<< mu <-> charge_dominates mu nuPN.
11151116
Proof.
11161117
split => [|numu].
1117-
- move/dominates_charge_variation/measure_null_dominatesP => + Am A A0.
1118-
exact.
1119-
- apply/measure_null_dominatesP => A mA /numu => /(_ mA) nuA0.
1118+
- move=> /[dup]numu /content_null_dominatesP nu0mu0.
1119+
move=> A mA muA0; rewrite /charge_variation/=.
1120+
have /content_null_dominatesP ->// := jordan_pos_dominates nuPN numu.
1121+
rewrite add0e.
1122+
by have /content_null_dominatesP -> := jordan_neg_dominates nuPN numu.
1123+
- apply/content_null_dominatesP => A mA /numu => /(_ mA) nuA0.
11201124
apply/eqP; rewrite -abse_eq0 eq_le abse_ge0 andbT.
11211125
by rewrite -nuA0 abse_charge_variation.
11221126
Qed.
11231127

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/content_null_dominatesP/charge_null_dominatesP.
1133+
- by move/charge_null_dominatesP/content_null_dominatesP.
1134+
Qed.
1135+
11241136
Lemma charge_variation_continuous (mu : {measure set T -> \bar R}) :
11251137
nu `<< mu -> forall e : R, (0 < e)%R ->
11261138
exists d : R, (0 < d)%R /\
11271139
forall A, measurable A -> mu A < d%:E -> charge_variation nuPN A < e%:E.
11281140
Proof.
1129-
move=> /[dup]nudommu /measure_null_dominatesP numu.
1141+
move=> /[dup]nudommu /content_null_dominatesP numu.
11301142
apply/not_forallP => -[e] /not_implyP[e0] /forallNP H.
11311143
have {H} : forall n, exists A,
11321144
[/\ measurable A, mu A < (2 ^- n.+1)%:E & charge_variation nuPN A >= e%:E].
@@ -1153,8 +1165,7 @@ have : mu (lim_sup_set F) = 0.
11531165
by move/cvg_lim : h => ->//; rewrite ltry.
11541166
have : measurable (lim_sup_set F).
11551167
by apply: bigcap_measurable => // k _; exact: bigcup_measurable.
1156-
have /measure_null_dominatesP/[apply]/[apply] :=
1157-
dominates_charge_variation nudommu.
1168+
move/charge_null_dominatesP : nudommu => /[apply] /[apply].
11581169
apply/eqP; rewrite neq_lt// ltNge measure_ge0//=.
11591170
suff : charge_variation nuPN (lim_sup_set F) >= e%:E by exact: lt_le_trans.
11601171
have echarge n : e%:E <= charge_variation nuPN (\bigcup_(j >= n) F j).
@@ -1171,27 +1182,9 @@ have /(_ _ _)/cvg_lim <-// := lim_sup_set_cvg (charge_variation nuPN) F.
11711182
by rewrite -ge0_fin_numE// fin_num_measure//; exact: bigcup_measurable.
11721183
Qed.
11731184

1174-
Lemma measure_charge_dominatesP (mu : {measure set T -> \bar R}) :
1175-
(forall A, measurable A -> mu A = 0 -> nu A = 0)
1176-
<->
1177-
(forall A, measurable A -> mu A = 0 -> charge_variation nuPN A = 0).
1178-
Proof.
1179-
split.
1180-
move/measure_null_dominatesP => numu.
1181-
move=> A mA muA0.
1182-
apply/eqP; rewrite eq_le measure_ge0 andbT.
1183-
rewrite /charge_variation.
1184-
rewrite adde_le0//.
1185-
by have /measure_null_dominatesP->// := jordan_pos_dominates nuPN numu.
1186-
by have /measure_null_dominatesP->// := jordan_neg_dominates nuPN numu.
1187-
move=> H A mA muA0.
1188-
apply/eqP.
1189-
rewrite -abse_eq0 eq_le abse_ge0 andbT.
1190-
have <- := H _ mA muA0.
1191-
exact: abse_charge_variation.
1192-
Qed.
1193-
11941185
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).
11951188

11961189
Definition induced_charge d (T : measurableType d) {R : realType}
11971190
(mu : {measure set T -> \bar R}) (f : T -> \bar R)
@@ -1261,7 +1254,7 @@ Proof. exact: integrable_abse. Qed.
12611254

12621255
Lemma dominates_induced : induced_charge intnf `<< mu.
12631256
Proof.
1264-
apply/measure_null_dominatesP => /= A mA muA.
1257+
apply/content_null_dominatesP => /= A mA muA.
12651258
rewrite /induced_charge; apply/eqP; rewrite -abse_eq0 eq_le abse_ge0 andbT.
12661259
rewrite (le_trans (le_abse_integral _ _ _))//=.
12671260
by case/integrableP : intnf => /= + _; exact: measurable_funTS.
@@ -1769,7 +1762,7 @@ pose AP := A `&` P.
17691762
have mAP : measurable AP by exact: measurableI.
17701763
have muAP_gt0 : 0 < mu AP.
17711764
rewrite lt0e measure_ge0// andbT.
1772-
move/measure_null_dominatesP in nu_mu.
1765+
move/content_null_dominatesP in nu_mu.
17731766
apply/eqP/(contra_not (nu_mu _ mAP))/eqP; rewrite gt_eqF//.
17741767
rewrite (@lt_le_trans _ _ (sigma AP))//.
17751768
rewrite (@lt_le_trans _ _ (sigma A))//; last first.
@@ -1864,8 +1857,8 @@ pose mu_ j : {finite_measure set T -> \bar R} := mfrestr (mE j) (muEoo j).
18641857
have nuEoo i : nu (E i) < +oo by rewrite ltey_eq fin_num_measure.
18651858
pose nu_ j : {finite_measure set T -> \bar R} := mfrestr (mE j) (nuEoo j).
18661859
have nu_mu_ k : nu_ k `<< mu_ k.
1867-
apply/measure_null_dominatesP => S mS mu_kS0.
1868-
move/measure_null_dominatesP : nu_mu; apply => //.
1860+
apply/content_null_dominatesP => S mS mu_kS0.
1861+
move/content_null_dominatesP : nu_mu; apply => //.
18691862
exact: measurableI.
18701863
have [g_] := choice (fun j => radon_nikodym_finite (nu_mu_ j)).
18711864
move=> /all_and3[g_ge0 ig_ int_gE].

theories/measure_theory/measure_negligible.v

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ From mathcomp Require Import measurable_structure measure_function.
3232
(* mu-.null_set == (measure-theoretic) null sets *)
3333
(* m1 `<< m2 == m1 is absolutely continuous w.r.t. m2 or *)
3434
(* m2 dominates m1 *)
35+
(* content_dominates mu nu == forall A, measurable A -> *)
36+
(* mu A = 0 -> nu A = 0 *)
3537
(* ``` *)
3638
(* *)
3739
(******************************************************************************)
@@ -384,26 +386,30 @@ Section absolute_continuity.
384386
Context d (T : semiRingOfSetsType d) (R : realType).
385387
Implicit Types m : set T -> \bar R.
386388

387-
Definition null_set_dominates m1 m2 := m2.-null_set `<=` m1.-null_set.
389+
Definition null_dominates m2 m1 := m2.-null_set `<=` m1.-null_set.
388390

389391
End absolute_continuity.
390-
Notation "m1 `<< m2" := (null_set_dominates m1 m2).
392+
Notation "m1 `<< m2" := (null_dominates m2 m1).
391393

392394
Section null_dominates_lemmas.
393395
Context d (T : semiRingOfSetsType d) (R : realType).
394396
Implicit Types m : set T -> \bar R.
395397

396398
Lemma null_dominates_trans m1 m2 m3 : m1 `<< m2 -> m2 `<< m3 -> m1 `<< m3.
397-
Proof. by move=> m12 m23 A /m23/m12. Qed.
399+
Proof. by move=> m12 m23 A /m23 /m12. Qed.
398400

399401
End null_dominates_lemmas.
400402

403+
Definition content_dominates {d} {T : measurableType d} {R : realType}
404+
(mu : {content set T -> \bar R}) (nu : set T -> \bar R) :=
405+
forall A, measurable A -> mu A = 0 -> nu A = 0.
406+
401407
Section content_null_dominates_lemmas.
402-
Context d (T : measurableType d) (R : realType) (U : Type).
403-
Implicit Types (mu : {content set T -> \bar R}) (f g : T -> U).
408+
Context d (T : measurableType d) (R : realType).
409+
Implicit Types (mu : {content set T -> \bar R}).
404410

405-
Lemma measure_null_dominatesP (nu : set T -> \bar R) mu :
406-
nu `<< mu <-> (forall A, measurable A -> mu A = 0 -> nu A = 0).
411+
Lemma content_null_dominatesP (nu : set T -> \bar R) mu :
412+
nu `<< mu <-> content_dominates mu nu.
407413
Proof.
408414
split.
409415
- by move=> dom A mA muA0; apply: (dom A) => //; exact/measure_null_setP.
@@ -419,7 +425,7 @@ Implicit Types (nu mu : {measure set T -> \bar R}) (f g : T -> U).
419425
Lemma null_dominates_ae_eq nu mu f g E : measurable E ->
420426
nu `<< mu -> ae_eq mu E f g -> ae_eq nu E f g.
421427
Proof.
422-
move=> mE /measure_null_dominatesP m21 [A [*]]; exists A; split => //.
428+
move=> mE /content_null_dominatesP m21 [A [*]]; exists A; split => //.
423429
exact: m21.
424430
Qed.
425431

theories/probability.v

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,7 +1575,7 @@ HB.instance Definition _ := @Measure_isProbability.Build _ _ R
15751575

15761576
Lemma dominates_uniform_prob : uniform_prob ab `<< mu.
15771577
Proof.
1578-
apply/measure_null_dominatesP.
1578+
apply/content_null_dominatesP.
15791579
move=> A mA muA0; rewrite /uniform_prob integral_uniform_pdf.
15801580
apply/eqP; rewrite eq_le; apply/andP; split; last first.
15811581
apply: integral_ge0 => x [Ax /=]; rewrite in_itv /= => xab.
@@ -1878,7 +1878,7 @@ HB.instance Definition _ :=
18781878

18791879
Lemma normal_prob_dominates : normal_prob `<< mu.
18801880
Proof.
1881-
apply/measure_null_dominatesP=> A mA muA0; rewrite /normal_prob /normal_pdf.
1881+
apply/content_null_dominatesP=> A mA muA0; rewrite /normal_prob /normal_pdf.
18821882
have [s0|s0] := eqVneq sigma 0.
18831883
apply: null_set_integral => //=; apply: (integrableS measurableT) => //=.
18841884
exact: integrable_indic_itv.
@@ -2654,7 +2654,7 @@ Qed.
26542654

26552655
Lemma beta_prob_dom : beta_prob `<< mu.
26562656
Proof.
2657-
apply/measure_null_dominatesP => A mA muA0; rewrite /beta_prob /mscale/=.
2657+
apply/content_null_dominatesP => A mA muA0; rewrite /beta_prob /mscale/=.
26582658
apply/eqP; rewrite mule_eq0 eqe invr_eq0 gt_eqF/= ?beta_fun_gt0//; apply/eqP.
26592659
rewrite /beta_num integral_XMonemX_restrict.
26602660
apply/eqP; rewrite eq_le; apply/andP; split; last first.

0 commit comments

Comments
 (0)