Skip to content

Commit 0d6f412

Browse files
committed
cleaning
1 parent 5b0e28d commit 0d6f412

File tree

1 file changed

+83
-72
lines changed

1 file changed

+83
-72
lines changed

theories/sampling.v

Lines changed: 83 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@ Reserved Notation "\X_ n P" (at level 10, n, P at next level,
7474
Lemma norm_expR {R : realType} : normr \o expR = (expR : R -> R).
7575
Proof. 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 *)
7889
Notation "'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.
525536
rewrite [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.
528539
pose j := Ordinal jm.
529540
have liftj : Ordinal im = lift ord0 j by exact: val_inj.
530541
rewrite (tuple_eta F).
@@ -646,15 +657,6 @@ by rewrite M2g// (lt_le_trans _ (ler_norm _))// ltrDl.
646657
Unshelve. all: by end_near.
647658
Qed.
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-
658660
Lemma 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.
11501152
rewrite -[ltLHS]addr0 ltrD// ?sqrxB2xlnx_gt1// oppr_gt0.
11511153
by rewrite nmulr_rlt0 ?ln_gt0// nmulr_rlt0 ?(lt_trans _ x1).
11521154
Qed.
1155+
11531156
End 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.
11611165
Proof.
11621166
move=> /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].
11651169
have /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

12341242
Lemma exp2_le8_conversion : reflect (exp 2 <= 8)%R (expR 2 <= 8 :> R).
12351243
Proof.
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/=.
12381246
by apply: (iffP idP) => /RleP.
12391247
Qed.
@@ -1311,52 +1319,50 @@ Hypothesis p01 : (0 <= p <= 1)%R.
13111319
Local 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.
13211329
Proof.
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.
13261335
apply: (@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.
13321340
rewrite le_eqVlt; apply/orP; left; apply/eqP; congr (expR _)%:E.
13331341
by rewrite opprD addrA subrr add0r mulrC mulrN mulNr mulrA.
13341342
Qed.
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.
13451353
Proof.
13461354
move=> /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].
13491357
have 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.
13511359
under 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.
13671373
rewrite 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.
13751381
Qed.
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.
13841389
Proof.
1385-
move=> X' p0 /andP[delta0 delta1] /andP[theta0 thetap] n0 tdn.
1390+
move=> X /andP[delta0 delta1] /andP[theta0 thetap] tdn.
13861391
have /andP[_ p1] := p01.
13871392
set 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.
13881398
have epsilon01 : (0 < epsilon < 1)%R.
13891399
by rewrite /epsilon ?ltr_pdivrMr ?divr_gt0 ?mul1r.
13901400
have 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 *)
14401451
apply: (le_trans step2).
14411452
rewrite lee_fin -(mulr_natr _ 2) -ler_pdivlMr//.
14421453
rewrite -(@lnK _ (delta / 2)%R); last by rewrite posrE divr_gt0.

0 commit comments

Comments
 (0)