| author | wenzelm | 
| Sun, 12 Jan 2025 13:27:47 +0100 | |
| changeset 81776 | c6d8db03dfdc | 
| parent 79669 | a3e7a323780f | 
| child 82323 | b022c013b04b | 
| 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')" | 
| 72490 | 68 | proof (intro continuous_on_compose f') | 
| 69 | show "continuous_on (f' ` U) r" | |
| 70 | using continuous_on_subset contr f' by blast | |
| 71 | show "continuous_on (r ` f' ` U) h" | |
| 72 | using \<open>homeomorphism S S' g h\<close> \<open>f' ` U \<subseteq> C\<close> | |
| 73 | unfolding homeomorphism_def | |
| 74 | by (metis \<open>r ` C \<subseteq> S'\<close> continuous_on_subset image_mono) | |
| 75 | qed | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 76 | 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 | 77 | 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 | 78 | 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 | 79 | 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 | 80 | 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 | 81 | 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 | 82 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 83 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 84 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 85 | 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 | 86 | 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 | 87 | 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 | 88 | 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 | 89 | 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 | 90 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 91 | 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 | 92 | using assms by (force simp: homeomorphic_def) | 
| 72490 | 93 | obtain h: "continuous_on S' h" " h ` S' \<subseteq> S" | 
| 94 | using hom homeomorphism_def by blast | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 95 | 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 | 96 | 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 | 97 | 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 | 98 | 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 | 99 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 100 | 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 | 101 | show "continuous_on U (g \<circ> h')" | 
| 72490 | 102 | by (meson continuous_on_compose continuous_on_subset h' hom homeomorphism_cont1) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 103 | show "(g \<circ> h') \<in> U \<rightarrow> S'" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 104 | 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 | 105 | 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 | 106 | 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 | 107 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 108 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 109 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 110 | 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 | 111 | fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" | 
| 72490 | 112 | assumes "AR S" "S homeomorphic S'" "closed S'" | 
| 70642 
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" | 
| 72490 | 114 | using AR_imp_absolute_retract assms by fastforce | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 115 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 116 | 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 | 117 | 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 | 118 | 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 | 119 | \<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 | 120 | 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 | 121 | \<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 | 122 | shows "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 123 | 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 | 124 |   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 | 125 | 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 | 126 | 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 | 127 | by (force simp: homeomorphic_def) | 
| 72490 | 128 | obtain h: "continuous_on T h" " h ` T \<subseteq> S" | 
| 129 | using hom homeomorphism_def by blast | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 130 | 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 | 131 | 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 | 132 | 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 | 133 | 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 | 134 | 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 | 135 | 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 | 136 | 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 | 137 | show "continuous_on U (g \<circ> h')" | 
| 72490 | 138 | by (meson continuous_on_compose continuous_on_subset h' hom homeomorphism_cont1) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 139 | show "(g \<circ> h') \<in> U \<rightarrow> T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 140 | 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 | 141 | 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 | 142 | 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 | 143 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 144 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 145 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 146 | 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 | 147 | 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 | 148 | 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 | 149 | (\<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 | 150 | \<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 | 151 | 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 | 152 | (\<exists>g. continuous_on U g \<and> g ` U \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)))" | 
| 73932 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 desharna parents: 
72490diff
changeset | 153 | by (metis (mono_tags, opaque_lifting) AR_imp_absolute_extensor absolute_extensor_imp_AR) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 154 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 155 | 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 | 156 | 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 | 157 | 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 | 158 | 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 | 159 | 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 | 160 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 161 | 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 | 162 | 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 | 163 | 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 | 164 | shows "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 165 | unfolding AR_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 166 | 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 | 167 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 168 | 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 | 169 | 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 | 170 | 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 | 171 | 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 | 172 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 173 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 174 | 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 | 175 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 176 | assumes "ANR S" and contf: "continuous_on T f" and "f \<in> T \<rightarrow> S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 177 | 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 | 178 | 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 | 179 | "continuous_on V g" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 180 | "g \<in> V \<rightarrow> S" "\<And>x. x \<in> T \<Longrightarrow> g x = f x" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 181 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 182 |   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 | 183 | 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 | 184 |   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 | 185 |           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 | 186 | 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 | 187 | 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 | 188 | 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 | 189 | 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 | 190 | 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 | 191 | 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 | 192 | 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 | 193 | 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 | 194 | 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 | 195 | 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 | 196 | have "continuous_on (f ` T) g" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 197 | by (metis PiE assms(3) continuous_on_subset homeomorphism_cont1 homgh image_subset_iff) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 198 | 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 | 199 | 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 | 200 | 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 | 201 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 202 | 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 | 203 | 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 | 204 | then show ?thesis | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 205 | by (metis PiE assms(3) cloCS closedin_def image_comp image_mono image_subset_iff order.trans topspace_euclidean_subtopology) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 206 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 207 | 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 | 208 | 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 | 209 | 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 | 210 | 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 | 211 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 212 | 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 | 213 | show "T \<subseteq> U \<inter> f' -` D" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 214 | using cloUT closedin_imp_subset \<open>S' \<subseteq> D\<close> \<open>f \<in> T \<rightarrow> S\<close> eq homeomorphism_image1 homgh | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 215 | by fastforce | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 216 | show ope: "openin (top_of_set U) (U \<inter> f' -` D)" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 217 | by (meson \<open>f' ` U \<subseteq> C\<close> contf' continuous_openin_preimage image_subset_iff_funcset opD) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 218 | have conth: "continuous_on (r ` f' ` (U \<inter> f' -` D)) h" | 
| 72490 | 219 | proof (rule continuous_on_subset [of S']) | 
| 220 | show "continuous_on S' h" | |
| 221 | using homeomorphism_def homgh by blast | |
| 222 | qed (use \<open>r ` D \<subseteq> S'\<close> in blast) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 223 | show "continuous_on (U \<inter> f' -` D) (h \<circ> r \<circ> f')" | 
| 72490 | 224 | by (blast intro: continuous_on_compose conth continuous_on_subset [OF contr] continuous_on_subset [OF contf']) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 225 | show "(h \<circ> r \<circ> f') \<in> (U \<inter> f' -` D) \<rightarrow> S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 226 | 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 | 227 | 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 | 228 | show "\<And>x. x \<in> T \<Longrightarrow> (h \<circ> r \<circ> f') x = f x" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 229 | using \<open>homeomorphism S S' g h\<close> \<open>f \<in> T \<rightarrow> S\<close> eq | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 230 | by (metis PiE comp_apply homeomorphism_def image_iff rid) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 231 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 232 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 233 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 234 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 235 | 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 | 236 | 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 | 237 | 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 | 238 | 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 | 239 | 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 | 240 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 241 | 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 | 242 | using assms by (force simp: homeomorphic_def) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 243 | obtain h: "continuous_on S' h" " h \<in> S' \<rightarrow> S" | 
| 72490 | 244 | using hom homeomorphism_def by blast | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 245 | 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 | 246 | 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 | 247 | 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 | 248 | 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 | 249 | 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 | 250 | 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 | 251 | 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 | 252 | show "continuous_on V (g \<circ> h')" | 
| 72490 | 253 | by (meson continuous_on_compose continuous_on_subset h'(1) h'(2) hom homeomorphism_cont1) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 254 | show "(g \<circ> h') \<in> V \<rightarrow> S'" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 255 | 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 | 256 | 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 | 257 | 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 | 258 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 259 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 260 | 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 | 261 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 262 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 263 | 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 | 264 | 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 | 265 | 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 | 266 | 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 | 267 | 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 | 268 | 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 | 269 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 270 | 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 | 271 | fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 272 | assumes contf: "continuous_on S f" and fim: "f \<in> S \<rightarrow> T" and "ANR T" "closed S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 273 | obtains V g where "S \<subseteq> V" "open V" "continuous_on V g" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 274 | "g \<in> V \<rightarrow> T" "\<And>x. x \<in> S \<Longrightarrow> g x = f x" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 275 | 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 | 276 | 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 | 277 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 278 | 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 | 279 | 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 | 280 | assumes "\<And>f :: 'a * real \<Rightarrow> 'a. | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 281 | \<And>U T. \<lbrakk>continuous_on T f; f \<in> T \<rightarrow> S; | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 282 | 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 | 283 | \<Longrightarrow> \<exists>V g. T \<subseteq> V \<and> openin (top_of_set U) V \<and> | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 284 | continuous_on V g \<and> g \<in> V \<rightarrow> S \<and> (\<forall>x \<in> T. g x = f x)" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 285 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 286 | 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 | 287 |   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 | 288 | 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 | 289 | 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 | 290 | by (force simp: homeomorphic_def) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 291 | obtain h: "continuous_on T h" " h \<in> T \<rightarrow> S" | 
| 72490 | 292 | using hom homeomorphism_def by blast | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 293 | obtain V h' where "T \<subseteq> V" and opV: "openin (top_of_set U) V" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 294 | and h': "continuous_on V h'" "h' \<in> V \<rightarrow> S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 295 | 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 | 296 | 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 | 297 | 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 | 298 | 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 | 299 | 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 | 300 | 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 | 301 | show "continuous_on V (g \<circ> h')" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 302 | by (meson continuous_on_compose continuous_on_subset h' hom homeomorphism_def image_subset_iff_funcset) | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 303 | show "(g \<circ> h') \<in> V \<rightarrow> T" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 304 | using h' hom homeomorphism_image1 by fastforce | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 305 | 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 | 306 | 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 | 307 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 308 | 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 | 309 | 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 | 310 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 311 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 312 | 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 | 313 | 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 | 314 | 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 | 315 | (\<forall>f :: 'a * real \<Rightarrow> 'a. | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 316 | \<forall>U T. continuous_on T f \<longrightarrow> f \<in> T \<rightarrow> S \<longrightarrow> | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 317 | 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 | 318 | (\<exists>V g. T \<subseteq> V \<and> openin (top_of_set U) V \<and> | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 319 | continuous_on V g \<and> g \<in> V \<rightarrow> S \<and> (\<forall>x \<in> T. g x = f x)))" (is "_ = ?rhs") | 
| 72490 | 320 | proof | 
| 321 | assume "ANR S" then show ?rhs | |
| 322 | by (metis ANR_imp_absolute_neighbourhood_extensor) | |
| 323 | qed (simp add: absolute_neighbourhood_extensor_imp_ANR) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 324 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 325 | 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 | 326 | 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 | 327 | 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 | 328 | 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 | 329 | 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 | 330 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 331 | 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 | 332 | 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 | 333 | 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 | 334 | obtains V W | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 335 | 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 | 336 | "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 | 337 | "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 | 338 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 339 | 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 | 340 | 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 | 341 | 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 | 342 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 343 |   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 | 344 | 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 | 345 | 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 | 346 | 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 | 347 | 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 | 348 |         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 | 349 | 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 | 350 | moreover have "S' retract_of U - W" | 
| 72490 | 351 | proof (rule retract_of_subset [OF S'Z]) | 
| 352 | show "S' \<subseteq> U - W" | |
| 353 |       using US' \<open>S' \<subseteq> V\<close> \<open>V \<inter> W = {}\<close> closedin_subset by fastforce
 | |
| 354 | show "U - W \<subseteq> Z" | |
| 355 | using Diff_subset_conv \<open>U - Z \<subseteq> W\<close> by blast | |
| 356 | qed | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 357 | ultimately show ?thesis | 
| 72490 | 358 | by (metis Diff_subset_conv Diff_triv Int_Diff_Un Int_absorb1 openin_closedin_eq that topspace_euclidean_subtopology) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 359 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 360 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 361 | 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 | 362 | 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 | 363 | 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 | 364 | 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 | 365 | "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 | 366 | "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 | 367 | 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 | 368 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 369 | 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 | 370 | 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 | 371 | 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 | 372 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 373 | unfolding ANR_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 374 | 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 | 375 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 376 | 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 | 377 | 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 | 378 | 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 | 379 | 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 | 380 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 381 | 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 | 382 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 383 | 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 | 384 | 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 | 385 | 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 | 386 | 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 | 387 | 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 | 388 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 389 | 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 | 390 | 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 | 391 | 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 | 392 | 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 | 393 | 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 | 394 | 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 | 395 | 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 | 396 | 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 | 397 | 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 | 398 | apply (rule locally_compact_closedin_open) | 
| 72490 | 399 | by (meson Int_lower2 assms(3) closedin_imp_subset closedin_subset_trans le_inf_iff openin_open) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 400 | 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 | 401 | 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 | 402 | 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 | 403 | 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 | 404 | 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 | 405 | 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 | 406 | 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 | 407 | 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 | 408 | 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 | 409 | 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 | 410 | 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 | 411 | 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 | 412 | 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 | 413 | 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 | 414 | 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 | 415 | 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 | 416 | 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 | 417 | 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 | 418 | 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 | 419 | 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 | 420 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 421 | 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 | 422 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 423 | 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 | 424 | 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 | 425 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 426 | show "continuous_on (r ` h ` (W \<inter> h -` X)) f" | 
| 72490 | 427 | proof (rule continuous_on_subset [of S]) | 
| 428 | show "continuous_on S f" | |
| 429 | using hom homeomorphism_def by blast | |
| 430 | show "r ` h ` (W \<inter> h -` X) \<subseteq> S" | |
| 431 | by (metis \<open>retraction X S r\<close> image_mono image_subset_iff_subset_vimage inf_le2 retraction) | |
| 432 | qed | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 433 | qed | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 434 | show "(f \<circ> r \<circ> h) \<in> (W \<inter> h -` X) \<rightarrow> S'" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 435 | 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 | 436 | 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 | 437 | 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 | 438 | 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 | 439 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 440 | then show ?thesis | 
| 72490 | 441 | using UW \<open>open X\<close> conth continuous_openin_preimage_eq openin_trans that by blast | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 442 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 443 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 444 | 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 | 445 | 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 | 446 | 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 | 447 | 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 | 448 | 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 | 449 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 450 | 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 | 451 | 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 | 452 | 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 | 453 | shows "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 454 | unfolding ENR_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 455 | 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 | 456 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 457 | 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 | 458 | 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 | 459 | 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 | 460 | 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 | 461 | 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 | 462 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 463 | lemma ENR_translation: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 464 | 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 | 465 | 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 | 466 | 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 | 467 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 468 | 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 | 469 | 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 | 470 | 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 | 471 | shows "ENR (image f S) \<longleftrightarrow> ENR S" | 
| 72490 | 472 | by (meson assms homeomorphic_ENR_iff_ENR linear_homeomorphic_image) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 473 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 474 | 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 | 475 | 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 | 476 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 477 | 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 | 478 | 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 | 479 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 480 | 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 | 481 | 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 | 482 | shows "ENR S \<Longrightarrow> ANR S" | 
| 72490 | 483 | by (meson ANR_def ENR_imp_absolute_neighbourhood_retract closedin_imp_subset) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 484 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 485 | lemma ENR_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 486 | 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 | 487 | 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 | 488 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 489 | assume "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 490 | 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 | 491 | 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 | 492 | 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 | 493 | 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 | 494 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 495 | 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 | 496 | 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 | 497 |   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 | 498 | 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 | 499 | 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 | 500 | 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 | 501 | using \<open>ANR S\<close> | 
| 72490 | 502 | by (meson ANR_imp_absolute_neighbourhood_retract_UNIV ENR_def ENR_homeomorphic_ENR) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 503 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 504 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 505 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 506 | lemma AR_ANR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 507 | 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 | 508 |   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 | 509 | (is "?lhs = ?rhs") | 
| 
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 ?lhs | 
| 72490 | 512 |   have "aff_dim S < int DIM('a \<times> real)"
 | 
| 513 | using aff_dim_le_DIM [of S] by auto | |
| 514 |     then obtain C and S' :: "('a * real) set"
 | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 515 |     where "convex C" "C \<noteq> {}" "closedin (top_of_set C) S'" "S homeomorphic S'"
 | 
| 72490 | 516 | using homeomorphic_closedin_convex by blast | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 517 | with \<open>AR S\<close> have "contractible S" | 
| 72490 | 518 | by (meson AR_def convex_imp_contractible homeomorphic_contractible_eq retract_of_contractible) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 519 | with \<open>AR S\<close> show ?rhs | 
| 72490 | 520 | using AR_imp_ANR AR_imp_retract by fastforce | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 521 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 522 | assume ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 523 | 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 | 524 |       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 | 525 |         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 | 526 | 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 | 527 | 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 | 528 |         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 | 529 | 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 | 530 | 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 | 531 | by (metis all_not_in_conv atLeastAtMost_iff image_subset_iff mem_Sigma_iff order_refl zero_le_one) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 532 | have "\<exists>g. continuous_on W g \<and> g \<in> W \<rightarrow> S \<and> (\<forall>x\<in>T. g x = f x)" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 533 | if f: "continuous_on T f" "f \<in> T \<rightarrow> S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 534 | 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 | 535 | 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 | 536 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 537 | obtain U g | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 538 | 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 | 539 | and contg: "continuous_on U g" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 540 | and "g \<in> U \<rightarrow> S" and gf: "\<And>x. x \<in> T \<Longrightarrow> g x = f x" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 541 | 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 | 542 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 543 | 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 | 544 | 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 | 545 |     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 | 546 | 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 | 547 | 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 | 548 | 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 | 549 | 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 | 550 |         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 | 551 | 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 | 552 |     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 | 553 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 554 | 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 | 555 | 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 | 556 | 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 | 557 | 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 | 558 |         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 | 559 | 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 | 560 | 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 | 561 | 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 | 562 | 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 | 563 |       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 | 564 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 565 | 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 | 566 | have *: "continuous_on (W - V') (\<lambda>x. h (j x, g x))" | 
| 72490 | 567 | proof (rule continuous_on_compose2 [OF conth continuous_on_Pair]) | 
| 568 | show "continuous_on (W - V') j" | |
| 569 | by (rule continuous_on_subset [OF contj Diff_subset]) | |
| 570 | show "continuous_on (W - V') g" | |
| 571 | by (metis Diff_subset_conv \<open>W - U \<subseteq> V'\<close> contg continuous_on_subset Un_commute) | |
| 572 |         show "(\<lambda>x. (j x, g x)) ` (W - V') \<subseteq> {0..1} \<times> S"
 | |
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 573 | using j \<open>g \<in> U \<rightarrow> S\<close> \<open>W - U \<subseteq> V'\<close> by fastforce | 
| 72490 | 574 | qed | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 575 | show "continuous_on W (\<lambda>x. if x \<in> W - V then a else h (j x, g x))" | 
| 72490 | 576 | proof (subst Weq, rule continuous_on_cases_local) | 
| 577 | show "continuous_on (W - V') (\<lambda>x. h (j x, g x))" | |
| 578 | using "*" by blast | |
| 579 | qed (use WWV WV' Weq j0 j1 in auto) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 580 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 581 | 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 | 582 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 583 |         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 | 584 | 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 | 585 | moreover have "g(x, y) \<in> S" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 586 |           using \<open>V' \<inter> V = {}\<close> \<open>W - U \<subseteq> V'\<close> \<open>g \<in> U \<rightarrow> S\<close> that by fastforce
 | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 587 | ultimately show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 588 | 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 | 589 | qed | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 590 | with \<open>a \<in> S\<close> \<open>g \<in> U \<rightarrow> S\<close> | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 591 | show "(\<lambda>x. if x \<in> W - V then a else h (j x, g x)) \<in> W \<rightarrow> S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 592 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 593 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 594 | 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 | 595 | 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 | 596 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 597 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 598 | then show ?lhs | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 599 | by (simp add: AR_eq_absolute_extensor image_subset_iff_funcset) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 600 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 601 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 602 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 603 | 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 | 604 | fixes S :: "'a::euclidean_space set" | 
| 72490 | 605 | assumes "ANR T" and ST: "S retract_of T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 606 | shows "ANR S" | 
| 72490 | 607 | proof (clarsimp simp add: ANR_eq_absolute_neighbourhood_extensor) | 
| 608 | fix f::"'a \<times> real \<Rightarrow> 'a" and U W | |
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 609 | assume W: "continuous_on W f" "f \<in> W \<rightarrow> S" "closedin (top_of_set U) W" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 610 | then obtain r where "S \<subseteq> T" and r: "continuous_on T r" "r \<in> T \<rightarrow> S" "\<forall>x\<in>S. r x = x" "continuous_on W f" "f \<in> W \<rightarrow> S" | 
| 72490 | 611 | "closedin (top_of_set U) W" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 612 | by (metis ST retract_of_def retraction_def) | 
| 72490 | 613 | then have "f ` W \<subseteq> T" | 
| 614 | by blast | |
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 615 | with W obtain V g where V: "W \<subseteq> V" "openin (top_of_set U) V" "continuous_on V g" "g \<in> V \<rightarrow> T" "\<forall>x\<in>W. g x = f x" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 616 | by (smt (verit) ANR_imp_absolute_neighbourhood_extensor Pi_I assms(1) funcset_mem image_subset_iff_funcset) | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 617 | with r have "continuous_on V (r \<circ> g) \<and> (r \<circ> g) \<in> V \<rightarrow> S \<and> (\<forall>x\<in>W. (r \<circ> g) x = f x)" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 618 | by (smt (verit, del_insts) Pi_iff comp_apply continuous_on_compose continuous_on_subset image_subset_iff_funcset) | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 619 | then show "\<exists>V. W \<subseteq> V \<and> openin (top_of_set U) V \<and> (\<exists>g. continuous_on V g \<and> g \<in> V \<rightarrow> S \<and> (\<forall>x\<in>W. g x = f x))" | 
| 72490 | 620 | by (meson V) | 
| 621 | qed | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 622 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 623 | 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 | 624 | 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 | 625 | 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 | 626 | 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 | 627 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 628 | 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 | 629 | "\<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 | 630 | 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 | 631 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 632 | 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 | 633 | 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 | 634 | 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 | 635 | 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 | 636 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 637 | lemma compact_AR: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 638 | 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 | 639 | 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 | 640 | 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 | 641 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 642 | 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 | 643 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 644 | 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 | 645 | 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 | 646 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 647 | 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 | 648 | 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 | 649 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 650 | 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 | 651 | 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 | 652 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 653 | 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 | 654 | 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 | 655 |   shows "\<lbrakk>convex S; S \<noteq> {}\<rbrakk> \<Longrightarrow> AR S"
 | 
| 72490 | 656 | by (metis (mono_tags, lifting) Dugundji absolute_extensor_imp_AR) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 657 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 658 | 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 | 659 | 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 | 660 | 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 | 661 | 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 | 662 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 663 | 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 | 664 | 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 | 665 | 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 | 666 | 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 | 667 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 668 | 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 | 669 | 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 | 670 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 671 | 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 | 672 | 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 | 673 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 674 | 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 | 675 | 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 | 676 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 677 | lemma AR_singleton: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 678 | 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 | 679 |     shows "AR {a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 680 | 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 | 681 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 682 | lemma ANR_singleton: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 683 | 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 | 684 |     shows "ANR {a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 685 | 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 | 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_singleton: "ENR {a}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 688 | 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 | 689 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 690 | 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 | 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_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 | 693 | 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 | 694 | 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 | 695 | "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 | 696 | "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 | 697 | 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 | 698 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 699 |   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 | 700 | 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 | 701 | 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 | 702 | 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 | 703 |   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 | 704 |   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 | 705 |   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 | 706 | 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 | 707 |     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 | 708 | 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 | 709 | 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 | 710 |     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 | 711 | 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 | 712 | 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 | 713 | 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 | 714 | 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 | 715 | 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 | 716 | 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 | 717 | 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 | 718 | have "(S \<inter> T) retract_of W" | 
| 72490 | 719 | proof (rule AR_imp_absolute_retract [OF \<open>AR(S \<inter> T)\<close>]) | 
| 720 | show "S \<inter> T homeomorphic S \<inter> T" | |
| 721 | by (simp add: homeomorphic_refl) | |
| 722 | show "closedin (top_of_set W) (S \<inter> T)" | |
| 723 | by (meson \<open>S \<inter> T \<subseteq> W\<close> \<open>W \<subseteq> U\<close> assms closedin_Int closedin_subset_trans) | |
| 724 | qed | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 725 | then obtain r0 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 726 | 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 | 727 | 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 | 728 | 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 | 729 | 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 | 730 | 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 | 731 |     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 | 732 | 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 | 733 | 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 | 734 | 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 | 735 | 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 | 736 | 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 | 737 | 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 | 738 | 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 | 739 | unfolding r_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 740 | 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 | 741 | 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 | 742 | 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 | 743 | 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 | 744 | 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 | 745 | 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 | 746 | 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 | 747 | qed | 
| 72490 | 748 | have rim: "r ` (W \<union> S) \<subseteq> S" "r ` (W \<union> T) \<subseteq> T" | 
| 749 | using \<open>r0 ` W \<subseteq> S \<inter> T\<close> r_def by auto | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 750 | 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 | 751 | 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 | 752 | obtain g where contg: "continuous_on U g" | 
| 72490 | 753 | and "g ` U \<subseteq> S" and geqr: "\<And>x. x \<in> W \<union> S \<Longrightarrow> g x = r x" | 
| 754 | proof (rule AR_imp_absolute_extensor [OF \<open>AR S\<close> _ _ cloUWS]) | |
| 755 | show "continuous_on (W \<union> S) r" | |
| 756 | using continuous_on_subset contr sup_assoc by blast | |
| 757 | qed (use rim in auto) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 758 | 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 | 759 | 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 | 760 | 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 | 761 | and "h ` U \<subseteq> T" and heqr: "\<And>x. x \<in> W \<union> T \<Longrightarrow> h x = r x" | 
| 72490 | 762 | proof (rule AR_imp_absolute_extensor [OF \<open>AR T\<close> _ _ cloUWT]) | 
| 763 | show "continuous_on (W \<union> T) r" | |
| 764 | using continuous_on_subset contr sup_assoc by blast | |
| 765 | qed (use rim in auto) | |
| 766 | have U: "U = S' \<union> T'" | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 767 | by (force simp: S'_def T'_def) | 
| 72490 | 768 | have cont: "continuous_on U (\<lambda>x. if x \<in> S' then g x else h x)" | 
| 769 | unfolding U | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 770 | 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 | 771 | using US' UT' \<open>S' \<inter> T' = W\<close> \<open>U = S' \<union> T'\<close> | 
| 72490 | 772 | contg conth continuous_on_subset geqr heqr by auto | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 773 | 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 | 774 | 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 | 775 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 776 | 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 | 777 | apply (rule_tac x="\<lambda>x. if x \<in> S' then g x else h x" in exI) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 778 | using ST UST \<open>S \<subseteq> S'\<close> \<open>S' \<inter> T' = W\<close> \<open>T \<subseteq> T'\<close> cont geqr heqr r_def | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 779 | by (smt (verit, del_insts) IntI Pi_I Un_iff image_subset_iff r0 subsetD) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 780 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 781 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 782 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 783 | 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 | 784 | 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 | 785 | 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 | 786 | 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 | 787 | 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 | 788 | 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 | 789 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 790 | 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 | 791 | 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 | 792 |        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 | 793 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 794 | 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 | 795 | 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 | 796 | have US: "closedin (top_of_set U) (C \<inter> g -` S)" | 
| 72490 | 797 | by (metis STS continuous_on_imp_closedin hom homeomorphism_def closedin_trans [OF _ UC]) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 798 | have UT: "closedin (top_of_set U) (C \<inter> g -` T)" | 
| 72490 | 799 | by (metis STT continuous_on_closed hom homeomorphism_def closedin_trans [OF _ UC]) | 
| 800 | have "homeomorphism (C \<inter> g -` S) S g f" | |
| 801 | using hom | |
| 802 | apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 803 | 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 | 804 | done | 
| 72490 | 805 | then have ARS: "AR (C \<inter> g -` S)" | 
| 806 | using \<open>AR S\<close> homeomorphic_AR_iff_AR homeomorphic_def by blast | |
| 807 | have "homeomorphism (C \<inter> g -` T) T g f" | |
| 808 | using hom | |
| 809 | apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 810 | 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 | 811 | done | 
| 72490 | 812 | then have ART: "AR (C \<inter> g -` T)" | 
| 813 | using \<open>AR T\<close> homeomorphic_AR_iff_AR homeomorphic_def by blast | |
| 814 | have "homeomorphism (C \<inter> g -` S \<inter> (C \<inter> g -` T)) (S \<inter> T) g f" | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 815 | using hom | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 816 | 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 | 817 | 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 | 818 | done | 
| 72490 | 819 | then have ARI: "AR ((C \<inter> g -` S) \<inter> (C \<inter> g -` T))" | 
| 820 | using \<open>AR (S \<inter> T)\<close> homeomorphic_AR_iff_AR homeomorphic_def by blast | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 821 | 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 | 822 | 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 | 823 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 824 | 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 | 825 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 826 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 827 | 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 | 828 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 829 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 830 | 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 | 831 | 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 | 832 | 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 | 833 | 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 | 834 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 835 | 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 | 836 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 837 | 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 | 838 | 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 | 839 | 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 | 840 | 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 | 841 | 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 | 842 | 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 | 843 | 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 | 844 | 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 | 845 | 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 | 846 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 847 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 848 |   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 | 849 | 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 | 850 | 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 | 851 |   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 | 852 |   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 | 853 |   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 | 854 | 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 | 855 |     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 | 856 | 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 | 857 | 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 | 858 |     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 | 859 | 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 | 860 | 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 | 861 | 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 | 862 | 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 | 863 | 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 | 864 | 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 | 865 | 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 | 866 | 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 | 867 | 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 | 868 | 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 | 869 | 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 | 870 | 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 | 871 | 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 | 872 | 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 | 873 | 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 | 874 | 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 | 875 | 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 | 876 | 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 | 877 | 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 | 878 | 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 | 879 | and ret: "(S \<inter> T) retract_of W0" | 
| 72490 | 880 | by (meson ANR_imp_closed_neighbourhood_retract ST_W US UT \<open>W \<subseteq> U\<close> \<open>ANR(S \<inter> T)\<close> closedin_Int closedin_subset_trans) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 881 | 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 | 882 | 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 | 883 | 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 | 884 | 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 | 885 | 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 | 886 | obtain r0 | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 887 | where "S \<inter> T \<subseteq> W0" and contr0: "continuous_on W0 r0" and "r0 \<in> W0 \<rightarrow> S \<inter> T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 888 | 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 | 889 | 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 | 890 | 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 | 891 | 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 | 892 | 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 | 893 | have "r ` (W0 \<union> S) \<subseteq> S" "r ` (W0 \<union> T) \<subseteq> T" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 894 | using \<open>r0 \<in> W0 \<rightarrow> S \<inter> T\<close> r_def by auto | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 895 | 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 | 896 | unfolding r_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 897 | 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 | 898 | show "closedin (top_of_set (W0 \<union> (S \<union> T))) W0" | 
| 72490 | 899 | using closedin_subset_trans [of U] | 
| 900 | by (metis le_sup_iff order_refl cloWW0 cloUW closedin_trans \<open>W0 \<subseteq> U\<close> \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close>) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 901 | 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 | 902 | 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 | 903 | 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 | 904 | 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 | 905 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 906 | 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 | 907 | 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 | 908 | 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 | 909 | 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 | 910 | and opeSW1: "openin (top_of_set S') W1" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 911 | and "g \<in> W1 \<rightarrow> S" and geqr: "\<And>x. x \<in> W0 \<union> S \<Longrightarrow> g x = r x" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 912 | proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> _ _ cloS'WS]) | 
| 72490 | 913 | show "continuous_on (W0 \<union> S) r" | 
| 914 | using continuous_on_subset contr sup_assoc by blast | |
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 915 | qed (use \<open>r ` (W0 \<union> S) \<subseteq> S\<close> in auto) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 916 | 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 | 917 | 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 | 918 | 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 | 919 | 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 | 920 | 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 | 921 | and "h ` W2 \<subseteq> T" and heqr: "\<And>x. x \<in> W0 \<union> T \<Longrightarrow> h x = r x" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 922 | proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> _ _ cloT'WT]) | 
| 72490 | 923 | show "continuous_on (W0 \<union> T) r" | 
| 924 | using continuous_on_subset contr sup_assoc by blast | |
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 925 | qed (use \<open>r ` (W0 \<union> T) \<subseteq> T\<close> in auto) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 926 | 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 | 927 | by (force simp: S'_def T'_def W_def) | 
| 72490 | 928 | obtain O1 O2 where O12: "open O1" "W1 = S' \<inter> O1" "open O2" "W2 = T' \<inter> O2" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 929 | 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 | 930 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 931 | proof | 
| 72490 | 932 | have eq: "W1 - (W - U0) \<union> (W2 - (W - U0)) | 
| 933 | = ((U - T') \<inter> O1 \<union> (U - S') \<inter> O2 \<union> U \<inter> O1 \<inter> O2) - (W - U0)" (is "?WW1 \<union> ?WW2 = ?rhs") | |
| 934 | using \<open>U0 \<inter> W \<subseteq> W0\<close> \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W0 \<union> T \<subseteq> W2\<close> | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 935 | 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>) | 
| 72490 | 936 | show "openin (top_of_set U) (?WW1 \<union> ?WW2)" | 
| 937 | by (simp add: eq \<open>open O1\<close> \<open>open O2\<close> cloUS' cloUT' cloUW closedin_diff opeUU0 openin_Int_open openin_Un openin_diff) | |
| 938 | obtain SU' where "closed SU'" "S' = U \<inter> SU'" | |
| 939 | using cloUS' by (auto simp add: closedin_closed) | |
| 940 | moreover have "?WW1 = (?WW1 \<union> ?WW2) \<inter> SU'" | |
| 941 | using \<open>S' = U \<inter> SU'\<close> \<open>W1 = S' \<inter> O1\<close> \<open>S' \<union> T' = U\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<inter> T' = W\<close> \<open>W0 \<union> S \<subseteq> W1\<close> U0 | |
| 942 | by auto | |
| 943 | ultimately have cloW1: "closedin (top_of_set (W1 - (W - U0) \<union> (W2 - (W - U0)))) (W1 - (W - U0))" | |
| 944 | by (metis closedin_closed_Int) | |
| 945 | obtain TU' where "closed TU'" "T' = U \<inter> TU'" | |
| 946 | using cloUT' by (auto simp add: closedin_closed) | |
| 947 | moreover have "?WW2 = (?WW1 \<union> ?WW2) \<inter> TU'" | |
| 948 | using \<open>T' = U \<inter> TU'\<close> \<open>W1 = S' \<inter> O1\<close> \<open>S' \<union> T' = U\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<inter> T' = W\<close> \<open>W0 \<union> T \<subseteq> W2\<close> U0 | |
| 949 | by auto | |
| 950 | ultimately have cloW2: "closedin (top_of_set (?WW1 \<union> ?WW2)) ?WW2" | |
| 951 | by (metis closedin_closed_Int) | |
| 952 | let ?gh = "\<lambda>x. if x \<in> S' then g x else h x" | |
| 953 | have "\<exists>r. continuous_on (?WW1 \<union> ?WW2) r \<and> r ` (?WW1 \<union> ?WW2) \<subseteq> S \<union> T \<and> (\<forall>x\<in>S \<union> T. r x = x)" | |
| 954 | proof (intro exI conjI) | |
| 955 | show "\<forall>x\<in>S \<union> T. ?gh x = x" | |
| 956 | using ST \<open>S' \<inter> T' = W\<close> geqr heqr O12 | |
| 957 | by (metis Int_iff Un_iff \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W0 \<union> T \<subseteq> W2\<close> r0 r_def sup.order_iff) | |
| 958 | have "\<And>x. x \<in> ?WW1 \<and> x \<notin> S' \<or> x \<in> ?WW2 \<and> x \<in> S' \<Longrightarrow> g x = h x" | |
| 959 | using O12 | |
| 960 | by (metis (full_types) DiffD1 DiffD2 DiffI IntE IntI U0(2) UnCI \<open>S' \<inter> T' = W\<close> geqr heqr in_mono) | |
| 961 | then show "continuous_on (?WW1 \<union> ?WW2) ?gh" | |
| 962 | using continuous_on_cases_local [OF cloW1 cloW2 continuous_on_subset [OF contg] continuous_on_subset [OF conth]] | |
| 963 | by simp | |
| 964 | show "?gh ` (?WW1 \<union> ?WW2) \<subseteq> S \<union> T" | |
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 965 | using \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<inter> T' = W\<close> \<open>g \<in> W1 \<rightarrow> S\<close> \<open>h ` W2 \<subseteq> T\<close> \<open>U0 \<inter> W \<subseteq> W0\<close> \<open>W0 \<union> S \<subseteq> W1\<close> | 
| 72490 | 966 | by (auto simp add: image_subset_iff) | 
| 967 | qed | |
| 968 | then show "S \<union> T retract_of ?WW1 \<union> ?WW2" | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 969 | using \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W0 \<union> T \<subseteq> W2\<close> ST opeUU0 U0 | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 970 | by (auto simp: retract_of_def retraction_def image_subset_iff_funcset) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 971 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 972 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 973 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 974 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 975 | 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 | 976 | 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 | 977 | 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 | 978 | 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 | 979 | 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 | 980 | 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 | 981 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 982 | 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 | 983 | 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 | 984 |        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 | 985 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 986 | 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 | 987 | 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 | 988 | have US: "closedin (top_of_set U) (C \<inter> g -` S)" | 
| 72490 | 989 | by (metis STS UC closedin_trans continuous_on_imp_closedin hom homeomorphism_def) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 990 | have UT: "closedin (top_of_set U) (C \<inter> g -` T)" | 
| 72490 | 991 | by (metis STT UC closedin_trans continuous_on_imp_closedin hom homeomorphism_def) | 
| 992 | have "homeomorphism (C \<inter> g -` S) S g f" | |
| 993 | using hom | |
| 994 | apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | |
| 995 | by (rule_tac x="f x" in image_eqI, auto) | |
| 996 | then have ANRS: "ANR (C \<inter> g -` S)" | |
| 997 | using \<open>ANR S\<close> homeomorphic_ANR_iff_ANR homeomorphic_def by blast | |
| 998 | have "homeomorphism (C \<inter> g -` T) T g f" | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 999 | using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | 
| 72490 | 1000 | by (rule_tac x="f x" in image_eqI, auto) | 
| 1001 | then have ANRT: "ANR (C \<inter> g -` T)" | |
| 1002 | using \<open>ANR T\<close> homeomorphic_ANR_iff_ANR homeomorphic_def by blast | |
| 1003 | have "homeomorphism (C \<inter> g -` S \<inter> (C \<inter> g -` T)) (S \<inter> T) g f" | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1004 | using hom | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1005 | apply (auto simp: homeomorphism_def elim!: continuous_on_subset) | 
| 72490 | 1006 | by (rule_tac x="f x" in image_eqI, auto) | 
| 1007 | then have ANRI: "ANR ((C \<inter> g -` S) \<inter> (C \<inter> g -` T))" | |
| 1008 | using \<open>ANR (S \<inter> T)\<close> homeomorphic_ANR_iff_ANR homeomorphic_def by blast | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1009 | 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 | 1010 | 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 | 1011 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1012 | 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 | 1013 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1014 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1015 | 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 | 1016 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1017 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1018 | 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 | 1019 | 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 | 1020 | 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 | 1021 | 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 | 1022 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1023 | lemma ANR_openin: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1024 | 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 | 1025 | 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 | 1026 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1027 | 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 | 1028 | fix f :: "'a \<times> real \<Rightarrow> 'a" and U C | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1029 | assume contf: "continuous_on C f" and fim: "f \<in> C \<rightarrow> S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1030 | and cloUC: "closedin (top_of_set U) C" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1031 | have "f \<in> C \<rightarrow> T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1032 | 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 | 1033 | 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 | 1034 | 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 | 1035 | and contg: "continuous_on W g" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1036 | and gim: "g \<in> W \<rightarrow> T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1037 | and geq: "\<And>x. x \<in> C \<Longrightarrow> g x = f x" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1038 | using ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf \<open>f \<in> C \<rightarrow> T\<close> cloUC] fim by auto | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1039 | show "\<exists>V g. C \<subseteq> V \<and> openin (top_of_set U) V \<and> continuous_on V g \<and> g \<in> V \<rightarrow> S \<and> (\<forall>x\<in>C. g x = f x)" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1040 | 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 | 1041 | 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 | 1042 | 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 | 1043 | 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 | 1044 | 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 | 1045 | 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 | 1046 | by (blast intro: continuous_on_subset [OF contg]) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1047 | show "g \<in> (W \<inter> g -` S) \<rightarrow> S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1048 | 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 | 1049 | 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 | 1050 | 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 | 1051 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1052 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1053 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1054 | lemma ENR_openin: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1055 | fixes S :: "'a::euclidean_space set" | 
| 72490 | 1056 | assumes "ENR T" "openin (top_of_set T) S" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1057 | shows "ENR S" | 
| 72490 | 1058 | by (meson ANR_openin ENR_ANR assms locally_open_subset) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1059 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1060 | 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 | 1061 | 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 | 1062 | 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 | 1063 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1064 | 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 | 1065 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1066 | 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 | 1067 | 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 | 1068 | 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 | 1069 | shows "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1070 | 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 | 1071 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1072 | 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 | 1073 | 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 | 1074 | 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 | 1075 | 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 | 1076 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1077 | lemma ANR_delete: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1078 | 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 | 1079 |   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 | 1080 | 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 | 1081 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1082 | 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 | 1083 | 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 | 1084 | 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 | 1085 | 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 | 1086 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1087 | lemma ENR_delete: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1088 | 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 | 1089 |   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 | 1090 | 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 | 1091 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1092 | 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 | 1093 | 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 | 1094 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1095 | 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 | 1096 | 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 | 1097 | 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 | 1098 | 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 | 1099 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1100 | 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 | 1101 | 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 | 1102 | 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 | 1103 | 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 | 1104 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1105 | 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 | 1106 | 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 | 1107 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1108 | 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 | 1109 | 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 | 1110 | 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 | 1111 | 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 | 1112 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1113 | 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 | 1114 | 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 | 1115 | 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 | 1116 | 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 | 1117 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1118 | lemma ENR_cball: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1119 | 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 | 1120 | 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 | 1121 | 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 | 1122 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1123 | 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 | 1124 | 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 | 1125 | 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 | 1126 | 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 | 1127 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1128 | 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 | 1129 | 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 | 1130 | 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 | 1131 | 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 | 1132 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1133 | 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 | 1134 | 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 | 1135 | shows "ENR(cbox a b)" "ENR(box a b)" | 
| 72490 | 1136 | by (simp_all add: ENR_convex_closed closed_cbox open_box open_imp_ENR) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1137 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1138 | 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 | 1139 |     "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 | 1140 | 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 | 1141 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1142 | lemma ANR_interior: | 
| 
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 "ANR(interior S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1145 | 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 | 1146 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1147 | lemma ENR_interior: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1148 | 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 | 1149 | 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 | 1150 | 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 | 1151 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1152 | 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 | 1153 | 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 | 1154 | 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 | 1155 | 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 | 1156 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1157 | 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 | 1158 | 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 | 1159 | 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 | 1160 | 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 | 1161 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1162 | 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 | 1163 | 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 | 1164 | assumes "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1165 | 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 | 1166 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1167 |   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 | 1168 |      where "convex U" "U \<noteq> {}"
 | 
| 72490 | 1169 | and UT: "closedin (top_of_set U) T" and "S homeomorphic T" | 
| 1170 | proof (rule homeomorphic_closedin_convex) | |
| 1171 |     show "aff_dim S < int DIM('a \<times> real)"
 | |
| 1172 | using aff_dim_le_DIM [of S] by auto | |
| 1173 | qed auto | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1174 | 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 | 1175 | 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 | 1176 | 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 | 1177 | 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 | 1178 |       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 | 1179 | using \<open>S homeomorphic T\<close> homeomorphic_locally homeomorphic_path_connectedness by blast | 
| 72490 | 1180 | obtain Ta where "(openin (top_of_set U) Ta \<and> T retract_of Ta)" | 
| 79669 | 1181 | using ANR_def UT \<open>S homeomorphic T\<close> assms by atomize_elim (auto simp: choice) | 
| 72490 | 1182 | then show ?thesis | 
| 1183 |     using S \<open>U \<noteq> {}\<close> by blast
 | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1184 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1185 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1186 | 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 | 1187 | 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 | 1188 | assumes "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1189 | 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 | 1190 | 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 | 1191 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1192 | 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 | 1193 | 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 | 1194 | assumes "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1195 | 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 | 1196 | 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 | 1197 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1198 | 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 | 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 | assumes "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1201 | 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 | 1202 | 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 | 1203 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1204 | 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 | 1205 | 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 | 1206 | assumes "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1207 | 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 | 1208 | 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 | 1209 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1210 | 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 | 1211 | 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 | 1212 | assumes "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1213 | 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 | 1214 | 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 | 1215 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1216 | lemma ANR_Times: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1217 | 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 | 1218 | 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 | 1219 | 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 | 1220 |   fix f :: " ('a \<times> 'b) \<times> real \<Rightarrow> 'a \<times> 'b" and U C
 | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1221 | assume "continuous_on C f" and fim: "f \<in> C \<rightarrow> S \<times> T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1222 | 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 | 1223 | 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 | 1224 | 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 | 1225 | 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 | 1226 | 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 | 1227 | 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 | 1228 | 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 | 1229 | and geq: "\<And>x. x \<in> C \<Longrightarrow> g x = (fst \<circ> f) x" | 
| 72490 | 1230 | proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> contf1 _ cloUC]) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1231 | show "(fst \<circ> f) \<in> C \<rightarrow> S" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1232 | using fim by force | 
| 72490 | 1233 | qed auto | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1234 | 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 | 1235 | 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 | 1236 | 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 | 1237 | 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 | 1238 | and conth: "continuous_on W2 h" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1239 | and him: "h \<in> W2 \<rightarrow> T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1240 | and heq: "\<And>x. x \<in> C \<Longrightarrow> h x = (snd \<circ> f) x" | 
| 72490 | 1241 | proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf2 _ cloUC]) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1242 | show "(snd \<circ> f) \<in> C \<rightarrow> T" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1243 | using fim by force | 
| 72490 | 1244 | qed auto | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1245 | 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 | 1246 | openin (top_of_set U) V \<and> | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1247 | continuous_on V g \<and> g \<in> V \<rightarrow> S \<times> T \<and> (\<forall>x\<in>C. g x = f x)" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1248 | 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 | 1249 | 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 | 1250 | 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 | 1251 | 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 | 1252 | 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 | 1253 | 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 | 1254 | by (metis (no_types) contg conth continuous_on_Pair continuous_on_subset inf_commute inf_le1) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1255 | show "(\<lambda>x. (g x, h x)) \<in> (W1 \<inter> W2) \<rightarrow> S \<times> T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1256 | 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 | 1257 | 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 | 1258 | 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 | 1259 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1260 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1261 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1262 | lemma AR_Times: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1263 | 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 | 1264 | 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 | 1265 | 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 | 1266 | |
| 72490 | 1267 | (* Unused and requires ordered_euclidean_space | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1268 | 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 | 1269 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1270 | 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 | 1271 | 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 | 1272 |   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 | 1273 | 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 | 1274 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1275 | 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 | 1276 | 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 | 1277 |   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 | 1278 | by (auto simp: interval_cbox) | 
| 71173 | 1279 | *) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1280 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1281 | 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 | 1282 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1283 | 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 | 1284 | 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 | 1285 | 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 | 1286 | 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 | 1287 | proof (cases "S = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1288 | 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 | 1289 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1290 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1291 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1292 |   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 | 1293 | 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 | 1294 | 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 | 1295 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1296 |   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 | 1297 | 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 | 1298 |   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 | 1299 | 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 | 1300 |   also have "\<dots> retract_of {x. closest_point (affine hull S) x \<noteq> a}"
 | 
| 72490 | 1301 | unfolding retract_of_def retraction_def ahS | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1302 | 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 | 1303 | 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 | 1304 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1305 |   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 | 1306 |   moreover have "openin (top_of_set UNIV) (UNIV \<inter> closest_point (affine hull S) -` (- {a}))"
 | 
| 72490 | 1307 | by (intro continuous_openin_preimage_gen) (auto simp: False affine_imp_convex continuous_on_closest_point) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1308 | ultimately show ?thesis | 
| 72490 | 1309 |     by (meson ENR_convex_closed ENR_delete ENR_retract_of_ENR \<open>rel_frontier S retract_of affine hull S - {a}\<close> 
 | 
| 1310 | closed_affine_hull convex_affine_hull) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1311 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1312 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1313 | 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 | 1314 | 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 | 1315 | 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 | 1316 | 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 | 1317 | 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 | 1318 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1319 | 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 | 1320 | 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 | 1321 | 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 | 1322 | 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 | 1323 | \<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 | 1324 | 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 | 1325 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1326 | 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 | 1327 | 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 | 1328 | 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 | 1329 | 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 | 1330 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1331 | 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 | 1332 | 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 | 1333 | 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 | 1334 | \<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 | 1335 | 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 | 1336 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1337 | 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 | 1338 | 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 | 1339 | 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 | 1340 | 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 | 1341 | 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 | 1342 | 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 | 1343 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1344 | 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 | 1345 | 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 | 1346 | 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 | 1347 | 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 | 1348 | 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 | 1349 | show "continuous_on (S \<union> T) (\<lambda>x. if x \<in> S then x else r x)" | 
| 72490 | 1350 | using r by (intro continuous_on_cases_local [OF clS clT]) auto | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1351 | 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 | 1352 | 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 | 1353 | by (rule Un) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1354 | finally show ?thesis . | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1355 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1356 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1357 | 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 | 1358 | 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 | 1359 | 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 | 1360 | 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 | 1361 | 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 | 1362 | shows "AR S" | 
| 72490 | 1363 | by (meson AR_imp_retract AR_retract_of_AR Un assms closedin_closed_subset local.Int | 
| 1364 | retract_from_Un_Int retract_of_refl sup_ge2) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1365 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1366 | 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 | 1367 | 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 | 1368 | 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 | 1369 | 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 | 1370 | 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 | 1371 | shows "AR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1372 | 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 | 1373 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1374 | 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 | 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 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 | 1377 | shows "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1378 | 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 | 1379 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1380 | 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 | 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 | 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 | 1383 | 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 | 1384 | 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 | 1385 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1386 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1387 | 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 | 1388 | 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 | 1389 | 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 | 1390 | 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 | 1391 | 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 | 1392 | 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 | 1393 | 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 | 1394 | 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 | 1395 | 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 | 1396 | 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 | 1397 | 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 | 1398 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1399 | 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 | 1400 | 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 | 1401 | 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 | 1402 | 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 | 1403 | 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 | 1404 | 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 | 1405 | 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 | 1406 | 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 | 1407 | 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 | 1408 | 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 | 1409 | 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 | 1410 | with rim have "S retract_of S \<union> V" | 
| 72490 | 1411 | unfolding retraction_def retract_of_def using eq' by fastforce | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1412 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1413 | 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 | 1414 | 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 | 1415 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1416 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1417 | 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 | 1418 | 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 | 1419 | 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 | 1420 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1421 | 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 | 1422 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1423 | 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 | 1424 | 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 | 1425 | 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 | 1426 | 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 | 1427 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1428 | 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 | 1429 | using assms that | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1430 | 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 | 1431 | 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 | 1432 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1433 | case (Suc n) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1434 | 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 | 1435 | using that | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1436 | proof (induction \<U>) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1437 | case empty | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1438 | 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 | 1439 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1440 | 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 | 1441 | 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 | 1442 | 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 | 1443 | 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 | 1444 | unfolding Int_Union | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1445 | proof (rule Suc) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1446 | 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 | 1447 | 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 | 1448 | show "\<And>Ca. Ca \<in> (\<inter>) C ` \<U> \<Longrightarrow> closed Ca" | 
| 73932 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 desharna parents: 
72490diff
changeset | 1449 | by (metis (no_types, opaque_lifting) Suc.prems(2) closed_Int subsetD imageE insert.prems insertI1 insertI2) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1450 | 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 | 1451 | 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 | 1452 | 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 | 1453 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1454 | 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 | 1455 | 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 | 1456 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1457 | 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 | 1458 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1459 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1460 | 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 | 1461 | 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 | 1462 | 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 | 1463 | then show ?case | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1464 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1465 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1466 | then show ?case | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1467 | 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 | 1468 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1469 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1470 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1471 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1472 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1473 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1474 | 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 | 1475 | 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 | 1476 | assumes "finite S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1477 | shows "ANR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1478 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1479 |   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 | 1480 | 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 | 1481 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1482 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1483 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1484 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1485 | lemma ANR_insert: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1486 | 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 | 1487 | 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 | 1488 | 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 | 1489 | 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 | 1490 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1491 | 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 | 1492 | 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 | 1493 | 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 | 1494 | 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 | 1495 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1496 | 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 | 1497 | 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 | 1498 | 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 | 1499 | 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 | 1500 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1501 | 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 | 1502 | 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 | 1503 | 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 | 1504 | shows "ANR c" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1505 | 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 | 1506 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1507 | 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 | 1508 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1509 | lemma ENR_bounded: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1510 | 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 | 1511 | assumes "bounded S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1512 | 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 | 1513 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1514 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1515 | 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 | 1516 | 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 | 1517 | assume ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1518 | then show ?rhs | 
| 72490 | 1519 | by (meson ENR_def Elementary_Metric_Spaces.open_ball bounded_Int bounded_ball inf_le2 le_inf_iff | 
| 1520 | open_Int r retract_of_imp_subset retract_of_subset) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1521 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1522 | assume ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1523 | then show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1524 | 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 | 1525 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1526 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1527 | 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 | 1528 | 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 | 1529 |   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 | 1530 | 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 | 1531 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1532 | have "AR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1533 | 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 | 1534 | 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 | 1535 | 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 | 1536 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1537 | 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 | 1538 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1539 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1540 | 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 | 1541 | 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 | 1542 | 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 | 1543 | 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 | 1544 | 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 | 1545 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1546 | 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 | 1547 | 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 | 1548 | 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 | 1549 | 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 | 1550 | using assms homeomorphic_compactness | 
| 72490 | 1551 | by (metis compact_AR homeomorphic_AR_iff_AR) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1552 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1553 | 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 | 1554 | 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 | 1555 | 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 | 1556 | 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 | 1557 | 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 | 1558 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1559 | 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 | 1560 | 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 | 1561 | 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 | 1562 | shows "ENR S" | 
| 72490 | 1563 | by (meson ANR_from_Un_Int_local ANR_imp_neighbourhood_retract ENR_ANR ENR_neighborhood_retract assms) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1564 | |
| 
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 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 | 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 "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 | 1569 | shows "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1570 | 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 | 1571 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1572 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1573 | 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 | 1574 | 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 | 1575 | 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 | 1576 | 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 | 1577 | 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 | 1578 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1579 | 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 | 1580 | 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 | 1581 | 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 | 1582 | 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 | 1583 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1584 | lemma ENR_insert: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1585 | 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 | 1586 | 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 | 1587 | 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 | 1588 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1589 |   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 | 1590 | 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 | 1591 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1592 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1593 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1594 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1595 | 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 | 1596 | 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 | 1597 | assumes "ENR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1598 | 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 | 1599 | 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 | 1600 | 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 | 1601 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1602 | (*UNUSED | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1603 | lemma ENR_Times: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1604 | 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 | 1605 | 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 | 1606 | 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 | 1607 | 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 | 1608 | oops | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1609 | 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 | 1610 | *) | 
| 
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 | 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 | 1613 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1614 | 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 | 1615 | 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 | 1616 |   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 | 1617 | 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 | 1618 | 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 | 1619 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1620 | 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 | 1621 | 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 | 1622 | 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 | 1623 |   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 | 1624 | 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 | 1625 | 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 | 1626 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1627 | 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 | 1628 | 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 | 1629 | 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 | 1630 |   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 | 1631 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1632 |   have "frontier (cball a r) retract_of (- {b})"
 | 
| 72490 | 1633 | using assms frontier_retract_of_punctured_universe interior_cball by blast | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1634 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1635 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1636 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1637 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1638 | 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 | 1639 | 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 | 1640 | assumes "0 < r" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1641 |   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 | 1642 | 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 | 1643 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1644 | lemma ENR_sphere: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1645 | 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 | 1646 | 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 | 1647 | 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 | 1648 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1649 |   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 | 1650 | 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 | 1651 | 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 | 1652 | 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 | 1653 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1654 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1655 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1656 | 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 | 1657 | 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 | 1658 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1659 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1660 | 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 | 1661 | 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 | 1662 | 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 | 1663 | 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 | 1664 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1665 | 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 | 1666 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1667 | 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 | 1668 | 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 | 1669 | 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 | 1670 | 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 | 1671 | 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 | 1672 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1673 | 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 | 1674 | 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 | 1675 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1676 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1677 | 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 | 1678 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1679 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1680 | 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 | 1681 |     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 | 1682 | 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 | 1683 |     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 | 1684 | 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 | 1685 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1686 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1687 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1688 | 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 | 1689 | 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 | 1690 | 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 | 1691 | 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 | 1692 | 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 | 1693 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1694 | 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 | 1695 | 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 | 1696 | 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 | 1697 | 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 | 1698 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1699 | 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 | 1700 | 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 | 1701 | 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 | 1702 | 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 | 1703 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1704 | 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 | 1705 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1706 | 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 | 1707 | 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 | 1708 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1709 | 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 | 1710 | 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 | 1711 | 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 | 1712 | 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 | 1713 | and contf: "continuous_on T f" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1714 | and "f \<in> T \<rightarrow> U" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1715 | 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 | 1716 | 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 | 1717 | "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 | 1718 | "\<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 | 1719 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1720 | 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 | 1721 |   obtain h where conth: "continuous_on ({0..1} \<times> S) h"
 | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1722 |              and him: "h \<in> ({0..1} \<times> S) \<rightarrow> U"
 | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1723 | and [simp]: "\<And>x. h(0, x) = f x" "\<And>x. h(1::real, x) = g x" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1724 | using assms by (fastforce simp: homotopic_with_def) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1725 | 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 | 1726 |   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 | 1727 |   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 | 1728 | 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 | 1729 |   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 | 1730 | 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 | 1731 |   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 | 1732 | 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 | 1733 |   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 | 1734 | 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 | 1735 |   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 | 1736 | 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 | 1737 | 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 | 1738 |   moreover have "continuous_on ({0} \<times> T) (f \<circ> snd)"
 | 
| 72490 | 1739 | proof (rule continuous_intros)+ | 
| 1740 |     show "continuous_on (snd ` ({0} \<times> T)) f"
 | |
| 1741 | by (simp add: contf) | |
| 1742 | qed | |
| 1743 |   ultimately have "continuous_on ({0..1} \<times> S \<union> {0} \<times> T) (\<lambda>x. if snd x \<in> S then h x else (f \<circ> snd) x)"
 | |
| 1744 |     by (auto intro!: continuous_on_cases_local conth simp: B_def Un_commute [of "{0} \<times> T"])
 | |
| 1745 | then have conth': "continuous_on B h'" | |
| 1746 |     by (simp add: h'_def B_def Un_commute [of "{0} \<times> T"])
 | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1747 | have "image h' B \<subseteq> U" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1748 | using \<open>f \<in> T \<rightarrow> U\<close> him by (auto simp: h'_def B_def) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1749 |   obtain V k where "B \<subseteq> V" and opeTV: "openin (top_of_set ({0..1} \<times> T)) V"
 | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1750 | and contk: "continuous_on V k" and kim: "k \<in> V \<rightarrow> U" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1751 | 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 | 1752 | using anr | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1753 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1754 | 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 | 1755 |     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 | 1756 | 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 | 1757 | have "ANR B" | 
| 72490 | 1758 | unfolding B_def | 
| 1759 | proof (rule ANR_closed_Un_local) | |
| 1760 |       show "closedin (top_of_set ({0} \<times> T \<union> {0..1} \<times> S)) ({0::real} \<times> T)"
 | |
| 1761 | by (metis cloBT B_def) | |
| 1762 |       show "closedin (top_of_set ({0} \<times> T \<union> {0..1} \<times> S)) ({0..1::real} \<times> S)"
 | |
| 1763 | by (metis Un_commute cloBS B_def) | |
| 1764 | qed (simp_all add: ANR_Times convex_imp_ANR ANR_singleton ST eq) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1765 | note Vk = that | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1766 |     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 | 1767 | "retraction V B r" for V r | 
| 72490 | 1768 | proof - | 
| 1769 | have "continuous_on V (h' \<circ> r)" | |
| 1770 | using conth' continuous_on_compose retractionE that(2) by blast | |
| 1771 | moreover have "(h' \<circ> r) ` V \<subseteq> U" | |
| 1772 | by (metis \<open>h' ` B \<subseteq> U\<close> image_comp retractionE that(2)) | |
| 1773 | ultimately show ?thesis | |
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1774 | using Vk [of V "h' \<circ> r"] by (metis comp_apply retraction image_subset_iff_funcset that) | 
| 72490 | 1775 | qed | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1776 | show thesis | 
| 72490 | 1777 | by (meson "*" ANR_imp_neighbourhood_retract \<open>ANR B\<close> clo0TB retract_of_def) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1778 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1779 | assume "ANR U" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1780 | with ANR_imp_absolute_neighbourhood_extensor \<open>h' ` B \<subseteq> U\<close> clo0TB conth' image_subset_iff_funcset that | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1781 | show ?thesis | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1782 | by (smt (verit) Pi_I funcset_mem) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1783 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1784 |   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 | 1785 | have "closedin (top_of_set T) S'" | 
| 72490 | 1786 | unfolding S'_def using closedin_self opeTV | 
| 1787 | by (blast intro: closedin_compact_projection) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1788 |   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 | 1789 | 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 | 1790 | 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 | 1791 | 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 | 1792 |   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 | 1793 | 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 | 1794 | 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 | 1795 | 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 | 1796 | 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 | 1797 | and a0: "\<And>x. x \<in> S' \<Longrightarrow> a x = 0" | 
| 72490 | 1798 |     by (rule Urysohn_local [OF cloTS cloTS' \<open>S \<inter> S' = {}\<close>, of 1 0], blast)
 | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1799 |   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 | 1800 | 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 | 1801 | 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 | 1802 | proof (rule ccontr) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1803 | 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 | 1804 | 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 | 1805 | apply simp | 
| 72490 | 1806 | by (metis (no_types, lifting) a0 DiffI S'_def SigmaI atLeastAtMost_iff mem_Collect_eq mult_le_one mult_nonneg_nonneg that) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1807 | show False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1808 | 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 | 1809 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1810 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1811 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1812 | 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 | 1813 | 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 | 1814 |       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 | 1815 | apply (intro continuous_on_compose continuous_intros) | 
| 72490 | 1816 | apply (force intro: inV continuous_on_subset [OF contk] continuous_on_subset [OF conta])+ | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1817 | done | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1818 |       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 | 1819 | 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 | 1820 | 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 | 1821 | 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 | 1822 | 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 | 1823 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1824 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1825 | 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 | 1826 | 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 | 1827 | 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 | 1828 | proof clarify | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1829 | fix t | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1830 | 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 | 1831 | show "k (a t, t) \<in> U" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1832 | by (metis \<open>t \<in> T\<close> image_subset_iff inV kim not_one_le_zero linear mult_cancel_right1 image_subset_iff_funcset) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1833 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1834 | 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 | 1835 | 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 | 1836 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1837 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1838 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1839 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1840 | 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 | 1841 | 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 | 1842 | assumes "closed S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1843 | 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 | 1844 | and "ANR T" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1845 | 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 | 1846 |       and "S \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1847 | 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 | 1848 | (\<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 | 1849 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1850 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1851 | assume ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1852 | 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 | 1853 | 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 | 1854 | 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 | 1855 | 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 | 1856 | 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 | 1857 | "\<And>x. x \<in> S \<Longrightarrow> g x = f x" | 
| 72490 | 1858 | proof (rule Borsuk_homotopy_extension_homotopic) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1859 | show "(\<lambda>x. c) \<in> UNIV \<rightarrow> T" | 
| 72490 | 1860 |       using \<open>S \<noteq> {}\<close> c homotopic_with_imp_subset1 by fastforce
 | 
| 1861 | qed (use assms c in auto) | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1862 | 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 | 1863 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1864 | assume ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1865 | 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 | 1866 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1867 | 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 | 1868 | 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 | 1869 | 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 | 1870 | 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 | 1871 | then show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1872 | 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 | 1873 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1874 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1875 | 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 | 1876 | 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 | 1877 | assumes "closed S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1878 | 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 | 1879 | 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 | 1880 | 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 | 1881 |       and "S \<noteq> {}"
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1882 | 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 | 1883 | (\<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 | 1884 | 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 | 1885 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1886 | 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 | 1887 | 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 | 1888 | 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 | 1889 |       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 | 1890 | 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 | 1891 | (\<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 | 1892 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1893 | 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 | 1894 | case True with fim show ?thesis | 
| 72490 | 1895 |     by (metis ANR_sphere \<open>closed S\<close> \<open>S \<noteq> {}\<close> contf nullhomotopic_into_ANR_extension)
 | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1896 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1897 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1898 | 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 | 1899 | show ?thesis | 
| 72490 | 1900 | using fim nullhomotopic_into_rel_frontier_extension [OF \<open>closed S\<close> contf convex_cball bounded_cball] | 
| 1901 |     by (simp add: \<open>S \<noteq> {}\<close> eq)
 | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1902 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1903 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1904 | 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 | 1905 | 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 | 1906 | 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 | 1907 | 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 | 1908 | \<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 | 1909 | (\<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 | 1910 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1911 | proof (cases "S = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1912 | case True then show ?thesis | 
| 78336 | 1913 | by (simp add: homotopic_on_emptyI) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1914 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1915 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1916 | 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 | 1917 | 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 | 1918 | 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 | 1919 | 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 | 1920 | 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 | 1921 | 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 | 1922 | 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 | 1923 | 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 | 1924 | 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 | 1925 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1926 | 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 | 1927 | 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 | 1928 | 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 | 1929 | (\<forall>x\<in>S. g x = (x - a) /\<^sub>R norm (x - a))" | 
| 72490 | 1930 | if "bounded (connected_component_set (- S) a)" | 
| 1931 | using non_extensible_Borsuk_map [OF \<open>compact S\<close> componentsI _ aincc] \<open>a \<notin> S\<close> that by auto | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1932 | 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 | 1933 | "\<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 | 1934 | using notr | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1935 | 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 | 1936 | [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 | 1937 | with \<open>a \<notin> S\<close> show "\<not> ?lhs" | 
| 72490 | 1938 | by (metis UNIV_I continuous_on_subset image_subset_iff nog subsetI) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1939 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1940 | assume "\<not> ?lhs" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1941 | 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 | 1942 | 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 | 1943 | 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 | 1944 | by simp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1945 | have "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) (\<lambda>x. (x - a) /\<^sub>R norm (x - a)) | 
| 72490 | 1946 | (\<lambda>x. (x - b) /\<^sub>R norm (x - b))" | 
| 1947 | proof - | |
| 1948 | have "path_component (- S) a b" | |
| 1949 | by (metis (full_types) \<open>closed S\<close> b mem_Collect_eq open_Compl open_path_connected_component) | |
| 1950 | then show ?thesis | |
| 1951 | using Borsuk_maps_homotopic_in_path_component by blast | |
| 1952 | qed | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1953 | moreover | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1954 | 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 | 1955 | (\<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 | 1956 | 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 | 1957 | 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 | 1958 | 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 | 1959 | 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 | 1960 | by (rule continuous_on_Borsuk_map [OF bnot]) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1961 | show "(\<lambda>x. (x - b) /\<^sub>R norm (x - b)) \<in> ball 0 r \<rightarrow> sphere 0 1" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1962 | 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 | 1963 | qed blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1964 | 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 | 1965 | 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 | 1966 | 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 | 1967 | by blast | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1968 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1969 | 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 | 1970 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1971 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1972 | 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 | 1973 | 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 | 1974 | 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 | 1975 | 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 | 1976 | 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 | 1977 | (\<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 | 1978 | (\<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 | 1979 | 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 | 1980 | proof (rule ccontr) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1981 | 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 | 1982 | 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 | 1983 | have "\<nexists>g. continuous_on (S \<union> connected_component_set (- S) a) g \<and> | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1984 | g \<in> (S \<union> connected_component_set (- S) a) \<rightarrow> sphere 0 1 \<and> | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1985 | (\<forall>x\<in>S. g x = (x - a) /\<^sub>R norm (x - a))" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1986 | using non_extensible_Borsuk_map [OF \<open>compact S\<close> _ boc] \<open>a \<notin> S\<close> | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1987 | by (simp add: componentsI) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1988 | 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 | 1989 | "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 | 1990 | "\<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 | 1991 | 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 | 1992 | 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 | 1993 | 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 | 1994 | 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 | 1995 | by (simp add: \<open>b \<notin> S\<close> notcc continuous_on_Borsuk_map) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 1996 | show "(\<lambda>x. (x - b) /\<^sub>R norm (x - b)) \<in> ?T \<rightarrow> sphere 0 1" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 1997 | 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 | 1998 | 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 | 1999 | (\<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 | 2000 | 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 | 2001 | 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 | 2002 | 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 | 2003 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2004 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2005 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2006 | 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 | 2007 | 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 | 2008 |   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 | 2009 | 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 | 2010 | (\<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 | 2011 | (\<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 | 2012 | 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 | 2013 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2014 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2015 | assume L: ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2016 | show ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2017 | 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 | 2018 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2019 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2020 | 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 | 2021 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2022 | 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 | 2023 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2024 | 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 | 2025 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2026 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2027 | 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 | 2028 | 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 | 2029 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2030 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2031 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2032 | 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 | 2033 | 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 | 2034 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2035 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2036 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2037 | assume R: ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2038 | 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 | 2039 | 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 | 2040 | then show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2041 | 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 | 2042 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2043 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2044 | 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 | 2045 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2046 | 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 | 2047 | 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 | 2048 | 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 | 2049 |       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 | 2050 | 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 | 2051 | proof (cases "U = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2052 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2053 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2054 | 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 | 2055 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2056 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2057 | 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 | 2058 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2059 | 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 | 2060 | 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 | 2061 | 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 | 2062 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2063 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2064 | have "continuous_on (T \<union> (S - T)) ?g" | 
| 72490 | 2065 | using Seq clo ope by (intro continuous_on_cases_local) (auto simp: contf) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2066 | 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 | 2067 | by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2068 | 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 | 2069 | 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 | 2070 | 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 | 2071 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2072 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2073 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2074 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2075 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2076 | 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 | 2077 | 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 | 2078 | assumes S: "locally connected S \<or> compact S" and "ANR U" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2079 | and C: "C \<in> components S" and contf: "continuous_on C f" and fim: "f \<in> C \<rightarrow> U" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2080 | obtains g where "continuous_on S g" "g \<in> S \<rightarrow> U" "\<And>x. x \<in> C \<Longrightarrow> g x = f x" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2081 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2082 | 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 | 2083 | and clo: "closedin (top_of_set S) T" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2084 | and "C \<subseteq> T" and contg: "continuous_on T g" and gim: "g \<in> T \<rightarrow> U" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2085 | 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 | 2086 | using S | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2087 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2088 | 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 | 2089 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2090 | 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 | 2091 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2092 | assume "compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2093 | 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 | 2094 | and contg: "continuous_on W g" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2095 | and gim: "g \<in> W \<rightarrow> U" and gf: "\<And>x. x \<in> C \<Longrightarrow> g x = f x" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2096 | 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 | 2097 | 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 | 2098 | 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 | 2099 | 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 | 2100 | 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 | 2101 | 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 | 2102 | 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 | 2103 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2104 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2105 | 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 | 2106 | 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 | 2107 | 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 | 2108 | by (metis Int_subset_iff V \<open>K \<subseteq> V\<close> contg continuous_on_subset opeK openin_subtopology subset_eq) | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2109 | show "g \<in> K \<rightarrow> U" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2110 | 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 | 2111 | 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 | 2112 | qed | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2113 | obtain h where "continuous_on S h" "h \<in> S \<rightarrow> U" "\<And>x. x \<in> T \<Longrightarrow> h x = g x" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2114 | using extension_from_clopen | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2115 | by (metis C bot.extremum_uniqueI clo contg gim fim image_is_empty in_components_nonempty ope image_subset_iff_funcset) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2116 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2117 | 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 | 2118 | qed | 
| 
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 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2121 | lemma tube_lemma: | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2122 | 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 | 2123 |   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 | 2124 | 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 | 2125 | 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 | 2126 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2127 |   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 | 2128 | 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 | 2129 | 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 | 2130 | 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 | 2131 | 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 | 2132 | 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 | 2133 | 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 | 2134 | 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 | 2135 | by auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2136 | ultimately show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2137 | 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 | 2138 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2139 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2140 | 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 | 2141 | 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 | 2142 |   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 | 2143 | 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 | 2144 | 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 | 2145 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2146 | 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 | 2147 | 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 | 2148 | 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 | 2149 | by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2150 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2151 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2152 | 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 | 2153 | 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 | 2154 | 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 | 2155 | 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 | 2156 | 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 | 2157 | 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 | 2158 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2159 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2160 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2161 | 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 | 2162 | 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 | 2163 | 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 | 2164 | 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 | 2165 | 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 | 2166 | 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 | 2167 | 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 | 2168 | "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 | 2169 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2170 | 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 | 2171 | 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 | 2172 |   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 | 2173 |              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 | 2174 | 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 | 2175 | 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 | 2176 |   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 | 2177 |                              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 | 2178 | else h z" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2179 |   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 | 2180 |   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 | 2181 | unfolding h'_def | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2182 | 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 | 2183 |     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 | 2184 |          "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 | 2185 |       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 | 2186 |     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 | 2187 |          "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 | 2188 |       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 | 2189 | 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 | 2190 | 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 | 2191 | 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 | 2192 | 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 | 2193 | 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 | 2194 |   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 | 2195 | 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 | 2196 |   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 | 2197 | 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 | 2198 |   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 | 2199 | 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 | 2200 | ultimately | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2201 |   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 | 2202 |                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 | 2203 | and contk: "continuous_on W k" | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2204 | and kim: "k \<in> W \<rightarrow> U" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2205 |                and kh': "\<And>x. x \<in> ({0,1} \<times> S) \<union> ({0..1} \<times> T) \<Longrightarrow> k x = h' x"
 | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2206 |     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"] image_subset_iff_funcset)
 | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2207 | 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 | 2208 |               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 | 2209 |     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 | 2210 | 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 | 2211 | 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 | 2212 |     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 | 2213 | 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 | 2214 |     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 | 2215 | 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 | 2216 | 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 | 2217 | 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 | 2218 | 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 | 2219 | 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 | 2220 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2221 | ultimately show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2222 | 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 | 2223 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2224 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2225 | 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 | 2226 | 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 | 2227 | 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 | 2228 | 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 | 2229 | 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 | 2230 | 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 | 2231 | 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 | 2232 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2233 | 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 | 2234 | 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 | 2235 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2236 |   proof (cases "\<V> = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2237 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2238 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2239 | 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 | 2240 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2241 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2242 | 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 | 2243 | 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 | 2244 | 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 | 2245 | 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 | 2246 | 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 | 2247 | 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 | 2248 |     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 | 2249 |                   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 | 2250 | 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 | 2251 | 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 | 2252 | 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 | 2253 | 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 | 2254 | 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 | 2255 |     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 | 2256 |               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 | 2257 |                                    {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 | 2258 | 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 | 2259 |       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 | 2260 |       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 | 2261 | 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 | 2262 |       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 | 2263 |                    ({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 | 2264 | 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 | 2265 | 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 | 2266 | 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 | 2267 | 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 | 2268 | 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 | 2269 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2270 |       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 | 2271 | 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 | 2272 |       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 | 2273 | \<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 | 2274 | 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 | 2275 | qed auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2276 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2277 | 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 | 2278 |       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 | 2279 | 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 | 2280 |       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 | 2281 | proof clarsimp | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2282 | 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 | 2283 | 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 | 2284 | 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 | 2285 | 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 | 2286 | 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 | 2287 | 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 | 2288 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2289 | fix X y | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2290 | 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 | 2291 | 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 | 2292 | 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 | 2293 | 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 | 2294 | 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 | 2295 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2296 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2297 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2298 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2299 | 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 | 2300 | 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 | 2301 | 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 | 2302 | 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 | 2303 | (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 | 2304 | (\<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 | 2305 | (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 | 2306 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2307 | 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 | 2308 | 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 | 2309 | 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 | 2310 | 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 | 2311 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2312 | assume ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2313 | 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 | 2314 | 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 | 2315 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2316 | assume R: ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2317 | 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 | 2318 | 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 | 2319 | 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 | 2320 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2321 | 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 | 2322 | 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 | 2323 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2324 | using S | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2325 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2326 | 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 | 2327 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2328 | 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 | 2329 | 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 | 2330 | 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 | 2331 | 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 | 2332 | 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 | 2333 | 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 | 2334 | 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 | 2335 | qed auto | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2336 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2337 | assume "compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2338 | 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 | 2339 | 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 | 2340 | 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 | 2341 | 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 | 2342 | 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 | 2343 | \<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 | 2344 | 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 | 2345 | 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 | 2346 | 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 | 2347 | 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 | 2348 | 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 | 2349 | 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 | 2350 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2351 | 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 | 2352 | 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 | 2353 | 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 | 2354 | 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 | 2355 | 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 | 2356 | 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 | 2357 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2358 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2359 | 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 | 2360 | 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 | 2361 | 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 | 2362 | 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 | 2363 | by metis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2364 | 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 | 2365 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2366 | 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 | 2367 | 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 | 2368 | 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 | 2369 | 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 | 2370 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2371 | show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2372 | apply (subst Seq) | 
| 72490 | 2373 | using Seq clo\<phi> ope\<phi> hom\<phi> by (intro homotopic_on_clopen_Union) auto | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2374 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2375 | 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 | 2376 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2377 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2378 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2379 | 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 | 2380 | 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 | 2381 | 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 | 2382 | shows | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2383 | "(\<forall>f g. continuous_on S f \<longrightarrow> f \<in> S \<rightarrow> T \<longrightarrow> continuous_on S g \<longrightarrow> g \<in> S \<rightarrow> T \<longrightarrow> | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2384 | 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 | 2385 | \<longleftrightarrow> | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2386 | (\<forall>C\<in>components S. | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2387 | \<forall>f g. continuous_on C f \<longrightarrow> f \<in> C \<rightarrow> T \<longrightarrow> continuous_on C g \<longrightarrow> g \<in> C \<rightarrow> T \<longrightarrow> | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2388 | 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 | 2389 | (is "?lhs = ?rhs") | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2390 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2391 | 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 | 2392 | show ?rhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2393 | proof clarify | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2394 | fix C f g | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2395 | assume contf: "continuous_on C f" and fim: "f \<in> C \<rightarrow> T" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2396 | and contg: "continuous_on C g" and gim: "g \<in> C \<rightarrow> T" and C: "C \<in> components S" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2397 | obtain f' where contf': "continuous_on S f'" and f'im: "f' \<in> S \<rightarrow> T" and f'f: "\<And>x. x \<in> C \<Longrightarrow> f' x = f x" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2398 | using extension_from_component [OF S \<open>ANR T\<close> C contf fim] by metis | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2399 | obtain g' where contg': "continuous_on S g'" and g'im: "g' \<in> S \<rightarrow> T" and g'g: "\<And>x. x \<in> C \<Longrightarrow> g' x = g x" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2400 | 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 | 2401 | 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 | 2402 | 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 | 2403 | 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 | 2404 | 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 | 2405 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2406 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2407 | 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 | 2408 | show ?lhs | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2409 | proof clarify | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2410 | fix f g | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2411 | assume contf: "continuous_on S f" and fim: "f \<in> S \<rightarrow> T" | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2412 | and contg: "continuous_on S g" and gim: "g \<in> S \<rightarrow> T" | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2413 | moreover have "homotopic_with_canon (\<lambda>x. True) C T f g" if "C \<in> components S" for C | 
| 78248 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2414 | using R [OF that] contf contg continuous_on_subset fim gim in_components_subset | 
| 
740b23f1138a
EXPERIMENTAL replacement of f ` A <= B by f : A -> B in Analysis
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 2415 | by (smt (verit, del_insts) Pi_anti_mono subsetD that) | 
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2416 | 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 | 2417 | 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 | 2418 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2419 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2420 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2421 | 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 | 2422 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2423 | 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 | 2424 | 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 | 2425 | 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 | 2426 | 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 | 2427 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2428 | 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 | 2429 | 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 | 2430 | 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 | 2431 | 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 | 2432 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2433 | 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 | 2434 | 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 | 2435 | have "open(- S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2436 | 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 | 2437 | 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 | 2438 | 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 | 2439 | 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 | 2440 | 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 | 2441 | 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 | 2442 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2443 | proof | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2444 | assume "bounded C" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2445 | 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 | 2446 | 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 | 2447 | 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 | 2448 | 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 | 2449 | 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 | 2450 | 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 | 2451 | 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 | 2452 | 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 | 2453 | 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 | 2454 | 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 | 2455 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2456 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2457 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2458 | 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 | 2459 | 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 | 2460 |   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 | 2461 | shows "connected(- S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2462 | proof - | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2463 | 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 | 2464 | 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 | 2465 | show ?thesis | 
| 72490 | 2466 | proof (clarsimp simp: connected_iff_connected_component_eq) | 
| 2467 | have "\<not> bounded (connected_component_set (- S) x)" if "x \<notin> S" for x | |
| 2468 | by (meson Compl_iff assms componentsI that unbounded_components_complement_absolute_retract) | |
| 2469 | then show "connected_component_set (- S) x = connected_component_set (- S) y" | |
| 2470 | if "x \<notin> S" "y \<notin> S" for x y | |
| 2471 | using cobounded_unique_unbounded_component [OF _ 2] | |
| 2472 | by (metis \<open>compact S\<close> compact_imp_bounded double_compl that) | |
| 2473 | qed | |
| 70642 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2474 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2475 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2476 | 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 | 2477 | 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 | 2478 |   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 | 2479 | 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 | 2480 | 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 | 2481 | 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 | 2482 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2483 | 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 | 2484 | 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 | 2485 |   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 | 2486 | shows "connected(- S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2487 | proof (cases "S = {}")
 | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2488 | case True | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2489 | then show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2490 | 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 | 2491 | next | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2492 | case False | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2493 | show ?thesis | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2494 | 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 | 2495 | show "compact S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2496 | 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 | 2497 | show "AR S" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2498 | 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 | 2499 | qed (rule 2) | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2500 | qed | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2501 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2502 | 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 | 2503 | 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 | 2504 |   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 | 2505 | 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 | 2506 | 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 | 2507 | 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 | 2508 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2509 | 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 | 2510 | 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 | 2511 |   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 | 2512 | 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 | 2513 | 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 | 2514 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2515 | 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 | 2516 | 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 | 2517 |   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 | 2518 | shows "connected(-S)" | 
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2519 | 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 | 2520 | |
| 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 paulson <lp15@cam.ac.uk> parents: diff
changeset | 2521 | end |