src/HOL/Analysis/Lebesgue_Measure.thy
changeset 69447 b7b9cbe0bd43
parent 69260 0a9688695a1b
child 69517 dc20f278e8f3
equal deleted inserted replaced
69446:9cf0b79dfb7f 69447:b7b9cbe0bd43
    27 
    27 
    28   show "?LT`Rats \<subseteq> ?E" "(\<Union>i\<in>Rats. ?LT i) = UNIV" "\<And>a. a \<in> ?LT`Rats \<Longrightarrow> emeasure M a \<noteq> \<infinity>"
    28   show "?LT`Rats \<subseteq> ?E" "(\<Union>i\<in>Rats. ?LT i) = UNIV" "\<And>a. a \<in> ?LT`Rats \<Longrightarrow> emeasure M a \<noteq> \<infinity>"
    29     using fin by (auto intro: Rats_no_bot_less simp: less_top)
    29     using fin by (auto intro: Rats_no_bot_less simp: less_top)
    30 qed (auto intro: assms countable_rat)
    30 qed (auto intro: assms countable_rat)
    31 
    31 
    32 subsection \<open>Every right continuous and nondecreasing function gives rise to a measure\<close>
    32 subsection \<open>Measures defined by monotonous functions\<close>
    33 
    33 
    34 definition interval_measure :: "(real \<Rightarrow> real) \<Rightarrow> real measure" where
    34 text \<open>
    35   "interval_measure F = extend_measure UNIV {(a, b). a \<le> b} (\<lambda>(a, b). {a <.. b}) (\<lambda>(a, b). ennreal (F b - F a))"
    35   Every right-continuous and nondecreasing function gives rise to a measure on the reals:
    36 
    36 \<close>
    37 lemma emeasure_interval_measure_Ioc:
    37 
       
    38 definition%important interval_measure :: "(real \<Rightarrow> real) \<Rightarrow> real measure" where
       
    39   "interval_measure F =
       
    40      extend_measure UNIV {(a, b). a \<le> b} (\<lambda>(a, b). {a<..b}) (\<lambda>(a, b). ennreal (F b - F a))"
       
    41 
       
    42 lemma%important emeasure_interval_measure_Ioc:
    38   assumes "a \<le> b"
    43   assumes "a \<le> b"
    39   assumes mono_F: "\<And>x y. x \<le> y \<Longrightarrow> F x \<le> F y"
    44   assumes mono_F: "\<And>x y. x \<le> y \<Longrightarrow> F x \<le> F y"
    40   assumes right_cont_F : "\<And>a. continuous (at_right a) F"
    45   assumes right_cont_F : "\<And>a. continuous (at_right a) F"
    41   shows "emeasure (interval_measure F) {a <.. b} = F b - F a"
    46   shows "emeasure (interval_measure F) {a<..b} = F b - F a"
    42 proof (rule extend_measure_caratheodory_pair[OF interval_measure_def \<open>a \<le> b\<close>])
    47 proof%unimportant (rule extend_measure_caratheodory_pair[OF interval_measure_def \<open>a \<le> b\<close>])
    43   show "semiring_of_sets UNIV {{a<..b} |a b :: real. a \<le> b}"
    48   show "semiring_of_sets UNIV {{a<..b} |a b :: real. a \<le> b}"
    44   proof (unfold_locales, safe)
    49   proof (unfold_locales, safe)
    45     fix a b c d :: real assume *: "a \<le> b" "c \<le> d"
    50     fix a b c d :: real assume *: "a \<le> b" "c \<le> d"
    46     then show "\<exists>C\<subseteq>{{a<..b} |a b. a \<le> b}. finite C \<and> disjoint C \<and> {a<..b} - {c<..d} = \<Union>C"
    51     then show "\<exists>C\<subseteq>{{a<..b} |a b. a \<le> b}. finite C \<and> disjoint C \<and> {a<..b} - {c<..d} = \<Union>C"
    47     proof cases
    52     proof cases
   307 lemma emeasure_interval_measure_Ioc_eq:
   312 lemma emeasure_interval_measure_Ioc_eq:
   308   "(\<And>x y. x \<le> y \<Longrightarrow> F x \<le> F y) \<Longrightarrow> (\<And>a. continuous (at_right a) F) \<Longrightarrow>
   313   "(\<And>x y. x \<le> y \<Longrightarrow> F x \<le> F y) \<Longrightarrow> (\<And>a. continuous (at_right a) F) \<Longrightarrow>
   309     emeasure (interval_measure F) {a <.. b} = (if a \<le> b then F b - F a else 0)"
   314     emeasure (interval_measure F) {a <.. b} = (if a \<le> b then F b - F a else 0)"
   310   using emeasure_interval_measure_Ioc[of a b F] by auto
   315   using emeasure_interval_measure_Ioc[of a b F] by auto
   311 
   316 
   312 lemma sets_interval_measure [simp, measurable_cong]: "sets (interval_measure F) = sets borel"
   317 lemma%important sets_interval_measure [simp, measurable_cong]:
       
   318     "sets (interval_measure F) = sets borel"
   313   apply (simp add: sets_extend_measure interval_measure_def borel_sigma_sets_Ioc)
   319   apply (simp add: sets_extend_measure interval_measure_def borel_sigma_sets_Ioc)
   314   apply (rule sigma_sets_eqI)
   320   apply (rule sigma_sets_eqI)
   315   apply auto
   321   apply auto
   316   apply (case_tac "a \<le> ba")
   322   apply (case_tac "a \<le> ba")
   317   apply (auto intro: sigma_sets.Empty)
   323   apply (auto intro: sigma_sets.Empty)
   358   show "((\<lambda>a. ennreal (F b - F a)) \<longlongrightarrow> F b - F a) (at_left a)"
   364   show "((\<lambda>a. ennreal (F b - F a)) \<longlongrightarrow> F b - F a) (at_left a)"
   359     by (rule continuous_on_tendsto_compose[where g="\<lambda>x. x" and s=UNIV])
   365     by (rule continuous_on_tendsto_compose[where g="\<lambda>x. x" and s=UNIV])
   360        (auto simp: continuous_on_ennreal continuous_on_diff cont_F continuous_on_const)
   366        (auto simp: continuous_on_ennreal continuous_on_diff cont_F continuous_on_const)
   361 qed (rule trivial_limit_at_left_real)
   367 qed (rule trivial_limit_at_left_real)
   362 
   368 
   363 lemma sigma_finite_interval_measure:
   369 lemma%important sigma_finite_interval_measure:
   364   assumes mono_F: "\<And>x y. x \<le> y \<Longrightarrow> F x \<le> F y"
   370   assumes mono_F: "\<And>x y. x \<le> y \<Longrightarrow> F x \<le> F y"
   365   assumes right_cont_F : "\<And>a. continuous (at_right a) F"
   371   assumes right_cont_F : "\<And>a. continuous (at_right a) F"
   366   shows "sigma_finite_measure (interval_measure F)"
   372   shows "sigma_finite_measure (interval_measure F)"
   367   apply unfold_locales
   373   apply unfold_locales
   368   apply (intro exI[of _ "(\<lambda>(a, b). {a <.. b}) ` (\<rat> \<times> \<rat>)"])
   374   apply (intro exI[of _ "(\<lambda>(a, b). {a <.. b}) ` (\<rat> \<times> \<rat>)"])
   369   apply (auto intro!: Rats_no_top_le Rats_no_bot_less countable_rat simp: emeasure_interval_measure_Ioc_eq[OF assms])
   375   apply (auto intro!: Rats_no_top_le Rats_no_bot_less countable_rat simp: emeasure_interval_measure_Ioc_eq[OF assms])
   370   done
   376   done
   371 
   377 
   372 subsection \<open>Lebesgue-Borel measure\<close>
   378 subsection \<open>Lebesgue-Borel measure\<close>
   373 
   379 
   374 definition lborel :: "('a :: euclidean_space) measure" where
   380 definition%important lborel :: "('a :: euclidean_space) measure" where
   375   "lborel = distr (\<Pi>\<^sub>M b\<in>Basis. interval_measure (\<lambda>x. x)) borel (\<lambda>f. \<Sum>b\<in>Basis. f b *\<^sub>R b)"
   381   "lborel = distr (\<Pi>\<^sub>M b\<in>Basis. interval_measure (\<lambda>x. x)) borel (\<lambda>f. \<Sum>b\<in>Basis. f b *\<^sub>R b)"
   376 
   382 
   377 abbreviation lebesgue :: "'a::euclidean_space measure"
   383 abbreviation%important lebesgue :: "'a::euclidean_space measure"
   378   where "lebesgue \<equiv> completion lborel"
   384   where "lebesgue \<equiv> completion lborel"
   379 
   385 
   380 abbreviation lebesgue_on :: "'a set \<Rightarrow> 'a::euclidean_space measure"
   386 abbreviation%important lebesgue_on :: "'a set \<Rightarrow> 'a::euclidean_space measure"
   381   where "lebesgue_on \<Omega> \<equiv> restrict_space (completion lborel) \<Omega>"
   387   where "lebesgue_on \<Omega> \<equiv> restrict_space (completion lborel) \<Omega>"
   382 
   388 
   383 lemma
   389 lemma
   384   shows sets_lborel[simp, measurable_cong]: "sets lborel = sets borel"
   390   shows sets_lborel[simp, measurable_cong]: "sets lborel = sets borel"
   385     and space_lborel[simp]: "space lborel = space borel"
   391     and space_lborel[simp]: "space lborel = space borel"
   396 lemma measurable_lebesgue_cong:
   402 lemma measurable_lebesgue_cong:
   397   assumes "\<And>x. x \<in> S \<Longrightarrow> f x = g x"
   403   assumes "\<And>x. x \<in> S \<Longrightarrow> f x = g x"
   398   shows "f \<in> measurable (lebesgue_on S) M \<longleftrightarrow> g \<in> measurable (lebesgue_on S) M"
   404   shows "f \<in> measurable (lebesgue_on S) M \<longleftrightarrow> g \<in> measurable (lebesgue_on S) M"
   399   by (metis (mono_tags, lifting) IntD1 assms measurable_cong_strong space_restrict_space)
   405   by (metis (mono_tags, lifting) IntD1 assms measurable_cong_strong space_restrict_space)
   400 
   406 
   401 text\<open>Measurability of continuous functions\<close>
   407 text%unimportant \<open>Measurability of continuous functions\<close>
       
   408 
   402 lemma continuous_imp_measurable_on_sets_lebesgue:
   409 lemma continuous_imp_measurable_on_sets_lebesgue:
   403   assumes f: "continuous_on S f" and S: "S \<in> sets lebesgue"
   410   assumes f: "continuous_on S f" and S: "S \<in> sets lebesgue"
   404   shows "f \<in> borel_measurable (lebesgue_on S)"
   411   shows "f \<in> borel_measurable (lebesgue_on S)"
   405 proof -
   412 proof -
   406   have "sets (restrict_space borel S) \<subseteq> sets (lebesgue_on S)"
   413   have "sets (restrict_space borel S) \<subseteq> sets (lebesgue_on S)"
   446 qed
   453 qed
   447 
   454 
   448 lemma emeasure_lborel_Icc_eq: "emeasure lborel {l .. u} = ennreal (if l \<le> u then u - l else 0)"
   455 lemma emeasure_lborel_Icc_eq: "emeasure lborel {l .. u} = ennreal (if l \<le> u then u - l else 0)"
   449   by simp
   456   by simp
   450 
   457 
   451 lemma emeasure_lborel_cbox[simp]:
   458 lemma%important emeasure_lborel_cbox[simp]:
   452   assumes [simp]: "\<And>b. b \<in> Basis \<Longrightarrow> l \<bullet> b \<le> u \<bullet> b"
   459   assumes [simp]: "\<And>b. b \<in> Basis \<Longrightarrow> l \<bullet> b \<le> u \<bullet> b"
   453   shows "emeasure lborel (cbox l u) = (\<Prod>b\<in>Basis. (u - l) \<bullet> b)"
   460   shows "emeasure lborel (cbox l u) = (\<Prod>b\<in>Basis. (u - l) \<bullet> b)"
   454 proof -
   461 proof%unimportant -
   455   have "(\<lambda>x. \<Prod>b\<in>Basis. indicator {l\<bullet>b .. u\<bullet>b} (x \<bullet> b) :: ennreal) = indicator (cbox l u)"
   462   have "(\<lambda>x. \<Prod>b\<in>Basis. indicator {l\<bullet>b .. u\<bullet>b} (x \<bullet> b) :: ennreal) = indicator (cbox l u)"
   456     by (auto simp: fun_eq_iff cbox_def split: split_indicator)
   463     by (auto simp: fun_eq_iff cbox_def split: split_indicator)
   457   then have "emeasure lborel (cbox l u) = (\<integral>\<^sup>+x. (\<Prod>b\<in>Basis. indicator {l\<bullet>b .. u\<bullet>b} (x \<bullet> b)) \<partial>lborel)"
   464   then have "emeasure lborel (cbox l u) = (\<integral>\<^sup>+x. (\<Prod>b\<in>Basis. indicator {l\<bullet>b .. u\<bullet>b} (x \<bullet> b)) \<partial>lborel)"
   458     by simp
   465     by simp
   459   also have "\<dots> = (\<Prod>b\<in>Basis. (u - l) \<bullet> b)"
   466   also have "\<dots> = (\<Prod>b\<in>Basis. (u - l) \<bullet> b)"
   640   using mem_closed_if_AE_lebesgue_open[OF open_UNIV] by simp
   647   using mem_closed_if_AE_lebesgue_open[OF open_UNIV] by simp
   641 
   648 
   642 
   649 
   643 subsection \<open>Affine transformation on the Lebesgue-Borel\<close>
   650 subsection \<open>Affine transformation on the Lebesgue-Borel\<close>
   644 
   651 
   645 lemma lborel_eqI:
   652 lemma%important lborel_eqI:
   646   fixes M :: "'a::euclidean_space measure"
   653   fixes M :: "'a::euclidean_space measure"
   647   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)"
   654   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)"
   648   assumes sets_eq: "sets M = sets borel"
   655   assumes sets_eq: "sets M = sets borel"
   649   shows "lborel = M"
   656   shows "lborel = M"
   650 proof (rule measure_eqI_generator_eq)
   657 proof%unimportant (rule measure_eqI_generator_eq)
   651   let ?E = "range (\<lambda>(a, b). box a b::'a set)"
   658   let ?E = "range (\<lambda>(a, b). box a b::'a set)"
   652   show "Int_stable ?E"
   659   show "Int_stable ?E"
   653     by (auto simp: Int_stable_def box_Int_box)
   660     by (auto simp: Int_stable_def box_Int_box)
   654 
   661 
   655   show "?E \<subseteq> Pow UNIV" "sets lborel = sigma_sets UNIV ?E" "sets M = sigma_sets UNIV ?E"
   662   show "?E \<subseteq> Pow UNIV" "sets lborel = sigma_sets UNIV ?E" "sets M = sigma_sets UNIV ?E"
   665       apply (subst box_eq_empty(1)[THEN iffD2])
   672       apply (subst box_eq_empty(1)[THEN iffD2])
   666       apply (auto intro: less_imp_le simp: not_le)
   673       apply (auto intro: less_imp_le simp: not_le)
   667       done }
   674       done }
   668 qed
   675 qed
   669 
   676 
   670 lemma lborel_affine_euclidean:
   677 lemma%important lborel_affine_euclidean:
   671   fixes c :: "'a::euclidean_space \<Rightarrow> real" and t
   678   fixes c :: "'a::euclidean_space \<Rightarrow> real" and t
   672   defines "T x \<equiv> t + (\<Sum>j\<in>Basis. (c j * (x \<bullet> j)) *\<^sub>R j)"
   679   defines "T x \<equiv> t + (\<Sum>j\<in>Basis. (c j * (x \<bullet> j)) *\<^sub>R j)"
   673   assumes c: "\<And>j. j \<in> Basis \<Longrightarrow> c j \<noteq> 0"
   680   assumes c: "\<And>j. j \<in> Basis \<Longrightarrow> c j \<noteq> 0"
   674   shows "lborel = density (distr lborel borel T) (\<lambda>_. (\<Prod>j\<in>Basis. \<bar>c j\<bar>))" (is "_ = ?D")
   681   shows "lborel = density (distr lborel borel T) (\<lambda>_. (\<Prod>j\<in>Basis. \<bar>c j\<bar>))" (is "_ = ?D")
   675 proof (rule lborel_eqI)
   682 proof%unimportant (rule lborel_eqI)
   676   let ?B = "Basis :: 'a set"
   683   let ?B = "Basis :: 'a set"
   677   fix l u assume le: "\<And>b. b \<in> ?B \<Longrightarrow> l \<bullet> b \<le> u \<bullet> b"
   684   fix l u assume le: "\<And>b. b \<in> ?B \<Longrightarrow> l \<bullet> b \<le> u \<bullet> b"
   678   have [measurable]: "T \<in> borel \<rightarrow>\<^sub>M borel"
   685   have [measurable]: "T \<in> borel \<rightarrow>\<^sub>M borel"
   679     by (simp add: T_def[abs_def])
   686     by (simp add: T_def[abs_def])
   680   have eq: "T -` box l u = box
   687   have eq: "T -` box l u = box
   722   using
   729   using
   723     lborel_integrable_real_affine[of f c t]
   730     lborel_integrable_real_affine[of f c t]
   724     lborel_integrable_real_affine[of "\<lambda>x. f (t + c * x)" "1/c" "-t/c"]
   731     lborel_integrable_real_affine[of "\<lambda>x. f (t + c * x)" "1/c" "-t/c"]
   725   by (auto simp add: field_simps)
   732   by (auto simp add: field_simps)
   726 
   733 
   727 lemma lborel_integral_real_affine:
   734 lemma%important lborel_integral_real_affine:
   728   fixes f :: "real \<Rightarrow> 'a :: {banach, second_countable_topology}" and c :: real
   735   fixes f :: "real \<Rightarrow> 'a :: {banach, second_countable_topology}" and c :: real
   729   assumes c: "c \<noteq> 0" shows "(\<integral>x. f x \<partial> lborel) = \<bar>c\<bar> *\<^sub>R (\<integral>x. f (t + c * x) \<partial>lborel)"
   736   assumes c: "c \<noteq> 0" shows "(\<integral>x. f x \<partial> lborel) = \<bar>c\<bar> *\<^sub>R (\<integral>x. f (t + c * x) \<partial>lborel)"
   730 proof cases
   737 proof%unimportant cases
   731   assume f[measurable]: "integrable lborel f" then show ?thesis
   738   assume f[measurable]: "integrable lborel f" then show ?thesis
   732     using c f f[THEN borel_measurable_integrable] f[THEN lborel_integrable_real_affine, of c t]
   739     using c f f[THEN borel_measurable_integrable] f[THEN lborel_integrable_real_affine, of c t]
   733     by (subst lborel_real_affine[OF c, of t])
   740     by (subst lborel_real_affine[OF c, of t])
   734        (simp add: integral_density integral_distr)
   741        (simp add: integral_density integral_distr)
   735 next
   742 next
   887 interpretation lborel: sigma_finite_measure lborel
   894 interpretation lborel: sigma_finite_measure lborel
   888   by (rule sigma_finite_lborel)
   895   by (rule sigma_finite_lborel)
   889 
   896 
   890 interpretation lborel_pair: pair_sigma_finite lborel lborel ..
   897 interpretation lborel_pair: pair_sigma_finite lborel lborel ..
   891 
   898 
   892 lemma lborel_prod:
   899 lemma%important lborel_prod:
   893   "lborel \<Otimes>\<^sub>M lborel = (lborel :: ('a::euclidean_space \<times> 'b::euclidean_space) measure)"
   900   "lborel \<Otimes>\<^sub>M lborel = (lborel :: ('a::euclidean_space \<times> 'b::euclidean_space) measure)"
   894 proof (rule lborel_eqI[symmetric], clarify)
   901 proof%unimportant (rule lborel_eqI[symmetric], clarify)
   895   fix la ua :: 'a and lb ub :: 'b
   902   fix la ua :: 'a and lb ub :: 'b
   896   assume lu: "\<And>a b. (a, b) \<in> Basis \<Longrightarrow> (la, lb) \<bullet> (a, b) \<le> (ua, ub) \<bullet> (a, b)"
   903   assume lu: "\<And>a b. (a, b) \<in> Basis \<Longrightarrow> (la, lb) \<bullet> (a, b) \<le> (ua, ub) \<bullet> (a, b)"
   897   have [simp]:
   904   have [simp]:
   898     "\<And>b. b \<in> Basis \<Longrightarrow> la \<bullet> b \<le> ua \<bullet> b"
   905     "\<And>b. b \<in> Basis \<Longrightarrow> la \<bullet> b \<le> ua \<bullet> b"
   899     "\<And>b. b \<in> Basis \<Longrightarrow> lb \<bullet> b \<le> ub \<bullet> b"
   906     "\<And>b. b \<in> Basis \<Longrightarrow> lb \<bullet> b \<le> ub \<bullet> b"
   962   qed simp
   969   qed simp
   963   then show ?thesis
   970   then show ?thesis
   964     by (auto simp: mult.commute)
   971     by (auto simp: mult.commute)
   965 qed
   972 qed
   966 
   973 
   967 subsection\<open>Lebesgue measurable sets\<close>
   974 subsection \<open>Lebesgue measurable sets\<close>
   968 
   975 
   969 abbreviation lmeasurable :: "'a::euclidean_space set set"
   976 abbreviation%important lmeasurable :: "'a::euclidean_space set set"
   970 where
   977 where
   971   "lmeasurable \<equiv> fmeasurable lebesgue"
   978   "lmeasurable \<equiv> fmeasurable lebesgue"
   972 
   979 
   973 lemma not_measurable_UNIV [simp]: "UNIV \<notin> lmeasurable"
   980 lemma not_measurable_UNIV [simp]: "UNIV \<notin> lmeasurable"
   974   by (simp add: fmeasurable_def)
   981   by (simp add: fmeasurable_def)
   975 
   982 
   976 lemma lmeasurable_iff_integrable:
   983 lemma%important lmeasurable_iff_integrable:
   977   "S \<in> lmeasurable \<longleftrightarrow> integrable lebesgue (indicator S :: 'a::euclidean_space \<Rightarrow> real)"
   984   "S \<in> lmeasurable \<longleftrightarrow> integrable lebesgue (indicator S :: 'a::euclidean_space \<Rightarrow> real)"
   978   by (auto simp: fmeasurable_def integrable_iff_bounded borel_measurable_indicator_iff ennreal_indicator)
   985   by (auto simp: fmeasurable_def integrable_iff_bounded borel_measurable_indicator_iff ennreal_indicator)
   979 
   986 
   980 lemma lmeasurable_cbox [iff]: "cbox a b \<in> lmeasurable"
   987 lemma lmeasurable_cbox [iff]: "cbox a b \<in> lmeasurable"
   981   and lmeasurable_box [iff]: "box a b \<in> lmeasurable"
   988   and lmeasurable_box [iff]: "box a b \<in> lmeasurable"
  1025 lemma bounded_set_imp_lmeasurable:
  1032 lemma bounded_set_imp_lmeasurable:
  1026   assumes "bounded S" "S \<in> sets lebesgue" shows "S \<in> lmeasurable"
  1033   assumes "bounded S" "S \<in> sets lebesgue" shows "S \<in> lmeasurable"
  1027   by (metis assms bounded_Un emeasure_bounded_finite emeasure_completion fmeasurableI main_part_null_part_Un)
  1034   by (metis assms bounded_Un emeasure_bounded_finite emeasure_completion fmeasurableI main_part_null_part_Un)
  1028 
  1035 
  1029 
  1036 
  1030 subsection\<open>Translation preserves Lebesgue measure\<close>
  1037 subsection%unimportant\<open>Translation preserves Lebesgue measure\<close>
  1031 
  1038 
  1032 lemma sigma_sets_image:
  1039 lemma sigma_sets_image:
  1033   assumes S: "S \<in> sigma_sets \<Omega> M" and "M \<subseteq> Pow \<Omega>" "f ` \<Omega> = \<Omega>" "inj_on f \<Omega>"
  1040   assumes S: "S \<in> sigma_sets \<Omega> M" and "M \<subseteq> Pow \<Omega>" "f ` \<Omega> = \<Omega>" "inj_on f \<Omega>"
  1034     and M: "\<And>y. y \<in> M \<Longrightarrow> f ` y \<in> M"
  1041     and M: "\<And>y. y \<in> M \<Longrightarrow> f ` y \<in> M"
  1035   shows "(f ` S) \<in> sigma_sets \<Omega> M"
  1042   shows "(f ` S) \<in> sigma_sets \<Omega> M"
  1106 subsection \<open>A nice lemma for negligibility proofs\<close>
  1113 subsection \<open>A nice lemma for negligibility proofs\<close>
  1107 
  1114 
  1108 lemma summable_iff_suminf_neq_top: "(\<And>n. f n \<ge> 0) \<Longrightarrow> \<not> summable f \<Longrightarrow> (\<Sum>i. ennreal (f i)) = top"
  1115 lemma summable_iff_suminf_neq_top: "(\<And>n. f n \<ge> 0) \<Longrightarrow> \<not> summable f \<Longrightarrow> (\<Sum>i. ennreal (f i)) = top"
  1109   by (metis summable_suminf_not_top)
  1116   by (metis summable_suminf_not_top)
  1110 
  1117 
  1111 proposition starlike_negligible_bounded_gmeasurable:
  1118 proposition%important starlike_negligible_bounded_gmeasurable:
  1112   fixes S :: "'a :: euclidean_space set"
  1119   fixes S :: "'a :: euclidean_space set"
  1113   assumes S: "S \<in> sets lebesgue" and "bounded S"
  1120   assumes S: "S \<in> sets lebesgue" and "bounded S"
  1114       and eq1: "\<And>c x. \<lbrakk>(c *\<^sub>R x) \<in> S; 0 \<le> c; x \<in> S\<rbrakk> \<Longrightarrow> c = 1"
  1121       and eq1: "\<And>c x. \<lbrakk>(c *\<^sub>R x) \<in> S; 0 \<le> c; x \<in> S\<rbrakk> \<Longrightarrow> c = 1"
  1115     shows "S \<in> null_sets lebesgue"
  1122     shows "S \<in> null_sets lebesgue"
  1116 proof -
  1123 proof%unimportant -
  1117   obtain M where "0 < M" "S \<subseteq> ball 0 M"
  1124   obtain M where "0 < M" "S \<subseteq> ball 0 M"
  1118     using \<open>bounded S\<close> by (auto dest: bounded_subset_ballD)
  1125     using \<open>bounded S\<close> by (auto dest: bounded_subset_ballD)
  1119 
  1126 
  1120   let ?f = "\<lambda>n. root DIM('a) (Suc n)"
  1127   let ?f = "\<lambda>n. root DIM('a) (Suc n)"
  1121 
  1128 
  1230     finally show "emeasure lborel ((\<Union>n. U n) - B) \<le> ennreal e"
  1237     finally show "emeasure lborel ((\<Union>n. U n) - B) \<le> ennreal e"
  1231       by simp
  1238       by simp
  1232   qed
  1239   qed
  1233 qed
  1240 qed
  1234 
  1241 
  1235 lemma outer_regular_lborel:
  1242 lemma%important outer_regular_lborel:
  1236   assumes B: "B \<in> sets borel" and "0 < (e::real)"
  1243   assumes B: "B \<in> sets borel" and "0 < (e::real)"
  1237   obtains U where "open U" "B \<subseteq> U" "emeasure lborel (U - B) < e"
  1244   obtains U where "open U" "B \<subseteq> U" "emeasure lborel (U - B) < e"
  1238 proof -
  1245 proof%unimportant -
  1239   obtain U where U: "open U" "B \<subseteq> U" and "emeasure lborel (U-B) \<le> e/2"
  1246   obtain U where U: "open U" "B \<subseteq> U" and "emeasure lborel (U-B) \<le> e/2"
  1240     using outer_regular_lborel_le [OF B, of "e/2"] \<open>e > 0\<close>
  1247     using outer_regular_lborel_le [OF B, of "e/2"] \<open>e > 0\<close>
  1241     by force
  1248     by force
  1242   moreover have "ennreal (e/2) < ennreal e"
  1249   moreover have "ennreal (e/2) < ennreal e"
  1243     using \<open>e > 0\<close> by (simp add: ennreal_lessI)
  1250     using \<open>e > 0\<close> by (simp add: ennreal_lessI)