@@ -173,11 +173,6 @@ Lemma cdf_ge0 r : 0 <= cdf X r. Proof. by []. Qed.
173173
174174Lemma cdf_le1 r : cdf X r <= 1. Proof . exact: probability_le1. Qed .
175175
176- Lemma cdf_fin_num r : cdf X r \is a fin_num.
177- Proof .
178- by rewrite ge0_fin_numE ?cdf_ge0//; exact/(le_lt_trans (cdf_le1 r))/ltry.
179- Qed .
180-
181176Lemma cdf_nondecreasing : nondecreasing_fun (cdf X).
182177Proof . by move=> r s rs; rewrite le_measure ?inE//; exact: subitvPr. Qed .
183178
@@ -305,13 +300,13 @@ Let fcdf r := fine (cdf (idTR : {RV P >-> R}) r).
305300
306301Let fcdf_nd : nondecreasing fcdf.
307302Proof .
308- by move=> *; apply: fine_le; [exact: cdf_fin_num.. | exact: cdf_nondecreasing] .
303+ by move=> *; rewrite fine_le ?fin_num_measure// cdf_nondecreasing.
309304Qed .
310305
311306Let fcdf_rc : right_continuous fcdf.
312307Proof .
313308move=> a; apply: fine_cvg.
314- by rewrite fineK; [ exact: cdf_right_continuous | exact: cdf_fin_num] .
309+ by rewrite fineK ?fin_num_measure//; exact: cdf_right_continuous.
315310Qed .
316311
317312#[local] HB.instance Definition _ :=
@@ -335,7 +330,7 @@ rewrite /lebesgue_stieltjes_measure /measure_extension/=.
335330rewrite measurable_mu_extE/=; last exact: is_ocitv.
336331have [ab | ba] := leP a b; last first.
337332 by rewrite set_itv_ge ?wlength0 ?measure0// bnd_simp -leNgt ltW.
338- rewrite wlength_itv_bnd// EFinB !fineK ?cdf_fin_num //.
333+ rewrite wlength_itv_bnd// EFinB !fineK ?fin_num_measure //.
339334rewrite /cdf /distribution /pushforward !preimage_id.
340335have : `]a, b]%classic = `]-oo, b] `\` `]-oo, a] => [|->].
341336 by rewrite -[RHS]setCK setCD setCitvl setUC -[LHS]setCK setCitv.
@@ -355,21 +350,18 @@ Local Open Scope ereal_scope.
355350
356351Lemma cdf_ccdf_1 r : cdf X r + ccdf X r = 1.
357352Proof .
358- rewrite /cdf/ccdf -measureU//= -eq_opE; last exact: disjoint_rays.
353+ rewrite /cdf /ccdf -measureU//= -eq_opE; last exact: disjoint_rays.
359354by rewrite itv_setU_setT probability_setT.
360355Qed .
361356
362357Corollary ccdf_cdf_1 r : ccdf X r + cdf X r = 1.
363358Proof . by rewrite -(cdf_ccdf_1 r) addeC. Qed .
364359
365360Corollary ccdf_1_cdf r : ccdf X r = 1 - cdf X r.
366- Proof . by rewrite -(ccdf_cdf_1 r) addeK ?cdf_fin_num. Qed .
367-
368- Lemma ccdf_fin_num r : ccdf X r \is a fin_num.
369- Proof . by rewrite ccdf_1_cdf fin_numB cdf_fin_num -fine1. Qed .
361+ Proof . by rewrite -(ccdf_cdf_1 r) addeK ?fin_num_measure. Qed .
370362
371363Corollary cdf_1_ccdf r : cdf X r = 1 - ccdf X r.
372- Proof . by rewrite -(cdf_ccdf_1 r) addeK ?ccdf_fin_num . Qed .
364+ Proof . by rewrite -(cdf_ccdf_1 r) addeK ?fin_num_measure . Qed .
373365
374366Lemma ccdf_nonincreasing : nonincreasing_fun (ccdf X).
375367Proof . by move=> r s rs; rewrite le_measure ?inE//; exact: subitvPl. Qed .
@@ -483,6 +475,77 @@ End expectation_lemmas.
483475#[deprecated(since="mathcomp-analysis 1.8.0", note="renamed to `expectationZl`")]
484476Notation expectationM := expectationZl (only parsing).
485477
478+ Section tail_expectation_formula.
479+ Local Open Scope ereal_scope.
480+ Context d (T : measurableType d) (R : realType) (P : probability T R).
481+
482+ Let mu : {measure set _ -> \bar R} := @lebesgue_measure R.
483+
484+ Lemma ge0_expectation_ccdf (X : {RV P >-> R}) : (forall x, 0 <= X x)%R ->
485+ 'E_P[X] = \int[mu]_(r in `[0%R, +oo[) ccdf X r.
486+ Proof .
487+ pose GR := measurableTypeR R.
488+ pose distrX := distribution P X.
489+ pose D : set R := `[0%R, +oo[%classic.
490+ move=> X_ge0.
491+ transitivity (\int[P]_x ((EFin \_ D) \o X) x).
492+ rewrite expectation_def; apply: eq_integral => x _ /=.
493+ by rewrite /D patchE ifT// set_itvE inE /=.
494+ transitivity (\int[distrX]_r (EFin \_ D) r).
495+ rewrite ge0_integral_distribution// -?measurable_restrictT /D// => r.
496+ by apply: erestrict_ge0 => s /=; rewrite in_itv/= andbT lee_fin.
497+ transitivity (\int[distrX]_r (\int[mu]_(s in D) (\1_`]-oo, r[ s)%:E)).
498+ apply: eq_integral => r _.
499+ rewrite integral_indic /D//= setIC -(set_itv_splitI `[0%R, r[).
500+ rewrite lebesgue_measure_itv/= lte_fin patchE.
501+ have [r_pos | r_neg | <-] := ltgtP.
502+ - by rewrite mem_set ?EFinN ?sube0//= in_itv/= ltW.
503+ - by rewrite memNset//= in_itv/= leNgt r_neg.
504+ - by rewrite mem_set//= in_itv/= lexx.
505+ transitivity (\int[distrX]_r (\int[mu]_s (\1_`[0, r[ s)%:E)).
506+ apply: eq_integral => r _; rewrite /D integral_mkcond.
507+ apply: eq_integral => /= s _.
508+ have [s_ge0 | s_lt0] := leP 0%R s.
509+ - have [s_ltr | s_ger] := ltP s r.
510+ + rewrite indicE mem_set/=; last by rewrite in_itv/= s_ge0 s_ltr.
511+ by rewrite patchE/= ifT ?indicE mem_set//= in_itv/= andbT.
512+ + rewrite indicE memNset/=; last by rewrite in_itv/= s_ge0 ltNge s_ger.
513+ rewrite patchE ifT//; last by rewrite mem_set//= in_itv/= andbT.
514+ by rewrite indicE memNset//= in_itv/= ltNge s_ger.
515+ - rewrite indicE memNset/=; last by rewrite in_itv/= leNgt s_lt0.
516+ by rewrite patchE/= ifF// memNset//= in_itv/= andbT leNgt s_lt0.
517+ transitivity (\int[mu]_s (\int[distrX]_r (\1_`[0, r[ s)%:E)).
518+ rewrite (fubini_tonelli (fun p : R * GR => (\1_`[0, p.1[ p.2)%:E))//=.
519+ apply/measurable_EFinP/measurable_indic => /=.
520+ pose fsnd (p : R * GR) := (0 <= p.2)%R.
521+ pose f21 (p : R * GR) := (p.2 < p.1)%R.
522+ rewrite [X in measurable X](_ : _ =
523+ fsnd @^-1` [set true] `&` f21 @^-1` [set true]); last first.
524+ by apply/seteqP; split => p; rewrite in_itv/= => /andP.
525+ apply: measurableI.
526+ - have : measurable_fun setT fsnd by exact: measurable_fun_ler.
527+ by move=> /(_ measurableT [set true]); rewrite setTI; exact.
528+ - have : measurable_fun setT f21 by exact: measurable_fun_ltr.
529+ by move=> /(_ measurableT [set true]); rewrite setTI; exact.
530+ transitivity (\int[mu]_(s in D) (\int[distrX]_r (\1_`[0, r[ s)%:E)).
531+ rewrite [in RHS]integral_mkcond/=.
532+ apply: eq_integral => s _; rewrite patchE /D.
533+ have [s0|s0] := leP 0%R s; first by rewrite mem_set//= in_itv/= s0.
534+ rewrite memNset//= ?in_itv/= ?leNgt ?s0//.
535+ by apply: integral0_eq => r _; rewrite indicE/= memNset//= in_itv/= leNgt s0.
536+ apply: eq_integral => s; rewrite /D inE/= in_itv/= andbT => s_ge0.
537+ rewrite integral_indic//=.
538+ rewrite /ccdf setIT set_itvoy; congr distribution.
539+ by apply/funext => r/=; rewrite in_itv/= s_ge0.
540+ pose fgts (r : R) := (s < r)%R.
541+ have : measurable_fun setT fgts by exact: measurable_fun_ltr.
542+ rewrite [X in measurable X](_ : _ = fgts @^-1` [set true]).
543+ by move=> /(_ measurableT [set true]); rewrite setTI; exact.
544+ by apply: eq_set => r; rewrite in_itv/= s_ge0.
545+ Qed .
546+
547+ End tail_expectation_formula.
548+
486549HB.lock Definition covariance {d} {T : measurableType d} {R : realType}
487550 (P : probability T R) (X Y : T -> R) :=
488551 'E_P[(X \- cst (fine 'E_P[X])) * (Y \- cst (fine 'E_P[Y]))]%E.
0 commit comments