src/HOL/Probability/Caratheodory.thy
changeset 49773 16907431e477
parent 49394 52e636ace94e
child 51329 4a3c453f99a1
equal deleted inserted replaced
49772:75660d89c339 49773:16907431e477
     6 header {*Caratheodory Extension Theorem*}
     6 header {*Caratheodory Extension Theorem*}
     7 
     7 
     8 theory Caratheodory
     8 theory Caratheodory
     9   imports Measure_Space
     9   imports Measure_Space
    10 begin
    10 begin
    11 
       
    12 lemma sums_def2:
       
    13   "f sums x \<longleftrightarrow> (\<lambda>n. (\<Sum>i\<le>n. f i)) ----> x"
       
    14   unfolding sums_def
       
    15   apply (subst LIMSEQ_Suc_iff[symmetric])
       
    16   unfolding atLeastLessThanSuc_atLeastAtMost atLeast0AtMost ..
       
    17 
    11 
    18 text {*
    12 text {*
    19   Originally from the Hurd/Coble measure theory development, translated by Lawrence Paulson.
    13   Originally from the Hurd/Coble measure theory development, translated by Lawrence Paulson.
    20 *}
    14 *}
    21 
    15 
   682     by (intro exI[of _ ?infm]) auto
   676     by (intro exI[of _ ?infm]) auto
   683 qed
   677 qed
   684 
   678 
   685 subsubsection {*Alternative instances of caratheodory*}
   679 subsubsection {*Alternative instances of caratheodory*}
   686 
   680 
   687 lemma (in ring_of_sets) countably_additive_iff_continuous_from_below:
       
   688   assumes f: "positive M f" "additive M f"
       
   689   shows "countably_additive M f \<longleftrightarrow>
       
   690     (\<forall>A. range A \<subseteq> M \<longrightarrow> incseq A \<longrightarrow> (\<Union>i. A i) \<in> M \<longrightarrow> (\<lambda>i. f (A i)) ----> f (\<Union>i. A i))"
       
   691   unfolding countably_additive_def
       
   692 proof safe
       
   693   assume count_sum: "\<forall>A. range A \<subseteq> M \<longrightarrow> disjoint_family A \<longrightarrow> UNION UNIV A \<in> M \<longrightarrow> (\<Sum>i. f (A i)) = f (UNION UNIV A)"
       
   694   fix A :: "nat \<Rightarrow> 'a set" assume A: "range A \<subseteq> M" "incseq A" "(\<Union>i. A i) \<in> M"
       
   695   then have dA: "range (disjointed A) \<subseteq> M" by (auto simp: range_disjointed_sets)
       
   696   with count_sum[THEN spec, of "disjointed A"] A(3)
       
   697   have f_UN: "(\<Sum>i. f (disjointed A i)) = f (\<Union>i. A i)"
       
   698     by (auto simp: UN_disjointed_eq disjoint_family_disjointed)
       
   699   moreover have "(\<lambda>n. (\<Sum>i=0..<n. f (disjointed A i))) ----> (\<Sum>i. f (disjointed A i))"
       
   700     using f(1)[unfolded positive_def] dA
       
   701     by (auto intro!: summable_sumr_LIMSEQ_suminf summable_ereal_pos)
       
   702   from LIMSEQ_Suc[OF this]
       
   703   have "(\<lambda>n. (\<Sum>i\<le>n. f (disjointed A i))) ----> (\<Sum>i. f (disjointed A i))"
       
   704     unfolding atLeastLessThanSuc_atLeastAtMost atLeast0AtMost .
       
   705   moreover have "\<And>n. (\<Sum>i\<le>n. f (disjointed A i)) = f (A n)"
       
   706     using disjointed_additive[OF f A(1,2)] .
       
   707   ultimately show "(\<lambda>i. f (A i)) ----> f (\<Union>i. A i)" by simp
       
   708 next
       
   709   assume cont: "\<forall>A. range A \<subseteq> M \<longrightarrow> incseq A \<longrightarrow> (\<Union>i. A i) \<in> M \<longrightarrow> (\<lambda>i. f (A i)) ----> f (\<Union>i. A i)"
       
   710   fix A :: "nat \<Rightarrow> 'a set" assume A: "range A \<subseteq> M" "disjoint_family A" "(\<Union>i. A i) \<in> M"
       
   711   have *: "(\<Union>n. (\<Union>i\<le>n. A i)) = (\<Union>i. A i)" by auto
       
   712   have "(\<lambda>n. f (\<Union>i\<le>n. A i)) ----> f (\<Union>i. A i)"
       
   713   proof (unfold *[symmetric], intro cont[rule_format])
       
   714     show "range (\<lambda>i. \<Union> i\<le>i. A i) \<subseteq> M" "(\<Union>i. \<Union> i\<le>i. A i) \<in> M"
       
   715       using A * by auto
       
   716   qed (force intro!: incseq_SucI)
       
   717   moreover have "\<And>n. f (\<Union>i\<le>n. A i) = (\<Sum>i\<le>n. f (A i))"
       
   718     using A
       
   719     by (intro additive_sum[OF f, of _ A, symmetric])
       
   720        (auto intro: disjoint_family_on_mono[where B=UNIV])
       
   721   ultimately
       
   722   have "(\<lambda>i. f (A i)) sums f (\<Union>i. A i)"
       
   723     unfolding sums_def2 by simp
       
   724   from sums_unique[OF this]
       
   725   show "(\<Sum>i. f (A i)) = f (\<Union>i. A i)" by simp
       
   726 qed
       
   727 
       
   728 lemma (in ring_of_sets) continuous_from_above_iff_empty_continuous:
       
   729   assumes f: "positive M f" "additive M f"
       
   730   shows "(\<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))
       
   731      \<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)"
       
   732 proof safe
       
   733   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))"
       
   734   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>"
       
   735   with cont[THEN spec, of A] show "(\<lambda>i. f (A i)) ----> 0"
       
   736     using `positive M f`[unfolded positive_def] by auto
       
   737 next
       
   738   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"
       
   739   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>"
       
   740 
       
   741   have f_mono: "\<And>a b. a \<in> M \<Longrightarrow> b \<in> M \<Longrightarrow> a \<subseteq> b \<Longrightarrow> f a \<le> f b"
       
   742     using additive_increasing[OF f] unfolding increasing_def by simp
       
   743 
       
   744   have decseq_fA: "decseq (\<lambda>i. f (A i))"
       
   745     using A by (auto simp: decseq_def intro!: f_mono)
       
   746   have decseq: "decseq (\<lambda>i. A i - (\<Inter>i. A i))"
       
   747     using A by (auto simp: decseq_def)
       
   748   then have decseq_f: "decseq (\<lambda>i. f (A i - (\<Inter>i. A i)))"
       
   749     using A unfolding decseq_def by (auto intro!: f_mono Diff)
       
   750   have "f (\<Inter>x. A x) \<le> f (A 0)"
       
   751     using A by (auto intro!: f_mono)
       
   752   then have f_Int_fin: "f (\<Inter>x. A x) \<noteq> \<infinity>"
       
   753     using A by auto
       
   754   { fix i
       
   755     have "f (A i - (\<Inter>i. A i)) \<le> f (A i)" using A by (auto intro!: f_mono)
       
   756     then have "f (A i - (\<Inter>i. A i)) \<noteq> \<infinity>"
       
   757       using A by auto }
       
   758   note f_fin = this
       
   759   have "(\<lambda>i. f (A i - (\<Inter>i. A i))) ----> 0"
       
   760   proof (intro cont[rule_format, OF _ decseq _ f_fin])
       
   761     show "range (\<lambda>i. A i - (\<Inter>i. A i)) \<subseteq> M" "(\<Inter>i. A i - (\<Inter>i. A i)) = {}"
       
   762       using A by auto
       
   763   qed
       
   764   from INF_Lim_ereal[OF decseq_f this]
       
   765   have "(INF n. f (A n - (\<Inter>i. A i))) = 0" .
       
   766   moreover have "(INF n. f (\<Inter>i. A i)) = f (\<Inter>i. A i)"
       
   767     by auto
       
   768   ultimately have "(INF n. f (A n - (\<Inter>i. A i)) + f (\<Inter>i. A i)) = 0 + f (\<Inter>i. A i)"
       
   769     using A(4) f_fin f_Int_fin
       
   770     by (subst INFI_ereal_add) (auto simp: decseq_f)
       
   771   moreover {
       
   772     fix n
       
   773     have "f (A n - (\<Inter>i. A i)) + f (\<Inter>i. A i) = f ((A n - (\<Inter>i. A i)) \<union> (\<Inter>i. A i))"
       
   774       using A by (subst f(2)[THEN additiveD]) auto
       
   775     also have "(A n - (\<Inter>i. A i)) \<union> (\<Inter>i. A i) = A n"
       
   776       by auto
       
   777     finally have "f (A n - (\<Inter>i. A i)) + f (\<Inter>i. A i) = f (A n)" . }
       
   778   ultimately have "(INF n. f (A n)) = f (\<Inter>i. A i)"
       
   779     by simp
       
   780   with LIMSEQ_ereal_INFI[OF decseq_fA]
       
   781   show "(\<lambda>i. f (A i)) ----> f (\<Inter>i. A i)" by simp
       
   782 qed
       
   783 
       
   784 lemma positiveD1: "positive M f \<Longrightarrow> f {} = 0" by (auto simp: positive_def)
       
   785 lemma positiveD2: "positive M f \<Longrightarrow> A \<in> M \<Longrightarrow> 0 \<le> f A" by (auto simp: positive_def)
       
   786 
       
   787 lemma (in ring_of_sets) empty_continuous_imp_continuous_from_below:
       
   788   assumes f: "positive M f" "additive M f" "\<forall>A\<in>M. f A \<noteq> \<infinity>"
       
   789   assumes cont: "\<forall>A. range A \<subseteq> M \<longrightarrow> decseq A \<longrightarrow> (\<Inter>i. A i) = {} \<longrightarrow> (\<lambda>i. f (A i)) ----> 0"
       
   790   assumes A: "range A \<subseteq> M" "incseq A" "(\<Union>i. A i) \<in> M"
       
   791   shows "(\<lambda>i. f (A i)) ----> f (\<Union>i. A i)"
       
   792 proof -
       
   793   have "\<forall>A\<in>M. \<exists>x. f A = ereal x"
       
   794   proof
       
   795     fix A assume "A \<in> M" with f show "\<exists>x. f A = ereal x"
       
   796       unfolding positive_def by (cases "f A") auto
       
   797   qed
       
   798   from bchoice[OF this] guess f' .. note f' = this[rule_format]
       
   799   from A have "(\<lambda>i. f ((\<Union>i. A i) - A i)) ----> 0"
       
   800     by (intro cont[rule_format]) (auto simp: decseq_def incseq_def)
       
   801   moreover
       
   802   { fix i
       
   803     have "f ((\<Union>i. A i) - A i) + f (A i) = f ((\<Union>i. A i) - A i \<union> A i)"
       
   804       using A by (intro f(2)[THEN additiveD, symmetric]) auto
       
   805     also have "(\<Union>i. A i) - A i \<union> A i = (\<Union>i. A i)"
       
   806       by auto
       
   807     finally have "f' (\<Union>i. A i) - f' (A i) = f' ((\<Union>i. A i) - A i)"
       
   808       using A by (subst (asm) (1 2 3) f') auto
       
   809     then have "f ((\<Union>i. A i) - A i) = ereal (f' (\<Union>i. A i) - f' (A i))"
       
   810       using A f' by auto }
       
   811   ultimately have "(\<lambda>i. f' (\<Union>i. A i) - f' (A i)) ----> 0"
       
   812     by (simp add: zero_ereal_def)
       
   813   then have "(\<lambda>i. f' (A i)) ----> f' (\<Union>i. A i)"
       
   814     by (rule LIMSEQ_diff_approach_zero2[OF tendsto_const])
       
   815   then show "(\<lambda>i. f (A i)) ----> f (\<Union>i. A i)"
       
   816     using A by (subst (1 2) f') auto
       
   817 qed
       
   818 
       
   819 lemma (in ring_of_sets) empty_continuous_imp_countably_additive:
       
   820   assumes f: "positive M f" "additive M f" and fin: "\<forall>A\<in>M. f A \<noteq> \<infinity>"
       
   821   assumes cont: "\<And>A. range A \<subseteq> M \<Longrightarrow> decseq A \<Longrightarrow> (\<Inter>i. A i) = {} \<Longrightarrow> (\<lambda>i. f (A i)) ----> 0"
       
   822   shows "countably_additive M f"
       
   823   using countably_additive_iff_continuous_from_below[OF f]
       
   824   using empty_continuous_imp_continuous_from_below[OF f fin] cont
       
   825   by blast
       
   826 
       
   827 lemma (in ring_of_sets) caratheodory_empty_continuous:
   681 lemma (in ring_of_sets) caratheodory_empty_continuous:
   828   assumes f: "positive M f" "additive M f" and fin: "\<And>A. A \<in> M \<Longrightarrow> f A \<noteq> \<infinity>"
   682   assumes f: "positive M f" "additive M f" and fin: "\<And>A. A \<in> M \<Longrightarrow> f A \<noteq> \<infinity>"
   829   assumes cont: "\<And>A. range A \<subseteq> M \<Longrightarrow> decseq A \<Longrightarrow> (\<Inter>i. A i) = {} \<Longrightarrow> (\<lambda>i. f (A i)) ----> 0"
   683   assumes cont: "\<And>A. range A \<subseteq> M \<Longrightarrow> decseq A \<Longrightarrow> (\<Inter>i. A i) = {} \<Longrightarrow> (\<lambda>i. f (A i)) ----> 0"
   830   shows "\<exists>\<mu> :: 'a set \<Rightarrow> ereal. (\<forall>s \<in> M. \<mu> s = f s) \<and> measure_space \<Omega> (sigma_sets \<Omega> M) \<mu>"
   684   shows "\<exists>\<mu> :: 'a set \<Rightarrow> ereal. (\<forall>s \<in> M. \<mu> s = f s) \<and> measure_space \<Omega> (sigma_sets \<Omega> M) \<mu>"
   831 proof (intro caratheodory' empty_continuous_imp_countably_additive f)
   685 proof (intro caratheodory' empty_continuous_imp_countably_additive f)