Skip to content

Commit 6e7a1c8

Browse files
affeldt-aistt6s
authored andcommitted
bernoulli probability measure (math-comp#895)
* bernoulli, binomial, uniform distr Co-authored-by: Takafumi Saikawa <[email protected]>
1 parent d184165 commit 6e7a1c8

File tree

9 files changed

+741
-104
lines changed

9 files changed

+741
-104
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,40 @@
3434
- in `normedtype.v`:
3535
+ lemma `not_near_at_leftP`
3636

37+
- in `lebesgue_measure.v`:
38+
+ lemma `measurable_fun_ler`
39+
40+
- in `measure.v`:
41+
+ lemma `measurable_and`
42+
43+
- in `signed.v`:
44+
+ lemma `onem_nonneg_proof`, definition `onem_nonneg`
45+
46+
- in `esum.v`:
47+
+ lemma `nneseries_sum_bigcup`
48+
49+
- in `lebesgue_measurable.v`:
50+
+ lemmas `measurable_natmul`, `measurable_fun_pow`
51+
52+
- in `probability.v`:
53+
+ definition `bernoulli_pmf`
54+
+ lemmas `bernoulli_pmf_ge0`, `bernoulli_pmf1`, `measurable_bernoulli_pmf`
55+
+ definition `bernoulli` (equipped with the `probability` structure)
56+
+ lemmas `bernoulli_dirac`, `bernoulliE`, `integral_bernoulli`, `measurable_bernoulli`,
57+
`measurable_bernoulli2`
58+
+ definition `binomial_pmf`
59+
+ lemmas `binomial_pmf_ge0`, `measurable_binomial_pmf`
60+
+ definitions `binomial_prob` (equipped with the `probability` structure), `bin_prob`
61+
+ lemmas `bin_prob0`, `bin_prob1`, `binomial_msum`, `binomial_probE`, `integral_binomial`,
62+
`integral_binomial_prob`, `measurable_binomial_prob`
63+
+ definition `uniform_pdf`
64+
+ lemmas `measurable_uniform_pdf`, `integral_uniform_pdf`, `integral_uniform_pdf1`
65+
+ definition `uniform_prob` (equipped with the `probability` structure)
66+
+ lemmas `dominates_uniform_prob`, `integral_uniform`
67+
68+
- in `measure.v`:
69+
+ lemma `measurableID`
70+
3771
### Changed
3872

3973
- in `forms.v`:
@@ -44,6 +78,9 @@
4478
- in `sequences.v`:
4579
+ definition `expR` is now HB.locked
4680

81+
- in `measure.v`:
82+
+ change the hypothesis of `measurable_fun_bool`
83+
4784
### Renamed
4885

4986
- in `constructive_ereal.v`:
@@ -110,6 +147,9 @@
110147
(from `measurableType` to `semiRingOfSetsType`)
111148
+ lemmas ` measurable_prod_measurableType`, `measurable_prod_g_measurableTypeR` (from `measurableType` to `algebraOfSetsType`)
112149

150+
- in `lebesgue_integral.v`:
151+
+ lemma `ge0_emeasurable_fun_sum`
152+
113153
### Deprecated
114154

115155
- in `classical_sets.v`:

theories/charge.v

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,7 +1467,7 @@ have muAP_gt0 : 0 < mu AP.
14671467
pose h x := if x \in AP then f x + (epsRN mA abs)%:num%:E else f x.
14681468
have mh : measurable_fun setT h.
14691469
apply: measurable_fun_if => //.
1470-
- by apply: (measurable_fun_bool true); rewrite preimage_mem_true.
1470+
- by apply: (measurable_fun_bool true); rewrite setTI preimage_mem_true.
14711471
- by apply: measurable_funTS; apply: emeasurable_funD => //; exact: mf.
14721472
- by apply: measurable_funTS; exact: mf.
14731473
have hge0 x : 0 <= h x.
@@ -1559,7 +1559,7 @@ pose f_ j x := if x \in E j then g_ j x else 0.
15591559
have f_ge0 k x : 0 <= f_ k x by rewrite /f_; case: ifP.
15601560
have mf_ k : measurable_fun setT (f_ k).
15611561
apply: measurable_fun_if => //.
1562-
- by apply: (measurable_fun_bool true); rewrite preimage_mem_true.
1562+
- by apply: (measurable_fun_bool true); rewrite setTI preimage_mem_true.
15631563
- rewrite preimage_mem_true.
15641564
by apply: measurable_funTS => //; have /integrableP[] := ig_ k.
15651565
have if_T k : integrable mu setT (f_ k).

theories/esum.v

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,15 @@ End esum_bigcup.
451451
Arguments esum_bigcupT {R T K} J a.
452452
Arguments esum_bigcup {R T K} J a.
453453

454+
Lemma nneseries_sum_bigcup {R : realType} (T : choiceType) (F : (set T)^nat)
455+
(f : T -> \bar R) : trivIset [set: nat] F -> (forall i, 0 <= f i)%E ->
456+
(\esum_(i in \bigcup_n F n) f i = \sum_(0 <= i <oo) (\esum_(j in F i) f j))%E.
457+
Proof.
458+
move=> tF f0; rewrite esum_bigcupT// nneseries_esum//; last first.
459+
by move=> k _; exact: esum_ge0.
460+
by rewrite fun_true; apply: eq_esum => /= i _.
461+
Qed.
462+
454463
Definition summable (T : choiceType) (R : realType) (D : set T)
455464
(f : T -> \bar R) := (\esum_(x in D) `| f x | < +oo)%E.
456465

theories/kernel.v

Lines changed: 43 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ Lemma measurable_fun_kseries (U : set Y) :
132132
measurable U -> measurable_fun [set: X] (kseries ^~ U).
133133
Proof.
134134
move=> mU.
135-
by apply: ge0_emeasurable_fun_sum => // n; exact/measurable_kernel.
135+
by apply: ge0_emeasurable_fun_sum => // n _; exact/measurable_kernel.
136136
Qed.
137137

138138
HB.instance Definition _ :=
@@ -506,7 +506,7 @@ Variable k : X * Y -> \bar R.
506506

507507
Lemma measurable_fun_xsection_integral
508508
(l : X -> {measure set Y -> \bar R})
509-
(k_ : ({nnsfun [the measurableType _ of X * Y] >-> R})^nat)
509+
(k_ : {nnsfun (X * Y) >-> R}^nat)
510510
(ndk_ : nondecreasing_seq (k_ : (X * Y -> R)^nat))
511511
(k_k : forall z, (k_ n z)%:E @[n --> \oo] --> k z) :
512512
(forall n r,
@@ -585,7 +585,7 @@ have [l_ hl_] := sfinite_kernel l.
585585
rewrite (_ : (fun x => _) = (fun x =>
586586
mseries (l_ ^~ x) 0 (xsection (k_ n @^-1` [set r]) x))); last first.
587587
by apply/funext => x; rewrite hl_//; exact/measurable_xsection.
588-
apply: ge0_emeasurable_fun_sum => // m.
588+
apply: ge0_emeasurable_fun_sum => // m _.
589589
by apply: measurable_fun_xsection_finite_kernel => // /[!inE].
590590
Qed.
591591

