Skip to content

Commit 801a8a0

Browse files
committed
improvements
1 parent 2e455f8 commit 801a8a0

File tree

5 files changed

+408
-293
lines changed

5 files changed

+408
-293
lines changed

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 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
@@ -1968,15 +1968,30 @@ 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+
Proof.
1976+
move=> h0 mh.
1977+
move=> mD; move: (mD).
1978+
apply/(@measurable_restrict _ _ _ _ _ setT) => //.
1979+
rewrite [X in measurable_fun _ X](_ : _ =
1980+
(fun x => \sum_(0 <= i <oo | i \in P) (h i \_ D) x)); last first.
1981+
apply/funext => x/=; rewrite /patch; case: ifPn => // xD.
1982+
by rewrite eseries0.
1983+
rewrite [X in measurable_fun _ X](_ : _ =
1984+
(fun x => limn_esup (fun n => \sum_(0 <= i < n | P i) (h i) \_ D x))); last first.
19771985
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.
1986+
apply: is_cvg_nneseries_cond => n Pn; rewrite patchE.
1987+
by case: ifPn => // xD; rewrite h0//; exact/set_mem.
1988+
apply: measurable_fun_limn_esup => k.
1989+
under eq_fun do rewrite big_mkcond.
1990+
apply: emeasurable_fun_sum => n.
1991+
have [|] := boolP (n \in P).
1992+
rewrite /in_mem/= => Pn; rewrite Pn.
1993+
by apply/(measurable_restrict (h n)) => //; exact: mh.
1994+
by rewrite /in_mem/= => /negbTE ->.
19801995
Qed.
19811996

19821997
Lemma emeasurable_funB D f g :
@@ -5261,7 +5276,7 @@ rewrite ge0_integralZl//; last by rewrite lee_fin.
52615276
- by move=> y _; rewrite lee_fin.
52625277
Qed.
52635278

5264-
Lemma sfun_measurable_fun_fubini_tonelli_F : measurable_fun setT F.
5279+
Lemma sfun_measurable_fun_fubini_tonelli_F : measurable_fun [set: T1] F.
52655280
Proof.
52665281
rewrite sfun_fubini_tonelli_FE//; apply: emeasurable_fun_fsum => // r.
52675282
exact/measurable_funeM/measurable_fun_xsection.
@@ -5702,8 +5717,8 @@ transitivity (\sum_(n <oo) \int[s1 n]_x \sum_(m <oo) \int[s2 m]_y f (x, y)).
57025717
fun x => \sum_(n <oo) \int[s2 n]_y f (x, y)); last first.
57035718
apply/funext => x.
57045719
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.
5720+
apply: ge0_emeasurable_fun_sum; first by move=> k x *; exact: integral_ge0.
5721+
by move=> k _; exact: measurable_fun_fubini_tonelli_F.
57075722
apply: eq_eseriesr => n _; apply: eq_integral => x _.
57085723
by rewrite ge0_integral_measure_series//; exact/measurableT_comp.
57095724
transitivity (\sum_(n <oo) \sum_(m <oo) \int[s1 n]_x \int[s2 m]_y f (x, y)).

theories/lebesgue_measure.v

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,6 +1577,20 @@ move=> mf mg mD Y mY; have [| | |] := set_bool Y => /eqP ->.
15771577
- by rewrite preimage_setT setIT.
15781578
Qed.
15791579

1580+
Lemma measurable_fun_ler D f g : measurable_fun D f -> measurable_fun D g ->
1581+
measurable_fun D (fun x => f x <= g x).
1582+
Proof.
1583+
move=> mf mg mD Y mY; have [| | |] := set_bool Y => /eqP ->.
1584+
- under eq_fun do rewrite -subr_ge0.
1585+
rewrite preimage_true -preimage_itv_c_infty.
1586+
by apply: (measurable_funB mg mf) => //; exact: measurable_itv.
1587+
- under eq_fun do rewrite leNgt -subr_gt0.
1588+
rewrite preimage_false set_predC setCK -preimage_itv_o_infty.
1589+
by apply: (measurable_funB mf mg) => //; exact: measurable_itv.
1590+
- by rewrite preimage_set0 setI0.
1591+
- by rewrite preimage_setT setIT.
1592+
Qed.
1593+
15801594
Lemma measurable_maxr D f g :
15811595
measurable_fun D f -> measurable_fun D g -> measurable_fun D (f \max g).
15821596
Proof.

theories/measure.v

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,6 +1177,36 @@ have [-> _|-> _|-> _ |-> _] := subset_set2 YT.
11771177
- by rewrite -setT_bool preimage_setT setIT.
11781178
Qed.
11791179

1180+
Lemma measurable_fun_TF D (f : T1 -> bool) :
1181+
measurable (D `&` f @^-1` [set true]) ->
1182+
measurable (D `&` f @^-1` [set false]) ->
1183+
measurable_fun D f.
1184+
Proof.
1185+
move=> mT mF mD /= Y mY.
1186+
have := @subsetT _ Y; rewrite setT_bool => YT.
1187+
move: mY; have [-> _|-> _|-> _ |-> _] := subset_set2 YT.
1188+
- by rewrite preimage0 ?setI0.
1189+
- exact: mT.
1190+
- exact: mF.
1191+
- by rewrite -setT_bool preimage_setT setIT.
1192+
Qed.
1193+
1194+
Lemma measurable_and D (f : T1 -> bool) (g : T1 -> bool) :
1195+
measurable_fun D f -> measurable_fun D g ->
1196+
measurable_fun D (fun x => f x && g x).
1197+
Proof.
1198+
move=> mf mg mD; apply: measurable_fun_TF => //.
1199+
- rewrite [X in measurable X](_ : _ = D `&` f @^-1` [set true] `&`
1200+
(D `&` g @^-1` [set true])); last first.
1201+
by rewrite setIACA setIid; congr (_ `&` _); apply/seteqP; split => x /andP.
1202+
by apply: measurableI; [exact: mf|exact: mg].
1203+
- rewrite [X in measurable X](_ : _ = D `&` f @^-1` [set false] `|`
1204+
(D `&` g @^-1` [set false])); last first.
1205+
rewrite -setIUr; congr (_ `&` _).
1206+
by apply/seteqP; split => x /=; case: (f x); case: (g x); tauto.
1207+
- by apply: measurableU; [exact: mf|exact: mg].
1208+
Qed.
1209+
11801210
End measurable_fun.
11811211
#[global] Hint Extern 0 (measurable_fun _ (fun=> _)) =>
11821212
solve [apply: measurable_cst] : core.

0 commit comments

Comments
 (0)