# HG changeset patch # User bulwahn # Date 1302088124 -7200 # Node ID 5ff3a11e18caace5617c7d027e96658fa2f94557 # Parent 79cb339d898936a8da373c4b108090b5852af8d5# Parent 08d717c828282fd4113ab264e0964cba2699323a merged diff -r 79cb339d8989 -r 5ff3a11e18ca src/HOL/Probability/Infinite_Product_Measure.thy --- a/src/HOL/Probability/Infinite_Product_Measure.thy Wed Apr 06 10:58:18 2011 +0200 +++ b/src/HOL/Probability/Infinite_Product_Measure.thy Wed Apr 06 13:08:44 2011 +0200 @@ -319,7 +319,7 @@ translations "PIP x:I. M" == "CONST Pi\<^isub>P I (%x. M)" -sublocale product_prob_space \ G: algebra generator +sublocale product_prob_space \ G!: algebra generator proof let ?G = generator show "sets ?G \ Pow (space ?G)" @@ -738,19 +738,19 @@ done qed -sublocale product_prob_space \ measure_space "Pi\<^isub>P I M" +sublocale product_prob_space \ P: measure_space "Pi\<^isub>P I M" using infprod_spec by auto lemma (in product_prob_space) measure_infprod_emb: assumes "J \ {}" "finite J" "J \ I" "X \ sets (Pi\<^isub>M J M)" - shows "measure (Pi\<^isub>P I M) (emb I J X) = measure (Pi\<^isub>M J M) X" + shows "\ (emb I J X) = measure (Pi\<^isub>M J M) X" proof - have "emb I J X \ sets generator" using assms by (rule generatorI') with \G_eq[OF assms] infprod_spec show ?thesis by auto qed -sublocale product_prob_space \ prob_space "Pi\<^isub>P I M" +sublocale product_prob_space \ P: prob_space "Pi\<^isub>P I M" proof obtain i where "i \ I" using I_not_empty by auto interpret i: finite_product_sigma_finite M "{i}" by default auto @@ -758,11 +758,11 @@ have "?X \ sets (Pi\<^isub>M {i} M)" by auto from measure_infprod_emb[OF _ _ _ this] `i \ I` - have "measure (Pi\<^isub>P I M) (emb I {i} ?X) = measure (M i) (space (M i))" + have "\ (emb I {i} ?X) = measure (M i) (space (M i))" by (simp add: i.measure_times) also have "emb I {i} ?X = space (Pi\<^isub>P I M)" using `i \ I` by (auto simp: emb_def infprod_algebra_def generator_def) - finally show "measure (Pi\<^isub>P I M) (space (Pi\<^isub>P I M)) = 1" + finally show "\ (space (Pi\<^isub>P I M)) = 1" using M.measure_space_1 by simp qed @@ -784,4 +784,199 @@ unfolding infprod_algebra_def by auto qed +lemma (in product_prob_space) emb_in_infprod_algebra[intro]: + fixes J assumes J: "finite J" "J \ I" and X: "X \ sets (Pi\<^isub>M J M)" + shows "emb I J X \ sets (\\<^isub>P i\I. M i)" +proof cases + assume "J = {}" + with X have "emb I J X = space (\\<^isub>P i\I. M i) \ emb I J X = {}" + by (auto simp: emb_def infprod_algebra_def generator_def + product_algebra_def product_algebra_generator_def image_constant sigma_def) + then show ?thesis by auto +next + assume "J \ {}" + show ?thesis unfolding infprod_algebra_def + by simp (intro in_sigma generatorI' `J \ {}` J X) +qed + +lemma (in product_prob_space) finite_measure_infprod_emb: + assumes "J \ {}" "finite J" "J \ I" "X \ sets (Pi\<^isub>M J M)" + shows "\' (emb I J X) = finite_measure.\' (Pi\<^isub>M J M) X" +proof - + interpret J: finite_product_prob_space M J by default fact+ + from assms have "emb I J X \ sets (Pi\<^isub>P I M)" by auto + with assms show "\' (emb I J X) = J.\' X" + unfolding \'_def J.\'_def + unfolding measure_infprod_emb[OF assms] + by auto +qed + +lemma (in finite_product_prob_space) finite_measure_times: + assumes "\i. i \ I \ A i \ sets (M i)" + shows "\' (Pi\<^isub>E I A) = (\i\I. M.\' i (A i))" + using assms + unfolding \'_def M.\'_def + by (subst measure_times[OF assms]) + (auto simp: finite_measure_eq M.finite_measure_eq setprod_extreal) + +lemma (in product_prob_space) finite_measure_infprod_emb_Pi: + assumes J: "finite J" "J \ I" "\j. j \ J \ X j \ sets (M j)" + shows "\' (emb I J (Pi\<^isub>E J X)) = (\j\J. M.\' j (X j))" +proof cases + assume "J = {}" + then have "emb I J (Pi\<^isub>E J X) = space infprod_algebra" + by (auto simp: infprod_algebra_def generator_def sigma_def emb_def) + then show ?thesis using `J = {}` prob_space by simp +next + assume "J \ {}" + interpret J: finite_product_prob_space M J by default fact+ + have "(\i\J. M.\' i (X i)) = J.\' (Pi\<^isub>E J X)" + using J `J \ {}` by (subst J.finite_measure_times) auto + also have "\ = \' (emb I J (Pi\<^isub>E J X))" + using J `J \ {}` by (intro finite_measure_infprod_emb[symmetric]) auto + finally show ?thesis by simp +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) +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_subseteq: "A \ sigma_sets X A" + by (auto intro: sigma_sets.Basic) + +lemma (in product_prob_space) infprod_algebra_alt: + "Pi\<^isub>P I M = sigma \ space = space (Pi\<^isub>P I M), + sets = (\J\{J. J \ {} \ finite J \ J \ I}. emb I J ` Pi\<^isub>E J ` (\ i \ J. sets (M i))), + measure = measure (Pi\<^isub>P I M) \" + (is "_ = sigma \ space = ?O, sets = ?M, measure = ?m \") +proof (rule measure_space.equality) + let ?G = "\J\{J. J \ {} \ finite J \ J \ I}. emb I J ` sets (Pi\<^isub>M J M)" + have "sigma_sets ?O ?M = sigma_sets ?O ?G" + proof (intro equalityI sigma_sets_mono UN_least) + fix J assume J: "J \ {J. J \ {} \ finite J \ J \ I}" + have "emb I J ` Pi\<^isub>E J ` (\ i\J. sets (M i)) \ emb I J ` sets (Pi\<^isub>M J M)" by auto + also have "\ \ ?G" using J by (rule UN_upper) + also have "\ \ sigma_sets ?O ?G" by (rule sigma_sets_subseteq) + finally show "emb I J ` Pi\<^isub>E J ` (\ i\J. sets (M i)) \ sigma_sets ?O ?G" . + have "emb I J ` sets (Pi\<^isub>M J M) = emb I J ` sigma_sets (space (Pi\<^isub>M J M)) (Pi\<^isub>E J ` (\ i \ J. sets (M i)))" + by (simp add: sets_sigma product_algebra_generator_def product_algebra_def) + also have "\ = sigma_sets (space (Pi\<^isub>M I M)) (emb I J ` Pi\<^isub>E J ` (\ i \ J. sets (M i)))" + using J M.sets_into_space + by (auto simp: emb_def_raw intro!: sigma_sets_vimage[symmetric]) blast + also have "\ \ sigma_sets (space (Pi\<^isub>M I M)) ?M" + using J by (intro sigma_sets_mono') auto + finally show "emb I J ` sets (Pi\<^isub>M J M) \ sigma_sets ?O ?M" + by (simp add: infprod_algebra_def generator_def) + qed + then show "sets (Pi\<^isub>P I M) = sets (sigma \ space = ?O, sets = ?M, measure = ?m \)" + by (simp_all add: infprod_algebra_def generator_def sets_sigma) +qed simp_all + +lemma (in product_prob_space) infprod_algebra_alt2: + "Pi\<^isub>P I M = sigma \ space = space (Pi\<^isub>P I M), + sets = (\i\I. (\A. (\x. x i) -` A \ space (Pi\<^isub>P I M)) ` sets (M i)), + measure = measure (Pi\<^isub>P I M) \" + (is "_ = ?S") +proof (rule measure_space.equality) + let "sigma \ space = ?O, sets = ?A, \ = _ \" = ?S + let ?G = "(\J\{J. J \ {} \ finite J \ J \ I}. emb I J ` Pi\<^isub>E J ` (\ i \ J. sets (M i)))" + have "sets (Pi\<^isub>P I M) = sigma_sets ?O ?G" + by (subst infprod_algebra_alt) (simp add: sets_sigma) + also have "\ = sigma_sets ?O ?A" + proof (intro equalityI sigma_sets_mono subsetI) + interpret A: sigma_algebra ?S + by (rule sigma_algebra_sigma) auto + fix A assume "A \ ?G" + then obtain J B where "finite J" "J \ {}" "J \ I" "A = emb I J (Pi\<^isub>E J B)" + and B: "\i. i \ J \ B i \ sets (M i)" + by auto + then have A: "A = (\j\J. (\x. x j) -` (B j) \ space (Pi\<^isub>P I M))" + by (auto simp: emb_def infprod_algebra_def generator_def Pi_iff) + { fix j assume "j\J" + with `J \ I` have "j \ I" by auto + with `j \ J` B have "(\x. x j) -` (B j) \ space (Pi\<^isub>P I M) \ sets ?S" + by (auto simp: sets_sigma intro: sigma_sets.Basic) } + with `finite J` `J \ {}` have "A \ sets ?S" + unfolding A by (intro A.finite_INT) auto + then show "A \ sigma_sets ?O ?A" by (simp add: sets_sigma) + next + fix A assume "A \ ?A" + then obtain i B where i: "i \ I" "B \ sets (M i)" + and "A = (\x. x i) -` B \ space (Pi\<^isub>P I M)" + by auto + then have "A = emb I {i} (Pi\<^isub>E {i} (\_. B))" + by (auto simp: emb_def infprod_algebra_def generator_def Pi_iff) + with i show "A \ sigma_sets ?O ?G" + by (intro sigma_sets.Basic UN_I[where a="{i}"]) auto + qed + finally show "sets (Pi\<^isub>P I M) = sets ?S" + by (simp add: sets_sigma) +qed simp_all + +lemma (in product_prob_space) measurable_into_infprod_algebra: + assumes "sigma_algebra N" + assumes f: "\i. i \ I \ (\x. f x i) \ measurable N (M i)" + assumes ext: "\x. x \ space N \ f x \ extensional I" + shows "f \ measurable N (Pi\<^isub>P I M)" +proof - + interpret N: sigma_algebra N by fact + have f_in: "\i. i \ I \ (\x. f x i) \ space N \ space (M i)" + using f by (auto simp: measurable_def) + { fix i A assume i: "i \ I" "A \ sets (M i)" + then have "f -` (\x. x i) -` A \ f -` space infprod_algebra \ space N = (\x. f x i) -` A \ space N" + using f_in ext by (auto simp: infprod_algebra_def generator_def) + also have "\ \ sets N" + by (rule measurable_sets f i)+ + finally have "f -` (\x. x i) -` A \ f -` space infprod_algebra \ space N \ sets N" . } + with f_in ext show ?thesis + by (subst infprod_algebra_alt2) + (auto intro!: N.measurable_sigma simp: Pi_iff infprod_algebra_def generator_def) +qed + +subsection {* Sequence space *} + +locale sequence_space = product_prob_space M "UNIV :: nat set" for M + +lemma (in sequence_space) infprod_in_sets[intro]: + fixes E :: "nat \ 'a set" assumes E: "\i. E i \ sets (M i)" + shows "Pi UNIV E \ sets (Pi\<^isub>P UNIV M)" +proof - + have "Pi UNIV E = (\i. emb UNIV {..i} (\\<^isub>E j\{..i}. E j))" + using E E[THEN M.sets_into_space] + by (auto simp: emb_def Pi_iff extensional_def) blast + with E show ?thesis + by (auto intro: emb_in_infprod_algebra) +qed + +lemma (in sequence_space) measure_infprod: + fixes E :: "nat \ 'a set" assumes E: "\i. E i \ sets (M i)" + shows "(\n. \i\n. M.\' i (E i)) ----> \' (Pi UNIV E)" +proof - + let "?E n" = "emb UNIV {..n} (Pi\<^isub>E {.. n} E)" + { fix n :: nat + interpret n: finite_product_prob_space M "{..n}" by default auto + have "(\i\n. M.\' i (E i)) = n.\' (Pi\<^isub>E {.. n} E)" + using E by (subst n.finite_measure_times) auto + also have "\ = \' (?E n)" + using E by (intro finite_measure_infprod_emb[symmetric]) auto + finally have "(\i\n. M.\' i (E i)) = \' (?E n)" . } + moreover have "Pi UNIV E = (\n. ?E n)" + using E E[THEN M.sets_into_space] + by (auto simp: emb_def extensional_def Pi_iff) blast + moreover have "range ?E \ sets (Pi\<^isub>P UNIV M)" + using E by auto + moreover have "decseq ?E" + by (auto simp: emb_def Pi_iff decseq_def) + ultimately show ?thesis + by (simp add: finite_continuity_from_above) +qed + end \ No newline at end of file diff -r 79cb339d8989 -r 5ff3a11e18ca src/HOL/Probability/ex/Koepf_Duermuth_Countermeasure.thy --- a/src/HOL/Probability/ex/Koepf_Duermuth_Countermeasure.thy Wed Apr 06 10:58:18 2011 +0200 +++ b/src/HOL/Probability/ex/Koepf_Duermuth_Countermeasure.thy Wed Apr 06 13:08:44 2011 +0200 @@ -95,11 +95,11 @@ lemma zero_notin_Suc_image[simp]: "0 \ Suc ` A" by auto -definition extensional :: "'b \ 'a set \ ('a \ 'b) set" where - "extensional d A = {f. \x. x \ A \ f x = d}" +definition extensionalD :: "'b \ 'a set \ ('a \ 'b) set" where + "extensionalD d A = {f. \x. x \ A \ f x = d}" -lemma extensional_empty[simp]: "extensional d {} = {\x. d}" - unfolding extensional_def by (simp add: set_eq_iff fun_eq_iff) +lemma extensionalD_empty[simp]: "extensionalD d {} = {\x. d}" + unfolding extensionalD_def by (simp add: set_eq_iff fun_eq_iff) lemma funset_eq_UN_fun_upd_I: assumes *: "\f. f \ F (insert a A) \ f(a := d) \ F A" @@ -121,16 +121,16 @@ from ***[OF this] show "f(a := x) \ F (insert a A)" . qed -lemma extensional_insert[simp]: +lemma extensionalD_insert[simp]: assumes "a \ A" - shows "extensional d (insert a A) \ (insert a A \ B) = (\f \ extensional d A \ (A \ B). (\b. f(a := b)) ` B)" + shows "extensionalD d (insert a A) \ (insert a A \ B) = (\f \ extensionalD d A \ (A \ B). (\b. f(a := b)) ` B)" apply (rule funset_eq_UN_fun_upd_I) using assms - by (auto intro!: inj_onI dest: inj_onD split: split_if_asm simp: extensional_def) + by (auto intro!: inj_onI dest: inj_onD split: split_if_asm simp: extensionalD_def) -lemma finite_extensional_funcset[simp, intro]: +lemma finite_extensionalD_funcset[simp, intro]: assumes "finite A" "finite B" - shows "finite (extensional d A \ (A \ B))" + shows "finite (extensionalD d A \ (A \ B))" using assms by induct auto lemma fun_upd_eq_iff: "f(a := b) = g(a := b') \ b = b' \ f(a := d) = g(a := d)" @@ -138,27 +138,27 @@ lemma card_funcset: assumes "finite A" "finite B" - shows "card (extensional d A \ (A \ B)) = card B ^ card A" + shows "card (extensionalD d A \ (A \ B)) = card B ^ card A" using `finite A` proof induct - case (insert a A) thus ?case unfolding extensional_insert[OF `a \ A`] + case (insert a A) thus ?case unfolding extensionalD_insert[OF `a \ A`] proof (subst card_UN_disjoint, safe, simp_all) - show "finite (extensional d A \ (A \ B))" "\f. finite (fun_upd f a ` B)" + show "finite (extensionalD d A \ (A \ B))" "\f. finite (fun_upd f a ` B)" using `finite B` `finite A` by simp_all next fix f g b b' assume "f \ g" and eq: "f(a := b) = g(a := b')" and - ext: "f \ extensional d A" "g \ extensional d A" + ext: "f \ extensionalD d A" "g \ extensionalD d A" have "f a = d" "g a = d" - using ext `a \ A` by (auto simp add: extensional_def) + using ext `a \ A` by (auto simp add: extensionalD_def) with `f \ g` eq show False unfolding fun_upd_eq_iff[of _ _ b _ _ d] by (auto simp: fun_upd_idem fun_upd_eq_iff) next - { fix f assume "f \ extensional d A \ (A \ B)" + { fix f assume "f \ extensionalD d A \ (A \ B)" have "card (fun_upd f a ` B) = card B" proof (auto intro!: card_image inj_onI) fix b b' assume "f(a := b) = f(a := b')" from fun_upd_eq_iff[THEN iffD1, OF this] show "b = b'" by simp qed } - then show "(\i\extensional d A \ (A \ B). card (fun_upd i a ` B)) = card B * card B ^ card A" + then show "(\i\extensionalD d A \ (A \ B). card (fun_upd i a ` B)) = card B * card B ^ card A" using insert by simp qed qed simp @@ -301,11 +301,11 @@ lemma card_T_bound: "card ((t\OB)`msgs) \ (n+1)^card observations" proof - - have "(t\OB)`msgs \ extensional 0 observations \ (observations \ {.. n})" - unfolding observations_def extensional_def OB_def msgs_def + have "(t\OB)`msgs \ extensionalD 0 observations \ (observations \ {.. n})" + unfolding observations_def extensionalD_def OB_def msgs_def by (auto simp add: t_def comp_def image_iff) - with finite_extensional_funcset - have "card ((t\OB)`msgs) \ card (extensional 0 observations \ (observations \ {.. n}))" + with finite_extensionalD_funcset + have "card ((t\OB)`msgs) \ card (extensionalD 0 observations \ (observations \ {.. n}))" by (rule card_mono) auto also have "\ = (n + 1) ^ card observations" by (subst card_funcset) auto