@@ -614,7 +614,7 @@ Qed.
614614
HB.instance Definition _ := isKernel.Build _ _ _ _ _ (kdirac mf)
615615
measurable_fun_kdirac.
616616

617-
Let kdirac_prob x : kdirac mf x setT = 1.
617+
Let kdirac_prob x : kdirac mf x [set: Y] = 1.
618618
Proof. by rewrite /kdirac/= diracT. Qed.
619619

620620
HB.instance Definition _ := Kernel_isProbability.Build _ _ _ _ _
@@ -717,46 +717,14 @@ HB.instance Definition _ t :=
717717
Kernel_isFinite.Build _ _ _ _ R (kadd k1 k2) kadd_finite_uub.
718718
End fkadd.
719719

720-
Lemma measurable_fun_mnormalize d d' (X : measurableType d)
721-
(Y : measurableType d') (R : realType) (k : R.-ker X ~> Y) :
722-
measurable_fun [set: X] (fun x =>
723-
[the probability _ _ of mnormalize (k x) point] : pprobability Y R).
724-
Proof.
725-
apply: (@measurability _ _ _ _ _ _
726-
(@pset _ _ _ : set (set (pprobability Y R)))) => //.
727-
move=> _ -[_ [r r01] [Ys mYs <-]] <-.
728-
rewrite /mnormalize /mset /preimage/=.
729-
apply: emeasurable_fun_infty_o => //.
730-
rewrite /mnormalize/=.
731-
rewrite (_ : (fun x => _) = (fun x => if (k x setT == 0) || (k x setT == +oo)
732-
then \d_point Ys else k x Ys * ((fine (k x setT))^-1)%:E)); last first.
733-
by apply/funext => x/=; case: ifPn.
734-
apply: measurable_fun_if => //.
735-
- apply: (measurable_fun_bool true) => //.
736-
rewrite (_ : _ @^-1` _ = [set t | k t setT == 0] `|`
737-
[set t | k t setT == +oo]); last first.
738-
by apply/seteqP; split=> x /= /orP//.
739-
by apply: measurableU; exact: kernel_measurable_eq_cst.
740-
- apply/emeasurable_funM; first exact/measurable_funTS/measurable_kernel.
741-
apply/EFin_measurable_fun; rewrite setTI.
742-
apply: (@measurable_comp _ _ _ _ _ _ [set r : R | r != 0%R]).
743-
+ exact: open_measurable.
744-
+ by move=> /= _ [x /norP[s0 soo]] <-; rewrite -eqe fineK ?ge0_fin_numE ?ltey.
745-
+ apply: open_continuous_measurable_fun => //; apply/in_setP => x /= x0.
746-
exact: inv_continuous.
747-
+ by apply: measurableT_comp => //; exact/measurable_funS/measurable_kernel.
748-
Qed.
749-
750720
Section knormalize.
751721
Context d d' (X : measurableType d) (Y : measurableType d') (R : realType).
752722
Variable f : R.-ker X ~> Y.
753723

754724
Definition knormalize (P : probability Y R) : X -> {measure set Y -> \bar R} :=
755-
fun x => [the measure _ _ of mnormalize (f x) P].
756-
757-
Variable P : probability Y R.
725+
fun x => mnormalize (f x) P.
758726

759-
Let measurable_fun_knormalize U :
727+
Let measurable_knormalize (P : probability Y R) U :
760728
measurable U -> measurable_fun [set: X] (knormalize P ^~ U).
761729
Proof.
762730
move=> mU; rewrite /knormalize/= /mnormalize /=.
@@ -773,7 +741,7 @@ apply: measurable_fun_if => //.
773741
- apply: (@measurable_funS _ _ _ _ setT) => //.
774742
exact: kernel_measurable_fun_eq_cst.
775743
- apply: emeasurable_funM.
776-
by have := measurable_kernel f U mU; exact: measurable_funS.
744+
exact: measurable_funS (measurable_kernel f U mU).
777745
apply/EFin_measurable_fun.
778746
apply: (@measurable_comp _ _ _ _ _ _ [set r : R | r != 0%R]) => //.
779747
+ exact: open_measurable.
@@ -786,17 +754,48 @@ apply: measurable_fun_if => //.
786754
by have := measurable_kernel f _ measurableT; exact: measurable_funS.
787755
Qed.
788756

789-
HB.instance Definition _ := isKernel.Build _ _ _ _ R (knormalize P)
790-
measurable_fun_knormalize.
757+
HB.instance Definition _ (P : probability Y R) :=
758+
isKernel.Build _ _ _ _ R (knormalize P) (measurable_knormalize P).
791759

792-
Let knormalize1 x : knormalize P x [set: Y] = 1.
760+
Let knormalize1 (P : probability Y R) x : knormalize P x [set: Y] = 1.
793761
Proof. by rewrite /knormalize/= probability_setT. Qed.
794762

795-
HB.instance Definition _ :=
796-
@Kernel_isProbability.Build _ _ _ _ _ (knormalize P) knormalize1.
763+
HB.instance Definition _ (P : probability Y R):=
764+
@Kernel_isProbability.Build _ _ _ _ _ (knormalize P) (knormalize1 P).
797765

798766
End knormalize.
799767

768+
(* TODO: useful? *)
769+
Lemma measurable_fun_mnormalize d d' (X : measurableType d)
770+
(Y : measurableType d') (R : realType) (k : R.-ker X ~> Y) :
771+
measurable_fun [set: X] (fun x =>
772+
[the probability _ _ of mnormalize (k x) point] : pprobability Y R).
773+
Proof.
774+
apply: (@measurability _ _ _ _ _ _
775+
(@pset _ _ _ : set (set (pprobability Y R)))) => //.
776+
move=> _ -[_ [r r01] [Ys mYs <-]] <-.
777+
rewrite /mnormalize /mset /preimage/=.
778+
apply: emeasurable_fun_infty_o => //.
779+
rewrite /mnormalize/=.
780+
rewrite (_ : (fun x => _) = (fun x => if (k x setT == 0) || (k x setT == +oo)
781+
then \d_point Ys else k x Ys * ((fine (k x setT))^-1)%:E)); last first.
782+
by apply/funext => x/=; case: ifPn.
783+
apply: measurable_fun_if => //.
784+
- apply: (measurable_fun_bool true) => //.
785+
rewrite (_ : _ @^-1` _ = [set t | k t setT == 0] `|`
786+
[set t | k t setT == +oo]); last first.
787+
by apply/seteqP; split=> x /= /orP.
788+
by rewrite setTI; apply: measurableU; exact: kernel_measurable_eq_cst.
789+
- apply/emeasurable_funM; first exact/measurable_funTS/measurable_kernel.
790+
apply/EFin_measurable_fun; rewrite setTI.
791+
apply: (@measurable_comp _ _ _ _ _ _ [set r : R | r != 0%R]).
792+
+ exact: open_measurable.
793+
+ by move=> /= _ [x /norP[s0 soo]] <-; rewrite -eqe fineK ?ge0_fin_numE ?ltey.
794+
+ apply: open_continuous_measurable_fun => //; apply/in_setP => x /= x0.
795+
exact: inv_continuous.
796+
+ by apply: measurableT_comp => //; exact/measurable_funS/measurable_kernel.
797+
Qed.
798+
800799
Section kcomp_def.
801800
Context d1 d2 d3 (X : measurableType d1) (Y : measurableType d2)
802801
(Z : measurableType d3) (R : realType).

theories/lebesgue_integral.v

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1969,15 +1969,30 @@ move=> fs mh; under eq_fun do rewrite fsbig_finite//.
19691969
exact: emeasurable_fun_sum.
19701970
Qed.
19711971

1972-
Lemma ge0_emeasurable_fun_sum D (h : nat -> (T -> \bar R)) :
1973-
(forall k x, 0 <= h k x) -> (forall k, measurable_fun D (h k)) ->
1974-
measurable_fun D (fun x => \sum_(i <oo) h i x).
1975-
Proof.
1976-
move=> h0 mh; rewrite [X in measurable_fun _ X](_ : _ =
1977-
(fun x => limn_esup (fun n => \sum_(0 <= i < n) h i x))); last first.
1972+
Lemma ge0_emeasurable_fun_sum D (h : nat -> (T -> \bar R)) (P : pred nat) :
1973+
(forall k x, D x -> P k -> 0 <= h k x) -> (forall k, P k -> measurable_fun D (h k)) ->
1974+
measurable_fun D (fun x => \sum_(i <oo | i \in P) h i x).
1975+
Proof.
1976+
Proof.
1977+
move=> h0 mh.
1978+
move=> mD; move: (mD).
1979+
apply/(@measurable_restrict _ _ _ _ _ setT) => //.
1980+
rewrite [X in measurable_fun _ X](_ : _ =
1981+
(fun x => \sum_(0 <= i <oo | i \in P) (h i \_ D) x)); last first.
1982+
apply/funext => x/=; rewrite /patch; case: ifPn => // xD.
1983+
by rewrite eseries0.
1984+
rewrite [X in measurable_fun _ X](_ : _ =
1985+
(fun x => limn_esup (fun n => \sum_(0 <= i < n | P i) (h i) \_ D x))); last first.
19781986
apply/funext=> x; rewrite is_cvg_limn_esupE//.
1979-
exact: is_cvg_ereal_nneg_natsum.
1980-
by apply: measurable_fun_limn_esup => k; exact: emeasurable_fun_sum.
1987+
apply: is_cvg_nneseries_cond => n Pn; rewrite patchE.
1988+
by case: ifPn => // xD; rewrite h0//; exact/set_mem.
1989+
apply: measurable_fun_limn_esup => k.
1990+
under eq_fun do rewrite big_mkcond.
1991+
apply: emeasurable_fun_sum => n.
1992+
have [|] := boolP (n \in P).
1993+
rewrite /in_mem/= => Pn; rewrite Pn.
1994+
by apply/(measurable_restrict (h n)) => //; exact: mh.
1995+
by rewrite /in_mem/= => /negbTE ->.
19811996
Qed.
19821997

19831998
Lemma emeasurable_funB D f g :
@@ -5262,7 +5277,7 @@ rewrite ge0_integralZl//; last by rewrite lee_fin.
52625277
- by move=> y _; rewrite lee_fin.
52635278
Qed.
52645279

5265-
Lemma sfun_measurable_fun_fubini_tonelli_F : measurable_fun setT F.
5280+
Lemma sfun_measurable_fun_fubini_tonelli_F : measurable_fun [set: T1] F.
52665281
Proof.
52675282
rewrite sfun_fubini_tonelli_FE//; apply: emeasurable_fun_fsum => // r.
52685283
exact/measurable_funeM/measurable_fun_xsection.
@@ -5703,8 +5718,8 @@ transitivity (\sum_(n <oo) \int[s1 n]_x \sum_(m <oo) \int[s2 m]_y f (x, y)).
57035718
fun x => \sum_(n <oo) \int[s2 n]_y f (x, y)); last first.
57045719
apply/funext => x.
57055720
by rewrite ge0_integral_measure_series//; exact/measurableT_comp.
5706-
apply: ge0_emeasurable_fun_sum; first by move=> k x; exact: integral_ge0.
5707-
by move=> k; apply: measurable_fun_fubini_tonelli_F.
5721+
apply: ge0_emeasurable_fun_sum; first by move=> k x *; exact: integral_ge0.
5722+
by move=> k _; exact: measurable_fun_fubini_tonelli_F.
57085723
apply: eq_eseriesr => n _; apply: eq_integral => x _.
57095724
by rewrite ge0_integral_measure_series//; exact/measurableT_comp.
57105725
transitivity (\sum_(n <oo) \sum_(m <oo) \int[s1 n]_x \int[s2 m]_y f (x, y)).

