Skip to content

Commit e8ee334

Browse files
committed
shorter measurability proofs
1 parent 5f48ff4 commit e8ee334

File tree

3 files changed

+78
-87
lines changed

3 files changed

+78
-87
lines changed

theories/kernel.v

Lines changed: 2 additions & 2 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 _ :=
@@ -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

theories/lebesgue_integral.v

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,15 +1968,29 @@ move=> fs mh; under eq_fun do rewrite fsbig_finite//.
19681968
exact: emeasurable_fun_sum.
19691969
Qed.
19701970

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

19821996
Lemma emeasurable_funB D f g :
@@ -5702,8 +5716,8 @@ transitivity (\sum_(n <oo) \int[s1 n]_x \sum_(m <oo) \int[s2 m]_y f (x, y)).
57025716
fun x => \sum_(n <oo) \int[s2 n]_y f (x, y)); last first.
57035717
apply/funext => x.
57045718
by rewrite ge0_integral_measure_series//; exact/measurableT_comp.
5705-
apply: ge0_emeasurable_fun_sum; first by move=> k x; exact: integral_ge0.
5706-
by move=> k; apply: measurable_fun_fubini_tonelli_F.
5719+
apply: ge0_emeasurable_fun_sum; first by move=> k x *; exact: integral_ge0.
5720+
by move=> k _; apply: measurable_fun_fubini_tonelli_F.
57075721
apply: eq_eseriesr => n _; apply: eq_integral => x _.
57085722
by rewrite ge0_integral_measure_series//; exact/measurableT_comp.
57095723
transitivity (\sum_(n <oo) \sum_(m <oo) \int[s1 n]_x \int[s2 m]_y f (x, y)).

theories/prob_lang.v

Lines changed: 52 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@ Definition dep_uncurry (A : Type) (B : A -> Type) (C : Type) :
115115
(forall a : A, B a -> C) -> {a : A & B a} -> C :=
116116
fun f p => let (a, Ba) := p in f a Ba.
117117

118+
(* TODO: move *)
119+
Lemma measurable_natmul {R : realType} D n :
120+
measurable_fun D ((@GRing.natmul R)^~ n).
121+
Proof.
122+
under eq_fun do rewrite -mulr_natr.
123+
by do 2 apply: measurable_funM => //.
124+
Qed.
125+
118126
Section bernoulli_pmf.
119127
Context {R : realType} (p : R).
120128
Local Open Scope ring_scope.
@@ -136,6 +144,12 @@ Qed.
136144

137145
End bernoulli_pmf.
138146

147+
Lemma measurable_bernoulli_pmf {R : realType} D n :
148+
measurable_fun D (@bernoulli_pmf R ^~ n).
149+
Proof.
150+
by apply/measurable_funTS/measurable_fun_if => //=; exact: measurable_funB.
151+
Qed.
152+
139153
Definition bernoulli {R : realType} (p : R) : set bool -> \bar R := fun A =>
140154
if (0 <= p <= 1)%R then \sum_(b \in A) (bernoulli_pmf p b)%:E else \d_false A.
141155

