# HG changeset patch # User hoelzl # Date 1437662447 -7200 # Node ID a0cfa9050fa851b0e3957f91f56eb3c9224e907d # Parent 8558e4a37b489ba38122b288389ed9722511fea9 Measures form a CCPO diff -r 8558e4a37b48 -r a0cfa9050fa8 src/HOL/Library/Extended_Real.thy --- a/src/HOL/Library/Extended_Real.thy Thu Jul 23 16:39:10 2015 +0200 +++ b/src/HOL/Library/Extended_Real.thy Thu Jul 23 16:40:47 2015 +0200 @@ -3182,6 +3182,77 @@ qed +lemma SUP_ereal_add_directed: + fixes f g :: "'a \ ereal" + assumes nonneg: "\i. i \ I \ 0 \ f i" "\i. i \ I \ 0 \ g i" + assumes directed: "\i j. i \ I \ j \ I \ \k\I. f i + g j \ f k + g k" + shows "(SUP i:I. f i + g i) = (SUP i:I. f i) + (SUP i:I. g i)" +proof cases + assume "I = {}" then show ?thesis + by (simp add: bot_ereal_def) +next + assume "I \ {}" + show ?thesis + proof (rule antisym) + show "(SUP i:I. f i + g i) \ (SUP i:I. f i) + (SUP i:I. g i)" + by (rule SUP_least; intro ereal_add_mono SUP_upper) + next + have "bot < (SUP i:I. g i)" + using \I \ {}\ nonneg(2) by (auto simp: bot_ereal_def less_SUP_iff) + then have "(SUP i:I. f i) + (SUP i:I. g i) = (SUP i:I. f i + (SUP i:I. g i))" + by (intro SUP_ereal_add_left[symmetric] \I \ {}\) auto + also have "\ = (SUP i:I. (SUP j:I. f i + g j))" + using nonneg(1) by (intro SUP_cong refl SUP_ereal_add_right[symmetric] \I \ {}\) auto + also have "\ \ (SUP i:I. f i + g i)" + using directed by (intro SUP_least) (blast intro: SUP_upper2) + finally show "(SUP i:I. f i) + (SUP i:I. g i) \ (SUP i:I. f i + g i)" . + qed +qed + +lemma SUP_ereal_setsum_directed: + fixes f g :: "'a \ 'b \ ereal" + assumes "I \ {}" + assumes directed: "\N i j. N \ A \ i \ I \ j \ I \ \k\I. \n\N. f n i \ f n k \ f n j \ f n k" + assumes nonneg: "\n i. i \ I \ n \ A \ 0 \ f n i" + shows "(SUP i:I. \n\A. f n i) = (\n\A. SUP i:I. f n i)" +proof - + have "N \ A \ (SUP i:I. \n\N. f n i) = (\n\N. SUP i:I. f n i)" for N + proof (induction N rule: infinite_finite_induct) + case (insert n N) + moreover have "(SUP i:I. f n i + (\l\N. f l i)) = (SUP i:I. f n i) + (SUP i:I. \l\N. f l i)" + proof (rule SUP_ereal_add_directed) + fix i assume "i \ I" then show "0 \ f n i" "0 \ (\l\N. f l i)" + using insert by (auto intro!: setsum_nonneg nonneg) + next + fix i j assume "i \ I" "j \ I" + from directed[OF \insert n N \ A\ this] guess k .. + then show "\k\I. f n i + (\l\N. f l j) \ f n k + (\l\N. f l k)" + by (intro bexI[of _ k]) (auto intro!: ereal_add_mono setsum_mono) + qed + ultimately show ?case + by simp + qed (simp_all add: SUP_constant \I \ {}\) + from this[of A] show ?thesis by simp +qed + +lemma suminf_SUP_eq_directed: + fixes f :: "_ \ nat \ ereal" + assumes "I \ {}" + assumes directed: "\N i j. i \ I \ j \ I \ finite N \ \k\I. \n\N. f i n \ f k n \ f j n \ f k n" + assumes nonneg: "\n i. 0 \ f n i" + shows "(\i. SUP n:I. f n i) = (SUP n:I. \i. f n i)" +proof (subst (1 2) suminf_ereal_eq_SUP) + show "\n i. 0 \ f n i" "\i. 0 \ (SUP n:I. f n i)" + using \I \ {}\ nonneg by (auto intro: SUP_upper2) + show "(SUP n. \iiMore Limits\ + lemma convergent_limsup_cl: fixes X :: "nat \ 'a::{complete_linorder,linorder_topology}" shows "convergent X \ limsup X = lim X" diff -r 8558e4a37b48 -r a0cfa9050fa8 src/HOL/Probability/Measure_Space.thy --- a/src/HOL/Probability/Measure_Space.thy Thu Jul 23 16:39:10 2015 +0200 +++ b/src/HOL/Probability/Measure_Space.thy Thu Jul 23 16:40:47 2015 +0200 @@ -2053,5 +2053,174 @@ lemma measure_null_measure[simp]: "measure (null_measure M) X = 0" by (simp add: measure_def) +subsection \Measures form a chain-complete partial order\ + +instantiation measure :: (type) order_bot +begin + +definition bot_measure :: "'a measure" where + "bot_measure = sigma {} {{}}" + +lemma space_bot[simp]: "space bot = {}" + unfolding bot_measure_def by (rule space_measure_of) auto + +lemma sets_bot[simp]: "sets bot = {{}}" + unfolding bot_measure_def by (subst sets_measure_of) auto + +lemma emeasure_bot[simp]: "emeasure bot = (\x. 0)" + unfolding bot_measure_def by (rule emeasure_sigma) + +inductive less_eq_measure :: "'a measure \ 'a measure \ bool" where + "sets N = sets M \ (\A. A \ sets M \ emeasure M A \ emeasure N A) \ less_eq_measure M N" +| "less_eq_measure bot N" + +definition less_measure :: "'a measure \ 'a measure \ bool" where + "less_measure M N \ (M \ N \ \ N \ M)" + +instance +proof (standard, goals) + case 1 then show ?case + unfolding less_measure_def .. +next + case (2 M) then show ?case + by (intro less_eq_measure.intros) auto +next + case (3 M N L) then show ?case + apply (safe elim!: less_eq_measure.cases) + apply (simp_all add: less_eq_measure.intros) + apply (rule less_eq_measure.intros) + apply simp + apply (blast intro: order_trans) [] + unfolding less_eq_measure.simps + apply (rule disjI2) + apply simp + apply (rule measure_eqI) + apply (auto intro!: antisym) + done +next + case (4 M N) then show ?case + apply (safe elim!: less_eq_measure.cases intro!: measure_eqI) + apply simp + apply simp + apply (blast intro: antisym) + apply (simp) + apply (blast intro: antisym) + apply simp + done +qed (rule less_eq_measure.intros) end +lemma le_emeasureD: "M \ N \ emeasure M A \ emeasure N A" + by (cases "A \ sets M") (auto elim!: less_eq_measure.cases simp: emeasure_notin_sets) + +lemma le_sets: "N \ M \ sets N \ sets M" + unfolding less_eq_measure.simps by auto + +instantiation measure :: (type) ccpo +begin + +definition Sup_measure :: "'a measure set \ 'a measure" where + "Sup_measure A = measure_of (SUP a:A. space a) (SUP a:A. sets a) (SUP a:A. emeasure a)" + +lemma + assumes A: "Complete_Partial_Order.chain op \ A" and a: "a \ bot" "a \ A" + shows space_Sup: "space (Sup A) = space a" + and sets_Sup: "sets (Sup A) = sets a" +proof - + have sets: "(SUP a:A. sets a) = sets a" + proof (intro antisym SUP_least) + fix a' show "a' \ A \ sets a' \ sets a" + using a chainD[OF A, of a a'] by (auto elim!: less_eq_measure.cases) + qed (insert \a\A\, auto) + have space: "(SUP a:A. space a) = space a" + proof (intro antisym SUP_least) + fix a' show "a' \ A \ space a' \ space a" + using a chainD[OF A, of a a'] by (intro sets_le_imp_space_le) (auto elim!: less_eq_measure.cases) + qed (insert \a\A\, auto) + show "space (Sup A) = space a" + unfolding Sup_measure_def sets space sets.space_measure_of_eq .. + show "sets (Sup A) = sets a" + unfolding Sup_measure_def sets space sets.sets_measure_of_eq .. +qed + +lemma emeasure_Sup: + assumes A: "Complete_Partial_Order.chain op \ A" "A \ {}" + assumes "X \ sets (Sup A)" + shows "emeasure (Sup A) X = (SUP a:A. emeasure a) X" +proof (rule emeasure_measure_of[OF Sup_measure_def]) + show "countably_additive (sets (Sup A)) (SUP a:A. emeasure a)" + unfolding countably_additive_def + proof safe + fix F :: "nat \ 'a set" assume F: "range F \ sets (Sup A)" "disjoint_family F" + show "(\i. (SUP a:A. emeasure a) (F i)) = SUPREMUM A emeasure (UNION UNIV F)" + unfolding SUP_apply + proof (subst suminf_SUP_eq_directed) + fix N i j assume "i \ A" "j \ A" + with A(1) + show "\k\A. \n\N. emeasure i (F n) \ emeasure k (F n) \ emeasure j (F n) \ emeasure k (F n)" + by (blast elim: chainE dest: le_emeasureD) + next + show "(SUP n:A. \i. emeasure n (F i)) = (SUP y:A. emeasure y (UNION UNIV F))" + proof (intro SUP_cong refl) + fix a assume "a \ A" then show "(\i. emeasure a (F i)) = emeasure a (UNION UNIV F)" + using sets_Sup[OF A(1), of a] F by (cases "a = bot") (auto simp: suminf_emeasure) + qed + qed (insert F \A \ {}\, auto simp: suminf_emeasure intro!: SUP_cong) + qed +qed (insert \A \ {}\ \X \ sets (Sup A)\, auto simp: positive_def dest: sets.sets_into_space intro: SUP_upper2) + +instance +proof + fix A and x :: "'a measure" assume A: "Complete_Partial_Order.chain op \ A" and x: "x \ A" + show "x \ Sup A" + proof cases + assume "x \ bot" + show ?thesis + proof + show "sets (Sup A) = sets x" + using A \x \ bot\ x by (rule sets_Sup) + with x show "\a. a \ sets x \ emeasure x a \ emeasure (Sup A) a" + by (subst emeasure_Sup[OF A]) (auto intro: SUP_upper) + qed + qed simp +next + fix A and x :: "'a measure" assume A: "Complete_Partial_Order.chain op \ A" and x: "\z. z \ A \ z \ x" + consider "A = {}" | "A = {bot}" | x where "x\A" "x \ bot" + by blast + then show "Sup A \ x" + proof cases + assume "A = {}" + moreover have "Sup ({}::'a measure set) = bot" + by (auto simp add: Sup_measure_def sigma_sets_empty_eq intro!: measure_eqI) + ultimately show ?thesis + by simp + next + assume "A = {bot}" + moreover have "Sup ({bot}::'a measure set) = bot" + by (auto simp add: Sup_measure_def sigma_sets_empty_eq intro!: measure_eqI) + ultimately show ?thesis + by simp + next + fix a assume "a \ A" "a \ bot" + then have "a \ x" "x \ bot" "a \ bot" + using x[OF \a \ A\] by (auto simp: bot_unique) + then have "sets x = sets a" + by (auto elim: less_eq_measure.cases) + + show "Sup A \ x" + proof (rule less_eq_measure.intros) + show "sets x = sets (Sup A)" + by (subst sets_Sup[OF A \a \ bot\ \a \ A\]) fact + next + fix X assume "X \ sets (Sup A)" + then have "emeasure (Sup A) X \ (SUP a:A. emeasure a X)" + using \a\A\ by (subst emeasure_Sup[OF A _]) auto + also have "\ \ emeasure x X" + by (intro SUP_least le_emeasureD x) + finally show "emeasure (Sup A) X \ emeasure x X" . + qed + qed +qed +end + +end diff -r 8558e4a37b48 -r a0cfa9050fa8 src/HOL/Probability/Sigma_Algebra.thy --- a/src/HOL/Probability/Sigma_Algebra.thy Thu Jul 23 16:39:10 2015 +0200 +++ b/src/HOL/Probability/Sigma_Algebra.thy Thu Jul 23 16:40:47 2015 +0200 @@ -1642,10 +1642,11 @@ obtains (measure) \ A \ where "x = Abs_measure (\, A, \)" "\a\-A. \ a = 0" "measure_space \ A \" by atomize_elim (cases x, auto) -lemma sets_eq_imp_space_eq: - "sets M = sets M' \ space M = space M'" - using sets.top[of M] sets.top[of M'] sets.space_closed[of M] sets.space_closed[of M'] - by blast +lemma sets_le_imp_space_le: "sets A \ sets B \ space A \ space B" + by (auto dest: sets.sets_into_space) + +lemma sets_eq_imp_space_eq: "sets M = sets M' \ space M = space M'" + by (auto intro!: antisym sets_le_imp_space_le) lemma emeasure_notin_sets: "A \ sets M \ emeasure M A = 0" by (cases M) (auto simp: sets_def emeasure_def Abs_measure_inverse measure_space_def)