(* Title: HOL/Probability/Distributions.thy Author: Sudeep Kanav, TU München Author: Johannes Hölzl, TU München
Author: Jeremy Avigad, CMU *)
section \<open>Properties of Various Distributions\<close>
theory Distributions imports Convolution Information begin
lemma (in prob_space) distributed_affine: fixes f :: "real \ ennreal" assumes f: "distributed M lborel X f" assumes c: "c \ 0" shows"distributed M lborel (\x. t + c * X x) (\x. f ((x - t) / c) / \c\)" unfolding distributed_def proof safe have [measurable]: "f \ borel_measurable borel" using f by (simp add: distributed_def) have [measurable]: "X \ borel_measurable M" using f by (simp add: distributed_def)
show"(\x. f ((x - t) / c) / \c\) \ borel_measurable lborel" by simp show"random_variable lborel (\x. t + c * X x)" by simp
have eq: "ennreal \c\ * (f x / ennreal \c\) = f x" for x using c by (cases "f x")
(auto simp: divide_ennreal ennreal_mult[symmetric] ennreal_top_divide ennreal_mult_top)
have"density lborel f = distr M lborel X" using f by (simp add: distributed_def) with c show"distr M lborel (\x. t + c * X x) = density lborel (\x. f ((x - t) / c) / ennreal \c\)" by (subst (2) lborel_real_affine[where c="c"and t="t"])
(simp_all add: density_density_eq density_distr distr_distr field_simps eq cong: distr_cong) qed
lemma (in prob_space) distributed_affineI: fixes f :: "real \ ennreal" and c :: real assumes f: "distributed M lborel (\x. (X x - t) / c) (\x. \c\ * f (x * c + t))" assumes c: "c \ 0" shows"distributed M lborel X f" proof - have eq: "f x * ennreal \c\ / ennreal \c\ = f x" for x using c by (simp add: ennreal_times_divide[symmetric])
show ?thesis using distributed_affine[OF f c, where t=t] c by (simp add: field_simps eq) qed
lemma (in prob_space) distributed_AE2: assumes [measurable]: "distributed M N X f""Measurable.pred N P" shows"(AE x in M. P (X x)) \ (AE x in N. 0 < f x \ P x)" proof - have"(AE x in M. P (X x)) \ (AE x in distr M N X. P x)" by (simp add: AE_distr_iff) alsohave"\ \ (AE x in density N f. P x)" unfolding distributed_distr_eq_density[OF assms(1)] .. alsohave"\ \ (AE x in N. 0 < f x \ P x)" by (rule AE_density) simp finallyshow ?thesis . qed
subsection \<open>Erlang\<close>
lemma nn_intergal_power_times_exp_Icc: assumes [arith]: "0 \ a" shows"(\\<^sup>+x. ennreal (x^k * exp (-x)) * indicator {0 .. a} x \lborel) =
(1 - (\<Sum>n\<le>k. (a^n * exp (-a)) / fact n)) * fact k" (is "?I = _") proof - let ?f = "\k x. x^k * exp (-x) / fact k" let ?F = "\k x. - (\n\k. (x^n * exp (-x)) / fact n)" have"?I * (inverse (real_of_nat (fact k))) =
(\<integral>\<^sup>+x. ennreal (x^k * exp (-x)) * indicator {0 .. a} x * (inverse (real_of_nat (fact k))) \<partial>lborel)" by (intro nn_integral_multc[symmetric]) auto alsohave"\ = (\\<^sup>+x. ennreal (?f k x) * indicator {0 .. a} x \lborel)" by (intro nn_integral_cong)
(simp add: field_simps ennreal_mult'[symmetric] indicator_mult_ennreal) alsohave"\ = ennreal (?F k a - ?F k 0)" proof (rule nn_integral_FTC_Icc) fix x assume"x \ {0..a}" show"DERIV (?F k) x :> ?f k x" proof(induction k) case 0 show ?caseby (auto intro!: derivative_eq_intros) next case (Suc k) have"DERIV (\x. ?F k x - (x^Suc k * exp (-x)) / fact (Suc k)) x :>
?f k x - ((real (Suc k) - x) * x ^ k * exp (- x)) / (fact (Suc k))" by (intro DERIV_diff Suc)
(auto intro!: derivative_eq_intros simp del: fact_Suc power_Suc
simp add: field_simps power_Suc[symmetric]) alsohave"(\x. ?F k x - (x^Suc k * exp (-x)) / fact (Suc k)) = ?F (Suc k)" by simp alsohave"?f k x - ((real (Suc k) - x) * x ^ k * exp (- x)) / (fact (Suc k)) = ?f (Suc k) x" by (auto simp: field_simps simp del: fact_Suc)
(simp_all add: of_nat_Suc field_simps) finallyshow ?case . qed qed auto alsohave"\ = ennreal (1 - (\n\k. (a^n * exp (-a)) / fact n))" by (auto simp: power_0_left if_distrib[where f="\x. x / a" for a] sum.If_cases) alsohave"\ = ennreal ((1 - (\n\k. (a^n * exp (-a)) / fact n)) * fact k) * ennreal (inverse (fact k))" by (subst ennreal_mult''[symmetric]) (auto intro!: arg_cong[where f=ennreal]) finallyshow ?thesis by (auto simp add: mult_right_ennreal_cancel le_less) qed
definition erlang_density :: "nat \ real \ real \ real" where "erlang_density k l x = (if x < 0 then 0 else (l^(Suc k) * x^k * exp (- l * x)) / fact k)"
definition erlang_CDF :: "nat \ real \ real \ real" where "erlang_CDF k l x = (if x < 0 then 0 else 1 - (\n\k. ((l * x)^n * exp (- l * x) / fact n)))"
lemma erlang_density_nonneg[simp]: "0 \ l \ 0 \ erlang_density k l x" by (simp add: erlang_density_def)
lemma borel_measurable_erlang_density[measurable]: "erlang_density k l \ borel_measurable borel" by (auto simp add: erlang_density_def[abs_def])
lemma erlang_CDF_transform: "0 < l \ erlang_CDF k l a = erlang_CDF k 1 (l * a)" by (auto simp add: erlang_CDF_def mult_less_0_iff)
lemma nn_integral_erlang_density: assumes [arith]: "0 < l" shows"(\\<^sup>+ x. ennreal (erlang_density k l x) * indicator {.. a} x \lborel) = erlang_CDF k l a" proof (cases "0 \ a") case [arith]: True have eq: "\x. indicator {0..a} (x / l) = indicator {0..a*l} x" by (simp add: field_simps split: split_indicator) have"(\\<^sup>+x. ennreal (erlang_density k l x) * indicator {.. a} x \lborel) =
(\<integral>\<^sup>+x. (l/fact k) * (ennreal ((l*x)^k * exp (- (l*x))) * indicator {0 .. a} x) \<partial>lborel)" by (intro nn_integral_cong)
(auto simp: erlang_density_def power_mult_distrib ennreal_mult[symmetric] split: split_indicator) alsohave"\ = (l/fact k) * (\\<^sup>+x. ennreal ((l*x)^k * exp (- (l*x))) * indicator {0 .. a} x \lborel)" by (intro nn_integral_cmult) auto alsohave"\ = ennreal (l/fact k) * ((1/l) * (\\<^sup>+x. ennreal (x^k * exp (- x)) * indicator {0 .. l * a} x \lborel))" by (subst nn_integral_real_affine[where c="1 / l"and t=0]) (auto simp: field_simps eq) alsohave"\ = (1 - (\n\k. ((l * a)^n * exp (-(l * a))) / fact n))" by (subst nn_intergal_power_times_exp_Icc) (auto simp: ennreal_mult'[symmetric]) alsohave"\ = erlang_CDF k l a" by (auto simp: erlang_CDF_def) finallyshow ?thesis . next case False thenhave"(\\<^sup>+ x. ennreal (erlang_density k l x) * indicator {.. a} x \lborel) = (\\<^sup>+x. 0 \(lborel::real measure))" by (intro nn_integral_cong) (auto simp: erlang_density_def) with False show ?thesis by (simp add: erlang_CDF_def) qed
lemma emeasure_erlang_density: "0 < l \ emeasure (density lborel (erlang_density k l)) {.. a} = erlang_CDF k l a" by (simp add: emeasure_density nn_integral_erlang_density)
lemma nn_integral_erlang_ith_moment: fixes k i :: nat and l :: real assumes [arith]: "0 < l" shows"(\\<^sup>+ x. ennreal (erlang_density k l x * x ^ i) \lborel) = fact (k + i) / (fact k * l ^ i)" proof - have eq: "\x. indicator {0..} (x / l) = indicator {0..} x" by (simp add: field_simps split: split_indicator) have"(\\<^sup>+ x. ennreal (erlang_density k l x * x^i) \lborel) =
(\<integral>\<^sup>+x. (l/(fact k * l^i)) * (ennreal ((l*x)^(k+i) * exp (- (l*x))) * indicator {0 ..} x) \<partial>lborel)" by (intro nn_integral_cong)
(auto simp: erlang_density_def power_mult_distrib power_add ennreal_mult'[symmetric] split: split_indicator) alsohave"\ = (l/(fact k * l^i)) * (\\<^sup>+x. ennreal ((l*x)^(k+i) * exp (- (l*x))) * indicator {0 ..} x \lborel)" by (intro nn_integral_cmult) auto alsohave"\ = ennreal (l/(fact k * l^i)) * ((1/l) * (\\<^sup>+x. ennreal (x^(k+i) * exp (- x)) * indicator {0 ..} x \lborel))" by (subst nn_integral_real_affine[where c="1 / l"and t=0]) (auto simp: field_simps eq) alsohave"\ = fact (k + i) / (fact k * l ^ i)" by (subst nn_intergal_power_times_exp_Ici) (auto simp: ennreal_mult'[symmetric]) finallyshow ?thesis . qed
lemma prob_space_erlang_density: assumes l[arith]: "0 < l" shows"prob_space (density lborel (erlang_density k l))" (is"prob_space ?D") proof show"emeasure ?D (space ?D) = 1" using nn_integral_erlang_ith_moment[OF l, where k=k and i=0] by (simp add: emeasure_density) qed
lemma (in prob_space) erlang_distributed_le: assumes D: "distributed M lborel X (erlang_density k l)" assumes [simp, arith]: "0 < l""0 \ a" shows"\
(x in M. X x \ a) = erlang_CDF k l a"
proof - have"emeasure M {x \ space M. X x \ a } = emeasure (distr M lborel X) {.. a}" using distributed_measurable[OF D] by (subst emeasure_distr) (auto intro!: arg_cong2[where f=emeasure]) alsohave"\ = emeasure (density lborel (erlang_density k l)) {.. a}" unfolding distributed_distr_eq_density[OF D] .. alsohave"\ = erlang_CDF k l a" by (auto intro!: emeasure_erlang_density) finallyshow ?thesis by (auto simp: emeasure_eq_measure measure_nonneg) qed
lemma (in prob_space) erlang_distributed_gt: assumes D[simp]: "distributed M lborel X (erlang_density k l)" assumes [arith]: "0 < l""0 \ a" shows"\
(x in M. a < X x ) = 1 - (erlang_CDF k l a)"
proof - have" 1 - (erlang_CDF k l a) = 1 - \
(x in M. X x \ a)" by (subst erlang_distributed_le) auto
alsohave"\ = prob (space M - {x \ space M. X x \ a })" using distributed_measurable[OF D] by (auto simp: prob_compl) alsohave"\ = \
(x in M. a < X x )" by (auto intro!: arg_cong[where f=prob] simp: not_le)
finallyshow ?thesis by simp qed
lemma erlang_CDF_at0: "erlang_CDF k l 0 = 0" by (induction k) (auto simp: erlang_CDF_def)
lemma erlang_distributedI: assumes X[measurable]: "X \ borel_measurable M" and [arith]: "0 < l" and X_distr: "\a. 0 \ a \ emeasure M {x\space M. X x \ a} = erlang_CDF k l a" shows"distributed M lborel X (erlang_density k l)" proof (rule distributedI_borel_atMost) fix a :: real
{ assume"a \ 0" with X have"emeasure M {x\space M. X x \ a} \ emeasure M {x\space M. X x \ 0}" by (intro emeasure_mono) auto alsohave"... = 0"by (auto intro!: erlang_CDF_at0 simp: X_distr[of 0]) finallyhave"emeasure M {x\space M. X x \ a} \ 0" by simp thenhave"emeasure M {x\space M. X x \ a} = 0" by simp
} note eq_0 = this
show"(\\<^sup>+ x. erlang_density k l x * indicator {..a} x \lborel) = ennreal (erlang_CDF k l a)" using nn_integral_erlang_density[of l k a] by (simp add: ennreal_indicator ennreal_mult)
show"emeasure M {x\space M. X x \ a} = ennreal (erlang_CDF k l a)" using X_distr[of a] eq_0 by (auto simp: one_ennreal_def erlang_CDF_def) qed simp_all
lemma (in prob_space) erlang_distributed_iff: assumes [arith]: "0 shows"distributed M lborel X (erlang_density k l) \
(X \<in> borel_measurable M \<and> 0 < l \<and> (\<forall>a\<ge>0. \<P>(x in M. X x \<le> a) = erlang_CDF k l a ))" using
distributed_measurable[of M lborel X "erlang_density k l"]
emeasure_erlang_density[of l]
erlang_distributed_le[of X k l] by (auto intro!: erlang_distributedI simp: one_ennreal_def emeasure_eq_measure)
lemma (in prob_space) erlang_distributed_mult_const: assumes erlX: "distributed M lborel X (erlang_density k l)" assumes a_pos[arith]: "0 < \" "0 < l" shows"distributed M lborel (\x. \ * X x) (erlang_density k (l / \))" proof (subst erlang_distributed_iff, safe) have [measurable]: "random_variable borel X"and [arith]: "0 < l " and [simp]: "\a. 0 \ a \ prob {x \ space M. X x \ a} = erlang_CDF k l a" by(insert erlX, auto simp: erlang_distributed_iff)
show"random_variable borel (\x. \ * X x)" "0 < l / \" "0 < l / \" by (auto simp:field_simps)
fix a:: real assume [arith]: "0 \ a" obtain b:: real where [simp, arith]: "b = a/ \" by blast
have [arith]: "0 \ b" by (auto simp: divide_nonneg_pos)
have"prob {x \ space M. \ * X x \ a} = prob {x \ space M. X x \ b}" by (rule arg_cong[where f= prob]) (auto simp:field_simps)
moreoverhave"prob {x \ space M. X x \ b} = erlang_CDF k l b" by auto moreoverhave"erlang_CDF k (l / \) a = erlang_CDF k l b" unfolding erlang_CDF_def by auto ultimatelyshow"prob {x \ space M. \ * X x \ a} = erlang_CDF k (l / \) a" by fastforce qed
lemma (in prob_space) has_bochner_integral_erlang_ith_moment: fixes k i :: nat and l :: real assumes [arith]: "0 < l"and D: "distributed M lborel X (erlang_density k l)" shows"has_bochner_integral M (\x. X x ^ i) (fact (k + i) / (fact k * l ^ i))" proof (rule has_bochner_integral_nn_integral) show"AE x in M. 0 \ X x ^ i" by (subst distributed_AE2[OF D]) (auto simp: erlang_density_def) show"(\\<^sup>+ x. ennreal (X x ^ i) \M) = ennreal (fact (k + i) / (fact k * l ^ i))" using nn_integral_erlang_ith_moment[of l k i] by (subst distributed_nn_integral[symmetric, OF D]) (auto simp: ennreal_mult') qed (insert distributed_measurable[OF D], auto)
lemma (in prob_space) erlang_ith_moment_integrable: "0 < l \ distributed M lborel X (erlang_density k l) \ integrable M (\x. X x ^ i)" by rule (rule has_bochner_integral_erlang_ith_moment)
lemma (in prob_space) erlang_ith_moment: "0 < l \ distributed M lborel X (erlang_density k l) \
expectation (\<lambda>x. X x ^ i) = fact (k + i) / (fact k * l ^ i)" by (rule has_bochner_integral_integral_eq) (rule has_bochner_integral_erlang_ith_moment)
lemma (in prob_space) erlang_distributed_variance: assumes [arith]: "0 < l"and"distributed M lborel X (erlang_density k l)" shows"variance X = (k + 1) / l\<^sup>2" proof (subst variance_eq) show"integrable M X""integrable M (\x. (X x)\<^sup>2)" using erlang_ith_moment_integrable[OF assms, of 1] erlang_ith_moment_integrable[OF assms, of 2] by auto
show"expectation (\x. (X x)\<^sup>2) - (expectation X)\<^sup>2 = real (k + 1) / l\<^sup>2" using erlang_ith_moment[OF assms, of 1] erlang_ith_moment[OF assms, of 2] by simp (auto simp: power2_eq_square field_simps of_nat_Suc) qed
abbreviation exponential_density :: "real \ real \ real" where "exponential_density \ erlang_density 0"
lemma exponential_density_def: "exponential_density l x = (if x < 0 then 0 else l * exp (- x * l))" by (simp add: fun_eq_iff erlang_density_def)
lemma erlang_CDF_0: "erlang_CDF 0 l a = (if 0 \ a then 1 - exp (- l * a) else 0)" by (simp add: erlang_CDF_def)
lemma prob_space_exponential_density: "0 < l \ prob_space (density lborel (exponential_density l))" by (rule prob_space_erlang_density)
lemma (in prob_space) exponential_distributedD_le: assumes D: "distributed M lborel X (exponential_density l)"and a: "0 \ a" and l: "0 < l" shows"\
(x in M. X x \ a) = 1 - exp (- a * l)"
using erlang_distributed_le[OF D l a] a by (simp add: erlang_CDF_def)
lemma (in prob_space) exponential_distributedD_gt: assumes D: "distributed M lborel X (exponential_density l)"and a: "0 \ a" and l: "0 < l" shows"\
(x in M. a < X x ) = exp (- a * l)"
using erlang_distributed_gt[OF D l a] a by (simp add: erlang_CDF_def)
lemma (in prob_space) exponential_distributed_memoryless: assumes D: "distributed M lborel X (exponential_density l)"and a: "0 \ a" and l: "0 < l" and t: "0 \ t" shows"\
(x in M. a + t < X x \ a < X x) = \
(x in M. t < X x)"
proof - have"\
(x in M. a + t < X x \ a < X x) = \
(x in M. a + t < X x) / \
(x in M. a < X x)"
using\<open>0 \<le> t\<close> by (auto simp: cond_prob_def intro!: arg_cong[where f=prob] arg_cong2[where f="(/)"]) alsohave"\ = exp (- (a + t) * l) / exp (- a * l)" using a t by (simp add: exponential_distributedD_gt[OF D _ l]) alsohave"\ = exp (- t * l)" using l by (auto simp: field_simps exp_add[symmetric]) finallyshow ?thesis using t by (simp add: exponential_distributedD_gt[OF D _ l]) qed
lemma exponential_distributedI: assumes X[measurable]: "X \ borel_measurable M" and [arith]: "0 < l" and X_distr: "\a. 0 \ a \ emeasure M {x\space M. X x \ a} = 1 - exp (- a * l)" shows"distributed M lborel X (exponential_density l)" proof (rule erlang_distributedI) fix a :: real assume"0 \ a" then show "emeasure M {x \ space M. X x \ a} = ennreal (erlang_CDF 0 l a)" using X_distr[of a] by (simp add: erlang_CDF_def ennreal_minus ennreal_1[symmetric] del: ennreal_1) qed fact+
lemma (in prob_space) exponential_distributed_iff: assumes"0 < l" shows"distributed M lborel X (exponential_density l) \
(X \<in> borel_measurable M \<and> (\<forall>a\<ge>0. \<P>(x in M. X x \<le> a) = 1 - exp (- a * l)))" using assms erlang_distributed_iff[of l X 0] by (auto simp: erlang_CDF_0)
lemma (in prob_space) exponential_distributed_expectation: "0 < l \ distributed M lborel X (exponential_density l) \ expectation X = 1 / l" using erlang_ith_moment[of l X 0 1] by simp
lemma exponential_density_nonneg: "0 < l \ 0 \ exponential_density l x" by (auto simp: exponential_density_def)
lemma (in prob_space) exponential_distributed_min: assumes"0 < l""0 < u" assumes expX: "distributed M lborel X (exponential_density l)" assumes expY: "distributed M lborel Y (exponential_density u)" assumes ind: "indep_var borel X borel Y" shows"distributed M lborel (\x. min (X x) (Y x)) (exponential_density (l + u))" proof (subst exponential_distributed_iff, safe) have randX: "random_variable borel X" using expX \<open>0 < l\<close> by (simp add: exponential_distributed_iff) moreoverhave randY: "random_variable borel Y" using expY \<open>0 < u\<close> by (simp add: exponential_distributed_iff) ultimatelyshow"random_variable borel (\x. min (X x) (Y x))" by auto
show" 0 < l + u" using\<open>0 < l\<close> \<open>0 < u\<close> by auto
fix a::real assume a[arith]: "0 \ a" have gt1[simp]: "\
(x in M. a < X x ) = exp (- a * l)"
by (rule exponential_distributedD_gt[OF expX a]) fact have gt2[simp]: "\
(x in M. a < Y x ) = exp (- a * u)"
by (rule exponential_distributedD_gt[OF expY a]) fact
have"\
(x in M. a < (min (X x) (Y x)) ) = \
(x in M. a < (X x) \ a < (Y x))" by (auto intro!:arg_cong[where f=prob])
alsohave" ... = \
(x in M. a < (X x)) * \
(x in M. a< (Y x) )"
using prob_indep_random_variable[OF ind, of "{a <..}""{a <..}"] by simp alsohave" ... = exp (- a * (l + u))"by (auto simp:field_simps mult_exp_exp) finallyhave indep_prob: "\
(x in M. a < (min (X x) (Y x)) ) = exp (- a * (l + u))" .
have"{x \ space M. (min (X x) (Y x)) \a } = (space M - {x \ space M. a<(min (X x) (Y x)) })" by auto thenhave"1 - prob {x \ space M. a < (min (X x) (Y x))} = prob {x \ space M. (min (X x) (Y x)) \ a}" using randX randY by (auto simp: prob_compl) thenshow"prob {x \ space M. (min (X x) (Y x)) \ a} = 1 - exp (- a * (l + u))" using indep_prob by auto qed
lemma (in prob_space) exponential_distributed_Min: assumes finI: "finite I" assumes A: "I \ {}" assumes l: "\i. i \ I \ 0 < l i" assumes expX: "\i. i \ I \ distributed M lborel (X i) (exponential_density (l i))" assumes ind: "indep_vars (\i. borel) X I" shows"distributed M lborel (\x. Min ((\i. X i x)`I)) (exponential_density (\i\I. l i))" using assms proof (induct rule: finite_ne_induct) case (singleton i) thenshow ?caseby simp next case (insert i I) thenhave"distributed M lborel (\x. min (X i x) (Min ((\i. X i x)`I))) (exponential_density (l i + (\i\I. l i)))" by (intro exponential_distributed_min indep_vars_Min insert)
(auto intro: indep_vars_subset sum_pos) thenshow ?case using insert by simp qed
lemma (in prob_space) exponential_distributed_variance: "0 < l \ distributed M lborel X (exponential_density l) \ variance X = 1 / l\<^sup>2" using erlang_distributed_variance[of l X 0] by simp
lemma nn_integral_zero': "AE x in M. f x = 0 \ (\\<^sup>+x. f x \M) = 0" by (simp cong: nn_integral_cong_AE)
lemma convolution_erlang_density: fixes k\<^sub>1 k\<^sub>2 :: nat assumes [simp, arith]: "0 < l" shows"(\x. \\<^sup>+y. ennreal (erlang_density k\<^sub>1 l (x - y)) * ennreal (erlang_density k\<^sub>2 l y) \lborel) =
(erlang_density (Suc k\<^sub>1 + Suc k\<^sub>2 - 1) l)"
(is"?LHS = ?RHS") proof fix x :: real have"x \ 0 \ 0 < x" by arith thenshow"?LHS x = ?RHS x" proof assume"x \ 0" then show ?thesis apply (subst nn_integral_zero') apply (rule AE_I[where N="{0}"]) apply (auto simp add: erlang_density_def not_less) done next note zero_le_mult_iff[simp] zero_le_divide_iff[simp]
have I_eq1: "integral\<^sup>N lborel (erlang_density (Suc k\<^sub>1 + Suc k\<^sub>2 - 1) l) = 1" using nn_integral_erlang_ith_moment[of l "Suc k\<^sub>1 + Suc k\<^sub>2 - 1" 0] by (simp del: fact_Suc)
have 1: "(\\<^sup>+ x. ennreal (erlang_density (Suc k\<^sub>1 + Suc k\<^sub>2 - 1) l x * indicator {0<..} x) \lborel) = 1" apply (subst I_eq1[symmetric]) unfolding erlang_density_def by (auto intro!: nn_integral_cong split:split_indicator)
let ?I = "(integral\<^sup>N lborel (\y. ennreal ((1 - y)^ k\<^sub>1 * y^k\<^sub>2 * indicator {0..1} y)))" let ?C = "(fact (Suc (k\<^sub>1 + k\<^sub>2))) / ((fact k\<^sub>1) * (fact k\<^sub>2))" let ?s = "Suc k\<^sub>1 + Suc k\<^sub>2 - 1" let ?L = "(\x. \\<^sup>+y. ennreal (erlang_density k\<^sub>1 l (x- y) * erlang_density k\<^sub>2 l y * indicator {0..x} y) \lborel)"
{ fix x :: real assume [arith]: "0 < x" have *: "\x y n. (x - y * x::real)^n = x^n * (1 - y)^n" unfolding power_mult_distrib[symmetric] by (simp add: field_simps)
have"?LHS x = ?L x" unfolding erlang_density_def by (auto intro!: nn_integral_cong simp: ennreal_mult split:split_indicator) alsohave"... = (\x. ennreal ?C * ?I * erlang_density ?s l x) x" apply (subst nn_integral_real_affine[where c=x and t = 0]) apply (simp_all add: nn_integral_cmult[symmetric] nn_integral_multc[symmetric] del: fact_Suc) apply (intro nn_integral_cong) apply (auto simp add: erlang_density_def mult_less_0_iff exp_minus field_simps exp_diff power_add *
ennreal_mult[symmetric]
simp del: fact_Suc split: split_indicator) done finallyhave"(\\<^sup>+y. ennreal (erlang_density k\<^sub>1 l (x - y) * erlang_density k\<^sub>2 l y) \lborel) =
(\<lambda>x. ennreal ?C * ?I * erlang_density ?s l x) x" by (simp add: ennreal_mult) } note * = this
thenshow ?thesis using * by (simp add: ennreal_mult) qed qed
lemma (in prob_space) sum_indep_erlang: assumes indep: "indep_var borel X borel Y" assumes [simp, arith]: "0 < l" assumes erlX: "distributed M lborel X (erlang_density k\<^sub>1 l)" assumes erlY: "distributed M lborel Y (erlang_density k\<^sub>2 l)" shows"distributed M lborel (\x. X x + Y x) (erlang_density (Suc k\<^sub>1 + Suc k\<^sub>2 - 1) l)" using assms apply (subst convolution_erlang_density[symmetric, OF \<open>0<l\<close>]) apply (intro distributed_convolution) apply auto done
lemma (in prob_space) erlang_distributed_sum: assumes finI : "finite I" assumes A: "I \ {}" assumes [simp, arith]: "0 < l" assumes expX: "\i. i \ I \ distributed M lborel (X i) (erlang_density (k i) l)" assumes ind: "indep_vars (\i. borel) X I" shows"distributed M lborel (\x. \i\I. X i x) (erlang_density ((\i\I. Suc (k i)) - 1) l)" using assms proof (induct rule: finite_ne_induct) case (singleton i) thenshow ?caseby auto next case (insert i I) thenhave"distributed M lborel (\x. (X i x) + (\i\ I. X i x)) (erlang_density (Suc (k i) + Suc ((\i\I. Suc (k i)) - 1) - 1) l)" by(intro sum_indep_erlang indep_vars_sum) (auto intro!: indep_vars_subset) alsohave"(\x. (X i x) + (\i\ I. X i x)) = (\x. \i\insert i I. X i x)" using insert by auto alsohave"Suc(k i) + Suc ((\i\I. Suc (k i)) - 1) - 1 = (\i\insert i I. Suc (k i)) - 1" using insert by (auto intro!: Suc_pred simp: ac_simps) finallyshow ?caseby fast qed
lemma (in prob_space) exponential_distributed_sum: assumes finI: "finite I" assumes A: "I \ {}" assumes l: "0 < l" assumes expX: "\i. i \ I \ distributed M lborel (X i) (exponential_density l)" assumes ind: "indep_vars (\i. borel) X I" shows"distributed M lborel (\x. \i\I. X i x) (erlang_density ((card I) - 1) l)" using erlang_distributed_sum[OF assms] by simp
lemma (in information_space) entropy_exponential: assumes l[simp, arith]: "0 < l" assumes D: "distributed M lborel X (exponential_density l)" shows"entropy b lborel X = log b (exp 1 / l)" proof - have [simp]: "integrable lborel (exponential_density l)" using distributed_integrable[OF D, of "\_. 1"] by simp
have [simp]: "integral\<^sup>L lborel (exponential_density l) = 1" using distributed_integral[OF D, of "\_. 1"] by (simp add: prob_space)
have [simp]: "integrable lborel (\x. exponential_density l x * x)" using erlang_ith_moment_integrable[OF l D, of 1] distributed_integrable[OF D, of "\x. x"] by simp
have [simp]: "integral\<^sup>L lborel (\x. exponential_density l x * x) = 1 / l" using erlang_ith_moment[OF l D, of 1] distributed_integral[OF D, of "\x. x"] by simp
have"entropy b lborel X = - (\ x. exponential_density l x * log b (exponential_density l x) \lborel)" using D by (rule entropy_distr) simp alsohave"(\ x. exponential_density l x * log b (exponential_density l x) \lborel) =
(\<integral> x. (ln l * exponential_density l x - l * (exponential_density l x * x)) / ln b \<partial>lborel)" by (intro Bochner_Integration.integral_cong) (auto simp: log_def ln_mult exponential_density_def field_simps) alsohave"\ = (ln l - 1) / ln b" by simp finallyshow ?thesis by (simp add: log_def ln_div) (simp add: field_split_simps) qed
subsection \<open>Uniform distribution\<close>
lemma uniform_distrI: assumes X: "X \ measurable M M'" and A: "A \ sets M'" "emeasure M' A \ \" "emeasure M' A \ 0" assumes distr: "\B. B \ sets M' \ emeasure M (X -` B \ space M) = emeasure M' (A \ B) / emeasure M' A" shows"distr M M' X = uniform_measure M' A" unfolding uniform_measure_def proof (intro measure_eqI) let ?f = "\x. indicator A x / emeasure M' A" fix B assume B: "B \ sets (distr M M' X)" with X have"emeasure M (X -` B \ space M) = emeasure M' (A \ B) / emeasure M' A" by (simp add: distr[of B] measurable_sets) alsohave"\ = (1 / emeasure M' A) * emeasure M' (A \ B)" by (simp add: divide_ennreal_def ac_simps) alsohave"\ = (\\<^sup>+ x. (1 / emeasure M' A) * indicator (A \ B) x \M')" using A B by (intro nn_integral_cmult_indicator[symmetric]) (auto intro!: ) alsohave"\ = (\\<^sup>+ x. ?f x * indicator B x \M')" by (rule nn_integral_cong) (auto split: split_indicator) finallyshow"emeasure (distr M M' X) B = emeasure (density M' ?f) B" using A B X by (auto simp add: emeasure_distr emeasure_density) qed simp
lemma uniform_distrI_borel: fixes A :: "real set" assumes X[measurable]: "X \ borel_measurable M" and A: "emeasure lborel A = ennreal r" "0 < r" and [measurable]: "A \ sets borel" assumes distr: "\a. emeasure M {x\space M. X x \ a} = emeasure lborel (A \ {.. a}) / r" shows"distributed M lborel X (\x. indicator A x / measure lborel A)" proof (rule distributedI_borel_atMost) let ?f = "\x. 1 / r * indicator A x" fix a have"emeasure lborel (A \ {..a}) \ emeasure lborel A" using A by (intro emeasure_mono) auto alsohave"\ < \" using A by simp finallyhave fin: "emeasure lborel (A \ {..a}) \ top" by simp from emeasure_eq_ennreal_measure[OF this] have fin_eq: "emeasure lborel (A \ {..a}) / r = ennreal (measure lborel (A \ {..a}) / r)" using A by (simp add: divide_ennreal measure_nonneg) thenshow"emeasure M {x\space M. X x \ a} = ennreal (measure lborel (A \ {..a}) / r)" using distr by simp
have"(\\<^sup>+ x. ennreal (indicator A x / measure lborel A * indicator {..a} x) \lborel) =
(\<integral>\<^sup>+ x. ennreal (1 / measure lborel A) * indicator (A \<inter> {..a}) x \<partial>lborel)" by (auto intro!: nn_integral_cong split: split_indicator) alsohave"\ = ennreal (1 / measure lborel A) * emeasure lborel (A \ {..a})" using\<open>A \<in> sets borel\<close> by (intro nn_integral_cmult_indicator) (auto simp: measure_nonneg) alsohave"\ = ennreal (measure lborel (A \ {..a}) / r)" unfolding emeasure_eq_ennreal_measure[OF fin] using A by (simp add: measure_def ennreal_mult'[symmetric]) finallyshow"(\\<^sup>+ x. ennreal (indicator A x / measure lborel A * indicator {..a} x) \lborel) =
ennreal (measure lborel (A \<inter> {..a}) / r)" . qed (auto simp: measure_nonneg)
lemma (in prob_space) uniform_distrI_borel_atLeastAtMost: fixes a b :: real assumes X: "X \ borel_measurable M" and "a < b" assumes distr: "\t. a \ t \ t \ b \ \
(x in M. X x \ t) = (t - a) / (b - a)"
shows"distributed M lborel X (\x. indicator {a..b} x / measure lborel {a..b})" proof (rule uniform_distrI_borel) fix t have"t < a \ (a \ t \ t \ b) \ b < t" by auto thenshow"emeasure M {x\space M. X x \ t} = emeasure lborel ({a .. b} \ {..t}) / (b - a)" proof (elim disjE conjE) assume"t < a" thenhave"emeasure M {x\space M. X x \ t} \ emeasure M {x\space M. X x \ a}" using X by (auto intro!: emeasure_mono measurable_sets) alsohave"\ = 0" using distr[of a] \<open>a < b\<close> by (simp add: emeasure_eq_measure) finallyhave"emeasure M {x\space M. X x \ t} = 0" by (simp add: antisym measure_nonneg) with\<open>t < a\<close> show ?thesis by simp next assume bnds: "a \ t" "t \ b" have"{a..b} \ {..t} = {a..t}" using bnds by auto thenshow ?thesis using\<open>a \<le> t\<close> \<open>a < b\<close> using distr[OF bnds] by (simp add: emeasure_eq_measure divide_ennreal) next assume"b < t" have"1 = emeasure M {x\space M. X x \ b}" using distr[of b] \<open>a < b\<close> by (simp add: one_ennreal_def emeasure_eq_measure) alsohave"\ \ emeasure M {x\space M. X x \ t}" using X \<open>b < t\<close> by (auto intro!: emeasure_mono measurable_sets) finallyhave"emeasure M {x\space M. X x \ t} = 1" by (simp add: antisym emeasure_eq_measure) with\<open>b < t\<close> \<open>a < b\<close> show ?thesis by (simp add: measure_def divide_ennreal) qed qed (insert X \<open>a < b\<close>, auto)
lemma (in prob_space) uniform_distributed_measure: fixes a b :: real assumes D: "distributed M lborel X (\x. indicator {a .. b} x / measure lborel {a .. b})" assumes t: "a \ t" "t \ b" shows"\
(x in M. X x \ t) = (t - a) / (b - a)"
proof - have"emeasure M {x \ space M. X x \ t} = emeasure (distr M lborel X) {.. t}" using distributed_measurable[OF D] by (subst emeasure_distr) (auto intro!: arg_cong2[where f=emeasure]) alsohave"\ = (\\<^sup>+x. ennreal (1 / (b - a)) * indicator {a .. t} x \lborel)" using distributed_borel_measurable[OF D] \<open>a \<le> t\<close> \<open>t \<le> b\<close> unfolding distributed_distr_eq_density[OF D] by (subst emeasure_density)
(auto intro!: nn_integral_cong simp: measure_def split: split_indicator) alsohave"\ = ennreal (1 / (b - a)) * (t - a)" using\<open>a \<le> t\<close> \<open>t \<le> b\<close> by (subst nn_integral_cmult_indicator) auto finallyshow ?thesis using t by (simp add: emeasure_eq_measure ennreal_mult''[symmetric] measure_nonneg) qed
lemma (in prob_space) uniform_distributed_bounds: fixes a b :: real assumes D: "distributed M lborel X (\x. indicator {a .. b} x / measure lborel {a .. b})" shows"a < b" proof (rule ccontr) assume"\ a < b" thenhave"{a .. b} = {} \ {a .. b} = {a .. a}" by simp with uniform_distributed_params[OF D] show False by (auto simp: measure_def) qed
lemma (in prob_space) uniform_distributed_iff: fixes a b :: real shows"distributed M lborel X (\x. indicator {a..b} x / measure lborel {a..b}) \
(X \<in> borel_measurable M \<and> a < b \<and> (\<forall>t\<in>{a .. b}. \<P>(x in M. X x \<le> t)= (t - a) / (b - a)))" using
uniform_distributed_bounds[of X a b]
uniform_distributed_measure[of X a b]
distributed_measurable[of M lborel X] by (auto intro!: uniform_distrI_borel_atLeastAtMost simp del: content_real_if)
lemma (in prob_space) uniform_distributed_expectation: fixes a b :: real assumes D: "distributed M lborel X (\x. indicator {a .. b} x / measure lborel {a .. b})" shows"expectation X = (a + b) / 2" proof (subst distributed_integral[OF D, of "\x. x", symmetric]) have"a < b" using uniform_distributed_bounds[OF D] .
have"(\ x. indicator {a .. b} x / measure lborel {a .. b} * x \lborel) =
(\<integral> x. (x / measure lborel {a .. b}) * indicator {a .. b} x \<partial>lborel)" by (intro Bochner_Integration.integral_cong) auto alsohave"(\ x. (x / measure lborel {a .. b}) * indicator {a .. b} x \lborel) = (a + b) / 2" proof (subst integral_FTC_Icc_real) fix x show"DERIV (\x. x\<^sup>2 / (2 * measure lborel {a..b})) x :> x / measure lborel {a..b}" using uniform_distributed_params[OF D] by (auto intro!: derivative_eq_intros simp del: content_real_if) show"isCont (\x. x / Sigma_Algebra.measure lborel {a..b}) x" using uniform_distributed_params[OF D] by (auto intro!: isCont_divide) have *: "b\<^sup>2 / (2 * measure lborel {a..b}) - a\<^sup>2 / (2 * measure lborel {a..b}) =
(b*b - a * a) / (2 * (b - a))" using\<open>a < b\<close> by (auto simp: measure_def power2_eq_square diff_divide_distrib[symmetric]) show"b\<^sup>2 / (2 * measure lborel {a..b}) - a\<^sup>2 / (2 * measure lborel {a..b}) = (a + b) / 2" using\<open>a < b\<close> unfolding * square_diff_square_factored by (auto simp: field_simps) qed (insert \<open>a < b\<close>, simp) finallyshow"(\ x. indicator {a .. b} x / measure lborel {a .. b} * x \lborel) = (a + b) / 2" . qed (auto simp: measure_nonneg)
lemma (in prob_space) uniform_distributed_variance: fixes a b :: real assumes D: "distributed M lborel X (\x. indicator {a .. b} x / measure lborel {a .. b})" shows"variance X = (b - a)\<^sup>2 / 12" proof (subst distributed_variance) have [arith]: "a < b"using uniform_distributed_bounds[OF D] . let ?\<mu> = "expectation X" let ?D = "\<lambda>x. indicator {a..b} (x + ?\<mu>) / measure lborel {a..b}" have"(\x. x\<^sup>2 * (?D x) \lborel) = (\x. x\<^sup>2 * (indicator {a - ?\ .. b - ?\} x) / measure lborel {a .. b} \lborel)" by (intro Bochner_Integration.integral_cong) (auto split: split_indicator) alsohave"\ = (b - a)\<^sup>2 / 12" by (simp add: integral_power uniform_distributed_expectation[OF D])
(simp add: eval_nat_numeral field_simps ) finallyshow"(\x. x\<^sup>2 * ?D x \lborel) = (b - a)\<^sup>2 / 12" . qed (auto intro: D simp del: content_real_if)
subsection \<open>Normal distribution\<close>
definition normal_density :: "real \ real \ real \ real" where "normal_density \ \ x = 1 / sqrt (2 * pi * \\<^sup>2) * exp (-(x - \)\<^sup>2/ (2 * \\<^sup>2))"
lemma std_normal_moment_even: "has_bochner_integral lborel (\x. std_normal_density x * x ^ (2 * k)) (fact (2 * k) / (2^k * fact k))" using normal_moment_even[of 1 0 k] by simp
lemma std_normal_moment_abs_odd: "has_bochner_integral lborel (\x. std_normal_density x * \x\^(2 * k + 1)) (sqrt (2/pi) * 2^k * fact k)" using normal_moment_abs_odd[of 1 0 k] by (simp add: ac_simps)
lemma std_normal_moment_odd: "has_bochner_integral lborel (\x. std_normal_density x * x^(2 * k + 1)) 0" using normal_moment_odd[of 1 0 k] by simp
lemma integral_std_normal_moment_even: "integral\<^sup>L lborel (\x. std_normal_density x * x^(2*k)) = fact (2 * k) / (2^k * fact k)" using std_normal_moment_even by (rule has_bochner_integral_integral_eq)
lemma integral_std_normal_moment_abs_odd: "integral\<^sup>L lborel (\x. std_normal_density x * \x\^(2 * k + 1)) = sqrt (2 / pi) * 2^k * fact k" using std_normal_moment_abs_odd by (rule has_bochner_integral_integral_eq)
lemma integral_std_normal_moment_odd: "integral\<^sup>L lborel (\x. std_normal_density x * x^(2 * k + 1)) = 0" using std_normal_moment_odd by (rule has_bochner_integral_integral_eq)
lemma integrable_std_normal_moment_abs: "integrable lborel (\x. std_normal_density x * \x\^k)" using integrable_normal_moment_abs[of 1 0 k] by simp
lemma integrable_std_normal_moment: "integrable lborel (\x. std_normal_density x * x^k)" using integrable_normal_moment[of 1 0 k] by simp
end
lemma (in prob_space) normal_density_affine: assumes X: "distributed M lborel X (normal_density \ \)" assumes [simp, arith]: "0 < \" "\ \ 0" shows"distributed M lborel (\x. \ + \ * X x) (normal_density (\ + \ * \) (\\\ * \))" proof - have eq: "\x. \\\ * normal_density (\ + \ * \) (\\\ * \) (x * \ + \) =
normal_density \<mu> \<sigma> x" by (simp add: normal_density_def real_sqrt_mult field_simps)
(simp add: power2_eq_square field_simps) show ?thesis by (rule distributed_affineI[OF _ \<open>\<alpha> \<noteq> 0\<close>, where t=\<beta>])
(simp_all add: eq X ennreal_mult'[symmetric]) qed
lemma (in prob_space) normal_standard_normal_convert: assumes pos_var[simp, arith]: "0 < \" shows"distributed M lborel X (normal_density \ \) = distributed M lborel (\x. (X x - \) / \) std_normal_density" proof auto assume"distributed M lborel X (\x. ennreal (normal_density \ \ x))" thenhave"distributed M lborel (\x. -\ / \ + (1/\) * X x) (\x. ennreal (normal_density (-\ / \ + (1/\)* \) (\1/\\ * \) x))" by(rule normal_density_affine) auto
thenshow"distributed M lborel (\x. (X x - \) / \) (\x. ennreal (std_normal_density x))" by (simp add: diff_divide_distrib[symmetric] field_simps) next assume *: "distributed M lborel (\x. (X x - \) / \) (\x. ennreal (std_normal_density x))" have"distributed M lborel (\x. \ + \ * ((X x - \) / \)) (\x. ennreal (normal_density \ \\\ x))" using normal_density_affine[OF *, of \<sigma> \<mu>] by simp thenshow"distributed M lborel X (\x. ennreal (normal_density \ \ x))" by simp qed
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.43Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.