theories/lebesgue_measure.v

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,15 +1566,17 @@ Qed.
15661566
Lemma measurable_fun_ltr D f g : measurable_fun D f -> measurable_fun D g ->
15671567
measurable_fun D (fun x => f x < g x).
15681568
Proof.
1569-
move=> mf mg mD Y mY; have [| | |] := set_bool Y => /eqP ->.
1570-
- under eq_fun do rewrite -subr_gt0.
1571-
rewrite preimage_true -preimage_itv_o_infty.
1572-
by apply: (measurable_funB mg mf) => //; exact: measurable_itv.
1573-
- under eq_fun do rewrite ltNge -subr_ge0.
1574-
rewrite preimage_false set_predC setCK -preimage_itv_c_infty.
1575-
by apply: (measurable_funB mf mg) => //; exact: measurable_itv.
1576-
- by rewrite preimage_set0 setI0.
1577-
- by rewrite preimage_setT setIT.
1569+
move=> mf mg mD; apply: (measurable_fun_bool true) => //.
1570+
under eq_fun do rewrite -subr_gt0.
1571+
by rewrite preimage_true -preimage_itv_o_infty; exact: measurable_funB.
1572+
Qed.
1573+
1574+
Lemma measurable_fun_ler D f g : measurable_fun D f -> measurable_fun D g ->
1575+
measurable_fun D (fun x => f x <= g x).
1576+
Proof.
1577+
move=> mf mg mD; apply: (measurable_fun_bool true) => //.
1578+
under eq_fun do rewrite -subr_ge0.
1579+
by rewrite preimage_true -preimage_itv_c_infty; exact: measurable_funB.
15781580
Qed.
15791581

