Skip to content

Commit e116406

Browse files
authored
beta distribution (#1640)
* beta distribution
1 parent dbc9e07 commit e116406

File tree

7 files changed

+946
-22
lines changed

7 files changed

+946
-22
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,49 @@
7272
`derivable_Nyo_continuousWoo`,
7373
`derivable_Nyo_continuousW`
7474

75+
- in `pseudometric_normed_Zmodule.v`:
76+
+ lemma `continuous_comp_cvg`
77+
78+
- in `derive.v`:
79+
+ lemma `derive1_onem`
80+
81+
- in `ftc.v`:
82+
+ lemmas `integration_by_substitution_onem`, `Rintegration_by_substitution_onem`
83+
84+
- in `probability.v`:
85+
+ lemmas `continuous_onemXn`, `onemXn_derivable`,
86+
`derivable_oo_continuous_bnd_onemXnMr`, `derive_onemXn`,
87+
`Rintegral_onemXn`
88+
+ definition `XMonemX`
89+
+ lemmas `XMonemX_ge0`, `XMonemX_le1`, `XMonemX0n`, `XMonemXn0`,
90+
`XMonemX00`, `XMonemXC`, `XMonemXM`
91+
+ lemmas `continuous_XMonemX`, `within_continuous_XMonemX`,
92+
`measurable_XMonemX`, `bounded_XMonemX`, `integrable_XMonemX`,
93+
`integrable_XMonemX_restrict`, `integral_XMonemX_restrict`
94+
+ definition `beta_fun`
95+
+ lemmas `EFin_beta_fun`, `beta_fun_sym`, `beta_fun0n`, `beta_fun00`,
96+
`beta_fun1Sn`, `beta_fun11`, `beta_funSSnSm`, `beta_funSnSm`, `beta_fun_fact`
97+
+ lemmas `beta_funE`, `beta_fun_gt0`, `beta_fun_ge0`
98+
+ definition `beta_pdf`
99+
+ lemmas `measurable_beta_pdf`, `beta_pdf_ge0`, `beta_pdf_le_beta_funV`,
100+
`integrable_beta_pdf`, `bounded_beta_pdf_01`
101+
+ definition `beta_prob`
102+
+ lemmas `integral_beta_pdf`, `beta_prob01`, `beta_prob_fin_num`,
103+
`beta_prob_dom`, `beta_prob_uniform`,
104+
`integral_beta_prob_bernoulli_prob_lty`,
105+
`integral_beta_prob_bernoulli_prob_onemX_lty`,
106+
`integral_beta_prob_bernoulli_prob_onem_lty`, `beta_prob_integrable`,
107+
`beta_prob_integrable_onem`, `beta_prob_integrable_dirac`,
108+
`beta_prob_integrable_onem_dirac`, `integral_beta_prob`
109+
+ definition `div_beta_fun`
110+
+ lemmas `div_beta_fun_ge0`, `div_beta_fun_le1`
111+
+ definition `beta_prob_bernoulli_prob`
112+
+ lemma `beta_prob_bernoulli_probE`
113+
114+
115+
- in `unstable.v`:
116+
+ lemmas `leq_Mprod_prodD`, `leq_fact2`, `normr_onem`
117+
75118
- in `num_normedtype.v`:
76119
+ lemmas `bigcup_ointsub_sup`, `bigcup_ointsub_mem`
77120

@@ -354,6 +397,13 @@
354397
+ `lb_ereal_inf` -> `le_ereal_inf_tmp`
355398
+ `ereal_sup_ge` -> `le_ereal_sup_tmp`
356399

400+
- in `probability.v`:
401+
+ `bernoulli` -> `bernoulli_prob`
402+
+ `bernoulli_probE` -> `bernoulliE`
403+
+ `integral_bernoulli_prob` -> `integral_bernoulli_prob`
404+
+ `measurable_bernoulli` -> `measurable_bernoulli_prob`
405+
+ `measurable_bernoulli2` -> `measurable_bernoulli_prob2`
406+
357407
- in `sequences.v`:
358408
+ `adjacent` -> `adjacent_seq`
359409

classical/unstable.v

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,35 @@ elim: r => [|a l]; first by rewrite !big_nil exp1n.
7676
by rewrite !big_cons; case: ifPn => // Pa <-; rewrite expnMn.
7777
Qed.
7878

79+
Lemma leq_Mprod_prodD (x y n m : nat) : (n <= x)%N -> (m <= y)%N ->
80+
(\prod_(m <= i < y) i * \prod_(n <= i < x) i <= \prod_(n + m <= i < x + y) i)%N.
81+
Proof.
82+
move=> nx my; rewrite big_addn -addnBA//.
83+
rewrite [in leqRHS]/index_iota -addnBAC// iotaD big_cat/=.
84+
rewrite mulnC leq_mul//.
85+
by apply: leq_prod; move=> i _; rewrite leq_addr.
86+
rewrite subnKC//.
87+
rewrite -[in leqLHS](add0n m) big_addn.
88+
rewrite [in leqRHS](_ : y - m = ((y - m + x) - x))%N; last first.
89+
by rewrite -addnBA// subnn addn0.
90+
rewrite -[X in iota X _](add0n x) big_addn -addnBA// subnn addn0.
91+
by apply: leq_prod => i _; rewrite leq_add2r leq_addr.
92+
Qed.
93+
94+
Lemma leq_fact2 (x y n m : nat) : (n <= x) %N -> (m <= y)%N ->
95+
(x`! * y`! * ((n + m).+1)`! <= n`! * m`! * ((x + y).+1)`!)%N.
96+
Proof.
97+
move=> nx my.
98+
rewrite (fact_split nx) -!mulnA leq_mul2l; apply/orP; right.
99+
rewrite (fact_split my) mulnCA -!mulnA leq_mul2l; apply/orP; right.
100+
rewrite [leqRHS](_ : _ =
101+
(n + m).+1`! * \prod_((n + m).+2 <= i < (x + y).+2) i)%N; last first.
102+
by rewrite -fact_split// ltnS leq_add.
103+
rewrite mulnA mulnC leq_mul2l; apply/orP; right.
104+
do 2 rewrite -addSn -addnS.
105+
exact: leq_Mprod_prodD.
106+
Qed.
107+
79108
Section max_min.
80109
Variable R : realFieldType.
81110

@@ -284,6 +313,14 @@ Proof. by move=> ?; rewrite onem_lt1// exprn_gt0. Qed.
284313

285314
End onem_order.
286315

316+
Lemma normr_onem {R : realDomainType} (x : R) :
317+
(0 <= x <= 1 -> `| `1-x | <= 1)%R.
318+
Proof.
319+
move=> /andP[x0 x1]; rewrite ler_norml; apply/andP; split.
320+
by rewrite lerBrDl lerBlDr (le_trans x1)// lerDl.
321+
by rewrite lerBlDr lerDl.
322+
Qed.
323+
287324
Lemma onemV (F : numFieldType) (x : F) : x != 0 -> `1-(x^-1) = (x - 1) / x.
288325
Proof. by move=> ?; rewrite mulrDl divff// mulN1r. Qed.
289326

theories/derive.v

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,6 +1267,12 @@ Proof. by have /derivableP := @derivable_id x v; rewrite derive_val. Qed.
12671267

12681268
End derive_id.
12691269

1270+
Lemma derive1_onem {R : numFieldType} :
1271+
(fun x => `1-x : R^o)^`()%classic = cst (-1).
1272+
Proof.
1273+
by apply/funext => x; rewrite derive1E deriveB// derive_id derive_cst sub0r.
1274+
Qed.
1275+
12701276
Section Derive_lemmasVR.
12711277
Variables (R : numFieldType) (V : normedModType R).
12721278
Implicit Types (f g : V -> R) (x v : V).

theories/ftc.v

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1793,6 +1793,46 @@ Qed.
17931793

17941794
End integration_by_substitution.
17951795

1796+
Section integration_by_substitution_onem.
1797+
Context {R : realType}.
1798+
Let mu := (@lebesgue_measure R).
1799+
Local Open Scope ereal_scope.
1800+
1801+
Lemma integration_by_substitution_onem (G : R -> R) (r : R) :
1802+
(0 < r <= 1)%R ->
1803+
{within `[0%R, r], continuous G} ->
1804+
\int[mu]_(x in `[0%R, r]) (G x)%:E =
1805+
\int[mu]_(x in `[`1-r, 1%R]) (G `1-x)%:E.
1806+
Proof.
1807+
move=> r01 cG.
1808+
have := @integration_by_substitution_decreasing R onem G `1-r 1.
1809+
rewrite onemK onem1 => -> //.
1810+
- by apply: eq_integral => x xr; rewrite !fctE derive1_onem opprK mulr1.
1811+
- by rewrite ltrBlDl ltrDr; case/andP : r01.
1812+
- by move=> x y _ _ xy; rewrite ler_ltB.
1813+
- by rewrite derive1_onem; move=> ? ?; exact: cvg_cst.
1814+
- by rewrite derive1_onem; exact: is_cvg_cst.
1815+
- by rewrite derive1_onem; exact: is_cvg_cst.
1816+
- split => /=.
1817+
+ by move=> x xr1; exact: derivableB.
1818+
+ apply: cvg_at_right_filter; rewrite onemK.
1819+
apply: (@continuous_comp_cvg _ _ _ _ onem)=> //=.
1820+
by move=> x; apply: continuousB => //; exact: cvg_cst.
1821+
by under eq_fun do rewrite -/(onem _) onemK; exact: cvg_id.
1822+
+ by apply: cvg_at_left_filter; apply: cvgB => //; exact: cvg_cst.
1823+
Qed.
1824+
1825+
Lemma Rintegration_by_substitution_onem (G : R -> R) (r : R) :
1826+
(0 < r <= 1)%R ->
1827+
{within `[0%R, r], continuous G} ->
1828+
(\int[mu]_(x in `[0, r]) (G x) =
1829+
\int[mu]_(x in `[`1-r, 1]) (G `1-x))%R.
1830+
Proof.
1831+
by move=> r01 cG; rewrite [in LHS]/Rintegral integration_by_substitution_onem.
1832+
Qed.
1833+
1834+
End integration_by_substitution_onem.
1835+
17961836
Section ge0_integralT_even.
17971837
Context {R : realType}.
17981838
Let mu := @lebesgue_measure R.

theories/normedtype_theory/pseudometric_normed_Zmodule.v

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,20 @@ Arguments cvgr_neq0 {R V T F FF f}.
817817
#[global] Hint Extern 0 (ProperFilter _^'+) =>
818818
(apply: at_right_proper_filter) : typeclass_instances.
819819

820+
Lemma continuous_comp_cvg {R : numFieldType} (U V : pseudoMetricNormedZmodType R)
821+
(f : U -> V) (g : R -> U) (r : R) (l : V) : continuous f ->
822+
(f \o g) x @[x --> r] --> l -> f x @[x --> g r] --> l.
823+
Proof.
824+
move=> cf fgl; apply/(@cvgrPdist_le _ V) => /= e e0.
825+
have e20 : 0 < e / 2 by rewrite divr_gt0.
826+
move/(@cvgrPdist_le _ V) : fgl => /(_ _ e20) fgl.
827+
have /(@cvgrPdist_le _ V) /(_ _ e20) fgf := cf (g r).
828+
rewrite !near_simpl/=; near=> t.
829+
rewrite -(@subrK _ (f (g r)) l) -(addrA (_ + _)) (le_trans (ler_normD _ _))//.
830+
rewrite (splitr e) lerD//; last by near: t.
831+
by case: fgl => d /= d0; apply; rewrite /ball_/= subrr normr0.
832+
Unshelve. all: by end_near. Qed.
833+
820834
Section closure_left_right_open.
821835
Variable R : realFieldType.
822836
Implicit Types z : R.

0 commit comments

Comments
 (0)