src/HOL/Analysis/Brouwer_Fixpoint.thy
changeset 64122 74fde524799e
parent 64006 0de4736dad8b
child 64267 b9a1486e79be
equal deleted inserted replaced
64121:f2c8f6b11dcf 64122:74fde524799e
  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>
  3891     done
  3943     done
  3892   ultimately show ?thesis
  3944   ultimately show ?thesis
  3893     apply (simp add: ENR_def)
  3945     apply (simp add: ENR_def)
  3894     apply (rule_tac x = "{x. x \<in> UNIV \<and>
  3946     apply (rule_tac x = "{x. x \<in> UNIV \<and>
  3895                              closest_point (affine hull S) x \<in> (- {a})}" in exI)
  3947                              closest_point (affine hull S) x \<in> (- {a})}" in exI)
  3896     apply (simp add: open_openin)
  3948     apply simp
  3897     done
  3949     done
  3898 qed
  3950 qed
  3899 
  3951 
  3900 lemma ANR_rel_frontier_convex:
  3952 lemma ANR_rel_frontier_convex:
  3901                  fixes S :: "'a::euclidean_space set"
  3953                  fixes S :: "'a::euclidean_space set"
  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