15801582
Lemma measurable_maxr D f g :
@@ -1672,11 +1674,26 @@ Proof. by apply: continuous_measurable_fun; exact: continuous_expR. Qed.
16721674
#[global] Hint Extern 0 (measurable_fun _ expR) =>
16731675
solve [apply: measurable_expR] : core.
16741676

1677+
Lemma measurable_natmul {R : realType} D n :
1678+
measurable_fun D ((@GRing.natmul R)^~ n).
1679+
Proof.
1680+
under eq_fun do rewrite -mulr_natr.
1681+
by do 2 apply: measurable_funM => //.
1682+
Qed.
1683+
1684+
Lemma measurable_fun_pow {R : realType} D (f : R -> R) n : measurable_fun D f ->
1685+
measurable_fun D (fun x => f x ^+ n).
1686+
Proof.
1687+
move=> mf.
1688+
exact: (@measurable_comp _ _ _ _ _ _ setT (fun x : R => x ^+ n) _ f).
1689+
Qed.
1690+
16751691
Lemma measurable_powR (R : realType) p :
16761692
measurable_fun [set: R] (@powR R ^~ p).
16771693
Proof.
16781694
apply: measurable_fun_if => //.
1679-
- apply: (measurable_fun_bool true); rewrite (_ : _ @^-1` _ = [set 0])//.
1695+
- apply: (measurable_fun_bool true).
1696+
rewrite (_ : _ @^-1` _ = [set 0]) ?setTI//.
16801697
by apply/seteqP; split => [_ /eqP ->//|_ -> /=]; rewrite eqxx.
16811698
- rewrite setTI; apply: measurableT_comp => //.
16821699
rewrite (_ : _ @^-1` _ = [set~ 0]); first exact: measurableT_comp.
@@ -1760,9 +1777,7 @@ move=> mf;rewrite (_ : er_map _ =
17601777
fun x => if x \is a fin_num then (f (fine x))%:E else x); last first.
17611778
by apply: funext=> -[].
17621779
apply: measurable_fun_ifT => //=.
1763-
+ apply: (measurable_fun_bool true).
1764-
rewrite /preimage/= -[X in measurable X]setTI.
1765-
exact/emeasurable_fin_num.
1780+
+ by apply: (measurable_fun_bool true); exact/emeasurable_fin_num.
17661781
+ exact/EFin_measurable_fun/measurableT_comp.
17671782
Qed.
17681783
#[deprecated(since="mathcomp-analysis 0.6.3", note="renamed `measurable_er_map`")]
@@ -1779,7 +1794,7 @@ Lemma measurable_fun_einfs D (f : (T -> \bar R)^nat) :
17791794
Proof.
17801795
move=> mf n mD.
17811796
apply: (measurability (ErealGenCInfty.measurableE R)) => //.
1782-
move=> _ [_ [x ->] <-]; rewrite einfs_preimage -bigcapIr; last by exists n => /=.
1797+
move=> _ [_ [x ->] <-]; rewrite einfs_preimage -bigcapIr; last by exists n =>/=.
17831798
by apply: bigcap_measurable => ? ?; exact/mf/emeasurable_itv.
17841799
Qed.
17851800

0 commit comments

Comments
 (0)