diff -r ed38f9a834d8 -r 05a2b3b20664 src/HOL/Analysis/Homeomorphism.thy --- a/src/HOL/Analysis/Homeomorphism.thy Thu Jan 05 16:03:23 2017 +0000 +++ b/src/HOL/Analysis/Homeomorphism.thy Thu Jan 05 16:37:49 2017 +0000 @@ -1388,4 +1388,127 @@ shows "g1 x = g2 x" using covering_space_lift_unique_gen [of c p S] in_components_self assms ex_in_conv by blast + +lemma covering_space_locally: + fixes p :: "'a::real_normed_vector \ 'b::real_normed_vector" + assumes loc: "locally \ C" and cov: "covering_space C p S" + and pim: "\T. \T \ C; \ T\ \ \(p ` T)" + shows "locally \ S" +proof - + have "locally \ (p ` C)" + apply (rule locally_open_map_image [OF loc]) + using cov covering_space_imp_continuous apply blast + using cov covering_space_imp_surjective covering_space_open_map apply blast + by (simp add: pim) + then show ?thesis + using covering_space_imp_surjective [OF cov] by metis +qed + + +proposition covering_space_locally_eq: + fixes p :: "'a::real_normed_vector \ 'b::real_normed_vector" + assumes cov: "covering_space C p S" + and pim: "\T. \T \ C; \ T\ \ \(p ` T)" + and qim: "\q U. \U \ S; continuous_on U q; \ U\ \ \(q ` U)" + shows "locally \ S \ locally \ C" + (is "?lhs = ?rhs") +proof + assume L: ?lhs + show ?rhs + proof (rule locallyI) + fix V x + assume V: "openin (subtopology euclidean C) V" and "x \ V" + have "p x \ p ` C" + by (metis IntE V \x \ V\ imageI openin_open) + then obtain T \ where "p x \ T" + and opeT: "openin (subtopology euclidean S) T" + and veq: "\\ = {x \ C. p x \ T}" + and ope: "\U\\. openin (subtopology euclidean C) U" + and hom: "\U\\. \q. homeomorphism U T p q" + using cov unfolding covering_space_def by (blast intro: that) + have "x \ \\" + using V veq \p x \ T\ \x \ V\ openin_imp_subset by fastforce + then obtain U where "x \ U" "U \ \" + by blast + then obtain q where opeU: "openin (subtopology euclidean C) U" and q: "homeomorphism U T p q" + using ope hom by blast + with V have "openin (subtopology euclidean C) (U \ V)" + by blast + then have UV: "openin (subtopology euclidean S) (p ` (U \ V))" + using cov covering_space_open_map by blast + obtain W W' where opeW: "openin (subtopology euclidean S) W" and "\ W'" "p x \ W" "W \ W'" and W'sub: "W' \ p ` (U \ V)" + using locallyE [OF L UV] \x \ U\ \x \ V\ by blast + then have "W \ T" + by (metis Int_lower1 q homeomorphism_image1 image_Int_subset order_trans) + show "\U Z. openin (subtopology euclidean C) U \ + \ Z \ x \ U \ U \ Z \ Z \ V" + proof (intro exI conjI) + have "openin (subtopology euclidean T) W" + by (meson opeW opeT openin_imp_subset openin_subset_trans \W \ T\) + then have "openin (subtopology euclidean U) (q ` W)" + by (meson homeomorphism_imp_open_map homeomorphism_symD q) + then show "openin (subtopology euclidean C) (q ` W)" + using opeU openin_trans by blast + show "\ (q ` W')" + by (metis (mono_tags, lifting) Int_subset_iff UV W'sub \\ W'\ continuous_on_subset dual_order.trans homeomorphism_def image_Int_subset openin_imp_subset q qim) + show "x \ q ` W" + by (metis \p x \ W\ \x \ U\ homeomorphism_def imageI q) + show "q ` W \ q ` W'" + using \W \ W'\ by blast + have "W' \ p ` V" + using W'sub by blast + then show "q ` W' \ V" + using W'sub homeomorphism_apply1 [OF q] by auto + qed + qed +next + assume ?rhs + then show ?lhs + using cov covering_space_locally pim by blast +qed + +lemma covering_space_locally_compact_eq: + fixes p :: "'a::real_normed_vector \ 'b::real_normed_vector" + assumes "covering_space C p S" + shows "locally compact S \ locally compact C" + apply (rule covering_space_locally_eq [OF assms]) + apply (meson assms compact_continuous_image continuous_on_subset covering_space_imp_continuous) + using compact_continuous_image by blast + +lemma covering_space_locally_connected_eq: + fixes p :: "'a::real_normed_vector \ 'b::real_normed_vector" + assumes "covering_space C p S" + shows "locally connected S \ locally connected C" + apply (rule covering_space_locally_eq [OF assms]) + apply (meson connected_continuous_image assms continuous_on_subset covering_space_imp_continuous) + using connected_continuous_image by blast + +lemma covering_space_locally_path_connected_eq: + fixes p :: "'a::real_normed_vector \ 'b::real_normed_vector" + assumes "covering_space C p S" + shows "locally path_connected S \ locally path_connected C" + apply (rule covering_space_locally_eq [OF assms]) + apply (meson path_connected_continuous_image assms continuous_on_subset covering_space_imp_continuous) + using path_connected_continuous_image by blast + + +lemma covering_space_locally_compact: + fixes p :: "'a::real_normed_vector \ 'b::real_normed_vector" + assumes "locally compact C" "covering_space C p S" + shows "locally compact S" + using assms covering_space_locally_compact_eq by blast + + +lemma covering_space_locally_connected: + fixes p :: "'a::real_normed_vector \ 'b::real_normed_vector" + assumes "locally connected C" "covering_space C p S" + shows "locally connected S" + using assms covering_space_locally_connected_eq by blast + +lemma covering_space_locally_path_connected: + fixes p :: "'a::real_normed_vector \ 'b::real_normed_vector" + assumes "locally path_connected C" "covering_space C p S" + shows "locally path_connected S" + using assms covering_space_locally_path_connected_eq by blast + end