Skip to content

Commit 39d2a9d

Browse files
committed
letinA
1 parent e78f1ab commit 39d2a9d

File tree

2 files changed

+69
-201
lines changed

2 files changed

+69
-201
lines changed

theories/kernel.v

Lines changed: 23 additions & 193 deletions
Original file line numberDiff line numberDiff line change
@@ -41,71 +41,7 @@ Local Open Scope classical_set_scope.
4141
Local Open Scope ring_scope.
4242
Local Open Scope ereal_scope.
4343

44-
(* PR 516 in progress *)
45-
HB.mixin Record isProbability d (T : measurableType d)
46-
(R : realType) (P : set T -> \bar R) of isMeasure d R T P :=
47-
{ probability_setT : P setT = 1%E }.
48-
49-
#[short(type=probability)]
50-
HB.structure Definition Probability d (T : measurableType d) (R : realType) :=
51-
{P of isProbability d T R P & isMeasure d R T P }.
52-
53-
Section probability_lemmas.
54-
Context d (T : measurableType d) (R : realType) (P : probability T R).
55-
56-
Lemma probability_le1 (A : set T) : measurable A -> (P A <= 1)%E.
57-
Proof.
58-
move=> mA; rewrite -(@probability_setT _ _ _ P).
59-
by apply: le_measure => //; rewrite ?in_setE.
60-
Qed.
61-
62-
End probability_lemmas.
63-
(* /PR 516 in progress *)
64-
6544
(* TODO: PR*)
66-
Lemma setT0 (T : pointedType) : setT != set0 :> set T.
67-
Proof. by apply/eqP => /seteqP[] /(_ point) /(_ Logic.I). Qed.
68-
69-
Lemma set_unit (A : set unit) : A = set0 \/ A = setT.
70-
Proof.
71-
have [->|/set0P[[] Att]] := eqVneq A set0; [by left|right].
72-
by apply/seteqP; split => [|] [].
73-
Qed.
74-
75-
Lemma set_boolE (B : set bool) : [\/ B == [set true], B == [set false], B == set0 | B == setT].
76-
Proof.
77-
have [Bt|Bt] := boolP (true \in B).
78-
have [Bf|Bf] := boolP (false \in B).
79-
have -> : B = setT.
80-
by apply/seteqP; split => // -[] _; [rewrite inE in Bt| rewrite inE in Bf].
81-
by apply/or4P; rewrite eqxx/= !orbT.
82-
have -> : B = [set true].
83-
apply/seteqP; split => -[]//=.
84-
by rewrite notin_set in Bf.
85-
by rewrite inE in Bt.
86-
by apply/or4P; rewrite eqxx.
87-
have [Bf|Bf] := boolP (false \in B).
88-
have -> : B = [set false].
89-
apply/seteqP; split => -[]//=.
90-
by rewrite notin_set in Bt.
91-
by rewrite inE in Bf.
92-
by apply/or4P; rewrite eqxx/= orbT.
93-
have -> : B = set0.
94-
apply/seteqP; split => -[]//=.
95-
by rewrite notin_set in Bt.
96-
by rewrite notin_set in Bf.
97-
by apply/or4P; rewrite eqxx/= !orbT.
98-
Qed.
99-
100-
Lemma xsection_preimage_snd (X Y Z : Type) (f : Y -> Z) (A : set Z) (x : X) :
101-
xsection ((f \o snd) @^-1` A) x = f @^-1` A.
102-
Proof. by apply/seteqP; split; move=> y/=; rewrite /xsection/= inE. Qed.
103-
104-
Lemma measurable_curry (T1 T2 : Type) d (T : semiRingOfSetsType d)
105-
(G : T1 * T2 -> set T) (x : T1 * T2) :
106-
measurable (G x) <-> measurable (curry G x.1 x.2).
107-
Proof. by case: x. Qed.
108-
10945
Lemma emeasurable_itv1 (R : realType) (i : nat) :
11046
measurable (`[(i%:R)%:E, (i.+1%:R)%:E[%classic : set \bar R).
11147
Proof.
@@ -117,109 +53,6 @@ apply: measurableU.
11753
exact: emeasurable_itv_bnd_pinfty.
11854
Qed.
11955

120-
Lemma measurable_fun_fst d1 d2 (T1 : measurableType d1)
121-
(T2 : measurableType d2) : measurable_fun setT (@fst T1 T2).
122-
Proof.
123-
by have /prod_measurable_funP[] := @measurable_fun_id _ [the measurableType _ of (T1 * T2)%type] setT.
124-
Qed.
125-
126-
Lemma measurable_fun_snd d1 d2 (T1 : measurableType d1)
127-
(T2 : measurableType d2) : measurable_fun setT (@snd T1 T2).
128-
Proof.
129-
by have /prod_measurable_funP[] := @measurable_fun_id _ [the measurableType _ of (T1 * T2)%type] setT.
130-
Qed.
131-
132-
Definition swap (T1 T2 : Type) (x : T1 * T2) := (x.2, x.1).
133-
134-
Lemma measurable_fun_swap d d' (X : measurableType d) (Y : measurableType d') :
135-
measurable_fun [set: X * Y] (@swap X Y).
136-
Proof.
137-
by apply/prod_measurable_funP => /=; split;
138-
[exact: measurable_fun_snd|exact: measurable_fun_fst].
139-
Qed.
140-
141-
Section measurable_fun_pair.
142-
Context d d2 d3 (X : measurableType d) (Y : measurableType d2)
143-
(Z : measurableType d3).
144-
145-
Lemma measurable_fun_pair (f : X -> Y) (g : X -> Z) :
146-
measurable_fun setT f -> measurable_fun setT g ->
147-
measurable_fun setT (fun x => (f x, g x)).
148-
Proof. by move=> mf mg; apply/prod_measurable_funP. Qed.
149-
150-
End measurable_fun_pair.
151-
152-
Section measurable_fun_comp.
153-
Context d1 d2 d3 (T1 : measurableType d1)
154-
(T2 : measurableType d2) (T3 : measurableType d3).
155-
156-
(* NB: this generalizes MathComp-Analysis' measurable_fun_comp *)
157-
Lemma measurable_fun_comp' F (f : T2 -> T3) E (g : T1 -> T2) :
158-
measurable F ->
159-
g @` E `<=` F ->
160-
measurable_fun F f -> measurable_fun E g -> measurable_fun E (f \o g).
161-
Proof.
162-
move=> mF FgE mf mg /= mE A mA.
163-
rewrite comp_preimage.
164-
rewrite [X in measurable X](_ : _ = E `&` g @^-1` (F `&` f @^-1` A)); last first.
165-
apply/seteqP; split=> [|? [?] []//].
166-
by move=> x/= [Ex Afgx]; split => //; split => //; exact: FgE.
167-
by apply/mg => //; exact: mf.
168-
Qed.
169-
170-
End measurable_fun_comp.
171-
172-
Lemma measurable_fun_if_pair d d' (X : measurableType d)
173-
(Y : measurableType d') (x y : X -> Y) :
174-
measurable_fun setT x -> measurable_fun setT y ->
175-
measurable_fun setT (fun tb => if tb.2 then x tb.1 else y tb.1).
176-
Proof.
177-
move=> mx my.
178-
have {}mx : measurable_fun [set: X * bool] (x \o fst).
179-
by apply: measurable_fun_comp => //; exact: measurable_fun_fst.
180-
have {}my : measurable_fun [set: X * bool] (y \o fst).
181-
by apply: measurable_fun_comp => //; exact: measurable_fun_fst.
182-
by apply: measurable_fun_ifT => //=; exact: measurable_fun_snd.
183-
Qed.
184-
185-
Lemma measurable_fun_opp (R : realType) : measurable_fun [set: R] -%R.
186-
Proof.
187-
apply: continuous_measurable_fun.
188-
by have := @opp_continuous R [the normedModType R of R^o].
189-
Qed.
190-
191-
Lemma integral_eq0 d (T : measurableType d) (R : realType)
192-
(mu : {measure set T -> \bar R}) (D : set T) f :
193-
(forall x, D x -> f x = 0) -> \int[mu]_(x in D) f x = 0.
194-
Proof.
195-
move=> f0; under eq_integral.
196-
by move=> x /[1!inE] /f0 ->; over.
197-
by rewrite integral0.
198-
Qed.
199-
200-
Lemma dirac0 d (T : measurableType d) (R : realFieldType) (a : T) :
201-
\d_a set0 = 0%E :> \bar R.
202-
Proof. by rewrite /dirac indic0. Qed.
203-
204-
Lemma diracT d (T : measurableType d) (R : realFieldType) (a : T) :
205-
\d_a setT = 1%E :> \bar R.
206-
Proof. by rewrite /dirac indicT. Qed.
207-
208-
Section fubini_tonelli.
209-
Local Open Scope ereal_scope.
210-
Context d1 d2 (T1 : measurableType d1) (T2 : measurableType d2) (R : realType).
211-
Variables (m1 : {measure set T1 -> \bar R}) (m2 : {measure set T2 -> \bar R}).
212-
Hypotheses (sm1 : sigma_finite setT m1) (sm2 : sigma_finite setT m2).
213-
Variables (f : T1 * T2 -> \bar R) (f0 : forall xy, 0 <= f xy).
214-
Variables (mf : measurable_fun setT f).
215-
216-
Lemma fubini_tonelli :
217-
\int[m1]_x \int[m2]_y f (x, y) = \int[m2]_y \int[m1]_x f (x, y).
218-
Proof. by rewrite -fubini_tonelli1// fubini_tonelli2. Qed.
219-
220-
End fubini_tonelli.
221-
(* /TODO: PR *)
222-
22356
Definition sfinite_measure d (T : measurableType d) (R : realType)
22457
(mu : set T -> \bar R) :=
22558
exists2 s : {measure set T -> \bar R}^nat,
@@ -684,10 +517,10 @@ Lemma measurable_fun_xsection_integral
684517
Proof.
685518
move=> h.
686519
rewrite (_ : (fun x => _) =
687-
(fun x => elim_sup (fun n => \int[l x]_y (k_ n (x, y))%:E))); last first.
520+
(fun x => lim_esup (fun n => \int[l x]_y (k_ n (x, y))%:E))); last first.
688521
apply/funext => x.
689522
transitivity (lim (fun n => \int[l x]_y (k_ n (x, y))%:E)); last first.
690-
rewrite is_cvg_elim_supE//.
523+
rewrite is_cvg_lim_esupE//.
691524
apply: ereal_nondecreasing_is_cvg => m n mn.
692525
apply: ge0_le_integral => //.
693526
- by move=> y _; rewrite lee_fin.
@@ -711,7 +544,7 @@ rewrite [X in measurable_fun _ X](_ : _ = (fun x => \sum_(r \in range (k_ n))
711544
- by apply: eq_integral => y _; rewrite -fsumEFin.
712545
- move=> r.
713546
apply/EFin_measurable_fun/measurable_funrM/measurable_fun_prod1 => /=.
714-
rewrite (_ : \1_ _ = mindic R (measurable_sfunP (k_ n) r))//.
547+
rewrite (_ : \1_ _ = mindic R (measurable_sfunP (k_ n) (measurable_set1 r)))//.
715548
exact/measurable_funP.
716549
- by move=> m y _; rewrite nnfun_muleindic_ge0.
717550
apply: emeasurable_fun_fsum => // r.
@@ -721,11 +554,11 @@ rewrite [X in measurable_fun _ X](_ : _ = (fun x => r%:E *
721554
have [r0|r0] := leP 0%R r.
722555
rewrite ge0_integralM//; last by move=> y _; rewrite lee_fin.
723556
apply/EFin_measurable_fun/measurable_fun_prod1 => /=.
724-
rewrite (_ : \1_ _ = mindic R (measurable_sfunP (k_ n) r))//.
557+
rewrite (_ : \1_ _ = mindic R (measurable_sfunP (k_ n) (measurable_set1 r)))//.
725558
exact/measurable_funP.
726-
rewrite integral_eq0; last first.
559+
rewrite integral0_eq; last first.
727560
by move=> y _; rewrite preimage_nnfun0// indic0 mule0.
728-
by rewrite integral_eq0 ?mule0// => y _; rewrite preimage_nnfun0// indic0.
561+
by rewrite integral0_eq ?mule0// => y _; rewrite preimage_nnfun0// indic0.
729562
apply/measurable_funeM.
730563
rewrite (_ : (fun x => _) = (fun x => l x (xsection (k_ n @^-1` [set r]) x))).
731564
exact/h.
@@ -788,7 +621,7 @@ Let measurable_fun_kdirac U : measurable U ->
788621
measurable_fun setT (kdirac mf ^~ U).
789622
Proof.
790623
move=> mU; apply/EFin_measurable_fun.
791-
by rewrite (_ : (fun x => _) = mindic R mU \o f)//; exact/measurable_fun_comp.
624+
by rewrite (_ : (fun x => _) = mindic R mU \o f)//; exact/measurable_funT_comp.
792625
Qed.
793626

794627
HB.instance Definition _ := isKernel.Build _ _ _ _ _ (kdirac mf)
@@ -832,7 +665,8 @@ Qed.
832665
Definition pset : set (set (probability T R)) :=
833666
[set mset U r | r in `[0%R,1%R] & U in measurable].
834667

835-
Definition pprobability : measurableType pset.-sigma := [the measurableType _ of salgebraType pset].
668+
Definition pprobability : measurableType pset.-sigma :=
669+
[the measurableType _ of salgebraType pset].
836670

837671
End dist_salgebra_instance.
838672

@@ -904,12 +738,8 @@ exists (fun n => [the _.-ker _ ~> _ of kadd (f1 n) (f2 n)]).
904738
exists (r1 + r2)%R => x/=.
905739
by rewrite /msum !big_ord_recr/= big_ord0 add0e EFinD lte_add.
906740
move=> x U mU.
907-
rewrite /kadd/=.
908-
rewrite -/(measure_add (k1 x) (k2 x)) measure_addE.
909-
rewrite /mseries.
910-
rewrite hk1//= hk2//= /mseries.
911-
rewrite -nneseriesD//.
912-
apply: eq_eseries => n _.
741+
rewrite /kadd/= -/(measure_add (k1 x) (k2 x)) measure_addE hk1//= hk2//=.
742+
rewrite /mseries -nneseriesD//; apply: eq_eseries => n _ /=.
913743
by rewrite -/(measure_add (f1 n x) (f2 n x)) measure_addE.
914744
Qed.
915745

@@ -963,7 +793,7 @@ Lemma measurable_fun_eq_cst d d' (T : measurableType d)
963793
measurable_fun setT (fun t => f t setT == k).
964794
Proof.
965795
move=> _ /= B mB; rewrite setTI.
966-
have [/eqP->|/eqP->|/eqP->|/eqP->] := set_boolE B.
796+
have [/eqP->|/eqP->|/eqP->|/eqP->] := set_bool B.
967797
- exact: measurable_eq_cst.
968798
- rewrite (_ : _ @^-1` _ = [set b | f b setT != k]); last first.
969799
by apply/seteqP; split => [t /negbT//|t /negbTE].
@@ -996,7 +826,7 @@ case: ifPn => [_|_]; first exact: measure_semi_sigma_additive.
996826
rewrite (_ : (fun _ => _) = ((fun n => \sum_(0 <= i < n) f x (F i)) \*
997827
cst ((fine (f x setT))^-1)%:E)); last first.
998828
by apply/funext => n; rewrite -ge0_sume_distrl.
999-
by apply: ereal_cvgMr => //; exact: measure_semi_sigma_additive.
829+
by apply: cvgeMr => //; exact: measure_semi_sigma_additive.
1000830
Qed.
1001831

1002832
HB.instance Definition _ x := isMeasure.Build _ _ _ (mnormalize x)
@@ -1045,14 +875,14 @@ apply: measurable_fun_if => //.
1045875
- apply: emeasurable_funM.
1046876
by have := measurable_kernel f U mU; exact: measurable_funS.
1047877
apply/EFin_measurable_fun.
1048-
apply: (@measurable_fun_comp' _ _ _ _ _ _ [set r : R | r != 0%R]) => //.
878+
apply: (@measurable_fun_comp _ _ _ _ _ _ [set r : R | r != 0%R]) => //.
1049879
+ exact: open_measurable.
1050880
+ move=> /= r [t] [] [_ ft0] ftoo ftr; apply/eqP => r0.
1051881
move: (ftr); rewrite r0 => /eqP; rewrite fine_eq0 ?ft0//.
1052882
by rewrite ge0_fin_numE// lt_neqAle leey ftoo.
1053883
+ apply: open_continuous_measurable_fun => //; apply/in_setP => x /= x0.
1054884
exact: inv_continuous.
1055-
+ apply: measurable_fun_comp => /=; first exact: measurable_fun_fine.
885+
+ apply: measurable_funT_comp => /=; first exact: measurable_fun_fine.
1056886
by have := measurable_kernel f _ measurableT; exact: measurable_funS.
1057887
Qed.
1058888

@@ -1173,8 +1003,8 @@ Variable k : R.-sfker [the measurableType _ of (X * Y)%type] ~> Z.
11731003

11741004
Import KCOMP_FINITE_KERNEL.
11751005

1176-
Lemma mkcomp_sfinite : exists k_ : (R.-fker X ~> Z)^nat, forall x U, measurable U ->
1177-
(l \; k) x U = kseries k_ x U.
1006+
Lemma mkcomp_sfinite : exists k_ : (R.-fker X ~> Z)^nat,
1007+
forall x U, measurable U -> (l \; k) x U = kseries k_ x U.
11781008
Proof.
11791009
have [k_ hk_] := sfinite k; have [l_ hl_] := sfinite l.
11801010
have [kl hkl] : exists kl : (R.-fker X ~> Z) ^nat, forall x U,
@@ -1241,7 +1071,7 @@ Let k_2_ge0 n x : (0 <= k_2 n x)%R. Proof. by []. Qed.
12411071
HB.instance Definition _ n := @IsNonNegFun.Build _ _ _ (k_2_ge0 n).
12421072

12431073
Let mk_2 n : measurable_fun setT (k_2 n).
1244-
Proof. by apply: measurable_fun_comp => //; exact: measurable_fun_snd. Qed.
1074+
Proof. by apply: measurable_funT_comp => //; exact: measurable_fun_snd. Qed.
12451075

12461076
HB.instance Definition _ n := @IsMeasurableFun.Build _ _ _ _ (mk_2 n).
12471077

@@ -1322,7 +1152,7 @@ under [in RHS]eq_integral.
13221152
over.
13231153
rewrite /= ge0_integral_fsum//; last 2 first.
13241154
- move=> r; apply: measurable_funeM.
1325-
have := measurable_kernel k (f @^-1` [set r]) (measurable_sfunP f r).
1155+
have := measurable_kernel k (f @^-1` [set r]) (measurable_sfunP f (measurable_set1 r)).
13261156
by move=> /measurable_fun_prod1; exact.
13271157
- move=> n y _.
13281158
have := mulemu_ge0 (fun n => f @^-1` [set n]).
@@ -1333,12 +1163,12 @@ rewrite (integralM_indic _ (fun r => f @^-1` [set r]))//; last first.
13331163
rewrite /= integral_kcomp_indic; last exact/measurable_sfunP.
13341164
have [r0|r0] := leP 0%R r.
13351165
rewrite ge0_integralM//; last first.
1336-
have := measurable_kernel k (f @^-1` [set r]) (measurable_sfunP f r).
1166+
have := measurable_kernel k (f @^-1` [set r]) (measurable_sfunP f (measurable_set1 r)).
13371167
by move/measurable_fun_prod1; exact.
13381168
by congr (_ * _); apply eq_integral => y _; rewrite integral_indic// setIT.
1339-
rewrite integral_eq0 ?mule0; last first.
1340-
by move=> y _; rewrite integral_eq0// => z _; rewrite preimage_nnfun0// indic0.
1341-
by rewrite integral_eq0// => y _; rewrite preimage_nnfun0// measure0 mule0.
1169+
rewrite integral0_eq ?mule0; last first.
1170+
by move=> y _; rewrite integral0_eq// => z _; rewrite preimage_nnfun0// indic0.
1171+
by rewrite integral0_eq// => y _; rewrite preimage_nnfun0// measure0 mule0.
13421172
Qed.
13431173

13441174
Lemma integral_kcomp x f : (forall z, 0 <= f z) -> measurable_fun setT f ->

0 commit comments

Comments
 (0)