src/HOL/Analysis/Measure_Space.thy
changeset 67962 0acdcd8f4ba1
parent 67673 c8caefb20564
child 67982 7643b005b29a
equal deleted inserted replaced
67961:9c31678d2139 67962:0acdcd8f4ba1
     9 theory Measure_Space
     9 theory Measure_Space
    10 imports
    10 imports
    11   Measurable "HOL-Library.Extended_Nonnegative_Real"
    11   Measurable "HOL-Library.Extended_Nonnegative_Real"
    12 begin
    12 begin
    13 
    13 
    14 subsection "Relate extended reals and the indicator function"
    14 subsection%unimportant "Relate extended reals and the indicator function"
    15 
    15 
    16 lemma suminf_cmult_indicator:
    16 lemma suminf_cmult_indicator:
    17   fixes f :: "nat \<Rightarrow> ennreal"
    17   fixes f :: "nat \<Rightarrow> ennreal"
    18   assumes "disjoint_family A" "x \<in> A i"
    18   assumes "disjoint_family A" "x \<in> A 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"
    57 text \<open>
    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 \<close>
    60 \<close>
    61 
    61 
    62 subsection "Extend binary sets"
    62 subsection%unimportant "Extend binary sets"
    63 
    63 
    64 lemma LIMSEQ_binaryset:
    64 lemma LIMSEQ_binaryset:
    65   assumes f: "f {} = 0"
    65   assumes f: "f {} = 0"
    66   shows  "(\<lambda>n. \<Sum>i<n. f (binaryset A B i)) \<longlonglongrightarrow> f A + f B"
    66   shows  "(\<lambda>n. \<Sum>i<n. f (binaryset A B i)) \<longlonglongrightarrow> f A + f B"
    67 proof -
    67 proof -
    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 \<open>Properties of a premeasure @{term \<mu>}\<close>
    94 subsection%unimportant \<open>Properties of a premeasure @{term \<mu>}\<close>
    95 
    95 
    96 text \<open>
    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 \<close>
    99 \<close>
   440   shows "countably_additive M f"
   440   shows "countably_additive M f"
   441   using countably_additive_iff_continuous_from_below[OF f]
   441   using countably_additive_iff_continuous_from_below[OF f]
   442   using empty_continuous_imp_continuous_from_below[OF f fin] cont
   442   using empty_continuous_imp_continuous_from_below[OF f fin] cont
   443   by blast
   443   by blast
   444 
   444 
   445 subsection \<open>Properties of @{const emeasure}\<close>
   445 subsection%unimportant \<open>Properties of @{const emeasure}\<close>
   446 
   446 
   447 lemma emeasure_positive: "positive (sets M) (emeasure M)"
   447 lemma emeasure_positive: "positive (sets M) (emeasure M)"
   448   by (cases M) (auto simp: sets_def emeasure_def Abs_measure_inverse measure_space_def)
   448   by (cases M) (auto simp: sets_def emeasure_def Abs_measure_inverse measure_space_def)
   449 
   449 
   450 lemma emeasure_empty[simp, intro]: "emeasure M {} = 0"
   450 lemma emeasure_empty[simp, intro]: "emeasure M {} = 0"
   879     by (simp add: emeasure_countably_additive)
   879     by (simp add: emeasure_countably_additive)
   880 qed simp_all
   880 qed simp_all
   881 
   881 
   882 subsection \<open>\<open>\<mu>\<close>-null sets\<close>
   882 subsection \<open>\<open>\<mu>\<close>-null sets\<close>
   883 
   883 
   884 definition null_sets :: "'a measure \<Rightarrow> 'a set set" where
   884 definition%important null_sets :: "'a measure \<Rightarrow> 'a set set" where
   885   "null_sets M = {N\<in>sets M. emeasure M N = 0}"
   885   "null_sets M = {N\<in>sets M. emeasure M N = 0}"
   886 
   886 
   887 lemma null_setsD1[dest]: "A \<in> null_sets M \<Longrightarrow> emeasure M A = 0"
   887 lemma null_setsD1[dest]: "A \<in> null_sets M \<Longrightarrow> emeasure M A = 0"
   888   by (simp add: null_sets_def)
   888   by (simp add: null_sets_def)
   889 
   889 
   987     by (subst plus_emeasure[symmetric]) auto
   987     by (subst plus_emeasure[symmetric]) auto
   988 qed
   988 qed
   989 
   989 
   990 subsection \<open>The almost everywhere filter (i.e.\ quantifier)\<close>
   990 subsection \<open>The almost everywhere filter (i.e.\ quantifier)\<close>
   991 
   991 
   992 definition ae_filter :: "'a measure \<Rightarrow> 'a filter" where
   992 definition%important ae_filter :: "'a measure \<Rightarrow> 'a filter" where
   993   "ae_filter M = (INF N:null_sets M. principal (space M - N))"
   993   "ae_filter M = (INF N:null_sets M. principal (space M - N))"
   994 
   994 
   995 abbreviation almost_everywhere :: "'a measure \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" where
   995 abbreviation almost_everywhere :: "'a measure \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" where
   996   "almost_everywhere M P \<equiv> eventually P (ae_filter M)"
   996   "almost_everywhere M P \<equiv> eventually P (ae_filter M)"
   997 
   997 
  1263   finally show ?thesis .
  1263   finally show ?thesis .
  1264 qed
  1264 qed
  1265 
  1265 
  1266 subsection \<open>\<open>\<sigma>\<close>-finite Measures\<close>
  1266 subsection \<open>\<open>\<sigma>\<close>-finite Measures\<close>
  1267 
  1267 
  1268 locale sigma_finite_measure =
  1268 locale%important sigma_finite_measure =
  1269   fixes M :: "'a measure"
  1269   fixes M :: "'a measure"
  1270   assumes sigma_finite_countable:
  1270   assumes sigma_finite_countable:
  1271     "\<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>)"
  1271     "\<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>)"
  1272 
  1272 
  1273 lemma (in sigma_finite_measure) sigma_finite:
  1273 lemma (in sigma_finite_measure) sigma_finite:
  1385   then show ?thesis using that by blast
  1385   then show ?thesis using that by blast
  1386 qed
  1386 qed
  1387 
  1387 
  1388 subsection \<open>Measure space induced by distribution of @{const measurable}-functions\<close>
  1388 subsection \<open>Measure space induced by distribution of @{const measurable}-functions\<close>
  1389 
  1389 
  1390 definition distr :: "'a measure \<Rightarrow> 'b measure \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'b measure" where
  1390 definition%important distr :: "'a measure \<Rightarrow> 'b measure \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'b measure" where
  1391   "distr M N f = measure_of (space N) (sets N) (\<lambda>A. emeasure M (f -` A \<inter> space M))"
  1391   "distr M N f = measure_of (space N) (sets N) (\<lambda>A. emeasure M (f -` A \<inter> space M))"
  1392 
  1392 
  1393 lemma
  1393 lemma
  1394   shows sets_distr[simp, measurable_cong]: "sets (distr M N f) = sets N"
  1394   shows sets_distr[simp, measurable_cong]: "sets (distr M N f) = sets N"
  1395     and space_distr[simp]: "space (distr M N f) = space N"
  1395     and space_distr[simp]: "space (distr M N f) = space N"
  1511 
  1511 
  1512 lemma null_sets_distr_iff:
  1512 lemma null_sets_distr_iff:
  1513   "f \<in> measurable M N \<Longrightarrow> A \<in> null_sets (distr M N f) \<longleftrightarrow> f -` A \<inter> space M \<in> null_sets M \<and> A \<in> sets N"
  1513   "f \<in> measurable M N \<Longrightarrow> A \<in> null_sets (distr M N f) \<longleftrightarrow> f -` A \<inter> space M \<in> null_sets M \<and> A \<in> sets N"
  1514   by (auto simp add: null_sets_def emeasure_distr)
  1514   by (auto simp add: null_sets_def emeasure_distr)
  1515 
  1515 
  1516 lemma distr_distr:
  1516 lemma%important distr_distr:
  1517   "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)"
  1517   "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)"
  1518   by (auto simp add: emeasure_distr measurable_space
  1518   by (auto simp add: emeasure_distr measurable_space
  1519            intro!: arg_cong[where f="emeasure M"] measure_eqI)
  1519            intro!: arg_cong[where f="emeasure M"] measure_eqI)
  1520 
  1520 
  1521 subsection \<open>Real measure values\<close>
  1521 subsection%unimportant \<open>Real measure values\<close>
  1522 
  1522 
  1523 lemma ring_of_finite_sets: "ring_of_sets (space M) {A\<in>sets M. emeasure M A \<noteq> top}"
  1523 lemma ring_of_finite_sets: "ring_of_sets (space M) {A\<in>sets M. emeasure M A \<noteq> top}"
  1524 proof (rule ring_of_setsI)
  1524 proof (rule ring_of_setsI)
  1525   show "a \<in> {A \<in> sets M. emeasure M A \<noteq> top} \<Longrightarrow> b \<in> {A \<in> sets M. emeasure M A \<noteq> top} \<Longrightarrow>
  1525   show "a \<in> {A \<in> sets M. emeasure M A \<noteq> top} \<Longrightarrow> b \<in> {A \<in> sets M. emeasure M A \<noteq> top} \<Longrightarrow>
  1526     a \<union> b \<in> {A \<in> sets M. emeasure M A \<noteq> top}" for a b
  1526     a \<union> b \<in> {A \<in> sets M. emeasure M A \<noteq> top}" for a b
  1703     using fin A by (auto intro!: Lim_emeasure_decseq)
  1703     using fin A by (auto intro!: Lim_emeasure_decseq)
  1704 qed auto
  1704 qed auto
  1705 
  1705 
  1706 subsection \<open>Set of measurable sets with finite measure\<close>
  1706 subsection \<open>Set of measurable sets with finite measure\<close>
  1707 
  1707 
  1708 definition fmeasurable :: "'a measure \<Rightarrow> 'a set set"
  1708 definition%important fmeasurable :: "'a measure \<Rightarrow> 'a set set"
  1709 where
  1709 where
  1710   "fmeasurable M = {A\<in>sets M. emeasure M A < \<infinity>}"
  1710   "fmeasurable M = {A\<in>sets M. emeasure M A < \<infinity>}"
  1711 
  1711 
  1712 lemma fmeasurableD[dest, measurable_dest]: "A \<in> fmeasurable M \<Longrightarrow> A \<in> sets M"
  1712 lemma fmeasurableD[dest, measurable_dest]: "A \<in> fmeasurable M \<Longrightarrow> A \<in> sets M"
  1713   by (auto simp: fmeasurable_def)
  1713   by (auto simp: fmeasurable_def)
  1970   ultimately show ?thesis by auto
  1970   ultimately show ?thesis by auto
  1971 qed
  1971 qed
  1972 
  1972 
  1973 subsection \<open>Measure spaces with @{term "emeasure M (space M) < \<infinity>"}\<close>
  1973 subsection \<open>Measure spaces with @{term "emeasure M (space M) < \<infinity>"}\<close>
  1974 
  1974 
  1975 locale finite_measure = sigma_finite_measure M for M +
  1975 locale%important finite_measure = sigma_finite_measure M for M +
  1976   assumes finite_emeasure_space: "emeasure M (space M) \<noteq> top"
  1976   assumes finite_emeasure_space: "emeasure M (space M) \<noteq> top"
  1977 
  1977 
  1978 lemma finite_measureI[Pure.intro!]:
  1978 lemma finite_measureI[Pure.intro!]:
  1979   "emeasure M (space M) \<noteq> \<infinity> \<Longrightarrow> finite_measure M"
  1979   "emeasure M (space M) \<noteq> \<infinity> \<Longrightarrow> finite_measure M"
  1980   proof qed (auto intro!: exI[of _ "{space M}"])
  1980   proof qed (auto intro!: exI[of _ "{space M}"])
  2192 next
  2192 next
  2193   show "f x \<le> (\<lambda>s. emeasure (M s) {x \<in> space N. F top x})" for x
  2193   show "f x \<le> (\<lambda>s. emeasure (M s) {x \<in> space N. F top x})" for x
  2194     using bound[of x] sets_eq_imp_space_eq[OF sets] by (simp add: iter)
  2194     using bound[of x] sets_eq_imp_space_eq[OF sets] by (simp add: iter)
  2195 qed (auto simp add: iter le_fun_def INF_apply[abs_def] intro!: meas cont)
  2195 qed (auto simp add: iter le_fun_def INF_apply[abs_def] intro!: meas cont)
  2196 
  2196 
  2197 subsection \<open>Counting space\<close>
  2197 subsection%unimportant \<open>Counting space\<close>
  2198 
  2198 
  2199 lemma strict_monoI_Suc:
  2199 lemma strict_monoI_Suc:
  2200   assumes ord [simp]: "(\<And>n. f n < f (Suc n))" shows "strict_mono f"
  2200   assumes ord [simp]: "(\<And>n. f n < f (Suc n))" shows "strict_mono f"
  2201   unfolding strict_mono_def
  2201   unfolding strict_mono_def
  2202 proof safe
  2202 proof safe
  2341 proof -
  2341 proof -
  2342   interpret finite_measure "count_space A" using A by (rule finite_measure_count_space)
  2342   interpret finite_measure "count_space A" using A by (rule finite_measure_count_space)
  2343   show "sigma_finite_measure (count_space A)" ..
  2343   show "sigma_finite_measure (count_space A)" ..
  2344 qed
  2344 qed
  2345 
  2345 
  2346 subsection \<open>Measure restricted to space\<close>
  2346 subsection%unimportant \<open>Measure restricted to space\<close>
  2347 
  2347 
  2348 lemma emeasure_restrict_space:
  2348 lemma emeasure_restrict_space:
  2349   assumes "\<Omega> \<inter> space M \<in> sets M" "A \<subseteq> \<Omega>"
  2349   assumes "\<Omega> \<inter> space M \<in> sets M" "A \<subseteq> \<Omega>"
  2350   shows "emeasure (restrict_space M \<Omega>) A = emeasure M A"
  2350   shows "emeasure (restrict_space M \<Omega>) A = emeasure M A"
  2351 proof (cases "A \<in> sets M")
  2351 proof (cases "A \<in> sets M")
  2500   also have "emeasure (restrict_space N \<Omega>) (X \<inter> \<Omega>) = emeasure N X"
  2500   also have "emeasure (restrict_space N \<Omega>) (X \<inter> \<Omega>) = emeasure N X"
  2501     using X ae \<Omega> by (auto simp add: emeasure_restrict_space sets_eq intro!: emeasure_eq_AE)
  2501     using X ae \<Omega> by (auto simp add: emeasure_restrict_space sets_eq intro!: emeasure_eq_AE)
  2502   finally show "emeasure M X = emeasure N X" .
  2502   finally show "emeasure M X = emeasure N X" .
  2503 qed fact
  2503 qed fact
  2504 
  2504 
  2505 subsection \<open>Null measure\<close>
  2505 subsection%unimportant \<open>Null measure\<close>
  2506 
  2506 
  2507 definition "null_measure M = sigma (space M) (sets M)"
  2507 definition "null_measure M = sigma (space M) (sets M)"
  2508 
  2508 
  2509 lemma space_null_measure[simp]: "space (null_measure M) = space M"
  2509 lemma space_null_measure[simp]: "space (null_measure M) = space M"
  2510   by (simp add: null_measure_def)
  2510   by (simp add: null_measure_def)
  2523 lemma null_measure_idem [simp]: "null_measure (null_measure M) = null_measure M"
  2523 lemma null_measure_idem [simp]: "null_measure (null_measure M) = null_measure M"
  2524   by(rule measure_eqI) simp_all
  2524   by(rule measure_eqI) simp_all
  2525 
  2525 
  2526 subsection \<open>Scaling a measure\<close>
  2526 subsection \<open>Scaling a measure\<close>
  2527 
  2527 
  2528 definition scale_measure :: "ennreal \<Rightarrow> 'a measure \<Rightarrow> 'a measure"
  2528 definition%important scale_measure :: "ennreal \<Rightarrow> 'a measure \<Rightarrow> 'a measure"
  2529 where
  2529 where
  2530   "scale_measure r M = measure_of (space M) (sets M) (\<lambda>A. r * emeasure M A)"
  2530   "scale_measure r M = measure_of (space M) (sets M) (\<lambda>A. r * emeasure M A)"
  2531 
  2531 
  2532 lemma space_scale_measure: "space (scale_measure r M) = space M"
  2532 lemma space_scale_measure: "space (scale_measure r M) = space M"
  2533   by (simp add: scale_measure_def)
  2533   by (simp add: scale_measure_def)
  2701     then show "emeasure M X \<le> emeasure N X"
  2701     then show "emeasure M X \<le> emeasure N X"
  2702       by (auto simp: d_def M.emeasure_eq_measure N.emeasure_eq_measure)
  2702       by (auto simp: d_def M.emeasure_eq_measure N.emeasure_eq_measure)
  2703   qed auto
  2703   qed auto
  2704 qed
  2704 qed
  2705 
  2705 
  2706 lemma unsigned_Hahn_decomposition:
  2706 lemma%important unsigned_Hahn_decomposition:
  2707   assumes [simp]: "sets N = sets M" and [measurable]: "A \<in> sets M"
  2707   assumes [simp]: "sets N = sets M" and [measurable]: "A \<in> sets M"
  2708     and [simp]: "emeasure M A \<noteq> top" "emeasure N A \<noteq> top"
  2708     and [simp]: "emeasure M A \<noteq> top" "emeasure N A \<noteq> top"
  2709   shows "\<exists>Y\<in>sets M. Y \<subseteq> A \<and> (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> N X \<le> M X) \<and> (\<forall>X\<in>sets M. X \<subseteq> A \<longrightarrow> X \<inter> Y = {} \<longrightarrow> M X \<le> N X)"
  2709   shows "\<exists>Y\<in>sets M. Y \<subseteq> A \<and> (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> N X \<le> M X) \<and> (\<forall>X\<in>sets M. X \<subseteq> A \<longrightarrow> X \<inter> Y = {} \<longrightarrow> M X \<le> N X)"
  2710 proof -
  2710 proof%unimportant -
  2711   have "\<exists>Y\<in>sets (restrict_space M A).
  2711   have "\<exists>Y\<in>sets (restrict_space M A).
  2712     (\<forall>X\<in>sets (restrict_space M A). X \<subseteq> Y \<longrightarrow> (restrict_space N A) X \<le> (restrict_space M A) X) \<and>
  2712     (\<forall>X\<in>sets (restrict_space M A). X \<subseteq> Y \<longrightarrow> (restrict_space N A) X \<le> (restrict_space M A) X) \<and>
  2713     (\<forall>X\<in>sets (restrict_space M A). X \<inter> Y = {} \<longrightarrow> (restrict_space M A) X \<le> (restrict_space N A) X)"
  2713     (\<forall>X\<in>sets (restrict_space M A). X \<inter> Y = {} \<longrightarrow> (restrict_space M A) X \<le> (restrict_space N A) X)"
  2714   proof (rule finite_unsigned_Hahn_decomposition)
  2714   proof (rule finite_unsigned_Hahn_decomposition)
  2715     show "finite_measure (restrict_space M A)" "finite_measure (restrict_space N A)"
  2715     show "finite_measure (restrict_space M A)" "finite_measure (restrict_space N A)"
  2726       by (erule ballE[of _ _ X])  (auto simp add: Int_absorb1 ac_simps)
  2726       by (erule ballE[of _ _ X])  (auto simp add: Int_absorb1 ac_simps)
  2727     apply auto
  2727     apply auto
  2728     done
  2728     done
  2729 qed
  2729 qed
  2730 
  2730 
  2731 text \<open>
  2731 text%important \<open>
  2732   Define a lexicographical order on @{type measure}, in the order space, sets and measure. The parts
  2732   Define a lexicographical order on @{type measure}, in the order space, sets and measure. The parts
  2733   of the lexicographical order are point-wise ordered.
  2733   of the lexicographical order are point-wise ordered.
  2734 \<close>
  2734 \<close>
  2735 
  2735 
  2736 instantiation measure :: (type) order_bot
  2736 instantiation%important measure :: (type) order_bot
  2737 begin
  2737 begin
  2738 
  2738 
  2739 inductive less_eq_measure :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> bool" where
  2739 inductive less_eq_measure :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> bool" where
  2740   "space M \<subset> space N \<Longrightarrow> less_eq_measure M N"
  2740   "space M \<subset> space N \<Longrightarrow> less_eq_measure M N"
  2741 | "space M = space N \<Longrightarrow> sets M \<subset> sets N \<Longrightarrow> less_eq_measure M N"
  2741 | "space M = space N \<Longrightarrow> sets M \<subset> sets N \<Longrightarrow> less_eq_measure M N"
  2744 lemma le_measure_iff:
  2744 lemma le_measure_iff:
  2745   "M \<le> N \<longleftrightarrow> (if space M = space N then
  2745   "M \<le> N \<longleftrightarrow> (if space M = space N then
  2746     if sets M = sets N then emeasure M \<le> emeasure N else sets M \<subseteq> sets N else space M \<subseteq> space N)"
  2746     if sets M = sets N then emeasure M \<le> emeasure N else sets M \<subseteq> sets N else space M \<subseteq> space N)"
  2747   by (auto elim: less_eq_measure.cases intro: less_eq_measure.intros)
  2747   by (auto elim: less_eq_measure.cases intro: less_eq_measure.intros)
  2748 
  2748 
  2749 definition less_measure :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> bool" where
  2749 definition%important less_measure :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> bool" where
  2750   "less_measure M N \<longleftrightarrow> (M \<le> N \<and> \<not> N \<le> M)"
  2750   "less_measure M N \<longleftrightarrow> (M \<le> N \<and> \<not> N \<le> M)"
  2751 
  2751 
  2752 definition bot_measure :: "'a measure" where
  2752 definition%important bot_measure :: "'a measure" where
  2753   "bot_measure = sigma {} {}"
  2753   "bot_measure = sigma {} {}"
  2754 
  2754 
  2755 lemma
  2755 lemma
  2756   shows space_bot[simp]: "space bot = {}"
  2756   shows space_bot[simp]: "space bot = {}"
  2757     and sets_bot[simp]: "sets bot = {{}}"
  2757     and sets_bot[simp]: "sets bot = {{}}"
  2764     by (simp add: le_measure_iff bot_measure_def sigma_sets_empty_eq emeasure_sigma le_fun_def)
  2764     by (simp add: le_measure_iff bot_measure_def sigma_sets_empty_eq emeasure_sigma le_fun_def)
  2765 qed (auto simp: le_measure_iff less_measure_def split: if_split_asm intro: measure_eqI)
  2765 qed (auto simp: le_measure_iff less_measure_def split: if_split_asm intro: measure_eqI)
  2766 
  2766 
  2767 end
  2767 end
  2768 
  2768 
  2769 lemma le_measure: "sets M = sets N \<Longrightarrow> M \<le> N \<longleftrightarrow> (\<forall>A\<in>sets M. emeasure M A \<le> emeasure N A)"
  2769 lemma%important le_measure: "sets M = sets N \<Longrightarrow> M \<le> N \<longleftrightarrow> (\<forall>A\<in>sets M. emeasure M A \<le> emeasure N A)"
       
  2770   apply%unimportant -
  2770   apply (auto simp: le_measure_iff le_fun_def dest: sets_eq_imp_space_eq)
  2771   apply (auto simp: le_measure_iff le_fun_def dest: sets_eq_imp_space_eq)
  2771   subgoal for X
  2772   subgoal for X
  2772     by (cases "X \<in> sets M") (auto simp: emeasure_notin_sets)
  2773     by (cases "X \<in> sets M") (auto simp: emeasure_notin_sets)
  2773   done
  2774   done
  2774 
  2775 
  2775 definition sup_measure' :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> 'a measure"
  2776 definition%important sup_measure' :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> 'a measure"
  2776 where
  2777 where
  2777   "sup_measure' A B = measure_of (space A) (sets A) (\<lambda>X. SUP Y:sets A. emeasure A (X \<inter> Y) + emeasure B (X \<inter> - Y))"
  2778   "sup_measure' A B = measure_of (space A) (sets A) (\<lambda>X. SUP Y:sets A. emeasure A (X \<inter> Y) + emeasure B (X \<inter> - Y))"
  2778 
  2779 
  2779 lemma assumes [simp]: "sets B = sets A"
  2780 lemma assumes [simp]: "sets B = sets A"
  2780   shows space_sup_measure'[simp]: "space (sup_measure' A B) = space A"
  2781   shows space_sup_measure'[simp]: "space (sup_measure' A B) = space A"
  2898       by (subst plus_emeasure) (auto simp: Diff_eq[symmetric])
  2899       by (subst plus_emeasure) (auto simp: Diff_eq[symmetric])
  2899     finally show "emeasure A (X \<inter> Y) + emeasure B (X \<inter> - Y) \<le> emeasure C X" .
  2900     finally show "emeasure A (X \<inter> Y) + emeasure B (X \<inter> - Y) \<le> emeasure C X" .
  2900   qed
  2901   qed
  2901 qed simp_all
  2902 qed simp_all
  2902 
  2903 
  2903 definition sup_lexord :: "'a \<Rightarrow> 'a \<Rightarrow> ('a \<Rightarrow> 'b::order) \<Rightarrow> 'a \<Rightarrow> 'a \<Rightarrow> 'a"
  2904 definition%important sup_lexord :: "'a \<Rightarrow> 'a \<Rightarrow> ('a \<Rightarrow> 'b::order) \<Rightarrow> 'a \<Rightarrow> 'a \<Rightarrow> 'a"
  2904 where
  2905 where
  2905   "sup_lexord A B k s c =
  2906   "sup_lexord A B k s c =
  2906     (if k A = k B then c else if \<not> k A \<le> k B \<and> \<not> k B \<le> k A then s else if k B \<le> k A then A else B)"
  2907     (if k A = k B then c else if \<not> k A \<le> k B \<and> \<not> k B \<le> k A then s else if k B \<le> k A then A else B)"
  2907 
  2908 
  2908 lemma sup_lexord:
  2909 lemma sup_lexord:
  2924 lemma sigma_le_iff: "\<A> \<subseteq> Pow \<Omega> \<Longrightarrow> sigma \<Omega> \<A> \<le> x \<longleftrightarrow> (\<Omega> \<subseteq> space x \<and> (space x = \<Omega> \<longrightarrow> \<A> \<subseteq> sets x))"
  2925 lemma sigma_le_iff: "\<A> \<subseteq> Pow \<Omega> \<Longrightarrow> sigma \<Omega> \<A> \<le> x \<longleftrightarrow> (\<Omega> \<subseteq> space x \<and> (space x = \<Omega> \<longrightarrow> \<A> \<subseteq> sets x))"
  2925   by (cases "\<Omega> = space x")
  2926   by (cases "\<Omega> = space x")
  2926      (simp_all add: eq_commute[of _ "sets x"] le_measure_iff emeasure_sigma le_fun_def
  2927      (simp_all add: eq_commute[of _ "sets x"] le_measure_iff emeasure_sigma le_fun_def
  2927                     sigma_sets_superset_generator sigma_sets_le_sets_iff)
  2928                     sigma_sets_superset_generator sigma_sets_le_sets_iff)
  2928 
  2929 
  2929 instantiation measure :: (type) semilattice_sup
  2930 instantiation%important measure :: (type) semilattice_sup
  2930 begin
  2931 begin
  2931 
  2932 
  2932 definition sup_measure :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> 'a measure"
  2933 definition%important sup_measure :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> 'a measure"
  2933 where
  2934 where
  2934   "sup_measure A B =
  2935   "sup_measure A B =
  2935     sup_lexord A B space (sigma (space A \<union> space B) {})
  2936     sup_lexord A B space (sigma (space A \<union> space B) {})
  2936       (sup_lexord A B sets (sigma (space A) (sets A \<union> sets B)) (sup_measure' A B))"
  2937       (sup_lexord A B sets (sigma (space A) (sets A \<union> sets B)) (sup_measure' A B))"
  2937 
  2938 
  3055     by (metis A(2)[symmetric])
  3056     by (metis A(2)[symmetric])
  3056   then show "P (c {a \<in> A. k a = (\<Union>x\<in>A. k x)})"
  3057   then show "P (c {a \<in> A. k a = (\<Union>x\<in>A. k x)})"
  3057     by (simp add: A(3))
  3058     by (simp add: A(3))
  3058 qed
  3059 qed
  3059 
  3060 
  3060 instantiation measure :: (type) complete_lattice
  3061 instantiation%important measure :: (type) complete_lattice
  3061 begin
  3062 begin
  3062 
  3063 
  3063 interpretation sup_measure: comm_monoid_set sup "bot :: 'a measure"
  3064 interpretation sup_measure: comm_monoid_set sup "bot :: 'a measure"
  3064   by standard (auto intro!: antisym)
  3065   by standard (auto intro!: antisym)
  3065 
  3066 
  3090 
  3091 
  3091 lemma sets_sup_measure_F:
  3092 lemma sets_sup_measure_F:
  3092   "finite I \<Longrightarrow> I \<noteq> {} \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> sets i = sets M) \<Longrightarrow> sets (sup_measure.F id I) = sets M"
  3093   "finite I \<Longrightarrow> I \<noteq> {} \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> sets i = sets M) \<Longrightarrow> sets (sup_measure.F id I) = sets M"
  3093   by (induction I rule: finite_ne_induct) (simp_all add: sets_sup)
  3094   by (induction I rule: finite_ne_induct) (simp_all add: sets_sup)
  3094 
  3095 
  3095 definition Sup_measure' :: "'a measure set \<Rightarrow> 'a measure"
  3096 definition%important Sup_measure' :: "'a measure set \<Rightarrow> 'a measure"
  3096 where
  3097 where
  3097   "Sup_measure' M = measure_of (\<Union>a\<in>M. space a) (\<Union>a\<in>M. sets a)
  3098   "Sup_measure' M = measure_of (\<Union>a\<in>M. space a) (\<Union>a\<in>M. sets a)
  3098     (\<lambda>X. (SUP P:{P. finite P \<and> P \<subseteq> M }. sup_measure.F id P X))"
  3099     (\<lambda>X. (SUP P:{P. finite P \<and> P \<subseteq> M }. sup_measure.F id P X))"
  3099 
  3100 
  3100 lemma space_Sup_measure'2: "space (Sup_measure' M) = (\<Union>m\<in>M. space m)"
  3101 lemma space_Sup_measure'2: "space (Sup_measure' M) = (\<Union>m\<in>M. space m)"
  3161     by (auto simp: positive_def bot_ennreal[symmetric])
  3162     by (auto simp: positive_def bot_ennreal[symmetric])
  3162   show "X \<in> sets (Sup_measure' M)"
  3163   show "X \<in> sets (Sup_measure' M)"
  3163     using assms * by auto
  3164     using assms * by auto
  3164 qed (rule UN_space_closed)
  3165 qed (rule UN_space_closed)
  3165 
  3166 
  3166 definition Sup_measure :: "'a measure set \<Rightarrow> 'a measure"
  3167 definition%important Sup_measure :: "'a measure set \<Rightarrow> 'a measure"
  3167 where
  3168 where
  3168   "Sup_measure = Sup_lexord space (Sup_lexord sets Sup_measure'
  3169   "Sup_measure = Sup_lexord space (Sup_lexord sets Sup_measure'
  3169     (\<lambda>U. sigma (\<Union>u\<in>U. space u) (\<Union>u\<in>U. sets u))) (\<lambda>U. sigma (\<Union>u\<in>U. space u) {})"
  3170     (\<lambda>U. sigma (\<Union>u\<in>U. space u) (\<Union>u\<in>U. sets u))) (\<lambda>U. sigma (\<Union>u\<in>U. space u) {})"
  3170 
  3171 
  3171 definition Inf_measure :: "'a measure set \<Rightarrow> 'a measure"
  3172 definition%important Inf_measure :: "'a measure set \<Rightarrow> 'a measure"
  3172 where
  3173 where
  3173   "Inf_measure A = Sup {x. \<forall>a\<in>A. x \<le> a}"
  3174   "Inf_measure A = Sup {x. \<forall>a\<in>A. x \<le> a}"
  3174 
  3175 
  3175 definition inf_measure :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> 'a measure"
  3176 definition%important inf_measure :: "'a measure \<Rightarrow> 'a measure \<Rightarrow> 'a measure"
  3176 where
  3177 where
  3177   "inf_measure a b = Inf {a, b}"
  3178   "inf_measure a b = Inf {a, b}"
  3178 
  3179 
  3179 definition top_measure :: "'a measure"
  3180 definition%important top_measure :: "'a measure"
  3180 where
  3181 where
  3181   "top_measure = Inf {}"
  3182   "top_measure = Inf {}"
  3182 
  3183 
  3183 instance
  3184 instance
  3184 proof
  3185 proof
  3415     fix j assume "j\<in>A" then show "\<exists>i\<in>{J. J \<noteq> {} \<and> finite J \<and> J \<subseteq> A}. emeasure (M j) X \<le> emeasure (SUPREMUM i M) X"
  3416     fix j assume "j\<in>A" then show "\<exists>i\<in>{J. J \<noteq> {} \<and> finite J \<and> J \<subseteq> A}. emeasure (M j) X \<le> emeasure (SUPREMUM i M) X"
  3416       by (intro bexI[of _ "{j}"]) auto
  3417       by (intro bexI[of _ "{j}"]) auto
  3417   qed
  3418   qed
  3418 qed
  3419 qed
  3419 
  3420 
  3420 subsubsection \<open>Supremum of a set of $\sigma$-algebras\<close>
  3421 subsubsection%unimportant \<open>Supremum of a set of $\sigma$-algebras\<close>
  3421 
  3422 
  3422 lemma space_Sup_eq_UN: "space (Sup M) = (\<Union>x\<in>M. space x)"
  3423 lemma space_Sup_eq_UN: "space (Sup M) = (\<Union>x\<in>M. space x)"
  3423   unfolding Sup_measure_def
  3424   unfolding Sup_measure_def
  3424   apply (intro Sup_lexord[where P="\<lambda>x. space x = _"])
  3425   apply (intro Sup_lexord[where P="\<lambda>x. space x = _"])
  3425   apply (subst space_Sup_measure'2)
  3426   apply (subst space_Sup_measure'2)