@@ -243,33 +257,18 @@ Proof.
243257
apply: (@measurability _ _ _ _ _ _
244258
(@pset _ _ _ : set (set (pprobability _ R)))) => //.
245259
move=> _ -[_ [r r01] [Ys mYs <-]] <-; apply: emeasurable_fun_infty_o => //=.
246-
rewrite /bernoulli; have := @subsetT _ Ys; rewrite setT_bool => UT.
247-
have [->|->|->|->] /= := subset_set2 UT.
248-
- rewrite [X in measurable_fun _ X](_ : _ = cst 0%E)//.
249-
by apply/funext => x/=; case: ifPn => // _; rewrite fsbig_set0.
250-
- rewrite [X in measurable_fun _ X](_ : _ =
251-
(fun x => if 0 <= x <= 1 then x%:E else 0%E))//.
252-
apply: measurable_fun_ifT => //=; apply: measurable_and => //;
253-
apply: (measurable_fun_bool true) => //=.
254-
rewrite (_ : _ @^-1` _ = `[0, +oo[%classic)//.
255-
by apply/seteqP; split => [x|x] /=; rewrite in_itv/= andbT.
256-
by rewrite (_ : _ @^-1` _ = `]-oo, 1]%classic).
257-
apply/funext => x/=; case: ifPn => /= x01.
258-
by rewrite fsbig_set1//= lee_fin; case/andP : x01.
259-
by rewrite diracE memNset//.
260-
- rewrite [X in measurable_fun _ X](_ : _ =
261-
(fun x => if 0 <= x <= 1 then (`1-x)%:E else 1%E))//.
262-
apply: measurable_fun_ifT => //=.
263-
apply: measurable_and => //; apply: (measurable_fun_bool true) => //=.
264-
rewrite (_ : _ @^-1` _ = `[0, +oo[%classic)//.
265-
by apply/seteqP; split => [x|x] /=; rewrite in_itv/= andbT.
266-
by rewrite (_ : _ @^-1` _ = `]-oo, 1]%classic).
267-
exact/EFin_measurable_fun/measurable_funB.
268-
apply/funext => x/=; case: ifPn => /= x01.
269-
by rewrite fsbig_set1//= lee_fin subr_ge0; case/andP : x01.
270-
by rewrite diracE mem_set.
271-
- rewrite [X in measurable_fun _ X](_ : _ = cst 1%E)//; apply/funext => x/=.
272-
by rewrite -setT_bool diracT; case: ifPn => // x01; rewrite bernoulli_pmf1.
260+
apply: measurable_fun_if => //=.
261+
apply: measurable_and => //; apply: (measurable_fun_bool true) => //=.
262+
rewrite (_ : _ @^-1` _ = `[0, +oo[%classic)//.
263+
by apply/seteqP; split => [x|x] /=; rewrite in_itv/= andbT.
264+
by rewrite (_ : _ @^-1` _ = `]-oo, 1]%classic).
265+
apply: (eq_measurable_fun (fun t =>
266+
\sum_(b <- fset_set Ys) (bernoulli_pmf t b)%:E)).
267+
move=> x /set_mem[_/= x01].
268+
by rewrite fsbig_finite//=.
269+
apply: emeasurable_fun_sum => n.
270+
move=> k Ysk; apply/measurableT_comp => //.
271+
exact: measurable_bernoulli_pmf.
273272
Qed.
274273

275274
Lemma measurable_bernoulli2 U : measurable U ->
@@ -296,6 +295,15 @@ Qed.
296295

297296
End binomial_pmf.
298297

298+
Lemma measurable_binomial_pmf {R : realType} D n k :
299+
measurable_fun D (@binomial_pmf R n ^~ k).
300+
Proof.
301+
apply: (@measurableT_comp _ _ _ _ _ _ (fun x : R => x *+ 'C(n, k))%R) => /=.
302+
exact: measurable_natmul.
303+
apply: measurable_funM => //=; apply: measurable_fun_pow.
304+
exact: measurable_funB.
305+
Qed.
306+
299307
Definition binomial_prob {R : realType} (n : nat) (p : R) : set nat -> \bar R :=
300308
fun U => if (0 <= p <= 1)%R then
301309
\esum_(k in U) (binomial_pmf n p k)%:E else \d_O U.
@@ -432,9 +440,6 @@ rewrite addeC -ge0_sume_distrl.
432440
by apply/mulrn_wge0/mulr_ge0; apply/exprn_ge0 => //; exact/onem_ge0.
433441
Qed.
434442

435-
Lemma sumbool_ler {R : realDomainType} (x y : R) : (x <= y)%R + (x > y)%R.
436-
Proof. by have [_|_] := leP x y; [exact: inl|exact: inr]. Qed.
437-
438443
Section binomial_total.
439444
Local Open Scope ring_scope.
440445
Variables (R : realType) (n : nat).
@@ -448,48 +453,20 @@ apply: (@measurability _ _ _ _ _ _
448453
move=> _ -[_ [r r01] [Ys mYs <-]] <-; apply: emeasurable_fun_infty_o => //=.
449454
rewrite /binomial_prob/=.
450455
set f := (X in measurable_fun _ X).
451-
rewrite (_ : f = fun x => if 0 <= x <= 1 then (\sum_(m < n.+1)
452-
if sumbool_ler 0 x is inl l0p then
453-
if sumbool_ler x 1 is inl lp1 then
454-
mscale (@bin_prob _ n _ l0p lp1 m) (\d_(nat_of_ord m)) Ys
455-
else
456-
(x ^+ m * `1-x ^+ (n - m) *+ 'C(n, m))%:E * \d_(nat_of_ord m) Ys
457-
else (x ^+ m * `1-x ^+ (n - m) *+ 'C(n, m))%:E * \d_(nat_of_ord m) Ys)%E
458-
else \d_0%N Ys)//.
459-
apply: measurable_fun_ifT => //=.
460-
apply: measurable_and => //; apply: (measurable_fun_bool true) => //=.
461-
rewrite (_ : _ @^-1` _ = `[0, +oo[%classic)//.
462-
by apply/seteqP; split => [x|x] /=; rewrite in_itv/= andbT.
463-
by rewrite (_ : _ @^-1` _ = `]-oo, 1]%classic).
464-
apply: emeasurable_fun_sum => m /=.
465-
rewrite /mscale/= [X in measurable_fun _ X](_ : _ = (fun x =>
466-
(x ^+ m * `1-x ^+ (n - m) *+ 'C(n, m))%:E * \d_(nat_of_ord m) Ys)%E); last first.
467-
by apply:funext => x; case: sumbool_ler => // x0; case: sumbool_ler.
468-
apply: emeasurable_funM => //; apply/EFin_measurable_fun => //.
469-
under eq_fun do rewrite -mulr_natr.
470-
do 2 apply: measurable_funM => //.
471-
exact/measurable_fun_pow/measurable_funB.
472-
rewrite {}/f; apply/funext => x.
473-
case: ifPn => // /andP[x0 x1].
474-
rewrite (esumID `I_n.+1)//; last first.
475-
by move=> k _; rewrite lee_fin// binomial_pmf_ge0// x0.
476-
rewrite [X in (_ + X)%E]esum1 ?adde0; last first.
477-
by move=> k [_ /= /negP]; rewrite -leqNgt => nk; rewrite /binomial_pmf bin_small.
478-
rewrite esum_mkcondl esum_fset//=; last first.
479-
move=> k; rewrite inE/= ltnS => kn.
480-
by case: ifPn => // _; rewrite lee_fin binomial_pmf_ge0// x0.
481-
rewrite -fsbig_ord//=; apply: eq_bigr => i _.
482-
case: ifPn => iYs.
483-
case: sumbool_ler => //= x0'.
484-
case: sumbool_ler => //= x1'.
485-
by rewrite /mscale/= /binomial_pmf diracE iYs mule1.
486-
by move: x1'; rewrite ltNge x1.
487-
by move: x0'; rewrite ltNge x0.
488-
case: sumbool_ler => //= x0'.
489-
case: sumbool_ler => //= x1'.
490-
by rewrite /mscale/= /binomial_pmf diracE (negbTE iYs) mule0.
491-
by move: x1'; rewrite ltNge x1.
492-
by move: x0'; rewrite ltNge x0.
456+
apply: measurable_fun_if => //=.
457+
apply: measurable_and => //; apply: (measurable_fun_bool true) => //=.
458+
rewrite (_ : _ @^-1` _ = `[0, +oo[%classic)//.
459+
by apply/seteqP; split => [x|x] /=; rewrite in_itv/= andbT.
460+
by rewrite (_ : _ @^-1` _ = `]-oo, 1]%classic).
461+
apply: (eq_measurable_fun (fun t =>
462+
\sum_(k <oo | k \in Ys) (binomial_pmf n t k)%:E)).
463+
move=> x /set_mem[_/= x01].
464+
rewrite nneseries_esum// -1?[in RHS](set_mem_set Ys)// => k kYs.
465+
by rewrite lee_fin binomial_pmf_ge0.
466+
apply: ge0_emeasurable_fun_sum.
467+
by move=> k x/= [_ x01] _; rewrite lee_fin binomial_pmf_ge0.
468+
move=> k Ysk; apply/measurableT_comp => //.
469+
exact: measurable_binomial_pmf.
493470
Qed.
494471

495472
End binomial_total.
@@ -1998,9 +1975,9 @@ Context d d' d1 d2 d3 (X : measurableType d) (Y : measurableType d')
19981975
(R : realType).
19991976
Import Notations.
20001977
Variables (t : R.-sfker X ~> T1)
2001-
(u : R.-sfker [the measurableType _ of (X * T1)%type] ~> T2)
2002-
(v : R.-sfker [the measurableType _ of (X * T2)%type] ~> Y)
2003-
(v' : R.-sfker [the measurableType _ of (X * T1 * T2)%type] ~> Y)
1978+
(u : R.-sfker (X * T1) ~> T2)
1979+
(v : R.-sfker (X * T2) ~> Y)
1980+
(v' : R.-sfker (X * T1 * T2) ~> Y)
20041981
(vv' : forall y, v =1 fun xz => v' (xz.1, y, xz.2)).
20051982

20061983
Lemma letinA x A : measurable A ->

0 commit comments

Comments
 (0)