diff -r 6ebe97815275 -r 11065b70407d src/HOL/Analysis/Function_Topology.thy --- a/src/HOL/Analysis/Function_Topology.thy Wed Mar 06 21:44:30 2019 +0100 +++ b/src/HOL/Analysis/Function_Topology.thy Thu Mar 07 14:08:05 2019 +0000 @@ -546,7 +546,7 @@ done qed -lemma topspace_product_topology: +lemma topspace_product_topology [simp]: "topspace (product_topology T I) = (\\<^sub>E i\I. topspace(T i))" proof show "topspace (product_topology T I) \ (\\<^sub>E i\I. topspace (T i))" @@ -700,21 +700,101 @@ by meson qed - -lemma topspace_product_topology_alt: - "topspace (product_topology Y I) = {f \ extensional I. \k \ I. f k \ topspace(Y k)}" - by (force simp: product_topology PiE_def) +lemma closure_of_product_topology: + "(product_topology X I) closure_of (PiE I S) = PiE I (\i. (X i) closure_of (S i))" +proof - + have *: "(\T. f \ T \ openin (product_topology X I) T \ (\y\Pi\<^sub>E I S. y \ T)) + \ (\i \ I. \T. f i \ T \ openin (X i) T \ S i \ T \ {})" + (is "?lhs = ?rhs") + if top: "\i. i \ I \ f i \ topspace (X i)" and ext: "f \ extensional I" for f + proof + assume L[rule_format]: ?lhs + show ?rhs + proof clarify + fix i T + assume "i \ I" "f i \ T" "openin (X i) T" "S i \ T = {}" + then have "openin (product_topology X I) ((\\<^sub>E i\I. topspace (X i)) \ {x. x i \ T})" + by (force simp: openin_product_topology intro: arbitrary_union_of_inc relative_to_inc finite_intersection_of_inc) + then show "False" + using L [of "topspace (product_topology X I) \ {f. f i \ T}"] \S i \ T = {}\ \f i \ T\ \i \ I\ + by (auto simp: top ext PiE_iff) + qed + next + assume R [rule_format]: ?rhs + show ?lhs + proof (clarsimp simp: openin_product_topology union_of_def arbitrary_def) + fix \ U + assume + \: "\ \ Collect + (finite intersection_of (\F. \i U. F = {x. x i \ U} \ i \ I \ openin (X i) U) relative_to + (\\<^sub>E i\I. topspace (X i)))" and + "f \ U" "U \ \" + then have "(finite intersection_of (\F. \i U. F = {x. x i \ U} \ i \ I \ openin (X i) U) + relative_to (\\<^sub>E i\I. topspace (X i))) U" + by blast + with \f \ U\ \U \ \\ + obtain \ where "finite \" + and \: "\C. C \ \ \ \i \ I. \V. openin (X i) V \ C = {x. x i \ V}" + and "topspace (product_topology X I) \ \ \ \ U" "f \ topspace (product_topology X I) \ \ \" + apply (clarsimp simp add: relative_to_def intersection_of_def) + apply (rule that, auto dest!: subsetD) + done + then have "f \ PiE I (topspace \ X)" "f \ \\" and subU: "PiE I (topspace \ X) \ \\ \ U" + by (auto simp: PiE_iff) + have *: "f i \ topspace (X i) \ \{U. openin (X i) U \ {x. x i \ U} \ \} + \ openin (X i) (topspace (X i) \ \{U. openin (X i) U \ {x. x i \ U} \ \})" + if "i \ I" for i + proof - + have "finite ((\U. {x. x i \ U}) -` \)" + proof (rule finite_vimageI [OF \finite \\]) + show "inj (\U. {x. x i \ U})" + by (auto simp: inj_on_def) + qed + then have fin: "finite {U. openin (X i) U \ {x. x i \ U} \ \}" + by (rule rev_finite_subset) auto + have "openin (X i) (\ (insert (topspace (X i)) {U. openin (X i) U \ {x. x i \ U} \ \}))" + by (rule openin_Inter) (auto simp: fin) + then show ?thesis + using \f \ \ \\ by (fastforce simp: that top) + qed + define \ where "\ \ \i. topspace (X i) \ \{U. openin (X i) U \ {f. f i \ U} \ \}" + have "\i \ I. \x. x \ S i \ \ i" + using R [OF _ *] unfolding \_def by blast + then obtain \ where \ [rule_format]: "\i \ I. \ i \ S i \ \ i" + by metis + show "\y\Pi\<^sub>E I S. \x\\. y \ x" + proof + show "\U \ \. (\i \ I. \ i) \ U" + proof + have "restrict \ I \ PiE I (topspace \ X) \ \\" + using \ by (fastforce simp: \_def PiE_def dest: \) + then show "restrict \ I \ U" + using subU by blast + qed (rule \U \ \\) + next + show "(\i \ I. \ i) \ Pi\<^sub>E I S" + using \ by simp + qed + qed + qed + show ?thesis + apply (simp add: * closure_of_def PiE_iff set_eq_iff cong: conj_cong) + by metis +qed -lemma openin_product_topology_alt: - "openin (product_topology X I) S \ - (\x \ S. \U. finite {i \ I. U i \ topspace(X i)} \ - (\i \ I. openin (X i) (U i)) \ x \ Pi\<^sub>E I U \ Pi\<^sub>E I U \ S)" - apply (simp add: openin_product_topology arbitrary_union_of_alt product_topology_base_alt, auto) - apply (drule bspec; blast) +corollary closedin_product_topology: + "closedin (product_topology X I) (PiE I S) \ PiE I S = {} \ (\i \ I. closedin (X i) (S i))" + apply (simp add: PiE_eq PiE_eq_empty_iff closure_of_product_topology flip: closure_of_eq) + apply (metis closure_of_empty) done +corollary closedin_product_topology_singleton: + "f \ extensional I \ closedin (product_topology X I) {f} \ (\i \ I. closedin (X i) {f i})" + using PiE_singleton closedin_product_topology [of X I] + by (metis (no_types, lifting) all_not_in_conv insertI1) -text \The basic property of the product topology is the continuity of projections:\ + +subsubsection \The basic property of the product topology is the continuity of projections:\ lemma continuous_on_topo_product_coordinates [simp]: assumes "i \ I"