@@ -18,8 +18,6 @@ From mathcomp Require Import lebesgue_integral trigo probability kernel charge.
1818(* ESOP 2017 *)
1919(* *)
2020(* ``` *)
21- (* poisson_pdf == Poisson pdf *)
22- (* exponential_pdf == exponential distribution pdf *)
2321(* measurable_sum X Y == the type X + Y, as a measurable type *)
2422(* ``` *)
2523(* *)
@@ -113,61 +111,26 @@ subst p2.
113111by f_equal.
114112Qed .
115113
116- (* NB: to be PRed to probability.v *)
117- Section poisson_pdf.
118- Variable R : realType.
119- Local Open Scope ring_scope.
120-
121- (* density function for Poisson *)
122- Definition poisson_pdf k r : R :=
123- if r > 0 then r ^+ k / k`!%:R^-1 * expR (- r) else 1%:R.
124-
125- Lemma poisson_pdf_ge0 k r : 0 <= poisson_pdf k r.
126- Proof .
127- rewrite /poisson_pdf; case: ifPn => r0//.
128- by rewrite mulr_ge0 ?expR_ge0// mulr_ge0// exprn_ge0 ?ltW.
129- Qed .
114+ Definition poisson3 {R : realType} := @poisson_pmf R 3%:R 4. (* 0.168 *)
115+ Definition poisson10 {R : realType} := @poisson_pmf R 10%:R 4. (* 0.019 *)
130116
131- Lemma poisson_pdf_gt0 k r : 0 < r -> 0 < poisson_pdf k.+1 r.
117+ (* TODO: move *)
118+ Lemma poisson_pmf_gt0 {R : realType} k (r : R) :
119+ (0 < r -> 0 < poisson_pmf r k.+1)%R.
132120Proof .
133- move=> r0; rewrite /poisson_pdf r0 mulr_gt0 ?expR_gt0//.
121+ move=> r0; rewrite /poisson_pmf r0 mulr_gt0 ?expR_gt0//.
134122by rewrite divr_gt0// ?exprn_gt0// invr_gt0 ltr0n fact_gt0.
135123Qed .
136124
137- Lemma measurable_poisson_pdf k : measurable_fun setT (poisson_pdf k).
138- Proof .
139- rewrite /poisson_pdf; apply: measurable_fun_if => //.
140- exact: measurable_fun_ltr.
141- by apply: measurable_funM => /=;
142- [exact: measurable_funM|exact: measurableT_comp].
143- Qed .
144-
145- Definition poisson3 := poisson_pdf 4 3%:R. (* 0.168 *)
146- Definition poisson10 := poisson_pdf 4 10%:R. (* 0.019 *)
147-
148- End poisson_pdf.
149-
150- Section exponential_pdf.
151- Variable R : realType.
152- Local Open Scope ring_scope.
153-
154- (* density function for exponential *)
155- Definition exponential_pdf x r : R := r * expR (- r * x).
156-
157- Lemma exponential_pdf_gt0 x r : 0 < r -> 0 < exponential_pdf x r.
158- Proof . by move=> r0; rewrite /exponential_pdf mulr_gt0// expR_gt0. Qed .
159-
160- Lemma exponential_pdf_ge0 x r : 0 <= r -> 0 <= exponential_pdf x r.
161- Proof . by move=> r0; rewrite /exponential_pdf mulr_ge0// expR_ge0. Qed .
162-
163- Lemma measurable_exponential_pdf x : measurable_fun setT (exponential_pdf x).
125+ Lemma exponential_pdf_gt0 {R : realType} (r : R) x :
126+ (0 < r -> 0 < x -> 0 < exponential_pdf r x)%R.
164127Proof .
165- apply: measurable_funM => //=; apply: measurableT_comp => //.
166- exact: measurable_funM.
128+ move=> r0 x0; rewrite /exponential_pdf/=.
129+ rewrite patchE/= ifT; last first.
130+ by rewrite inE/= in_itv/= (ltW x0).
131+ by rewrite mulr_gt0// expR_gt0.
167132Qed .
168133
169- End exponential_pdf.
170-
171134(* X + Y is a measurableType if X and Y are *)
172135HB.instance Definition _ (X Y : pointedType) :=
173136 isPointed.Build (X + Y)%type (@inl X Y point).
@@ -1704,8 +1667,8 @@ End staton_bus.
17041667Section staton_bus_poisson.
17051668Import Notations.
17061669Context d (T : measurableType d) (R : realType).
1707- Let poisson4 := @poisson_pdf R 4%N.
1708- Let mpoisson4 := @measurable_poisson_pdf R 4%N.
1670+ Let poisson4 r := @poisson_pmf R r 4%N.
1671+ Let mpoisson4 := @measurable_poisson_pmf R setT 4%N measurableT .
17091672
17101673Definition kstaton_bus_poisson : R.-sfker R ~> mbool :=
17111674 kstaton_bus _ mpoisson4.
@@ -1720,12 +1683,12 @@ rewrite -!muleA; congr (_ * _ + _ * _).
17201683- rewrite letin_kret//.
17211684 rewrite letin_iteT//.
17221685 rewrite letin_retk//.
1723- by rewrite scoreE//= => r r0; exact: poisson_pdf_ge0 .
1686+ by rewrite scoreE//= => r r0; exact: poisson_pmf_ge0 .
17241687- by rewrite onem27.
17251688 rewrite letin_kret//.
17261689 rewrite letin_iteF//.
17271690 rewrite letin_retk//.
1728- by rewrite scoreE//= => r r0; exact: poisson_pdf_ge0 .
1691+ by rewrite scoreE//= => r r0; exact: poisson_pmf_ge0 .
17291692Qed .
17301693
17311694(* true -> 2/7 * 0.168 = 2/7 * 3^4 e^-3 / 4! *)
@@ -1740,7 +1703,7 @@ Lemma staton_busE P (t : R) U :
17401703Proof .
17411704rewrite /staton_bus normalizeE !kstaton_bus_poissonE !diracT !mule1 ifF //.
17421705apply/negbTE; rewrite gt_eqF// lte_fin.
1743- by rewrite addr_gt0// mulr_gt0//= ?divr_gt0// ?ltr0n// poisson_pdf_gt0 // ltr0n.
1706+ by rewrite addr_gt0// mulr_gt0//= ?divr_gt0// ?ltr0n// poisson_pmf_gt0 // ltr0n.
17441707Qed .
17451708
17461709End staton_bus_poisson.
@@ -1770,12 +1733,14 @@ rewrite -!muleA; congr (_ * _ + _ * _).
17701733- rewrite letin_kret//.
17711734 rewrite letin_iteT//.
17721735 rewrite letin_retk//.
1773- rewrite scoreE//= => r r0; exact: exponential_pdf_ge0.
1736+ rewrite scoreE//= => r r0; apply: exponential_pdf_ge0 => //.
1737+ by rewrite ler0q; lra.
17741738- by rewrite onem27.
17751739 rewrite letin_kret//.
17761740 rewrite letin_iteF//.
17771741 rewrite letin_retk//.
1778- by rewrite scoreE//= => r r0; exact: exponential_pdf_ge0.
1742+ rewrite scoreE//= => r r0; apply: exponential_pdf_ge0.
1743+ by rewrite ler0q; lra.
17791744Qed .
17801745
17811746(* true -> 5/7 * 0.019 = 5/7 * 10^4 e^-10 / 4! *)
@@ -1791,12 +1756,12 @@ Proof.
17911756rewrite /staton_bus.
17921757rewrite normalizeE /= !kstaton_bus_exponentialE !diracT !mule1 ifF //.
17931758apply/negbTE; rewrite gt_eqF// lte_fin.
1794- by rewrite addr_gt0// mulr_gt0//= ?divr_gt0// ?ltr0n// exponential_pdf_gt0 ?ltr0n.
1759+ by rewrite addr_gt0// mulr_gt0//= ?divr_gt0// ?ltr0n//;
1760+ rewrite exponential_pdf_gt0 ?ltr0n// ltr0q; lra.
17951761Qed .
17961762
17971763End staton_bus_exponential.
17981764
1799-
18001765Section von_neumann_trick.
18011766Context d {T : measurableType d} {R : realType}.
18021767
0 commit comments