@@ -74,6 +74,17 @@ Reserved Notation "\X_ n P" (at level 10, n, P at next level,
7474Lemma norm_expR {R : realType} : normr \o expR = (expR : R -> R).
7575Proof . by apply/funext => x /=; rewrite ger0_norm ?expR_ge0. Qed .
7676
77+ Local Open Scope ereal_scope.
78+ Lemma abse_prod {R : realDomainType} [I : Type ] (r : seq I) (Q : pred I) (F : I -> \bar R) :
79+ `|\prod_(i <- r | Q i) F i| = (\prod_(i <- r | Q i) `|F i|).
80+ Proof .
81+ elim/big_ind2 : _ => //.
82+ by rewrite abse1.
83+ move=> x1 x2 ? ? <- <-.
84+ by rewrite abseM.
85+ Qed .
86+ Local Close Scope ereal_scope.
87+
7788(* TODO: put back in probability.v *)
7889Notation "'M_ X t" := (mmt_gen_fun X t).
7990
@@ -524,7 +535,7 @@ move: i => [] [i0|i im].
524535 by apply: eq_integral => x _; rewrite integral_cst//= probability_setT mule1.
525536rewrite [LHS](@integral_iproS _ _ _ _ m); last first.
526537 exact/Lfun1_integrable/tnth_Lfun/lfunFi/mem_tnth.
527- have jm : (i < m)%nat by rewrite ltnS in im.
538+ have jm : (i < m)%N by rewrite ltnS in im.
528539pose j := Ordinal jm.
529540have liftj : Ordinal im = lift ord0 j by exact: val_inj.
530541rewrite (tuple_eta F).
@@ -646,15 +657,6 @@ by rewrite M2g// (lt_le_trans _ (ler_norm _))// ltrDl.
646657Unshelve. all: by end_near.
647658Qed .
648659
649- Lemma abse_prod [I : Type ] (r : seq I) (Q : pred I) (F : I -> \bar R) :
650- `|\prod_(i <- r | Q i) F i| = (\prod_(i <- r | Q i) `|F i|).
651- Proof .
652- elim/big_ind2 : _ => //.
653- by rewrite abse1.
654- move=> x1 x2 ? ? <- <-.
655- by rewrite abseM.
656- Qed .
657-
658660Lemma expectation_ipro_prod n (X : n.-tuple {RV P >-> R}) :
659661 [set` X] `<=` Lfun P 1 ->
660662 'E_(\X_n P)[ \prod_(i < n) Tnth X i] = \prod_(i < n) 'E_P[ (tnth X i) ].
@@ -1150,51 +1152,57 @@ rewrite -mulrA (addrC c) mulrDl !mulrA opprD addrA.
11501152rewrite -[ltLHS]addr0 ltrD// ?sqrxB2xlnx_gt1// oppr_gt0.
11511153by rewrite nmulr_rlt0 ?ln_gt0// nmulr_rlt0 ?(lt_trans _ x1).
11521154Qed .
1155+
11531156End xlnx_bounding.
11541157
11551158(* [Theorem 2.6, Rajani] / [thm 4.5.(2), MU] *)
1156- Theorem sampling_ineq3 n (X : n.-tuple (bernoulliRV P p)) (delta : R) :
1159+ Theorem sampling_ineq3 n (X_ : n.-tuple (bernoulliRV P p)) (delta : R) :
11571160 (0 < delta < 1)%R ->
1158- let X' := bool_trial_value X : {RV \X_n P >-> R : realType} in
1159- let mu := 'E_(\X_n P)[X'] in
1160- (\X_n P) [set i | X' i <= (1 - delta) * fine mu]%R <= (expR (-(fine mu * delta ^+ 2) / 2)%R)%:E.
1161+ let X := bool_trial_value X_ : {RV \X_n P >-> R : realType} in
1162+ let mu := 'E_(\X_n P)[X] in
1163+ (\X_n P) [set i | X i <= (1 - delta) * fine mu]%R <=
1164+ (expR (-(fine mu * delta ^+ 2) / 2)%R)%:E.
11611165Proof .
11621166move=> /andP[delta0 delta1] /=.
1163- set X' := bool_trial_value X : {RV \X_n P >-> R : realType}.
1164- set mu := 'E_(\X_n P)[X' ].
1167+ set X := bool_trial_value X_ : {RV \X_n P >-> R : realType}.
1168+ set mu := 'E_(\X_n P)[X].
11651169have /andP[p0 p1] := p01.
1166- apply: (@le_trans _ _ (((expR (- delta) / ((1 - delta) `^ (1 - delta))) `^ (fine mu))%:E)).
1170+ apply: (@le_trans _ _
1171+ (((expR (- delta) / ((1 - delta) `^ (1 - delta))) `^ (fine mu))%:E)).
11671172 (* using Markov's inequality somewhere, see mu's book page 66 *)
11681173 have H1 t : (t < 0)%R ->
1169- (\X_n P) [set i | (X' i <= (1 - delta) * fine mu)%R] = (\X_n P) [set i | `|(expR \o t \o* X') i|%:E >= (expR (t * (1 - delta) * fine mu))%:E].
1174+ (\X_n P) [set i | (X i <= (1 - delta) * fine mu)%R] =
1175+ (\X_n P) [set i | `|(expR \o t \o* X) i|%:E >=
1176+ (expR (t * (1 - delta) * fine mu))%:E].
11701177 move=> t0; apply: congr1; apply: eq_set => x /=.
11711178 rewrite lee_fin ger0_norm ?expR_ge0// ler_expR (mulrC _ t) -mulrA.
11721179 by rewrite -[in RHS]ler_ndivrMl// mulrA mulVf ?lt_eqF// mul1r.
11731180 set t := ln (1 - delta).
11741181 have ln1delta : (t < 0)%R.
1175- (* TODO: lacking a lemma here *)
1176- rewrite -oppr0 ltrNr -lnV ?posrE ?subr_gt0// ln_gt0//.
1177- by rewrite invf_gt1// ?subr_gt0// ltrBlDr ltrDl.
1182+ by rewrite ln_lt0// subr_gt0 delta1/= ltrBlDl ltrDr.
11781183 have {H1}-> := H1 _ ln1delta.
1179- apply: (@le_trans _ _ ((fine 'E_(\X_n P)[normr \o expR \o t \o* X']) / (expR (t * (1 - delta) * fine mu)))%:E).
1184+ apply: (@le_trans _ _ ((fine 'E_(\X_n P)[normr \o expR \o t \o* X])
1185+ / (expR (t * (1 - delta) * fine mu)))%:E).
11801186 rewrite EFinM lee_pdivlMr ?expR_gt0// muleC fineK; last first.
11811187 rewrite norm_expR.
1182- have -> : 'E_(\X_n P)[expR \o t \o* X' ] = 'M_(\X_n P) X' t by [].
1188+ have -> : 'E_(\X_n P)[expR \o t \o* X] = 'M_(\X_n P) X t by [].
11831189 by rewrite binomial_mmt_gen_fun.
1184- apply: (@markov _ _ _ (\X_n P) (expR \o t \o* X' : {RV (\X_n P) >-> R : realType}) id (expR (t * (1 - delta) * fine mu))%R _ _ _ _) => //.
1185- by apply: expR_gt0.
1186- apply: (@le_trans _ _ (((expR ((expR t - 1) * fine mu)) / (expR (t * (1 - delta) * fine mu))))%:E).
1190+ apply: (@markov _ _ _ (\X_n P) (expR \o t \o* X) id
1191+ (expR (t * (1 - delta) * fine mu))%R _ _ _ _) => //.
1192+ exact: expR_gt0.
1193+ apply: (@le_trans _ _ ((expR ((expR t - 1) * fine mu))
1194+ / (expR (t * (1 - delta) * fine mu)))%:E).
11871195 rewrite norm_expR lee_fin ler_wpM2r ?invr_ge0 ?expR_ge0//.
1188- have -> : 'E_(\X_n P)[expR \o t \o* X' ] = 'M_(\X_n P) X' t by [].
1196+ have -> : 'E_(\X_n P)[expR \o t \o* X] = 'M_(\X_n P) X t by [].
11891197 rewrite binomial_mmt_gen_fun//.
1190- rewrite /mu /X' expectation_bernoulli_trial//.
1198+ rewrite /mu /X expectation_bernoulli_trial//.
11911199 rewrite !lnK ?posrE ?subr_gt0//.
11921200 rewrite expRM powRrM powRAC.
11931201 rewrite ge0_ler_powR ?ler0n// ?nnegrE ?powR_ge0//.
11941202 by rewrite addr_ge0 ?mulr_ge0// subr_ge0// ltW.
11951203 rewrite addrAC subrr sub0r -expRM.
11961204 rewrite addrCA -{2}(mulr1 p) -mulrBr addrAC subrr sub0r mulrC mulNr.
1197- by apply : expR_ge1Dx.
1205+ exact : expR_ge1Dx.
11981206 rewrite !lnK ?posrE ?subr_gt0//.
11991207 rewrite -addrAC subrr sub0r -mulrA [X in (_ / X)%R]expRM lnK ?posrE ?subr_gt0//.
12001208 rewrite -[in leRHS]powR_inv1 ?powR_ge0// powRM// ?expR_ge0 ?invr_ge0 ?powR_ge0//.
@@ -1233,7 +1241,7 @@ Proof. interval. Qed.
12331241
12341242Lemma exp2_le8_conversion : reflect (exp 2 <= 8)%R (expR 2 <= 8 :> R).
12351243Proof .
1236- rewrite RexpE (_ : 8%R = 8); last
1244+ rewrite RexpE (_ : 8%R = 8); last first.
12371245 by rewrite !mulrS -!RplusE Rplus_0_r !RplusA !IZRposE/=.
12381246by apply: (iffP idP) => /RleP.
12391247Qed .
@@ -1311,52 +1319,50 @@ Hypothesis p01 : (0 <= p <= 1)%R.
13111319Local Open Scope ereal_scope.
13121320
13131321(* [Theorem 2.5, Rajani] *)
1314- Theorem sampling_ineq2 n (X : n.-tuple (bernoulliRV P p)) (delta : R) :
1315- let X' := bool_trial_value X in
1316- let mu := 'E_(\X_n P)[X' ] in
1317- (0 < n)%nat ->
1322+ Theorem sampling_ineq2 n (X_ : n.-tuple (bernoulliRV P p)) (delta : R) :
1323+ let X := bool_trial_value X_ in
1324+ let mu := 'E_(\X_n P)[X] in
1325+ (0 < n)%N ->
13181326 (0 < delta < 1)%R ->
1319- (\X_n P) [set i | X' i >= (1 + delta) * fine mu]%R <=
1327+ (\X_n P) [set i | X i >= (1 + delta) * fine mu]%R <=
13201328 (expR (- (fine mu * delta ^+ 2) / 3))%:E.
13211329Proof .
1322- move=> X' mu n0 /[dup] delta01 /andP[delta0 _].
1323- apply: (@le_trans _ _ (expR ((delta - (1 + delta) * ln (1 + delta)) * fine mu))%:E).
1324- rewrite expRM expRB (mulrC _ (ln _)) expRM lnK; last rewrite posrE addr_gt0//.
1330+ move=> X mu n0 /[dup] delta01 /andP[delta0 _].
1331+ apply: (@le_trans _ _
1332+ (expR ((delta - (1 + delta) * ln (1 + delta)) * fine mu))%:E).
1333+ rewrite expRM expRB (mulrC _ (ln _)) expRM lnK ?posrE ?addr_gt0//.
13251334 exact: sampling_ineq1.
13261335apply: (@le_trans _ _ (expR ((delta - (delta + delta ^+ 2 / 3)) * fine mu))%:E).
13271336 rewrite lee_fin ler_expR ler_wpM2r//.
1328- by rewrite fine_ge0//; apply: expectation_ge0 => t; exact: bernoulli_trial_ge0.
1329- rewrite lerB//.
1330- apply: xlnx_lbound_i12.
1331- by rewrite in_itv /=.
1337+ rewrite fine_ge0//; apply: expectation_ge0 => t.
1338+ exact: bernoulli_trial_ge0.
1339+ by rewrite lerB// xlnx_lbound_i12.
13321340rewrite le_eqVlt; apply/orP; left; apply/eqP; congr (expR _)%:E.
13331341by rewrite opprD addrA subrr add0r mulrC mulrN mulNr mulrA.
13341342Qed .
13351343
13361344(* [Corollary 2.7, Rajani] / [Corollary 4.7, MU] *)
1337- Corollary sampling_ineq4 n (X : n.-tuple (bernoulliRV P p)) (delta : R) :
1345+ Corollary sampling_ineq4 n (X_ : n.-tuple (bernoulliRV P p)) (delta : R) :
13381346 (0 < delta < 1)%R ->
1339- (0 < n)%nat ->
1347+ (0 < n)%N ->
13401348 (0 < p)%R ->
1341- let X' := bool_trial_value X in
1342- let mu := 'E_(\X_n P)[X' ] in
1343- (\X_n P) [set i | `|X' i - fine mu | >= delta * fine mu]%R <=
1349+ let X := bool_trial_value X_ in
1350+ let mu := 'E_(\X_n P)[X] in
1351+ (\X_n P) [set i | `|X i - fine mu | >= delta * fine mu]%R <=
13441352 (expR (- (fine mu * delta ^+ 2) / 3)%R *+ 2)%:E.
13451353Proof .
13461354move=> /andP[d0 d1] n0 p0/=.
1347- set X' := bool_trial_value X .
1348- set mu := 'E_(\X_n P)[X' ].
1355+ set X := bool_trial_value X_ .
1356+ set mu := 'E_(\X_n P)[X].
13491357have mu_gt0 : (0 < fine mu)%R.
1350- by rewrite /mu /X' expectation_bernoulli_trial// mulr_gt0// ltr0n.
1358+ by rewrite /mu /X expectation_bernoulli_trial// mulr_gt0// ltr0n.
13511359under eq_set => x.
13521360 rewrite ler_normr.
13531361 rewrite lerBrDl opprD opprK -{1}(mul1r (fine mu)) -mulrDl.
13541362 rewrite -lerBDr -(lerN2 (- _)%R) opprK opprB.
1355- rewrite -{2}(mul1r (fine mu)) -mulrBl.
1356- rewrite -!lee_fin.
1363+ rewrite -{2}(mul1r (fine mu)) -mulrBl -!lee_fin.
13571364 over.
1358- rewrite /=.
1359- rewrite set_orb measureU; last 3 first.
1365+ rewrite /= set_orb measureU; last 3 first.
13601366- rewrite -[X in measurable X]setTI; apply: measurable_lee => //.
13611367 exact/measurable_EFinP/measurableT_comp.
13621368- rewrite -[X in measurable X]setTI; apply: measurable_lee => //.
@@ -1367,32 +1373,37 @@ rewrite set_orb measureU; last 3 first.
13671373rewrite mulr2n EFinD leeD//=.
13681374- by apply: sampling_ineq2; rewrite //d0 d1.
13691375- have d01 : (0 < delta < 1)%R by rewrite d0.
1370- rewrite (le_trans (sampling_ineq3 p01 X d01))//.
1376+ rewrite (le_trans (sampling_ineq3 p01 X_ d01))//.
13711377 rewrite lee_fin ler_expR !mulNr lerN2.
13721378 rewrite ler_pM//; last by rewrite lef_pV2 ?posrE ?ler_nat.
13731379 rewrite mulr_ge0 ?sqr_ge0// fine_ge0//.
13741380 by rewrite /mu expectation_ge0//= => t; exact: bernoulli_trial_ge0.
13751381Qed .
13761382
13771383(* [Theorem 3.1, Rajani] / [thm 4.7, MU] *)
1378- Theorem sampling n (X : n.-tuple (bernoulliRV P p)) (theta delta : R) :
1379- let X' x := ((bool_trial_value X x) / n%:R)%R in
1380- (0 < p)%R ->
1381- (0 < delta <= 1)%R -> (0 < theta < p)%R -> (0 < n)%N ->
1384+ Theorem sampling n (X_ : n.-tuple (bernoulliRV P p)) (theta delta : R) :
1385+ let X x := ((bool_trial_value X_ x) / n%:R)%R in
1386+ (0 < delta <= 1)%R -> (0 < theta < p)%R ->
13821387 (3 / theta ^+ 2 * ln (2 / delta) <= n%:R)%R ->
1383- (\X_n P) [set i | `| X' i - p | <= theta]%R >= 1 - delta%:E.
1388+ (\X_n P) [set i | `| X i - p | <= theta]%R >= 1 - delta%:E.
13841389Proof .
1385- move=> X' p0 /andP[delta0 delta1] /andP[theta0 thetap] n0 tdn.
1390+ move=> X /andP[delta0 delta1] /andP[theta0 thetap] tdn.
13861391have /andP[_ p1] := p01.
13871392set epsilon := (theta / p)%R.
1393+ have p0 : (0 < p)%R by rewrite (lt_trans _ thetap).
1394+ have n0 : (0 < n)%N.
1395+ rewrite -(@ltr_nat R) (lt_le_trans _ tdn)// mulr_gt0//.
1396+ by rewrite divr_gt0// exprn_gt0.
1397+ by rewrite ln_gt0// ltr_pdivlMr ?mul1r// (le_lt_trans delta1)// ltr1n.
13881398have epsilon01 : (0 < epsilon < 1)%R.
13891399 by rewrite /epsilon ?ltr_pdivrMr ?divr_gt0 ?mul1r.
13901400have thetaE : theta = (epsilon * p)%R.
13911401 by rewrite /epsilon -mulrA mulVf ?mulr1// gt_eqF.
1392- have step1 : (\X_n P) [set i | `| X' i - p | >= epsilon * p]%R <=
1402+ have step1 : (\X_n P) [set i | `| X i - p | >= epsilon * p]%R <=
13931403 ((expR (- (p * n%:R * (epsilon ^+ 2)) / 3)) *+ 2)%:E.
13941404 rewrite [X in (\X_n P) X <= _](_ : _ =
1395- [set i | `| bool_trial_value X i - p * n%:R | >= epsilon * p * n%:R]%R); last first.
1405+ [set i | `| bool_trial_value X_ i - p * n%:R |
1406+ >= epsilon * p * n%:R]%R); last first.
13961407 apply/seteqP; split => [t|t]/=.
13971408 move/(@ler_wpM2r _ n%:R (ler0n _ _)) => /le_trans; apply.
13981409 rewrite -[X in (_ * X)%R](@ger0_norm _ n%:R)// -normrM mulrBl.
@@ -1404,9 +1415,9 @@ have step1 : (\X_n P) [set i | `| X' i - p | >= epsilon * p]%R <=
14041415 by rewrite -mulrA divff ?mulr1// gt_eqF// ltr0n.
14051416 rewrite -mulrA.
14061417 have -> : (p * n%:R)%R = fine (p * n%:R)%:E by [].
1407- rewrite -(mulrC _ p) -(expectation_bernoulli_trial p01 X ).
1408- exact: (@sampling_ineq4 _ X epsilon).
1409- have step2 : (\X_n P) [set i | `| X' i - p | >= theta]%R <=
1418+ rewrite -(mulrC _ p) -(expectation_bernoulli_trial p01 X_ ).
1419+ exact: (@sampling_ineq4 _ X_ epsilon).
1420+ have step2 : (\X_n P) [set i | `| X i - p | >= theta]%R <=
14101421 ((expR (- (n%:R * theta ^+ 2) / 3)) *+ 2)%:E.
14111422 rewrite thetaE; move/le_trans : step1; apply.
14121423 rewrite lee_fin ler_wMn2r// ler_expR mulNr lerNl mulNr opprK.
@@ -1415,14 +1426,15 @@ have step2 : (\X_n P) [set i | `| X' i - p | >= theta]%R <=
14151426 rewrite mulrCA ler_wpM2l ?(ltW theta0)//.
14161427 rewrite [X in (_ * X)%R]mulrA mulVf ?gt_eqF// -[leLHS]mul1r [in leRHS]mul1r.
14171428 by rewrite ler_wpM2r// invf_ge1.
1418- suff : delta%:E >= (\X_n P) [set i | (`|X' i - p| >=(*NB: this >= in the pdf *) theta)%R].
1419- rewrite [X in (\X_n P) X <= _ -> _](_ : _ = ~` [set i | (`|X' i - p| < theta)%R]); last first.
1429+ suff : delta%:E >= (\X_n P) [set i | (`|X i - p| >= theta)%R].
1430+ rewrite [X in (\X_n P) X <= _ -> _](_ : _ =
1431+ ~` [set i | (`|X i - p| < theta)%R]); last first.
14201432 apply/seteqP; split => [t|t]/=.
14211433 by rewrite leNgt => /negP.
14221434 by rewrite ltNge => /negP/negPn.
1423- have ? : measurable [set i | (`|X' i - p| < theta)%R].
1435+ have ? : measurable [set i | (`|X i - p| < theta)%R].
14241436 under eq_set => x do rewrite -lte_fin.
1425- rewrite -(@setIidr _ setT [set _ | _]) ?subsetT /X' //.
1437+ rewrite -(@setIidr _ setT [set _ | _]) ?subsetT /X//.
14261438 by apply: measurable_lte => //; apply: measurableT_comp => //;
14271439 apply: measurableT_comp => //; apply: measurable_funD => //;
14281440 apply: measurable_funM.
@@ -1431,12 +1443,11 @@ suff : delta%:E >= (\X_n P) [set i | (`|X' i - p| >=(*NB: this >= in the pdf *)
14311443 move=> /le_trans; apply.
14321444 rewrite le_measure ?inE//.
14331445 under eq_set => x do rewrite -lee_fin.
1434- rewrite -(@setIidr _ setT [set _ | _]) ?subsetT /X' //.
1446+ rewrite -(@setIidr _ setT [set _ | _]) ?subsetT /X//.
14351447 by apply: measurable_lee => //; apply: measurableT_comp => //;
14361448 apply: measurableT_comp => //; apply: measurable_funD => //;
14371449 apply: measurable_funM.
14381450 by move=> t/= /ltW.
1439- (* NB: last step in the pdf *)
14401451apply: (le_trans step2).
14411452rewrite lee_fin -(mulr_natr _ 2) -ler_pdivlMr//.
14421453rewrite -(@lnK _ (delta / 2)%R); last by rewrite posrE divr_gt0.
0 commit comments