(* Title: HOL/Probability/Distributions.thy Author: Sudeep Kanav, TU München Author: Johannes Hölzl, TU München Author: Jeremy Avigad, CMU *)
section‹Properties of Various Distributions›
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‹Erlang›
lemma nn_intergal_power_times_exp_Icc: assumes [arith]: "0 ≤ a" shows"(∫🪙+x. ennreal (x^k * exp (-x)) * indicator {0 .. a} x ∂lborel) = (1 - (∑n≤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))) = (∫🪙+x. ennreal (x^k * exp (-x)) * indicator {0 .. a} x * (inverse (real_of_nat (fact k))) ∂lborel)" by (intro nn_integral_multc[symmetric]) auto alsohave"… = (∫🪙+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"(∫🪙+ 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"(∫🪙+x. ennreal (erlang_density k l x) * indicator {.. a} x ∂lborel) = (∫🪙+x. (l/fact k) * (ennreal ((l*x)^k * exp (- (l*x))) * indicator {0 .. a} x) ∂lborel)" by (intro nn_integral_cong)
(auto simp: erlang_density_def power_mult_distrib ennreal_mult[symmetric] split: split_indicator) alsohave"… = (l/fact k) * (∫🪙+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) * (∫🪙+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"(∫🪙+ x. ennreal (erlang_density k l x) * indicator {.. a} x ∂lborel) = (∫🪙+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"(∫🪙+ 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"(∫🪙+ x. ennreal (erlang_density k l x * x^i) ∂lborel) = (∫🪙+x. (l/(fact k * l^i)) * (ennreal ((l*x)^(k+i) * exp (- (l*x))) * indicator {0 ..} x) ∂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)) * (∫🪙+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) * (∫🪙+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"P(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"P(x in M. a < X x ) = 1 - (erlang_CDF k l a)" proof - have" 1 - (erlang_CDF k l a) = 1 - P(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"… = P(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"(∫🪙+ 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 ∈ borel_measurable M ∧ 0 < l ∧ (∀a≥0. P(x in M. X x ≤ 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"(∫🪙+ 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 (λ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🪙2" proof (subst variance_eq) show"integrable M X""integrable M (λx. (X x)🪙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)🪙2) - (expectation X)🪙2 = real (k + 1) / l🪙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
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"P(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"P(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"andt: "0 ≤ t" shows"P(x in M. a + t < X x ∣ a < X x) = P(x in M. t < X x)" proof - have"P(x in M. a + t < X x ∣ a < X x) = P(x in M. a + t < X x) / P(x in M. a < X x)" using‹0 ≤ t›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"thenshow"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 ∈ borel_measurable M ∧ (∀a≥0. P(x in M. X x ≤ 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 ‹0 🚫›by (simp add: exponential_distributed_iff) moreoverhave randY: "random_variable borel Y" using expY ‹0 🚫›by (simp add: exponential_distributed_iff) ultimatelyshow"random_variable borel (λx. min (X x) (Y x))"by auto
show" 0 < l + u" using‹0 🚫›‹0 🚫›by auto
fix a::real assume a[arith]: "0 ≤ a" have gt1[simp]: "P(x in M. a < X x ) = exp (- a * l)" by (rule exponential_distributedD_gt[OF expX a]) fact have gt2[simp]: "P(x in M. a < Y x ) = exp (- a * u)" by (rule exponential_distributedD_gt[OF expY a]) fact
have"P(x in M. a < (min (X x) (Y x)) ) = P(x in M. a < (X x) ∧ a < (Y x))"by (auto intro!:arg_cong[where f=prob])
alsohave" ... = P(x in M. a < (X x)) * P(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: "P(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🪙2" using erlang_distributed_variance[of l X 0] by simp
lemma nn_integral_zero': "AE x in M. f x = 0 ==> (∫🪙+x. f x ∂M) = 0" by (simp cong: nn_integral_cong_AE)
let ?I = "(integral🪙N lborel (λy. ennreal ((1 - y)^ k🪙1 * y^k🪙2 * indicator {0..1} y)))" let ?C = "(fact (Suc (k🪙1 + k🪙2))) / ((fact k🪙1) * (fact k🪙2))" let ?s = "Suc k🪙1 + Suc k🪙2 - 1" let ?L = "(λx. ∫🪙+y. ennreal (erlang_density k🪙1 l (x- y) * erlang_density k🪙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"(∫🪙+y. ennreal (erlang_density k🪙1 l (x - y) * erlang_density k🪙2 l y) ∂lborel) = (λ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🪙1 l)" assumes erlY: "distributed M lborel Y (erlang_density k🪙2 l)" shows"distributed M lborel (λx. X x + Y x) (erlang_density (Suc k🪙1 + Suc k🪙2 - 1) l)" using assms apply (subst convolution_erlang_density[symmetric, OF ‹0🚫›]) 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🪙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🪙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) = (∫ x. (ln l * exponential_density l x - l * (exponential_density l x * x)) / ln b∂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‹Uniform distribution›
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"… = (∫🪙+ x. (1 / emeasure M' A) * indicator (A ∩ B) x ∂M')" using A B by (intro nn_integral_cmult_indicator[symmetric]) (auto intro!: ) alsohave"… = (∫🪙+ 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"(∫🪙+ x. ennreal (indicator A x / measure lborel A * indicator {..a} x) ∂lborel) = (∫🪙+ x. ennreal (1 / measure lborel A) * indicator (A ∩ {..a}) x ∂lborel)" by (auto intro!: nn_integral_cong split: split_indicator) alsohave"… = ennreal (1 / measure lborel A) * emeasure lborel (A ∩ {..a})" using‹A ∈ sets borel› 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"(∫🪙+ x. ennreal (indicator A x / measure lborel A * indicator {..a} x) ∂lborel) = ennreal (measure lborel (A ∩ {..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 ==>P(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] ‹a 🚫›by (simp add: emeasure_eq_measure) finallyhave"emeasure M {x∈space M. X x ≤ t} = 0" by (simp add: antisym measure_nonneg) with‹t 🚫›show ?thesis by simp next assume bnds: "a ≤ t""t ≤ b" have"{a..b} ∩ {..t} = {a..t}" using bnds by auto thenshow ?thesis using‹a ≤ t›‹a 🚫› 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] ‹a 🚫›by (simp add: one_ennreal_def emeasure_eq_measure) alsohave"…≤ emeasure M {x∈space M. X x ≤ t}" using X ‹b 🚫›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‹b 🚫›‹a 🚫›show ?thesis by (simp add: measure_def divide_ennreal) qed qed (insert X ‹a 🚫›, 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"P(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"… = (∫🪙+x. ennreal (1 / (b - a)) * indicator {a .. t} x ∂lborel)" using distributed_borel_measurable[OF D] ‹a ≤ t›‹t ≤ b› 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‹a ≤ t›‹t ≤ b› 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 ∈ borel_measurable M ∧ a < b ∧ (∀t∈{a .. b}. P(x in M. X x ≤ 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) = (∫ x. (x / measure lborel {a .. b}) * indicator {a .. b} x ∂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🪙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🪙2 / (2 * measure lborel {a..b}) - a🪙2 / (2 * measure lborel {a..b}) = (b*b - a * a) / (2 * (b - a))" using‹a 🚫› by (auto simp: measure_def power2_eq_square diff_divide_distrib[symmetric]) show"b🪙2 / (2 * measure lborel {a..b}) - a🪙2 / (2 * measure lborel {a..b}) = (a + b) / 2" using‹a 🚫› unfolding * square_diff_square_factored by (auto simp: field_simps) qed (insert ‹a 🚫›, 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)🪙2 / 12" proof (subst distributed_variance) have [arith]: "a < b"using uniform_distributed_bounds[OF D] . let ?μ = "expectation X"let ?D = "λx. indicator {a..b} (x + ?μ) / measure lborel {a..b}" have"(∫x. x🪙2 * (?D x) ∂lborel) = (∫x. x🪙2 * (indicator {a - ?μ .. b - ?μ} x) / measure lborel {a .. b} ∂lborel)" by (intro Bochner_Integration.integral_cong) (auto split: split_indicator) alsohave"… = (b - a)🪙2 / 12" by (simp add: integral_power uniform_distributed_expectation[OF D])
(simp add: eval_nat_numeral field_simps ) finallyshow"(∫x. x🪙2 * ?D x ∂lborel) = (b - a)🪙2 / 12" . qed (auto intro: D simp del: content_real_if)
subsection‹Normal distribution›
definition normal_density :: "real ==> real ==> real ==> real"where "normal_density μ σ x = 1 / sqrt (2 * pi * σ🪙2) * exp (-(x - μ)🪙2/ (2 * σ🪙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🪙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🪙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🪙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 μ σ 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 _ ‹α ≠ 0›, where t=β])
(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 σ μ] by simp thenshow"distributed M lborel X (λx. ennreal (normal_density μ σ x))"by simp qed
lemma (in prob_space) add_indep_normal: assumes indep: "indep_var borel X borel Y" assumes pos_var[arith]: "0 < σ""0 < τ" assumes normalX[simp]: "distributed M lborel X (normal_density μ σ)" assumes normalY[simp]: "distributed M lborel Y (normal_density ν τ)" shows"distributed M lborel (λx. X x + Y x) (normal_density (μ + ν) (sqrt (σ🪙2 + τ🪙2)))" proof - have ind[simp]: "indep_var borel (λx. - μ + X x) borel (λx. - ν + Y x)" proof - have"indep_var borel ( (λx. -μ + x) o X) borel ((λx. - ν + x) o Y)" by (auto intro!: indep_var_compose assms) thenshow ?thesis by (simp add: o_def) qed
have"distributed M lborel (λx. -μ + 1 * X x) (normal_density (- μ + 1 * μ) (∣1∣ * σ))" by(rule normal_density_affine[OF normalX pos_var(1), of 1 "-μ"]) simp thenhave 1[simp]: "distributed M lborel (λx. - μ + X x) (normal_density 0 σ)"by simp
have"distributed M lborel (λx. -ν + 1 * Y x) (normal_density (- ν + 1 * ν) (∣1∣ * τ))" by(rule normal_density_affine[OF normalY pos_var(2), of 1 "-ν"]) simp thenhave 2[simp]: "distributed M lborel (λx. - ν + Y x) (normal_density 0 τ)"by simp
have *: "distributed M lborel (λx. (- μ + X x) + (- ν + Y x)) (λx. ennreal (normal_density 0 (sqrt (σ🪙2 + τ🪙2)) x))" using distributed_convolution[OF ind 1 2] conv_normal_density_zero_mean[OF pos_var] by (simp add: ennreal_mult'[symmetric] normal_density_nonneg)
have"distributed M lborel (λx. μ + ν + 1 * (- μ + X x + (- ν + Y x))) (λx. ennreal (normal_density (μ + ν + 1 * 0) (∣1∣ * sqrt (σ🪙2 + τ🪙2)) x))" by (rule normal_density_affine[OF *, of 1 "μ + ν"]) (auto simp: add_pos_pos)
thenshow ?thesis by auto qed
lemma (in prob_space) diff_indep_normal: assumes indep[simp]: "indep_var borel X borel Y" assumes [simp, arith]: "0 < σ""0 < τ" assumes normalX[simp]: "distributed M lborel X (normal_density μ σ)" assumes normalY[simp]: "distributed M lborel Y (normal_density ν τ)" shows"distributed M lborel (λx. X x - Y x) (normal_density (μ - ν) (sqrt (σ🪙2 + τ🪙2)))" proof - have"distributed M lborel (λx. 0 + - 1 * Y x) (λx. ennreal (normal_density (0 + - 1 * ν) (∣- 1∣ * τ) x))" by(rule normal_density_affine, auto) thenhave [simp]:"distributed M lborel (λx. - Y x) (λx. ennreal (normal_density (- ν) τ x))"by simp
have"distributed M lborel (λx. X x + (- Y x)) (normal_density (μ + - ν) (sqrt (σ🪙2 + τ🪙2)))" apply (rule add_indep_normal) apply (rule indep_var_compose[unfolded comp_def, of borel _ borel _ "λx. x" _ "λx. - x"]) apply simp_all done thenshow ?thesis by simp qed
lemma (in prob_space) sum_indep_normal: assumes"finite I""I ≠ {}""indep_vars (λi. borel) X I" assumes"∧i. i ∈ I ==> 0 < σ i" assumes normal: "∧i. i ∈ I ==> distributed M lborel (X i) (normal_density (μ i) (σ i))" shows"distributed M lborel (λx. ∑i∈I. X i x) (normal_density (∑i∈I. μ i) (sqrt (∑i∈I. (σ i)🪙2)))" using assms proof (induct I rule: finite_ne_induct) case (singleton i) thenshow ?caseby (simp add : abs_of_pos) next case (insert i I) thenhave 1: "distributed M lborel (λx. (X i x) + (∑i∈I. X i x)) (normal_density (μ i + sum μ I) (sqrt ((σ i)🪙2 + (sqrt (∑i∈I. (σ i)🪙2))🪙2)))" apply (intro add_indep_normal indep_vars_sum insert real_sqrt_gt_zero) apply (auto intro: indep_vars_subset intro!: sum_pos) apply fastforce done have 2: "(λx. (X i x)+ (∑i∈I. X i x)) = (λx. (∑j∈insert i I. X j x))" "μ i + sum μ I = sum μ (insert i I)" using insert by auto
have 3: "(sqrt ((σ i)🪙2 + (sqrt (∑i∈I. (σ i)🪙2))🪙2)) = (sqrt (∑i∈insert i I. (σ i)🪙2))" using insert by (simp add: sum_nonneg)
show ?caseusing 1 2 3 by simp qed
lemma (in prob_space) standard_normal_distributed_expectation: assumes D: "distributed M lborel X std_normal_density" shows"expectation X = 0" using integral_std_normal_moment_odd[of 0]
distributed_integral[OF D, of "λx. x", symmetric] by auto
lemma (in prob_space) normal_distributed_expectation: assumes σ[arith]: "0 < σ" assumes D: "distributed M lborel X (normal_density μ σ)" shows"expectation X = μ" using integral_normal_moment_nz_1[OF σ, of μ] distributed_integral[OF D, of "λx. x", symmetric] by (auto simp: field_simps)
lemma (in prob_space) normal_distributed_variance: fixes a b :: real assumes [simp, arith]: "0 < σ" assumes D: "distributed M lborel X (normal_density μ σ)" shows"variance X = σ🪙2" using integral_normal_moment_even[of σ μ 1] by (subst distributed_integral[OF D, symmetric])
(simp_all add: eval_nat_numeral normal_distributed_expectation[OF assms])
lemma (in prob_space) standard_normal_distributed_variance: "distributed M lborel X std_normal_density ==> variance X = 1" using normal_distributed_variance[of 1 X 0] by simp
lemma (in information_space) entropy_normal_density: assumes [arith]: "0 < σ" assumes D: "distributed M lborel X (normal_density μ σ)" shows"entropy b lborel X = log b (2 * pi * exp 1 * σ🪙2) / 2" proof - have"entropy b lborel X = - (∫ x. normal_density μ σ x * log b (normal_density μ σ x)∂lborel)" using D by (rule entropy_distr) simp alsohave"… = - (∫ x. normal_density μ σ x * (- ln (2 * pi * σ🪙2) - (x - μ)🪙2 / σ🪙2) / (2 * ln b) ∂lborel)" by (intro arg_cong[where f="uminus"] Bochner_Integration.integral_cong)
(auto simp: normal_density_def field_simps ln_mult log_def ln_div ln_sqrt) alsohave"… = - (∫x. - (normal_density μ σ x * (ln (2 * pi * σ🪙2)) + (normal_density μ σ x * (x - μ)🪙2) / σ🪙2) / (2 * ln b) ∂lborel)" by (intro arg_cong[where f="uminus"] Bochner_Integration.integral_cong) (auto simp: field_split_simps field_simps) alsohave"… = (∫x. normal_density μ σ x * (ln (2 * pi * σ🪙2)) + (normal_density μ σ x * (x - μ)🪙2) / σ🪙2 ∂lborel) / (2 * ln b)" by (simp del: minus_add_distrib) alsohave"… = (ln (2 * pi * σ🪙2) + 1) / (2 * ln b)" using integral_normal_moment_even[of σ μ 1] by (simp add: integrable_normal_moment fact_numeral) alsohave"… = log b (2 * pi * exp 1 * σ🪙2) / 2" by (simp add: log_def field_simps ln_mult) finallyshow ?thesis . qed
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.53 Sekunden
(vorverarbeitet am 2026-05-03)
¤
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 und die Messung sind noch experimentell.