# HG changeset patch # User hoelzl # Date 1335374787 -7200 # Node ID d31085f07f6042948235fef3e9e9f30006edd822 # Parent dfe747e72fa8739b8a4720aa4bda4caa85e7e717 add Caratheodories theorem for semi-rings of sets diff -r dfe747e72fa8 -r d31085f07f60 src/HOL/Probability/Caratheodory.thy --- a/src/HOL/Probability/Caratheodory.thy Wed Apr 25 19:26:00 2012 +0200 +++ b/src/HOL/Probability/Caratheodory.thy Wed Apr 25 19:26:27 2012 +0200 @@ -655,7 +655,7 @@ by (simp add: measure_space_def positive_def countably_additive_def) blast -theorem (in ring_of_sets) caratheodory: +theorem (in ring_of_sets) caratheodory': assumes posf: "positive M f" and ca: "countably_additive M f" shows "\\ :: 'a set \ ereal. (\s \ M. \ s = f s) \ measure_space \ (sigma_sets \ M) \" proof - @@ -828,8 +828,327 @@ assumes f: "positive M f" "additive M f" and fin: "\A. A \ M \ f A \ \" assumes cont: "\A. range A \ M \ decseq A \ (\i. A i) = {} \ (\i. f (A i)) ----> 0" shows "\\ :: 'a set \ ereal. (\s \ M. \ s = f s) \ measure_space \ (sigma_sets \ M) \" -proof (intro caratheodory empty_continuous_imp_countably_additive f) +proof (intro caratheodory' empty_continuous_imp_countably_additive f) show "\A\M. f A \ \" using fin by auto qed (rule cont) +section {* Volumes *} + +definition volume :: "'a set set \ ('a set \ ereal) \ bool" where + "volume M f \ + (f {} = 0) \ (\a\M. 0 \ f a) \ + (\C\M. disjoint C \ finite C \ \C \ M \ f (\C) = (\c\C. f c))" + +lemma volumeI: + assumes "f {} = 0" + assumes "\a. a \ M \ 0 \ f a" + assumes "\C. C \ M \ disjoint C \ finite C \ \C \ M \ f (\C) = (\c\C. f c)" + shows "volume M f" + using assms by (auto simp: volume_def) + +lemma volume_positive: + "volume M f \ a \ M \ 0 \ f a" + by (auto simp: volume_def) + +lemma volume_empty: + "volume M f \ f {} = 0" + by (auto simp: volume_def) + +lemma volume_finite_additive: + assumes "volume M f" + assumes A: "\i. i \ I \ A i \ M" "disjoint_family_on A I" "finite I" "UNION I A \ M" + shows "f (UNION I A) = (\i\I. f (A i))" +proof - + have "A`I \ M" "disjoint (A`I)" "finite (A`I)" "\A`I \ M" + using A unfolding SUP_def by (auto simp: disjoint_family_on_disjoint_image) + with `volume M f` have "f (\A`I) = (\a\A`I. f a)" + unfolding volume_def by blast + also have "\ = (\i\I. f (A i))" + proof (subst setsum_reindex_nonzero) + fix i j assume "i \ I" "j \ I" "i \ j" "A i = A j" + with `disjoint_family_on A I` have "A i = {}" + by (auto simp: disjoint_family_on_def) + then show "f (A i) = 0" + using volume_empty[OF `volume M f`] by simp + qed (auto intro: `finite I`) + finally show "f (UNION I A) = (\i\I. f (A i))" + by simp +qed + +lemma (in ring_of_sets) volume_additiveI: + assumes pos: "\a. a \ M \ 0 \ \ a" + assumes [simp]: "\ {} = 0" + assumes add: "\a b. a \ M \ b \ M \ a \ b = {} \ \ (a \ b) = \ a + \ b" + shows "volume M \" +proof (unfold volume_def, safe) + fix C assume "finite C" "C \ M" "disjoint C" + then show "\ (\C) = setsum \ C" + proof (induct C) + case (insert c C) + from insert(1,2,4,5) have "\ (\insert c C) = \ c + \ (\C)" + by (auto intro!: add simp: disjoint_def) + with insert show ?case + by (simp add: disjoint_def) + qed simp +qed fact+ + +lemma (in semiring_of_sets) extend_volume: + assumes "volume M \" + shows "\\'. volume generated_ring \' \ (\a\M. \' a = \ a)" +proof - + let ?R = generated_ring + have "\a\?R. \m. \C\M. a = \C \ finite C \ disjoint C \ m = (\c\C. \ c)" + by (auto simp: generated_ring_def) + from bchoice[OF this] guess \' .. note \'_spec = this + + { fix C assume C: "C \ M" "finite C" "disjoint C" + fix D assume D: "D \ M" "finite D" "disjoint D" + assume "\C = \D" + have "(\d\D. \ d) = (\d\D. \c\C. \ (c \ d))" + proof (intro setsum_cong refl) + fix d assume "d \ D" + have Un_eq_d: "(\c\C. c \ d) = d" + using `d \ D` `\C = \D` by auto + moreover have "\ (\c\C. c \ d) = (\c\C. \ (c \ d))" + proof (rule volume_finite_additive) + { fix c assume "c \ C" then show "c \ d \ M" + using C D `d \ D` by auto } + show "(\a\C. a \ d) \ M" + unfolding Un_eq_d using `d \ D` D by auto + show "disjoint_family_on (\a. a \ d) C" + using `disjoint C` by (auto simp: disjoint_family_on_def disjoint_def) + qed fact+ + ultimately show "\ d = (\c\C. \ (c \ d))" by simp + qed } + note split_sum = this + + { fix C assume C: "C \ M" "finite C" "disjoint C" + fix D assume D: "D \ M" "finite D" "disjoint D" + assume "\C = \D" + with split_sum[OF C D] split_sum[OF D C] + have "(\d\D. \ d) = (\c\C. \ c)" + by (simp, subst setsum_commute, simp add: ac_simps) } + note sum_eq = this + + { fix C assume C: "C \ M" "finite C" "disjoint C" + then have "\C \ ?R" by (auto simp: generated_ring_def) + with \'_spec[THEN bspec, of "\C"] + obtain D where + D: "D \ M" "finite D" "disjoint D" "\C = \D" and "\' (\C) = (\d\D. \ d)" + by blast + with sum_eq[OF C D] have "\' (\C) = (\c\C. \ c)" by simp } + note \' = this + + show ?thesis + proof (intro exI conjI ring_of_sets.volume_additiveI[OF generating_ring] ballI) + fix a assume "a \ M" with \'[of "{a}"] show "\' a = \ a" + by (simp add: disjoint_def) + next + fix a assume "a \ ?R" then guess Ca .. note Ca = this + with \'[of Ca] `volume M \`[THEN volume_positive] + show "0 \ \' a" + by (auto intro!: setsum_nonneg) + next + show "\' {} = 0" using \'[of "{}"] by auto + next + fix a assume "a \ ?R" then guess Ca .. note Ca = this + fix b assume "b \ ?R" then guess Cb .. note Cb = this + assume "a \ b = {}" + with Ca Cb have "Ca \ Cb \ {{}}" by auto + then have C_Int_cases: "Ca \ Cb = {{}} \ Ca \ Cb = {}" by auto + + from `a \ b = {}` have "\' (\ (Ca \ Cb)) = (\c\Ca \ Cb. \ c)" + using Ca Cb by (intro \') (auto intro!: disjoint_union) + also have "\ = (\c\Ca \ Cb. \ c) + (\c\Ca \ Cb. \ c)" + using C_Int_cases volume_empty[OF `volume M \`] by (elim disjE) simp_all + also have "\ = (\c\Ca. \ c) + (\c\Cb. \ c)" + using Ca Cb by (simp add: setsum_Un_Int) + also have "\ = \' a + \' b" + using Ca Cb by (simp add: \') + finally show "\' (a \ b) = \' a + \' b" + using Ca Cb by simp + qed +qed + +section {* Caratheodory on semirings *} + +theorem (in semiring_of_sets) caratheodory: + assumes pos: "positive M \" and ca: "countably_additive M \" + shows "\\' :: 'a set \ ereal. (\s \ M. \' s = \ s) \ measure_space \ (sigma_sets \ M) \'" +proof - + have "volume M \" + proof (rule volumeI) + { fix a assume "a \ M" then show "0 \ \ a" + using pos unfolding positive_def by auto } + note p = this + + fix C assume sets_C: "C \ M" "\C \ M" and "disjoint C" "finite C" + have "\F'. bij_betw F' {.. j" + with F' have "F' i \ C" "F' j \ C" "F' i \ F' j" + unfolding inj_on_def by auto + with `disjoint C`[THEN disjointD] + have "F' i \ F' j = {}" + by auto } + note F'_disj = this + def F \ "\i. if i < card C then F' i else {}" + then have "disjoint_family F" + using F'_disj by (auto simp: disjoint_family_on_def) + moreover from F' have "(\i. F i) = \C" + by (auto simp: F_def set_eq_iff split: split_if_asm) + moreover have sets_F: "\i. F i \ M" + using F' sets_C by (auto simp: F_def) + moreover note sets_C + ultimately have "\ (\C) = (\i. \ (F i))" + using ca[unfolded countably_additive_def, THEN spec, of F] by auto + also have "\ = (\i (F' i))" + proof - + have "(\i. if i \ {..< card C} then \ (F' i) else 0) sums (\i (F' i))" + by (rule sums_If_finite_set) auto + also have "(\i. if i \ {..< card C} then \ (F' i) else 0) = (\i. \ (F i))" + using pos by (auto simp: positive_def F_def) + finally show "(\i. \ (F i)) = (\i (F' i))" + by (simp add: sums_iff) + qed + also have "\ = (\c\C. \ c)" + using F'(2) by (subst (2) F') (simp add: setsum_reindex) + finally show "\ (\C) = (\c\C. \ c)" . + next + show "\ {} = 0" + using `positive M \` by (rule positiveD1) + qed + from extend_volume[OF this] obtain \_r where + V: "volume generated_ring \_r" "\a. a \ M \ \ a = \_r a" + by auto + + interpret G: ring_of_sets \ generated_ring + by (rule generating_ring) + + have pos: "positive generated_ring \_r" + using V unfolding positive_def by (auto simp: positive_def intro!: volume_positive volume_empty) + + have "countably_additive generated_ring \_r" + proof (rule countably_additiveI) + fix A' :: "nat \ 'a set" assume A': "range A' \ generated_ring" "disjoint_family A'" + and Un_A: "(\i. A' i) \ generated_ring" + + from generated_ringE[OF Un_A] guess C' . note C' = this + + { fix c assume "c \ C'" + moreover def A \ "\i. A' i \ c" + ultimately have A: "range A \ generated_ring" "disjoint_family A" + and Un_A: "(\i. A i) \ generated_ring" + using A' C' + by (auto intro!: G.Int G.finite_Union intro: generated_ringI_Basic simp: disjoint_family_on_def) + from A C' `c \ C'` have UN_eq: "(\i. A i) = c" + by (auto simp: A_def) + + have "\i::nat. \f::nat \ 'a set. \_r (A i) = (\j. \_r (f j)) \ disjoint_family f \ \range f = A i \ (\j. f j \ M)" + (is "\i. ?P i") + proof + fix i + from A have Ai: "A i \ generated_ring" by auto + from generated_ringE[OF this] guess C . note C = this + + have "\F'. bij_betw F' {.. "\i. if i < card C then F i else {}" + then have f: "bij_betw f {..< card C} C" + by (intro bij_betw_cong[THEN iffD1, OF _ F]) auto + with C have "\j. f j \ M" + by (auto simp: Pi_iff f_def dest!: bij_betw_imp_funcset) + moreover + from f C have d_f: "disjoint_family_on f {.. xrange f = A i" + using f C Ai unfolding bij_betw_def by (auto simp: f_def) + moreover + { have "(\j. \_r (f j)) = (\j. if j \ {..< card C} then \_r (f j) else 0)" + using volume_empty[OF V(1)] by (auto intro!: arg_cong[where f=suminf] simp: f_def) + also have "\ = (\j_r (f j))" + by (rule sums_If_finite_set[THEN sums_unique, symmetric]) simp + also have "\ = \_r (A i)" + using C f[THEN bij_betw_imp_funcset] unfolding Ai_eq + by (intro volume_finite_additive[OF V(1) _ d_f, symmetric]) + (auto simp: Pi_iff Ai_eq intro: generated_ringI_Basic) + finally have "\_r (A i) = (\j. \_r (f j))" .. } + ultimately show "?P i" + by blast + qed + from choice[OF this] guess f .. note f = this + then have UN_f_eq: "(\i. split f (prod_decode i)) = (\i. A i)" + unfolding UN_extend_simps surj_prod_decode by (auto simp: set_eq_iff) + + have d: "disjoint_family (\i. split f (prod_decode i))" + unfolding disjoint_family_on_def + proof (intro ballI impI) + fix m n :: nat assume "m \ n" + then have neq: "prod_decode m \ prod_decode n" + using inj_prod_decode[of UNIV] by (auto simp: inj_on_def) + show "split f (prod_decode m) \ split f (prod_decode n) = {}" + proof cases + assume "fst (prod_decode m) = fst (prod_decode n)" + then show ?thesis + using neq f by (fastforce simp: disjoint_family_on_def) + next + assume neq: "fst (prod_decode m) \ fst (prod_decode n)" + have "split f (prod_decode m) \ A (fst (prod_decode m))" + "split f (prod_decode n) \ A (fst (prod_decode n))" + using f[THEN spec, of "fst (prod_decode m)"] + using f[THEN spec, of "fst (prod_decode n)"] + by (auto simp: set_eq_iff) + with f A neq show ?thesis + by (fastforce simp: disjoint_family_on_def subset_eq set_eq_iff) + qed + qed + from f have "(\n. \_r (A n)) = (\n. \_r (split f (prod_decode n)))" + by (intro suminf_ereal_2dimen[symmetric] positiveD2[OF pos] generated_ringI_Basic) + (auto split: prod.split) + also have "\ = (\n. \ (split f (prod_decode n)))" + using f V(2) by (auto intro!: arg_cong[where f=suminf] split: prod.split) + also have "\ = \ (\i. split f (prod_decode i))" + using f `c \ C'` C' + by (intro ca[unfolded countably_additive_def, rule_format]) + (auto split: prod.split simp: UN_f_eq d UN_eq) + finally have "(\n. \_r (A' n \ c)) = \ c" + using UN_f_eq UN_eq by (simp add: A_def) } + note eq = this + + have "(\n. \_r (A' n)) = (\n. \c\C'. \_r (A' n \ c))" + using C' A' find_theorems "\ _ ` _" + by (subst volume_finite_additive[symmetric, OF V(1)]) + (auto simp: disjoint_def disjoint_family_on_def Union_image_eq[symmetric] simp del: Union_image_eq + intro!: G.Int G.finite_Union arg_cong[where f="\X. suminf (\i. \_r (X i))"] ext + intro: generated_ringI_Basic) + also have "\ = (\c\C'. \n. \_r (A' n \ c))" + using C' A' + by (intro suminf_setsum_ereal positiveD2[OF pos] G.Int G.finite_Union) + (auto intro: generated_ringI_Basic) + also have "\ = (\c\C'. \_r c)" + using eq V C' by (auto intro!: setsum_cong) + also have "\ = \_r (\C')" + using C' Un_A + by (subst volume_finite_additive[symmetric, OF V(1)]) + (auto simp: disjoint_family_on_def disjoint_def Union_image_eq[symmetric] simp del: Union_image_eq + intro: generated_ringI_Basic) + finally show "(\n. \_r (A' n)) = \_r (\i. A' i)" + using C' by simp + qed + from G.caratheodory'[OF `positive generated_ring \_r` `countably_additive generated_ring \_r`] + guess \' .. + with V show ?thesis + unfolding sigma_sets_generated_ring_eq + by (intro exI[of _ \']) (auto intro: generated_ringI_Basic) +qed + end diff -r dfe747e72fa8 -r d31085f07f60 src/HOL/Probability/Infinite_Product_Measure.thy --- a/src/HOL/Probability/Infinite_Product_Measure.thy Wed Apr 25 19:26:00 2012 +0200 +++ b/src/HOL/Probability/Infinite_Product_Measure.thy Wed Apr 25 19:26:27 2012 +0200 @@ -8,21 +8,6 @@ imports Probability_Measure Caratheodory begin -lemma sigma_sets_mono: assumes "A \ sigma_sets X B" shows "sigma_sets X A \ sigma_sets X B" -proof - fix x assume "x \ sigma_sets X A" then show "x \ sigma_sets X B" - by induct (insert `A \ sigma_sets X B`, auto intro: sigma_sets.intros) -qed - -lemma sigma_sets_mono': assumes "A \ B" shows "sigma_sets X A \ sigma_sets X B" -proof - fix x assume "x \ sigma_sets X A" then show "x \ sigma_sets X B" - by induct (insert `A \ B`, auto intro: sigma_sets.intros) -qed - -lemma sigma_sets_superset_generator: "A \ sigma_sets X A" - by (auto intro: sigma_sets.Basic) - lemma (in product_sigma_finite) assumes IJ: "I \ J = {}" "finite I" "finite J" and A: "A \ sets (Pi\<^isub>M (I \ J) M)" shows emeasure_fold_integral: @@ -187,7 +172,8 @@ lemma (in product_prob_space) algebra_generator: assumes "I \ {}" shows "algebra (\\<^isub>E i\I. space (M i)) generator" (is "algebra ?\ ?G") -proof + unfolding algebra_def algebra_axioms_def ring_of_sets_iff +proof (intro conjI ballI) let ?G = generator show "?G \ Pow ?\" by (auto simp: generator_def prod_emb_def) diff -r dfe747e72fa8 -r d31085f07f60 src/HOL/Probability/Measure_Space.thy --- a/src/HOL/Probability/Measure_Space.thy Wed Apr 25 19:26:00 2012 +0200 +++ b/src/HOL/Probability/Measure_Space.thy Wed Apr 25 19:26:27 2012 +0200 @@ -636,7 +636,7 @@ unfolding null_sets_def by simp interpretation null_sets: ring_of_sets "space M" "null_sets M" for M -proof +proof (rule ring_of_setsI) show "null_sets M \ Pow (space M)" using sets_into_space by auto show "{} \ null_sets M" diff -r dfe747e72fa8 -r d31085f07f60 src/HOL/Probability/Sigma_Algebra.thy --- a/src/HOL/Probability/Sigma_Algebra.thy Wed Apr 25 19:26:00 2012 +0200 +++ b/src/HOL/Probability/Sigma_Algebra.thy Wed Apr 25 19:26:27 2012 +0200 @@ -24,7 +24,7 @@ subsets of the universe. A sigma algebra is such a set that has three very natural and desirable properties. *} -subsection {* Algebras *} +subsection {* Families of sets *} locale subset_class = fixes \ :: "'a set" and M :: "'a set set" @@ -33,20 +33,85 @@ lemma (in subset_class) sets_into_space: "x \ M \ x \ \" by (metis PowD contra_subsetD space_closed) -locale ring_of_sets = subset_class + - assumes empty_sets [iff]: "{} \ M" - and Diff [intro]: "\a b. a \ M \ b \ M \ a - b \ M" - and Un [intro]: "\a b. a \ M \ b \ M \ a \ b \ M" +subsection {* Semiring of sets *} + +subsubsection {* Disjoint sets *} + +definition "disjoint A \ (\a\A. \b\A. a \ b \ a \ b = {})" + +lemma disjointI: + "(\a b. a \ A \ b \ A \ a \ b \ a \ b = {}) \ disjoint A" + unfolding disjoint_def by auto + +lemma disjointD: + "disjoint A \ a \ A \ b \ A \ a \ b \ a \ b = {}" + unfolding disjoint_def by auto + +lemma disjoint_empty[iff]: "disjoint {}" + by (auto simp: disjoint_def) -lemma (in ring_of_sets) Int [intro]: - assumes a: "a \ M" and b: "b \ M" shows "a \ b \ M" +lemma disjoint_union: + assumes C: "disjoint C" and B: "disjoint B" and disj: "\C \ \B = {}" + shows "disjoint (C \ B)" +proof (rule disjointI) + fix c d assume sets: "c \ C \ B" "d \ C \ B" and "c \ d" + show "c \ d = {}" + proof cases + assume "(c \ C \ d \ C) \ (c \ B \ d \ B)" + then show ?thesis + proof + assume "c \ C \ d \ C" with `c \ d` C show "c \ d = {}" + by (auto simp: disjoint_def) + next + assume "c \ B \ d \ B" with `c \ d` B show "c \ d = {}" + by (auto simp: disjoint_def) + qed + next + assume "\ ((c \ C \ d \ C) \ (c \ B \ d \ B))" + with sets have "(c \ \C \ d \ \B) \ (c \ \B \ d \ \C)" + by auto + with disj show "c \ d = {}" by auto + qed +qed + +locale semiring_of_sets = subset_class + + assumes empty_sets[iff]: "{} \ M" + assumes Int[intro]: "\a b. a \ M \ b \ M \ a \ b \ M" + assumes Diff_cover: + "\a b. a \ M \ b \ M \ \C\M. finite C \ disjoint C \ a - b = \C" + +lemma (in semiring_of_sets) finite_INT[intro]: + assumes "finite I" "I \ {}" "\i. i \ I \ A i \ M" + shows "(\i\I. A i) \ M" + using assms by (induct rule: finite_ne_induct) auto + +lemma (in semiring_of_sets) Int_space_eq1 [simp]: "x \ M \ \ \ x = x" + by (metis Int_absorb1 sets_into_space) + +lemma (in semiring_of_sets) Int_space_eq2 [simp]: "x \ M \ x \ \ = x" + by (metis Int_absorb2 sets_into_space) + +lemma (in semiring_of_sets) sets_Collect_conj: + assumes "{x\\. P x} \ M" "{x\\. Q x} \ M" + shows "{x\\. Q x \ P x} \ M" proof - - have "a \ b = a - (a - b)" + have "{x\\. Q x \ P x} = {x\\. Q x} \ {x\\. P x}" by auto - then show "a \ b \ M" - using a b by auto + with assms show ?thesis by auto qed +lemma (in semiring_of_sets) sets_Collect_finite_All: + assumes "\i. i \ S \ {x\\. P i x} \ M" "finite S" "S \ {}" + shows "{x\\. \i\S. P i x} \ M" +proof - + have "{x\\. \i\S. P i x} = (\i\S. {x\\. P i x})" + using `S \ {}` by auto + with assms show ?thesis by auto +qed + +locale ring_of_sets = semiring_of_sets + + assumes Un [intro]: "\a b. a \ M \ b \ M \ a \ b \ M" + lemma (in ring_of_sets) finite_Union [intro]: "finite X \ X \ M \ Union X \ M" by (induct set: finite) (auto simp add: Un) @@ -56,10 +121,32 @@ shows "(\i\I. A i) \ M" using assms by induct auto -lemma (in ring_of_sets) finite_INT[intro]: - assumes "finite I" "I \ {}" "\i. i \ I \ A i \ M" - shows "(\i\I. A i) \ M" - using assms by (induct rule: finite_ne_induct) auto +lemma (in ring_of_sets) Diff [intro]: + assumes "a \ M" "b \ M" shows "a - b \ M" + using Diff_cover[OF assms] by auto + +lemma ring_of_setsI: + assumes space_closed: "M \ Pow \" + assumes empty_sets[iff]: "{} \ M" + assumes Un[intro]: "\a b. a \ M \ b \ M \ a \ b \ M" + assumes Diff[intro]: "\a b. a \ M \ b \ M \ a - b \ M" + shows "ring_of_sets \ M" +proof + fix a b assume ab: "a \ M" "b \ M" + from ab show "\C\M. finite C \ disjoint C \ a - b = \C" + by (intro exI[of _ "{a - b}"]) (auto simp: disjoint_def) + have "a \ b = a - (a - b)" by auto + also have "\ \ M" using ab by auto + finally show "a \ b \ M" . +qed fact+ + +lemma ring_of_sets_iff: "ring_of_sets \ M \ M \ Pow \ \ {} \ M \ (\a\M. \b\M. a \ b \ M) \ (\a\M. \b\M. a - b \ M)" +proof + assume "ring_of_sets \ M" + then interpret ring_of_sets \ M . + show "M \ Pow \ \ {} \ M \ (\a\M. \b\M. a \ b \ M) \ (\a\M. \b\M. a - b \ M)" + using space_closed by auto +qed (auto intro!: ring_of_setsI) lemma (in ring_of_sets) insert_in_sets: assumes "{x} \ M" "A \ M" shows "insert x A \ M" @@ -68,21 +155,6 @@ thus ?thesis by auto qed -lemma (in ring_of_sets) Int_space_eq1 [simp]: "x \ M \ \ \ x = x" - by (metis Int_absorb1 sets_into_space) - -lemma (in ring_of_sets) Int_space_eq2 [simp]: "x \ M \ x \ \ = x" - by (metis Int_absorb2 sets_into_space) - -lemma (in ring_of_sets) sets_Collect_conj: - assumes "{x\\. P x} \ M" "{x\\. Q x} \ M" - shows "{x\\. Q x \ P x} \ M" -proof - - have "{x\\. Q x \ P x} = {x\\. Q x} \ {x\\. P x}" - by auto - with assms show ?thesis by auto -qed - lemma (in ring_of_sets) sets_Collect_disj: assumes "{x\\. P x} \ M" "{x\\. Q x} \ M" shows "{x\\. Q x \ P x} \ M" @@ -92,15 +164,6 @@ with assms show ?thesis by auto qed -lemma (in ring_of_sets) sets_Collect_finite_All: - assumes "\i. i \ S \ {x\\. P i x} \ M" "finite S" "S \ {}" - shows "{x\\. \i\S. P i x} \ M" -proof - - have "{x\\. \i\S. P i x} = (\i\S. {x\\. P i x})" - using `S \ {}` by auto - with assms show ?thesis by auto -qed - lemma (in ring_of_sets) sets_Collect_finite_Ex: assumes "\i. i \ S \ {x\\. P i x} \ M" "finite S" shows "{x\\. \i\S. P i x} \ M" @@ -129,9 +192,10 @@ show ?Un using sets_into_space by auto next assume ?Un - show "algebra \ M" - proof - show \: "M \ Pow \" "{} \ M" "\ \ M" + then have "\ \ M" by auto + interpret ring_of_sets \ M + proof (rule ring_of_setsI) + show \: "M \ Pow \" "{} \ M" using `?Un` by auto fix a b assume a: "a \ M" and b: "b \ M" then show "a \ b \ M" using `?Un` by auto @@ -140,6 +204,7 @@ then show "a - b \ M" using a b `?Un` by auto qed + show "algebra \ M" proof qed fact qed lemma algebra_iff_Int: @@ -184,9 +249,8 @@ by (cases P) auto lemma algebra_single_set: - assumes "X \ S" - shows "algebra S { {}, X, S - X, S }" - by default (insert `X \ S`, auto) + "X \ S \ algebra S { {}, X, S - X, S }" + by (auto simp: algebra_iff_Int) section {* Restricted algebras *} @@ -195,7 +259,7 @@ lemma (in algebra) restricted_algebra: assumes "A \ M" shows "algebra A (restricted_space A)" - using assms by unfold_locales auto + using assms by (auto simp: algebra_iff_Int) subsection {* Sigma Algebras *} @@ -261,19 +325,19 @@ qed lemma ring_of_sets_Pow: "ring_of_sets sp (Pow sp)" - by default auto + by (auto simp: ring_of_sets_iff) lemma algebra_Pow: "algebra sp (Pow sp)" - by default auto - -lemma sigma_algebra_Pow: "sigma_algebra sp (Pow sp)" - by default auto + by (auto simp: algebra_iff_Un) lemma sigma_algebra_iff: "sigma_algebra \ M \ algebra \ M \ (\A. range A \ M \ (\i::nat. A i) \ M)" by (simp add: sigma_algebra_def sigma_algebra_axioms_def) +lemma sigma_algebra_Pow: "sigma_algebra sp (Pow sp)" + by (auto simp: sigma_algebra_iff algebra_iff_Int) + lemma (in sigma_algebra) sets_Collect_countable_All: assumes "\i. {x\\. P i x} \ M" shows "{x\\. \i::'i::countable. P i x} \ M" @@ -452,6 +516,21 @@ by induct (insert `A \ B`, auto intro: sigma_sets.intros(2-)) qed +lemma sigma_sets_mono: assumes "A \ sigma_sets X B" shows "sigma_sets X A \ sigma_sets X B" +proof + fix x assume "x \ sigma_sets X A" then show "x \ sigma_sets X B" + by induct (insert `A \ sigma_sets X B`, auto intro: sigma_sets.intros(2-)) +qed + +lemma sigma_sets_mono': assumes "A \ B" shows "sigma_sets X A \ sigma_sets X B" +proof + fix x assume "x \ sigma_sets X A" then show "x \ sigma_sets X B" + by induct (insert `A \ B`, auto intro: sigma_sets.intros(2-)) +qed + +lemma sigma_sets_superset_generator: "A \ sigma_sets X A" + by (auto intro: sigma_sets.Basic) + lemma (in sigma_algebra) restriction_in_sets: fixes A :: "nat \ 'a set" assumes "S \ M" @@ -762,6 +841,150 @@ thus "(\i::nat. A i) \ M" by (simp add: UN_disjointed_eq) qed +lemma disjoint_family_on_disjoint_image: + "disjoint_family_on A I \ disjoint (A ` I)" + unfolding disjoint_family_on_def disjoint_def by force + +lemma disjoint_image_disjoint_family_on: + assumes d: "disjoint (A ` I)" and i: "inj_on A I" + shows "disjoint_family_on A I" + unfolding disjoint_family_on_def +proof (intro ballI impI) + fix n m assume nm: "m \ I" "n \ I" and "n \ m" + with i[THEN inj_onD, of n m] show "A n \ A m = {}" + by (intro disjointD[OF d]) auto +qed + +section {* Ring generated by a semiring *} + +definition (in semiring_of_sets) + "generated_ring = { \C | C. C \ M \ finite C \ disjoint C }" + +lemma (in semiring_of_sets) generated_ringE[elim?]: + assumes "a \ generated_ring" + obtains C where "finite C" "disjoint C" "C \ M" "a = \C" + using assms unfolding generated_ring_def by auto + +lemma (in semiring_of_sets) generated_ringI[intro?]: + assumes "finite C" "disjoint C" "C \ M" "a = \C" + shows "a \ generated_ring" + using assms unfolding generated_ring_def by auto + +lemma (in semiring_of_sets) generated_ringI_Basic: + "A \ M \ A \ generated_ring" + by (rule generated_ringI[of "{A}"]) (auto simp: disjoint_def) + +lemma (in semiring_of_sets) generated_ring_disjoint_Un[intro]: + assumes a: "a \ generated_ring" and b: "b \ generated_ring" + and "a \ b = {}" + shows "a \ b \ generated_ring" +proof - + from a guess Ca .. note Ca = this + from b guess Cb .. note Cb = this + show ?thesis + proof + show "disjoint (Ca \ Cb)" + using `a \ b = {}` Ca Cb by (auto intro!: disjoint_union) + qed (insert Ca Cb, auto) +qed + +lemma (in semiring_of_sets) generated_ring_empty: "{} \ generated_ring" + by (auto simp: generated_ring_def disjoint_def) + +lemma (in semiring_of_sets) generated_ring_disjoint_Union: + assumes "finite A" shows "A \ generated_ring \ disjoint A \ \A \ generated_ring" + using assms by (induct A) (auto simp: disjoint_def intro!: generated_ring_disjoint_Un generated_ring_empty) + +lemma (in semiring_of_sets) generated_ring_disjoint_UNION: + "finite I \ disjoint (A ` I) \ (\i. i \ I \ A i \ generated_ring) \ UNION I A \ generated_ring" + unfolding SUP_def by (intro generated_ring_disjoint_Union) auto + +lemma (in semiring_of_sets) generated_ring_Int: + assumes a: "a \ generated_ring" and b: "b \ generated_ring" + shows "a \ b \ generated_ring" +proof - + from a guess Ca .. note Ca = this + from b guess Cb .. note Cb = this + def C \ "(\(a,b). a \ b)` (Ca\Cb)" + show ?thesis + proof + show "disjoint C" + proof (simp add: disjoint_def C_def, intro ballI impI) + fix a1 b1 a2 b2 assume sets: "a1 \ Ca" "b1 \ Cb" "a2 \ Ca" "b2 \ Cb" + assume "a1 \ b1 \ a2 \ b2" + then have "a1 \ a2 \ b1 \ b2" by auto + then show "(a1 \ b1) \ (a2 \ b2) = {}" + proof + assume "a1 \ a2" + with sets Ca have "a1 \ a2 = {}" + by (auto simp: disjoint_def) + then show ?thesis by auto + next + assume "b1 \ b2" + with sets Cb have "b1 \ b2 = {}" + by (auto simp: disjoint_def) + then show ?thesis by auto + qed + qed + qed (insert Ca Cb, auto simp: C_def) +qed + +lemma (in semiring_of_sets) generated_ring_Inter: + assumes "finite A" "A \ {}" shows "A \ generated_ring \ \A \ generated_ring" + using assms by (induct A rule: finite_ne_induct) (auto intro: generated_ring_Int) + +lemma (in semiring_of_sets) generated_ring_INTER: + "finite I \ I \ {} \ (\i. i \ I \ A i \ generated_ring) \ INTER I A \ generated_ring" + unfolding INF_def by (intro generated_ring_Inter) auto + +lemma (in semiring_of_sets) generating_ring: + "ring_of_sets \ generated_ring" +proof (rule ring_of_setsI) + let ?R = generated_ring + show "?R \ Pow \" + using sets_into_space by (auto simp: generated_ring_def generated_ring_empty) + show "{} \ ?R" by (rule generated_ring_empty) + + { fix a assume a: "a \ ?R" then guess Ca .. note Ca = this + fix b assume b: "b \ ?R" then guess Cb .. note Cb = this + + show "a - b \ ?R" + proof cases + assume "Cb = {}" with Cb `a \ ?R` show ?thesis + by simp + next + assume "Cb \ {}" + with Ca Cb have "a - b = (\a'\Ca. \b'\Cb. a' - b')" by auto + also have "\ \ ?R" + proof (intro generated_ring_INTER generated_ring_disjoint_UNION) + fix a b assume "a \ Ca" "b \ Cb" + with Ca Cb Diff_cover[of a b] show "a - b \ ?R" + by (auto simp add: generated_ring_def) + next + show "disjoint ((\a'. \b'\Cb. a' - b')`Ca)" + using Ca by (auto simp add: disjoint_def `Cb \ {}`) + next + show "finite Ca" "finite Cb" "Cb \ {}" by fact+ + qed + finally show "a - b \ ?R" . + qed } + note Diff = this + + fix a b assume sets: "a \ ?R" "b \ ?R" + have "a \ b = (a - b) \ (a \ b) \ (b - a)" by auto + also have "\ \ ?R" + by (intro sets generated_ring_disjoint_Un generated_ring_Int Diff) auto + finally show "a \ b \ ?R" . +qed + +lemma (in semiring_of_sets) sigma_sets_generated_ring_eq: "sigma_sets \ generated_ring = sigma_sets \ M" +proof + interpret M: sigma_algebra \ "sigma_sets \ M" + using space_closed by (rule sigma_algebra_sigma_sets) + show "sigma_sets \ generated_ring \ sigma_sets \ M" + by (blast intro!: sigma_sets_mono elim: generated_ringE) +qed (auto intro!: generated_ringI_Basic sigma_sets_mono) + section {* Measure type *} definition positive :: "'a set set \ ('a set \ ereal) \ bool" where @@ -777,7 +1000,7 @@ typedef (open) 'a measure = "{(\::'a set, A, \). (\a\-A. \ a = 0) \ measure_space \ A \ }" proof have "sigma_algebra UNIV {{}, UNIV}" - proof qed auto + by (auto simp: sigma_algebra_iff2) then show "(UNIV, {{}, UNIV}, \A. 0) \ {(\, A, \). (\a\-A. \ a = 0) \ measure_space \ A \} " by (auto simp: measure_space_def positive_def countably_additive_def) qed