diff -r 1a85c1495d1f -r cc89a395b5a3 src/HOL/Analysis/Function_Topology.thy --- a/src/HOL/Analysis/Function_Topology.thy Fri Apr 05 11:22:00 2019 +0100 +++ b/src/HOL/Analysis/Function_Topology.thy Fri Apr 05 15:02:46 2019 +0100 @@ -565,8 +565,14 @@ end +lemma open_PiE [intro?]: + fixes X::"'i \ ('b::topological_space) set" + assumes "\i. open (X i)" "finite {i. X i \ UNIV}" + shows "open (Pi\<^sub>E UNIV X)" + by (simp add: assms open_fun_def product_topology_basis) + lemma euclidean_product_topology: - "euclidean = product_topology (\i. euclidean::('b::topological_space) topology) UNIV" + "product_topology (\i. euclidean::('b::topological_space) topology) UNIV = euclidean" by (metis open_openin topology_eq open_fun_def) proposition product_topology_basis': @@ -582,8 +588,7 @@ have **: "finite {i. X i \ UNIV}" unfolding X_def V_def J_def using assms(1) by auto have "open (Pi\<^sub>E UNIV X)" - unfolding open_fun_def - by (simp_all add: * ** product_topology_basis) + by (simp add: "*" "**" open_PiE) moreover have "Pi\<^sub>E UNIV X = {f. \i\I. f (x i) \ U i}" apply (auto simp add: PiE_iff) unfolding X_def V_def J_def proof (auto) @@ -618,8 +623,8 @@ lemma continuous_on_product_then_coordinatewise_UNIV: assumes "continuous_on UNIV f" shows "continuous_on UNIV (\x. f x i)" - using assms unfolding continuous_map_iff_continuous2 [symmetric] euclidean_product_topology - by fastforce + unfolding continuous_map_iff_continuous2 [symmetric] + by (rule continuous_map_product_then_coordinatewise [where I=UNIV]) (use assms in \auto simp: euclidean_product_topology\) lemma continuous_on_product_then_coordinatewise: assumes "continuous_on S f" @@ -724,7 +729,8 @@ text \\B i\ is a countable basis of neighborhoods of \x\<^sub>i\.\ define B where "B = (\i. (A (x i))`UNIV \ {UNIV})" have "countable (B i)" for i unfolding B_def by auto - + have open_B: "\X i. X \ B i \ open X" + by (auto simp: B_def A) define K where "K = {Pi\<^sub>E UNIV X | X. (\i. X i \ B i) \ finite {i. X i \ UNIV}}" have "Pi\<^sub>E UNIV (\i. UNIV) \ K" unfolding K_def B_def by auto @@ -737,10 +743,7 @@ have "x \ k" if "k \ K" for k using that unfolding K_def B_def apply auto using A(1) by auto have "open k" if "k \ K" for k - using that unfolding open_fun_def K_def B_def apply (auto) - apply (rule product_topology_basis) - unfolding topspace_euclidean by (auto, metis imageE open_UNIV A(2)) - + using that unfolding K_def by (blast intro: open_B open_PiE elim: ) have Inc: "\k\K. k \ U" if "open U \ x \ U" for U proof - have "openin (product_topology (\i. euclidean) UNIV) U" "x \ U" @@ -854,9 +857,7 @@ next fix U assume "U \ K" show "open U" - using \U \ K\ unfolding open_fun_def K_def apply (auto) - apply (rule product_topology_basis) - using \\V. V \ B2 \ open V\ open_UNIV by auto + using \U \ K\ unfolding open_fun_def K_def by clarify (metis \U \ K\ i open_PiE open_fun_def) qed show ?thesis using i ii iii by auto