src/HOL/Probability/Measure_Space.thy
changeset 61808 fc1556774cfe
parent 61634 48e2de1b1df5
child 61880 ff4d33058566
equal deleted inserted replaced
61807:965769fe2b63 61808:fc1556774cfe
     2     Author:     Lawrence C Paulson
     2     Author:     Lawrence C Paulson
     3     Author:     Johannes Hölzl, TU München
     3     Author:     Johannes Hölzl, TU München
     4     Author:     Armin Heller, TU München
     4     Author:     Armin Heller, TU München
     5 *)
     5 *)
     6 
     6 
     7 section {* Measure spaces and their properties *}
     7 section \<open>Measure spaces and their properties\<close>
     8 
     8 
     9 theory Measure_Space
     9 theory Measure_Space
    10 imports
    10 imports
    11   Measurable "~~/src/HOL/Multivariate_Analysis/Multivariate_Analysis"
    11   Measurable "~~/src/HOL/Multivariate_Analysis/Multivariate_Analysis"
    12 begin
    12 begin
    17   fixes f :: "nat \<Rightarrow> ereal"
    17   fixes f :: "nat \<Rightarrow> ereal"
    18   assumes "disjoint_family A" "x \<in> A i" "\<And>i. 0 \<le> f i"
    18   assumes "disjoint_family A" "x \<in> A i" "\<And>i. 0 \<le> f i"
    19   shows "(\<Sum>n. f n * indicator (A n) x) = f i"
    19   shows "(\<Sum>n. f n * indicator (A n) x) = f i"
    20 proof -
    20 proof -
    21   have **: "\<And>n. f n * indicator (A n) x = (if n = i then f n else 0 :: ereal)"
    21   have **: "\<And>n. f n * indicator (A n) x = (if n = i then f n else 0 :: ereal)"
    22     using `x \<in> A i` assms unfolding disjoint_family_on_def indicator_def by auto
    22     using \<open>x \<in> A i\<close> assms unfolding disjoint_family_on_def indicator_def by auto
    23   then have "\<And>n. (\<Sum>j<n. f j * indicator (A j) x) = (if i < n then f i else 0 :: ereal)"
    23   then have "\<And>n. (\<Sum>j<n. f j * indicator (A j) x) = (if i < n then f i else 0 :: ereal)"
    24     by (auto simp: setsum.If_cases)
    24     by (auto simp: setsum.If_cases)
    25   moreover have "(SUP n. if i < n then f i else 0) = (f i :: ereal)"
    25   moreover have "(SUP n. if i < n then f i else 0) = (f i :: ereal)"
    26   proof (rule SUP_eqI)
    26   proof (rule SUP_eqI)
    27     fix y :: ereal assume "\<And>n. n \<in> UNIV \<Longrightarrow> (if i < n then f i else 0) \<le> y"
    27     fix y :: ereal assume "\<And>n. n \<in> UNIV \<Longrightarrow> (if i < n then f i else 0) \<le> y"
    35   assumes "disjoint_family A"
    35   assumes "disjoint_family A"
    36   shows "(\<Sum>n. indicator (A n) x :: ereal) = indicator (\<Union>i. A i) x"
    36   shows "(\<Sum>n. indicator (A n) x :: ereal) = indicator (\<Union>i. A i) x"
    37 proof cases
    37 proof cases
    38   assume *: "x \<in> (\<Union>i. A i)"
    38   assume *: "x \<in> (\<Union>i. A i)"
    39   then obtain i where "x \<in> A i" by auto
    39   then obtain i where "x \<in> A i" by auto
    40   from suminf_cmult_indicator[OF assms(1), OF `x \<in> A i`, of "\<lambda>k. 1"]
    40   from suminf_cmult_indicator[OF assms(1), OF \<open>x \<in> A i\<close>, of "\<lambda>k. 1"]
    41   show ?thesis using * by simp
    41   show ?thesis using * by simp
    42 qed simp
    42 qed simp
    43 
    43 
    44 lemma setsum_indicator_disjoint_family:
    44 lemma setsum_indicator_disjoint_family:
    45   fixes f :: "'d \<Rightarrow> 'e::semiring_1"
    45   fixes f :: "'d \<Rightarrow> 'e::semiring_1"
    46   assumes d: "disjoint_family_on A P" and "x \<in> A j" and "finite P" and "j \<in> P"
    46   assumes d: "disjoint_family_on A P" and "x \<in> A j" and "finite P" and "j \<in> P"
    47   shows "(\<Sum>i\<in>P. f i * indicator (A i) x) = f j"
    47   shows "(\<Sum>i\<in>P. f i * indicator (A i) x) = f j"
    48 proof -
    48 proof -
    49   have "P \<inter> {i. x \<in> A i} = {j}"
    49   have "P \<inter> {i. x \<in> A i} = {j}"
    50     using d `x \<in> A j` `j \<in> P` unfolding disjoint_family_on_def
    50     using d \<open>x \<in> A j\<close> \<open>j \<in> P\<close> unfolding disjoint_family_on_def
    51     by auto
    51     by auto
    52   thus ?thesis
    52   thus ?thesis
    53     unfolding indicator_def
    53     unfolding indicator_def
    54     by (simp add: if_distrib setsum.If_cases[OF `finite P`])
    54     by (simp add: if_distrib setsum.If_cases[OF \<open>finite P\<close>])
    55 qed
    55 qed
    56 
    56 
    57 text {*
    57 text \<open>
    58   The type for emeasure spaces is already defined in @{theory Sigma_Algebra}, as it is also used to
    58   The type for emeasure spaces is already defined in @{theory Sigma_Algebra}, as it is also used to
    59   represent sigma algebras (with an arbitrary emeasure).
    59   represent sigma algebras (with an arbitrary emeasure).
    60 *}
    60 \<close>
    61 
    61 
    62 subsection "Extend binary sets"
    62 subsection "Extend binary sets"
    63 
    63 
    64 lemma LIMSEQ_binaryset:
    64 lemma LIMSEQ_binaryset:
    65   assumes f: "f {} = 0"
    65   assumes f: "f {} = 0"
    89 lemma suminf_binaryset_eq:
    89 lemma suminf_binaryset_eq:
    90   fixes f :: "'a set \<Rightarrow> 'b::{comm_monoid_add, t2_space}"
    90   fixes f :: "'a set \<Rightarrow> 'b::{comm_monoid_add, t2_space}"
    91   shows "f {} = 0 \<Longrightarrow> (\<Sum>n. f (binaryset A B n)) = f A + f B"
    91   shows "f {} = 0 \<Longrightarrow> (\<Sum>n. f (binaryset A B n)) = f A + f B"
    92   by (metis binaryset_sums sums_unique)
    92   by (metis binaryset_sums sums_unique)
    93 
    93 
    94 subsection {* Properties of a premeasure @{term \<mu>} *}
    94 subsection \<open>Properties of a premeasure @{term \<mu>}\<close>
    95 
    95 
    96 text {*
    96 text \<open>
    97   The definitions for @{const positive} and @{const countably_additive} should be here, by they are
    97   The definitions for @{const positive} and @{const countably_additive} should be here, by they are
    98   necessary to define @{typ "'a measure"} in @{theory Sigma_Algebra}.
    98   necessary to define @{typ "'a measure"} in @{theory Sigma_Algebra}.
    99 *}
    99 \<close>
   100 
   100 
   101 definition additive where
   101 definition additive where
   102   "additive M \<mu> \<longleftrightarrow> (\<forall>x\<in>M. \<forall>y\<in>M. x \<inter> y = {} \<longrightarrow> \<mu> (x \<union> y) = \<mu> x + \<mu> y)"
   102   "additive M \<mu> \<longleftrightarrow> (\<forall>x\<in>M. \<forall>y\<in>M. x \<inter> y = {} \<longrightarrow> \<mu> (x \<union> y) = \<mu> x + \<mu> y)"
   103 
   103 
   104 definition increasing where
   104 definition increasing where
   132   then have "(\<Sum>i\<le>Suc n. f (disjointed A i)) = f (A n) + f (disjointed A (Suc n))"
   132   then have "(\<Sum>i\<le>Suc n. f (disjointed A i)) = f (A n) + f (disjointed A (Suc n))"
   133     by simp
   133     by simp
   134   also have "\<dots> = f (A n \<union> disjointed A (Suc n))"
   134   also have "\<dots> = f (A n \<union> disjointed A (Suc n))"
   135     using A by (subst f(2)[THEN additiveD]) (auto simp: disjointed_mono)
   135     using A by (subst f(2)[THEN additiveD]) (auto simp: disjointed_mono)
   136   also have "A n \<union> disjointed A (Suc n) = A (Suc n)"
   136   also have "A n \<union> disjointed A (Suc n) = A (Suc n)"
   137     using `incseq A` by (auto dest: incseq_SucD simp: disjointed_mono)
   137     using \<open>incseq A\<close> by (auto dest: incseq_SucD simp: disjointed_mono)
   138   finally show ?case .
   138   finally show ?case .
   139 qed simp
   139 qed simp
   140 
   140 
   141 lemma (in ring_of_sets) additive_sum:
   141 lemma (in ring_of_sets) additive_sum:
   142   fixes A:: "'i \<Rightarrow> 'a set"
   142   fixes A:: "'i \<Rightarrow> 'a set"
   143   assumes f: "positive M f" and ad: "additive M f" and "finite S"
   143   assumes f: "positive M f" and ad: "additive M f" and "finite S"
   144       and A: "A`S \<subseteq> M"
   144       and A: "A`S \<subseteq> M"
   145       and disj: "disjoint_family_on A S"
   145       and disj: "disjoint_family_on A S"
   146   shows  "(\<Sum>i\<in>S. f (A i)) = f (\<Union>i\<in>S. A i)"
   146   shows  "(\<Sum>i\<in>S. f (A i)) = f (\<Union>i\<in>S. A i)"
   147   using `finite S` disj A
   147   using \<open>finite S\<close> disj A
   148 proof induct
   148 proof induct
   149   case empty show ?case using f by (simp add: positive_def)
   149   case empty show ?case using f by (simp add: positive_def)
   150 next
   150 next
   151   case (insert s S)
   151   case (insert s S)
   152   then have "A s \<inter> (\<Union>i\<in>S. A i) = {}"
   152   then have "A s \<inter> (\<Union>i\<in>S. A i) = {}"
   153     by (auto simp add: disjoint_family_on_def neq_iff)
   153     by (auto simp add: disjoint_family_on_def neq_iff)
   154   moreover
   154   moreover
   155   have "A s \<in> M" using insert by blast
   155   have "A s \<in> M" using insert by blast
   156   moreover have "(\<Union>i\<in>S. A i) \<in> M"
   156   moreover have "(\<Union>i\<in>S. A i) \<in> M"
   157     using insert `finite S` by auto
   157     using insert \<open>finite S\<close> by auto
   158   ultimately have "f (A s \<union> (\<Union>i\<in>S. A i)) = f (A s) + f(\<Union>i\<in>S. A i)"
   158   ultimately have "f (A s \<union> (\<Union>i\<in>S. A i)) = f (A s) + f(\<Union>i\<in>S. A i)"
   159     using ad UNION_in_sets A by (auto simp add: additive_def)
   159     using ad UNION_in_sets A by (auto simp add: additive_def)
   160   with insert show ?case using ad disjoint_family_on_mono[of S "insert s S" A]
   160   with insert show ?case using ad disjoint_family_on_mono[of S "insert s S" A]
   161     by (auto simp add: additive_def subset_insertI)
   161     by (auto simp add: additive_def subset_insertI)
   162 qed
   162 qed
   252   qed
   252   qed
   253   have "finite (\<Union>i. F i)"
   253   have "finite (\<Union>i. F i)"
   254     by (metis F(2) assms(1) infinite_super sets_into_space)
   254     by (metis F(2) assms(1) infinite_super sets_into_space)
   255 
   255 
   256   have F_subset: "{i. \<mu> (F i) \<noteq> 0} \<subseteq> {i. F i \<noteq> {}}"
   256   have F_subset: "{i. \<mu> (F i) \<noteq> 0} \<subseteq> {i. F i \<noteq> {}}"
   257     by (auto simp: positiveD_empty[OF `positive M \<mu>`])
   257     by (auto simp: positiveD_empty[OF \<open>positive M \<mu>\<close>])
   258   moreover have fin_not_empty: "finite {i. F i \<noteq> {}}"
   258   moreover have fin_not_empty: "finite {i. F i \<noteq> {}}"
   259   proof (rule finite_imageD)
   259   proof (rule finite_imageD)
   260     from f have "f`{i. F i \<noteq> {}} \<subseteq> (\<Union>i. F i)" by auto
   260     from f have "f`{i. F i \<noteq> {}} \<subseteq> (\<Union>i. F i)" by auto
   261     then show "finite (f`{i. F i \<noteq> {}})"
   261     then show "finite (f`{i. F i \<noteq> {}})"
   262       by (rule finite_subset) fact
   262       by (rule finite_subset) fact
   270   from fin_not_0 have "(\<Sum>i. \<mu> (F i)) = (\<Sum>i | \<mu> (F i) \<noteq> 0. \<mu> (F i))"
   270   from fin_not_0 have "(\<Sum>i. \<mu> (F i)) = (\<Sum>i | \<mu> (F i) \<noteq> 0. \<mu> (F i))"
   271     by (rule suminf_finite) auto
   271     by (rule suminf_finite) auto
   272   also have "\<dots> = (\<Sum>i | F i \<noteq> {}. \<mu> (F i))"
   272   also have "\<dots> = (\<Sum>i | F i \<noteq> {}. \<mu> (F i))"
   273     using fin_not_empty F_subset by (rule setsum.mono_neutral_left) auto
   273     using fin_not_empty F_subset by (rule setsum.mono_neutral_left) auto
   274   also have "\<dots> = \<mu> (\<Union>i\<in>{i. F i \<noteq> {}}. F i)"
   274   also have "\<dots> = \<mu> (\<Union>i\<in>{i. F i \<noteq> {}}. F i)"
   275     using `positive M \<mu>` `additive M \<mu>` fin_not_empty disj_not_empty F by (intro additive_sum) auto
   275     using \<open>positive M \<mu>\<close> \<open>additive M \<mu>\<close> fin_not_empty disj_not_empty F by (intro additive_sum) auto
   276   also have "\<dots> = \<mu> (\<Union>i. F i)"
   276   also have "\<dots> = \<mu> (\<Union>i. F i)"
   277     by (rule arg_cong[where f=\<mu>]) auto
   277     by (rule arg_cong[where f=\<mu>]) auto
   278   finally show "(\<Sum>i. \<mu> (F i)) = \<mu> (\<Union>i. F i)" .
   278   finally show "(\<Sum>i. \<mu> (F i)) = \<mu> (\<Union>i. F i)" .
   279 qed
   279 qed
   280 
   280 
   325      \<longleftrightarrow> (\<forall>A. range A \<subseteq> M \<longrightarrow> decseq A \<longrightarrow> (\<Inter>i. A i) = {} \<longrightarrow> (\<forall>i. f (A i) \<noteq> \<infinity>) \<longrightarrow> (\<lambda>i. f (A i)) ----> 0)"
   325      \<longleftrightarrow> (\<forall>A. range A \<subseteq> M \<longrightarrow> decseq A \<longrightarrow> (\<Inter>i. A i) = {} \<longrightarrow> (\<forall>i. f (A i) \<noteq> \<infinity>) \<longrightarrow> (\<lambda>i. f (A i)) ----> 0)"
   326 proof safe
   326 proof safe
   327   assume cont: "(\<forall>A. range A \<subseteq> M \<longrightarrow> decseq A \<longrightarrow> (\<Inter>i. A i) \<in> M \<longrightarrow> (\<forall>i. f (A i) \<noteq> \<infinity>) \<longrightarrow> (\<lambda>i. f (A i)) ----> f (\<Inter>i. A i))"
   327   assume cont: "(\<forall>A. range A \<subseteq> M \<longrightarrow> decseq A \<longrightarrow> (\<Inter>i. A i) \<in> M \<longrightarrow> (\<forall>i. f (A i) \<noteq> \<infinity>) \<longrightarrow> (\<lambda>i. f (A i)) ----> f (\<Inter>i. A i))"
   328   fix A :: "nat \<Rightarrow> 'a set" assume A: "range A \<subseteq> M" "decseq A" "(\<Inter>i. A i) = {}" "\<forall>i. f (A i) \<noteq> \<infinity>"
   328   fix A :: "nat \<Rightarrow> 'a set" assume A: "range A \<subseteq> M" "decseq A" "(\<Inter>i. A i) = {}" "\<forall>i. f (A i) \<noteq> \<infinity>"
   329   with cont[THEN spec, of A] show "(\<lambda>i. f (A i)) ----> 0"
   329   with cont[THEN spec, of A] show "(\<lambda>i. f (A i)) ----> 0"
   330     using `positive M f`[unfolded positive_def] by auto
   330     using \<open>positive M f\<close>[unfolded positive_def] by auto
   331 next
   331 next
   332   assume cont: "\<forall>A. range A \<subseteq> M \<longrightarrow> decseq A \<longrightarrow> (\<Inter>i. A i) = {} \<longrightarrow> (\<forall>i. f (A i) \<noteq> \<infinity>) \<longrightarrow> (\<lambda>i. f (A i)) ----> 0"
   332   assume cont: "\<forall>A. range A \<subseteq> M \<longrightarrow> decseq A \<longrightarrow> (\<Inter>i. A i) = {} \<longrightarrow> (\<forall>i. f (A i) \<noteq> \<infinity>) \<longrightarrow> (\<lambda>i. f (A i)) ----> 0"
   333   fix A :: "nat \<Rightarrow> 'a set" assume A: "range A \<subseteq> M" "decseq A" "(\<Inter>i. A i) \<in> M" "\<forall>i. f (A i) \<noteq> \<infinity>"
   333   fix A :: "nat \<Rightarrow> 'a set" assume A: "range A \<subseteq> M" "decseq A" "(\<Inter>i. A i) \<in> M" "\<forall>i. f (A i) \<noteq> \<infinity>"
   334 
   334 
   335   have f_mono: "\<And>a b. a \<in> M \<Longrightarrow> b \<in> M \<Longrightarrow> a \<subseteq> b \<Longrightarrow> f a \<le> f b"
   335   have f_mono: "\<And>a b. a \<in> M \<Longrightarrow> b \<in> M \<Longrightarrow> a \<subseteq> b \<Longrightarrow> f a \<le> f b"
   413   shows "countably_additive M f"
   413   shows "countably_additive M f"
   414   using countably_additive_iff_continuous_from_below[OF f]
   414   using countably_additive_iff_continuous_from_below[OF f]
   415   using empty_continuous_imp_continuous_from_below[OF f fin] cont
   415   using empty_continuous_imp_continuous_from_below[OF f fin] cont
   416   by blast
   416   by blast
   417 
   417 
   418 subsection {* Properties of @{const emeasure} *}
   418 subsection \<open>Properties of @{const emeasure}\<close>
   419 
   419 
   420 lemma emeasure_positive: "positive (sets M) (emeasure M)"
   420 lemma emeasure_positive: "positive (sets M) (emeasure M)"
   421   by (cases M) (auto simp: sets_def emeasure_def Abs_measure_inverse measure_space_def)
   421   by (cases M) (auto simp: sets_def emeasure_def Abs_measure_inverse measure_space_def)
   422 
   422 
   423 lemma emeasure_empty[simp, intro]: "emeasure M {} = 0"
   423 lemma emeasure_empty[simp, intro]: "emeasure M {} = 0"
   481     by (metis Un_Diff_cancel Un_absorb1 s sets.sets_into_space)
   481     by (metis Un_Diff_cancel Un_absorb1 s sets.sets_into_space)
   482   also have "... = emeasure M s + emeasure M (space M - s)"
   482   also have "... = emeasure M s + emeasure M (space M - s)"
   483     by (rule plus_emeasure[symmetric]) (auto simp add: s)
   483     by (rule plus_emeasure[symmetric]) (auto simp add: s)
   484   finally have "emeasure M (space M) = emeasure M s + emeasure M (space M - s)" .
   484   finally have "emeasure M (space M) = emeasure M s + emeasure M (space M - s)" .
   485   then show ?thesis
   485   then show ?thesis
   486     using fin `0 \<le> emeasure M s`
   486     using fin \<open>0 \<le> emeasure M s\<close>
   487     unfolding ereal_eq_minus_iff by (auto simp: ac_simps)
   487     unfolding ereal_eq_minus_iff by (auto simp: ac_simps)
   488 qed
   488 qed
   489 
   489 
   490 lemma emeasure_Diff:
   490 lemma emeasure_Diff:
   491   assumes finite: "emeasure M B \<noteq> \<infinity>"
   491   assumes finite: "emeasure M B \<noteq> \<infinity>"
   492   and [measurable]: "A \<in> sets M" "B \<in> sets M" and "B \<subseteq> A"
   492   and [measurable]: "A \<in> sets M" "B \<in> sets M" and "B \<subseteq> A"
   493   shows "emeasure M (A - B) = emeasure M A - emeasure M B"
   493   shows "emeasure M (A - B) = emeasure M A - emeasure M B"
   494 proof -
   494 proof -
   495   have "0 \<le> emeasure M B" using assms by auto
   495   have "0 \<le> emeasure M B" using assms by auto
   496   have "(A - B) \<union> B = A" using `B \<subseteq> A` by auto
   496   have "(A - B) \<union> B = A" using \<open>B \<subseteq> A\<close> by auto
   497   then have "emeasure M A = emeasure M ((A - B) \<union> B)" by simp
   497   then have "emeasure M A = emeasure M ((A - B) \<union> B)" by simp
   498   also have "\<dots> = emeasure M (A - B) + emeasure M B"
   498   also have "\<dots> = emeasure M (A - B) + emeasure M B"
   499     by (subst plus_emeasure[symmetric]) auto
   499     by (subst plus_emeasure[symmetric]) auto
   500   finally show "emeasure M (A - B) = emeasure M A - emeasure M B"
   500   finally show "emeasure M (A - B) = emeasure M A - emeasure M B"
   501     unfolding ereal_eq_minus_iff
   501     unfolding ereal_eq_minus_iff
   502     using finite `0 \<le> emeasure M B` by auto
   502     using finite \<open>0 \<le> emeasure M B\<close> by auto
   503 qed
   503 qed
   504 
   504 
   505 lemma Lim_emeasure_incseq:
   505 lemma Lim_emeasure_incseq:
   506   "range A \<subseteq> sets M \<Longrightarrow> incseq A \<Longrightarrow> (\<lambda>i. (emeasure M (A i))) ----> emeasure M (\<Union>i. A i)"
   506   "range A \<subseteq> sets M \<Longrightarrow> incseq A \<Longrightarrow> (\<lambda>i. (emeasure M (A i))) ----> emeasure M (\<Union>i. A i)"
   507   using emeasure_countably_additive
   507   using emeasure_countably_additive
   539     by (simp add: ereal_SUP_uminus minus_ereal_def)
   539     by (simp add: ereal_SUP_uminus minus_ereal_def)
   540   also have "\<dots> = (SUP n. emeasure M (A 0) - emeasure M (A n))"
   540   also have "\<dots> = (SUP n. emeasure M (A 0) - emeasure M (A n))"
   541     unfolding minus_ereal_def using A0 assms
   541     unfolding minus_ereal_def using A0 assms
   542     by (subst SUP_ereal_add) (auto simp add: decseq_emeasure)
   542     by (subst SUP_ereal_add) (auto simp add: decseq_emeasure)
   543   also have "\<dots> = (SUP n. emeasure M (A 0 - A n))"
   543   also have "\<dots> = (SUP n. emeasure M (A 0 - A n))"
   544     using A finite `decseq A`[unfolded decseq_def] by (subst emeasure_Diff) auto
   544     using A finite \<open>decseq A\<close>[unfolded decseq_def] by (subst emeasure_Diff) auto
   545   also have "\<dots> = emeasure M (\<Union>i. A 0 - A i)"
   545   also have "\<dots> = emeasure M (\<Union>i. A 0 - A i)"
   546   proof (rule SUP_emeasure_incseq)
   546   proof (rule SUP_emeasure_incseq)
   547     show "range (\<lambda>n. A 0 - A n) \<subseteq> sets M"
   547     show "range (\<lambda>n. A 0 - A n) \<subseteq> sets M"
   548       using A by auto
   548       using A by auto
   549     show "incseq (\<lambda>n. A 0 - A n)"
   549     show "incseq (\<lambda>n. A 0 - A n)"
   550       using `decseq A` by (auto simp add: incseq_def decseq_def)
   550       using \<open>decseq A\<close> by (auto simp add: incseq_def decseq_def)
   551   qed
   551   qed
   552   also have "\<dots> = emeasure M (A 0) - emeasure M (\<Inter>i. A i)"
   552   also have "\<dots> = emeasure M (A 0) - emeasure M (\<Inter>i. A i)"
   553     using A finite * by (simp, subst emeasure_Diff) auto
   553     using A finite * by (simp, subst emeasure_Diff) auto
   554   finally show ?thesis
   554   finally show ?thesis
   555     unfolding ereal_minus_eq_minus_iff using finite A0 by auto
   555     unfolding ereal_minus_eq_minus_iff using finite A0 by auto
   614   assumes *: "\<And>M A. P M \<Longrightarrow> (\<And>N. P N \<Longrightarrow> Measurable.pred N A) \<Longrightarrow> Measurable.pred M (F A)"
   614   assumes *: "\<And>M A. P M \<Longrightarrow> (\<And>N. P N \<Longrightarrow> Measurable.pred N A) \<Longrightarrow> Measurable.pred M (F A)"
   615   shows "emeasure M {x\<in>space M. lfp F x} = (SUP i. emeasure M {x\<in>space M. (F ^^ i) (\<lambda>x. False) x})"
   615   shows "emeasure M {x\<in>space M. lfp F x} = (SUP i. emeasure M {x\<in>space M. (F ^^ i) (\<lambda>x. False) x})"
   616 proof -
   616 proof -
   617   have "emeasure M {x\<in>space M. lfp F x} = emeasure M (\<Union>i. {x\<in>space M. (F ^^ i) (\<lambda>x. False) x})"
   617   have "emeasure M {x\<in>space M. lfp F x} = emeasure M (\<Union>i. {x\<in>space M. (F ^^ i) (\<lambda>x. False) x})"
   618     using sup_continuous_lfp[OF cont] by (auto simp add: bot_fun_def intro!: arg_cong2[where f=emeasure])
   618     using sup_continuous_lfp[OF cont] by (auto simp add: bot_fun_def intro!: arg_cong2[where f=emeasure])
   619   moreover { fix i from `P M` have "{x\<in>space M. (F ^^ i) (\<lambda>x. False) x} \<in> sets M"
   619   moreover { fix i from \<open>P M\<close> have "{x\<in>space M. (F ^^ i) (\<lambda>x. False) x} \<in> sets M"
   620     by (induct i arbitrary: M) (auto simp add: pred_def[symmetric] intro: *) }
   620     by (induct i arbitrary: M) (auto simp add: pred_def[symmetric] intro: *) }
   621   moreover have "incseq (\<lambda>i. {x\<in>space M. (F ^^ i) (\<lambda>x. False) x})"
   621   moreover have "incseq (\<lambda>i. {x\<in>space M. (F ^^ i) (\<lambda>x. False) x})"
   622   proof (rule incseq_SucI)
   622   proof (rule incseq_SucI)
   623     fix i
   623     fix i
   624     have "(F ^^ i) (\<lambda>x. False) \<le> (F ^^ (Suc i)) (\<lambda>x. False)"
   624     have "(F ^^ i) (\<lambda>x. False) \<le> (F ^^ (Suc i)) (\<lambda>x. False)"
   692 
   692 
   693 lemma emeasure_insert:
   693 lemma emeasure_insert:
   694   assumes sets: "{x} \<in> sets M" "A \<in> sets M" and "x \<notin> A"
   694   assumes sets: "{x} \<in> sets M" "A \<in> sets M" and "x \<notin> A"
   695   shows "emeasure M (insert x A) = emeasure M {x} + emeasure M A"
   695   shows "emeasure M (insert x A) = emeasure M {x} + emeasure M A"
   696 proof -
   696 proof -
   697   have "{x} \<inter> A = {}" using `x \<notin> A` by auto
   697   have "{x} \<inter> A = {}" using \<open>x \<notin> A\<close> by auto
   698   from plus_emeasure[OF sets this] show ?thesis by simp
   698   from plus_emeasure[OF sets this] show ?thesis by simp
   699 qed
   699 qed
   700 
   700 
   701 lemma emeasure_insert_ne:
   701 lemma emeasure_insert_ne:
   702   "A \<noteq> {} \<Longrightarrow> {x} \<in> sets M \<Longrightarrow> A \<in> sets M \<Longrightarrow> x \<notin> A \<Longrightarrow> emeasure M (insert x A) = emeasure M {x} + emeasure M A"
   702   "A \<noteq> {} \<Longrightarrow> {x} \<in> sets M \<Longrightarrow> A \<in> sets M \<Longrightarrow> x \<notin> A \<Longrightarrow> emeasure M (insert x A) = emeasure M {x} + emeasure M A"
   715   shows "emeasure M A = (\<Sum>i\<in>S. emeasure M (A \<inter> (B i)))"
   715   shows "emeasure M A = (\<Sum>i\<in>S. emeasure M (A \<inter> (B i)))"
   716 proof -
   716 proof -
   717   have "(\<Sum>i\<in>S. emeasure M (A \<inter> (B i))) = emeasure M (\<Union>i\<in>S. A \<inter> (B i))"
   717   have "(\<Sum>i\<in>S. emeasure M (A \<inter> (B i))) = emeasure M (\<Union>i\<in>S. A \<inter> (B i))"
   718   proof (rule setsum_emeasure)
   718   proof (rule setsum_emeasure)
   719     show "disjoint_family_on (\<lambda>i. A \<inter> B i) S"
   719     show "disjoint_family_on (\<lambda>i. A \<inter> B i) S"
   720       using `disjoint_family_on B S`
   720       using \<open>disjoint_family_on B S\<close>
   721       unfolding disjoint_family_on_def by auto
   721       unfolding disjoint_family_on_def by auto
   722   qed (insert assms, auto)
   722   qed (insert assms, auto)
   723   also have "(\<Union>i\<in>S. A \<inter> (B i)) = A"
   723   also have "(\<Union>i\<in>S. A \<inter> (B i)) = A"
   724     using A by auto
   724     using A by auto
   725   finally show ?thesis by simp
   725   finally show ?thesis by simp
   745   shows "M = N"
   745   shows "M = N"
   746 proof (rule measure_eqI)
   746 proof (rule measure_eqI)
   747   fix X assume "X \<in> sets M"
   747   fix X assume "X \<in> sets M"
   748   then have X: "X \<subseteq> A" by auto
   748   then have X: "X \<subseteq> A" by auto
   749   then have "emeasure M X = (\<Sum>a\<in>X. emeasure M {a})"
   749   then have "emeasure M X = (\<Sum>a\<in>X. emeasure M {a})"
   750     using `finite A` by (subst emeasure_eq_setsum_singleton) (auto dest: finite_subset)
   750     using \<open>finite A\<close> by (subst emeasure_eq_setsum_singleton) (auto dest: finite_subset)
   751   also have "\<dots> = (\<Sum>a\<in>X. emeasure N {a})"
   751   also have "\<dots> = (\<Sum>a\<in>X. emeasure N {a})"
   752     using X eq by (auto intro!: setsum.cong)
   752     using X eq by (auto intro!: setsum.cong)
   753   also have "\<dots> = emeasure N X"
   753   also have "\<dots> = emeasure N X"
   754     using X `finite A` by (subst emeasure_eq_setsum_singleton) (auto dest: finite_subset)
   754     using X \<open>finite A\<close> by (subst emeasure_eq_setsum_singleton) (auto dest: finite_subset)
   755   finally show "emeasure M X = emeasure N X" .
   755   finally show "emeasure M X = emeasure N X" .
   756 qed simp
   756 qed simp
   757 
   757 
   758 lemma measure_eqI_generator_eq:
   758 lemma measure_eqI_generator_eq:
   759   fixes M N :: "'a measure" and E :: "'a set set" and A :: "nat \<Rightarrow> 'a set"
   759   fixes M N :: "'a measure" and E :: "'a set set" and A :: "nat \<Rightarrow> 'a set"
   765   shows "M = N"
   765   shows "M = N"
   766 proof -
   766 proof -
   767   let ?\<mu>  = "emeasure M" and ?\<nu> = "emeasure N"
   767   let ?\<mu>  = "emeasure M" and ?\<nu> = "emeasure N"
   768   interpret S: sigma_algebra \<Omega> "sigma_sets \<Omega> E" by (rule sigma_algebra_sigma_sets) fact
   768   interpret S: sigma_algebra \<Omega> "sigma_sets \<Omega> E" by (rule sigma_algebra_sigma_sets) fact
   769   have "space M = \<Omega>"
   769   have "space M = \<Omega>"
   770     using sets.top[of M] sets.space_closed[of M] S.top S.space_closed `sets M = sigma_sets \<Omega> E`
   770     using sets.top[of M] sets.space_closed[of M] S.top S.space_closed \<open>sets M = sigma_sets \<Omega> E\<close>
   771     by blast
   771     by blast
   772 
   772 
   773   { fix F D assume "F \<in> E" and "?\<mu> F \<noteq> \<infinity>"
   773   { fix F D assume "F \<in> E" and "?\<mu> F \<noteq> \<infinity>"
   774     then have [intro]: "F \<in> sigma_sets \<Omega> E" by auto
   774     then have [intro]: "F \<in> sigma_sets \<Omega> E" by auto
   775     have "?\<nu> F \<noteq> \<infinity>" using `?\<mu> F \<noteq> \<infinity>` `F \<in> E` eq by simp
   775     have "?\<nu> F \<noteq> \<infinity>" using \<open>?\<mu> F \<noteq> \<infinity>\<close> \<open>F \<in> E\<close> eq by simp
   776     assume "D \<in> sets M"
   776     assume "D \<in> sets M"
   777     with `Int_stable E` `E \<subseteq> Pow \<Omega>` have "emeasure M (F \<inter> D) = emeasure N (F \<inter> D)"
   777     with \<open>Int_stable E\<close> \<open>E \<subseteq> Pow \<Omega>\<close> have "emeasure M (F \<inter> D) = emeasure N (F \<inter> D)"
   778       unfolding M
   778       unfolding M
   779     proof (induct rule: sigma_sets_induct_disjoint)
   779     proof (induct rule: sigma_sets_induct_disjoint)
   780       case (basic A)
   780       case (basic A)
   781       then have "F \<inter> A \<in> E" using `Int_stable E` `F \<in> E` by (auto simp: Int_stable_def)
   781       then have "F \<inter> A \<in> E" using \<open>Int_stable E\<close> \<open>F \<in> E\<close> by (auto simp: Int_stable_def)
   782       then show ?case using eq by auto
   782       then show ?case using eq by auto
   783     next
   783     next
   784       case empty then show ?case by simp
   784       case empty then show ?case by simp
   785     next
   785     next
   786       case (compl A)
   786       case (compl A)
   787       then have **: "F \<inter> (\<Omega> - A) = F - (F \<inter> A)"
   787       then have **: "F \<inter> (\<Omega> - A) = F - (F \<inter> A)"
   788         and [intro]: "F \<inter> A \<in> sigma_sets \<Omega> E"
   788         and [intro]: "F \<inter> A \<in> sigma_sets \<Omega> E"
   789         using `F \<in> E` S.sets_into_space by (auto simp: M)
   789         using \<open>F \<in> E\<close> S.sets_into_space by (auto simp: M)
   790       have "?\<nu> (F \<inter> A) \<le> ?\<nu> F" by (auto intro!: emeasure_mono simp: M N)
   790       have "?\<nu> (F \<inter> A) \<le> ?\<nu> F" by (auto intro!: emeasure_mono simp: M N)
   791       then have "?\<nu> (F \<inter> A) \<noteq> \<infinity>" using `?\<nu> F \<noteq> \<infinity>` by auto
   791       then have "?\<nu> (F \<inter> A) \<noteq> \<infinity>" using \<open>?\<nu> F \<noteq> \<infinity>\<close> by auto
   792       have "?\<mu> (F \<inter> A) \<le> ?\<mu> F" by (auto intro!: emeasure_mono simp: M N)
   792       have "?\<mu> (F \<inter> A) \<le> ?\<mu> F" by (auto intro!: emeasure_mono simp: M N)
   793       then have "?\<mu> (F \<inter> A) \<noteq> \<infinity>" using `?\<mu> F \<noteq> \<infinity>` by auto
   793       then have "?\<mu> (F \<inter> A) \<noteq> \<infinity>" using \<open>?\<mu> F \<noteq> \<infinity>\<close> by auto
   794       then have "?\<mu> (F \<inter> (\<Omega> - A)) = ?\<mu> F - ?\<mu> (F \<inter> A)" unfolding **
   794       then have "?\<mu> (F \<inter> (\<Omega> - A)) = ?\<mu> F - ?\<mu> (F \<inter> A)" unfolding **
   795         using `F \<inter> A \<in> sigma_sets \<Omega> E` by (auto intro!: emeasure_Diff simp: M N)
   795         using \<open>F \<inter> A \<in> sigma_sets \<Omega> E\<close> by (auto intro!: emeasure_Diff simp: M N)
   796       also have "\<dots> = ?\<nu> F - ?\<nu> (F \<inter> A)" using eq `F \<in> E` compl by simp
   796       also have "\<dots> = ?\<nu> F - ?\<nu> (F \<inter> A)" using eq \<open>F \<in> E\<close> compl by simp
   797       also have "\<dots> = ?\<nu> (F \<inter> (\<Omega> - A))" unfolding **
   797       also have "\<dots> = ?\<nu> (F \<inter> (\<Omega> - A))" unfolding **
   798         using `F \<inter> A \<in> sigma_sets \<Omega> E` `?\<nu> (F \<inter> A) \<noteq> \<infinity>`
   798         using \<open>F \<inter> A \<in> sigma_sets \<Omega> E\<close> \<open>?\<nu> (F \<inter> A) \<noteq> \<infinity>\<close>
   799         by (auto intro!: emeasure_Diff[symmetric] simp: M N)
   799         by (auto intro!: emeasure_Diff[symmetric] simp: M N)
   800       finally show ?case
   800       finally show ?case
   801         using `space M = \<Omega>` by auto
   801         using \<open>space M = \<Omega>\<close> by auto
   802     next
   802     next
   803       case (union A)
   803       case (union A)
   804       then have "?\<mu> (\<Union>x. F \<inter> A x) = ?\<nu> (\<Union>x. F \<inter> A x)"
   804       then have "?\<mu> (\<Union>x. F \<inter> A x) = ?\<nu> (\<Union>x. F \<inter> A x)"
   805         by (subst (1 2) suminf_emeasure[symmetric]) (auto simp: disjoint_family_on_def subset_eq M N)
   805         by (subst (1 2) suminf_emeasure[symmetric]) (auto simp: disjoint_family_on_def subset_eq M N)
   806       with A show ?case
   806       with A show ?case
   813       using M N by simp
   813       using M N by simp
   814     have [simp, intro]: "\<And>i. A i \<in> sets M"
   814     have [simp, intro]: "\<And>i. A i \<in> sets M"
   815       using A(1) by (auto simp: subset_eq M)
   815       using A(1) by (auto simp: subset_eq M)
   816     fix F assume "F \<in> sets M"
   816     fix F assume "F \<in> sets M"
   817     let ?D = "disjointed (\<lambda>i. F \<inter> A i)"
   817     let ?D = "disjointed (\<lambda>i. F \<inter> A i)"
   818     from `space M = \<Omega>` have F_eq: "F = (\<Union>i. ?D i)"
   818     from \<open>space M = \<Omega>\<close> have F_eq: "F = (\<Union>i. ?D i)"
   819       using `F \<in> sets M`[THEN sets.sets_into_space] A(2)[symmetric] by (auto simp: UN_disjointed_eq)
   819       using \<open>F \<in> sets M\<close>[THEN sets.sets_into_space] A(2)[symmetric] by (auto simp: UN_disjointed_eq)
   820     have [simp, intro]: "\<And>i. ?D i \<in> sets M"
   820     have [simp, intro]: "\<And>i. ?D i \<in> sets M"
   821       using sets.range_disjointed_sets[of "\<lambda>i. F \<inter> A i" M] `F \<in> sets M`
   821       using sets.range_disjointed_sets[of "\<lambda>i. F \<inter> A i" M] \<open>F \<in> sets M\<close>
   822       by (auto simp: subset_eq)
   822       by (auto simp: subset_eq)
   823     have "disjoint_family ?D"
   823     have "disjoint_family ?D"
   824       by (auto simp: disjoint_family_disjointed)
   824       by (auto simp: disjoint_family_disjointed)
   825     moreover
   825     moreover
   826     have "(\<Sum>i. emeasure M (?D i)) = (\<Sum>i. emeasure N (?D i))"
   826     have "(\<Sum>i. emeasure M (?D i)) = (\<Sum>i. emeasure N (?D i))"
   830         by (auto simp: disjointed_def)
   830         by (auto simp: disjointed_def)
   831       then show "emeasure M (?D i) = emeasure N (?D i)"
   831       then show "emeasure M (?D i) = emeasure N (?D i)"
   832         using *[of "A i" "?D i", OF _ A(3)] A(1) by auto
   832         using *[of "A i" "?D i", OF _ A(3)] A(1) by auto
   833     qed
   833     qed
   834     ultimately show "emeasure M F = emeasure N F"
   834     ultimately show "emeasure M F = emeasure N F"
   835       by (simp add: image_subset_iff `sets M = sets N`[symmetric] F_eq[symmetric] suminf_emeasure)
   835       by (simp add: image_subset_iff \<open>sets M = sets N\<close>[symmetric] F_eq[symmetric] suminf_emeasure)
   836   qed
   836   qed
   837 qed
   837 qed
   838 
   838 
   839 lemma measure_of_of_measure: "measure_of (space M) (sets M) (emeasure M) = M"
   839 lemma measure_of_of_measure: "measure_of (space M) (sets M) (emeasure M) = M"
   840 proof (intro measure_eqI emeasure_measure_of_sigma)
   840 proof (intro measure_eqI emeasure_measure_of_sigma)
   843     by (simp add: positive_def emeasure_nonneg)
   843     by (simp add: positive_def emeasure_nonneg)
   844   show "countably_additive (sets M) (emeasure M)"
   844   show "countably_additive (sets M) (emeasure M)"
   845     by (simp add: emeasure_countably_additive)
   845     by (simp add: emeasure_countably_additive)
   846 qed simp_all
   846 qed simp_all
   847 
   847 
   848 subsection {* @{text \<mu>}-null sets *}
   848 subsection \<open>\<open>\<mu>\<close>-null sets\<close>
   849 
   849 
   850 definition null_sets :: "'a measure \<Rightarrow> 'a set set" where
   850 definition null_sets :: "'a measure \<Rightarrow> 'a set set" where
   851   "null_sets M = {N\<in>sets M. emeasure M N = 0}"
   851   "null_sets M = {N\<in>sets M. emeasure M N = 0}"
   852 
   852 
   853 lemma null_setsD1[dest]: "A \<in> null_sets M \<Longrightarrow> emeasure M A = 0"
   853 lemma null_setsD1[dest]: "A \<in> null_sets M \<Longrightarrow> emeasure M A = 0"
   899   show ?thesis
   899   show ?thesis
   900   proof (intro conjI CollectI null_setsI)
   900   proof (intro conjI CollectI null_setsI)
   901     show "(\<Union>i\<in>I. N i) \<in> sets M"
   901     show "(\<Union>i\<in>I. N i) \<in> sets M"
   902       using assms by (intro sets.countable_UN') auto
   902       using assms by (intro sets.countable_UN') auto
   903     have "emeasure M (\<Union>i\<in>I. N i) \<le> (\<Sum>n. emeasure M (N (from_nat_into I n)))"
   903     have "emeasure M (\<Union>i\<in>I. N i) \<le> (\<Sum>n. emeasure M (N (from_nat_into I n)))"
   904       unfolding UN_from_nat_into[OF `countable I` `I \<noteq> {}`]
   904       unfolding UN_from_nat_into[OF \<open>countable I\<close> \<open>I \<noteq> {}\<close>]
   905       using assms `I \<noteq> {}` by (intro emeasure_subadditive_countably) (auto intro: from_nat_into)
   905       using assms \<open>I \<noteq> {}\<close> by (intro emeasure_subadditive_countably) (auto intro: from_nat_into)
   906     also have "(\<lambda>n. emeasure M (N (from_nat_into I n))) = (\<lambda>_. 0)"
   906     also have "(\<lambda>n. emeasure M (N (from_nat_into I n))) = (\<lambda>_. 0)"
   907       using assms `I \<noteq> {}` by (auto intro: from_nat_into)
   907       using assms \<open>I \<noteq> {}\<close> by (auto intro: from_nat_into)
   908     finally show "emeasure M (\<Union>i\<in>I. N i) = 0"
   908     finally show "emeasure M (\<Union>i\<in>I. N i) = 0"
   909       by (intro antisym emeasure_nonneg) simp
   909       by (intro antisym emeasure_nonneg) simp
   910   qed
   910   qed
   911 qed
   911 qed
   912 
   912 
   951   then show ?thesis
   951   then show ?thesis
   952     unfolding * using assms
   952     unfolding * using assms
   953     by (subst plus_emeasure[symmetric]) auto
   953     by (subst plus_emeasure[symmetric]) auto
   954 qed
   954 qed
   955 
   955 
   956 subsection {* The almost everywhere filter (i.e.\ quantifier) *}
   956 subsection \<open>The almost everywhere filter (i.e.\ quantifier)\<close>
   957 
   957 
   958 definition ae_filter :: "'a measure \<Rightarrow> 'a filter" where
   958 definition ae_filter :: "'a measure \<Rightarrow> 'a filter" where
   959   "ae_filter M = (INF N:null_sets M. principal (space M - N))"
   959   "ae_filter M = (INF N:null_sets M. principal (space M - N))"
   960 
   960 
   961 abbreviation almost_everywhere :: "'a measure \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" where
   961 abbreviation almost_everywhere :: "'a measure \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" where
   981   assume "AE x in M. P x" then obtain N where N: "N \<in> sets M" "?P \<subseteq> N" "emeasure M N = 0"
   981   assume "AE x in M. P x" then obtain N where N: "N \<in> sets M" "?P \<subseteq> N" "emeasure M N = 0"
   982     unfolding eventually_ae_filter by auto
   982     unfolding eventually_ae_filter by auto
   983   have "0 \<le> emeasure M ?P" by auto
   983   have "0 \<le> emeasure M ?P" by auto
   984   moreover have "emeasure M ?P \<le> emeasure M N"
   984   moreover have "emeasure M ?P \<le> emeasure M N"
   985     using assms N(1,2) by (auto intro: emeasure_mono)
   985     using assms N(1,2) by (auto intro: emeasure_mono)
   986   ultimately have "emeasure M ?P = 0" unfolding `emeasure M N = 0` by auto
   986   ultimately have "emeasure M ?P = 0" unfolding \<open>emeasure M N = 0\<close> by auto
   987   then show "?P \<in> null_sets M" using assms by auto
   987   then show "?P \<in> null_sets M" using assms by auto
   988 next
   988 next
   989   assume "?P \<in> null_sets M" with assms show "AE x in M. P x" by (auto intro: AE_I')
   989   assume "?P \<in> null_sets M" with assms show "AE x in M. P x" by (auto intro: AE_I')
   990 qed
   990 qed
   991 
   991 
  1136   using f by induct auto
  1136   using f by induct auto
  1137 
  1137 
  1138 lemma AE_finite_allI:
  1138 lemma AE_finite_allI:
  1139   assumes "finite S"
  1139   assumes "finite S"
  1140   shows "(\<And>s. s \<in> S \<Longrightarrow> AE x in M. Q s x) \<Longrightarrow> AE x in M. \<forall>s\<in>S. Q s x"
  1140   shows "(\<And>s. s \<in> S \<Longrightarrow> AE x in M. Q s x) \<Longrightarrow> AE x in M. \<forall>s\<in>S. Q s x"
  1141   using AE_finite_all[OF `finite S`] by auto
  1141   using AE_finite_all[OF \<open>finite S\<close>] by auto
  1142 
  1142 
  1143 lemma emeasure_mono_AE:
  1143 lemma emeasure_mono_AE:
  1144   assumes imp: "AE x in M. x \<in> A \<longrightarrow> x \<in> B"
  1144   assumes imp: "AE x in M. x \<in> A \<longrightarrow> x \<in> B"
  1145     and B: "B \<in> sets M"
  1145     and B: "B \<in> sets M"
  1146   shows "emeasure M A \<le> emeasure M B"
  1146   shows "emeasure M A \<le> emeasure M B"
  1185   also have "emeasure M (B - A) = emeasure M B"
  1185   also have "emeasure M (B - A) = emeasure M B"
  1186     by (rule emeasure_eq_AE) (insert 2, auto)
  1186     by (rule emeasure_eq_AE) (insert 2, auto)
  1187   finally show ?thesis .
  1187   finally show ?thesis .
  1188 qed
  1188 qed
  1189 
  1189 
  1190 subsection {* @{text \<sigma>}-finite Measures *}
  1190 subsection \<open>\<open>\<sigma>\<close>-finite Measures\<close>
  1191 
  1191 
  1192 locale sigma_finite_measure =
  1192 locale sigma_finite_measure =
  1193   fixes M :: "'a measure"
  1193   fixes M :: "'a measure"
  1194   assumes sigma_finite_countable:
  1194   assumes sigma_finite_countable:
  1195     "\<exists>A::'a set set. countable A \<and> A \<subseteq> sets M \<and> (\<Union>A) = space M \<and> (\<forall>a\<in>A. emeasure M a \<noteq> \<infinity>)"
  1195     "\<exists>A::'a set set. countable A \<and> A \<subseteq> sets M \<and> (\<Union>A) = space M \<and> (\<forall>a\<in>A. emeasure M a \<noteq> \<infinity>)"
  1202     [simp]: "countable A" and
  1202     [simp]: "countable A" and
  1203     A: "A \<subseteq> sets M" "(\<Union>A) = space M" "\<And>a. a \<in> A \<Longrightarrow> emeasure M a \<noteq> \<infinity>"
  1203     A: "A \<subseteq> sets M" "(\<Union>A) = space M" "\<And>a. a \<in> A \<Longrightarrow> emeasure M a \<noteq> \<infinity>"
  1204     using sigma_finite_countable by metis
  1204     using sigma_finite_countable by metis
  1205   show thesis
  1205   show thesis
  1206   proof cases
  1206   proof cases
  1207     assume "A = {}" with `(\<Union>A) = space M` show thesis
  1207     assume "A = {}" with \<open>(\<Union>A) = space M\<close> show thesis
  1208       by (intro that[of "\<lambda>_. {}"]) auto
  1208       by (intro that[of "\<lambda>_. {}"]) auto
  1209   next
  1209   next
  1210     assume "A \<noteq> {}"
  1210     assume "A \<noteq> {}"
  1211     show thesis
  1211     show thesis
  1212     proof
  1212     proof
  1213       show "range (from_nat_into A) \<subseteq> sets M"
  1213       show "range (from_nat_into A) \<subseteq> sets M"
  1214         using `A \<noteq> {}` A by auto
  1214         using \<open>A \<noteq> {}\<close> A by auto
  1215       have "(\<Union>i. from_nat_into A i) = \<Union>A"
  1215       have "(\<Union>i. from_nat_into A i) = \<Union>A"
  1216         using range_from_nat_into[OF `A \<noteq> {}` `countable A`] by auto
  1216         using range_from_nat_into[OF \<open>A \<noteq> {}\<close> \<open>countable A\<close>] by auto
  1217       with A show "(\<Union>i. from_nat_into A i) = space M"
  1217       with A show "(\<Union>i. from_nat_into A i) = space M"
  1218         by auto
  1218         by auto
  1219     qed (intro A from_nat_into `A \<noteq> {}`)
  1219     qed (intro A from_nat_into \<open>A \<noteq> {}\<close>)
  1220   qed
  1220   qed
  1221 qed
  1221 qed
  1222 
  1222 
  1223 lemma (in sigma_finite_measure) sigma_finite_disjoint:
  1223 lemma (in sigma_finite_measure) sigma_finite_disjoint:
  1224   obtains A :: "nat \<Rightarrow> 'a set"
  1224   obtains A :: "nat \<Rightarrow> 'a set"
  1273     show "incseq (\<lambda>n. \<Union>i\<le>n. F i)"
  1273     show "incseq (\<lambda>n. \<Union>i\<le>n. F i)"
  1274       by (force simp: incseq_def)
  1274       by (force simp: incseq_def)
  1275   qed
  1275   qed
  1276 qed
  1276 qed
  1277 
  1277 
  1278 subsection {* Measure space induced by distribution of @{const measurable}-functions *}
  1278 subsection \<open>Measure space induced by distribution of @{const measurable}-functions\<close>
  1279 
  1279 
  1280 definition distr :: "'a measure \<Rightarrow> 'b measure \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'b measure" where
  1280 definition distr :: "'a measure \<Rightarrow> 'b measure \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'b measure" where
  1281   "distr M N f = measure_of (space N) (sets N) (\<lambda>A. emeasure M (f -` A \<inter> space M))"
  1281   "distr M N f = measure_of (space N) (sets N) (\<lambda>A. emeasure M (f -` A \<inter> space M))"
  1282 
  1282 
  1283 lemma
  1283 lemma
  1310     then have *: "range (\<lambda>i. f -` (A i) \<inter> space M) \<subseteq> sets M"
  1310     then have *: "range (\<lambda>i. f -` (A i) \<inter> space M) \<subseteq> sets M"
  1311       using f by (auto simp: measurable_def)
  1311       using f by (auto simp: measurable_def)
  1312     moreover have "(\<Union>i. f -`  A i \<inter> space M) \<in> sets M"
  1312     moreover have "(\<Union>i. f -`  A i \<inter> space M) \<in> sets M"
  1313       using * by blast
  1313       using * by blast
  1314     moreover have **: "disjoint_family (\<lambda>i. f -` A i \<inter> space M)"
  1314     moreover have **: "disjoint_family (\<lambda>i. f -` A i \<inter> space M)"
  1315       using `disjoint_family A` by (auto simp: disjoint_family_on_def)
  1315       using \<open>disjoint_family A\<close> by (auto simp: disjoint_family_on_def)
  1316     ultimately show "(\<Sum>i. ?\<mu> (A i)) = ?\<mu> (\<Union>i. A i)"
  1316     ultimately show "(\<Sum>i. ?\<mu> (A i)) = ?\<mu> (\<Union>i. A i)"
  1317       using suminf_emeasure[OF _ **] A f
  1317       using suminf_emeasure[OF _ **] A f
  1318       by (auto simp: comp_def vimage_UN)
  1318       by (auto simp: comp_def vimage_UN)
  1319   qed
  1319   qed
  1320   show "sigma_algebra (space N) (sets N)" ..
  1320   show "sigma_algebra (space N) (sets N)" ..
  1332   assumes f: "\<And>M. P M \<Longrightarrow> f \<in> measurable M' M"
  1332   assumes f: "\<And>M. P M \<Longrightarrow> f \<in> measurable M' M"
  1333   assumes *: "\<And>M A. P M \<Longrightarrow> (\<And>N. P N \<Longrightarrow> Measurable.pred N A) \<Longrightarrow> Measurable.pred M (F A)"
  1333   assumes *: "\<And>M A. P M \<Longrightarrow> (\<And>N. P N \<Longrightarrow> Measurable.pred N A) \<Longrightarrow> Measurable.pred M (F A)"
  1334   shows "emeasure M' {x\<in>space M'. lfp F (f x)} = (SUP i. emeasure M' {x\<in>space M'. (F ^^ i) (\<lambda>x. False) (f x)})"
  1334   shows "emeasure M' {x\<in>space M'. lfp F (f x)} = (SUP i. emeasure M' {x\<in>space M'. (F ^^ i) (\<lambda>x. False) (f x)})"
  1335 proof (subst (1 2) emeasure_Collect_distr[symmetric, where X=f])
  1335 proof (subst (1 2) emeasure_Collect_distr[symmetric, where X=f])
  1336   show "f \<in> measurable M' M"  "f \<in> measurable M' M"
  1336   show "f \<in> measurable M' M"  "f \<in> measurable M' M"
  1337     using f[OF `P M`] by auto
  1337     using f[OF \<open>P M\<close>] by auto
  1338   { fix i show "Measurable.pred M ((F ^^ i) (\<lambda>x. False))"
  1338   { fix i show "Measurable.pred M ((F ^^ i) (\<lambda>x. False))"
  1339     using `P M` by (induction i arbitrary: M) (auto intro!: *) }
  1339     using \<open>P M\<close> by (induction i arbitrary: M) (auto intro!: *) }
  1340   show "Measurable.pred M (lfp F)"
  1340   show "Measurable.pred M (lfp F)"
  1341     using `P M` cont * by (rule measurable_lfp_coinduct[of P])
  1341     using \<open>P M\<close> cont * by (rule measurable_lfp_coinduct[of P])
  1342 
  1342 
  1343   have "emeasure (distr M' M f) {x \<in> space (distr M' M f). lfp F x} =
  1343   have "emeasure (distr M' M f) {x \<in> space (distr M' M f). lfp F x} =
  1344     (SUP i. emeasure (distr M' M f) {x \<in> space (distr M' M f). (F ^^ i) (\<lambda>x. False) x})"
  1344     (SUP i. emeasure (distr M' M f) {x \<in> space (distr M' M f). (F ^^ i) (\<lambda>x. False) x})"
  1345     using `P M`
  1345     using \<open>P M\<close>
  1346   proof (coinduction arbitrary: M rule: emeasure_lfp')
  1346   proof (coinduction arbitrary: M rule: emeasure_lfp')
  1347     case (measurable A N) then have "\<And>N. P N \<Longrightarrow> Measurable.pred (distr M' N f) A"
  1347     case (measurable A N) then have "\<And>N. P N \<Longrightarrow> Measurable.pred (distr M' N f) A"
  1348       by metis
  1348       by metis
  1349     then have "\<And>N. P N \<Longrightarrow> Measurable.pred N A"
  1349     then have "\<And>N. P N \<Longrightarrow> Measurable.pred N A"
  1350       by simp
  1350       by simp
  1351     with `P N`[THEN *] show ?case
  1351     with \<open>P N\<close>[THEN *] show ?case
  1352       by auto
  1352       by auto
  1353   qed fact
  1353   qed fact
  1354   then show "emeasure (distr M' M f) {x \<in> space M. lfp F x} =
  1354   then show "emeasure (distr M' M f) {x \<in> space M. lfp F x} =
  1355     (SUP i. emeasure (distr M' M f) {x \<in> space M. (F ^^ i) (\<lambda>x. False) x})"
  1355     (SUP i. emeasure (distr M' M f) {x \<in> space M. (F ^^ i) (\<lambda>x. False) x})"
  1356    by simp
  1356    by simp
  1403 lemma distr_distr:
  1403 lemma distr_distr:
  1404   "g \<in> measurable N L \<Longrightarrow> f \<in> measurable M N \<Longrightarrow> distr (distr M N f) L g = distr M L (g \<circ> f)"
  1404   "g \<in> measurable N L \<Longrightarrow> f \<in> measurable M N \<Longrightarrow> distr (distr M N f) L g = distr M L (g \<circ> f)"
  1405   by (auto simp add: emeasure_distr measurable_space
  1405   by (auto simp add: emeasure_distr measurable_space
  1406            intro!: arg_cong[where f="emeasure M"] measure_eqI)
  1406            intro!: arg_cong[where f="emeasure M"] measure_eqI)
  1407 
  1407 
  1408 subsection {* Real measure values *}
  1408 subsection \<open>Real measure values\<close>
  1409 
  1409 
  1410 lemma measure_nonneg: "0 \<le> measure M A"
  1410 lemma measure_nonneg: "0 \<le> measure M A"
  1411   using emeasure_nonneg[of M A] unfolding measure_def by (auto intro: real_of_ereal_pos)
  1411   using emeasure_nonneg[of M A] unfolding measure_def by (auto intro: real_of_ereal_pos)
  1412 
  1412 
  1413 lemma measure_le_0_iff: "measure M X \<le> 0 \<longleftrightarrow> measure M X = 0"
  1413 lemma measure_le_0_iff: "measure M X \<le> 0 \<longleftrightarrow> measure M X = 0"
  1447 proof -
  1447 proof -
  1448   have "emeasure M (A - B) \<le> emeasure M A" "emeasure M B \<le> emeasure M A"
  1448   have "emeasure M (A - B) \<le> emeasure M A" "emeasure M B \<le> emeasure M A"
  1449     using measurable by (auto intro!: emeasure_mono)
  1449     using measurable by (auto intro!: emeasure_mono)
  1450   hence "measure M ((A - B) \<union> B) = measure M (A - B) + measure M B"
  1450   hence "measure M ((A - B) \<union> B) = measure M (A - B) + measure M B"
  1451     using measurable finite by (rule_tac measure_Union) auto
  1451     using measurable finite by (rule_tac measure_Union) auto
  1452   thus ?thesis using `B \<subseteq> A` by (auto simp: Un_absorb2)
  1452   thus ?thesis using \<open>B \<subseteq> A\<close> by (auto simp: Un_absorb2)
  1453 qed
  1453 qed
  1454 
  1454 
  1455 lemma measure_UNION:
  1455 lemma measure_UNION:
  1456   assumes measurable: "range A \<subseteq> sets M" "disjoint_family A"
  1456   assumes measurable: "range A \<subseteq> sets M" "disjoint_family A"
  1457   assumes finite: "emeasure M (\<Union>i. A i) \<noteq> \<infinity>"
  1457   assumes finite: "emeasure M (\<Union>i. A i) \<noteq> \<infinity>"
  1546     unfolding measure_def
  1546     unfolding measure_def
  1547     using Lim_emeasure_decseq[OF A fin]
  1547     using Lim_emeasure_decseq[OF A fin]
  1548     by (intro lim_real_of_ereal) simp
  1548     by (intro lim_real_of_ereal) simp
  1549 qed
  1549 qed
  1550 
  1550 
  1551 subsection {* Measure spaces with @{term "emeasure M (space M) < \<infinity>"} *}
  1551 subsection \<open>Measure spaces with @{term "emeasure M (space M) < \<infinity>"}\<close>
  1552 
  1552 
  1553 locale finite_measure = sigma_finite_measure M for M +
  1553 locale finite_measure = sigma_finite_measure M for M +
  1554   assumes finite_emeasure_space: "emeasure M (space M) \<noteq> \<infinity>"
  1554   assumes finite_emeasure_space: "emeasure M (space M) \<noteq> \<infinity>"
  1555 
  1555 
  1556 lemma finite_measureI[Pure.intro!]:
  1556 lemma finite_measureI[Pure.intro!]:
  1604 
  1604 
  1605 lemma (in finite_measure) finite_measure_subadditive_countably:
  1605 lemma (in finite_measure) finite_measure_subadditive_countably:
  1606   assumes A: "range A \<subseteq> sets M" and sum: "summable (\<lambda>i. measure M (A i))"
  1606   assumes A: "range A \<subseteq> sets M" and sum: "summable (\<lambda>i. measure M (A i))"
  1607   shows "measure M (\<Union>i. A i) \<le> (\<Sum>i. measure M (A i))"
  1607   shows "measure M (\<Union>i. A i) \<le> (\<Sum>i. measure M (A i))"
  1608 proof -
  1608 proof -
  1609   from `summable (\<lambda>i. measure M (A i))`
  1609   from \<open>summable (\<lambda>i. measure M (A i))\<close>
  1610   have "(\<lambda>i. ereal (measure M (A i))) sums ereal (\<Sum>i. measure M (A i))"
  1610   have "(\<lambda>i. ereal (measure M (A i))) sums ereal (\<Sum>i. measure M (A i))"
  1611     by (simp add: sums_ereal) (rule summable_sums)
  1611     by (simp add: sums_ereal) (rule summable_sums)
  1612   from sums_unique[OF this, symmetric]
  1612   from sums_unique[OF this, symmetric]
  1613        measure_subadditive_countably[OF A]
  1613        measure_subadditive_countably[OF A]
  1614   show ?thesis by (simp add: emeasure_eq_measure)
  1614   show ?thesis by (simp add: emeasure_eq_measure)
  1727   assumes disjoint: "\<And> x y. \<lbrakk>x \<in> s ; y \<in> s ; x \<noteq> y\<rbrakk> \<Longrightarrow> f x \<inter> f y = {}"
  1727   assumes disjoint: "\<And> x y. \<lbrakk>x \<in> s ; y \<in> s ; x \<noteq> y\<rbrakk> \<Longrightarrow> f x \<inter> f y = {}"
  1728   assumes upper: "space M \<subseteq> (\<Union>i \<in> s. f i)"
  1728   assumes upper: "space M \<subseteq> (\<Union>i \<in> s. f i)"
  1729   shows "measure M e = (\<Sum> x \<in> s. measure M (e \<inter> f x))"
  1729   shows "measure M e = (\<Sum> x \<in> s. measure M (e \<inter> f x))"
  1730 proof -
  1730 proof -
  1731   have e: "e = (\<Union>i \<in> s. e \<inter> f i)"
  1731   have e: "e = (\<Union>i \<in> s. e \<inter> f i)"
  1732     using `e \<in> sets M` sets.sets_into_space upper by blast
  1732     using \<open>e \<in> sets M\<close> sets.sets_into_space upper by blast
  1733   hence "measure M e = measure M (\<Union>i \<in> s. e \<inter> f i)" by simp
  1733   hence "measure M e = measure M (\<Union>i \<in> s. e \<inter> f i)" by simp
  1734   also have "\<dots> = (\<Sum> x \<in> s. measure M (e \<inter> f x))"
  1734   also have "\<dots> = (\<Sum> x \<in> s. measure M (e \<inter> f x))"
  1735   proof (rule finite_measure_finite_Union)
  1735   proof (rule finite_measure_finite_Union)
  1736     show "finite s" by fact
  1736     show "finite s" by fact
  1737     show "(\<lambda>i. e \<inter> f i)`s \<subseteq> sets M" using assms(2) by auto
  1737     show "(\<lambda>i. e \<inter> f i)`s \<subseteq> sets M" using assms(2) by auto
  1772 next
  1772 next
  1773   show "f x \<le> (\<lambda>s. emeasure (M s) {x \<in> space N. F top x})" for x
  1773   show "f x \<le> (\<lambda>s. emeasure (M s) {x \<in> space N. F top x})" for x
  1774     using bound[of x] sets_eq_imp_space_eq[OF sets] by (simp add: iter)
  1774     using bound[of x] sets_eq_imp_space_eq[OF sets] by (simp add: iter)
  1775 qed (auto simp add: iter le_fun_def INF_apply[abs_def] intro!: meas cont)
  1775 qed (auto simp add: iter le_fun_def INF_apply[abs_def] intro!: meas cont)
  1776 
  1776 
  1777 subsection {* Counting space *}
  1777 subsection \<open>Counting space\<close>
  1778 
  1778 
  1779 lemma strict_monoI_Suc:
  1779 lemma strict_monoI_Suc:
  1780   assumes ord [simp]: "(\<And>n. f n < f (Suc n))" shows "strict_mono f"
  1780   assumes ord [simp]: "(\<And>n. f n < f (Suc n))" shows "strict_mono f"
  1781   unfolding strict_mono_def
  1781   unfolding strict_mono_def
  1782 proof safe
  1782 proof safe
  1787 lemma emeasure_count_space:
  1787 lemma emeasure_count_space:
  1788   assumes "X \<subseteq> A" shows "emeasure (count_space A) X = (if finite X then ereal (card X) else \<infinity>)"
  1788   assumes "X \<subseteq> A" shows "emeasure (count_space A) X = (if finite X then ereal (card X) else \<infinity>)"
  1789     (is "_ = ?M X")
  1789     (is "_ = ?M X")
  1790   unfolding count_space_def
  1790   unfolding count_space_def
  1791 proof (rule emeasure_measure_of_sigma)
  1791 proof (rule emeasure_measure_of_sigma)
  1792   show "X \<in> Pow A" using `X \<subseteq> A` by auto
  1792   show "X \<in> Pow A" using \<open>X \<subseteq> A\<close> by auto
  1793   show "sigma_algebra A (Pow A)" by (rule sigma_algebra_Pow)
  1793   show "sigma_algebra A (Pow A)" by (rule sigma_algebra_Pow)
  1794   show positive: "positive (Pow A) ?M"
  1794   show positive: "positive (Pow A) ?M"
  1795     by (auto simp: positive_def)
  1795     by (auto simp: positive_def)
  1796   have additive: "additive (Pow A) ?M"
  1796   have additive: "additive (Pow A) ?M"
  1797     by (auto simp: card_Un_disjoint additive_def)
  1797     by (auto simp: card_Un_disjoint additive_def)
  1804     fix F :: "nat \<Rightarrow> 'a set" assume "incseq F"
  1804     fix F :: "nat \<Rightarrow> 'a set" assume "incseq F"
  1805     show "(\<lambda>i. ?M (F i)) ----> ?M (\<Union>i. F i)"
  1805     show "(\<lambda>i. ?M (F i)) ----> ?M (\<Union>i. F i)"
  1806     proof cases
  1806     proof cases
  1807       assume "\<exists>i. \<forall>j\<ge>i. F i = F j"
  1807       assume "\<exists>i. \<forall>j\<ge>i. F i = F j"
  1808       then guess i .. note i = this
  1808       then guess i .. note i = this
  1809       { fix j from i `incseq F` have "F j \<subseteq> F i"
  1809       { fix j from i \<open>incseq F\<close> have "F j \<subseteq> F i"
  1810           by (cases "i \<le> j") (auto simp: incseq_def) }
  1810           by (cases "i \<le> j") (auto simp: incseq_def) }
  1811       then have eq: "(\<Union>i. F i) = F i"
  1811       then have eq: "(\<Union>i. F i) = F i"
  1812         by auto
  1812         by auto
  1813       with i show ?thesis
  1813       with i show ?thesis
  1814         by (auto intro!: Lim_eventually eventually_sequentiallyI[where c=i])
  1814         by (auto intro!: Lim_eventually eventually_sequentiallyI[where c=i])
  1815     next
  1815     next
  1816       assume "\<not> (\<exists>i. \<forall>j\<ge>i. F i = F j)"
  1816       assume "\<not> (\<exists>i. \<forall>j\<ge>i. F i = F j)"
  1817       then obtain f where f: "\<And>i. i \<le> f i" "\<And>i. F i \<noteq> F (f i)" by metis
  1817       then obtain f where f: "\<And>i. i \<le> f i" "\<And>i. F i \<noteq> F (f i)" by metis
  1818       then have "\<And>i. F i \<subseteq> F (f i)" using `incseq F` by (auto simp: incseq_def)
  1818       then have "\<And>i. F i \<subseteq> F (f i)" using \<open>incseq F\<close> by (auto simp: incseq_def)
  1819       with f have *: "\<And>i. F i \<subset> F (f i)" by auto
  1819       with f have *: "\<And>i. F i \<subset> F (f i)" by auto
  1820 
  1820 
  1821       have "incseq (\<lambda>i. ?M (F i))"
  1821       have "incseq (\<lambda>i. ?M (F i))"
  1822         using `incseq F` unfolding incseq_def by (auto simp: card_mono dest: finite_subset)
  1822         using \<open>incseq F\<close> unfolding incseq_def by (auto simp: card_mono dest: finite_subset)
  1823       then have "(\<lambda>i. ?M (F i)) ----> (SUP n. ?M (F n))"
  1823       then have "(\<lambda>i. ?M (F i)) ----> (SUP n. ?M (F n))"
  1824         by (rule LIMSEQ_SUP)
  1824         by (rule LIMSEQ_SUP)
  1825 
  1825 
  1826       moreover have "(SUP n. ?M (F n)) = \<infinity>"
  1826       moreover have "(SUP n. ?M (F n)) = \<infinity>"
  1827       proof (rule SUP_PInfty)
  1827       proof (rule SUP_PInfty)
  1828         fix n :: nat show "\<exists>k::nat\<in>UNIV. ereal n \<le> ?M (F k)"
  1828         fix n :: nat show "\<exists>k::nat\<in>UNIV. ereal n \<le> ?M (F k)"
  1829         proof (induct n)
  1829         proof (induct n)
  1830           case (Suc n)
  1830           case (Suc n)
  1831           then guess k .. note k = this
  1831           then guess k .. note k = this
  1832           moreover have "finite (F k) \<Longrightarrow> finite (F (f k)) \<Longrightarrow> card (F k) < card (F (f k))"
  1832           moreover have "finite (F k) \<Longrightarrow> finite (F (f k)) \<Longrightarrow> card (F k) < card (F (f k))"
  1833             using `F k \<subset> F (f k)` by (simp add: psubset_card_mono)
  1833             using \<open>F k \<subset> F (f k)\<close> by (simp add: psubset_card_mono)
  1834           moreover have "finite (F (f k)) \<Longrightarrow> finite (F k)"
  1834           moreover have "finite (F (f k)) \<Longrightarrow> finite (F k)"
  1835             using `k \<le> f k` `incseq F` by (auto simp: incseq_def dest: finite_subset)
  1835             using \<open>k \<le> f k\<close> \<open>incseq F\<close> by (auto simp: incseq_def dest: finite_subset)
  1836           ultimately show ?case
  1836           ultimately show ?case
  1837             by (auto intro!: exI[of _ "f k"])
  1837             by (auto intro!: exI[of _ "f k"])
  1838         qed auto
  1838         qed auto
  1839       qed
  1839       qed
  1840 
  1840 
  1924 proof -
  1924 proof -
  1925   interpret finite_measure "count_space A" using A by (rule finite_measure_count_space)
  1925   interpret finite_measure "count_space A" using A by (rule finite_measure_count_space)
  1926   show "sigma_finite_measure (count_space A)" ..
  1926   show "sigma_finite_measure (count_space A)" ..
  1927 qed
  1927 qed
  1928 
  1928 
  1929 subsection {* Measure restricted to space *}
  1929 subsection \<open>Measure restricted to space\<close>
  1930 
  1930 
  1931 lemma emeasure_restrict_space:
  1931 lemma emeasure_restrict_space:
  1932   assumes "\<Omega> \<inter> space M \<in> sets M" "A \<subseteq> \<Omega>"
  1932   assumes "\<Omega> \<inter> space M \<in> sets M" "A \<subseteq> \<Omega>"
  1933   shows "emeasure (restrict_space M \<Omega>) A = emeasure M A"
  1933   shows "emeasure (restrict_space M \<Omega>) A = emeasure M A"
  1934 proof cases
  1934 proof cases
  1935   assume "A \<in> sets M"
  1935   assume "A \<in> sets M"
  1936   show ?thesis
  1936   show ?thesis
  1937   proof (rule emeasure_measure_of[OF restrict_space_def])
  1937   proof (rule emeasure_measure_of[OF restrict_space_def])
  1938     show "op \<inter> \<Omega> ` sets M \<subseteq> Pow (\<Omega> \<inter> space M)" "A \<in> sets (restrict_space M \<Omega>)"
  1938     show "op \<inter> \<Omega> ` sets M \<subseteq> Pow (\<Omega> \<inter> space M)" "A \<in> sets (restrict_space M \<Omega>)"
  1939       using `A \<subseteq> \<Omega>` `A \<in> sets M` sets.space_closed by (auto simp: sets_restrict_space)
  1939       using \<open>A \<subseteq> \<Omega>\<close> \<open>A \<in> sets M\<close> sets.space_closed by (auto simp: sets_restrict_space)
  1940     show "positive (sets (restrict_space M \<Omega>)) (emeasure M)"
  1940     show "positive (sets (restrict_space M \<Omega>)) (emeasure M)"
  1941       by (auto simp: positive_def emeasure_nonneg)
  1941       by (auto simp: positive_def emeasure_nonneg)
  1942     show "countably_additive (sets (restrict_space M \<Omega>)) (emeasure M)"
  1942     show "countably_additive (sets (restrict_space M \<Omega>)) (emeasure M)"
  1943     proof (rule countably_additiveI)
  1943     proof (rule countably_additiveI)
  1944       fix A :: "nat \<Rightarrow> _" assume "range A \<subseteq> sets (restrict_space M \<Omega>)" "disjoint_family A"
  1944       fix A :: "nat \<Rightarrow> _" assume "range A \<subseteq> sets (restrict_space M \<Omega>)" "disjoint_family A"
  2083   also have "emeasure (restrict_space N \<Omega>) (X \<inter> \<Omega>) = emeasure N X"
  2083   also have "emeasure (restrict_space N \<Omega>) (X \<inter> \<Omega>) = emeasure N X"
  2084     using X ae \<Omega> by (auto simp add: emeasure_restrict_space sets_eq intro!: emeasure_eq_AE)
  2084     using X ae \<Omega> by (auto simp add: emeasure_restrict_space sets_eq intro!: emeasure_eq_AE)
  2085   finally show "emeasure M X = emeasure N X" .
  2085   finally show "emeasure M X = emeasure N X" .
  2086 qed fact
  2086 qed fact
  2087 
  2087 
  2088 subsection {* Null measure *}
  2088 subsection \<open>Null measure\<close>
  2089 
  2089 
  2090 definition "null_measure M = sigma (space M) (sets M)"
  2090 definition "null_measure M = sigma (space M) (sets M)"
  2091 
  2091 
  2092 lemma space_null_measure[simp]: "space (null_measure M) = space M"
  2092 lemma space_null_measure[simp]: "space (null_measure M) = space M"
  2093   by (simp add: null_measure_def)
  2093   by (simp add: null_measure_def)