2019 apply (auto simp: continuous_on_def) |
2019 apply (auto simp: continuous_on_def) |
2020 apply (meson dist_not_less_zero le_less less_le_trans) |
2020 apply (meson dist_not_less_zero le_less less_le_trans) |
2021 done |
2021 done |
2022 qed |
2022 qed |
2023 |
2023 |
|
2024 proposition frontier_subset_retraction: |
|
2025 fixes S :: "'a::euclidean_space set" |
|
2026 assumes "bounded S" and fros: "frontier S \<subseteq> T" |
|
2027 and contf: "continuous_on (closure S) f" |
|
2028 and fim: "f ` S \<subseteq> T" |
|
2029 and fid: "\<And>x. x \<in> T \<Longrightarrow> f x = x" |
|
2030 shows "S \<subseteq> T" |
|
2031 proof (rule ccontr) |
|
2032 assume "\<not> S \<subseteq> T" |
|
2033 then obtain a where "a \<in> S" "a \<notin> T" by blast |
|
2034 define g where "g \<equiv> \<lambda>z. if z \<in> closure S then f z else z" |
|
2035 have "continuous_on (closure S \<union> closure(-S)) g" |
|
2036 unfolding g_def |
|
2037 apply (rule continuous_on_cases) |
|
2038 using fros fid frontier_closures |
|
2039 apply (auto simp: contf continuous_on_id) |
|
2040 done |
|
2041 moreover have "closure S \<union> closure(- S) = UNIV" |
|
2042 using closure_Un by fastforce |
|
2043 ultimately have contg: "continuous_on UNIV g" by metis |
|
2044 obtain B where "0 < B" and B: "closure S \<subseteq> ball a B" |
|
2045 using \<open>bounded S\<close> bounded_subset_ballD by blast |
|
2046 have notga: "g x \<noteq> a" for x |
|
2047 unfolding g_def using fros fim \<open>a \<notin> T\<close> |
|
2048 apply (auto simp: frontier_def) |
|
2049 using fid interior_subset apply fastforce |
|
2050 by (simp add: \<open>a \<in> S\<close> closure_def) |
|
2051 define h where "h \<equiv> (\<lambda>y. a + (B / norm(y - a)) *\<^sub>R (y - a)) \<circ> g" |
|
2052 have "\<not> (frontier (cball a B) retract_of (cball a B))" |
|
2053 by (metis no_retraction_cball \<open>0 < B\<close>) |
|
2054 then have "\<And>k. \<not> retraction (cball a B) (frontier (cball a B)) k" |
|
2055 by (simp add: retract_of_def) |
|
2056 moreover have "retraction (cball a B) (frontier (cball a B)) h" |
|
2057 unfolding retraction_def |
|
2058 proof (intro conjI ballI) |
|
2059 show "frontier (cball a B) \<subseteq> cball a B" |
|
2060 by (force simp:) |
|
2061 show "continuous_on (cball a B) h" |
|
2062 unfolding h_def |
|
2063 apply (intro continuous_intros) |
|
2064 using contg continuous_on_subset notga apply auto |
|
2065 done |
|
2066 show "h ` cball a B \<subseteq> frontier (cball a B)" |
|
2067 using \<open>0 < B\<close> by (auto simp: h_def notga dist_norm) |
|
2068 show "\<And>x. x \<in> frontier (cball a B) \<Longrightarrow> h x = x" |
|
2069 apply (auto simp: h_def algebra_simps) |
|
2070 apply (simp add: vector_add_divide_simps notga) |
|
2071 by (metis (no_types, hide_lams) B add.commute dist_commute dist_norm g_def mem_ball not_less_iff_gr_or_eq subset_eq) |
|
2072 qed |
|
2073 ultimately show False by simp |
|
2074 qed |
|
2075 |
2024 subsection\<open>Retractions\<close> |
2076 subsection\<open>Retractions\<close> |
2025 |
2077 |
2026 lemma retraction: |
2078 lemma retraction: |
2027 "retraction s t r \<longleftrightarrow> |
2079 "retraction s t r \<longleftrightarrow> |
2028 t \<subseteq> s \<and> continuous_on s r \<and> r ` s = t \<and> (\<forall>x \<in> t. r x = x)" |
2080 t \<subseteq> s \<and> continuous_on s r \<and> r ` s = t \<and> (\<forall>x \<in> t. r x = x)" |
3190 lemma retract_of_UNIV: |
3242 lemma retract_of_UNIV: |
3191 fixes S :: "'a::euclidean_space set" |
3243 fixes S :: "'a::euclidean_space set" |
3192 shows "S retract_of UNIV \<longleftrightarrow> AR S \<and> closed S" |
3244 shows "S retract_of UNIV \<longleftrightarrow> AR S \<and> closed S" |
3193 by (metis AR_ANR AR_imp_retract ENR_def ENR_imp_ANR closed_UNIV closed_closedin contractible_UNIV empty_not_UNIV open_UNIV retract_of_closed retract_of_contractible retract_of_empty(1) subtopology_UNIV) |
3245 by (metis AR_ANR AR_imp_retract ENR_def ENR_imp_ANR closed_UNIV closed_closedin contractible_UNIV empty_not_UNIV open_UNIV retract_of_closed retract_of_contractible retract_of_empty(1) subtopology_UNIV) |
3194 |
3246 |
3195 lemma compact_AR [simp]: |
3247 lemma compact_AR: |
3196 fixes S :: "'a::euclidean_space set" |
3248 fixes S :: "'a::euclidean_space set" |
3197 shows "compact S \<and> AR S \<longleftrightarrow> compact S \<and> S retract_of UNIV" |
3249 shows "compact S \<and> AR S \<longleftrightarrow> compact S \<and> S retract_of UNIV" |
3198 using compact_imp_closed retract_of_UNIV by blast |
3250 using compact_imp_closed retract_of_UNIV by blast |
3199 |
3251 |
3200 subsection\<open>More properties of ARs, ANRs and ENRs\<close> |
3252 subsection\<open>More properties of ARs, ANRs and ENRs\<close> |
4187 by blast |
4239 by blast |
4188 qed |
4240 qed |
4189 then show ?thesis by blast |
4241 then show ?thesis by blast |
4190 qed |
4242 qed |
4191 |
4243 |
|
4244 subsection\<open>The complement of a set and path-connectedness\<close> |
|
4245 |
|
4246 text\<open>Complement in dimension N > 1 of set homeomorphic to any interval in |
|
4247 any dimension is (path-)connected. This naively generalizes the argument |
|
4248 in Ryuji Maehara's paper "The Jordan curve theorem via the Brouwer fixed point theorem", |
|
4249 American Mathematical Monthly 1984.\<close> |
|
4250 |
|
4251 lemma unbounded_components_complement_absolute_retract: |
|
4252 fixes S :: "'a::euclidean_space set" |
|
4253 assumes C: "C \<in> components(- S)" and S: "compact S" "AR S" |
|
4254 shows "\<not> bounded C" |
|
4255 proof - |
|
4256 obtain y where y: "C = connected_component_set (- S) y" and "y \<notin> S" |
|
4257 using C by (auto simp: components_def) |
|
4258 have "open(- S)" |
|
4259 using S by (simp add: closed_open compact_eq_bounded_closed) |
|
4260 have "S retract_of UNIV" |
|
4261 using S compact_AR by blast |
|
4262 then obtain r where contr: "continuous_on UNIV r" and ontor: "range r \<subseteq> S" |
|
4263 and r: "\<And>x. x \<in> S \<Longrightarrow> r x = x" |
|
4264 by (auto simp: retract_of_def retraction_def) |
|
4265 show ?thesis |
|
4266 proof |
|
4267 assume "bounded C" |
|
4268 have "connected_component_set (- S) y \<subseteq> S" |
|
4269 proof (rule frontier_subset_retraction) |
|
4270 show "bounded (connected_component_set (- S) y)" |
|
4271 using \<open>bounded C\<close> y by blast |
|
4272 show "frontier (connected_component_set (- S) y) \<subseteq> S" |
|
4273 using C \<open>compact S\<close> compact_eq_bounded_closed frontier_of_components_closed_complement y by blast |
|
4274 show "continuous_on (closure (connected_component_set (- S) y)) r" |
|
4275 by (blast intro: continuous_on_subset [OF contr]) |
|
4276 qed (use ontor r in auto) |
|
4277 with \<open>y \<notin> S\<close> show False by force |
|
4278 qed |
|
4279 qed |
|
4280 |
|
4281 lemma connected_complement_absolute_retract: |
|
4282 fixes S :: "'a::euclidean_space set" |
|
4283 assumes S: "compact S" "AR S" and 2: "2 \<le> DIM('a)" |
|
4284 shows "connected(- S)" |
|
4285 proof - |
|
4286 have "S retract_of UNIV" |
|
4287 using S compact_AR by blast |
|
4288 show ?thesis |
|
4289 apply (clarsimp simp: connected_iff_connected_component_eq) |
|
4290 apply (rule cobounded_unique_unbounded_component [OF _ 2]) |
|
4291 apply (simp add: \<open>compact S\<close> compact_imp_bounded) |
|
4292 apply (meson ComplI S componentsI unbounded_components_complement_absolute_retract)+ |
|
4293 done |
|
4294 qed |
|
4295 |
|
4296 lemma path_connected_complement_absolute_retract: |
|
4297 fixes S :: "'a::euclidean_space set" |
|
4298 assumes "compact S" "AR S" "2 \<le> DIM('a)" |
|
4299 shows "path_connected(- S)" |
|
4300 using connected_complement_absolute_retract [OF assms] |
|
4301 using \<open>compact S\<close> compact_eq_bounded_closed connected_open_path_connected by blast |
|
4302 |
|
4303 theorem connected_complement_homeomorphic_convex_compact: |
|
4304 fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" |
|
4305 assumes hom: "S homeomorphic T" and T: "convex T" "compact T" and 2: "2 \<le> DIM('a)" |
|
4306 shows "connected(- S)" |
|
4307 proof (cases "S = {}") |
|
4308 case True |
|
4309 then show ?thesis |
|
4310 by (simp add: connected_UNIV) |
|
4311 next |
|
4312 case False |
|
4313 show ?thesis |
|
4314 proof (rule connected_complement_absolute_retract) |
|
4315 show "compact S" |
|
4316 using \<open>compact T\<close> hom homeomorphic_compactness by auto |
|
4317 show "AR S" |
|
4318 by (meson AR_ANR False \<open>convex T\<close> convex_imp_ANR convex_imp_contractible hom homeomorphic_ANR_iff_ANR homeomorphic_contractible_eq) |
|
4319 qed (rule 2) |
|
4320 qed |
|
4321 |
|
4322 corollary path_connected_complement_homeomorphic_convex_compact: |
|
4323 fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" |
|
4324 assumes hom: "S homeomorphic T" "convex T" "compact T" "2 \<le> DIM('a)" |
|
4325 shows "path_connected(- S)" |
|
4326 using connected_complement_homeomorphic_convex_compact [OF assms] |
|
4327 using \<open>compact T\<close> compact_eq_bounded_closed connected_open_path_connected hom homeomorphic_compactness by blast |
4192 |
4328 |
4193 end |
4329 end |