src/HOL/Analysis/Measure_Space.thy
changeset 76832 ab08604729a2
parent 76822 25c0d4c0e110
child 76835 8d8af7e92c5e
equal deleted inserted replaced
76823:8a17349143df 76832:ab08604729a2
   656   assumes [simp]: "\<And>s. sets (M s) = sets N"
   656   assumes [simp]: "\<And>s. sets (M s) = sets N"
   657   assumes cont: "sup_continuous F" "sup_continuous f"
   657   assumes cont: "sup_continuous F" "sup_continuous f"
   658   assumes meas: "\<And>P. Measurable.pred N P \<Longrightarrow> Measurable.pred N (F P)"
   658   assumes meas: "\<And>P. Measurable.pred N P \<Longrightarrow> Measurable.pred N (F P)"
   659   assumes iter: "\<And>P s. Measurable.pred N P \<Longrightarrow> P \<le> lfp F \<Longrightarrow> emeasure (M s) {x\<in>space N. F P x} = f (\<lambda>s. emeasure (M s) {x\<in>space N. P x}) s"
   659   assumes iter: "\<And>P s. Measurable.pred N P \<Longrightarrow> P \<le> lfp F \<Longrightarrow> emeasure (M s) {x\<in>space N. F P x} = f (\<lambda>s. emeasure (M s) {x\<in>space N. P x}) s"
   660   shows "emeasure (M s) {x\<in>space N. lfp F x} = lfp f s"
   660   shows "emeasure (M s) {x\<in>space N. lfp F x} = lfp f s"
   661 proof (subst lfp_transfer_bounded[where \<alpha>="\<lambda>F s. emeasure (M s) {x\<in>space N. F x}" and g=f and f=F and P="Measurable.pred N", symmetric])
   661 proof (subst lfp_transfer_bounded[where \<alpha>="\<lambda>F s. emeasure (M s) {x\<in>space N. F x}" and f=F , symmetric])
   662   fix C assume "incseq C" "\<And>i. Measurable.pred N (C i)"
   662   fix C assume "incseq C" "\<And>i. Measurable.pred N (C i)"
   663   then show "(\<lambda>s. emeasure (M s) {x \<in> space N. (SUP i. C i) x}) = (SUP i. (\<lambda>s. emeasure (M s) {x \<in> space N. C i x}))"
   663   then show "(\<lambda>s. emeasure (M s) {x \<in> space N. (SUP i. C i) x}) = (SUP i. (\<lambda>s. emeasure (M s) {x \<in> space N. C i x}))"
   664     unfolding SUP_apply[abs_def]
   664     unfolding SUP_apply
   665     by (subst SUP_emeasure_incseq) (auto simp: mono_def fun_eq_iff intro!: arg_cong2[where f=emeasure])
   665     by (subst SUP_emeasure_incseq) (auto simp: mono_def fun_eq_iff intro!: arg_cong2[where f=emeasure])
   666 qed (auto simp add: iter le_fun_def SUP_apply[abs_def] intro!: meas cont)
   666 qed (auto simp add: iter le_fun_def SUP_apply intro!: meas cont)
   667 
   667 
   668 lemma emeasure_subadditive_finite:
   668 lemma emeasure_subadditive_finite:
   669   "finite I \<Longrightarrow> A ` I \<subseteq> sets M \<Longrightarrow> emeasure M (\<Union>i\<in>I. A i) \<le> (\<Sum>i\<in>I. emeasure M (A i))"
   669   "finite I \<Longrightarrow> A ` I \<subseteq> sets M \<Longrightarrow> emeasure M (\<Union>i\<in>I. A i) \<le> (\<Sum>i\<in>I. emeasure M (A i))"
   670   by (rule sets.subadditive[OF emeasure_positive emeasure_additive]) auto
   670   by (rule sets.subadditive[OF emeasure_positive emeasure_additive]) auto
   671 
   671 
  2009   have [measurable]: "B N \<in> sets M" for N unfolding B_def by auto
  2009   have [measurable]: "B N \<in> sets M" for N unfolding B_def by auto
  2010   have "(\<lambda>N. emeasure M (B N)) \<longlonglongrightarrow> emeasure M (\<Union>N. B N)"
  2010   have "(\<lambda>N. emeasure M (B N)) \<longlonglongrightarrow> emeasure M (\<Union>N. B N)"
  2011     apply (rule Lim_emeasure_incseq) unfolding B_def by (auto simp add: SUP_subset_mono incseq_def)
  2011     apply (rule Lim_emeasure_incseq) unfolding B_def by (auto simp add: SUP_subset_mono incseq_def)
  2012   moreover have "emeasure M (B N) \<le> ennreal (\<Sum>n. measure M (A n))" for N
  2012   moreover have "emeasure M (B N) \<le> ennreal (\<Sum>n. measure M (A n))" for N
  2013   proof -
  2013   proof -
  2014     have *: "(\<Sum>n\<in>{..<N}. measure M (A n)) \<le> (\<Sum>n. measure M (A n))"
  2014     have *: "(\<Sum>n<N. measure M (A n)) \<le> (\<Sum>n. measure M (A n))"
  2015       using assms(3) measure_nonneg sum_le_suminf by blast
  2015       using assms(3) measure_nonneg sum_le_suminf by blast
  2016 
  2016 
  2017     have "emeasure M (B N) \<le> (\<Sum>n\<in>{..<N}. emeasure M (A n))"
  2017     have "emeasure M (B N) \<le> (\<Sum>n<N. emeasure M (A n))"
  2018       unfolding B_def by (rule emeasure_subadditive_finite, auto)
  2018       unfolding B_def by (rule emeasure_subadditive_finite, auto)
  2019     also have "\<dots> = (\<Sum>n\<in>{..<N}. ennreal(measure M (A n)))"
  2019     also have "\<dots> = (\<Sum>n<N. ennreal(measure M (A n)))"
  2020       using assms(2) by (simp add: emeasure_eq_ennreal_measure less_top)
  2020       using assms(2) by (simp add: emeasure_eq_ennreal_measure less_top)
  2021     also have "\<dots> = ennreal (\<Sum>n\<in>{..<N}. measure M (A n))"
  2021     also have "\<dots> = ennreal (\<Sum>n<N. measure M (A n))"
  2022       by auto
  2022       by auto
  2023     also have "\<dots> \<le> ennreal (\<Sum>n. measure M (A n))"
  2023     also have "\<dots> \<le> ennreal (\<Sum>n. measure M (A n))"
  2024       using * by (auto simp: ennreal_leI)
  2024       using * by (auto simp: ennreal_leI)
  2025     finally show ?thesis by simp
  2025     finally show ?thesis by simp
  2026   qed
  2026   qed
  2065     and "\<And>n. emeasure M (A n) < \<infinity>" "summable (\<lambda>n. measure M (A n))"
  2065     and "\<And>n. emeasure M (A n) < \<infinity>" "summable (\<lambda>n. measure M (A n))"
  2066   shows "AE x in M. eventually (\<lambda>n. x \<in> space M - A n) sequentially"
  2066   shows "AE x in M. eventually (\<lambda>n. x \<in> space M - A n) sequentially"
  2067 proof -
  2067 proof -
  2068   have "AE x in M. x \<notin> limsup A"
  2068   have "AE x in M. x \<notin> limsup A"
  2069     using borel_cantelli_limsup1[OF assms] unfolding eventually_ae_filter by auto
  2069     using borel_cantelli_limsup1[OF assms] unfolding eventually_ae_filter by auto
  2070   moreover
  2070   moreover have "\<forall>\<^sub>F n in sequentially. x \<notin> A n" if "x \<notin> limsup A" for x
  2071   {
  2071     using that  by (auto simp: limsup_INF_SUP eventually_sequentially)
  2072     fix x assume "x \<notin> limsup A"
       
  2073     then obtain N where "x \<notin> (\<Union>n\<in>{N..}. A n)" unfolding limsup_INF_SUP by blast
       
  2074     then have "eventually (\<lambda>n. x \<notin> A n) sequentially" using eventually_sequentially by auto
       
  2075   }
       
  2076   ultimately show ?thesis by auto
  2072   ultimately show ?thesis by auto
  2077 qed
  2073 qed
  2078 
  2074 
  2079 subsection \<open>Measure spaces with \<^term>\<open>emeasure M (space M) < \<infinity>\<close>\<close>
  2075 subsection \<open>Measure spaces with \<^term>\<open>emeasure M (space M) < \<infinity>\<close>\<close>
  2080 
  2076 
  2286   assumes cont: "inf_continuous F" "inf_continuous f"
  2282   assumes cont: "inf_continuous F" "inf_continuous f"
  2287   assumes meas: "\<And>P. Measurable.pred N P \<Longrightarrow> Measurable.pred N (F P)"
  2283   assumes meas: "\<And>P. Measurable.pred N P \<Longrightarrow> Measurable.pred N (F P)"
  2288   assumes iter: "\<And>P s. Measurable.pred N P \<Longrightarrow> emeasure (M s) {x\<in>space N. F P x} = f (\<lambda>s. emeasure (M s) {x\<in>space N. P x}) s"
  2284   assumes iter: "\<And>P s. Measurable.pred N P \<Longrightarrow> emeasure (M s) {x\<in>space N. F P x} = f (\<lambda>s. emeasure (M s) {x\<in>space N. P x}) s"
  2289   assumes bound: "\<And>P. f P \<le> f (\<lambda>s. emeasure (M s) (space (M s)))"
  2285   assumes bound: "\<And>P. f P \<le> f (\<lambda>s. emeasure (M s) (space (M s)))"
  2290   shows "emeasure (M s) {x\<in>space N. gfp F x} = gfp f s"
  2286   shows "emeasure (M s) {x\<in>space N. gfp F x} = gfp f s"
  2291 proof (subst gfp_transfer_bounded[where \<alpha>="\<lambda>F s. emeasure (M s) {x\<in>space N. F x}" and g=f and f=F and
  2287 proof (subst gfp_transfer_bounded[where \<alpha>="\<lambda>F s. emeasure (M s) {x\<in>space N. F x}" and P="Measurable.pred N", symmetric])
  2292     P="Measurable.pred N", symmetric])
       
  2293   interpret finite_measure "M s" for s by fact
  2288   interpret finite_measure "M s" for s by fact
  2294   fix C assume "decseq C" "\<And>i. Measurable.pred N (C i)"
  2289   fix C assume "decseq C" "\<And>i. Measurable.pred N (C i)"
  2295   then show "(\<lambda>s. emeasure (M s) {x \<in> space N. (INF i. C i) x}) = (INF i. (\<lambda>s. emeasure (M s) {x \<in> space N. C i x}))"
  2290   then show "(\<lambda>s. emeasure (M s) {x \<in> space N. (INF i. C i) x}) = (INF i. (\<lambda>s. emeasure (M s) {x \<in> space N. C i x}))"
  2296     unfolding INF_apply[abs_def]
  2291     unfolding INF_apply
  2297     by (subst INF_emeasure_decseq) (auto simp: antimono_def fun_eq_iff intro!: arg_cong2[where f=emeasure])
  2292     by (subst INF_emeasure_decseq) (auto simp: antimono_def fun_eq_iff intro!: arg_cong2[where f=emeasure])
  2298 next
  2293 next
  2299   show "f x \<le> (\<lambda>s. emeasure (M s) {x \<in> space N. F top x})" for x
  2294   show "f x \<le> (\<lambda>s. emeasure (M s) {x \<in> space N. F top x})" for x
  2300     using bound[of x] sets_eq_imp_space_eq[OF sets] by (simp add: iter)
  2295     using bound[of x] sets_eq_imp_space_eq[OF sets] by (simp add: iter)
  2301 qed (auto simp add: iter le_fun_def INF_apply[abs_def] intro!: meas cont)
  2296 qed (auto simp add: iter le_fun_def INF_apply[abs_def] intro!: meas cont)
  2819     (\<forall>X\<in>sets (restrict_space M A). X \<inter> Y = {} \<longrightarrow> (restrict_space M A) X \<le> (restrict_space N A) X)"
  2814     (\<forall>X\<in>sets (restrict_space M A). X \<inter> Y = {} \<longrightarrow> (restrict_space M A) X \<le> (restrict_space N A) X)"
  2820   proof (rule finite_unsigned_Hahn_decomposition)
  2815   proof (rule finite_unsigned_Hahn_decomposition)
  2821     show "finite_measure (restrict_space M A)" "finite_measure (restrict_space N A)"
  2816     show "finite_measure (restrict_space M A)" "finite_measure (restrict_space N A)"
  2822       by (auto simp: space_restrict_space emeasure_restrict_space less_top intro!: finite_measureI)
  2817       by (auto simp: space_restrict_space emeasure_restrict_space less_top intro!: finite_measureI)
  2823   qed (simp add: sets_restrict_space)
  2818   qed (simp add: sets_restrict_space)
  2824   then show ?thesis
  2819   with assms show ?thesis
  2825     apply -
  2820     by (metis Int_subset_iff emeasure_restrict_space sets.Int_space_eq2 sets_restrict_space_iff space_restrict_space)
  2826     apply (erule bexE)
       
  2827     subgoal for Y
       
  2828       apply (intro bexI[of _ Y] conjI ballI conjI)
       
  2829          apply (simp_all add: sets_restrict_space emeasure_restrict_space)
       
  2830          apply safe
       
  2831       subgoal for X Z
       
  2832         by (erule ballE[of _ _ X]) (auto simp add: Int_absorb1)
       
  2833       subgoal for X Z
       
  2834         by (erule ballE[of _ _ X])  (auto simp add: Int_absorb1 ac_simps)
       
  2835       apply auto
       
  2836       done
       
  2837     done
       
  2838 qed
  2821 qed
  2839 
  2822 
  2840 text\<^marker>\<open>tag important\<close> \<open>
  2823 text\<^marker>\<open>tag important\<close> \<open>
  2841   Define a lexicographical order on \<^type>\<open>measure\<close>, in the order space, sets and measure. The parts
  2824   Define a lexicographical order on \<^type>\<open>measure\<close>, in the order space, sets and measure. The parts
  2842   of the lexicographical order are point-wise ordered.
  2825   of the lexicographical order are point-wise ordered.
  2874 qed (auto simp: le_measure_iff less_measure_def split: if_split_asm intro: measure_eqI)
  2857 qed (auto simp: le_measure_iff less_measure_def split: if_split_asm intro: measure_eqI)
  2875 
  2858 
  2876 end
  2859 end
  2877 
  2860 
  2878 proposition le_measure: "sets M = sets N \<Longrightarrow> M \<le> N \<longleftrightarrow> (\<forall>A\<in>sets M. emeasure M A \<le> emeasure N A)"
  2861 proposition le_measure: "sets M = sets N \<Longrightarrow> M \<le> N \<longleftrightarrow> (\<forall>A\<in>sets M. emeasure M A \<le> emeasure N A)"
  2879   apply -
  2862   by (metis emeasure_neq_0_sets le_fun_def le_measure_iff order_class.order_eq_iff sets_eq_imp_space_eq)
  2880   apply (auto simp: le_measure_iff le_fun_def dest: sets_eq_imp_space_eq)
       
  2881   subgoal for X
       
  2882     by (cases "X \<in> sets M") (auto simp: emeasure_notin_sets)
       
  2883   done
       
  2884 
  2863 
  2885 definition\<^marker>\<open>tag important\<close> sup_measure' :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> 'a measure" where
  2864 definition\<^marker>\<open>tag important\<close> sup_measure' :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> 'a measure" where
  2886 "sup_measure' A B =
  2865 "sup_measure' A B =
  2887   measure_of (space A) (sets A)
  2866   measure_of (space A) (sets A)
  2888     (\<lambda>X. SUP Y\<in>sets A. emeasure A (X \<inter> Y) + emeasure B (X \<inter> - Y))"
  2867     (\<lambda>X. SUP Y\<in>sets A. emeasure A (X \<inter> Y) + emeasure B (X \<inter> - Y))"
  2906     proof (rule countably_additiveI, goal_cases)
  2885     proof (rule countably_additiveI, goal_cases)
  2907       case (1 X)
  2886       case (1 X)
  2908       then have [measurable]: "\<And>i. X i \<in> sets A" and "disjoint_family X"
  2887       then have [measurable]: "\<And>i. X i \<in> sets A" and "disjoint_family X"
  2909         by auto
  2888         by auto
  2910       have disjoint: "disjoint_family (\<lambda>i. X i \<inter> Y)" "disjoint_family (\<lambda>i. X i - Y)" for Y
  2889       have disjoint: "disjoint_family (\<lambda>i. X i \<inter> Y)" "disjoint_family (\<lambda>i. X i - Y)" for Y
  2911         by (auto intro: disjoint_family_on_bisimulation [OF \<open>disjoint_family X\<close>, simplified])
  2890         using "1"(2) disjoint_family_subset by fastforce+
  2912       have "(\<Sum>i. ?S (X i)) = (SUP Y\<in>sets A. \<Sum>i. ?d (X i) Y)"
  2891       have "(\<Sum>i. ?S (X i)) = (SUP Y\<in>sets A. \<Sum>i. ?d (X i) Y)"
  2913       proof (rule ennreal_suminf_SUP_eq_directed)
  2892       proof (rule ennreal_suminf_SUP_eq_directed)
  2914         fix J :: "nat set" and a b assume "finite J" and [measurable]: "a \<in> sets A" "b \<in> sets A"
  2893         fix J :: "nat set" and a b assume "finite J" and [measurable]: "a \<in> sets A" "b \<in> sets A"
  2915         have "\<exists>c\<in>sets A. c \<subseteq> X i \<and> (\<forall>a\<in>sets A. ?d (X i) a \<le> ?d (X i) c)" for i
  2894         have "\<exists>c\<in>sets A. c \<subseteq> X i \<and> (\<forall>a\<in>sets A. ?d (X i) a \<le> ?d (X i) c)" for i
  2916         proof cases
  2895         proof cases
  2917           assume "emeasure A (X i) = top \<or> emeasure B (X i) = top"
  2896           assume "emeasure A (X i) = top \<or> emeasure B (X i) = top"
  2918           then show ?thesis
  2897           then show ?thesis
  2919           proof
  2898             by force
  2920             assume "emeasure A (X i) = top" then show ?thesis
       
  2921               by (intro bexI[of _ "X i"]) auto
       
  2922           next
       
  2923             assume "emeasure B (X i) = top" then show ?thesis
       
  2924               by (intro bexI[of _ "{}"]) auto
       
  2925           qed
       
  2926         next
  2899         next
  2927           assume finite: "\<not> (emeasure A (X i) = top \<or> emeasure B (X i) = top)"
  2900           assume finite: "\<not> (emeasure A (X i) = top \<or> emeasure B (X i) = top)"
  2928           then have "\<exists>Y\<in>sets A. Y \<subseteq> X i \<and> (\<forall>C\<in>sets A. C \<subseteq> Y \<longrightarrow> B C \<le> A C) \<and> (\<forall>C\<in>sets A. C \<subseteq> X i \<longrightarrow> C \<inter> Y = {} \<longrightarrow> A C \<le> B C)"
  2901           then have "\<exists>Y\<in>sets A. Y \<subseteq> X i \<and> (\<forall>C\<in>sets A. C \<subseteq> Y \<longrightarrow> B C \<le> A C) \<and> (\<forall>C\<in>sets A. C \<subseteq> X i \<longrightarrow> C \<inter> Y = {} \<longrightarrow> A C \<le> B C)"
  2929             using unsigned_Hahn_decomposition[of B A "X i"] by simp
  2902             using unsigned_Hahn_decomposition[of B A "X i"] by simp
  2930           then obtain Y where [measurable]: "Y \<in> sets A" and [simp]: "Y \<subseteq> X i"
  2903           then obtain Y where [measurable]: "Y \<in> sets A" and [simp]: "Y \<subseteq> X i"
  2931             and B_le_A: "\<And>C. C \<in> sets A \<Longrightarrow> C \<subseteq> Y \<Longrightarrow> B C \<le> A C"
  2904             and B_le_A: "\<And>C. C \<in> sets A \<Longrightarrow> C \<subseteq> Y \<Longrightarrow> B C \<le> A C"
  2932             and A_le_B: "\<And>C. C \<in> sets A \<Longrightarrow> C \<subseteq> X i \<Longrightarrow> C \<inter> Y = {} \<Longrightarrow> A C \<le> B C"
  2905             and A_le_B: "\<And>C. C \<in> sets A \<Longrightarrow> C \<subseteq> X i \<Longrightarrow> C \<inter> Y = {} \<Longrightarrow> A C \<le> B C"
  2933             by auto
  2906             by auto
  2934 
  2907 
  2935           show ?thesis
  2908           show ?thesis
  2936           proof (intro bexI[of _ Y] ballI conjI)
  2909           proof (intro bexI ballI conjI)
  2937             fix a assume [measurable]: "a \<in> sets A"
  2910             fix a assume [measurable]: "a \<in> sets A"
  2938             have *: "(X i \<inter> a \<inter> Y \<union> (X i \<inter> a - Y)) = X i \<inter> a" "(X i - a) \<inter> Y \<union> (X i - a - Y) = X i \<inter> - a"
  2911             have *: "(X i \<inter> a \<inter> Y \<union> (X i \<inter> a - Y)) = X i \<inter> a" "(X i - a) \<inter> Y \<union> (X i - a - Y) = X i \<inter> - a"
  2939               for a Y by auto
  2912               for a Y by auto
  2940             then have "?d (X i) a =
  2913             then have "?d (X i) a =
  2941               (A (X i \<inter> a \<inter> Y) + A (X i \<inter> a \<inter> - Y)) + (B (X i \<inter> - a \<inter> Y) + B (X i \<inter> - a \<inter> - Y))"
  2914               (A (X i \<inter> a \<inter> Y) + A (X i \<inter> a \<inter> - Y)) + (B (X i \<inter> - a \<inter> Y) + B (X i \<inter> - a \<inter> - Y))"
  2951         qed
  2924         qed
  2952         then obtain C where [measurable]: "C i \<in> sets A" and "C i \<subseteq> X i"
  2925         then obtain C where [measurable]: "C i \<in> sets A" and "C i \<subseteq> X i"
  2953           and C: "\<And>a. a \<in> sets A \<Longrightarrow> ?d (X i) a \<le> ?d (X i) (C i)" for i
  2926           and C: "\<And>a. a \<in> sets A \<Longrightarrow> ?d (X i) a \<le> ?d (X i) (C i)" for i
  2954           by metis
  2927           by metis
  2955         have *: "X i \<inter> (\<Union>i. C i) = X i \<inter> C i" for i
  2928         have *: "X i \<inter> (\<Union>i. C i) = X i \<inter> C i" for i
  2956         proof safe
  2929           using \<open>disjoint_family X\<close> \<open>\<And>i. C i \<subseteq> X i\<close>
  2957           fix x j assume "x \<in> X i" "x \<in> C j"
  2930           by (simp add: disjoint_family_on_def disjoint_iff_not_equal set_eq_iff) (metis subsetD)
  2958           moreover have "i = j \<or> X i \<inter> X j = {}"
  2931         then have **: "X i \<inter> - (\<Union>i. C i) = X i \<inter> - C i" for i by blast
  2959             using \<open>disjoint_family X\<close> by (auto simp: disjoint_family_on_def)
  2932         moreover have "(\<Union>i. C i) \<in> sets A"
  2960           ultimately show "x \<in> C i"
  2933           by fastforce
  2961             using \<open>C i \<subseteq> X i\<close> \<open>C j \<subseteq> X j\<close> by auto
  2934         ultimately show "\<exists>c\<in>sets A. \<forall>i\<in>J. ?d (X i) a \<le> ?d (X i) c \<and> ?d (X i) b \<le> ?d (X i) c"
  2962         qed auto
  2935           by (metis "*" C \<open>a \<in> sets A\<close> \<open>b \<in> sets A\<close>)
  2963         have **: "X i \<inter> - (\<Union>i. C i) = X i \<inter> - C i" for i
       
  2964         proof safe
       
  2965           fix x j assume "x \<in> X i" "x \<notin> C i" "x \<in> C j"
       
  2966           moreover have "i = j \<or> X i \<inter> X j = {}"
       
  2967             using \<open>disjoint_family X\<close> by (auto simp: disjoint_family_on_def)
       
  2968           ultimately show False
       
  2969             using \<open>C i \<subseteq> X i\<close> \<open>C j \<subseteq> X j\<close> by auto
       
  2970         qed auto
       
  2971         show "\<exists>c\<in>sets A. \<forall>i\<in>J. ?d (X i) a \<le> ?d (X i) c \<and> ?d (X i) b \<le> ?d (X i) c"
       
  2972           apply (intro bexI[of _ "\<Union>i. C i"])
       
  2973           unfolding * **
       
  2974           apply (intro C ballI conjI)
       
  2975           apply auto
       
  2976           done
       
  2977       qed
  2936       qed
  2978       also have "\<dots> = ?S (\<Union>i. X i)"
  2937       also have "\<dots> = ?S (\<Union>i. X i)"
  2979         apply (simp only: UN_extend_simps(4))
  2938       proof -
  2980         apply (rule arg_cong [of _ _ Sup])
  2939         have "\<And>Y. Y \<in> sets A \<Longrightarrow> (\<Sum>i. emeasure A (X i \<inter> Y) + emeasure B (X i \<inter> -Y)) 
  2981         apply (rule image_cong)
  2940                               = emeasure A (\<Union>i. X i \<inter> Y) + emeasure B (\<Union>i. X i \<inter> -Y)"
  2982          apply (fact refl)
  2941           using disjoint
  2983         using disjoint
  2942           by (auto simp flip: suminf_add Diff_eq simp add: image_subset_iff suminf_emeasure)
  2984         apply (auto simp add: suminf_add [symmetric] Diff_eq [symmetric] image_subset_iff suminf_emeasure simp del: UN_simps)
  2943         then show ?thesis by force
  2985         done
  2944       qed
  2986       finally show "(\<Sum>i. ?S (X i)) = ?S (\<Union>i. X i)" .
  2945       finally show "(\<Sum>i. ?S (X i)) = ?S (\<Union>i. X i)" .
  2987     qed
  2946     qed
  2988   qed (auto dest: sets.sets_into_space simp: positive_def intro!: SUP_const)
  2947   qed (auto dest: sets.sets_into_space simp: positive_def intro!: SUP_const)
  2989 qed
  2948 qed
  2990 
  2949 
  3266       proof (intro arg_cong [of _ _ Sup] image_cong refl)
  3225       proof (intro arg_cong [of _ _ Sup] image_cong refl)
  3267         fix i assume i: "i \<in> {P. finite P \<and> P \<subseteq> M}"
  3226         fix i assume i: "i \<in> {P. finite P \<and> P \<subseteq> M}"
  3268         show "(\<Sum>n. ?\<mu> i (F n)) = ?\<mu> i (\<Union>(F ` UNIV))"
  3227         show "(\<Sum>n. ?\<mu> i (F n)) = ?\<mu> i (\<Union>(F ` UNIV))"
  3269         proof cases
  3228         proof cases
  3270           assume "i \<noteq> {}" with i ** show ?thesis
  3229           assume "i \<noteq> {}" with i ** show ?thesis
  3271             apply (intro suminf_emeasure \<open>disjoint_family F\<close>)
  3230             by (smt (verit, best) "1"(2) Measure_Space.sets_sup_measure_F assms(1) mem_Collect_eq subset_eq suminf_cong suminf_emeasure)
  3272             apply (subst sets_sup_measure_F[OF _ _ sets_eq])
       
  3273             apply auto
       
  3274             done
       
  3275         qed simp
  3231         qed simp
  3276       qed
  3232       qed
  3277     qed
  3233     qed
  3278   qed
  3234   qed
  3279   show "positive (sets (Sup_measure' M)) ?S"
  3235   show "positive (sets (Sup_measure' M)) ?S"
  3535   qed
  3491   qed
  3536 qed
  3492 qed
  3537 
  3493 
  3538 subsubsection\<^marker>\<open>tag unimportant\<close> \<open>Supremum of a set of \<open>\<sigma>\<close>-algebras\<close>
  3494 subsubsection\<^marker>\<open>tag unimportant\<close> \<open>Supremum of a set of \<open>\<sigma>\<close>-algebras\<close>
  3539 
  3495 
  3540 lemma space_Sup_eq_UN: "space (Sup M) = (\<Union>x\<in>M. space x)"
  3496 lemma space_Sup_eq_UN: "space (Sup M) = (\<Union>x\<in>M. space x)" (is "?L=?R")
  3541   unfolding Sup_measure_def
  3497 proof
  3542   apply (intro Sup_lexord[where P="\<lambda>x. space x = _"])
  3498   show "?L \<subseteq> ?R"
  3543   apply (subst space_Sup_measure'2)
  3499     using Sup_lexord[where P="\<lambda>x. space x = _"]
  3544   apply auto []
  3500     apply (clarsimp simp: Sup_measure_def)
  3545   apply (subst space_measure_of[OF UN_space_closed])
  3501     by (smt (verit) Sup_lexord_def UN_E mem_Collect_eq space_Sup_measure'2 space_measure_of_conv)
  3546   apply auto
  3502 qed (use Sup_upper le_measureD1 in fastforce)
  3547   done
  3503 
  3548 
  3504 
  3549 lemma sets_Sup_eq:
  3505 lemma sets_Sup_eq:
  3550   assumes *: "\<And>m. m \<in> M \<Longrightarrow> space m = X" and "M \<noteq> {}"
  3506   assumes *: "\<And>m. m \<in> M \<Longrightarrow> space m = X" and "M \<noteq> {}"
  3551   shows "sets (Sup M) = sigma_sets X (\<Union>x\<in>M. sets x)"
  3507   shows "sets (Sup M) = sigma_sets X (\<Union>x\<in>M. sets x)"
  3552   unfolding Sup_measure_def
  3508   unfolding Sup_measure_def
  3553   apply (rule Sup_lexord1)
  3509 proof (rule Sup_lexord1 [OF \<open>M \<noteq> {}\<close>])
  3554   apply fact
  3510   show "sets (Sup_lexord sets Sup_measure' (\<lambda>U. sigma (\<Union> (space ` U)) (\<Union> (sets ` U))) M)
  3555   apply (simp add: assms)
  3511       = sigma_sets X (\<Union> (sets ` M))"
  3556   apply (rule Sup_lexord)
  3512   apply (rule Sup_lexord)
  3557   subgoal premises that for a S
  3513   apply (metis (mono_tags, lifting) "*" empty_iff mem_Collect_eq sets.sigma_sets_eq sets_Sup_measure')
  3558     unfolding that(3) that(2)[symmetric]
  3514   by (metis "*" SUP_eq_const UN_space_closed assms(2) sets_measure_of)
  3559     using that(1)
  3515 qed (use * in blast)
  3560     apply (subst sets_Sup_measure'2)
  3516 
  3561     apply (intro arg_cong2[where f=sigma_sets])
       
  3562     apply (auto simp: *)
       
  3563     done
       
  3564   apply (subst sets_measure_of[OF UN_space_closed])
       
  3565   apply (simp add:  assms)
       
  3566   done
       
  3567 
  3517 
  3568 lemma in_sets_Sup: "(\<And>m. m \<in> M \<Longrightarrow> space m = X) \<Longrightarrow> m \<in> M \<Longrightarrow> A \<in> sets m \<Longrightarrow> A \<in> sets (Sup M)"
  3518 lemma in_sets_Sup: "(\<And>m. m \<in> M \<Longrightarrow> space m = X) \<Longrightarrow> m \<in> M \<Longrightarrow> A \<in> sets m \<Longrightarrow> A \<in> sets (Sup M)"
  3569   by (subst sets_Sup_eq[where X=X]) auto
  3519   by (subst sets_Sup_eq[where X=X]) auto
  3570 
  3520 
  3571 lemma Sup_lexord_rel:
  3521 lemma Sup_lexord_rel:
  3581   ultimately show ?thesis
  3531   ultimately show ?thesis
  3582     using assms by (auto simp: Sup_lexord_def Let_def image_comp)
  3532     using assms by (auto simp: Sup_lexord_def Let_def image_comp)
  3583 qed
  3533 qed
  3584 
  3534 
  3585 lemma sets_SUP_cong:
  3535 lemma sets_SUP_cong:
  3586   assumes eq: "\<And>i. i \<in> I \<Longrightarrow> sets (M i) = sets (N i)" shows "sets (SUP i\<in>I. M i) = sets (SUP i\<in>I. N i)"
  3536   assumes eq: "\<And>i. i \<in> I \<Longrightarrow> sets (M i) = sets (N i)" 
       
  3537   shows "sets (SUP i\<in>I. M i) = sets (SUP i\<in>I. N i)"
  3587   unfolding Sup_measure_def
  3538   unfolding Sup_measure_def
  3588   using eq eq[THEN sets_eq_imp_space_eq]
  3539   using eq eq[THEN sets_eq_imp_space_eq]
  3589   apply (intro Sup_lexord_rel[where R="\<lambda>x y. sets x = sets y"])
  3540   by (intro Sup_lexord_rel[where R="\<lambda>x y. sets x = sets y"], simp_all add: sets_Sup_measure'2)
  3590   apply simp
       
  3591   apply simp
       
  3592   apply (simp add: sets_Sup_measure'2)
       
  3593   apply (intro arg_cong2[where f="\<lambda>x y. sets (sigma x y)"])
       
  3594   apply auto
       
  3595   done
       
  3596 
  3541 
  3597 lemma sets_Sup_in_sets:
  3542 lemma sets_Sup_in_sets:
  3598   assumes "M \<noteq> {}"
  3543   assumes "M \<noteq> {}"
  3599   assumes "\<And>m. m \<in> M \<Longrightarrow> space m = space N"
  3544   assumes "\<And>m. m \<in> M \<Longrightarrow> space m = space N"
  3600   assumes "\<And>m. m \<in> M \<Longrightarrow> sets m \<subseteq> sets N"
  3545   assumes "\<And>m. m \<in> M \<Longrightarrow> sets m \<subseteq> sets N"
  3624   shows "f \<in> measurable N (Sup M)"
  3569   shows "f \<in> measurable N (Sup M)"
  3625 proof -
  3570 proof -
  3626   from M obtain m where "m \<in> M" by auto
  3571   from M obtain m where "m \<in> M" by auto
  3627   have space_eq: "\<And>n. n \<in> M \<Longrightarrow> space n = space m"
  3572   have space_eq: "\<And>n. n \<in> M \<Longrightarrow> space n = space m"
  3628     by (intro const_space \<open>m \<in> M\<close>)
  3573     by (intro const_space \<open>m \<in> M\<close>)
       
  3574   have eq: "sets (sigma (\<Union> (space ` M)) (\<Union> (sets ` M))) = sets (Sup M)"
       
  3575     by (metis M SUP_eq_const UN_space_closed sets_Sup_eq sets_measure_of space_eq)
  3629   have "f \<in> measurable N (sigma (\<Union>m\<in>M. space m) (\<Union>m\<in>M. sets m))"
  3576   have "f \<in> measurable N (sigma (\<Union>m\<in>M. space m) (\<Union>m\<in>M. sets m))"
  3630   proof (rule measurable_measure_of)
  3577   proof (rule measurable_measure_of)
  3631     show "f \<in> space N \<rightarrow> \<Union>(space ` M)"
  3578     show "f \<in> space N \<rightarrow> \<Union>(space ` M)"
  3632       using measurable_space[OF f] M by auto
  3579       using measurable_space[OF f] M by auto
  3633   qed (auto intro: measurable_sets f dest: sets.sets_into_space)
  3580   qed (auto intro: measurable_sets f dest: sets.sets_into_space)
  3634   also have "measurable N (sigma (\<Union>m\<in>M. space m) (\<Union>m\<in>M. sets m)) = measurable N (Sup M)"
  3581   also have "measurable N (sigma (\<Union>m\<in>M. space m) (\<Union>m\<in>M. sets m)) = measurable N (Sup M)"
  3635     apply (intro measurable_cong_sets refl)
  3582     using eq measurable_cong_sets by blast
  3636     apply (subst sets_Sup_eq[OF space_eq M])
       
  3637     apply simp
       
  3638     apply (subst sets_measure_of[OF UN_space_closed])
       
  3639     apply (simp add: space_eq M)
       
  3640     done
       
  3641   finally show ?thesis .
  3583   finally show ?thesis .
  3642 qed
  3584 qed
  3643 
  3585 
  3644 lemma measurable_SUP2:
  3586 lemma measurable_SUP2:
  3645   "I \<noteq> {} \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> f \<in> measurable N (M i)) \<Longrightarrow>
  3587   "I \<noteq> {} \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> f \<in> measurable N (M i)) \<Longrightarrow>
  3650   assumes [simp]: "M \<noteq> {}" and M: "\<And>m. m \<in> M \<Longrightarrow> m \<subseteq> Pow \<Omega>"
  3592   assumes [simp]: "M \<noteq> {}" and M: "\<And>m. m \<in> M \<Longrightarrow> m \<subseteq> Pow \<Omega>"
  3651   shows "sets (SUP m\<in>M. sigma \<Omega> m) = sets (sigma \<Omega> (\<Union>M))"
  3593   shows "sets (SUP m\<in>M. sigma \<Omega> m) = sets (sigma \<Omega> (\<Union>M))"
  3652 proof -
  3594 proof -
  3653   { fix a m assume "a \<in> sigma_sets \<Omega> m" "m \<in> M"
  3595   { fix a m assume "a \<in> sigma_sets \<Omega> m" "m \<in> M"
  3654     then have "a \<in> sigma_sets \<Omega> (\<Union>M)"
  3596     then have "a \<in> sigma_sets \<Omega> (\<Union>M)"
  3655      by induction (auto intro: sigma_sets.intros(2-)) }
  3597       by induction (auto intro: sigma_sets.intros(2-)) }
       
  3598   then have "sigma_sets \<Omega> (\<Union> (sigma_sets \<Omega> ` M)) = sigma_sets \<Omega> (\<Union> M)"
       
  3599     by (smt (verit, best) UN_iff Union_iff sigma_sets.Basic sigma_sets_eqI)
  3656   then show "sets (SUP m\<in>M. sigma \<Omega> m) = sets (sigma \<Omega> (\<Union>M))"
  3600   then show "sets (SUP m\<in>M. sigma \<Omega> m) = sets (sigma \<Omega> (\<Union>M))"
  3657     apply (subst sets_Sup_eq[where X="\<Omega>"])
  3601     by (subst sets_Sup_eq) (fastforce simp add: M Union_least)+
  3658     apply (auto simp add: M) []
       
  3659     apply auto []
       
  3660     apply (simp add: space_measure_of_conv M Union_least)
       
  3661     apply (rule sigma_sets_eqI)
       
  3662     apply auto
       
  3663     done
       
  3664 qed
  3602 qed
  3665 
  3603 
  3666 lemma Sup_sigma:
  3604 lemma Sup_sigma:
  3667   assumes [simp]: "M \<noteq> {}" and M: "\<And>m. m \<in> M \<Longrightarrow> m \<subseteq> Pow \<Omega>"
  3605   assumes [simp]: "M \<noteq> {}" and M: "\<And>m. m \<in> M \<Longrightarrow> m \<subseteq> Pow \<Omega>"
  3668   shows "(SUP m\<in>M. sigma \<Omega> m) = (sigma \<Omega> (\<Union>M))"
  3606   shows "(SUP m\<in>M. sigma \<Omega> m) = (sigma \<Omega> (\<Union>M))"
  3670   have *: "\<Union>M \<subseteq> Pow \<Omega>"
  3608   have *: "\<Union>M \<subseteq> Pow \<Omega>"
  3671     using M by auto
  3609     using M by auto
  3672   show "sigma \<Omega> (\<Union>M) \<le> (SUP m\<in>M. sigma \<Omega> m)"
  3610   show "sigma \<Omega> (\<Union>M) \<le> (SUP m\<in>M. sigma \<Omega> m)"
  3673   proof (intro less_eq_measure.intros(3))
  3611   proof (intro less_eq_measure.intros(3))
  3674     show "space (sigma \<Omega> (\<Union>M)) = space (SUP m\<in>M. sigma \<Omega> m)"
  3612     show "space (sigma \<Omega> (\<Union>M)) = space (SUP m\<in>M. sigma \<Omega> m)"
  3675       "sets (sigma \<Omega> (\<Union>M)) = sets (SUP m\<in>M. sigma \<Omega> m)"
  3613          "sets (sigma \<Omega> (\<Union>M)) = sets (SUP m\<in>M. sigma \<Omega> m)"
  3676       using sets_Sup_sigma[OF assms] sets_Sup_sigma[OF assms, THEN sets_eq_imp_space_eq]
  3614       by (auto simp add: M sets_Sup_sigma sets_eq_imp_space_eq)
  3677       by auto
       
  3678   qed (simp add: emeasure_sigma le_fun_def)
  3615   qed (simp add: emeasure_sigma le_fun_def)
  3679   fix m assume "m \<in> M" then show "sigma \<Omega> m \<le> sigma \<Omega> (\<Union>M)"
  3616   fix m assume "m \<in> M" then show "sigma \<Omega> m \<le> sigma \<Omega> (\<Union>M)"
  3680     by (subst sigma_le_iff) (auto simp add: M *)
  3617     by (subst sigma_le_iff) (auto simp add: M *)
  3681 qed
  3618 qed
  3682 
  3619 
  3685   using Sup_sigma[of "f`M" \<Omega>] by (auto simp: image_comp)
  3622   using Sup_sigma[of "f`M" \<Omega>] by (auto simp: image_comp)
  3686 
  3623 
  3687 lemma sets_vimage_Sup_eq:
  3624 lemma sets_vimage_Sup_eq:
  3688   assumes *: "M \<noteq> {}" "f \<in> X \<rightarrow> Y" "\<And>m. m \<in> M \<Longrightarrow> space m = Y"
  3625   assumes *: "M \<noteq> {}" "f \<in> X \<rightarrow> Y" "\<And>m. m \<in> M \<Longrightarrow> space m = Y"
  3689   shows "sets (vimage_algebra X f (Sup M)) = sets (SUP m \<in> M. vimage_algebra X f m)"
  3626   shows "sets (vimage_algebra X f (Sup M)) = sets (SUP m \<in> M. vimage_algebra X f m)"
  3690   (is "?IS = ?SI")
  3627   (is "?L = ?R")
  3691 proof
  3628 proof
  3692   show "?IS \<subseteq> ?SI"
  3629   have "\<And>m. m \<in> M \<Longrightarrow> f \<in> Sup (vimage_algebra X f ` M) \<rightarrow>\<^sub>M m"
  3693     apply (intro sets_image_in_sets measurable_Sup2)
  3630     using assms
  3694     apply (simp add: space_Sup_eq_UN *)
  3631     by (smt (verit, del_insts) Pi_iff imageE image_eqI measurable_Sup1
  3695     apply (simp add: *)
  3632             measurable_vimage_algebra1 space_vimage_algebra)
  3696     apply (intro measurable_Sup1)
  3633   then show "?L \<subseteq> ?R"
  3697     apply (rule imageI)
  3634      by (intro sets_image_in_sets measurable_Sup2) (simp_all add: space_Sup_eq_UN *)
  3698     apply assumption
  3635   show "?R \<subseteq> ?L"
  3699     apply (rule measurable_vimage_algebra1)
       
  3700     apply (auto simp: *)
       
  3701     done
       
  3702   show "?SI \<subseteq> ?IS"
       
  3703     apply (intro sets_Sup_in_sets)
  3636     apply (intro sets_Sup_in_sets)
  3704     apply (auto simp: *) []
  3637     apply (force simp add: * space_Sup_eq_UN sets_vimage_algebra2 intro: in_sets_Sup)+
  3705     apply (auto simp: *) []
       
  3706     apply (elim imageE)
       
  3707     apply simp
       
  3708     apply (rule sets_image_in_sets)
       
  3709     apply simp
       
  3710     apply (simp add: measurable_def)
       
  3711     apply (simp add: * space_Sup_eq_UN sets_vimage_algebra2)
       
  3712     apply (auto intro: in_sets_Sup[OF *(3)])
       
  3713     done
  3638     done
  3714 qed
  3639 qed
  3715 
  3640 
  3716 lemma restrict_space_eq_vimage_algebra':
  3641 lemma restrict_space_eq_vimage_algebra':
  3717   "sets (restrict_space M \<Omega>) = sets (vimage_algebra (\<Omega> \<inter> space M) (\<lambda>x. x) M)"
  3642   "sets (restrict_space M \<Omega>) = sets (vimage_algebra (\<Omega> \<inter> space M) (\<lambda>x. x) M)"
  3741     by auto
  3666     by auto
  3742 qed
  3667 qed
  3743 
  3668 
  3744 lemma measurable_iff_sets:
  3669 lemma measurable_iff_sets:
  3745   "f \<in> measurable M N \<longleftrightarrow> (f \<in> space M \<rightarrow> space N \<and> sets (vimage_algebra (space M) f N) \<subseteq> sets M)"
  3670   "f \<in> measurable M N \<longleftrightarrow> (f \<in> space M \<rightarrow> space N \<and> sets (vimage_algebra (space M) f N) \<subseteq> sets M)"
  3746 proof -
       
  3747   have *: "{f -` A \<inter> space M |A. A \<in> sets N} \<subseteq> Pow (space M)"
       
  3748     by auto
       
  3749   show ?thesis
       
  3750     unfolding measurable_def
  3671     unfolding measurable_def
  3751     by (auto simp add: vimage_algebra_def sigma_le_sets[OF *])
  3672     by (smt (verit, ccfv_threshold) mem_Collect_eq sets_vimage_algebra sigma_sets_le_sets_iff subset_eq)
  3752 qed
       
  3753 
  3673 
  3754 lemma sets_vimage_algebra_space: "X \<in> sets (vimage_algebra X f M)"
  3674 lemma sets_vimage_algebra_space: "X \<in> sets (vimage_algebra X f M)"
  3755   using sets.top[of "vimage_algebra X f M"] by simp
  3675   using sets.top[of "vimage_algebra X f M"] by simp
  3756 
  3676 
  3757 lemma measurable_mono:
  3677 lemma measurable_mono:
  3762 proof safe
  3682 proof safe
  3763   fix f A assume "f \<in> space M \<rightarrow> space N" "A \<in> sets N'"
  3683   fix f A assume "f \<in> space M \<rightarrow> space N" "A \<in> sets N'"
  3764   moreover assume "\<forall>y\<in>sets N. f -` y \<inter> space M \<in> sets M" note this[THEN bspec, of A]
  3684   moreover assume "\<forall>y\<in>sets N. f -` y \<inter> space M \<in> sets M" note this[THEN bspec, of A]
  3765   ultimately show "f -` A \<inter> space M' \<in> sets M'"
  3685   ultimately show "f -` A \<inter> space M' \<in> sets M'"
  3766     using assms by auto
  3686     using assms by auto
  3767 qed (insert N M, auto)
  3687 qed (use N M in auto)
  3768 
  3688 
  3769 lemma measurable_Sup_measurable:
  3689 lemma measurable_Sup_measurable:
  3770   assumes f: "f \<in> space N \<rightarrow> A"
  3690   assumes f: "f \<in> space N \<rightarrow> A"
  3771   shows "f \<in> measurable N (Sup {M. space M = A \<and> f \<in> measurable N M})"
  3691   shows "f \<in> measurable N (Sup {M. space M = A \<and> f \<in> measurable N M})"
  3772 proof (rule measurable_Sup2)
  3692 proof (rule measurable_Sup2)
  3778 lemma (in sigma_algebra) sigma_sets_subset':
  3698 lemma (in sigma_algebra) sigma_sets_subset':
  3779   assumes a: "a \<subseteq> M" "\<Omega>' \<in> M"
  3699   assumes a: "a \<subseteq> M" "\<Omega>' \<in> M"
  3780   shows "sigma_sets \<Omega>' a \<subseteq> M"
  3700   shows "sigma_sets \<Omega>' a \<subseteq> M"
  3781 proof
  3701 proof
  3782   show "x \<in> M" if x: "x \<in> sigma_sets \<Omega>' a" for x
  3702   show "x \<in> M" if x: "x \<in> sigma_sets \<Omega>' a" for x
  3783     using x by (induct rule: sigma_sets.induct) (insert a, auto)
  3703     using x by (induct rule: sigma_sets.induct) (use a in auto)
  3784 qed
  3704 qed
  3785 
  3705 
  3786 lemma in_sets_SUP: "i \<in> I \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> space (M i) = Y) \<Longrightarrow> X \<in> sets (M i) \<Longrightarrow> X \<in> sets (SUP i\<in>I. M i)"
  3706 lemma in_sets_SUP: "i \<in> I \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> space (M i) = Y) \<Longrightarrow> X \<in> sets (M i) \<Longrightarrow> X \<in> sets (SUP i\<in>I. M i)"
  3787   by (intro in_sets_Sup[where X=Y]) auto
  3707   by (intro in_sets_Sup[where X=Y]) auto
  3788 
  3708 
  3800 
  3720 
  3801 lemma mono_vimage_algebra:
  3721 lemma mono_vimage_algebra:
  3802   "sets M \<le> sets N \<Longrightarrow> sets (vimage_algebra X f M) \<subseteq> sets (vimage_algebra X f N)"
  3722   "sets M \<le> sets N \<Longrightarrow> sets (vimage_algebra X f M) \<subseteq> sets (vimage_algebra X f N)"
  3803   using sets.top[of "sigma X {f -` A \<inter> X |A. A \<in> sets N}"]
  3723   using sets.top[of "sigma X {f -` A \<inter> X |A. A \<in> sets N}"]
  3804   unfolding vimage_algebra_def
  3724   unfolding vimage_algebra_def
  3805   apply (subst (asm) space_measure_of)
  3725   by (smt (verit, del_insts) space_measure_of sigma_le_sets Pow_iff inf_le2 mem_Collect_eq subset_eq)
  3806   apply auto []
       
  3807   apply (subst sigma_le_sets)
       
  3808   apply auto
       
  3809   done
       
  3810 
  3726 
  3811 lemma mono_restrict_space: "sets M \<le> sets N \<Longrightarrow> sets (restrict_space M X) \<subseteq> sets (restrict_space N X)"
  3727 lemma mono_restrict_space: "sets M \<le> sets N \<Longrightarrow> sets (restrict_space M X) \<subseteq> sets (restrict_space N X)"
  3812   unfolding sets_restrict_space by (rule image_mono)
  3728   unfolding sets_restrict_space by (rule image_mono)
  3813 
  3729 
  3814 lemma sets_eq_bot: "sets M = {{}} \<longleftrightarrow> M = bot"
  3730 lemma sets_eq_bot: "sets M = {{}} \<longleftrightarrow> M = bot"
  3815   apply safe
  3731   by (metis measure_eqI emeasure_empty sets_bot singletonD)
  3816   apply (intro measure_eqI)
       
  3817   apply auto
       
  3818   done
       
  3819 
  3732 
  3820 lemma sets_eq_bot2: "{{}} = sets M \<longleftrightarrow> M = bot"
  3733 lemma sets_eq_bot2: "{{}} = sets M \<longleftrightarrow> M = bot"
  3821   using sets_eq_bot[of M] by blast
  3734   using sets_eq_bot[of M] by blast
  3822 
  3735 
  3823 
  3736 
  3824 lemma (in finite_measure) countable_support:
  3737 lemma (in finite_measure) countable_support:
  3825   "countable {x. measure M {x} \<noteq> 0}"
  3738   "countable {x. measure M {x} \<noteq> 0}"
  3826 proof cases
  3739 proof cases
  3827   assume "measure M (space M) = 0"
  3740   assume "measure M (space M) = 0"
  3828   with bounded_measure measure_le_0_iff have "{x. measure M {x} \<noteq> 0} = {}"
  3741   then show ?thesis 
  3829     by auto
  3742     by (metis (mono_tags, lifting) bounded_measure measure_le_0_iff Collect_empty_eq countable_empty) 
  3830   then show ?thesis
       
  3831     by simp
       
  3832 next
  3743 next
  3833   let ?M = "measure M (space M)" and ?m = "\<lambda>x. measure M {x}"
  3744   let ?M = "measure M (space M)" and ?m = "\<lambda>x. measure M {x}"
  3834   assume "?M \<noteq> 0"
  3745   assume "?M \<noteq> 0"
  3835   then have *: "{x. ?m x \<noteq> 0} = (\<Union>n. {x. ?M / Suc n < ?m x})"
  3746   then have *: "{x. ?m x \<noteq> 0} = (\<Union>n. {x. ?M / Suc n < ?m x})"
  3836     using reals_Archimedean[of "?m x / ?M" for x]
  3747     using reals_Archimedean[of "?m x / ?M" for x]
  3838   have **: "\<And>n. finite {x. ?M / Suc n < ?m x}"
  3749   have **: "\<And>n. finite {x. ?M / Suc n < ?m x}"
  3839   proof (rule ccontr)
  3750   proof (rule ccontr)
  3840     fix n assume "infinite {x. ?M / Suc n < ?m x}" (is "infinite ?X")
  3751     fix n assume "infinite {x. ?M / Suc n < ?m x}" (is "infinite ?X")
  3841     then obtain X where "finite X" "card X = Suc (Suc n)" "X \<subseteq> ?X"
  3752     then obtain X where "finite X" "card X = Suc (Suc n)" "X \<subseteq> ?X"
  3842       by (metis infinite_arbitrarily_large)
  3753       by (metis infinite_arbitrarily_large)
  3843     from this(3) have *: "\<And>x. x \<in> X \<Longrightarrow> ?M / Suc n \<le> ?m x"
  3754     then have *: "\<And>x. x \<in> X \<Longrightarrow> ?M / Suc n \<le> ?m x"
  3844       by auto
  3755       by auto
  3845     { fix x assume "x \<in> X"
  3756     { fix x assume "x \<in> X"
  3846       from \<open>?M \<noteq> 0\<close> *[OF this] have "?m x \<noteq> 0" by (auto simp: field_simps measure_le_0_iff)
  3757       from \<open>?M \<noteq> 0\<close> *[OF this] have "?m x \<noteq> 0" by (auto simp: field_simps measure_le_0_iff)
  3847       then have "{x} \<in> sets M" by (auto dest: measure_notin_sets) }
  3758       then have "{x} \<in> sets M" by (auto dest: measure_notin_sets) }
  3848     note singleton_sets = this
  3759     note singleton_sets = this