src/HOL/Probability/Lebesgue_Measure.thy
changeset 59425 c5e79df8cc21
parent 59357 f366643536cd
child 59554 4044f53326c9
equal deleted inserted replaced
59424:ca2336984f6a 59425:c5e79df8cc21
   527   ultimately have "emeasure lborel A \<le> 0" using emeasure_mono
   527   ultimately have "emeasure lborel A \<le> 0" using emeasure_mono
   528     by (metis assms bot.extremum_unique emeasure_empty image_eq_UN range_from_nat_into sets.empty_sets)
   528     by (metis assms bot.extremum_unique emeasure_empty image_eq_UN range_from_nat_into sets.empty_sets)
   529   thus ?thesis by (auto simp add: emeasure_le_0_iff)
   529   thus ?thesis by (auto simp add: emeasure_le_0_iff)
   530 qed
   530 qed
   531 
   531 
       
   532 lemma countable_imp_null_set_lborel: "countable A \<Longrightarrow> A \<in> null_sets lborel"
       
   533   by (simp add: null_sets_def emeasure_lborel_countable sets.countable)
       
   534 
       
   535 lemma finite_imp_null_set_lborel: "finite A \<Longrightarrow> A \<in> null_sets lborel"
       
   536   by (intro countable_imp_null_set_lborel countable_finite)
       
   537 
       
   538 lemma lborel_neq_count_space[simp]: "lborel \<noteq> count_space (A::('a::ordered_euclidean_space) set)"
       
   539 proof
       
   540   assume asm: "lborel = count_space A"
       
   541   have "space lborel = UNIV" by simp
       
   542   hence [simp]: "A = UNIV" by (subst (asm) asm) (simp only: space_count_space)
       
   543   have "emeasure lborel {undefined::'a} = 1" 
       
   544       by (subst asm, subst emeasure_count_space_finite) auto
       
   545   moreover have "emeasure lborel {undefined} \<noteq> 1" by simp
       
   546   ultimately show False by contradiction
       
   547 qed
       
   548 
   532 subsection {* Affine transformation on the Lebesgue-Borel *}
   549 subsection {* Affine transformation on the Lebesgue-Borel *}
   533 
   550 
   534 lemma lborel_eqI:
   551 lemma lborel_eqI:
   535   fixes M :: "'a::euclidean_space measure"
   552   fixes M :: "'a::euclidean_space measure"
   536   assumes emeasure_eq: "\<And>l u. (\<And>b. b \<in> Basis \<Longrightarrow> l \<bullet> b \<le> u \<bullet> b) \<Longrightarrow> emeasure M (box l u) = (\<Prod>b\<in>Basis. (u - l) \<bullet> b)"
   553   assumes emeasure_eq: "\<And>l u. (\<And>b. b \<in> Basis \<Longrightarrow> l \<bullet> b \<le> u \<bullet> b) \<Longrightarrow> emeasure M (box l u) = (\<Prod>b\<in>Basis. (u - l) \<bullet> b)"
   649     has_bochner_integral lborel f x \<longleftrightarrow>
   666     has_bochner_integral lborel f x \<longleftrightarrow>
   650     has_bochner_integral lborel (\<lambda>x. f (t + c * x)) (x /\<^sub>R \<bar>c\<bar>)"
   667     has_bochner_integral lborel (\<lambda>x. f (t + c * x)) (x /\<^sub>R \<bar>c\<bar>)"
   651   unfolding has_bochner_integral_iff lborel_integrable_real_affine_iff
   668   unfolding has_bochner_integral_iff lborel_integrable_real_affine_iff
   652   by (simp_all add: lborel_integral_real_affine[symmetric] divideR_right cong: conj_cong)
   669   by (simp_all add: lborel_integral_real_affine[symmetric] divideR_right cong: conj_cong)
   653 
   670 
       
   671 lemma lborel_distr_uminus: "distr lborel borel uminus = (lborel :: real measure)"
       
   672   by (subst lborel_real_affine[of "-1" 0]) 
       
   673      (auto simp: density_1 one_ereal_def[symmetric])
       
   674 
       
   675 lemma lborel_distr_mult: 
       
   676   assumes "(c::real) \<noteq> 0"
       
   677   shows "distr lborel borel (op * c) = density lborel (\<lambda>_. inverse \<bar>c\<bar>)"
       
   678 proof-
       
   679   have "distr lborel borel (op * c) = distr lborel lborel (op * c)" by (simp cong: distr_cong)
       
   680   also from assms have "... = density lborel (\<lambda>_. inverse \<bar>c\<bar>)"
       
   681     by (subst lborel_real_affine[of "inverse c" 0]) (auto simp: o_def distr_density_distr)
       
   682   finally show ?thesis .
       
   683 qed
       
   684 
       
   685 lemma lborel_distr_mult': 
       
   686   assumes "(c::real) \<noteq> 0"
       
   687   shows "lborel = density (distr lborel borel (op * c)) (\<lambda>_. abs c)"
       
   688 proof-
       
   689   have "lborel = density lborel (\<lambda>_. 1)" by (rule density_1[symmetric])
       
   690   also from assms have "(\<lambda>_. 1 :: ereal) = (\<lambda>_. inverse (abs c) * abs c)" by (intro ext) simp
       
   691   also have "density lborel ... = density (density lborel (\<lambda>_. inverse (abs c))) (\<lambda>_. abs c)"
       
   692     by (subst density_density_eq) auto
       
   693   also from assms have "density lborel (\<lambda>_. inverse (abs c)) = distr lborel borel (op * c)"
       
   694     by (rule lborel_distr_mult[symmetric])
       
   695   finally show ?thesis .
       
   696 qed
       
   697 
       
   698 lemma lborel_distr_plus: "distr lborel borel (op + c) = (lborel :: real measure)"
       
   699   by (subst lborel_real_affine[of 1 c]) (auto simp: density_1 one_ereal_def[symmetric])
       
   700 
   654 interpretation lborel!: sigma_finite_measure lborel
   701 interpretation lborel!: sigma_finite_measure lborel
   655   by (rule sigma_finite_lborel)
   702   by (rule sigma_finite_lborel)
   656 
   703 
   657 interpretation lborel_pair: pair_sigma_finite lborel lborel ..
   704 interpretation lborel_pair: pair_sigma_finite lborel lborel ..
       
   705 
       
   706 lemma lborel_prod:
       
   707   "lborel \<Otimes>\<^sub>M lborel = (lborel :: ('a::euclidean_space \<times> 'b::euclidean_space) measure)"
       
   708 proof (rule lborel_eqI[symmetric], clarify)
       
   709   fix la ua :: 'a and lb ub :: 'b
       
   710   assume lu: "\<And>a b. (a, b) \<in> Basis \<Longrightarrow> (la, lb) \<bullet> (a, b) \<le> (ua, ub) \<bullet> (a, b)"
       
   711   have [simp]:
       
   712     "\<And>b. b \<in> Basis \<Longrightarrow> la \<bullet> b \<le> ua \<bullet> b"
       
   713     "\<And>b. b \<in> Basis \<Longrightarrow> lb \<bullet> b \<le> ub \<bullet> b"
       
   714     "inj_on (\<lambda>u. (u, 0)) Basis" "inj_on (\<lambda>u. (0, u)) Basis"
       
   715     "(\<lambda>u. (u, 0)) ` Basis \<inter> (\<lambda>u. (0, u)) ` Basis = {}"
       
   716     "box (la, lb) (ua, ub) = box la ua \<times> box lb ub"
       
   717     using lu[of _ 0] lu[of 0] by (auto intro!: inj_onI simp add: Basis_prod_def ball_Un box_def)
       
   718   show "emeasure (lborel \<Otimes>\<^sub>M lborel) (box (la, lb) (ua, ub)) =
       
   719       ereal (setprod (op \<bullet> ((ua, ub) - (la, lb))) Basis)"
       
   720     by (simp add: lborel.emeasure_pair_measure_Times Basis_prod_def setprod.union_disjoint
       
   721                   setprod.reindex)
       
   722 qed (simp add: borel_prod[symmetric])
   658 
   723 
   659 (* FIXME: conversion in measurable prover *)
   724 (* FIXME: conversion in measurable prover *)
   660 lemma lborelD_Collect[measurable (raw)]: "{x\<in>space borel. P x} \<in> sets borel \<Longrightarrow> {x\<in>space lborel. P x} \<in> sets lborel" by simp
   725 lemma lborelD_Collect[measurable (raw)]: "{x\<in>space borel. P x} \<in> sets borel \<Longrightarrow> {x\<in>space lborel. P x} \<in> sets lborel" by simp
   661 lemma lborelD[measurable (raw)]: "A \<in> sets borel \<Longrightarrow> A \<in> sets lborel" by simp
   726 lemma lborelD[measurable (raw)]: "A \<in> sets borel \<Longrightarrow> A \<in> sets lborel" by simp
   662 
   727