src/HOL/Analysis/Brouwer_Fixpoint.thy
changeset 70136 f03a01a18c6e
parent 69986 f2d327275065
child 70620 f95193669ad7
equal deleted inserted replaced
70135:ad6d4a14adb5 70136:f03a01a18c6e
   229 John Harrison writes: "This turns out to be sufficient (since any set in \<open>\<real>\<^sup>n\<close> can be
   229 John Harrison writes: "This turns out to be sufficient (since any set in \<open>\<real>\<^sup>n\<close> can be
   230 embedded as a closed subset of a convex subset of \<open>\<real>\<^sup>n\<^sup>+\<^sup>1\<close>) to derive the usual
   230 embedded as a closed subset of a convex subset of \<open>\<real>\<^sup>n\<^sup>+\<^sup>1\<close>) to derive the usual
   231 definitions, but we need to split them into two implications because of the lack of type
   231 definitions, but we need to split them into two implications because of the lack of type
   232 quantifiers. Then ENR turns out to be equivalent to ANR plus local compactness."\<close>
   232 quantifiers. Then ENR turns out to be equivalent to ANR plus local compactness."\<close>
   233 
   233 
   234 definition%important AR :: "'a::topological_space set \<Rightarrow> bool" where
   234 definition\<^marker>\<open>tag important\<close> AR :: "'a::topological_space set \<Rightarrow> bool" where
   235 "AR S \<equiv> \<forall>U. \<forall>S'::('a * real) set.
   235 "AR S \<equiv> \<forall>U. \<forall>S'::('a * real) set.
   236   S homeomorphic S' \<and> closedin (top_of_set U) S' \<longrightarrow> S' retract_of U"
   236   S homeomorphic S' \<and> closedin (top_of_set U) S' \<longrightarrow> S' retract_of U"
   237 
   237 
   238 definition%important ANR :: "'a::topological_space set \<Rightarrow> bool" where
   238 definition\<^marker>\<open>tag important\<close> ANR :: "'a::topological_space set \<Rightarrow> bool" where
   239 "ANR S \<equiv> \<forall>U. \<forall>S'::('a * real) set.
   239 "ANR S \<equiv> \<forall>U. \<forall>S'::('a * real) set.
   240   S homeomorphic S' \<and> closedin (top_of_set U) S'
   240   S homeomorphic S' \<and> closedin (top_of_set U) S'
   241   \<longrightarrow> (\<exists>T. openin (top_of_set U) T \<and> S' retract_of T)"
   241   \<longrightarrow> (\<exists>T. openin (top_of_set U) T \<and> S' retract_of T)"
   242 
   242 
   243 definition%important ENR :: "'a::topological_space set \<Rightarrow> bool" where
   243 definition\<^marker>\<open>tag important\<close> ENR :: "'a::topological_space set \<Rightarrow> bool" where
   244 "ENR S \<equiv> \<exists>U. open U \<and> S retract_of U"
   244 "ENR S \<equiv> \<exists>U. open U \<and> S retract_of U"
   245 
   245 
   246 text \<open>First, show that we do indeed get the "usual" properties of ARs and ANRs.\<close>
   246 text \<open>First, show that we do indeed get the "usual" properties of ARs and ANRs.\<close>
   247 
   247 
   248 lemma AR_imp_absolute_extensor:
   248 lemma AR_imp_absolute_extensor:
  4070   then show ?thesis
  4070   then show ?thesis
  4071     using finite_imp_ENR
  4071     using finite_imp_ENR
  4072     by (metis finite_insert infinite_imp_nonempty less_linear sphere_eq_empty sphere_trivial)
  4072     by (metis finite_insert infinite_imp_nonempty less_linear sphere_eq_empty sphere_trivial)
  4073 qed
  4073 qed
  4074 
  4074 
  4075 corollary%unimportant ANR_sphere:
  4075 corollary\<^marker>\<open>tag unimportant\<close> ANR_sphere:
  4076   fixes a :: "'a::euclidean_space"
  4076   fixes a :: "'a::euclidean_space"
  4077   shows "ANR(sphere a r)"
  4077   shows "ANR(sphere a r)"
  4078   by (simp add: ENR_imp_ANR ENR_sphere)
  4078   by (simp add: ENR_imp_ANR ENR_sphere)
  4079 
  4079 
  4080 subsubsection\<open>Spheres are connected, etc\<close>
  4080 subsubsection\<open>Spheres are connected, etc\<close>
  4252     by (simp add: B_def a1 h'_def keq)
  4252     by (simp add: B_def a1 h'_def keq)
  4253   qed
  4253   qed
  4254 qed
  4254 qed
  4255 
  4255 
  4256 
  4256 
  4257 corollary%unimportant nullhomotopic_into_ANR_extension:
  4257 corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_ANR_extension:
  4258   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
  4258   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
  4259   assumes "closed S"
  4259   assumes "closed S"
  4260       and contf: "continuous_on S f"
  4260       and contf: "continuous_on S f"
  4261       and "ANR T"
  4261       and "ANR T"
  4262       and fim: "f ` S \<subseteq> T"
  4262       and fim: "f ` S \<subseteq> T"
  4286     by (simp add: homotopic_from_subtopology)
  4286     by (simp add: homotopic_from_subtopology)
  4287   then show ?lhs
  4287   then show ?lhs
  4288     by (force elim: homotopic_with_eq [of _ _ _ g "\<lambda>x. c"] simp: \<open>\<And>x. x \<in> S \<Longrightarrow> g x = f x\<close>)
  4288     by (force elim: homotopic_with_eq [of _ _ _ g "\<lambda>x. c"] simp: \<open>\<And>x. x \<in> S \<Longrightarrow> g x = f x\<close>)
  4289 qed
  4289 qed
  4290 
  4290 
  4291 corollary%unimportant nullhomotopic_into_rel_frontier_extension:
  4291 corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_rel_frontier_extension:
  4292   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
  4292   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
  4293   assumes "closed S"
  4293   assumes "closed S"
  4294       and contf: "continuous_on S f"
  4294       and contf: "continuous_on S f"
  4295       and "convex T" "bounded T"
  4295       and "convex T" "bounded T"
  4296       and fim: "f ` S \<subseteq> rel_frontier T"
  4296       and fim: "f ` S \<subseteq> rel_frontier T"
  4297       and "S \<noteq> {}"
  4297       and "S \<noteq> {}"
  4298    shows "(\<exists>c. homotopic_with_canon (\<lambda>x. True) S (rel_frontier T) f (\<lambda>x. c)) \<longleftrightarrow>
  4298    shows "(\<exists>c. homotopic_with_canon (\<lambda>x. True) S (rel_frontier T) f (\<lambda>x. c)) \<longleftrightarrow>
  4299           (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> rel_frontier T \<and> (\<forall>x \<in> S. g x = f x))"
  4299           (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> rel_frontier T \<and> (\<forall>x \<in> S. g x = f x))"
  4300 by (simp add: nullhomotopic_into_ANR_extension assms ANR_rel_frontier_convex)
  4300 by (simp add: nullhomotopic_into_ANR_extension assms ANR_rel_frontier_convex)
  4301 
  4301 
  4302 corollary%unimportant nullhomotopic_into_sphere_extension:
  4302 corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_sphere_extension:
  4303   fixes f :: "'a::euclidean_space \<Rightarrow> 'b :: euclidean_space"
  4303   fixes f :: "'a::euclidean_space \<Rightarrow> 'b :: euclidean_space"
  4304   assumes "closed S" and contf: "continuous_on S f"
  4304   assumes "closed S" and contf: "continuous_on S f"
  4305       and "S \<noteq> {}" and fim: "f ` S \<subseteq> sphere a r"
  4305       and "S \<noteq> {}" and fim: "f ` S \<subseteq> sphere a r"
  4306     shows "((\<exists>c. homotopic_with_canon (\<lambda>x. True) S (sphere a r) f (\<lambda>x. c)) \<longleftrightarrow>
  4306     shows "((\<exists>c. homotopic_with_canon (\<lambda>x. True) S (sphere a r) f (\<lambda>x. c)) \<longleftrightarrow>
  4307            (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> sphere a r \<and> (\<forall>x \<in> S. g x = f x)))"
  4307            (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> sphere a r \<and> (\<forall>x \<in> S. g x = f x)))"
  4319     apply (rule nullhomotopic_into_rel_frontier_extension [OF \<open>closed S\<close> contf convex_cball bounded_cball])
  4319     apply (rule nullhomotopic_into_rel_frontier_extension [OF \<open>closed S\<close> contf convex_cball bounded_cball])
  4320     apply (rule \<open>S \<noteq> {}\<close>)
  4320     apply (rule \<open>S \<noteq> {}\<close>)
  4321     done
  4321     done
  4322 qed
  4322 qed
  4323 
  4323 
  4324 proposition%unimportant Borsuk_map_essential_bounded_component:
  4324 proposition\<^marker>\<open>tag unimportant\<close> Borsuk_map_essential_bounded_component:
  4325   fixes a :: "'a :: euclidean_space"
  4325   fixes a :: "'a :: euclidean_space"
  4326   assumes "compact S" and "a \<notin> S"
  4326   assumes "compact S" and "a \<notin> S"
  4327    shows "bounded (connected_component_set (- S) a) \<longleftrightarrow>
  4327    shows "bounded (connected_component_set (- S) a) \<longleftrightarrow>
  4328           \<not>(\<exists>c. homotopic_with_canon (\<lambda>x. True) S (sphere 0 1)
  4328           \<not>(\<exists>c. homotopic_with_canon (\<lambda>x. True) S (sphere 0 1)
  4329                                (\<lambda>x. inverse(norm(x - a)) *\<^sub>R (x - a)) (\<lambda>x. c))"
  4329                                (\<lambda>x. inverse(norm(x - a)) *\<^sub>R (x - a)) (\<lambda>x. c))"
  4576     show "S \<times> \<Union>(F ` T) \<subseteq> U"
  4576     show "S \<times> \<Union>(F ` T) \<subseteq> U"
  4577       using F by auto
  4577       using F by auto
  4578   qed
  4578   qed
  4579 qed
  4579 qed
  4580 
  4580 
  4581 proposition%unimportant homotopic_neighbourhood_extension:
  4581 proposition\<^marker>\<open>tag unimportant\<close> homotopic_neighbourhood_extension:
  4582   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
  4582   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
  4583   assumes contf: "continuous_on S f" and fim: "f ` S \<subseteq> U"
  4583   assumes contf: "continuous_on S f" and fim: "f ` S \<subseteq> U"
  4584       and contg: "continuous_on S g" and gim: "g ` S \<subseteq> U"
  4584       and contg: "continuous_on S g" and gim: "g ` S \<subseteq> U"
  4585       and clo: "closedin (top_of_set S) T"
  4585       and clo: "closedin (top_of_set S) T"
  4586       and "ANR U" and hom: "homotopic_with_canon (\<lambda>x. True) T U f g"
  4586       and "ANR U" and hom: "homotopic_with_canon (\<lambda>x. True) T U f g"
  4641   ultimately show ?thesis
  4641   ultimately show ?thesis
  4642     by (blast intro: that)
  4642     by (blast intro: that)
  4643 qed
  4643 qed
  4644 
  4644 
  4645 text\<open> Homotopy on a union of closed-open sets.\<close>
  4645 text\<open> Homotopy on a union of closed-open sets.\<close>
  4646 proposition%unimportant homotopic_on_clopen_Union:
  4646 proposition\<^marker>\<open>tag unimportant\<close> homotopic_on_clopen_Union:
  4647   fixes \<F> :: "'a::euclidean_space set set"
  4647   fixes \<F> :: "'a::euclidean_space set set"
  4648   assumes "\<And>S. S \<in> \<F> \<Longrightarrow> closedin (top_of_set (\<Union>\<F>)) S"
  4648   assumes "\<And>S. S \<in> \<F> \<Longrightarrow> closedin (top_of_set (\<Union>\<F>)) S"
  4649       and "\<And>S. S \<in> \<F> \<Longrightarrow> openin (top_of_set (\<Union>\<F>)) S"
  4649       and "\<And>S. S \<in> \<F> \<Longrightarrow> openin (top_of_set (\<Union>\<F>)) S"
  4650       and "\<And>S. S \<in> \<F> \<Longrightarrow> homotopic_with_canon (\<lambda>x. True) S T f g"
  4650       and "\<And>S. S \<in> \<F> \<Longrightarrow> homotopic_with_canon (\<lambda>x. True) S T f g"
  4651   shows "homotopic_with_canon (\<lambda>x. True) (\<Union>\<F>) T f g"
  4651   shows "homotopic_with_canon (\<lambda>x. True) (\<Union>\<F>) T f g"