src/HOL/Probability/Lebesgue_Measure.thy
changeset 56188 0268784f60da
parent 56181 2aa0b19e74f3
child 56193 c726ecfb22b6
equal deleted inserted replaced
56187:2666cd7d380c 56188:0268784f60da
    46 
    46 
    47 lemma cube_subset[intro]: "n \<le> N \<Longrightarrow> cube n \<subseteq> cube N"
    47 lemma cube_subset[intro]: "n \<le> N \<Longrightarrow> cube n \<subseteq> cube N"
    48   by (fastforce simp: eucl_le[where 'a='a] cube_def setsum_negf)
    48   by (fastforce simp: eucl_le[where 'a='a] cube_def setsum_negf)
    49 
    49 
    50 lemma cube_subset_iff: "cube n \<subseteq> cube N \<longleftrightarrow> n \<le> N"
    50 lemma cube_subset_iff: "cube n \<subseteq> cube N \<longleftrightarrow> n \<le> N"
    51   unfolding cube_def subset_interval by (simp add: setsum_negf ex_in_conv)
    51   unfolding cube_def subset_box by (simp add: setsum_negf ex_in_conv eucl_le[where 'a='a])
    52 
    52 
    53 lemma ball_subset_cube: "ball (0::'a::ordered_euclidean_space) (real n) \<subseteq> cube n"
    53 lemma ball_subset_cube: "ball (0::'a::ordered_euclidean_space) (real n) \<subseteq> cube n"
    54   apply (simp add: cube_def subset_eq mem_interval setsum_negf eucl_le[where 'a='a])
    54   apply (simp add: cube_def subset_eq mem_box setsum_negf eucl_le[where 'a='a])
    55 proof safe
    55 proof safe
    56   fix x i :: 'a assume x: "x \<in> ball 0 (real n)" and i: "i \<in> Basis" 
    56   fix x i :: 'a assume x: "x \<in> ball 0 (real n)" and i: "i \<in> Basis" 
    57   thus "- real n \<le> x \<bullet> i" "real n \<ge> x \<bullet> i"
    57   thus "- real n \<le> x \<bullet> i" "real n \<ge> x \<bullet> i"
    58     using Basis_le_norm[OF i, of x] by(auto simp: dist_norm)
    58     using Basis_le_norm[OF i, of x] by(auto simp: dist_norm)
    59 qed
    59 qed
    65   show ?thesis
    65   show ?thesis
    66     by (intro that[where n=n]) (auto simp add: dist_norm)
    66     by (intro that[where n=n]) (auto simp add: dist_norm)
    67 qed
    67 qed
    68 
    68 
    69 lemma cube_subset_Suc[intro]: "cube n \<subseteq> cube (Suc n)"
    69 lemma cube_subset_Suc[intro]: "cube n \<subseteq> cube (Suc n)"
    70   unfolding cube_def subset_interval by (simp add: setsum_negf)
    70   unfolding cube_def cbox_interval[symmetric] subset_box by (simp add: setsum_negf)
    71 
    71 
    72 lemma has_integral_interval_cube:
    72 lemma has_integral_interval_cube:
    73   fixes a b :: "'a::ordered_euclidean_space"
    73   fixes a b :: "'a::ordered_euclidean_space"
    74   shows "(indicator {a .. b} has_integral content ({a .. b} \<inter> cube n)) (cube n)"
    74   shows "(indicator {a .. b} has_integral content ({a .. b} \<inter> cube n)) (cube n)"
    75     (is "(?I has_integral content ?R) (cube n)")
    75     (is "(?I has_integral content ?R) (cube n)")
    79   have "(?I has_integral content ?R) (cube n) \<longleftrightarrow> (indicator ?R has_integral content ?R) UNIV"
    79   have "(?I has_integral content ?R) (cube n) \<longleftrightarrow> (indicator ?R has_integral content ?R) UNIV"
    80     unfolding has_integral_restrict_univ[where s="cube n", symmetric] by simp
    80     unfolding has_integral_restrict_univ[where s="cube n", symmetric] by simp
    81   also have "\<dots> \<longleftrightarrow> ((\<lambda>x. 1::real) has_integral content ?R *\<^sub>R 1) ?R"
    81   also have "\<dots> \<longleftrightarrow> ((\<lambda>x. 1::real) has_integral content ?R *\<^sub>R 1) ?R"
    82     unfolding indicator_def [abs_def] has_integral_restrict_univ real_scaleR_def mult_1_right ..
    82     unfolding indicator_def [abs_def] has_integral_restrict_univ real_scaleR_def mult_1_right ..
    83   also have "((\<lambda>x. 1) has_integral content ?R *\<^sub>R 1) ?R"
    83   also have "((\<lambda>x. 1) has_integral content ?R *\<^sub>R 1) ?R"
    84     unfolding cube_def inter_interval by (rule has_integral_const)
    84     unfolding cube_def inter_interval cbox_interval[symmetric] by (rule has_integral_const)
    85   finally show ?thesis .
    85   finally show ?thesis .
    86 qed
    86 qed
    87 
    87 
    88 subsection {* Lebesgue measure *}
    88 subsection {* Lebesgue measure *}
    89 
    89 
   220   "f \<in> borel_measurable borel \<Longrightarrow> f \<in> borel_measurable lebesgue"
   220   "f \<in> borel_measurable borel \<Longrightarrow> f \<in> borel_measurable lebesgue"
   221   unfolding measurable_def by simp
   221   unfolding measurable_def by simp
   222 
   222 
   223 lemma lebesgueI_negligible[dest]: fixes s::"'a::ordered_euclidean_space set"
   223 lemma lebesgueI_negligible[dest]: fixes s::"'a::ordered_euclidean_space set"
   224   assumes "negligible s" shows "s \<in> sets lebesgue"
   224   assumes "negligible s" shows "s \<in> sets lebesgue"
   225   using assms by (force simp: cube_def integrable_on_def negligible_def intro!: lebesgueI)
   225   using assms by (force simp: cbox_interval[symmetric] cube_def integrable_on_def negligible_def intro!: lebesgueI)
   226 
   226 
   227 lemma lmeasure_eq_0:
   227 lemma lmeasure_eq_0:
   228   fixes S :: "'a::ordered_euclidean_space set"
   228   fixes S :: "'a::ordered_euclidean_space set"
   229   assumes "negligible S" shows "emeasure lebesgue S = 0"
   229   assumes "negligible S" shows "emeasure lebesgue S = 0"
   230 proof -
   230 proof -
   231   have "\<And>n. integral (cube n) (indicator S :: 'a\<Rightarrow>real) = 0"
   231   have "\<And>n. integral (cube n) (indicator S :: 'a\<Rightarrow>real) = 0"
   232     unfolding lebesgue_integral_def using assms
   232     unfolding lebesgue_integral_def using assms
   233     by (intro integral_unique some1_equality ex_ex1I)
   233     by (intro integral_unique some1_equality ex_ex1I)
   234        (auto simp: cube_def negligible_def)
   234        (auto simp: cube_def negligible_def cbox_interval[symmetric])
   235   then show ?thesis
   235   then show ?thesis
   236     using assms by (simp add: emeasure_lebesgue lebesgueI_negligible)
   236     using assms by (simp add: emeasure_lebesgue lebesgueI_negligible)
   237 qed
   237 qed
   238 
   238 
   239 lemma lmeasure_iff_LIMSEQ:
   239 lemma lmeasure_iff_LIMSEQ:
   379   then have *:"((indicator A) has_integral (0::real)) UNIV" using lmeasure_finite_has_integral[of A]
   379   then have *:"((indicator A) has_integral (0::real)) UNIV" using lmeasure_finite_has_integral[of A]
   380     by (auto simp: null_sets_def)
   380     by (auto simp: null_sets_def)
   381   show "negligible A" unfolding negligible_def
   381   show "negligible A" unfolding negligible_def
   382   proof (intro allI)
   382   proof (intro allI)
   383     fix a b :: 'a
   383     fix a b :: 'a
   384     have integrable: "(indicator A :: _\<Rightarrow>real) integrable_on {a..b}"
   384     have integrable: "(indicator A :: _\<Rightarrow>real) integrable_on cbox a b"
   385       by (intro integrable_on_subinterval has_integral_integrable) (auto intro: *)
   385       by (intro integrable_on_subcbox has_integral_integrable) (auto intro: *)
   386     then have "integral {a..b} (indicator A) \<le> (integral UNIV (indicator A) :: real)"
   386     then have "integral (cbox a b) (indicator A) \<le> (integral UNIV (indicator A) :: real)"
   387       using * by (auto intro!: integral_subset_le)
   387       using * by (auto intro!: integral_subset_le)
   388     moreover have "(0::real) \<le> integral {a..b} (indicator A)"
   388     moreover have "(0::real) \<le> integral (cbox a b) (indicator A)"
   389       using integrable by (auto intro!: integral_nonneg)
   389       using integrable by (auto intro!: integral_nonneg)
   390     ultimately have "integral {a..b} (indicator A) = (0::real)"
   390     ultimately have "integral (cbox a b) (indicator A) = (0::real)"
   391       using integral_unique[OF *] by auto
   391       using integral_unique[OF *] by auto
   392     then show "(indicator A has_integral (0::real)) {a..b}"
   392     then show "(indicator A has_integral (0::real)) (cbox a b)"
   393       using integrable_integral[OF integrable] by simp
   393       using integrable_integral[OF integrable] by simp
   394   qed
   394   qed
   395 qed
   395 qed
   396 
   396 
   397 lemma lmeasure_UNIV[intro]: "emeasure lebesgue (UNIV::'a::ordered_euclidean_space set) = \<infinity>"
   397 lemma lmeasure_UNIV[intro]: "emeasure lebesgue (UNIV::'a::ordered_euclidean_space set) = \<infinity>"
   410         by (intro power_increasing) (auto simp: real_of_nat_Suc simp del: DIM_positive)
   410         by (intro power_increasing) (auto simp: real_of_nat_Suc simp del: DIM_positive)
   411       finally show ?thesis .
   411       finally show ?thesis .
   412     qed }
   412     qed }
   413   ultimately show "ereal (real n) \<le> ereal (integral (cube n) (indicator UNIV::'a\<Rightarrow>real))"
   413   ultimately show "ereal (real n) \<le> ereal (integral (cube n) (indicator UNIV::'a\<Rightarrow>real))"
   414     using integral_const DIM_positive[where 'a='a]
   414     using integral_const DIM_positive[where 'a='a]
   415     by (auto simp: cube_def content_closed_interval_cases setprod_constant setsum_negf)
   415     by (auto simp: cube_def content_cbox_cases setprod_constant setsum_negf cbox_interval[symmetric])
   416 qed simp
   416 qed simp
   417 
   417 
   418 lemma lmeasure_complete: "A \<subseteq> B \<Longrightarrow> B \<in> null_sets lebesgue \<Longrightarrow> A \<in> null_sets lebesgue"
   418 lemma lmeasure_complete: "A \<subseteq> B \<Longrightarrow> B \<in> null_sets lebesgue \<Longrightarrow> A \<in> null_sets lebesgue"
   419   unfolding negligible_iff_lebesgue_null_sets[symmetric] by (auto simp: negligible_subset)
   419   unfolding negligible_iff_lebesgue_null_sets[symmetric] by (auto simp: negligible_subset)
   420 
   420 
   421 lemma
   421 lemma
   422   fixes a b ::"'a::ordered_euclidean_space"
   422   fixes a b ::"'a::ordered_euclidean_space"
   423   shows lmeasure_atLeastAtMost[simp]: "emeasure lebesgue {a..b} = ereal (content {a..b})"
   423   shows lmeasure_atLeastAtMost[simp]: "emeasure lebesgue {a..b} = ereal (content {a..b})"
   424 proof -
   424 proof -
   425   have "(indicator (UNIV \<inter> {a..b})::_\<Rightarrow>real) integrable_on UNIV"
   425   have "(indicator (UNIV \<inter> {a..b})::_\<Rightarrow>real) integrable_on UNIV"
   426     unfolding integrable_indicator_UNIV by (simp add: integrable_const indicator_def [abs_def])
   426     unfolding integrable_indicator_UNIV by (simp add: integrable_const indicator_def [abs_def] cbox_interval[symmetric])
   427   from lmeasure_eq_integral[OF this] show ?thesis unfolding integral_indicator_UNIV
   427   from lmeasure_eq_integral[OF this] show ?thesis unfolding integral_indicator_UNIV
   428     by (simp add: indicator_def [abs_def])
   428     by (simp add: indicator_def [abs_def] cbox_interval[symmetric])
   429 qed
   429 qed
   430 
   430 
   431 lemma lmeasure_singleton[simp]:
   431 lemma lmeasure_singleton[simp]:
   432   fixes a :: "'a::ordered_euclidean_space" shows "emeasure lebesgue {a} = 0"
   432   fixes a :: "'a::ordered_euclidean_space" shows "emeasure lebesgue {a} = 0"
   433   using lmeasure_atLeastAtMost[of a a] by simp
   433   using lmeasure_atLeastAtMost[of a a] by simp
   503 qed
   503 qed
   504 
   504 
   505 lemma Int_stable_atLeastAtMost:
   505 lemma Int_stable_atLeastAtMost:
   506   fixes x::"'a::ordered_euclidean_space"
   506   fixes x::"'a::ordered_euclidean_space"
   507   shows "Int_stable (range (\<lambda>(a, b::'a). {a..b}))"
   507   shows "Int_stable (range (\<lambda>(a, b::'a). {a..b}))"
   508   by (auto simp: inter_interval Int_stable_def)
   508   by (auto simp: inter_interval Int_stable_def cbox_interval[symmetric])
   509 
   509 
   510 lemma lborel_eqI:
   510 lemma lborel_eqI:
   511   fixes M :: "'a::ordered_euclidean_space measure"
   511   fixes M :: "'a::ordered_euclidean_space measure"
   512   assumes emeasure_eq: "\<And>a b. emeasure M {a .. b} = content {a .. b}"
   512   assumes emeasure_eq: "\<And>a b. emeasure M {a .. b} = content {a .. b}"
   513   assumes sets_eq: "sets M = sets borel"
   513   assumes sets_eq: "sets M = sets borel"
   957     by (auto simp: eucl_le[where 'a='a] p2e_def space_PiM PiE_def Pi_iff)
   957     by (auto simp: eucl_le[where 'a='a] p2e_def space_PiM PiE_def Pi_iff)
   958   have "emeasure ?P (p2e -` {a..b} \<inter> space ?P) = content {a..b}"
   958   have "emeasure ?P (p2e -` {a..b} \<inter> space ?P) = content {a..b}"
   959   proof cases
   959   proof cases
   960     assume "{a..b} \<noteq> {}"
   960     assume "{a..b} \<noteq> {}"
   961     then have "a \<le> b"
   961     then have "a \<le> b"
   962       by (simp add: interval_ne_empty eucl_le[where 'a='a])
   962       by (simp add: eucl_le[where 'a='a])
   963     then have "emeasure lborel {a..b} = (\<Prod>x\<in>Basis. emeasure lborel {a \<bullet> x .. b \<bullet> x})"
   963     then have "emeasure lborel {a..b} = (\<Prod>x\<in>Basis. emeasure lborel {a \<bullet> x .. b \<bullet> x})"
   964       by (auto simp: content_closed_interval eucl_le[where 'a='a]
   964       by (auto simp: eucl_le[where 'a='a] content_closed_interval
   965                intro!: setprod_ereal[symmetric])
   965                intro!: setprod_ereal[symmetric])
   966     also have "\<dots> = emeasure ?P (p2e -` {a..b} \<inter> space ?P)"
   966     also have "\<dots> = emeasure ?P (p2e -` {a..b} \<inter> space ?P)"
   967       unfolding * by (subst lborel_space.measure_times) auto
   967       unfolding * by (subst lborel_space.measure_times) auto
   968     finally show ?thesis by simp
   968     finally show ?thesis by simp
   969   qed simp
   969   qed simp