# HG changeset patch # User hoelzl # Date 1353337751 -3600 # Node ID 4161c834c2fdefd0aaf4f6d87e5611f82fea4100 # Parent 69b35a75caf3f0b6fc65c198237251a6d26669fc tuned FinMap diff -r 69b35a75caf3 -r 4161c834c2fd src/HOL/Probability/Fin_Map.thy --- a/src/HOL/Probability/Fin_Map.thy Mon Nov 19 12:29:02 2012 +0100 +++ b/src/HOL/Probability/Fin_Map.thy Mon Nov 19 16:09:11 2012 +0100 @@ -80,8 +80,7 @@ using assms apply (auto simp: finmap_eq_iff restrict_def) by metis -lemma - finmap_of_inj_on_extensional_finite: +lemma finmap_of_inj_on_extensional_finite: assumes "finite K" assumes "S \ extensional K" shows "inj_on (finmap_of K) S" @@ -125,14 +124,6 @@ translations "PI' x:A. B" == "CONST Pi' A (%x. B)" -abbreviation - finmapset :: "['a set, 'b set] => ('a \\<^isub>F 'b) set" - (infixr "~>" 60) where - "A ~> B \ Pi' A (%_. B)" - -notation (xsymbols) - finmapset (infixr "\" 60) - subsubsection{*Basic Properties of @{term Pi'}*} lemma Pi'_I[intro!]: "domain f = A \ (\x. x \ A \ f x \ B x) \ f \ Pi' A B" @@ -141,9 +132,6 @@ lemma Pi'_I'[simp]: "domain f = A \ (\x. x \ A \ f x \ B x) \ f \ Pi' A B" by (simp add:Pi'_def) -lemma finmapsetI: "domain f = A \ (\x. x \ A \ f x \ B) \ f \ A \ B" - by (simp add: Pi_def) - lemma Pi'_mem: "f\ Pi' A B \ x \ A \ f x \ B x" by (simp add: Pi'_def) @@ -158,12 +146,6 @@ "domain f = domain g \ (\ w. w \ A \ f w = g w) \ f \ Pi' A B \ g \ Pi' A B" by (auto simp: Pi'_def) -lemma funcset_mem: "[|f \ A \ B; x \ A|] ==> f x \ B" - by (simp add: Pi'_def) - -lemma funcset_image: "f \ A \ B ==> f ` A \ B" -by auto - lemma Pi'_eq_empty[simp]: assumes "finite A" shows "(Pi' A B) = {} \ (\x\A. B x = {})" using assms @@ -554,8 +536,7 @@ shows "open x" using finmap_topological_basis assms by (auto simp: topological_basis_def) -lemma - open_imp_ex_UNION_of_enum: +lemma open_imp_ex_UNION_of_enum: fixes X::"('a \\<^isub>F 'b) set" assumes "open X" assumes "X \ {}" shows "\A::nat\'a set. \B::nat\('a \ 'b set) . X = UNION UNIV (\i. Pi' (A i) (B i)) \ @@ -588,8 +569,7 @@ qed qed -lemma - open_imp_ex_UNION: +lemma open_imp_ex_UNION: fixes X::"('a \\<^isub>F 'b) set" assumes "open X" assumes "X \ {}" shows "\A::nat\'a set. \B::nat\('a \ 'b set) . X = UNION UNIV (\i. Pi' (A i) (B i)) \ @@ -601,20 +581,18 @@ apply (auto simp: open_enum_basis) done -lemma - open_basisE: +lemma open_basisE: assumes "open X" assumes "X \ {}" obtains A::"nat\'a set" and B::"nat\('a \ 'b set)" where "X = UNION UNIV (\i. Pi' (A i) (B i))" "\n i. i\A n \ open ((B n) i)" "\n. finite (A n)" -using open_imp_ex_UNION[OF assms] by auto + using open_imp_ex_UNION[OF assms] by auto -lemma - open_basis_of_enumE: +lemma open_basis_of_enumE: assumes "open X" assumes "X \ {}" obtains A::"nat\'a set" and B::"nat\('a \ 'b set)" where "X = UNION UNIV (\i. Pi' (A i) (B i))" "\n i. i\A n \ (B n) i \ range enum_basis" "\n. finite (A n)" -using open_imp_ex_UNION_of_enum[OF assms] by auto + using open_imp_ex_UNION_of_enum[OF assms] by auto instance proof qed (blast intro: finmap_topological_basis) @@ -623,9 +601,7 @@ subsection {* Product Measurable Space of Finite Maps *} definition "PiF I M \ - sigma - (\J \ I. (\' j\J. space (M j))) - {(\' j\J. X j) |X J. J \ I \ X \ (\ j\J. sets (M j))}" + sigma (\J \ I. (\' j\J. space (M j))) {(\' j\J. X j) |X J. J \ I \ X \ (\ j\J. sets (M j))}" abbreviation "Pi\<^isub>F I M \ PiF I M" @@ -691,8 +667,7 @@ using assms by (auto intro: in_sets_PiFI intro!: singleton_space_subset_in_sets) -lemma - finite_measurable_singletonI: +lemma finite_measurable_singletonI: assumes "finite I" assumes "\J. J \ I \ finite J" assumes MN: "\J. J \ I \ A \ measurable (PiF {J} M) N" @@ -717,8 +692,7 @@ by (auto simp: space_PiF measurable_space Pi'_def) qed -lemma - countable_finite_comprehension: +lemma countable_finite_comprehension: fixes f :: "'a::countable set \ _" assumes "\s. P s \ finite s" assumes "\s. P s \ f s \ sets M" @@ -764,8 +738,7 @@ using assms by (auto intro: in_sets_PiFI intro!: space_subset_in_sets) -lemma - countable_measurable_PiFI: +lemma countable_measurable_PiFI: fixes I::"'a::countable set set" assumes MN: "\J. J \ I \ finite J \ A \ measurable (PiF {J} M) N" shows "A \ measurable (PiF I M) N" @@ -809,18 +782,15 @@ apply (insert S, auto) done -lemma - restrict_sets_measurable: +lemma restrict_sets_measurable: assumes A: "A \ sets (PiF I M)" and "J \ I" shows "A \ {m. domain m \ J} \ sets (PiF J M)" using A[unfolded sets_PiF] - apply (induct A) - unfolding sets_PiF[symmetric] unfolding space_PiF[symmetric] -proof - - fix a assume "a \ {Pi' J X |X J. J \ I \ X \ (\ j\J. sets (M j))}" +proof (induct A) + case (Basic a) then obtain K S where S: "a = Pi' K S" "K \ I" "(\i\K. S i \ sets (M i))" by auto - show "a \ {m. domain m \ J} \ sets (PiF J M)" + show ?case proof cases assume "K \ J" hence "a \ {m. domain m \ J} \ {Pi' K X |X K. K \ J \ X \ (\ j\K. sets (M j))}" using S @@ -834,21 +804,18 @@ finally show ?thesis . qed next - show "{} \ {m. domain m \ J} \ sets (PiF J M)" by simp -next - fix a :: "nat \ _" - assume a: "(\i. a i \ {m. domain m \ J} \ sets (PiF J M))" + case (Union a) have "UNION UNIV a \ {m. domain m \ J} = (\i. (a i \ {m. domain m \ J}))" by simp - also have "\ \ sets (PiF J M)" using a by (intro countable_nat_UN) auto - finally show "UNION UNIV a \ {m. domain m \ J} \ sets (PiF J M)" . + also have "\ \ sets (PiF J M)" using Union by (intro countable_nat_UN) auto + finally show ?case . next - fix a assume a: "a \ {m. domain m \ J} \ sets (PiF J M)" + case (Compl a) have "(space (PiF I M) - a) \ {m. domain m \ J} = (space (PiF J M) - (a \ {m. domain m \ J}))" using `J \ I` by (auto simp: space_PiF Pi'_def) - also have "\ \ sets (PiF J M)" using a by auto - finally show "(space (PiF I M) - a) \ {m. domain m \ J} \ sets (PiF J M)" . -qed + also have "\ \ sets (PiF J M)" using Compl by auto + finally show ?case by (simp add: space_PiF) +qed simp lemma measurable_finmap_of: assumes f: "\i. (\x \ space N. i \ J x) \ (\x. f x i) \ measurable N (M i)" @@ -892,7 +859,7 @@ done lemma proj_measurable_singleton: - assumes "A \ sets (M i)" "finite I" + assumes "A \ sets (M i)" shows "(\x. (x)\<^isub>F i) -` A \ space (PiF {I} M) \ sets (PiF {I} M)" proof cases assume "i \ I" @@ -910,11 +877,10 @@ qed lemma measurable_proj_singleton: - fixes I - assumes "finite I" "i \ I" + assumes "i \ I" shows "(\x. (x)\<^isub>F i) \ measurable (PiF {I} M) (M i)" -proof (unfold measurable_def, intro CollectI conjI ballI proj_measurable_singleton assms) -qed (insert `i \ I`, auto simp: space_PiF) + by (unfold measurable_def, intro CollectI conjI ballI proj_measurable_singleton assms) + (insert `i \ I`, auto simp: space_PiF) lemma measurable_proj_countable: fixes I::"'a::countable set set" @@ -942,13 +908,11 @@ using assms by (intro measurable_finmap_of measurable_component_singleton) auto -lemma - measurable_proj_PiM: +lemma measurable_proj_PiM: fixes J K ::"'a::countable set" and I::"'a set set" assumes "finite J" "J \ I" assumes "x \ space (PiM J M)" - shows "proj \ - measurable (PiF {J} M) (PiM J M)" + shows "proj \ measurable (PiF {J} M) (PiM J M)" proof (rule measurable_PiM_single) show "proj \ space (PiF {J} M) \ (\\<^isub>E i \ J. space (M i))" using assms by (auto simp add: space_PiM space_PiF extensional_def sets_PiF Pi'_def) @@ -1187,7 +1151,7 @@ qed qed -lemma finmap_UNIV[simp]: "(\J\Collect finite. J \ UNIV) = UNIV" by auto +lemma finmap_UNIV[simp]: "(\J\Collect finite. PI' j : J. UNIV) = UNIV" by auto lemma borel_eq_PiF_borel: shows "(borel :: ('i::countable \\<^isub>F 'a::polish_space) measure) = @@ -1277,59 +1241,14 @@ subsection {* Isomorphism between Functions and Finite Maps *} -lemma - measurable_finmap_compose: - fixes f::"'a \ 'b" - assumes inj: "\j. j \ J \ f' (f j) = j" - assumes "finite J" +lemma measurable_finmap_compose: shows "(\m. compose J m f) \ measurable (PiM (f ` J) (\_. M)) (PiM J (\_. M))" -proof (rule measurable_PiM) - show "(\m. compose J m f) \ space (Pi\<^isub>M (f ` J) (\_. M)) \ (J \\<^isub>E space M)" - proof safe - fix x and i - assume x: "x \ space (PiM (f ` J) (\_. M))" "i \ J" - with inj show "compose J x f i \ space M" - by (auto simp: space_PiM compose_def) - next - fix x i assume "i \ J" - with compose_extensional[of J x f] - show "compose J x f i = undefined" by (auto simp: extensional_def) - qed -next - fix S X - have inv: "\j. j \ f ` J \ f (f' j) = j" using assms by auto - assume S: "S \ {} \ J = {}" "finite S" "S \ J" and P: "\i. i \ S \ X i \ sets M" - have "(\m. compose J m f) -` prod_emb J (\_. M) S (Pi\<^isub>E S X) \ - space (Pi\<^isub>M (f ` J) (\_. M)) = prod_emb (f ` J) (\_. M) (f ` S) (Pi\<^isub>E (f ` S) (\b. X (f' b)))" - using assms inv S sets_into_space[OF P] - by (force simp: prod_emb_iff compose_def space_PiM extensional_def Pi_def PiE_def intro: imageI) - also have "\ \ sets (Pi\<^isub>M (f ` J) (\_. M))" - proof - from S show "f ` S \ f ` J" by auto - show "(\\<^isub>E b\f ` S. X (f' b)) \ sets (Pi\<^isub>M (f ` S) (\_. M))" - proof (rule sets_PiM_I_finite) - show "finite (f ` S)" using S by simp - fix i assume "i \ f ` S" hence "f' i \ S" using S assms by auto - thus "X (f' i) \ sets M" by (rule P) - qed - qed - finally show "(\m. compose J m f) -` prod_emb J (\_. M) S (Pi\<^isub>E S X) \ - space (Pi\<^isub>M (f ` J) (\_. M)) \ sets (Pi\<^isub>M (f ` J) (\_. M))" . -qed + unfolding compose_def by measurable -lemma - measurable_compose_inv: - fixes f::"'a \ 'b" +lemma measurable_compose_inv: assumes inj: "\j. j \ J \ f' (f j) = j" - assumes "finite J" shows "(\m. compose (f ` J) m f') \ measurable (PiM J (\_. M)) (PiM (f ` J) (\_. M))" -proof - - have "(\m. compose (f ` J) m f') \ measurable (Pi\<^isub>M (f' ` f ` J) (\_. M)) (Pi\<^isub>M (f ` J) (\_. M))" - using assms by (auto intro: measurable_finmap_compose) - moreover - from inj have "f' ` f ` J = J" by (metis (hide_lams, mono_tags) image_iff set_eqI) - ultimately show ?thesis by simp -qed + unfolding compose_def by (rule measurable_restrict) (auto simp: inj) locale function_to_finmap = fixes J::"'a set" and f :: "'a \ 'b::countable" and f' @@ -1390,16 +1309,6 @@ definition "mf = (\g. compose J g f) o proj" -lemma - assumes "x \ space (Pi\<^isub>M J (\_. M))" "finite J" - shows "proj (finmap_of J x) = x" - using assms by (auto simp: space_PiM extensional_def) - -lemma - assumes "x \ space (Pi\<^isub>F {J} (\_. M))" - shows "finmap_of J (proj x) = x" - using assms by (auto simp: space_PiF Pi'_def finmap_eq_iff) - lemma mf_fm: assumes "x \ space (Pi\<^isub>M J (\_. M))" shows "mf (fm x) = x" @@ -1423,9 +1332,8 @@ shows "mf \ measurable (PiF {f ` J} (\_. M)) (PiM J (\_. M))" unfolding mf_def proof (rule measurable_comp, rule measurable_proj_PiM) - show "(\g. compose J g f) \ - measurable (Pi\<^isub>M (f ` J) (\x. M)) (Pi\<^isub>M J (\_. M))" - by (rule measurable_finmap_compose, rule inv) auto + show "(\g. compose J g f) \ measurable (Pi\<^isub>M (f ` J) (\x. M)) (Pi\<^isub>M J (\_. M))" + by (rule measurable_finmap_compose) qed (auto simp add: space_PiM extensional_def assms) lemma fm_image_measurable: diff -r 69b35a75caf3 -r 4161c834c2fd src/HOL/Probability/Projective_Family.thy --- a/src/HOL/Probability/Projective_Family.thy Mon Nov 19 12:29:02 2012 +0100 +++ b/src/HOL/Probability/Projective_Family.thy Mon Nov 19 16:09:11 2012 +0100 @@ -124,13 +124,9 @@ shows "limP J M P = P J" (is "?P = _") proof (rule measure_eqI_generator_eq) let ?J = "{Pi\<^isub>E J E | E. \i\J. E i \ sets (M i)}" - let ?F = "\i. \\<^isub>E k\J. space (M k)" let ?\ = "(\\<^isub>E k\J. space (M k))" - show "Int_stable ?J" - by (rule Int_stable_PiE) interpret prob_space "P J" using proj_prob_space `finite J` by simp - show "emeasure ?P (?F _) \ \" using assms `finite J` by (auto simp: emeasure_limP) - show "?J \ Pow ?\" by (auto simp: Pi_iff dest: sets_into_space) + show "emeasure ?P (\\<^isub>E k\J. space (M k)) \ \" using assms `finite J` by (auto simp: emeasure_limP) show "sets (limP J M P) = sigma_sets ?\ ?J" "sets (P J) = sigma_sets ?\ ?J" using `finite J` proj_sets by (simp_all add: sets_PiM prod_algebra_eq_finite Pi_iff) fix X assume "X \ ?J" @@ -142,7 +138,7 @@ show "emeasure (limP J M P) X = emeasure (P J) X" unfolding X using E by (intro emeasure_limP assms) simp -qed (insert `finite J`, auto intro!: prod_algebraI_finite) +qed (auto simp: Pi_iff dest: sets_into_space intro: Int_stable_PiE) lemma emeasure_fun_emb[simp]: assumes L: "J \ {}" "J \ L" "finite L" "L \ I" and X: "X \ sets (PiM J M)" @@ -150,9 +146,12 @@ using assms by (subst limP_finite) (auto simp: limP_finite finite_subset projective) +abbreviation + "emb L K X \ prod_emb L M K X" + lemma prod_emb_injective: - assumes "J \ {}" "J \ L" "finite J" and sets: "X \ sets (Pi\<^isub>M J M)" "Y \ sets (Pi\<^isub>M J M)" - assumes "prod_emb L M J X = prod_emb L M J Y" + assumes "J \ L" and sets: "X \ sets (Pi\<^isub>M J M)" "Y \ sets (Pi\<^isub>M J M)" + assumes "emb L J X = emb L J Y" shows "X = Y" proof (rule injective_vimage_restrict) show "X \ (\\<^isub>E i\J. space (M i))" "Y \ (\\<^isub>E i\J. space (M i))" @@ -169,9 +168,6 @@ using `prod_emb L M J X = prod_emb L M J Y` by (simp add: prod_emb_def) qed fact -abbreviation - "emb L K X \ prod_emb L M K X" - definition generator :: "('i \ 'a) set set" where "generator = (\J\{J. J \ {} \ finite J \ J \ I}. emb I J ` sets (Pi\<^isub>M J M))" @@ -265,11 +261,7 @@ lemma generatorE: assumes A: "A \ generator" obtains J X where "J \ {}" "finite J" "J \ I" "X \ sets (Pi\<^isub>M J M)" "emb I J X = A" "\G A = emeasure (limP J M P) X" -proof - - from generator_Ex[OF A] obtain X J where "J \ {}" "finite J" "J \ I" "X \ sets (Pi\<^isub>M J M)" "emb I J X = A" - "\G A = emeasure (limP J M P) X" by auto - then show thesis by (intro that) auto -qed + using generator_Ex[OF A] by atomize_elim auto lemma merge_sets: "J \ K = {} \ A \ sets (Pi\<^isub>M (J \ K) M) \ x \ space (Pi\<^isub>M J M) \ (\y. merge J K (x,y)) -` A \ space (Pi\<^isub>M K M) \ sets (Pi\<^isub>M K M)" diff -r 69b35a75caf3 -r 4161c834c2fd src/HOL/Probability/Projective_Limit.thy --- a/src/HOL/Probability/Projective_Limit.thy Mon Nov 19 12:29:02 2012 +0100 +++ b/src/HOL/Probability/Projective_Limit.thy Mon Nov 19 16:09:11 2012 +0100 @@ -626,7 +626,6 @@ hide_const (open) Abs_finmap hide_const (open) Rep_finmap hide_const (open) finmap_of -hide_const (open) finmapset hide_const (open) proj hide_const (open) domain hide_const (open) enum_basis_finmap