| author | wenzelm | 
| Sat, 10 Oct 2020 21:12:20 +0200 | |
| changeset 72425 | d0937d55eb90 | 
| parent 71193 | 777d673fa672 | 
| child 72490 | df988eac234e | 
| permissions | -rw-r--r-- | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1 | section \<open>Absolute Retracts, Absolute Neighbourhood Retracts and Euclidean Neighbourhood Retracts\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 3 | theory Retracts | 
| 71031 | 4 | imports | 
| 5 | Brouwer_Fixpoint | |
| 6 | Continuous_Extension | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 7 | begin | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 8 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 9 | text \<open>Absolute retracts (AR), absolute neighbourhood retracts (ANR) and also Euclidean neighbourhood | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 10 | retracts (ENR). We define AR and ANR by specializing the standard definitions for a set to embedding | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 11 | in spaces of higher dimension. | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 12 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 13 | John Harrison writes: "This turns out to be sufficient (since any set in \<open>\<real>\<^sup>n\<close> can be | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 14 | embedded as a closed subset of a convex subset of \<open>\<real>\<^sup>n\<^sup>+\<^sup>1\<close>) to derive the usual | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 15 | definitions, but we need to split them into two implications because of the lack of type | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 16 | quantifiers. Then ENR turns out to be equivalent to ANR plus local compactness."\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 17 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 18 | definition\<^marker>\<open>tag important\<close> AR :: "'a::topological_space set \<Rightarrow> bool" where | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 19 | "AR S \<equiv> \<forall>U. \<forall>S'::('a * real) set.
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 20 | S homeomorphic S' \<and> closedin (top_of_set U) S' \<longrightarrow> S' retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 21 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 22 | definition\<^marker>\<open>tag important\<close> ANR :: "'a::topological_space set \<Rightarrow> bool" where | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 23 | "ANR S \<equiv> \<forall>U. \<forall>S'::('a * real) set.
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 24 | S homeomorphic S' \<and> closedin (top_of_set U) S' | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 25 | \<longrightarrow> (\<exists>T. openin (top_of_set U) T \<and> S' retract_of T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 26 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 27 | definition\<^marker>\<open>tag important\<close> ENR :: "'a::topological_space set \<Rightarrow> bool" where | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 28 | "ENR S \<equiv> \<exists>U. open U \<and> S retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 29 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 30 | text \<open>First, show that we do indeed get the "usual" properties of ARs and ANRs.\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 31 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 32 | lemma AR_imp_absolute_extensor: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 33 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 34 | assumes "AR S" and contf: "continuous_on T f" and "f ` T \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 35 | and cloUT: "closedin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 36 | obtains g where "continuous_on U g" "g ` U \<subseteq> S" "\<And>x. x \<in> T \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 37 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 38 |   have "aff_dim S < int (DIM('b \<times> real))"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 39 | using aff_dim_le_DIM [of S] by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 40 |   then obtain C and S' :: "('b * real) set"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 41 |           where C: "convex C" "C \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 42 | and cloCS: "closedin (top_of_set C) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 43 | and hom: "S homeomorphic S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 44 | by (metis that homeomorphic_closedin_convex) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 45 | then have "S' retract_of C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 46 | using \<open>AR S\<close> by (simp add: AR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 47 | then obtain r where "S' \<subseteq> C" and contr: "continuous_on C r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 48 | and "r ` C \<subseteq> S'" and rid: "\<And>x. x\<in>S' \<Longrightarrow> r x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 49 | by (auto simp: retraction_def retract_of_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 50 | obtain g h where "homeomorphism S S' g h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 51 | using hom by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 52 | then have "continuous_on (f ` T) g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 53 | by (meson \<open>f ` T \<subseteq> S\<close> continuous_on_subset homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 54 | then have contgf: "continuous_on T (g \<circ> f)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 55 | by (metis continuous_on_compose contf) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 56 | have gfTC: "(g \<circ> f) ` T \<subseteq> C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 57 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 58 | have "g ` S = S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 59 | by (metis (no_types) \<open>homeomorphism S S' g h\<close> homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 60 | with \<open>S' \<subseteq> C\<close> \<open>f ` T \<subseteq> S\<close> show ?thesis by force | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 61 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 62 | obtain f' where f': "continuous_on U f'" "f' ` U \<subseteq> C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 63 | "\<And>x. x \<in> T \<Longrightarrow> f' x = (g \<circ> f) x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 64 | by (metis Dugundji [OF C cloUT contgf gfTC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 65 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 66 | proof (rule_tac g = "h \<circ> r \<circ> f'" in that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 67 | show "continuous_on U (h \<circ> r \<circ> f')" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 68 | apply (intro continuous_on_compose f') | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 69 | using continuous_on_subset contr f' apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 70 | by (meson \<open>homeomorphism S S' g h\<close> \<open>r ` C \<subseteq> S'\<close> continuous_on_subset \<open>f' ` U \<subseteq> C\<close> homeomorphism_def image_mono) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 71 | show "(h \<circ> r \<circ> f') ` U \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 72 | using \<open>homeomorphism S S' g h\<close> \<open>r ` C \<subseteq> S'\<close> \<open>f' ` U \<subseteq> C\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 73 | by (fastforce simp: homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 74 | show "\<And>x. x \<in> T \<Longrightarrow> (h \<circ> r \<circ> f') x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 75 | using \<open>homeomorphism S S' g h\<close> \<open>f ` T \<subseteq> S\<close> f' | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 76 | by (auto simp: rid homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 77 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 78 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 79 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 80 | lemma AR_imp_absolute_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 81 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 82 | assumes "AR S" "S homeomorphic S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 83 | and clo: "closedin (top_of_set U) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 84 | shows "S' retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 85 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 86 | obtain g h where hom: "homeomorphism S S' g h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 87 | using assms by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 88 | have h: "continuous_on S' h" " h ` S' \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 89 | using hom homeomorphism_def apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 90 | apply (metis hom equalityE homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 91 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 92 | obtain h' where h': "continuous_on U h'" "h' ` U \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 93 | and h'h: "\<And>x. x \<in> S' \<Longrightarrow> h' x = h x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 94 | by (blast intro: AR_imp_absolute_extensor [OF \<open>AR S\<close> h clo]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 95 | have [simp]: "S' \<subseteq> U" using clo closedin_limpt by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 96 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 97 | proof (simp add: retraction_def retract_of_def, intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 98 | show "continuous_on U (g \<circ> h')" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 99 | apply (intro continuous_on_compose h') | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 100 | apply (meson hom continuous_on_subset h' homeomorphism_cont1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 101 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 102 | show "(g \<circ> h') ` U \<subseteq> S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 103 | using h' by clarsimp (metis hom subsetD homeomorphism_def imageI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 104 | show "\<forall>x\<in>S'. (g \<circ> h') x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 105 | by clarsimp (metis h'h hom homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 106 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 107 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 108 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 109 | lemma AR_imp_absolute_retract_UNIV: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 110 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 111 | assumes "AR S" and hom: "S homeomorphic S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 112 | and clo: "closed S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 113 | shows "S' retract_of UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 114 | apply (rule AR_imp_absolute_retract [OF \<open>AR S\<close> hom]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 115 | using clo closed_closedin by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 116 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 117 | lemma absolute_extensor_imp_AR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 118 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 119 | assumes "\<And>f :: 'a * real \<Rightarrow> 'a. | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 120 | \<And>U T. \<lbrakk>continuous_on T f; f ` T \<subseteq> S; | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 121 | closedin (top_of_set U) T\<rbrakk> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 122 | \<Longrightarrow> \<exists>g. continuous_on U g \<and> g ` U \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 123 | shows "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 124 | proof (clarsimp simp: AR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 125 |   fix U and T :: "('a * real) set"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 126 | assume "S homeomorphic T" and clo: "closedin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 127 | then obtain g h where hom: "homeomorphism S T g h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 128 | by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 129 | have h: "continuous_on T h" " h ` T \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 130 | using hom homeomorphism_def apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 131 | apply (metis hom equalityE homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 132 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 133 | obtain h' where h': "continuous_on U h'" "h' ` U \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 134 | and h'h: "\<forall>x\<in>T. h' x = h x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 135 | using assms [OF h clo] by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 136 | have [simp]: "T \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 137 | using clo closedin_imp_subset by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 138 | show "T retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 139 | proof (simp add: retraction_def retract_of_def, intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 140 | show "continuous_on U (g \<circ> h')" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 141 | apply (intro continuous_on_compose h') | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 142 | apply (meson hom continuous_on_subset h' homeomorphism_cont1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 143 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 144 | show "(g \<circ> h') ` U \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 145 | using h' by clarsimp (metis hom subsetD homeomorphism_def imageI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 146 | show "\<forall>x\<in>T. (g \<circ> h') x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 147 | by clarsimp (metis h'h hom homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 148 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 149 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 150 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 151 | lemma AR_eq_absolute_extensor: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 152 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 153 | shows "AR S \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 154 | (\<forall>f :: 'a * real \<Rightarrow> 'a. | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 155 | \<forall>U T. continuous_on T f \<longrightarrow> f ` T \<subseteq> S \<longrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 156 | closedin (top_of_set U) T \<longrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 157 | (\<exists>g. continuous_on U g \<and> g ` U \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 158 | apply (rule iffI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 159 | apply (metis AR_imp_absolute_extensor) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 160 | apply (simp add: absolute_extensor_imp_AR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 161 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 162 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 163 | lemma AR_imp_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 164 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 165 | assumes "AR S \<and> closedin (top_of_set U) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 166 | shows "S retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 167 | using AR_imp_absolute_retract assms homeomorphic_refl by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 168 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 169 | lemma AR_homeomorphic_AR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 170 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 171 | assumes "AR T" "S homeomorphic T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 172 | shows "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 173 | unfolding AR_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 174 | by (metis assms AR_imp_absolute_retract homeomorphic_trans [of _ S] homeomorphic_sym) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 175 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 176 | lemma homeomorphic_AR_iff_AR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 177 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 178 | shows "S homeomorphic T \<Longrightarrow> AR S \<longleftrightarrow> AR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 179 | by (metis AR_homeomorphic_AR homeomorphic_sym) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 180 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 181 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 182 | lemma ANR_imp_absolute_neighbourhood_extensor: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 183 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 184 | assumes "ANR S" and contf: "continuous_on T f" and "f ` T \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 185 | and cloUT: "closedin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 186 | obtains V g where "T \<subseteq> V" "openin (top_of_set U) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 187 | "continuous_on V g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 188 | "g ` V \<subseteq> S" "\<And>x. x \<in> T \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 189 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 190 |   have "aff_dim S < int (DIM('b \<times> real))"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 191 | using aff_dim_le_DIM [of S] by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 192 |   then obtain C and S' :: "('b * real) set"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 193 |           where C: "convex C" "C \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 194 | and cloCS: "closedin (top_of_set C) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 195 | and hom: "S homeomorphic S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 196 | by (metis that homeomorphic_closedin_convex) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 197 | then obtain D where opD: "openin (top_of_set C) D" and "S' retract_of D" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 198 | using \<open>ANR S\<close> by (auto simp: ANR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 199 | then obtain r where "S' \<subseteq> D" and contr: "continuous_on D r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 200 | and "r ` D \<subseteq> S'" and rid: "\<And>x. x \<in> S' \<Longrightarrow> r x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 201 | by (auto simp: retraction_def retract_of_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 202 | obtain g h where homgh: "homeomorphism S S' g h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 203 | using hom by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 204 | have "continuous_on (f ` T) g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 205 | by (meson \<open>f ` T \<subseteq> S\<close> continuous_on_subset homeomorphism_def homgh) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 206 | then have contgf: "continuous_on T (g \<circ> f)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 207 | by (intro continuous_on_compose contf) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 208 | have gfTC: "(g \<circ> f) ` T \<subseteq> C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 209 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 210 | have "g ` S = S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 211 | by (metis (no_types) homeomorphism_def homgh) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 212 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 213 | by (metis (no_types) assms(3) cloCS closedin_def image_comp image_mono order.trans topspace_euclidean_subtopology) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 214 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 215 | obtain f' where contf': "continuous_on U f'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 216 | and "f' ` U \<subseteq> C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 217 | and eq: "\<And>x. x \<in> T \<Longrightarrow> f' x = (g \<circ> f) x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 218 | by (metis Dugundji [OF C cloUT contgf gfTC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 219 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 220 | proof (rule_tac V = "U \<inter> f' -` D" and g = "h \<circ> r \<circ> f'" in that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 221 | show "T \<subseteq> U \<inter> f' -` D" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 222 | using cloUT closedin_imp_subset \<open>S' \<subseteq> D\<close> \<open>f ` T \<subseteq> S\<close> eq homeomorphism_image1 homgh | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 223 | by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 224 | show ope: "openin (top_of_set U) (U \<inter> f' -` D)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 225 | using \<open>f' ` U \<subseteq> C\<close> by (auto simp: opD contf' continuous_openin_preimage) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 226 | have conth: "continuous_on (r ` f' ` (U \<inter> f' -` D)) h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 227 | apply (rule continuous_on_subset [of S']) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 228 | using homeomorphism_def homgh apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 229 | using \<open>r ` D \<subseteq> S'\<close> by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 230 | show "continuous_on (U \<inter> f' -` D) (h \<circ> r \<circ> f')" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 231 | apply (intro continuous_on_compose conth | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 232 | continuous_on_subset [OF contr] continuous_on_subset [OF contf'], auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 233 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 234 | show "(h \<circ> r \<circ> f') ` (U \<inter> f' -` D) \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 235 | using \<open>homeomorphism S S' g h\<close> \<open>f' ` U \<subseteq> C\<close> \<open>r ` D \<subseteq> S'\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 236 | by (auto simp: homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 237 | show "\<And>x. x \<in> T \<Longrightarrow> (h \<circ> r \<circ> f') x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 238 | using \<open>homeomorphism S S' g h\<close> \<open>f ` T \<subseteq> S\<close> eq | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 239 | by (auto simp: rid homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 240 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 241 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 242 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 243 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 244 | corollary ANR_imp_absolute_neighbourhood_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 245 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 246 | assumes "ANR S" "S homeomorphic S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 247 | and clo: "closedin (top_of_set U) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 248 | obtains V where "openin (top_of_set U) V" "S' retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 249 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 250 | obtain g h where hom: "homeomorphism S S' g h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 251 | using assms by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 252 | have h: "continuous_on S' h" " h ` S' \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 253 | using hom homeomorphism_def apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 254 | apply (metis hom equalityE homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 255 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 256 | from ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> h clo] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 257 | obtain V h' where "S' \<subseteq> V" and opUV: "openin (top_of_set U) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 258 | and h': "continuous_on V h'" "h' ` V \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 259 | and h'h:"\<And>x. x \<in> S' \<Longrightarrow> h' x = h x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 260 | by (blast intro: ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> h clo]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 261 | have "S' retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 262 | proof (simp add: retraction_def retract_of_def, intro exI conjI \<open>S' \<subseteq> V\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 263 | show "continuous_on V (g \<circ> h')" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 264 | apply (intro continuous_on_compose h') | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 265 | apply (meson hom continuous_on_subset h' homeomorphism_cont1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 266 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 267 | show "(g \<circ> h') ` V \<subseteq> S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 268 | using h' by clarsimp (metis hom subsetD homeomorphism_def imageI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 269 | show "\<forall>x\<in>S'. (g \<circ> h') x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 270 | by clarsimp (metis h'h hom homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 271 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 272 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 273 | by (rule that [OF opUV]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 274 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 275 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 276 | corollary ANR_imp_absolute_neighbourhood_retract_UNIV: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 277 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 278 | assumes "ANR S" and hom: "S homeomorphic S'" and clo: "closed S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 279 | obtains V where "open V" "S' retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 280 | using ANR_imp_absolute_neighbourhood_retract [OF \<open>ANR S\<close> hom] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 281 | by (metis clo closed_closedin open_openin subtopology_UNIV) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 282 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 283 | corollary neighbourhood_extension_into_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 284 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 285 | assumes contf: "continuous_on S f" and fim: "f ` S \<subseteq> T" and "ANR T" "closed S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 286 | obtains V g where "S \<subseteq> V" "open V" "continuous_on V g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 287 | "g ` V \<subseteq> T" "\<And>x. x \<in> S \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 288 | using ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf fim] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 289 | by (metis \<open>closed S\<close> closed_closedin open_openin subtopology_UNIV) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 290 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 291 | lemma absolute_neighbourhood_extensor_imp_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 292 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 293 | assumes "\<And>f :: 'a * real \<Rightarrow> 'a. | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 294 | \<And>U T. \<lbrakk>continuous_on T f; f ` T \<subseteq> S; | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 295 | closedin (top_of_set U) T\<rbrakk> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 296 | \<Longrightarrow> \<exists>V g. T \<subseteq> V \<and> openin (top_of_set U) V \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 297 | continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 298 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 299 | proof (clarsimp simp: ANR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 300 |   fix U and T :: "('a * real) set"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 301 | assume "S homeomorphic T" and clo: "closedin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 302 | then obtain g h where hom: "homeomorphism S T g h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 303 | by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 304 | have h: "continuous_on T h" " h ` T \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 305 | using hom homeomorphism_def apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 306 | apply (metis hom equalityE homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 307 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 308 | obtain V h' where "T \<subseteq> V" and opV: "openin (top_of_set U) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 309 | and h': "continuous_on V h'" "h' ` V \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 310 | and h'h: "\<forall>x\<in>T. h' x = h x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 311 | using assms [OF h clo] by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 312 | have [simp]: "T \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 313 | using clo closedin_imp_subset by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 314 | have "T retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 315 | proof (simp add: retraction_def retract_of_def, intro exI conjI \<open>T \<subseteq> V\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 316 | show "continuous_on V (g \<circ> h')" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 317 | apply (intro continuous_on_compose h') | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 318 | apply (meson hom continuous_on_subset h' homeomorphism_cont1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 319 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 320 | show "(g \<circ> h') ` V \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 321 | using h' by clarsimp (metis hom subsetD homeomorphism_def imageI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 322 | show "\<forall>x\<in>T. (g \<circ> h') x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 323 | by clarsimp (metis h'h hom homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 324 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 325 | then show "\<exists>V. openin (top_of_set U) V \<and> T retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 326 | using opV by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 327 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 328 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 329 | lemma ANR_eq_absolute_neighbourhood_extensor: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 330 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 331 | shows "ANR S \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 332 | (\<forall>f :: 'a * real \<Rightarrow> 'a. | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 333 | \<forall>U T. continuous_on T f \<longrightarrow> f ` T \<subseteq> S \<longrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 334 | closedin (top_of_set U) T \<longrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 335 | (\<exists>V g. T \<subseteq> V \<and> openin (top_of_set U) V \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 336 | continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 337 | apply (rule iffI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 338 | apply (metis ANR_imp_absolute_neighbourhood_extensor) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 339 | apply (simp add: absolute_neighbourhood_extensor_imp_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 340 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 341 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 342 | lemma ANR_imp_neighbourhood_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 343 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 344 | assumes "ANR S" "closedin (top_of_set U) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 345 | obtains V where "openin (top_of_set U) V" "S retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 346 | using ANR_imp_absolute_neighbourhood_retract assms homeomorphic_refl by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 347 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 348 | lemma ANR_imp_absolute_closed_neighbourhood_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 349 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 350 | assumes "ANR S" "S homeomorphic S'" and US': "closedin (top_of_set U) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 351 | obtains V W | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 352 | where "openin (top_of_set U) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 353 | "closedin (top_of_set U) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 354 | "S' \<subseteq> V" "V \<subseteq> W" "S' retract_of W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 355 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 356 | obtain Z where "openin (top_of_set U) Z" and S'Z: "S' retract_of Z" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 357 | by (blast intro: assms ANR_imp_absolute_neighbourhood_retract) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 358 | then have UUZ: "closedin (top_of_set U) (U - Z)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 359 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 360 |   have "S' \<inter> (U - Z) = {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 361 | using \<open>S' retract_of Z\<close> closedin_retract closedin_subtopology by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 362 | then obtain V W | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 363 | where "openin (top_of_set U) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 364 | and "openin (top_of_set U) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 365 |         and "S' \<subseteq> V" "U - Z \<subseteq> W" "V \<inter> W = {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 366 | using separation_normal_local [OF US' UUZ] by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 367 | moreover have "S' retract_of U - W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 368 | apply (rule retract_of_subset [OF S'Z]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 369 |     using US' \<open>S' \<subseteq> V\<close> \<open>V \<inter> W = {}\<close> closedin_subset apply fastforce
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 370 | using Diff_subset_conv \<open>U - Z \<subseteq> W\<close> by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 371 | ultimately show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 372 | apply (rule_tac V=V and W = "U-W" in that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 373 | using openin_imp_subset apply force+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 374 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 375 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 376 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 377 | lemma ANR_imp_closed_neighbourhood_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 378 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 379 | assumes "ANR S" "closedin (top_of_set U) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 380 | obtains V W where "openin (top_of_set U) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 381 | "closedin (top_of_set U) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 382 | "S \<subseteq> V" "V \<subseteq> W" "S retract_of W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 383 | by (meson ANR_imp_absolute_closed_neighbourhood_retract assms homeomorphic_refl) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 384 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 385 | lemma ANR_homeomorphic_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 386 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 387 | assumes "ANR T" "S homeomorphic T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 388 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 389 | unfolding ANR_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 390 | by (metis assms ANR_imp_absolute_neighbourhood_retract homeomorphic_trans [of _ S] homeomorphic_sym) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 391 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 392 | lemma homeomorphic_ANR_iff_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 393 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 394 | shows "S homeomorphic T \<Longrightarrow> ANR S \<longleftrightarrow> ANR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 395 | by (metis ANR_homeomorphic_ANR homeomorphic_sym) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 396 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 397 | subsection \<open>Analogous properties of ENRs\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 398 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 399 | lemma ENR_imp_absolute_neighbourhood_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 400 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 401 | assumes "ENR S" and hom: "S homeomorphic S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 402 | and "S' \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 403 | obtains V where "openin (top_of_set U) V" "S' retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 404 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 405 | obtain X where "open X" "S retract_of X" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 406 | using \<open>ENR S\<close> by (auto simp: ENR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 407 | then obtain r where "retraction X S r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 408 | by (auto simp: retract_of_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 409 | have "locally compact S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 410 | using retract_of_locally_compact open_imp_locally_compact | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 411 | homeomorphic_local_compactness \<open>S retract_of X\<close> \<open>open X\<close> hom by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 412 | then obtain W where UW: "openin (top_of_set U) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 413 | and WS': "closedin (top_of_set W) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 414 | apply (rule locally_compact_closedin_open) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 415 | apply (rename_tac W) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 416 | apply (rule_tac W = "U \<inter> W" in that, blast) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 417 | by (simp add: \<open>S' \<subseteq> U\<close> closedin_limpt) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 418 | obtain f g where hom: "homeomorphism S S' f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 419 | using assms by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 420 | have contg: "continuous_on S' g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 421 | using hom homeomorphism_def by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 422 | moreover have "g ` S' \<subseteq> S" by (metis hom equalityE homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 423 | ultimately obtain h where conth: "continuous_on W h" and hg: "\<And>x. x \<in> S' \<Longrightarrow> h x = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 424 | using Tietze_unbounded [of S' g W] WS' by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 425 | have "W \<subseteq> U" using UW openin_open by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 426 | have "S' \<subseteq> W" using WS' closedin_closed by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 427 | have him: "\<And>x. x \<in> S' \<Longrightarrow> h x \<in> X" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 428 | by (metis (no_types) \<open>S retract_of X\<close> hg hom homeomorphism_def image_insert insert_absorb insert_iff retract_of_imp_subset subset_eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 429 | have "S' retract_of (W \<inter> h -` X)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 430 | proof (simp add: retraction_def retract_of_def, intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 431 | show "S' \<subseteq> W" "S' \<subseteq> h -` X" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 432 | using him WS' closedin_imp_subset by blast+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 433 | show "continuous_on (W \<inter> h -` X) (f \<circ> r \<circ> h)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 434 | proof (intro continuous_on_compose) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 435 | show "continuous_on (W \<inter> h -` X) h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 436 | by (meson conth continuous_on_subset inf_le1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 437 | show "continuous_on (h ` (W \<inter> h -` X)) r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 438 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 439 | have "h ` (W \<inter> h -` X) \<subseteq> X" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 440 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 441 | then show "continuous_on (h ` (W \<inter> h -` X)) r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 442 | by (meson \<open>retraction X S r\<close> continuous_on_subset retraction) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 443 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 444 | show "continuous_on (r ` h ` (W \<inter> h -` X)) f" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 445 | apply (rule continuous_on_subset [of S]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 446 | using hom homeomorphism_def apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 447 | apply clarify | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 448 | apply (meson \<open>retraction X S r\<close> subsetD imageI retraction_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 449 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 450 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 451 | show "(f \<circ> r \<circ> h) ` (W \<inter> h -` X) \<subseteq> S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 452 | using \<open>retraction X S r\<close> hom | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 453 | by (auto simp: retraction_def homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 454 | show "\<forall>x\<in>S'. (f \<circ> r \<circ> h) x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 455 | using \<open>retraction X S r\<close> hom by (auto simp: retraction_def homeomorphism_def hg) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 456 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 457 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 458 | apply (rule_tac V = "W \<inter> h -` X" in that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 459 | apply (rule openin_trans [OF _ UW]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 460 | using \<open>continuous_on W h\<close> \<open>open X\<close> continuous_openin_preimage_eq apply blast+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 461 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 462 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 463 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 464 | corollary ENR_imp_absolute_neighbourhood_retract_UNIV: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 465 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 466 | assumes "ENR S" "S homeomorphic S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 467 | obtains T' where "open T'" "S' retract_of T'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 468 | by (metis ENR_imp_absolute_neighbourhood_retract UNIV_I assms(1) assms(2) open_openin subsetI subtopology_UNIV) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 469 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 470 | lemma ENR_homeomorphic_ENR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 471 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 472 | assumes "ENR T" "S homeomorphic T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 473 | shows "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 474 | unfolding ENR_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 475 | by (meson ENR_imp_absolute_neighbourhood_retract_UNIV assms homeomorphic_sym) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 476 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 477 | lemma homeomorphic_ENR_iff_ENR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 478 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 479 | assumes "S homeomorphic T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 480 | shows "ENR S \<longleftrightarrow> ENR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 481 | by (meson ENR_homeomorphic_ENR assms homeomorphic_sym) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 482 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 483 | lemma ENR_translation: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 484 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 485 | shows "ENR(image (\<lambda>x. a + x) S) \<longleftrightarrow> ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 486 | by (meson homeomorphic_sym homeomorphic_translation homeomorphic_ENR_iff_ENR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 487 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 488 | lemma ENR_linear_image_eq: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 489 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 490 | assumes "linear f" "inj f" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 491 | shows "ENR (image f S) \<longleftrightarrow> ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 492 | apply (rule homeomorphic_ENR_iff_ENR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 493 | using assms homeomorphic_sym linear_homeomorphic_image by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 494 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 495 | text \<open>Some relations among the concepts. We also relate AR to being a retract of UNIV, which is | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 496 | often a more convenient proxy in the closed case.\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 497 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 498 | lemma AR_imp_ANR: "AR S \<Longrightarrow> ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 499 | using ANR_def AR_def by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 500 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 501 | lemma ENR_imp_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 502 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 503 | shows "ENR S \<Longrightarrow> ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 504 | apply (simp add: ANR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 505 | by (metis ENR_imp_absolute_neighbourhood_retract closedin_imp_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 506 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 507 | lemma ENR_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 508 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 509 | shows "ENR S \<longleftrightarrow> ANR S \<and> locally compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 510 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 511 | assume "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 512 | then have "locally compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 513 | using ENR_def open_imp_locally_compact retract_of_locally_compact by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 514 | then show "ANR S \<and> locally compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 515 | using ENR_imp_ANR \<open>ENR S\<close> by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 516 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 517 | assume "ANR S \<and> locally compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 518 | then have "ANR S" "locally compact S" by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 519 |   then obtain T :: "('a * real) set" where "closed T" "S homeomorphic T"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 520 | using locally_compact_homeomorphic_closed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 521 | by (metis DIM_prod DIM_real Suc_eq_plus1 lessI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 522 | then show "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 523 | using \<open>ANR S\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 524 | apply (simp add: ANR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 525 | apply (drule_tac x=UNIV in spec) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 526 | apply (drule_tac x=T in spec, clarsimp) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 527 | apply (meson ENR_def ENR_homeomorphic_ENR open_openin) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 528 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 529 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 530 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 531 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 532 | lemma AR_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 533 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 534 |   shows "AR S \<longleftrightarrow> ANR S \<and> contractible S \<and> S \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 535 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 536 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 537 | assume ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 538 |   obtain C and S' :: "('a * real) set"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 539 |     where "convex C" "C \<noteq> {}" "closedin (top_of_set C) S'" "S homeomorphic S'"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 540 | apply (rule homeomorphic_closedin_convex [of S, where 'n = "'a * real"]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 541 | using aff_dim_le_DIM [of S] by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 542 | with \<open>AR S\<close> have "contractible S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 543 | apply (simp add: AR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 544 | apply (drule_tac x=C in spec) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 545 | apply (drule_tac x="S'" in spec, simp) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 546 | using convex_imp_contractible homeomorphic_contractible_eq retract_of_contractible by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 547 | with \<open>AR S\<close> show ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 548 | apply (auto simp: AR_imp_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 549 | apply (force simp: AR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 550 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 551 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 552 | assume ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 553 | then obtain a and h:: "real \<times> 'a \<Rightarrow> 'a" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 554 |       where conth: "continuous_on ({0..1} \<times> S) h"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 555 |         and hS: "h ` ({0..1} \<times> S) \<subseteq> S"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 556 | and [simp]: "\<And>x. h(0, x) = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 557 | and [simp]: "\<And>x. h(1, x) = a" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 558 |         and "ANR S" "S \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 559 | by (auto simp: contractible_def homotopic_with_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 560 | then have "a \<in> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 561 | by (metis all_not_in_conv atLeastAtMost_iff image_subset_iff mem_Sigma_iff order_refl zero_le_one) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 562 | have "\<exists>g. continuous_on W g \<and> g ` W \<subseteq> S \<and> (\<forall>x\<in>T. g x = f x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 563 | if f: "continuous_on T f" "f ` T \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 564 | and WT: "closedin (top_of_set W) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 565 | for W T and f :: "'a \<times> real \<Rightarrow> 'a" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 566 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 567 | obtain U g | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 568 | where "T \<subseteq> U" and WU: "openin (top_of_set W) U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 569 | and contg: "continuous_on U g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 570 | and "g ` U \<subseteq> S" and gf: "\<And>x. x \<in> T \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 571 | using iffD1 [OF ANR_eq_absolute_neighbourhood_extensor \<open>ANR S\<close>, rule_format, OF f WT] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 572 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 573 | have WWU: "closedin (top_of_set W) (W - U)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 574 | using WU closedin_diff by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 575 |     moreover have "(W - U) \<inter> T = {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 576 | using \<open>T \<subseteq> U\<close> by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 577 | ultimately obtain V V' | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 578 | where WV': "openin (top_of_set W) V'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 579 | and WV: "openin (top_of_set W) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 580 |         and "W - U \<subseteq> V'" "T \<subseteq> V" "V' \<inter> V = {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 581 | using separation_normal_local [of W "W-U" T] WT by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 582 |     then have WVT: "T \<inter> (W - V) = {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 583 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 584 | have WWV: "closedin (top_of_set W) (W - V)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 585 | using WV closedin_diff by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 586 | obtain j :: " 'a \<times> real \<Rightarrow> real" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 587 | where contj: "continuous_on W j" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 588 |         and j:  "\<And>x. x \<in> W \<Longrightarrow> j x \<in> {0..1}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 589 | and j0: "\<And>x. x \<in> W - V \<Longrightarrow> j x = 1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 590 | and j1: "\<And>x. x \<in> T \<Longrightarrow> j x = 0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 591 | by (rule Urysohn_local [OF WT WWV WVT, of 0 "1::real"]) (auto simp: in_segment) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 592 | have Weq: "W = (W - V) \<union> (W - V')" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 593 |       using \<open>V' \<inter> V = {}\<close> by force
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 594 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 595 | proof (intro conjI exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 596 | have *: "continuous_on (W - V') (\<lambda>x. h (j x, g x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 597 | apply (rule continuous_on_compose2 [OF conth continuous_on_Pair]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 598 | apply (rule continuous_on_subset [OF contj Diff_subset]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 599 | apply (rule continuous_on_subset [OF contg]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 600 | apply (metis Diff_subset_conv Un_commute \<open>W - U \<subseteq> V'\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 601 | using j \<open>g ` U \<subseteq> S\<close> \<open>W - U \<subseteq> V'\<close> apply fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 602 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 603 | show "continuous_on W (\<lambda>x. if x \<in> W - V then a else h (j x, g x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 604 | apply (subst Weq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 605 | apply (rule continuous_on_cases_local) | 
| 71172 | 606 | apply (simp_all add: Weq [symmetric] WWV *) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 607 | using WV' closedin_diff apply fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 608 | apply (auto simp: j0 j1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 609 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 610 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 611 | have "h (j (x, y), g (x, y)) \<in> S" if "(x, y) \<in> W" "(x, y) \<in> V" for x y | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 612 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 613 |         have "j(x, y) \<in> {0..1}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 614 | using j that by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 615 | moreover have "g(x, y) \<in> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 616 |           using \<open>V' \<inter> V = {}\<close> \<open>W - U \<subseteq> V'\<close> \<open>g ` U \<subseteq> S\<close> that by fastforce
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 617 | ultimately show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 618 | using hS by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 619 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 620 | with \<open>a \<in> S\<close> \<open>g ` U \<subseteq> S\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 621 | show "(\<lambda>x. if x \<in> W - V then a else h (j x, g x)) ` W \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 622 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 623 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 624 | show "\<forall>x\<in>T. (if x \<in> W - V then a else h (j x, g x)) = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 625 | using \<open>T \<subseteq> V\<close> by (auto simp: j0 j1 gf) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 626 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 627 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 628 | then show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 629 | by (simp add: AR_eq_absolute_extensor) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 630 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 631 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 632 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 633 | lemma ANR_retract_of_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 634 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 635 | assumes "ANR T" "S retract_of T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 636 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 637 | using assms | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 638 | apply (simp add: ANR_eq_absolute_neighbourhood_extensor retract_of_def retraction_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 639 | apply (clarsimp elim!: all_forward) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 640 | apply (erule impCE, metis subset_trans) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 641 | apply (clarsimp elim!: ex_forward) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 642 | apply (rule_tac x="r \<circ> g" in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 643 | by (metis comp_apply continuous_on_compose continuous_on_subset subsetD imageI image_comp image_mono subset_trans) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 644 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 645 | lemma AR_retract_of_AR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 646 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 647 | shows "\<lbrakk>AR T; S retract_of T\<rbrakk> \<Longrightarrow> AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 648 | using ANR_retract_of_ANR AR_ANR retract_of_contractible by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 649 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 650 | lemma ENR_retract_of_ENR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 651 | "\<lbrakk>ENR T; S retract_of T\<rbrakk> \<Longrightarrow> ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 652 | by (meson ENR_def retract_of_trans) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 653 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 654 | lemma retract_of_UNIV: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 655 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 656 | shows "S retract_of UNIV \<longleftrightarrow> AR S \<and> closed S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 657 | 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) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 658 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 659 | lemma compact_AR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 660 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 661 | shows "compact S \<and> AR S \<longleftrightarrow> compact S \<and> S retract_of UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 662 | using compact_imp_closed retract_of_UNIV by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 663 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 664 | text \<open>More properties of ARs, ANRs and ENRs\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 665 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 666 | lemma not_AR_empty [simp]: "\<not> AR({})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 667 | by (auto simp: AR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 668 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 669 | lemma ENR_empty [simp]: "ENR {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 670 | by (simp add: ENR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 671 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 672 | lemma ANR_empty [simp]: "ANR ({} :: 'a::euclidean_space set)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 673 | by (simp add: ENR_imp_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 674 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 675 | lemma convex_imp_AR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 676 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 677 |   shows "\<lbrakk>convex S; S \<noteq> {}\<rbrakk> \<Longrightarrow> AR S"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 678 | apply (rule absolute_extensor_imp_AR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 679 | apply (rule Dugundji, assumption+) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 680 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 681 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 682 | lemma convex_imp_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 683 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 684 | shows "convex S \<Longrightarrow> ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 685 | using ANR_empty AR_imp_ANR convex_imp_AR by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 686 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 687 | lemma ENR_convex_closed: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 688 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 689 | shows "\<lbrakk>closed S; convex S\<rbrakk> \<Longrightarrow> ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 690 | using ENR_def ENR_empty convex_imp_AR retract_of_UNIV by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 691 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 692 | lemma AR_UNIV [simp]: "AR (UNIV :: 'a::euclidean_space set)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 693 | using retract_of_UNIV by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 694 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 695 | lemma ANR_UNIV [simp]: "ANR (UNIV :: 'a::euclidean_space set)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 696 | by (simp add: AR_imp_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 697 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 698 | lemma ENR_UNIV [simp]:"ENR UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 699 | using ENR_def by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 700 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 701 | lemma AR_singleton: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 702 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 703 |     shows "AR {a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 704 | using retract_of_UNIV by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 705 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 706 | lemma ANR_singleton: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 707 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 708 |     shows "ANR {a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 709 | by (simp add: AR_imp_ANR AR_singleton) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 710 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 711 | lemma ENR_singleton: "ENR {a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 712 | using ENR_def by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 713 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 714 | text \<open>ARs closed under union\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 715 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 716 | lemma AR_closed_Un_local_aux: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 717 | fixes U :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 718 | assumes "closedin (top_of_set U) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 719 | "closedin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 720 | "AR S" "AR T" "AR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 721 | shows "(S \<union> T) retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 722 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 723 |   have "S \<inter> T \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 724 | using assms AR_def by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 725 | have "S \<subseteq> U" "T \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 726 | using assms by (auto simp: closedin_imp_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 727 |   define S' where "S' \<equiv> {x \<in> U. setdist {x} S \<le> setdist {x} T}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 728 |   define T' where "T' \<equiv> {x \<in> U. setdist {x} T \<le> setdist {x} S}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 729 |   define W  where "W \<equiv> {x \<in> U. setdist {x} S = setdist {x} T}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 730 | have US': "closedin (top_of_set U) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 731 |     using continuous_closedin_preimage [of U "\<lambda>x. setdist {x} S - setdist {x} T" "{..0}"]
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 732 | by (simp add: S'_def vimage_def Collect_conj_eq continuous_on_diff continuous_on_setdist) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 733 | have UT': "closedin (top_of_set U) T'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 734 |     using continuous_closedin_preimage [of U "\<lambda>x. setdist {x} T - setdist {x} S" "{..0}"]
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 735 | by (simp add: T'_def vimage_def Collect_conj_eq continuous_on_diff continuous_on_setdist) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 736 | have "S \<subseteq> S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 737 | using S'_def \<open>S \<subseteq> U\<close> setdist_sing_in_set by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 738 | have "T \<subseteq> T'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 739 | using T'_def \<open>T \<subseteq> U\<close> setdist_sing_in_set by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 740 | have "S \<inter> T \<subseteq> W" "W \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 741 | using \<open>S \<subseteq> U\<close> by (auto simp: W_def setdist_sing_in_set) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 742 | have "(S \<inter> T) retract_of W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 743 | apply (rule AR_imp_absolute_retract [OF \<open>AR(S \<inter> T)\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 744 | apply (simp add: homeomorphic_refl) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 745 | apply (rule closedin_subset_trans [of U]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 746 | apply (simp_all add: assms closedin_Int \<open>S \<inter> T \<subseteq> W\<close> \<open>W \<subseteq> U\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 747 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 748 | then obtain r0 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 749 | where "S \<inter> T \<subseteq> W" and contr0: "continuous_on W r0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 750 | and "r0 ` W \<subseteq> S \<inter> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 751 | and r0 [simp]: "\<And>x. x \<in> S \<inter> T \<Longrightarrow> r0 x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 752 | by (auto simp: retract_of_def retraction_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 753 | have ST: "x \<in> W \<Longrightarrow> x \<in> S \<longleftrightarrow> x \<in> T" for x | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 754 |     using setdist_eq_0_closedin \<open>S \<inter> T \<noteq> {}\<close> assms
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 755 | by (force simp: W_def setdist_sing_in_set) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 756 | have "S' \<inter> T' = W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 757 | by (auto simp: S'_def T'_def W_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 758 | then have cloUW: "closedin (top_of_set U) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 759 | using closedin_Int US' UT' by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 760 | define r where "r \<equiv> \<lambda>x. if x \<in> W then r0 x else x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 761 | have "r ` (W \<union> S) \<subseteq> S" "r ` (W \<union> T) \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 762 | using \<open>r0 ` W \<subseteq> S \<inter> T\<close> r_def by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 763 | have contr: "continuous_on (W \<union> (S \<union> T)) r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 764 | unfolding r_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 765 | proof (rule continuous_on_cases_local [OF _ _ contr0 continuous_on_id]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 766 | show "closedin (top_of_set (W \<union> (S \<union> T))) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 767 | using \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close> \<open>W \<subseteq> U\<close> \<open>closedin (top_of_set U) W\<close> closedin_subset_trans by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 768 | show "closedin (top_of_set (W \<union> (S \<union> T))) (S \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 769 | by (meson \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close> \<open>W \<subseteq> U\<close> assms closedin_Un closedin_subset_trans sup.bounded_iff sup.cobounded2) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 770 | show "\<And>x. x \<in> W \<and> x \<notin> W \<or> x \<in> S \<union> T \<and> x \<in> W \<Longrightarrow> r0 x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 771 | by (auto simp: ST) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 772 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 773 | have cloUWS: "closedin (top_of_set U) (W \<union> S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 774 | by (simp add: cloUW assms closedin_Un) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 775 | obtain g where contg: "continuous_on U g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 776 | and "g ` U \<subseteq> S" and geqr: "\<And>x. x \<in> W \<union> S \<Longrightarrow> g x = r x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 777 | apply (rule AR_imp_absolute_extensor [OF \<open>AR S\<close> _ _ cloUWS]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 778 | apply (rule continuous_on_subset [OF contr]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 779 | using \<open>r ` (W \<union> S) \<subseteq> S\<close> apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 780 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 781 | have cloUWT: "closedin (top_of_set U) (W \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 782 | by (simp add: cloUW assms closedin_Un) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 783 | obtain h where conth: "continuous_on U h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 784 | and "h ` U \<subseteq> T" and heqr: "\<And>x. x \<in> W \<union> T \<Longrightarrow> h x = r x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 785 | apply (rule AR_imp_absolute_extensor [OF \<open>AR T\<close> _ _ cloUWT]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 786 | apply (rule continuous_on_subset [OF contr]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 787 | using \<open>r ` (W \<union> T) \<subseteq> T\<close> apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 788 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 789 | have "U = S' \<union> T'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 790 | by (force simp: S'_def T'_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 791 | then have cont: "continuous_on U (\<lambda>x. if x \<in> S' then g x else h x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 792 | apply (rule ssubst) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 793 | apply (rule continuous_on_cases_local) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 794 | using US' UT' \<open>S' \<inter> T' = W\<close> \<open>U = S' \<union> T'\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 795 | contg conth continuous_on_subset geqr heqr apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 796 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 797 | have UST: "(\<lambda>x. if x \<in> S' then g x else h x) ` U \<subseteq> S \<union> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 798 | using \<open>g ` U \<subseteq> S\<close> \<open>h ` U \<subseteq> T\<close> by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 799 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 800 | apply (simp add: retract_of_def retraction_def \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 801 | apply (rule_tac x="\<lambda>x. if x \<in> S' then g x else h x" in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 802 | apply (intro conjI cont UST) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 803 | by (metis IntI ST Un_iff \<open>S \<subseteq> S'\<close> \<open>S' \<inter> T' = W\<close> \<open>T \<subseteq> T'\<close> subsetD geqr heqr r0 r_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 804 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 805 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 806 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 807 | lemma AR_closed_Un_local: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 808 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 809 | assumes STS: "closedin (top_of_set (S \<union> T)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 810 | and STT: "closedin (top_of_set (S \<union> T)) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 811 | and "AR S" "AR T" "AR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 812 | shows "AR(S \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 813 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 814 | have "C retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 815 | if hom: "S \<union> T homeomorphic C" and UC: "closedin (top_of_set U) C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 816 |        for U and C :: "('a * real) set"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 817 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 818 | obtain f g where hom: "homeomorphism (S \<union> T) C f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 819 | using hom by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 820 | have US: "closedin (top_of_set U) (C \<inter> g -` S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 821 | apply (rule closedin_trans [OF _ UC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 822 | apply (rule continuous_closedin_preimage_gen [OF _ _ STS]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 823 | using hom homeomorphism_def apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 824 | apply (metis hom homeomorphism_def set_eq_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 825 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 826 | have UT: "closedin (top_of_set U) (C \<inter> g -` T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 827 | apply (rule closedin_trans [OF _ UC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 828 | apply (rule continuous_closedin_preimage_gen [OF _ _ STT]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 829 | using hom homeomorphism_def apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 830 | apply (metis hom homeomorphism_def set_eq_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 831 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 832 | have ARS: "AR (C \<inter> g -` S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 833 | apply (rule AR_homeomorphic_AR [OF \<open>AR S\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 834 | apply (simp add: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 835 | apply (rule_tac x=g in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 836 | apply (rule_tac x=f in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 837 | using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 838 | apply (rule_tac x="f x" in image_eqI, auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 839 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 840 | have ART: "AR (C \<inter> g -` T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 841 | apply (rule AR_homeomorphic_AR [OF \<open>AR T\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 842 | apply (simp add: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 843 | apply (rule_tac x=g in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 844 | apply (rule_tac x=f in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 845 | using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 846 | apply (rule_tac x="f x" in image_eqI, auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 847 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 848 | have ARI: "AR ((C \<inter> g -` S) \<inter> (C \<inter> g -` T))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 849 | apply (rule AR_homeomorphic_AR [OF \<open>AR (S \<inter> T)\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 850 | apply (simp add: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 851 | apply (rule_tac x=g in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 852 | apply (rule_tac x=f in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 853 | using hom | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 854 | apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 855 | apply (rule_tac x="f x" in image_eqI, auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 856 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 857 | have "C = (C \<inter> g -` S) \<union> (C \<inter> g -` T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 858 | using hom by (auto simp: homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 859 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 860 | by (metis AR_closed_Un_local_aux [OF US UT ARS ART ARI]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 861 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 862 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 863 | by (force simp: AR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 864 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 865 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 866 | corollary AR_closed_Un: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 867 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 868 | shows "\<lbrakk>closed S; closed T; AR S; AR T; AR (S \<inter> T)\<rbrakk> \<Longrightarrow> AR (S \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 869 | by (metis AR_closed_Un_local_aux closed_closedin retract_of_UNIV subtopology_UNIV) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 870 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 871 | text \<open>ANRs closed under union\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 872 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 873 | lemma ANR_closed_Un_local_aux: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 874 | fixes U :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 875 | assumes US: "closedin (top_of_set U) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 876 | and UT: "closedin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 877 | and "ANR S" "ANR T" "ANR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 878 | obtains V where "openin (top_of_set U) V" "(S \<union> T) retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 879 | proof (cases "S = {} \<or> T = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 880 | case True with assms that show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 881 | by (metis ANR_imp_neighbourhood_retract Un_commute inf_bot_right sup_inf_absorb) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 882 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 883 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 884 |   then have [simp]: "S \<noteq> {}" "T \<noteq> {}" by auto
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 885 | have "S \<subseteq> U" "T \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 886 | using assms by (auto simp: closedin_imp_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 887 |   define S' where "S' \<equiv> {x \<in> U. setdist {x} S \<le> setdist {x} T}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 888 |   define T' where "T' \<equiv> {x \<in> U. setdist {x} T \<le> setdist {x} S}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 889 |   define W  where "W \<equiv> {x \<in> U. setdist {x} S = setdist {x} T}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 890 | have cloUS': "closedin (top_of_set U) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 891 |     using continuous_closedin_preimage [of U "\<lambda>x. setdist {x} S - setdist {x} T" "{..0}"]
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 892 | by (simp add: S'_def vimage_def Collect_conj_eq continuous_on_diff continuous_on_setdist) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 893 | have cloUT': "closedin (top_of_set U) T'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 894 |     using continuous_closedin_preimage [of U "\<lambda>x. setdist {x} T - setdist {x} S" "{..0}"]
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 895 | by (simp add: T'_def vimage_def Collect_conj_eq continuous_on_diff continuous_on_setdist) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 896 | have "S \<subseteq> S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 897 | using S'_def \<open>S \<subseteq> U\<close> setdist_sing_in_set by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 898 | have "T \<subseteq> T'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 899 | using T'_def \<open>T \<subseteq> U\<close> setdist_sing_in_set by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 900 | have "S' \<union> T' = U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 901 | by (auto simp: S'_def T'_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 902 | have "W \<subseteq> S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 903 | by (simp add: Collect_mono S'_def W_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 904 | have "W \<subseteq> T'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 905 | by (simp add: Collect_mono T'_def W_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 906 | have ST_W: "S \<inter> T \<subseteq> W" and "W \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 907 | using \<open>S \<subseteq> U\<close> by (force simp: W_def setdist_sing_in_set)+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 908 | have "S' \<inter> T' = W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 909 | by (auto simp: S'_def T'_def W_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 910 | then have cloUW: "closedin (top_of_set U) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 911 | using closedin_Int cloUS' cloUT' by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 912 | obtain W' W0 where "openin (top_of_set W) W'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 913 | and cloWW0: "closedin (top_of_set W) W0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 914 | and "S \<inter> T \<subseteq> W'" "W' \<subseteq> W0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 915 | and ret: "(S \<inter> T) retract_of W0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 916 | apply (rule ANR_imp_closed_neighbourhood_retract [OF \<open>ANR(S \<inter> T)\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 917 | apply (rule closedin_subset_trans [of U, OF _ ST_W \<open>W \<subseteq> U\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 918 | apply (blast intro: assms)+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 919 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 920 | then obtain U0 where opeUU0: "openin (top_of_set U) U0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 921 | and U0: "S \<inter> T \<subseteq> U0" "U0 \<inter> W \<subseteq> W0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 922 | unfolding openin_open using \<open>W \<subseteq> U\<close> by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 923 | have "W0 \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 924 | using \<open>W \<subseteq> U\<close> cloWW0 closedin_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 925 | obtain r0 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 926 | where "S \<inter> T \<subseteq> W0" and contr0: "continuous_on W0 r0" and "r0 ` W0 \<subseteq> S \<inter> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 927 | and r0 [simp]: "\<And>x. x \<in> S \<inter> T \<Longrightarrow> r0 x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 928 | using ret by (force simp: retract_of_def retraction_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 929 | have ST: "x \<in> W \<Longrightarrow> x \<in> S \<longleftrightarrow> x \<in> T" for x | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 930 | using assms by (auto simp: W_def setdist_sing_in_set dest!: setdist_eq_0_closedin) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 931 | define r where "r \<equiv> \<lambda>x. if x \<in> W0 then r0 x else x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 932 | have "r ` (W0 \<union> S) \<subseteq> S" "r ` (W0 \<union> T) \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 933 | using \<open>r0 ` W0 \<subseteq> S \<inter> T\<close> r_def by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 934 | have contr: "continuous_on (W0 \<union> (S \<union> T)) r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 935 | unfolding r_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 936 | proof (rule continuous_on_cases_local [OF _ _ contr0 continuous_on_id]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 937 | show "closedin (top_of_set (W0 \<union> (S \<union> T))) W0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 938 | apply (rule closedin_subset_trans [of U]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 939 | using cloWW0 cloUW closedin_trans \<open>W0 \<subseteq> U\<close> \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close> apply blast+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 940 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 941 | show "closedin (top_of_set (W0 \<union> (S \<union> T))) (S \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 942 | by (meson \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close> \<open>W0 \<subseteq> U\<close> assms closedin_Un closedin_subset_trans sup.bounded_iff sup.cobounded2) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 943 | show "\<And>x. x \<in> W0 \<and> x \<notin> W0 \<or> x \<in> S \<union> T \<and> x \<in> W0 \<Longrightarrow> r0 x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 944 | using ST cloWW0 closedin_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 945 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 946 | have cloS'WS: "closedin (top_of_set S') (W0 \<union> S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 947 | by (meson closedin_subset_trans US cloUS' \<open>S \<subseteq> S'\<close> \<open>W \<subseteq> S'\<close> cloUW cloWW0 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 948 | closedin_Un closedin_imp_subset closedin_trans) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 949 | obtain W1 g where "W0 \<union> S \<subseteq> W1" and contg: "continuous_on W1 g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 950 | and opeSW1: "openin (top_of_set S') W1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 951 | and "g ` W1 \<subseteq> S" and geqr: "\<And>x. x \<in> W0 \<union> S \<Longrightarrow> g x = r x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 952 | apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> _ \<open>r ` (W0 \<union> S) \<subseteq> S\<close> cloS'WS]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 953 | apply (rule continuous_on_subset [OF contr], blast+) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 954 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 955 | have cloT'WT: "closedin (top_of_set T') (W0 \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 956 | by (meson closedin_subset_trans UT cloUT' \<open>T \<subseteq> T'\<close> \<open>W \<subseteq> T'\<close> cloUW cloWW0 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 957 | closedin_Un closedin_imp_subset closedin_trans) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 958 | obtain W2 h where "W0 \<union> T \<subseteq> W2" and conth: "continuous_on W2 h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 959 | and opeSW2: "openin (top_of_set T') W2" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 960 | and "h ` W2 \<subseteq> T" and heqr: "\<And>x. x \<in> W0 \<union> T \<Longrightarrow> h x = r x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 961 | apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> _ \<open>r ` (W0 \<union> T) \<subseteq> T\<close> cloT'WT]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 962 | apply (rule continuous_on_subset [OF contr], blast+) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 963 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 964 | have "S' \<inter> T' = W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 965 | by (force simp: S'_def T'_def W_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 966 | obtain O1 O2 where "open O1" "W1 = S' \<inter> O1" "open O2" "W2 = T' \<inter> O2" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 967 | using opeSW1 opeSW2 by (force simp: openin_open) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 968 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 969 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 970 | have eq: "W1 - (W - U0) \<union> (W2 - (W - U0)) = | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 971 | ((U - T') \<inter> O1 \<union> (U - S') \<inter> O2 \<union> U \<inter> O1 \<inter> O2) - (W - U0)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 972 | using \<open>U0 \<inter> W \<subseteq> W0\<close> \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W0 \<union> T \<subseteq> W2\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 973 | by (auto simp: \<open>S' \<union> T' = U\<close> [symmetric] \<open>S' \<inter> T' = W\<close> [symmetric] \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 974 | show "openin (top_of_set U) (W1 - (W - U0) \<union> (W2 - (W - U0)))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 975 | apply (subst eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 976 | apply (intro openin_Un openin_Int_open openin_diff closedin_diff cloUW opeUU0 cloUS' cloUT' \<open>open O1\<close> \<open>open O2\<close>, simp_all) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 977 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 978 | have cloW1: "closedin (top_of_set (W1 - (W - U0) \<union> (W2 - (W - U0)))) (W1 - (W - U0))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 979 | using cloUS' apply (simp add: closedin_closed) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 980 | apply (erule ex_forward) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 981 | using U0 \<open>W0 \<union> S \<subseteq> W1\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 982 | apply (auto simp: \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<union> T' = U\<close> [symmetric]\<open>S' \<inter> T' = W\<close> [symmetric]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 983 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 984 | have cloW2: "closedin (top_of_set (W1 - (W - U0) \<union> (W2 - (W - U0)))) (W2 - (W - U0))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 985 | using cloUT' apply (simp add: closedin_closed) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 986 | apply (erule ex_forward) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 987 | using U0 \<open>W0 \<union> T \<subseteq> W2\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 988 | apply (auto simp: \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<union> T' = U\<close> [symmetric]\<open>S' \<inter> T' = W\<close> [symmetric]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 989 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 990 | have *: "\<forall>x\<in>S \<union> T. (if x \<in> S' then g x else h x) = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 991 | using ST \<open>S' \<inter> T' = W\<close> cloT'WT closedin_subset geqr heqr | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 992 | apply (auto simp: r_def, fastforce) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 993 | using \<open>S \<subseteq> S'\<close> \<open>T \<subseteq> T'\<close> \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W1 = S' \<inter> O1\<close> by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 994 | have "\<exists>r. continuous_on (W1 - (W - U0) \<union> (W2 - (W - U0))) r \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 995 | r ` (W1 - (W - U0) \<union> (W2 - (W - U0))) \<subseteq> S \<union> T \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 996 | (\<forall>x\<in>S \<union> T. r x = x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 997 | apply (rule_tac x = "\<lambda>x. if x \<in> S' then g x else h x" in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 998 | apply (intro conjI *) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 999 | apply (rule continuous_on_cases_local | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1000 | [OF cloW1 cloW2 continuous_on_subset [OF contg] continuous_on_subset [OF conth]]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1001 | using \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<inter> T' = W\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1002 | \<open>g ` W1 \<subseteq> S\<close> \<open>h ` W2 \<subseteq> T\<close> apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1003 | using \<open>U0 \<inter> W \<subseteq> W0\<close> \<open>W0 \<union> S \<subseteq> W1\<close> apply (fastforce simp add: geqr heqr)+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1004 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1005 | then show "S \<union> T retract_of W1 - (W - U0) \<union> (W2 - (W - U0))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1006 | using \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W0 \<union> T \<subseteq> W2\<close> ST opeUU0 U0 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1007 | by (auto simp: retract_of_def retraction_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1008 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1009 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1010 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1011 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1012 | lemma ANR_closed_Un_local: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1013 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1014 | assumes STS: "closedin (top_of_set (S \<union> T)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1015 | and STT: "closedin (top_of_set (S \<union> T)) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1016 | and "ANR S" "ANR T" "ANR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1017 | shows "ANR(S \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1018 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1019 | have "\<exists>T. openin (top_of_set U) T \<and> C retract_of T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1020 | if hom: "S \<union> T homeomorphic C" and UC: "closedin (top_of_set U) C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1021 |        for U and C :: "('a * real) set"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1022 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1023 | obtain f g where hom: "homeomorphism (S \<union> T) C f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1024 | using hom by (force simp: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1025 | have US: "closedin (top_of_set U) (C \<inter> g -` S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1026 | apply (rule closedin_trans [OF _ UC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1027 | apply (rule continuous_closedin_preimage_gen [OF _ _ STS]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1028 | using hom [unfolded homeomorphism_def] apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1029 | apply (metis hom homeomorphism_def set_eq_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1030 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1031 | have UT: "closedin (top_of_set U) (C \<inter> g -` T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1032 | apply (rule closedin_trans [OF _ UC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1033 | apply (rule continuous_closedin_preimage_gen [OF _ _ STT]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1034 | using hom [unfolded homeomorphism_def] apply blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1035 | apply (metis hom homeomorphism_def set_eq_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1036 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1037 | have ANRS: "ANR (C \<inter> g -` S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1038 | apply (rule ANR_homeomorphic_ANR [OF \<open>ANR S\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1039 | apply (simp add: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1040 | apply (rule_tac x=g in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1041 | apply (rule_tac x=f in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1042 | using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1043 | apply (rule_tac x="f x" in image_eqI, auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1044 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1045 | have ANRT: "ANR (C \<inter> g -` T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1046 | apply (rule ANR_homeomorphic_ANR [OF \<open>ANR T\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1047 | apply (simp add: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1048 | apply (rule_tac x=g in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1049 | apply (rule_tac x=f in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1050 | using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1051 | apply (rule_tac x="f x" in image_eqI, auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1052 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1053 | have ANRI: "ANR ((C \<inter> g -` S) \<inter> (C \<inter> g -` T))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1054 | apply (rule ANR_homeomorphic_ANR [OF \<open>ANR (S \<inter> T)\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1055 | apply (simp add: homeomorphic_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1056 | apply (rule_tac x=g in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1057 | apply (rule_tac x=f in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1058 | using hom | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1059 | apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1060 | apply (rule_tac x="f x" in image_eqI, auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1061 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1062 | have "C = (C \<inter> g -` S) \<union> (C \<inter> g -` T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1063 | using hom by (auto simp: homeomorphism_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1064 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1065 | by (metis ANR_closed_Un_local_aux [OF US UT ANRS ANRT ANRI]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1066 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1067 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1068 | by (auto simp: ANR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1069 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1070 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1071 | corollary ANR_closed_Un: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1072 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1073 | shows "\<lbrakk>closed S; closed T; ANR S; ANR T; ANR (S \<inter> T)\<rbrakk> \<Longrightarrow> ANR (S \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1074 | by (simp add: ANR_closed_Un_local closedin_def diff_eq open_Compl openin_open_Int) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1075 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1076 | lemma ANR_openin: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1077 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1078 | assumes "ANR T" and opeTS: "openin (top_of_set T) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1079 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1080 | proof (clarsimp simp only: ANR_eq_absolute_neighbourhood_extensor) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1081 | fix f :: "'a \<times> real \<Rightarrow> 'a" and U C | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1082 | assume contf: "continuous_on C f" and fim: "f ` C \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1083 | and cloUC: "closedin (top_of_set U) C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1084 | have "f ` C \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1085 | using fim opeTS openin_imp_subset by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1086 | obtain W g where "C \<subseteq> W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1087 | and UW: "openin (top_of_set U) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1088 | and contg: "continuous_on W g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1089 | and gim: "g ` W \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1090 | and geq: "\<And>x. x \<in> C \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1091 | apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf \<open>f ` C \<subseteq> T\<close> cloUC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1092 | using fim by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1093 | show "\<exists>V g. C \<subseteq> V \<and> openin (top_of_set U) V \<and> continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x\<in>C. g x = f x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1094 | proof (intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1095 | show "C \<subseteq> W \<inter> g -` S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1096 | using \<open>C \<subseteq> W\<close> fim geq by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1097 | show "openin (top_of_set U) (W \<inter> g -` S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1098 | by (metis (mono_tags, lifting) UW contg continuous_openin_preimage gim opeTS openin_trans) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1099 | show "continuous_on (W \<inter> g -` S) g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1100 | by (blast intro: continuous_on_subset [OF contg]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1101 | show "g ` (W \<inter> g -` S) \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1102 | using gim by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1103 | show "\<forall>x\<in>C. g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1104 | using geq by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1105 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1106 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1107 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1108 | lemma ENR_openin: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1109 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1110 | assumes "ENR T" and opeTS: "openin (top_of_set T) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1111 | shows "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1112 | using assms apply (simp add: ENR_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1113 | using ANR_openin locally_open_subset by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1114 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1115 | lemma ANR_neighborhood_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1116 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1117 | assumes "ANR U" "S retract_of T" "openin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1118 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1119 | using ANR_openin ANR_retract_of_ANR assms by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1120 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1121 | lemma ENR_neighborhood_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1122 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1123 | assumes "ENR U" "S retract_of T" "openin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1124 | shows "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1125 | using ENR_openin ENR_retract_of_ENR assms by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1126 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1127 | lemma ANR_rel_interior: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1128 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1129 | shows "ANR S \<Longrightarrow> ANR(rel_interior S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1130 | by (blast intro: ANR_openin openin_set_rel_interior) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1131 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1132 | lemma ANR_delete: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1133 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1134 |   shows "ANR S \<Longrightarrow> ANR(S - {a})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1135 | by (blast intro: ANR_openin openin_delete openin_subtopology_self) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1136 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1137 | lemma ENR_rel_interior: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1138 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1139 | shows "ENR S \<Longrightarrow> ENR(rel_interior S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1140 | by (blast intro: ENR_openin openin_set_rel_interior) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1141 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1142 | lemma ENR_delete: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1143 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1144 |   shows "ENR S \<Longrightarrow> ENR(S - {a})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1145 | by (blast intro: ENR_openin openin_delete openin_subtopology_self) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1146 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1147 | lemma open_imp_ENR: "open S \<Longrightarrow> ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1148 | using ENR_def by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1149 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1150 | lemma open_imp_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1151 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1152 | shows "open S \<Longrightarrow> ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1153 | by (simp add: ENR_imp_ANR open_imp_ENR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1154 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1155 | lemma ANR_ball [iff]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1156 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1157 | shows "ANR(ball a r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1158 | by (simp add: convex_imp_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1159 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1160 | lemma ENR_ball [iff]: "ENR(ball a r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1161 | by (simp add: open_imp_ENR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1162 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1163 | lemma AR_ball [simp]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1164 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1165 | shows "AR(ball a r) \<longleftrightarrow> 0 < r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1166 | by (auto simp: AR_ANR convex_imp_contractible) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1167 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1168 | lemma ANR_cball [iff]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1169 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1170 | shows "ANR(cball a r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1171 | by (simp add: convex_imp_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1172 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1173 | lemma ENR_cball: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1174 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1175 | shows "ENR(cball a r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1176 | using ENR_convex_closed by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1177 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1178 | lemma AR_cball [simp]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1179 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1180 | shows "AR(cball a r) \<longleftrightarrow> 0 \<le> r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1181 | by (auto simp: AR_ANR convex_imp_contractible) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1182 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1183 | lemma ANR_box [iff]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1184 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1185 | shows "ANR(cbox a b)" "ANR(box a b)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1186 | by (auto simp: convex_imp_ANR open_imp_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1187 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1188 | lemma ENR_box [iff]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1189 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1190 | shows "ENR(cbox a b)" "ENR(box a b)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1191 | apply (simp add: ENR_convex_closed closed_cbox) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1192 | by (simp add: open_box open_imp_ENR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1193 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1194 | lemma AR_box [simp]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1195 |     "AR(cbox a b) \<longleftrightarrow> cbox a b \<noteq> {}" "AR(box a b) \<longleftrightarrow> box a b \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1196 | by (auto simp: AR_ANR convex_imp_contractible) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1197 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1198 | lemma ANR_interior: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1199 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1200 | shows "ANR(interior S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1201 | by (simp add: open_imp_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1202 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1203 | lemma ENR_interior: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1204 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1205 | shows "ENR(interior S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1206 | by (simp add: open_imp_ENR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1207 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1208 | lemma AR_imp_contractible: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1209 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1210 | shows "AR S \<Longrightarrow> contractible S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1211 | by (simp add: AR_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1212 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1213 | lemma ENR_imp_locally_compact: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1214 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1215 | shows "ENR S \<Longrightarrow> locally compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1216 | by (simp add: ENR_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1217 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1218 | lemma ANR_imp_locally_path_connected: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1219 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1220 | assumes "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1221 | shows "locally path_connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1222 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1223 |   obtain U and T :: "('a \<times> real) set"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1224 |      where "convex U" "U \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1225 | and UT: "closedin (top_of_set U) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1226 | and "S homeomorphic T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1227 | apply (rule homeomorphic_closedin_convex [of S]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1228 | using aff_dim_le_DIM [of S] apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1229 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1230 | then have "locally path_connected T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1231 | by (meson ANR_imp_absolute_neighbourhood_retract | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1232 | assms convex_imp_locally_path_connected locally_open_subset retract_of_locally_path_connected) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1233 | then have S: "locally path_connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1234 |       if "openin (top_of_set U) V" "T retract_of V" "U \<noteq> {}" for V
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1235 | using \<open>S homeomorphic T\<close> homeomorphic_locally homeomorphic_path_connectedness by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1236 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1237 | using assms | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1238 | apply (clarsimp simp: ANR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1239 | apply (drule_tac x=U in spec) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1240 | apply (drule_tac x=T in spec) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1241 |     using \<open>S homeomorphic T\<close> \<open>U \<noteq> {}\<close> UT  apply (blast intro: S)
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1242 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1243 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1244 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1245 | lemma ANR_imp_locally_connected: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1246 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1247 | assumes "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1248 | shows "locally connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1249 | using locally_path_connected_imp_locally_connected ANR_imp_locally_path_connected assms by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1250 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1251 | lemma AR_imp_locally_path_connected: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1252 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1253 | assumes "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1254 | shows "locally path_connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1255 | by (simp add: ANR_imp_locally_path_connected AR_imp_ANR assms) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1256 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1257 | lemma AR_imp_locally_connected: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1258 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1259 | assumes "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1260 | shows "locally connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1261 | using ANR_imp_locally_connected AR_ANR assms by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1262 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1263 | lemma ENR_imp_locally_path_connected: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1264 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1265 | assumes "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1266 | shows "locally path_connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1267 | by (simp add: ANR_imp_locally_path_connected ENR_imp_ANR assms) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1268 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1269 | lemma ENR_imp_locally_connected: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1270 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1271 | assumes "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1272 | shows "locally connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1273 | using ANR_imp_locally_connected ENR_ANR assms by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1274 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1275 | lemma ANR_Times: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1276 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1277 | assumes "ANR S" "ANR T" shows "ANR(S \<times> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1278 | proof (clarsimp simp only: ANR_eq_absolute_neighbourhood_extensor) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1279 |   fix f :: " ('a \<times> 'b) \<times> real \<Rightarrow> 'a \<times> 'b" and U C
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1280 | assume "continuous_on C f" and fim: "f ` C \<subseteq> S \<times> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1281 | and cloUC: "closedin (top_of_set U) C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1282 | have contf1: "continuous_on C (fst \<circ> f)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1283 | by (simp add: \<open>continuous_on C f\<close> continuous_on_fst) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1284 | obtain W1 g where "C \<subseteq> W1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1285 | and UW1: "openin (top_of_set U) W1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1286 | and contg: "continuous_on W1 g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1287 | and gim: "g ` W1 \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1288 | and geq: "\<And>x. x \<in> C \<Longrightarrow> g x = (fst \<circ> f) x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1289 | apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> contf1 _ cloUC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1290 | using fim apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1291 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1292 | have contf2: "continuous_on C (snd \<circ> f)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1293 | by (simp add: \<open>continuous_on C f\<close> continuous_on_snd) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1294 | obtain W2 h where "C \<subseteq> W2" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1295 | and UW2: "openin (top_of_set U) W2" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1296 | and conth: "continuous_on W2 h" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1297 | and him: "h ` W2 \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1298 | and heq: "\<And>x. x \<in> C \<Longrightarrow> h x = (snd \<circ> f) x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1299 | apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf2 _ cloUC]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1300 | using fim apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1301 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1302 | show "\<exists>V g. C \<subseteq> V \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1303 | openin (top_of_set U) V \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1304 | continuous_on V g \<and> g ` V \<subseteq> S \<times> T \<and> (\<forall>x\<in>C. g x = f x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1305 | proof (intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1306 | show "C \<subseteq> W1 \<inter> W2" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1307 | by (simp add: \<open>C \<subseteq> W1\<close> \<open>C \<subseteq> W2\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1308 | show "openin (top_of_set U) (W1 \<inter> W2)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1309 | by (simp add: UW1 UW2 openin_Int) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1310 | show "continuous_on (W1 \<inter> W2) (\<lambda>x. (g x, h x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1311 | by (metis (no_types) contg conth continuous_on_Pair continuous_on_subset inf_commute inf_le1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1312 | show "(\<lambda>x. (g x, h x)) ` (W1 \<inter> W2) \<subseteq> S \<times> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1313 | using gim him by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1314 | show "(\<forall>x\<in>C. (g x, h x) = f x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1315 | using geq heq by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1316 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1317 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1318 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1319 | lemma AR_Times: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1320 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1321 | assumes "AR S" "AR T" shows "AR(S \<times> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1322 | using assms by (simp add: AR_ANR ANR_Times contractible_Times) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1323 | |
| 71173 | 1324 | (* Unused | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1325 | subsection\<^marker>\<open>tag unimportant\<close>\<open>Retracts and intervals in ordered euclidean space\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1326 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1327 | lemma ANR_interval [iff]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1328 | fixes a :: "'a::ordered_euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1329 |   shows "ANR{a..b}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1330 | by (simp add: interval_cbox) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1331 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1332 | lemma ENR_interval [iff]: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1333 | fixes a :: "'a::ordered_euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1334 |   shows "ENR{a..b}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1335 | by (auto simp: interval_cbox) | 
| 71173 | 1336 | *) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1337 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1338 | subsection \<open>More advanced properties of ANRs and ENRs\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1339 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1340 | lemma ENR_rel_frontier_convex: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1341 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1342 | assumes "bounded S" "convex S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1343 | shows "ENR(rel_frontier S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1344 | proof (cases "S = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1345 | case True then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1346 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1347 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1348 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1349 |   with assms have "rel_interior S \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1350 | by (simp add: rel_interior_eq_empty) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1351 | then obtain a where a: "a \<in> rel_interior S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1352 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1353 |   have ahS: "affine hull S - {a} \<subseteq> {x. closest_point (affine hull S) x \<noteq> a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1354 | by (auto simp: closest_point_self) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1355 |   have "rel_frontier S retract_of affine hull S - {a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1356 | by (simp add: assms a rel_frontier_retract_of_punctured_affine_hull) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1357 |   also have "\<dots> retract_of {x. closest_point (affine hull S) x \<noteq> a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1358 | apply (simp add: retract_of_def retraction_def ahS) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1359 | apply (rule_tac x="closest_point (affine hull S)" in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1360 | apply (auto simp: False closest_point_self affine_imp_convex closest_point_in_set continuous_on_closest_point) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1361 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1362 |   finally have "rel_frontier S retract_of {x. closest_point (affine hull S) x \<noteq> a}" .
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1363 |   moreover have "openin (top_of_set UNIV) (UNIV \<inter> closest_point (affine hull S) -` (- {a}))"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1364 | apply (rule continuous_openin_preimage_gen) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1365 | apply (auto simp: False affine_imp_convex continuous_on_closest_point) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1366 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1367 | ultimately show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1368 | unfolding ENR_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1369 |     apply (rule_tac x = "closest_point (affine hull S) -` (- {a})" in exI)
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1370 | apply (simp add: vimage_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1371 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1372 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1373 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1374 | lemma ANR_rel_frontier_convex: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1375 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1376 | assumes "bounded S" "convex S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1377 | shows "ANR(rel_frontier S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1378 | by (simp add: ENR_imp_ANR ENR_rel_frontier_convex assms) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1379 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1380 | lemma ENR_closedin_Un_local: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1381 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1382 | shows "\<lbrakk>ENR S; ENR T; ENR(S \<inter> T); | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1383 | closedin (top_of_set (S \<union> T)) S; closedin (top_of_set (S \<union> T)) T\<rbrakk> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1384 | \<Longrightarrow> ENR(S \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1385 | by (simp add: ENR_ANR ANR_closed_Un_local locally_compact_closedin_Un) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1386 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1387 | lemma ENR_closed_Un: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1388 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1389 | shows "\<lbrakk>closed S; closed T; ENR S; ENR T; ENR(S \<inter> T)\<rbrakk> \<Longrightarrow> ENR(S \<union> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1390 | by (auto simp: closed_subset ENR_closedin_Un_local) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1391 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1392 | lemma absolute_retract_Un: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1393 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1394 | shows "\<lbrakk>S retract_of UNIV; T retract_of UNIV; (S \<inter> T) retract_of UNIV\<rbrakk> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1395 | \<Longrightarrow> (S \<union> T) retract_of UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1396 | by (meson AR_closed_Un_local_aux closed_subset retract_of_UNIV retract_of_imp_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1397 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1398 | lemma retract_from_Un_Int: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1399 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1400 | assumes clS: "closedin (top_of_set (S \<union> T)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1401 | and clT: "closedin (top_of_set (S \<union> T)) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1402 | and Un: "(S \<union> T) retract_of U" and Int: "(S \<inter> T) retract_of T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1403 | shows "S retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1404 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1405 | obtain r where r: "continuous_on T r" "r ` T \<subseteq> S \<inter> T" "\<forall>x\<in>S \<inter> T. r x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1406 | using Int by (auto simp: retraction_def retract_of_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1407 | have "S retract_of S \<union> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1408 | unfolding retraction_def retract_of_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1409 | proof (intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1410 | show "continuous_on (S \<union> T) (\<lambda>x. if x \<in> S then x else r x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1411 | apply (rule continuous_on_cases_local [OF clS clT]) | 
| 71172 | 1412 | using r by (auto) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1413 | qed (use r in auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1414 | also have "\<dots> retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1415 | by (rule Un) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1416 | finally show ?thesis . | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1417 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1418 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1419 | lemma AR_from_Un_Int_local: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1420 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1421 | assumes clS: "closedin (top_of_set (S \<union> T)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1422 | and clT: "closedin (top_of_set (S \<union> T)) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1423 | and Un: "AR(S \<union> T)" and Int: "AR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1424 | shows "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1425 | apply (rule AR_retract_of_AR [OF Un]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1426 | by (meson AR_imp_retract clS clT closedin_closed_subset local.Int retract_from_Un_Int retract_of_refl sup_ge2) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1427 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1428 | lemma AR_from_Un_Int_local': | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1429 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1430 | assumes "closedin (top_of_set (S \<union> T)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1431 | and "closedin (top_of_set (S \<union> T)) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1432 | and "AR(S \<union> T)" "AR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1433 | shows "AR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1434 | using AR_from_Un_Int_local [of T S] assms by (simp add: Un_commute Int_commute) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1435 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1436 | lemma AR_from_Un_Int: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1437 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1438 | assumes clo: "closed S" "closed T" and Un: "AR(S \<union> T)" and Int: "AR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1439 | shows "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1440 | by (metis AR_from_Un_Int_local [OF _ _ Un Int] Un_commute clo closed_closedin closedin_closed_subset inf_sup_absorb subtopology_UNIV top_greatest) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1441 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1442 | lemma ANR_from_Un_Int_local: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1443 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1444 | assumes clS: "closedin (top_of_set (S \<union> T)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1445 | and clT: "closedin (top_of_set (S \<union> T)) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1446 | and Un: "ANR(S \<union> T)" and Int: "ANR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1447 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1448 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1449 | obtain V where clo: "closedin (top_of_set (S \<union> T)) (S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1450 | and ope: "openin (top_of_set (S \<union> T)) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1451 | and ret: "S \<inter> T retract_of V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1452 | using ANR_imp_neighbourhood_retract [OF Int] by (metis clS clT closedin_Int) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1453 | then obtain r where r: "continuous_on V r" and rim: "r ` V \<subseteq> S \<inter> T" and req: "\<forall>x\<in>S \<inter> T. r x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1454 | by (auto simp: retraction_def retract_of_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1455 | have Vsub: "V \<subseteq> S \<union> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1456 | by (meson ope openin_contains_cball) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1457 | have Vsup: "S \<inter> T \<subseteq> V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1458 | by (simp add: retract_of_imp_subset ret) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1459 | then have eq: "S \<union> V = ((S \<union> T) - T) \<union> V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1460 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1461 | have eq': "S \<union> V = S \<union> (V \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1462 | using Vsub by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1463 | have "continuous_on (S \<union> V \<inter> T) (\<lambda>x. if x \<in> S then x else r x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1464 | proof (rule continuous_on_cases_local) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1465 | show "closedin (top_of_set (S \<union> V \<inter> T)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1466 | using clS closedin_subset_trans inf.boundedE by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1467 | show "closedin (top_of_set (S \<union> V \<inter> T)) (V \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1468 | using clT Vsup by (auto simp: closedin_closed) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1469 | show "continuous_on (V \<inter> T) r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1470 | by (meson Int_lower1 continuous_on_subset r) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1471 | qed (use req continuous_on_id in auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1472 | with rim have "S retract_of S \<union> V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1473 | unfolding retraction_def retract_of_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1474 | apply (rule_tac x="\<lambda>x. if x \<in> S then x else r x" in exI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1475 | apply (auto simp: eq') | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1476 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1477 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1478 | using ANR_neighborhood_retract [OF Un] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1479 | using \<open>S \<union> V = S \<union> T - T \<union> V\<close> clT ope by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1480 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1481 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1482 | lemma ANR_from_Un_Int: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1483 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1484 | assumes clo: "closed S" "closed T" and Un: "ANR(S \<union> T)" and Int: "ANR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1485 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1486 | by (metis ANR_from_Un_Int_local [OF _ _ Un Int] Un_commute clo closed_closedin closedin_closed_subset inf_sup_absorb subtopology_UNIV top_greatest) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1487 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1488 | lemma ANR_finite_Union_convex_closed: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1489 | fixes \<T> :: "'a::euclidean_space set set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1490 | assumes \<T>: "finite \<T>" and clo: "\<And>C. C \<in> \<T> \<Longrightarrow> closed C" and con: "\<And>C. C \<in> \<T> \<Longrightarrow> convex C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1491 | shows "ANR(\<Union>\<T>)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1492 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1493 | have "ANR(\<Union>\<T>)" if "card \<T> < n" for n | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1494 | using assms that | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1495 | proof (induction n arbitrary: \<T>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1496 | case 0 then show ?case by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1497 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1498 | case (Suc n) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1499 | have "ANR(\<Union>\<U>)" if "finite \<U>" "\<U> \<subseteq> \<T>" for \<U> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1500 | using that | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1501 | proof (induction \<U>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1502 | case empty | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1503 | then show ?case by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1504 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1505 | case (insert C \<U>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1506 | have "ANR (C \<union> \<Union>\<U>)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1507 | proof (rule ANR_closed_Un) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1508 | show "ANR (C \<inter> \<Union>\<U>)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1509 | unfolding Int_Union | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1510 | proof (rule Suc) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1511 | show "finite ((\<inter>) C ` \<U>)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1512 | by (simp add: insert.hyps(1)) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1513 | show "\<And>Ca. Ca \<in> (\<inter>) C ` \<U> \<Longrightarrow> closed Ca" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1514 | by (metis (no_types, hide_lams) Suc.prems(2) closed_Int subsetD imageE insert.prems insertI1 insertI2) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1515 | show "\<And>Ca. Ca \<in> (\<inter>) C ` \<U> \<Longrightarrow> convex Ca" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1516 | by (metis (mono_tags, lifting) Suc.prems(3) convex_Int imageE insert.prems insert_subset subsetCE) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1517 | show "card ((\<inter>) C ` \<U>) < n" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1518 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1519 | have "card \<T> \<le> n" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1520 | by (meson Suc.prems(4) not_less not_less_eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1521 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1522 | by (metis Suc.prems(1) card_image_le card_seteq insert.hyps insert.prems insert_subset le_trans not_less) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1523 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1524 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1525 | show "closed (\<Union>\<U>)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1526 | using Suc.prems(2) insert.hyps(1) insert.prems by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1527 | qed (use Suc.prems convex_imp_ANR insert.prems insert.IH in auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1528 | then show ?case | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1529 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1530 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1531 | then show ?case | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1532 | using Suc.prems(1) by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1533 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1534 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1535 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1536 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1537 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1538 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1539 | lemma finite_imp_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1540 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1541 | assumes "finite S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1542 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1543 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1544 |   have "ANR(\<Union>x \<in> S. {x})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1545 | by (blast intro: ANR_finite_Union_convex_closed assms) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1546 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1547 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1548 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1549 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1550 | lemma ANR_insert: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1551 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1552 | assumes "ANR S" "closed S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1553 | shows "ANR(insert a S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1554 | by (metis ANR_closed_Un ANR_empty ANR_singleton Diff_disjoint Diff_insert_absorb assms closed_singleton insert_absorb insert_is_Un) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1555 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1556 | lemma ANR_path_component_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1557 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1558 | shows "ANR S \<Longrightarrow> ANR(path_component_set S x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1559 | using ANR_imp_locally_path_connected ANR_openin openin_path_component_locally_path_connected by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1560 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1561 | lemma ANR_connected_component_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1562 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1563 | shows "ANR S \<Longrightarrow> ANR(connected_component_set S x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1564 | by (metis ANR_openin openin_connected_component_locally_connected ANR_imp_locally_connected) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1565 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1566 | lemma ANR_component_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1567 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1568 | assumes "ANR S" "c \<in> components S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1569 | shows "ANR c" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1570 | by (metis ANR_connected_component_ANR assms componentsE) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1571 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1572 | subsection\<open>Original ANR material, now for ENRs\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1573 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1574 | lemma ENR_bounded: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1575 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1576 | assumes "bounded S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1577 | shows "ENR S \<longleftrightarrow> (\<exists>U. open U \<and> bounded U \<and> S retract_of U)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1578 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1579 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1580 | obtain r where "0 < r" and r: "S \<subseteq> ball 0 r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1581 | using bounded_subset_ballD assms by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1582 | assume ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1583 | then show ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1584 | apply (clarsimp simp: ENR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1585 | apply (rule_tac x="ball 0 r \<inter> U" in exI, auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1586 | using r retract_of_imp_subset retract_of_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1587 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1588 | assume ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1589 | then show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1590 | using ENR_def by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1591 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1592 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1593 | lemma absolute_retract_imp_AR_gen: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1594 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1595 |   assumes "S retract_of T" "convex T" "T \<noteq> {}" "S homeomorphic S'" "closedin (top_of_set U) S'"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1596 | shows "S' retract_of U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1597 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1598 | have "AR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1599 | by (simp add: assms convex_imp_AR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1600 | then have "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1601 | using AR_retract_of_AR assms by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1602 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1603 | using assms AR_imp_absolute_retract by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1604 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1605 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1606 | lemma absolute_retract_imp_AR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1607 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1608 | assumes "S retract_of UNIV" "S homeomorphic S'" "closed S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1609 | shows "S' retract_of UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1610 | using AR_imp_absolute_retract_UNIV assms retract_of_UNIV by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1611 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1612 | lemma homeomorphic_compact_arness: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1613 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1614 | assumes "S homeomorphic S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1615 | shows "compact S \<and> S retract_of UNIV \<longleftrightarrow> compact S' \<and> S' retract_of UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1616 | using assms homeomorphic_compactness | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1617 | apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1618 | apply (meson assms compact_AR homeomorphic_AR_iff_AR homeomorphic_compactness)+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1619 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1620 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1621 | lemma absolute_retract_from_Un_Int: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1622 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1623 | assumes "(S \<union> T) retract_of UNIV" "(S \<inter> T) retract_of UNIV" "closed S" "closed T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1624 | shows "S retract_of UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1625 | using AR_from_Un_Int assms retract_of_UNIV by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1626 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1627 | lemma ENR_from_Un_Int_gen: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1628 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1629 | assumes "closedin (top_of_set (S \<union> T)) S" "closedin (top_of_set (S \<union> T)) T" "ENR(S \<union> T)" "ENR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1630 | shows "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1631 | apply (simp add: ENR_ANR) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1632 | using ANR_from_Un_Int_local ENR_ANR assms locally_compact_closedin by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1633 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1634 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1635 | lemma ENR_from_Un_Int: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1636 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1637 | assumes "closed S" "closed T" "ENR(S \<union> T)" "ENR(S \<inter> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1638 | shows "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1639 | by (meson ENR_from_Un_Int_gen assms closed_subset sup_ge1 sup_ge2) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1640 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1641 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1642 | lemma ENR_finite_Union_convex_closed: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1643 | fixes \<T> :: "'a::euclidean_space set set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1644 | assumes \<T>: "finite \<T>" and clo: "\<And>C. C \<in> \<T> \<Longrightarrow> closed C" and con: "\<And>C. C \<in> \<T> \<Longrightarrow> convex C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1645 | shows "ENR(\<Union> \<T>)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1646 | by (simp add: ENR_ANR ANR_finite_Union_convex_closed \<T> clo closed_Union closed_imp_locally_compact con) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1647 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1648 | lemma finite_imp_ENR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1649 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1650 | shows "finite S \<Longrightarrow> ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1651 | by (simp add: ENR_ANR finite_imp_ANR finite_imp_closed closed_imp_locally_compact) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1652 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1653 | lemma ENR_insert: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1654 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1655 | assumes "closed S" "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1656 | shows "ENR(insert a S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1657 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1658 |   have "ENR ({a} \<union> S)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1659 | by (metis ANR_insert ENR_ANR Un_commute Un_insert_right assms closed_imp_locally_compact closed_insert sup_bot_right) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1660 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1661 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1662 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1663 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1664 | lemma ENR_path_component_ENR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1665 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1666 | assumes "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1667 | shows "ENR(path_component_set S x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1668 | by (metis ANR_imp_locally_path_connected ENR_empty ENR_imp_ANR ENR_openin assms | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1669 | locally_path_connected_2 openin_subtopology_self path_component_eq_empty) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1670 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1671 | (*UNUSED | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1672 | lemma ENR_Times: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1673 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1674 | assumes "ENR S" "ENR T" shows "ENR(S \<times> T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1675 | using assms apply (simp add: ENR_ANR ANR_Times) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1676 | thm locally_compact_Times | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1677 | oops | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1678 | SIMP_TAC[ENR_ANR; ANR_PCROSS; LOCALLY_COMPACT_PCROSS]);; | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1679 | *) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1680 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1681 | subsection\<open>Finally, spheres are ANRs and ENRs\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1682 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1683 | lemma absolute_retract_homeomorphic_convex_compact: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1684 | fixes S :: "'a::euclidean_space set" and U :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1685 |   assumes "S homeomorphic U" "S \<noteq> {}" "S \<subseteq> T" "convex U" "compact U"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1686 | shows "S retract_of T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1687 | by (metis UNIV_I assms compact_AR convex_imp_AR homeomorphic_AR_iff_AR homeomorphic_compactness homeomorphic_empty(1) retract_of_subset subsetI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1688 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1689 | lemma frontier_retract_of_punctured_universe: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1690 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1691 | assumes "convex S" "bounded S" "a \<in> interior S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1692 |   shows "(frontier S) retract_of (- {a})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1693 | using rel_frontier_retract_of_punctured_affine_hull | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1694 | by (metis Compl_eq_Diff_UNIV affine_hull_nonempty_interior assms empty_iff rel_frontier_frontier rel_interior_nonempty_interior) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1695 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1696 | lemma sphere_retract_of_punctured_universe_gen: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1697 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1698 | assumes "b \<in> ball a r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1699 |   shows  "sphere a r retract_of (- {b})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1700 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1701 |   have "frontier (cball a r) retract_of (- {b})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1702 | apply (rule frontier_retract_of_punctured_universe) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1703 | using assms by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1704 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1705 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1706 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1707 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1708 | lemma sphere_retract_of_punctured_universe: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1709 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1710 | assumes "0 < r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1711 |   shows "sphere a r retract_of (- {a})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1712 | by (simp add: assms sphere_retract_of_punctured_universe_gen) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1713 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1714 | lemma ENR_sphere: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1715 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1716 | shows "ENR(sphere a r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1717 | proof (cases "0 < r") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1718 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1719 |   then have "sphere a r retract_of -{a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1720 | by (simp add: sphere_retract_of_punctured_universe) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1721 | with open_delete show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1722 | by (auto simp: ENR_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1723 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1724 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1725 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1726 | using finite_imp_ENR | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1727 | by (metis finite_insert infinite_imp_nonempty less_linear sphere_eq_empty sphere_trivial) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1728 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1729 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1730 | corollary\<^marker>\<open>tag unimportant\<close> ANR_sphere: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1731 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1732 | shows "ANR(sphere a r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1733 | by (simp add: ENR_imp_ANR ENR_sphere) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1734 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1735 | subsection\<open>Spheres are connected, etc\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1736 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1737 | lemma locally_path_connected_sphere_gen: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1738 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1739 | assumes "bounded S" and "convex S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1740 | shows "locally path_connected (rel_frontier S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1741 | proof (cases "rel_interior S = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1742 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1743 | with assms show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1744 | by (simp add: rel_interior_eq_empty) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1745 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1746 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1747 | then obtain a where a: "a \<in> rel_interior S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1748 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1749 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1750 | proof (rule retract_of_locally_path_connected) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1751 |     show "locally path_connected (affine hull S - {a})"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1752 | by (meson convex_affine_hull convex_imp_locally_path_connected locally_open_subset openin_delete openin_subtopology_self) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1753 |     show "rel_frontier S retract_of affine hull S - {a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1754 | using a assms rel_frontier_retract_of_punctured_affine_hull by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1755 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1756 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1757 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1758 | lemma locally_connected_sphere_gen: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1759 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1760 | assumes "bounded S" and "convex S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1761 | shows "locally connected (rel_frontier S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1762 | by (simp add: ANR_imp_locally_connected ANR_rel_frontier_convex assms) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1763 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1764 | lemma locally_path_connected_sphere: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1765 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1766 | shows "locally path_connected (sphere a r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1767 | using ENR_imp_locally_path_connected ENR_sphere by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1768 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1769 | lemma locally_connected_sphere: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1770 | fixes a :: "'a::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1771 | shows "locally connected(sphere a r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1772 | using ANR_imp_locally_connected ANR_sphere by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1773 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1774 | subsection\<open>Borsuk homotopy extension theorem\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1775 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1776 | text\<open>It's only this late so we can use the concept of retraction, | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1777 | saying that the domain sets or range set are ENRs.\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1778 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1779 | theorem Borsuk_homotopy_extension_homotopic: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1780 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1781 | assumes cloTS: "closedin (top_of_set T) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1782 | and anr: "(ANR S \<and> ANR T) \<or> ANR U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1783 | and contf: "continuous_on T f" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1784 | and "f ` T \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1785 | and "homotopic_with_canon (\<lambda>x. True) S U f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1786 | obtains g' where "homotopic_with_canon (\<lambda>x. True) T U f g'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1787 | "continuous_on T g'" "image g' T \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1788 | "\<And>x. x \<in> S \<Longrightarrow> g' x = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1789 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1790 | have "S \<subseteq> T" using assms closedin_imp_subset by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1791 |   obtain h where conth: "continuous_on ({0..1} \<times> S) h"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1792 |              and him: "h ` ({0..1} \<times> S) \<subseteq> U"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1793 | and [simp]: "\<And>x. h(0, x) = f x" "\<And>x. h(1::real, x) = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1794 | using assms by (auto simp: homotopic_with_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1795 | define h' where "h' \<equiv> \<lambda>z. if snd z \<in> S then h z else (f \<circ> snd) z" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1796 |   define B where "B \<equiv> {0::real} \<times> T \<union> {0..1} \<times> S"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1797 |   have clo0T: "closedin (top_of_set ({0..1} \<times> T)) ({0::real} \<times> T)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1798 | by (simp add: Abstract_Topology.closedin_Times) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1799 |   moreover have cloT1S: "closedin (top_of_set ({0..1} \<times> T)) ({0..1} \<times> S)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1800 | by (simp add: Abstract_Topology.closedin_Times assms) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1801 |   ultimately have clo0TB:"closedin (top_of_set ({0..1} \<times> T)) B"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1802 | by (auto simp: B_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1803 |   have cloBS: "closedin (top_of_set B) ({0..1} \<times> S)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1804 | by (metis (no_types) Un_subset_iff B_def closedin_subset_trans [OF cloT1S] clo0TB closedin_imp_subset closedin_self) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1805 |   moreover have cloBT: "closedin (top_of_set B) ({0} \<times> T)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1806 | using \<open>S \<subseteq> T\<close> closedin_subset_trans [OF clo0T] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1807 | by (metis B_def Un_upper1 clo0TB closedin_closed inf_le1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1808 |   moreover have "continuous_on ({0} \<times> T) (f \<circ> snd)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1809 | apply (rule continuous_intros)+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1810 | apply (simp add: contf) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1811 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1812 | ultimately have conth': "continuous_on B h'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1813 |     apply (simp add: h'_def B_def Un_commute [of "{0} \<times> T"])
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1814 | apply (auto intro!: continuous_on_cases_local conth) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1815 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1816 | have "image h' B \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1817 | using \<open>f ` T \<subseteq> U\<close> him by (auto simp: h'_def B_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1818 |   obtain V k where "B \<subseteq> V" and opeTV: "openin (top_of_set ({0..1} \<times> T)) V"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1819 | and contk: "continuous_on V k" and kim: "k ` V \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1820 | and keq: "\<And>x. x \<in> B \<Longrightarrow> k x = h' x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1821 | using anr | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1822 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1823 | assume ST: "ANR S \<and> ANR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1824 |     have eq: "({0} \<times> T \<inter> {0..1} \<times> S) = {0::real} \<times> S"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1825 | using \<open>S \<subseteq> T\<close> by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1826 | have "ANR B" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1827 | apply (simp add: B_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1828 | apply (rule ANR_closed_Un_local) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1829 | apply (metis cloBT B_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1830 | apply (metis Un_commute cloBS B_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1831 | apply (simp_all add: ANR_Times convex_imp_ANR ANR_singleton ST eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1832 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1833 | note Vk = that | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1834 |     have *: thesis if "openin (top_of_set ({0..1::real} \<times> T)) V"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1835 | "retraction V B r" for V r | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1836 | using that | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1837 | apply (clarsimp simp add: retraction_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1838 | apply (rule Vk [of V "h' \<circ> r"], assumption+) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1839 | apply (metis continuous_on_compose conth' continuous_on_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1840 | using \<open>h' ` B \<subseteq> U\<close> apply force+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1841 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1842 | show thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1843 | apply (rule ANR_imp_neighbourhood_retract [OF \<open>ANR B\<close> clo0TB]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1844 | apply (auto simp: ANR_Times ANR_singleton ST retract_of_def *) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1845 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1846 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1847 | assume "ANR U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1848 | with ANR_imp_absolute_neighbourhood_extensor \<open>h' ` B \<subseteq> U\<close> clo0TB conth' that | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1849 | show ?thesis by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1850 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1851 |   define S' where "S' \<equiv> {x. \<exists>u::real. u \<in> {0..1} \<and> (u, x::'a) \<in> {0..1} \<times> T - V}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1852 | have "closedin (top_of_set T) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1853 | unfolding S'_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1854 | apply (rule closedin_compact_projection, blast) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1855 | using closedin_self opeTV by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1856 |   have S'_def: "S' = {x. \<exists>u::real.  (u, x::'a) \<in> {0..1} \<times> T - V}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1857 | by (auto simp: S'_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1858 | have cloTS': "closedin (top_of_set T) S'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1859 | using S'_def \<open>closedin (top_of_set T) S'\<close> by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1860 |   have "S \<inter> S' = {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1861 | using S'_def B_def \<open>B \<subseteq> V\<close> by force | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1862 | obtain a :: "'a \<Rightarrow> real" where conta: "continuous_on T a" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1863 | and "\<And>x. x \<in> T \<Longrightarrow> a x \<in> closed_segment 1 0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1864 | and a1: "\<And>x. x \<in> S \<Longrightarrow> a x = 1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1865 | and a0: "\<And>x. x \<in> S' \<Longrightarrow> a x = 0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1866 |     apply (rule Urysohn_local [OF cloTS cloTS' \<open>S \<inter> S' = {}\<close>, of 1 0], blast)
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1867 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1868 |   then have ain: "\<And>x. x \<in> T \<Longrightarrow> a x \<in> {0..1}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1869 | using closed_segment_eq_real_ivl by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1870 | have inV: "(u * a t, t) \<in> V" if "t \<in> T" "0 \<le> u" "u \<le> 1" for t u | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1871 | proof (rule ccontr) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1872 | assume "(u * a t, t) \<notin> V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1873 | with ain [OF \<open>t \<in> T\<close>] have "a t = 0" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1874 | apply simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1875 | apply (rule a0) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1876 | by (metis (no_types, lifting) Diff_iff S'_def SigmaI atLeastAtMost_iff mem_Collect_eq mult_le_one mult_nonneg_nonneg that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1877 | show False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1878 | using B_def \<open>(u * a t, t) \<notin> V\<close> \<open>B \<subseteq> V\<close> \<open>a t = 0\<close> that by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1879 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1880 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1881 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1882 | show hom: "homotopic_with_canon (\<lambda>x. True) T U f (\<lambda>x. k (a x, x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1883 | proof (simp add: homotopic_with, intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1884 |       show "continuous_on ({0..1} \<times> T) (k \<circ> (\<lambda>z. (fst z *\<^sub>R (a \<circ> snd) z, snd z)))"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1885 | apply (intro continuous_on_compose continuous_intros) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1886 | apply (rule continuous_on_subset [OF conta], force) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1887 | apply (rule continuous_on_subset [OF contk]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1888 | apply (force intro: inV) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1889 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1890 |       show "(k \<circ> (\<lambda>z. (fst z *\<^sub>R (a \<circ> snd) z, snd z))) ` ({0..1} \<times> T) \<subseteq> U"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1891 | using inV kim by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1892 | show "\<forall>x\<in>T. (k \<circ> (\<lambda>z. (fst z *\<^sub>R (a \<circ> snd) z, snd z))) (0, x) = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1893 | by (simp add: B_def h'_def keq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1894 | show "\<forall>x\<in>T. (k \<circ> (\<lambda>z. (fst z *\<^sub>R (a \<circ> snd) z, snd z))) (1, x) = k (a x, x)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1895 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1896 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1897 | show "continuous_on T (\<lambda>x. k (a x, x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1898 | using homotopic_with_imp_continuous_maps [OF hom] by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1899 | show "(\<lambda>x. k (a x, x)) ` T \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1900 | proof clarify | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1901 | fix t | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1902 | assume "t \<in> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1903 | show "k (a t, t) \<in> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1904 | by (metis \<open>t \<in> T\<close> image_subset_iff inV kim not_one_le_zero linear mult_cancel_right1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1905 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1906 | show "\<And>x. x \<in> S \<Longrightarrow> k (a x, x) = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1907 | by (simp add: B_def a1 h'_def keq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1908 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1909 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1910 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1911 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1912 | corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_ANR_extension: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1913 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1914 | assumes "closed S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1915 | and contf: "continuous_on S f" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1916 | and "ANR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1917 | and fim: "f ` S \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1918 |       and "S \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1919 | shows "(\<exists>c. homotopic_with_canon (\<lambda>x. True) S T f (\<lambda>x. c)) \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1920 | (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> T \<and> (\<forall>x \<in> S. g x = f x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1921 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1922 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1923 | assume ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1924 | then obtain c where c: "homotopic_with_canon (\<lambda>x. True) S T (\<lambda>x. c) f" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1925 | by (blast intro: homotopic_with_symD) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1926 | have "closedin (top_of_set UNIV) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1927 | using \<open>closed S\<close> closed_closedin by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1928 | then obtain g where "continuous_on UNIV g" "range g \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1929 | "\<And>x. x \<in> S \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1930 | apply (rule Borsuk_homotopy_extension_homotopic [OF _ _ continuous_on_const _ c, where T=UNIV]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1931 |     using \<open>ANR T\<close> \<open>S \<noteq> {}\<close> c homotopic_with_imp_subset1 apply fastforce+
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1932 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1933 | then show ?rhs by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1934 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1935 | assume ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1936 | then obtain g where "continuous_on UNIV g" "range g \<subseteq> T" "\<And>x. x\<in>S \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1937 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1938 | then obtain c where "homotopic_with_canon (\<lambda>h. True) UNIV T g (\<lambda>x. c)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1939 | using nullhomotopic_from_contractible [of UNIV g T] contractible_UNIV by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1940 | then have "homotopic_with_canon (\<lambda>x. True) S T g (\<lambda>x. c)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1941 | by (simp add: homotopic_from_subtopology) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1942 | then show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1943 | by (force elim: homotopic_with_eq [of _ _ _ g "\<lambda>x. c"] simp: \<open>\<And>x. x \<in> S \<Longrightarrow> g x = f x\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1944 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1945 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1946 | corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_rel_frontier_extension: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1947 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1948 | assumes "closed S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1949 | and contf: "continuous_on S f" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1950 | and "convex T" "bounded T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1951 | and fim: "f ` S \<subseteq> rel_frontier T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1952 |       and "S \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1953 | shows "(\<exists>c. homotopic_with_canon (\<lambda>x. True) S (rel_frontier T) f (\<lambda>x. c)) \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1954 | (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> rel_frontier T \<and> (\<forall>x \<in> S. g x = f x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1955 | by (simp add: nullhomotopic_into_ANR_extension assms ANR_rel_frontier_convex) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1956 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1957 | corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_sphere_extension: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1958 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b :: euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1959 | assumes "closed S" and contf: "continuous_on S f" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1960 |       and "S \<noteq> {}" and fim: "f ` S \<subseteq> sphere a r"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1961 | shows "((\<exists>c. homotopic_with_canon (\<lambda>x. True) S (sphere a r) f (\<lambda>x. c)) \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1962 | (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> sphere a r \<and> (\<forall>x \<in> S. g x = f x)))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1963 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1964 | proof (cases "r = 0") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1965 | case True with fim show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1966 | apply auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1967 | using fim continuous_on_const apply fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1968 | by (metis contf contractible_sing nullhomotopic_into_contractible) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1969 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1970 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1971 | then have eq: "sphere a r = rel_frontier (cball a r)" by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1972 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1973 | using fim unfolding eq | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1974 | apply (rule nullhomotopic_into_rel_frontier_extension [OF \<open>closed S\<close> contf convex_cball bounded_cball]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1975 |     apply (rule \<open>S \<noteq> {}\<close>)
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1976 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1977 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1978 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1979 | proposition\<^marker>\<open>tag unimportant\<close> Borsuk_map_essential_bounded_component: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1980 | fixes a :: "'a :: euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1981 | assumes "compact S" and "a \<notin> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1982 | shows "bounded (connected_component_set (- S) a) \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1983 | \<not>(\<exists>c. homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1984 | (\<lambda>x. inverse(norm(x - a)) *\<^sub>R (x - a)) (\<lambda>x. c))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1985 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1986 | proof (cases "S = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1987 | case True then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1988 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1989 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1990 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1991 | have "closed S" "bounded S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1992 | using \<open>compact S\<close> compact_eq_bounded_closed by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1993 | have s01: "(\<lambda>x. (x - a) /\<^sub>R norm (x - a)) ` S \<subseteq> sphere 0 1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1994 | using \<open>a \<notin> S\<close> by clarsimp (metis dist_eq_0_iff dist_norm mult.commute right_inverse) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1995 | have aincc: "a \<in> connected_component_set (- S) a" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1996 | by (simp add: \<open>a \<notin> S\<close>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1997 | obtain r where "r>0" and r: "S \<subseteq> ball 0 r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1998 | using bounded_subset_ballD \<open>bounded S\<close> by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1999 | have "\<not> ?rhs \<longleftrightarrow> \<not> ?lhs" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2000 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2001 | assume notr: "\<not> ?rhs" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2002 | have nog: "\<nexists>g. continuous_on (S \<union> connected_component_set (- S) a) g \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2003 | g ` (S \<union> connected_component_set (- S) a) \<subseteq> sphere 0 1 \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2004 | (\<forall>x\<in>S. g x = (x - a) /\<^sub>R norm (x - a))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2005 | if "bounded (connected_component_set (- S) a)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2006 | apply (rule non_extensible_Borsuk_map [OF \<open>compact S\<close> componentsI _ aincc]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2007 | using \<open>a \<notin> S\<close> that by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2008 | obtain g where "range g \<subseteq> sphere 0 1" "continuous_on UNIV g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2009 | "\<And>x. x \<in> S \<Longrightarrow> g x = (x - a) /\<^sub>R norm (x - a)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2010 | using notr | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2011 | by (auto simp: nullhomotopic_into_sphere_extension | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2012 | [OF \<open>closed S\<close> continuous_on_Borsuk_map [OF \<open>a \<notin> S\<close>] False s01]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2013 | with \<open>a \<notin> S\<close> show "\<not> ?lhs" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2014 | apply (clarsimp simp: Borsuk_map_into_sphere [of a S, symmetric] dest!: nog) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2015 | apply (drule_tac x=g in spec) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2016 | using continuous_on_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2017 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2018 | assume "\<not> ?lhs" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2019 | then obtain b where b: "b \<in> connected_component_set (- S) a" and "r \<le> norm b" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2020 | using bounded_iff linear by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2021 | then have bnot: "b \<notin> ball 0 r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2022 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2023 | have "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) (\<lambda>x. (x - a) /\<^sub>R norm (x - a)) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2024 | (\<lambda>x. (x - b) /\<^sub>R norm (x - b))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2025 | apply (rule Borsuk_maps_homotopic_in_path_component) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2026 | using \<open>closed S\<close> b open_Compl open_path_connected_component apply fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2027 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2028 | moreover | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2029 | obtain c where "homotopic_with_canon (\<lambda>x. True) (ball 0 r) (sphere 0 1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2030 | (\<lambda>x. inverse (norm (x - b)) *\<^sub>R (x - b)) (\<lambda>x. c)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2031 | proof (rule nullhomotopic_from_contractible) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2032 | show "contractible (ball (0::'a) r)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2033 | by (metis convex_imp_contractible convex_ball) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2034 | show "continuous_on (ball 0 r) (\<lambda>x. inverse(norm (x - b)) *\<^sub>R (x - b))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2035 | by (rule continuous_on_Borsuk_map [OF bnot]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2036 | show "(\<lambda>x. (x - b) /\<^sub>R norm (x - b)) ` ball 0 r \<subseteq> sphere 0 1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2037 | using bnot Borsuk_map_into_sphere by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2038 | qed blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2039 | ultimately have "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) (\<lambda>x. (x - a) /\<^sub>R norm (x - a)) (\<lambda>x. c)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2040 | by (meson homotopic_with_subset_left homotopic_with_trans r) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2041 | then show "\<not> ?rhs" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2042 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2043 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2044 | then show ?thesis by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2045 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2046 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2047 | lemma homotopic_Borsuk_maps_in_bounded_component: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2048 | fixes a :: "'a :: euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2049 | assumes "compact S" and "a \<notin> S"and "b \<notin> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2050 | and boc: "bounded (connected_component_set (- S) a)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2051 | and hom: "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2052 | (\<lambda>x. (x - a) /\<^sub>R norm (x - a)) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2053 | (\<lambda>x. (x - b) /\<^sub>R norm (x - b))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2054 | shows "connected_component (- S) a b" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2055 | proof (rule ccontr) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2056 | assume notcc: "\<not> connected_component (- S) a b" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2057 | let ?T = "S \<union> connected_component_set (- S) a" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2058 | have "\<nexists>g. continuous_on (S \<union> connected_component_set (- S) a) g \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2059 | g ` (S \<union> connected_component_set (- S) a) \<subseteq> sphere 0 1 \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2060 | (\<forall>x\<in>S. g x = (x - a) /\<^sub>R norm (x - a))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2061 | by (simp add: \<open>a \<notin> S\<close> componentsI non_extensible_Borsuk_map [OF \<open>compact S\<close> _ boc]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2062 | moreover obtain g where "continuous_on (S \<union> connected_component_set (- S) a) g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2063 | "g ` (S \<union> connected_component_set (- S) a) \<subseteq> sphere 0 1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2064 | "\<And>x. x \<in> S \<Longrightarrow> g x = (x - a) /\<^sub>R norm (x - a)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2065 | proof (rule Borsuk_homotopy_extension_homotopic) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2066 | show "closedin (top_of_set ?T) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2067 | by (simp add: \<open>compact S\<close> closed_subset compact_imp_closed) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2068 | show "continuous_on ?T (\<lambda>x. (x - b) /\<^sub>R norm (x - b))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2069 | by (simp add: \<open>b \<notin> S\<close> notcc continuous_on_Borsuk_map) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2070 | show "(\<lambda>x. (x - b) /\<^sub>R norm (x - b)) ` ?T \<subseteq> sphere 0 1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2071 | by (simp add: \<open>b \<notin> S\<close> notcc Borsuk_map_into_sphere) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2072 | show "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2073 | (\<lambda>x. (x - b) /\<^sub>R norm (x - b)) (\<lambda>x. (x - a) /\<^sub>R norm (x - a))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2074 | by (simp add: hom homotopic_with_symD) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2075 | qed (auto simp: ANR_sphere intro: that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2076 | ultimately show False by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2077 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2078 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2079 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2080 | lemma Borsuk_maps_homotopic_in_connected_component_eq: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2081 | fixes a :: "'a :: euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2082 |   assumes S: "compact S" "a \<notin> S" "b \<notin> S" and 2: "2 \<le> DIM('a)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2083 | shows "(homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2084 | (\<lambda>x. (x - a) /\<^sub>R norm (x - a)) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2085 | (\<lambda>x. (x - b) /\<^sub>R norm (x - b)) \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2086 | connected_component (- S) a b)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2087 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2088 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2089 | assume L: ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2090 | show ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2091 | proof (cases "bounded(connected_component_set (- S) a)") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2092 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2093 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2094 | by (rule homotopic_Borsuk_maps_in_bounded_component [OF S True L]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2095 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2096 | case not_bo_a: False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2097 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2098 | proof (cases "bounded(connected_component_set (- S) b)") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2099 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2100 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2101 | using homotopic_Borsuk_maps_in_bounded_component [OF S] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2102 | by (simp add: L True assms connected_component_sym homotopic_Borsuk_maps_in_bounded_component homotopic_with_sym) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2103 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2104 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2105 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2106 | using cobounded_unique_unbounded_component [of "-S" a b] \<open>compact S\<close> not_bo_a | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2107 | by (auto simp: compact_eq_bounded_closed assms connected_component_eq_eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2108 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2109 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2110 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2111 | assume R: ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2112 | then have "path_component (- S) a b" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2113 | using assms(1) compact_eq_bounded_closed open_Compl open_path_connected_component_set by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2114 | then show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2115 | by (simp add: Borsuk_maps_homotopic_in_path_component) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2116 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2117 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2118 | subsection\<open>More extension theorems\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2119 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2120 | lemma extension_from_clopen: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2121 | assumes ope: "openin (top_of_set S) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2122 | and clo: "closedin (top_of_set S) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2123 |       and contf: "continuous_on T f" and fim: "f ` T \<subseteq> U" and null: "U = {} \<Longrightarrow> S = {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2124 | obtains g where "continuous_on S g" "g ` S \<subseteq> U" "\<And>x. x \<in> T \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2125 | proof (cases "U = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2126 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2127 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2128 | by (simp add: null that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2129 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2130 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2131 | then obtain a where "a \<in> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2132 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2133 | let ?g = "\<lambda>x. if x \<in> T then f x else a" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2134 | have Seq: "S = T \<union> (S - T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2135 | using clo closedin_imp_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2136 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2137 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2138 | have "continuous_on (T \<union> (S - T)) ?g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2139 | apply (rule continuous_on_cases_local) | 
| 71172 | 2140 | using Seq clo ope by (auto simp: contf intro: continuous_on_cases_local) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2141 | with Seq show "continuous_on S ?g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2142 | by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2143 | show "?g ` S \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2144 | using \<open>a \<in> U\<close> fim by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2145 | show "\<And>x. x \<in> T \<Longrightarrow> ?g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2146 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2147 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2148 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2149 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2150 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2151 | lemma extension_from_component: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2152 | fixes f :: "'a :: euclidean_space \<Rightarrow> 'b :: euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2153 | assumes S: "locally connected S \<or> compact S" and "ANR U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2154 | and C: "C \<in> components S" and contf: "continuous_on C f" and fim: "f ` C \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2155 | obtains g where "continuous_on S g" "g ` S \<subseteq> U" "\<And>x. x \<in> C \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2156 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2157 | obtain T g where ope: "openin (top_of_set S) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2158 | and clo: "closedin (top_of_set S) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2159 | and "C \<subseteq> T" and contg: "continuous_on T g" and gim: "g ` T \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2160 | and gf: "\<And>x. x \<in> C \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2161 | using S | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2162 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2163 | assume "locally connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2164 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2165 | by (metis C \<open>locally connected S\<close> openin_components_locally_connected closedin_component contf fim order_refl that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2166 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2167 | assume "compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2168 | then obtain W g where "C \<subseteq> W" and opeW: "openin (top_of_set S) W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2169 | and contg: "continuous_on W g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2170 | and gim: "g ` W \<subseteq> U" and gf: "\<And>x. x \<in> C \<Longrightarrow> g x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2171 | using ANR_imp_absolute_neighbourhood_extensor [of U C f S] C \<open>ANR U\<close> closedin_component contf fim by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2172 | then obtain V where "open V" and V: "W = S \<inter> V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2173 | by (auto simp: openin_open) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2174 | moreover have "locally compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2175 | by (simp add: \<open>compact S\<close> closed_imp_locally_compact compact_imp_closed) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2176 | ultimately obtain K where opeK: "openin (top_of_set S) K" and "compact K" "C \<subseteq> K" "K \<subseteq> V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2177 | by (metis C Int_subset_iff \<open>C \<subseteq> W\<close> \<open>compact S\<close> compact_components Sura_Bura_clopen_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2178 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2179 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2180 | show "closedin (top_of_set S) K" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2181 | by (meson \<open>compact K\<close> \<open>compact S\<close> closedin_compact_eq opeK openin_imp_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2182 | show "continuous_on K g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2183 | by (metis Int_subset_iff V \<open>K \<subseteq> V\<close> contg continuous_on_subset opeK openin_subtopology subset_eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2184 | show "g ` K \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2185 | using V \<open>K \<subseteq> V\<close> gim opeK openin_imp_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2186 | qed (use opeK gf \<open>C \<subseteq> K\<close> in auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2187 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2188 | obtain h where "continuous_on S h" "h ` S \<subseteq> U" "\<And>x. x \<in> T \<Longrightarrow> h x = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2189 | using extension_from_clopen | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2190 | by (metis C bot.extremum_uniqueI clo contg gim fim image_is_empty in_components_nonempty ope) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2191 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2192 | by (metis \<open>C \<subseteq> T\<close> gf subset_eq that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2193 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2194 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2195 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2196 | lemma tube_lemma: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2197 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2198 |   assumes "compact S" and S: "S \<noteq> {}" "(\<lambda>x. (x,a)) ` S \<subseteq> U" 
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2199 | and ope: "openin (top_of_set (S \<times> T)) U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2200 | obtains V where "openin (top_of_set T) V" "a \<in> V" "S \<times> V \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2201 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2202 |   let ?W = "{y. \<exists>x. x \<in> S \<and> (x, y) \<in> (S \<times> T - U)}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2203 | have "U \<subseteq> S \<times> T" "closedin (top_of_set (S \<times> T)) (S \<times> T - U)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2204 | using ope by (auto simp: openin_closedin_eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2205 | then have "closedin (top_of_set T) ?W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2206 | using \<open>compact S\<close> closedin_compact_projection by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2207 | moreover have "a \<in> T - ?W" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2208 | using \<open>U \<subseteq> S \<times> T\<close> S by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2209 | moreover have "S \<times> (T - ?W) \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2210 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2211 | ultimately show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2212 | by (metis (no_types, lifting) Sigma_cong closedin_def that topspace_euclidean_subtopology) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2213 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2214 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2215 | lemma tube_lemma_gen: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2216 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2217 |   assumes "compact S" "S \<noteq> {}" "T \<subseteq> T'" "S \<times> T \<subseteq> U"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2218 | and ope: "openin (top_of_set (S \<times> T')) U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2219 | obtains V where "openin (top_of_set T') V" "T \<subseteq> V" "S \<times> V \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2220 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2221 | have "\<And>x. x \<in> T \<Longrightarrow> \<exists>V. openin (top_of_set T') V \<and> x \<in> V \<and> S \<times> V \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2222 | using assms by (auto intro: tube_lemma [OF \<open>compact S\<close>]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2223 | then obtain F where F: "\<And>x. x \<in> T \<Longrightarrow> openin (top_of_set T') (F x) \<and> x \<in> F x \<and> S \<times> F x \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2224 | by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2225 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2226 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2227 | show "openin (top_of_set T') (\<Union>(F ` T))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2228 | using F by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2229 | show "T \<subseteq> \<Union>(F ` T)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2230 | using F by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2231 | show "S \<times> \<Union>(F ` T) \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2232 | using F by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2233 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2234 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2235 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2236 | proposition\<^marker>\<open>tag unimportant\<close> homotopic_neighbourhood_extension: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2237 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2238 | assumes contf: "continuous_on S f" and fim: "f ` S \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2239 | and contg: "continuous_on S g" and gim: "g ` S \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2240 | and clo: "closedin (top_of_set S) T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2241 | and "ANR U" and hom: "homotopic_with_canon (\<lambda>x. True) T U f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2242 | obtains V where "T \<subseteq> V" "openin (top_of_set S) V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2243 | "homotopic_with_canon (\<lambda>x. True) V U f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2244 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2245 | have "T \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2246 | using clo closedin_imp_subset by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2247 |   obtain h where conth: "continuous_on ({0..1::real} \<times> T) h"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2248 |              and him: "h ` ({0..1} \<times> T) \<subseteq> U"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2249 | and h0: "\<And>x. h(0, x) = f x" and h1: "\<And>x. h(1, x) = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2250 | using hom by (auto simp: homotopic_with_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2251 |   define h' where "h' \<equiv> \<lambda>z. if fst z \<in> {0} then f(snd z)
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2252 |                              else if fst z \<in> {1} then g(snd z)
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2253 | else h z" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2254 |   let ?S0 = "{0::real} \<times> S" and ?S1 = "{1::real} \<times> S"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2255 |   have "continuous_on(?S0 \<union> (?S1 \<union> {0..1} \<times> T)) h'"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2256 | unfolding h'_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2257 | proof (intro continuous_on_cases_local) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2258 |     show "closedin (top_of_set (?S0 \<union> (?S1 \<union> {0..1} \<times> T))) ?S0"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2259 |          "closedin (top_of_set (?S1 \<union> {0..1} \<times> T)) ?S1"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2260 |       using \<open>T \<subseteq> S\<close> by (force intro: closedin_Times closedin_subset_trans [of "{0..1} \<times> S"])+
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2261 |     show "closedin (top_of_set (?S0 \<union> (?S1 \<union> {0..1} \<times> T))) (?S1 \<union> {0..1} \<times> T)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2262 |          "closedin (top_of_set (?S1 \<union> {0..1} \<times> T)) ({0..1} \<times> T)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2263 |       using \<open>T \<subseteq> S\<close> by (force intro: clo closedin_Times closedin_subset_trans [of "{0..1} \<times> S"])+
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2264 | show "continuous_on (?S0) (\<lambda>x. f (snd x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2265 | by (intro continuous_intros continuous_on_compose2 [OF contf]) auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2266 | show "continuous_on (?S1) (\<lambda>x. g (snd x))" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2267 | by (intro continuous_intros continuous_on_compose2 [OF contg]) auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2268 | qed (use h0 h1 conth in auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2269 |   then have "continuous_on ({0,1} \<times> S \<union> ({0..1} \<times> T)) h'"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2270 | by (metis Sigma_Un_distrib1 Un_assoc insert_is_Un) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2271 |   moreover have "h' ` ({0,1} \<times> S \<union> {0..1} \<times> T) \<subseteq> U"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2272 | using fim gim him \<open>T \<subseteq> S\<close> unfolding h'_def by force | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2273 |   moreover have "closedin (top_of_set ({0..1::real} \<times> S)) ({0,1} \<times> S \<union> {0..1::real} \<times> T)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2274 | by (intro closedin_Times closedin_Un clo) (simp_all add: closed_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2275 | ultimately | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2276 |   obtain W k where W: "({0,1} \<times> S) \<union> ({0..1} \<times> T) \<subseteq> W"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2277 |                and opeW: "openin (top_of_set ({0..1} \<times> S)) W"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2278 | and contk: "continuous_on W k" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2279 | and kim: "k ` W \<subseteq> U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2280 |                and kh': "\<And>x. x \<in> ({0,1} \<times> S) \<union> ({0..1} \<times> T) \<Longrightarrow> k x = h' x"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2281 |     by (metis ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR U\<close>, of "({0,1} \<times> S) \<union> ({0..1} \<times> T)" h' "{0..1} \<times> S"])
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2282 | obtain T' where opeT': "openin (top_of_set S) T'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2283 |               and "T \<subseteq> T'" and TW: "{0..1} \<times> T' \<subseteq> W"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2284 |     using tube_lemma_gen [of "{0..1::real}" T S W] W \<open>T \<subseteq> S\<close> opeW by auto
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2285 | moreover have "homotopic_with_canon (\<lambda>x. True) T' U f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2286 | proof (simp add: homotopic_with, intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2287 |     show "continuous_on ({0..1} \<times> T') k"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2288 | using TW continuous_on_subset contk by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2289 |     show "k ` ({0..1} \<times> T') \<subseteq> U"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2290 | using TW kim by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2291 | have "T' \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2292 | by (meson opeT' subsetD openin_imp_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2293 | then show "\<forall>x\<in>T'. k (0, x) = f x" "\<forall>x\<in>T'. k (1, x) = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2294 | by (auto simp: kh' h'_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2295 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2296 | ultimately show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2297 | by (blast intro: that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2298 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2299 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2300 | text\<open> Homotopy on a union of closed-open sets.\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2301 | proposition\<^marker>\<open>tag unimportant\<close> homotopic_on_clopen_Union: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2302 | fixes \<F> :: "'a::euclidean_space set set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2303 | assumes "\<And>S. S \<in> \<F> \<Longrightarrow> closedin (top_of_set (\<Union>\<F>)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2304 | and "\<And>S. S \<in> \<F> \<Longrightarrow> openin (top_of_set (\<Union>\<F>)) S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2305 | and "\<And>S. S \<in> \<F> \<Longrightarrow> homotopic_with_canon (\<lambda>x. True) S T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2306 | shows "homotopic_with_canon (\<lambda>x. True) (\<Union>\<F>) T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2307 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2308 | obtain \<V> where "\<V> \<subseteq> \<F>" "countable \<V>" and eqU: "\<Union>\<V> = \<Union>\<F>" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2309 | using Lindelof_openin assms by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2310 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2311 |   proof (cases "\<V> = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2312 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2313 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2314 | by (metis Union_empty eqU homotopic_with_canon_on_empty) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2315 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2316 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2317 | then obtain V :: "nat \<Rightarrow> 'a set" where V: "range V = \<V>" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2318 | using range_from_nat_into \<open>countable \<V>\<close> by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2319 | with \<open>\<V> \<subseteq> \<F>\<close> have clo: "\<And>n. closedin (top_of_set (\<Union>\<F>)) (V n)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2320 | and ope: "\<And>n. openin (top_of_set (\<Union>\<F>)) (V n)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2321 | and hom: "\<And>n. homotopic_with_canon (\<lambda>x. True) (V n) T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2322 | using assms by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2323 |     then obtain h where conth: "\<And>n. continuous_on ({0..1::real} \<times> V n) (h n)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2324 |                   and him: "\<And>n. h n ` ({0..1} \<times> V n) \<subseteq> T" 
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2325 | and h0: "\<And>n. \<And>x. x \<in> V n \<Longrightarrow> h n (0, x) = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2326 | and h1: "\<And>n. \<And>x. x \<in> V n \<Longrightarrow> h n (1, x) = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2327 | by (simp add: homotopic_with) metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2328 | have wop: "b \<in> V x \<Longrightarrow> \<exists>k. b \<in> V k \<and> (\<forall>j<k. b \<notin> V j)" for b x | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2329 | using nat_less_induct [where P = "\<lambda>i. b \<notin> V i"] by meson | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2330 |     obtain \<zeta> where cont: "continuous_on ({0..1} \<times> \<Union>(V ` UNIV)) \<zeta>"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2331 |               and eq: "\<And>x i. \<lbrakk>x \<in> {0..1} \<times> \<Union>(V ` UNIV) \<inter>
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2332 |                                    {0..1} \<times> (V i - (\<Union>m<i. V m))\<rbrakk> \<Longrightarrow> \<zeta> x = h i x"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2333 | proof (rule pasting_lemma_exists) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2334 |       let ?X = "top_of_set ({0..1::real} \<times> \<Union>(range V))"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2335 |       show "topspace ?X \<subseteq> (\<Union>i. {0..1::real} \<times> (V i - (\<Union>m<i. V m)))"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2336 | by (force simp: Ball_def dest: wop) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2337 |       show "openin (top_of_set ({0..1} \<times> \<Union>(V ` UNIV))) 
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2338 |                    ({0..1::real} \<times> (V i - (\<Union>m<i. V m)))" for i
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2339 | proof (intro openin_Times openin_subtopology_self openin_diff) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2340 | show "openin (top_of_set (\<Union>(V ` UNIV))) (V i)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2341 | using ope V eqU by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2342 | show "closedin (top_of_set (\<Union>(V ` UNIV))) (\<Union>m<i. V m)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2343 | using V clo eqU by (force intro: closedin_Union) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2344 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2345 |       show "continuous_map (subtopology ?X ({0..1} \<times> (V i - \<Union> (V ` {..<i})))) euclidean (h i)"  for i
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2346 | by (auto simp add: subtopology_subtopology intro!: continuous_on_subset [OF conth]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2347 |       show "\<And>i j x. x \<in> topspace ?X \<inter> {0..1} \<times> (V i - (\<Union>m<i. V m)) \<inter> {0..1} \<times> (V j - (\<Union>m<j. V m))
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2348 | \<Longrightarrow> h i x = h j x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2349 | by clarsimp (metis lessThan_iff linorder_neqE_nat) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2350 | qed auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2351 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2352 | proof (simp add: homotopic_with eqU [symmetric], intro exI conjI ballI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2353 |       show "continuous_on ({0..1} \<times> \<Union>\<V>) \<zeta>"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2354 | using V eqU by (blast intro!: continuous_on_subset [OF cont]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2355 |       show "\<zeta>` ({0..1} \<times> \<Union>\<V>) \<subseteq> T"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2356 | proof clarsimp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2357 | fix t :: real and y :: "'a" and X :: "'a set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2358 | assume "y \<in> X" "X \<in> \<V>" and t: "0 \<le> t" "t \<le> 1" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2359 | then obtain k where "y \<in> V k" and j: "\<forall>j<k. y \<notin> V j" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2360 | by (metis image_iff V wop) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2361 | with him t show "\<zeta>(t, y) \<in> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2362 | by (subst eq) force+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2363 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2364 | fix X y | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2365 | assume "X \<in> \<V>" "y \<in> X" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2366 | then obtain k where "y \<in> V k" and j: "\<forall>j<k. y \<notin> V j" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2367 | by (metis image_iff V wop) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2368 | then show "\<zeta>(0, y) = f y" and "\<zeta>(1, y) = g y" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2369 | by (subst eq [where i=k]; force simp: h0 h1)+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2370 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2371 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2372 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2373 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2374 | lemma homotopic_on_components_eq: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2375 | fixes S :: "'a :: euclidean_space set" and T :: "'b :: euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2376 | assumes S: "locally connected S \<or> compact S" and "ANR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2377 | shows "homotopic_with_canon (\<lambda>x. True) S T f g \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2378 | (continuous_on S f \<and> f ` S \<subseteq> T \<and> continuous_on S g \<and> g ` S \<subseteq> T) \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2379 | (\<forall>C \<in> components S. homotopic_with_canon (\<lambda>x. True) C T f g)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2380 | (is "?lhs \<longleftrightarrow> ?C \<and> ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2381 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2382 | have "continuous_on S f" "f ` S \<subseteq> T" "continuous_on S g" "g ` S \<subseteq> T" if ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2383 | using homotopic_with_imp_continuous homotopic_with_imp_subset1 homotopic_with_imp_subset2 that by blast+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2384 | moreover have "?lhs \<longleftrightarrow> ?rhs" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2385 | if contf: "continuous_on S f" and fim: "f ` S \<subseteq> T" and contg: "continuous_on S g" and gim: "g ` S \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2386 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2387 | assume ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2388 | with that show ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2389 | by (simp add: homotopic_with_subset_left in_components_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2390 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2391 | assume R: ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2392 | have "\<exists>U. C \<subseteq> U \<and> closedin (top_of_set S) U \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2393 | openin (top_of_set S) U \<and> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2394 | homotopic_with_canon (\<lambda>x. True) U T f g" if C: "C \<in> components S" for C | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2395 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2396 | have "C \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2397 | by (simp add: in_components_subset that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2398 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2399 | using S | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2400 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2401 | assume "locally connected S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2402 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2403 | proof (intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2404 | show "closedin (top_of_set S) C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2405 | by (simp add: closedin_component that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2406 | show "openin (top_of_set S) C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2407 | by (simp add: \<open>locally connected S\<close> openin_components_locally_connected that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2408 | show "homotopic_with_canon (\<lambda>x. True) C T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2409 | by (simp add: R that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2410 | qed auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2411 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2412 | assume "compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2413 | have hom: "homotopic_with_canon (\<lambda>x. True) C T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2414 | using R that by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2415 | obtain U where "C \<subseteq> U" and opeU: "openin (top_of_set S) U" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2416 | and hom: "homotopic_with_canon (\<lambda>x. True) U T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2417 | using homotopic_neighbourhood_extension [OF contf fim contg gim _ \<open>ANR T\<close> hom] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2418 | \<open>C \<in> components S\<close> closedin_component by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2419 | then obtain V where "open V" and V: "U = S \<inter> V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2420 | by (auto simp: openin_open) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2421 | moreover have "locally compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2422 | by (simp add: \<open>compact S\<close> closed_imp_locally_compact compact_imp_closed) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2423 | ultimately obtain K where opeK: "openin (top_of_set S) K" and "compact K" "C \<subseteq> K" "K \<subseteq> V" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2424 | by (metis C Int_subset_iff Sura_Bura_clopen_subset \<open>C \<subseteq> U\<close> \<open>compact S\<close> compact_components) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2425 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2426 | proof (intro exI conjI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2427 | show "closedin (top_of_set S) K" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2428 | by (meson \<open>compact K\<close> \<open>compact S\<close> closedin_compact_eq opeK openin_imp_subset) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2429 | show "homotopic_with_canon (\<lambda>x. True) K T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2430 | using V \<open>K \<subseteq> V\<close> hom homotopic_with_subset_left opeK openin_imp_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2431 | qed (use opeK \<open>C \<subseteq> K\<close> in auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2432 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2433 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2434 | then obtain \<phi> where \<phi>: "\<And>C. C \<in> components S \<Longrightarrow> C \<subseteq> \<phi> C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2435 | and clo\<phi>: "\<And>C. C \<in> components S \<Longrightarrow> closedin (top_of_set S) (\<phi> C)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2436 | and ope\<phi>: "\<And>C. C \<in> components S \<Longrightarrow> openin (top_of_set S) (\<phi> C)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2437 | and hom\<phi>: "\<And>C. C \<in> components S \<Longrightarrow> homotopic_with_canon (\<lambda>x. True) (\<phi> C) T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2438 | by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2439 | have Seq: "S = \<Union> (\<phi> ` components S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2440 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2441 | show "S \<subseteq> \<Union> (\<phi> ` components S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2442 | by (metis Sup_mono Union_components \<phi> imageI) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2443 | show "\<Union> (\<phi> ` components S) \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2444 | using ope\<phi> openin_imp_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2445 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2446 | show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2447 | apply (subst Seq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2448 | apply (rule homotopic_on_clopen_Union) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2449 | using Seq clo\<phi> ope\<phi> hom\<phi> by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2450 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2451 | ultimately show ?thesis by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2452 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2453 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2454 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2455 | lemma cohomotopically_trivial_on_components: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2456 | fixes S :: "'a :: euclidean_space set" and T :: "'b :: euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2457 | assumes S: "locally connected S \<or> compact S" and "ANR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2458 | shows | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2459 | "(\<forall>f g. continuous_on S f \<longrightarrow> f ` S \<subseteq> T \<longrightarrow> continuous_on S g \<longrightarrow> g ` S \<subseteq> T \<longrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2460 | homotopic_with_canon (\<lambda>x. True) S T f g) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2461 | \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2462 | (\<forall>C\<in>components S. | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2463 | \<forall>f g. continuous_on C f \<longrightarrow> f ` C \<subseteq> T \<longrightarrow> continuous_on C g \<longrightarrow> g ` C \<subseteq> T \<longrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2464 | homotopic_with_canon (\<lambda>x. True) C T f g)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2465 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2466 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2467 | assume L[rule_format]: ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2468 | show ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2469 | proof clarify | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2470 | fix C f g | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2471 | assume contf: "continuous_on C f" and fim: "f ` C \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2472 | and contg: "continuous_on C g" and gim: "g ` C \<subseteq> T" and C: "C \<in> components S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2473 | obtain f' where contf': "continuous_on S f'" and f'im: "f' ` S \<subseteq> T" and f'f: "\<And>x. x \<in> C \<Longrightarrow> f' x = f x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2474 | using extension_from_component [OF S \<open>ANR T\<close> C contf fim] by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2475 | obtain g' where contg': "continuous_on S g'" and g'im: "g' ` S \<subseteq> T" and g'g: "\<And>x. x \<in> C \<Longrightarrow> g' x = g x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2476 | using extension_from_component [OF S \<open>ANR T\<close> C contg gim] by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2477 | have "homotopic_with_canon (\<lambda>x. True) C T f' g'" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2478 | using L [OF contf' f'im contg' g'im] homotopic_with_subset_left C in_components_subset by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2479 | then show "homotopic_with_canon (\<lambda>x. True) C T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2480 | using f'f g'g homotopic_with_eq by force | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2481 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2482 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2483 | assume R [rule_format]: ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2484 | show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2485 | proof clarify | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2486 | fix f g | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2487 | assume contf: "continuous_on S f" and fim: "f ` S \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2488 | and contg: "continuous_on S g" and gim: "g ` S \<subseteq> T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2489 | moreover have "homotopic_with_canon (\<lambda>x. True) C T f g" if "C \<in> components S" for C | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2490 | using R [OF that] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2491 | by (meson contf contg continuous_on_subset fim gim image_mono in_components_subset order.trans that) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2492 | ultimately show "homotopic_with_canon (\<lambda>x. True) S T f g" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2493 | by (subst homotopic_on_components_eq [OF S \<open>ANR T\<close>]) auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2494 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2495 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2496 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2497 | subsection\<open>The complement of a set and path-connectedness\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2498 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2499 | text\<open>Complement in dimension N > 1 of set homeomorphic to any interval in | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2500 | any dimension is (path-)connected. This naively generalizes the argument | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2501 | in Ryuji Maehara's paper "The Jordan curve theorem via the Brouwer fixed point theorem", | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2502 | American Mathematical Monthly 1984.\<close> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2503 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2504 | lemma unbounded_components_complement_absolute_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2505 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2506 | assumes C: "C \<in> components(- S)" and S: "compact S" "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2507 | shows "\<not> bounded C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2508 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2509 | obtain y where y: "C = connected_component_set (- S) y" and "y \<notin> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2510 | using C by (auto simp: components_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2511 | have "open(- S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2512 | using S by (simp add: closed_open compact_eq_bounded_closed) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2513 | have "S retract_of UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2514 | using S compact_AR by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2515 | then obtain r where contr: "continuous_on UNIV r" and ontor: "range r \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2516 | and r: "\<And>x. x \<in> S \<Longrightarrow> r x = x" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2517 | by (auto simp: retract_of_def retraction_def) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2518 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2519 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2520 | assume "bounded C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2521 | have "connected_component_set (- S) y \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2522 | proof (rule frontier_subset_retraction) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2523 | show "bounded (connected_component_set (- S) y)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2524 | using \<open>bounded C\<close> y by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2525 | show "frontier (connected_component_set (- S) y) \<subseteq> S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2526 | using C \<open>compact S\<close> compact_eq_bounded_closed frontier_of_components_closed_complement y by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2527 | show "continuous_on (closure (connected_component_set (- S) y)) r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2528 | by (blast intro: continuous_on_subset [OF contr]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2529 | qed (use ontor r in auto) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2530 | with \<open>y \<notin> S\<close> show False by force | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2531 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2532 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2533 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2534 | lemma connected_complement_absolute_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2535 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2536 |   assumes S: "compact S" "AR S" and 2: "2 \<le> DIM('a)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2537 | shows "connected(- S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2538 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2539 | have "S retract_of UNIV" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2540 | using S compact_AR by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2541 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2542 | apply (clarsimp simp: connected_iff_connected_component_eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2543 | apply (rule cobounded_unique_unbounded_component [OF _ 2]) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2544 | apply (simp add: \<open>compact S\<close> compact_imp_bounded) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2545 | apply (meson ComplI S componentsI unbounded_components_complement_absolute_retract)+ | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2546 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2547 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2548 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2549 | lemma path_connected_complement_absolute_retract: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2550 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2551 |   assumes "compact S" "AR S" "2 \<le> DIM('a)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2552 | shows "path_connected(- S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2553 | using connected_complement_absolute_retract [OF assms] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2554 | using \<open>compact S\<close> compact_eq_bounded_closed connected_open_path_connected by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2555 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2556 | theorem connected_complement_homeomorphic_convex_compact: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2557 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2558 |   assumes hom: "S homeomorphic T" and T: "convex T" "compact T" and 2: "2 \<le> DIM('a)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2559 | shows "connected(- S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2560 | proof (cases "S = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2561 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2562 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2563 | by (simp add: connected_UNIV) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2564 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2565 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2566 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2567 | proof (rule connected_complement_absolute_retract) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2568 | show "compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2569 | using \<open>compact T\<close> hom homeomorphic_compactness by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2570 | show "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2571 | by (meson AR_ANR False \<open>convex T\<close> convex_imp_ANR convex_imp_contractible hom homeomorphic_ANR_iff_ANR homeomorphic_contractible_eq) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2572 | qed (rule 2) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2573 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2574 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2575 | corollary path_connected_complement_homeomorphic_convex_compact: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2576 | fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2577 |   assumes hom: "S homeomorphic T" "convex T" "compact T" "2 \<le> DIM('a)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2578 | shows "path_connected(- S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2579 | using connected_complement_homeomorphic_convex_compact [OF assms] | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2580 | using \<open>compact T\<close> compact_eq_bounded_closed connected_open_path_connected hom homeomorphic_compactness by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2581 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2582 | lemma path_connected_complement_homeomorphic_interval: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2583 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2584 |   assumes "S homeomorphic cbox a b" "2 \<le> DIM('a)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2585 | shows "path_connected(-S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2586 | using assms compact_cbox convex_box(1) path_connected_complement_homeomorphic_convex_compact by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2587 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2588 | lemma connected_complement_homeomorphic_interval: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2589 | fixes S :: "'a::euclidean_space set" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2590 |   assumes "S homeomorphic cbox a b" "2 \<le> DIM('a)"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2591 | shows "connected(-S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2592 | using assms path_connected_complement_homeomorphic_interval path_connected_imp_connected by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2593 | |
| 71184 
d62fdaafdafc
renamed Analysis/Winding_Numbers to Winding_Numbers_2; reorganised Analysis/Cauchy_Integral_Theorem by splitting it into Contour_Integration, Winding_Numbers,Cauchy_Integral_Theorem and Cauchy_Integral_Formula.
 Wenda Li <wl302@cam.ac.uk> parents: 
71173diff
changeset | 2594 | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2595 | end |