| author | wenzelm | 
| Wed, 20 Oct 2021 17:11:46 +0200 | |
| changeset 74560 | 5c8177fd1295 | 
| parent 73932 | fd21b4a93043 | 
| child 78248 | 740b23f1138a | 
| 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)  | 
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
103  | 
show "(g \<circ> h') ` U \<subseteq> S'"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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)  | 
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
139  | 
show "(g \<circ> h') ` U \<subseteq> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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: 
72490 
diff
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
176  | 
assumes "ANR S" and contf: "continuous_on T f" and "f ` T \<subseteq> S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
180  | 
"g ` V \<subseteq> S" "\<And>x. x \<in> T \<Longrightarrow> g x = f x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
197  | 
by (meson \<open>f ` T \<subseteq> S\<close> continuous_on_subset homeomorphism_def homgh)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
205  | 
by (metis (no_types) assms(3) cloCS closedin_def image_comp image_mono order.trans topspace_euclidean_subtopology)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
214  | 
using cloUT closedin_imp_subset \<open>S' \<subseteq> D\<close> \<open>f ` T \<subseteq> S\<close> eq homeomorphism_image1 homgh  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
217  | 
using \<open>f' ` U \<subseteq> C\<close> by (auto simp: opD contf' continuous_openin_preimage)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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'])  | 
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
225  | 
show "(h \<circ> r \<circ> f') ` (U \<inter> f' -` D) \<subseteq> S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
229  | 
using \<open>homeomorphism S S' g h\<close> \<open>f ` T \<subseteq> S\<close> eq  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
230  | 
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
 | 
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)  | 
| 72490 | 243  | 
obtain h: "continuous_on S' h" " h ` S' \<subseteq> S"  | 
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)  | 
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
254  | 
show "(g \<circ> h') ` V \<subseteq> S'"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
272  | 
assumes contf: "continuous_on S f" and fim: "f ` S \<subseteq> T" and "ANR T" "closed S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
273  | 
obtains V g where "S \<subseteq> V" "open V" "continuous_on V g"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
274  | 
"g ` V \<subseteq> T" "\<And>x. x \<in> S \<Longrightarrow> g x = f x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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.  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
281  | 
\<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
 | 
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>  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
284  | 
continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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)  | 
| 72490 | 291  | 
obtain h: "continuous_on T h" " h ` T \<subseteq> S"  | 
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
294  | 
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
 | 
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')"  | 
| 72490 | 302  | 
by (meson continuous_on_compose continuous_on_subset h' hom homeomorphism_cont1)  | 
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
303  | 
show "(g \<circ> h') ` V \<subseteq> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
304  | 
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
 | 
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.  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
316  | 
\<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
 | 
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>  | 
| 72490 | 319  | 
continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)))" (is "_ = ?rhs")  | 
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  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
434  | 
show "(f \<circ> r \<circ> h) ` (W \<inter> h -` X) \<subseteq> S'"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
532  | 
have "\<exists>g. continuous_on W g \<and> g ` W \<subseteq> S \<and> (\<forall>x\<in>T. g x = f x)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
533  | 
if f: "continuous_on T f" "f ` T \<subseteq> S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
540  | 
and "g ` U \<subseteq> S" and gf: "\<And>x. x \<in> T \<Longrightarrow> g x = f x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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"
 | 
|
573  | 
using j \<open>g ` U \<subseteq> S\<close> \<open>W - U \<subseteq> V'\<close> by fastforce  | 
|
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"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
586  | 
          using \<open>V' \<inter> V = {}\<close> \<open>W - U \<subseteq> V'\<close> \<open>g ` U \<subseteq> S\<close> that by fastforce
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
590  | 
with \<open>a \<in> S\<close> \<open>g ` U \<subseteq> S\<close>  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
591  | 
show "(\<lambda>x. if x \<in> W - V then a else h (j x, g x)) ` W \<subseteq> S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
599  | 
by (simp add: AR_eq_absolute_extensor)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
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  | 
|
609  | 
assume W: "continuous_on W f" "f ` W \<subseteq> S" "closedin (top_of_set U) W"  | 
|
610  | 
then obtain r where "S \<subseteq> T" and r: "continuous_on T r" "r ` T \<subseteq> S" "\<forall>x\<in>S. r x = x" "continuous_on W f" "f ` W \<subseteq> S"  | 
|
611  | 
"closedin (top_of_set U) W"  | 
|
612  | 
by (meson ST retract_of_def retraction_def)  | 
|
613  | 
then have "f ` W \<subseteq> T"  | 
|
614  | 
by blast  | 
|
615  | 
with W obtain V g where V: "W \<subseteq> V" "openin (top_of_set U) V" "continuous_on V g" "g ` V \<subseteq> T" "\<forall>x\<in>W. g x = f x"  | 
|
616  | 
by (metis ANR_imp_absolute_neighbourhood_extensor \<open>ANR T\<close>)  | 
|
617  | 
with r have "continuous_on V (r \<circ> g) \<and> (r \<circ> g) ` V \<subseteq> S \<and> (\<forall>x\<in>W. (r \<circ> g) x = f x)"  | 
|
618  | 
by (metis (no_types, lifting) comp_apply continuous_on_compose continuous_on_subset image_subset_iff)  | 
|
619  | 
then show "\<exists>V. W \<subseteq> V \<and> openin (top_of_set U) V \<and> (\<exists>g. continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x\<in>W. g x = f x))"  | 
|
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)  | 
| 72490 | 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 by auto  | 
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
779  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
780  | 
|
| 
 
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  | 
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
 | 
783  | 
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
 | 
784  | 
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
 | 
785  | 
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
 | 
786  | 
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
 | 
787  | 
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
 | 
788  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
789  | 
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
 | 
790  | 
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
 | 
791  | 
       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
 | 
792  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
793  | 
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
 | 
794  | 
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
 | 
795  | 
have US: "closedin (top_of_set U) (C \<inter> g -` S)"  | 
| 72490 | 796  | 
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
 | 
797  | 
have UT: "closedin (top_of_set U) (C \<inter> g -` T)"  | 
| 72490 | 798  | 
by (metis STT continuous_on_closed hom homeomorphism_def closedin_trans [OF _ UC])  | 
799  | 
have "homeomorphism (C \<inter> g -` S) S g f"  | 
|
800  | 
using hom  | 
|
801  | 
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
 | 
802  | 
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
 | 
803  | 
done  | 
| 72490 | 804  | 
then have ARS: "AR (C \<inter> g -` S)"  | 
805  | 
using \<open>AR S\<close> homeomorphic_AR_iff_AR homeomorphic_def by blast  | 
|
806  | 
have "homeomorphism (C \<inter> g -` T) T g f"  | 
|
807  | 
using hom  | 
|
808  | 
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
 | 
809  | 
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
 | 
810  | 
done  | 
| 72490 | 811  | 
then have ART: "AR (C \<inter> g -` T)"  | 
812  | 
using \<open>AR T\<close> homeomorphic_AR_iff_AR homeomorphic_def by blast  | 
|
813  | 
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
 | 
814  | 
using hom  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
815  | 
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
 | 
816  | 
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
 | 
817  | 
done  | 
| 72490 | 818  | 
then have ARI: "AR ((C \<inter> g -` S) \<inter> (C \<inter> g -` T))"  | 
819  | 
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
 | 
820  | 
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
 | 
821  | 
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
 | 
822  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
823  | 
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
 | 
824  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
825  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
826  | 
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
 | 
827  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
828  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
829  | 
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
 | 
830  | 
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
 | 
831  | 
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
 | 
832  | 
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
 | 
833  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
834  | 
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
 | 
835  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
836  | 
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
 | 
837  | 
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
 | 
838  | 
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
 | 
839  | 
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
 | 
840  | 
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
 | 
841  | 
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
 | 
842  | 
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
 | 
843  | 
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
 | 
844  | 
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
 | 
845  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
846  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
847  | 
  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
 | 
848  | 
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
 | 
849  | 
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
 | 
850  | 
  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
 | 
851  | 
  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
 | 
852  | 
  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
 | 
853  | 
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
 | 
854  | 
    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
 | 
855  | 
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
 | 
856  | 
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
 | 
857  | 
    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
 | 
858  | 
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
 | 
859  | 
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
 | 
860  | 
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
 | 
861  | 
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
 | 
862  | 
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
 | 
863  | 
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
 | 
864  | 
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
 | 
865  | 
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
 | 
866  | 
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
 | 
867  | 
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
 | 
868  | 
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
 | 
869  | 
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
 | 
870  | 
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
 | 
871  | 
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
 | 
872  | 
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
 | 
873  | 
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
 | 
874  | 
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
 | 
875  | 
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
 | 
876  | 
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
 | 
877  | 
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
 | 
878  | 
and ret: "(S \<inter> T) retract_of W0"  | 
| 72490 | 879  | 
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
 | 
880  | 
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
 | 
881  | 
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
 | 
882  | 
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
 | 
883  | 
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
 | 
884  | 
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
 | 
885  | 
obtain r0  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
886  | 
where "S \<inter> T \<subseteq> W0" and contr0: "continuous_on W0 r0" and "r0 ` W0 \<subseteq> S \<inter> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
887  | 
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
 | 
888  | 
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
 | 
889  | 
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
 | 
890  | 
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
 | 
891  | 
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
 | 
892  | 
have "r ` (W0 \<union> S) \<subseteq> S" "r ` (W0 \<union> T) \<subseteq> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
893  | 
using \<open>r0 ` W0 \<subseteq> S \<inter> T\<close> r_def by auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
894  | 
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
 | 
895  | 
unfolding r_def  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
896  | 
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
 | 
897  | 
show "closedin (top_of_set (W0 \<union> (S \<union> T))) W0"  | 
| 72490 | 898  | 
using closedin_subset_trans [of U]  | 
899  | 
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
 | 
900  | 
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
 | 
901  | 
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
 | 
902  | 
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
 | 
903  | 
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
 | 
904  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
905  | 
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
 | 
906  | 
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
 | 
907  | 
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
 | 
908  | 
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
 | 
909  | 
and opeSW1: "openin (top_of_set S') W1"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
910  | 
and "g ` W1 \<subseteq> S" and geqr: "\<And>x. x \<in> W0 \<union> S \<Longrightarrow> g x = r x"  | 
| 72490 | 911  | 
proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> _ \<open>r ` (W0 \<union> S) \<subseteq> S\<close> cloS'WS])  | 
912  | 
show "continuous_on (W0 \<union> S) r"  | 
|
913  | 
using continuous_on_subset contr sup_assoc by blast  | 
|
914  | 
qed auto  | 
|
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
915  | 
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
 | 
916  | 
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
 | 
917  | 
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
 | 
918  | 
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
 | 
919  | 
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
 | 
920  | 
and "h ` W2 \<subseteq> T" and heqr: "\<And>x. x \<in> W0 \<union> T \<Longrightarrow> h x = r x"  | 
| 72490 | 921  | 
proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> _ \<open>r ` (W0 \<union> T) \<subseteq> T\<close> cloT'WT])  | 
922  | 
show "continuous_on (W0 \<union> T) r"  | 
|
923  | 
using continuous_on_subset contr sup_assoc by blast  | 
|
924  | 
qed auto  | 
|
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
925  | 
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
 | 
926  | 
by (force simp: S'_def T'_def W_def)  | 
| 72490 | 927  | 
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
 | 
928  | 
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
 | 
929  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
930  | 
proof  | 
| 72490 | 931  | 
have eq: "W1 - (W - U0) \<union> (W2 - (W - U0))  | 
932  | 
= ((U - T') \<inter> O1 \<union> (U - S') \<inter> O2 \<union> U \<inter> O1 \<inter> O2) - (W - U0)" (is "?WW1 \<union> ?WW2 = ?rhs")  | 
|
933  | 
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
 | 
934  | 
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 | 935  | 
show "openin (top_of_set U) (?WW1 \<union> ?WW2)"  | 
936  | 
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)  | 
|
937  | 
obtain SU' where "closed SU'" "S' = U \<inter> SU'"  | 
|
938  | 
using cloUS' by (auto simp add: closedin_closed)  | 
|
939  | 
moreover have "?WW1 = (?WW1 \<union> ?WW2) \<inter> SU'"  | 
|
940  | 
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  | 
|
941  | 
by auto  | 
|
942  | 
ultimately have cloW1: "closedin (top_of_set (W1 - (W - U0) \<union> (W2 - (W - U0)))) (W1 - (W - U0))"  | 
|
943  | 
by (metis closedin_closed_Int)  | 
|
944  | 
obtain TU' where "closed TU'" "T' = U \<inter> TU'"  | 
|
945  | 
using cloUT' by (auto simp add: closedin_closed)  | 
|
946  | 
moreover have "?WW2 = (?WW1 \<union> ?WW2) \<inter> TU'"  | 
|
947  | 
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  | 
|
948  | 
by auto  | 
|
949  | 
ultimately have cloW2: "closedin (top_of_set (?WW1 \<union> ?WW2)) ?WW2"  | 
|
950  | 
by (metis closedin_closed_Int)  | 
|
951  | 
let ?gh = "\<lambda>x. if x \<in> S' then g x else h x"  | 
|
952  | 
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)"  | 
|
953  | 
proof (intro exI conjI)  | 
|
954  | 
show "\<forall>x\<in>S \<union> T. ?gh x = x"  | 
|
955  | 
using ST \<open>S' \<inter> T' = W\<close> geqr heqr O12  | 
|
956  | 
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)  | 
|
957  | 
have "\<And>x. x \<in> ?WW1 \<and> x \<notin> S' \<or> x \<in> ?WW2 \<and> x \<in> S' \<Longrightarrow> g x = h x"  | 
|
958  | 
using O12  | 
|
959  | 
by (metis (full_types) DiffD1 DiffD2 DiffI IntE IntI U0(2) UnCI \<open>S' \<inter> T' = W\<close> geqr heqr in_mono)  | 
|
960  | 
then show "continuous_on (?WW1 \<union> ?WW2) ?gh"  | 
|
961  | 
using continuous_on_cases_local [OF cloW1 cloW2 continuous_on_subset [OF contg] continuous_on_subset [OF conth]]  | 
|
962  | 
by simp  | 
|
963  | 
show "?gh ` (?WW1 \<union> ?WW2) \<subseteq> S \<union> T"  | 
|
964  | 
using \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<inter> T' = W\<close> \<open>g ` W1 \<subseteq> S\<close> \<open>h ` W2 \<subseteq> T\<close> \<open>U0 \<inter> W \<subseteq> W0\<close> \<open>W0 \<union> S \<subseteq> W1\<close>  | 
|
965  | 
by (auto simp add: image_subset_iff)  | 
|
966  | 
qed  | 
|
967  | 
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
 | 
968  | 
using \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W0 \<union> T \<subseteq> W2\<close> ST opeUU0 U0  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
969  | 
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
 | 
970  | 
qed  | 
| 
 
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  | 
|
| 
 
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  | 
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
 | 
975  | 
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
 | 
976  | 
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
 | 
977  | 
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
 | 
978  | 
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
 | 
979  | 
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
 | 
980  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
981  | 
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
 | 
982  | 
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
 | 
983  | 
       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
 | 
984  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
985  | 
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
 | 
986  | 
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
 | 
987  | 
have US: "closedin (top_of_set U) (C \<inter> g -` S)"  | 
| 72490 | 988  | 
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
 | 
989  | 
have UT: "closedin (top_of_set U) (C \<inter> g -` T)"  | 
| 72490 | 990  | 
by (metis STT UC closedin_trans continuous_on_imp_closedin hom homeomorphism_def)  | 
991  | 
have "homeomorphism (C \<inter> g -` S) S g f"  | 
|
992  | 
using hom  | 
|
993  | 
apply (auto simp: homeomorphism_def elim!: continuous_on_subset)  | 
|
994  | 
by (rule_tac x="f x" in image_eqI, auto)  | 
|
995  | 
then have ANRS: "ANR (C \<inter> g -` S)"  | 
|
996  | 
using \<open>ANR S\<close> homeomorphic_ANR_iff_ANR homeomorphic_def by blast  | 
|
997  | 
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
 | 
998  | 
using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset)  | 
| 72490 | 999  | 
by (rule_tac x="f x" in image_eqI, auto)  | 
1000  | 
then have ANRT: "ANR (C \<inter> g -` T)"  | 
|
1001  | 
using \<open>ANR T\<close> homeomorphic_ANR_iff_ANR homeomorphic_def by blast  | 
|
1002  | 
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
 | 
1003  | 
using hom  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1004  | 
apply (auto simp: homeomorphism_def elim!: continuous_on_subset)  | 
| 72490 | 1005  | 
by (rule_tac x="f x" in image_eqI, auto)  | 
1006  | 
then have ANRI: "ANR ((C \<inter> g -` S) \<inter> (C \<inter> g -` T))"  | 
|
1007  | 
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
 | 
1008  | 
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
 | 
1009  | 
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
 | 
1010  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1011  | 
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
 | 
1012  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1013  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1014  | 
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
 | 
1015  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1016  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1017  | 
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
 | 
1018  | 
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
 | 
1019  | 
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
 | 
1020  | 
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
 | 
1021  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1022  | 
lemma ANR_openin:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1023  | 
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
 | 
1024  | 
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
 | 
1025  | 
shows "ANR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1026  | 
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
 | 
1027  | 
fix f :: "'a \<times> real \<Rightarrow> 'a" and U C  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1028  | 
assume contf: "continuous_on C f" and fim: "f ` C \<subseteq> S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1029  | 
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
 | 
1030  | 
have "f ` C \<subseteq> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1031  | 
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
 | 
1032  | 
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
 | 
1033  | 
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
 | 
1034  | 
and contg: "continuous_on W g"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1035  | 
and gim: "g ` W \<subseteq> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1036  | 
and geq: "\<And>x. x \<in> C \<Longrightarrow> g x = f x"  | 
| 72490 | 1037  | 
using ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf \<open>f ` C \<subseteq> T\<close> cloUC] fim by auto  | 
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1038  | 
show "\<exists>V g. C \<subseteq> V \<and> openin (top_of_set U) V \<and> continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x\<in>C. g x = f x)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1039  | 
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
 | 
1040  | 
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
 | 
1041  | 
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
 | 
1042  | 
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
 | 
1043  | 
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
 | 
1044  | 
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
 | 
1045  | 
by (blast intro: continuous_on_subset [OF contg])  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1046  | 
show "g ` (W \<inter> g -` S) \<subseteq> S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1047  | 
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
 | 
1048  | 
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
 | 
1049  | 
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
 | 
1050  | 
qed  | 
| 
 
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  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1053  | 
lemma ENR_openin:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1054  | 
fixes S :: "'a::euclidean_space set"  | 
| 72490 | 1055  | 
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
 | 
1056  | 
shows "ENR S"  | 
| 72490 | 1057  | 
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
 | 
1058  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1059  | 
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
 | 
1060  | 
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
 | 
1061  | 
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
 | 
1062  | 
shows "ANR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1063  | 
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
 | 
1064  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1065  | 
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
 | 
1066  | 
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
 | 
1067  | 
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
 | 
1068  | 
shows "ENR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1069  | 
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
 | 
1070  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1071  | 
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
 | 
1072  | 
fixes S :: "'a::euclidean_space set"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1073  | 
shows "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
 | 
1074  | 
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
 | 
1075  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1076  | 
lemma ANR_delete:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1077  | 
fixes S :: "'a::euclidean_space set"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1078  | 
  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
 | 
1079  | 
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
 | 
1080  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1081  | 
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
 | 
1082  | 
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
 | 
1083  | 
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
 | 
1084  | 
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
 | 
1085  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1086  | 
lemma ENR_delete:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1087  | 
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
 | 
1088  | 
  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
 | 
1089  | 
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
 | 
1090  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1091  | 
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
 | 
1092  | 
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
 | 
1093  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1094  | 
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
 | 
1095  | 
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
 | 
1096  | 
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
 | 
1097  | 
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
 | 
1098  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1099  | 
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
 | 
1100  | 
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
 | 
1101  | 
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
 | 
1102  | 
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
 | 
1103  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1104  | 
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
 | 
1105  | 
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
 | 
1106  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1107  | 
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
 | 
1108  | 
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
 | 
1109  | 
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
 | 
1110  | 
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
 | 
1111  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1112  | 
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
 | 
1113  | 
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
 | 
1114  | 
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
 | 
1115  | 
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
 | 
1116  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1117  | 
lemma ENR_cball:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1118  | 
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
 | 
1119  | 
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
 | 
1120  | 
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
 | 
1121  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1122  | 
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
 | 
1123  | 
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
 | 
1124  | 
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
 | 
1125  | 
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
 | 
1126  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1127  | 
lemma ANR_box [iff]:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1128  | 
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
 | 
1129  | 
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
 | 
1130  | 
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
 | 
1131  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1132  | 
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
 | 
1133  | 
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
 | 
1134  | 
shows "ENR(cbox a b)" "ENR(box a b)"  | 
| 72490 | 1135  | 
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
 | 
1136  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1137  | 
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
 | 
1138  | 
    "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
 | 
1139  | 
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
 | 
1140  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1141  | 
lemma ANR_interior:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1142  | 
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
 | 
1143  | 
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
 | 
1144  | 
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
 | 
1145  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1146  | 
lemma ENR_interior:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1147  | 
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
 | 
1148  | 
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
 | 
1149  | 
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
 | 
1150  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1151  | 
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
 | 
1152  | 
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
 | 
1153  | 
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
 | 
1154  | 
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
 | 
1155  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1156  | 
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
 | 
1157  | 
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
 | 
1158  | 
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
 | 
1159  | 
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
 | 
1160  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1161  | 
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
 | 
1162  | 
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
 | 
1163  | 
assumes "ANR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1164  | 
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
 | 
1165  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1166  | 
  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
 | 
1167  | 
     where "convex U" "U \<noteq> {}"
 | 
| 72490 | 1168  | 
and UT: "closedin (top_of_set U) T" and "S homeomorphic T"  | 
1169  | 
proof (rule homeomorphic_closedin_convex)  | 
|
1170  | 
    show "aff_dim S < int DIM('a \<times> real)"
 | 
|
1171  | 
using aff_dim_le_DIM [of S] by auto  | 
|
1172  | 
qed auto  | 
|
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1173  | 
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
 | 
1174  | 
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
 | 
1175  | 
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
 | 
1176  | 
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
 | 
1177  | 
      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
 | 
1178  | 
using \<open>S homeomorphic T\<close> homeomorphic_locally homeomorphic_path_connectedness by blast  | 
| 72490 | 1179  | 
obtain Ta where "(openin (top_of_set U) Ta \<and> T retract_of Ta)"  | 
1180  | 
using ANR_def UT \<open>S homeomorphic T\<close> assms by moura  | 
|
1181  | 
then show ?thesis  | 
|
1182  | 
    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
 | 
1183  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1184  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1185  | 
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
 | 
1186  | 
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
 | 
1187  | 
assumes "ANR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1188  | 
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
 | 
1189  | 
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
 | 
1190  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1191  | 
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
 | 
1192  | 
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
 | 
1193  | 
assumes "AR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1194  | 
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
 | 
1195  | 
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
 | 
1196  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1197  | 
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
 | 
1198  | 
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
 | 
1199  | 
assumes "AR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1200  | 
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
 | 
1201  | 
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
 | 
1202  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1203  | 
lemma ENR_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
 | 
1204  | 
fixes S :: "'a::euclidean_space set"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1205  | 
assumes "ENR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1206  | 
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
 | 
1207  | 
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
 | 
1208  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1209  | 
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
 | 
1210  | 
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
 | 
1211  | 
assumes "ENR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1212  | 
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
 | 
1213  | 
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
 | 
1214  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1215  | 
lemma ANR_Times:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1216  | 
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
 | 
1217  | 
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
 | 
1218  | 
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
 | 
1219  | 
  fix f :: " ('a \<times> 'b) \<times> real \<Rightarrow> 'a \<times> 'b" and U C
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1220  | 
assume "continuous_on C f" and fim: "f ` C \<subseteq> S \<times> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1221  | 
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
 | 
1222  | 
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
 | 
1223  | 
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
 | 
1224  | 
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
 | 
1225  | 
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
 | 
1226  | 
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
 | 
1227  | 
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
 | 
1228  | 
and geq: "\<And>x. x \<in> C \<Longrightarrow> g x = (fst \<circ> f) x"  | 
| 72490 | 1229  | 
proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> contf1 _ cloUC])  | 
1230  | 
show "(fst \<circ> f) ` C \<subseteq> S"  | 
|
1231  | 
using fim by auto  | 
|
1232  | 
qed auto  | 
|
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1233  | 
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
 | 
1234  | 
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
 | 
1235  | 
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
 | 
1236  | 
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
 | 
1237  | 
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
 | 
1238  | 
and him: "h ` W2 \<subseteq> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1239  | 
and heq: "\<And>x. x \<in> C \<Longrightarrow> h x = (snd \<circ> f) x"  | 
| 72490 | 1240  | 
proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf2 _ cloUC])  | 
1241  | 
show "(snd \<circ> f) ` C \<subseteq> T"  | 
|
1242  | 
using fim by auto  | 
|
1243  | 
qed auto  | 
|
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1244  | 
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
 | 
1245  | 
openin (top_of_set U) V \<and>  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1246  | 
continuous_on V g \<and> g ` V \<subseteq> S \<times> T \<and> (\<forall>x\<in>C. g x = f x)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1247  | 
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
 | 
1248  | 
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
 | 
1249  | 
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
 | 
1250  | 
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
 | 
1251  | 
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
 | 
1252  | 
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
 | 
1253  | 
by (metis (no_types) contg conth continuous_on_Pair continuous_on_subset inf_commute inf_le1)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1254  | 
show "(\<lambda>x. (g x, h x)) ` (W1 \<inter> W2) \<subseteq> S \<times> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1255  | 
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
 | 
1256  | 
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
 | 
1257  | 
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
 | 
1258  | 
qed  | 
| 
 
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  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1261  | 
lemma AR_Times:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1262  | 
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
 | 
1263  | 
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
 | 
1264  | 
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
 | 
1265  | 
|
| 72490 | 1266  | 
(* 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
 | 
1267  | 
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
 | 
1268  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1269  | 
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
 | 
1270  | 
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
 | 
1271  | 
  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
 | 
1272  | 
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
 | 
1273  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1274  | 
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
 | 
1275  | 
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
 | 
1276  | 
  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
 | 
1277  | 
by (auto simp: interval_cbox)  | 
| 71173 | 1278  | 
*)  | 
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1279  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1280  | 
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
 | 
1281  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1282  | 
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
 | 
1283  | 
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
 | 
1284  | 
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
 | 
1285  | 
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
 | 
1286  | 
proof (cases "S = {}")
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1287  | 
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
 | 
1288  | 
by simp  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1289  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1290  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1291  | 
  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
 | 
1292  | 
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
 | 
1293  | 
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
 | 
1294  | 
by auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1295  | 
  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
 | 
1296  | 
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
 | 
1297  | 
  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
 | 
1298  | 
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
 | 
1299  | 
  also have "\<dots> retract_of {x. closest_point (affine hull S) x \<noteq> a}"
 | 
| 72490 | 1300  | 
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
 | 
1301  | 
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
 | 
1302  | 
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
 | 
1303  | 
done  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1304  | 
  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
 | 
1305  | 
  moreover have "openin (top_of_set UNIV) (UNIV \<inter> closest_point (affine hull S) -` (- {a}))"
 | 
| 72490 | 1306  | 
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
 | 
1307  | 
ultimately show ?thesis  | 
| 72490 | 1308  | 
    by (meson ENR_convex_closed ENR_delete ENR_retract_of_ENR \<open>rel_frontier S retract_of affine hull S - {a}\<close> 
 | 
1309  | 
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
 | 
1310  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1311  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1312  | 
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
 | 
1313  | 
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
 | 
1314  | 
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
 | 
1315  | 
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
 | 
1316  | 
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
 | 
1317  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1318  | 
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
 | 
1319  | 
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
 | 
1320  | 
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
 | 
1321  | 
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
 | 
1322  | 
\<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
 | 
1323  | 
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
 | 
1324  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1325  | 
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
 | 
1326  | 
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
 | 
1327  | 
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
 | 
1328  | 
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
 | 
1329  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1330  | 
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
 | 
1331  | 
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
 | 
1332  | 
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
 | 
1333  | 
\<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
 | 
1334  | 
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
 | 
1335  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1336  | 
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
 | 
1337  | 
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
 | 
1338  | 
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
 | 
1339  | 
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
 | 
1340  | 
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
 | 
1341  | 
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
 | 
1342  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1343  | 
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
 | 
1344  | 
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
 | 
1345  | 
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
 | 
1346  | 
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
 | 
1347  | 
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
 | 
1348  | 
show "continuous_on (S \<union> T) (\<lambda>x. if x \<in> S then x else r x)"  | 
| 72490 | 1349  | 
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
 | 
1350  | 
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
 | 
1351  | 
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
 | 
1352  | 
by (rule Un)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1353  | 
finally show ?thesis .  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1354  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1355  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1356  | 
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
 | 
1357  | 
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
 | 
1358  | 
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
 | 
1359  | 
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
 | 
1360  | 
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
 | 
1361  | 
shows "AR S"  | 
| 72490 | 1362  | 
by (meson AR_imp_retract AR_retract_of_AR Un assms closedin_closed_subset local.Int  | 
1363  | 
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
 | 
1364  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1365  | 
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
 | 
1366  | 
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
 | 
1367  | 
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
 | 
1368  | 
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
 | 
1369  | 
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
 | 
1370  | 
shows "AR T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1371  | 
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
 | 
1372  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1373  | 
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
 | 
1374  | 
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
 | 
1375  | 
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
 | 
1376  | 
shows "AR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1377  | 
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
 | 
1378  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1379  | 
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
 | 
1380  | 
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
 | 
1381  | 
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
 | 
1382  | 
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
 | 
1383  | 
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
 | 
1384  | 
shows "ANR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1385  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1386  | 
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
 | 
1387  | 
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
 | 
1388  | 
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
 | 
1389  | 
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
 | 
1390  | 
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
 | 
1391  | 
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
 | 
1392  | 
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
 | 
1393  | 
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
 | 
1394  | 
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
 | 
1395  | 
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
 | 
1396  | 
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
 | 
1397  | 
by auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1398  | 
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
 | 
1399  | 
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
 | 
1400  | 
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
 | 
1401  | 
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
 | 
1402  | 
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
 | 
1403  | 
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
 | 
1404  | 
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
 | 
1405  | 
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
 | 
1406  | 
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
 | 
1407  | 
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
 | 
1408  | 
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
 | 
1409  | 
with rim have "S retract_of S \<union> V"  | 
| 72490 | 1410  | 
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
 | 
1411  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1412  | 
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
 | 
1413  | 
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
 | 
1414  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1415  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1416  | 
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
 | 
1417  | 
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
 | 
1418  | 
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
 | 
1419  | 
shows "ANR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1420  | 
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
 | 
1421  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1422  | 
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
 | 
1423  | 
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
 | 
1424  | 
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
 | 
1425  | 
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
 | 
1426  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1427  | 
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
 | 
1428  | 
using assms that  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1429  | 
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
 | 
1430  | 
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
 | 
1431  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1432  | 
case (Suc n)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1433  | 
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
 | 
1434  | 
using that  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1435  | 
proof (induction \<U>)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1436  | 
case empty  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1437  | 
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
 | 
1438  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1439  | 
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
 | 
1440  | 
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
 | 
1441  | 
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
 | 
1442  | 
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
 | 
1443  | 
unfolding Int_Union  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1444  | 
proof (rule Suc)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1445  | 
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
 | 
1446  | 
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
 | 
1447  | 
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: 
72490 
diff
changeset
 | 
1448  | 
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
 | 
1449  | 
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
 | 
1450  | 
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
 | 
1451  | 
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
 | 
1452  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1453  | 
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
 | 
1454  | 
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
 | 
1455  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1456  | 
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
 | 
1457  | 
qed  | 
| 
 
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  | 
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
 | 
1460  | 
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
 | 
1461  | 
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
 | 
1462  | 
then show ?case  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1463  | 
by simp  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1464  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1465  | 
then show ?case  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1466  | 
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
 | 
1467  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1468  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1469  | 
by blast  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1470  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1471  | 
|
| 
 
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  | 
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
 | 
1474  | 
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
 | 
1475  | 
assumes "finite S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1476  | 
shows "ANR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1477  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1478  | 
  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
 | 
1479  | 
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
 | 
1480  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1481  | 
by simp  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1482  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1483  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1484  | 
lemma ANR_insert:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1485  | 
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
 | 
1486  | 
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
 | 
1487  | 
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
 | 
1488  | 
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
 | 
1489  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1490  | 
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
 | 
1491  | 
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
 | 
1492  | 
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
 | 
1493  | 
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
 | 
1494  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1495  | 
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
 | 
1496  | 
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
 | 
1497  | 
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
 | 
1498  | 
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
 | 
1499  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1500  | 
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
 | 
1501  | 
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
 | 
1502  | 
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
 | 
1503  | 
shows "ANR c"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1504  | 
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
 | 
1505  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1506  | 
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
 | 
1507  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1508  | 
lemma ENR_bounded:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1509  | 
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
 | 
1510  | 
assumes "bounded S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1511  | 
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
 | 
1512  | 
(is "?lhs = ?rhs")  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1513  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1514  | 
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
 | 
1515  | 
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
 | 
1516  | 
assume ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1517  | 
then show ?rhs  | 
| 72490 | 1518  | 
by (meson ENR_def Elementary_Metric_Spaces.open_ball bounded_Int bounded_ball inf_le2 le_inf_iff  | 
1519  | 
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
 | 
1520  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1521  | 
assume ?rhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1522  | 
then show ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1523  | 
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
 | 
1524  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1525  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1526  | 
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
 | 
1527  | 
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
 | 
1528  | 
  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
 | 
1529  | 
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
 | 
1530  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1531  | 
have "AR T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1532  | 
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
 | 
1533  | 
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
 | 
1534  | 
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
 | 
1535  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1536  | 
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
 | 
1537  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1538  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1539  | 
lemma 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
 | 
1540  | 
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
 | 
1541  | 
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
 | 
1542  | 
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
 | 
1543  | 
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
 | 
1544  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1545  | 
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
 | 
1546  | 
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
 | 
1547  | 
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
 | 
1548  | 
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
 | 
1549  | 
using assms homeomorphic_compactness  | 
| 72490 | 1550  | 
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
 | 
1551  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1552  | 
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
 | 
1553  | 
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
 | 
1554  | 
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
 | 
1555  | 
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
 | 
1556  | 
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
 | 
1557  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1558  | 
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
 | 
1559  | 
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
 | 
1560  | 
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
 | 
1561  | 
shows "ENR S"  | 
| 72490 | 1562  | 
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
 | 
1563  | 
|
| 
 
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  | 
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
 | 
1566  | 
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
 | 
1567  | 
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
 | 
1568  | 
shows "ENR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1569  | 
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
 | 
1570  | 
|
| 
 
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  | 
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
 | 
1573  | 
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
 | 
1574  | 
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
 | 
1575  | 
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
 | 
1576  | 
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
 | 
1577  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1578  | 
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
 | 
1579  | 
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
 | 
1580  | 
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
 | 
1581  | 
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
 | 
1582  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1583  | 
lemma ENR_insert:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1584  | 
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
 | 
1585  | 
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
 | 
1586  | 
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
 | 
1587  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1588  | 
  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
 | 
1589  | 
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
 | 
1590  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1591  | 
by auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1592  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1593  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1594  | 
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
 | 
1595  | 
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
 | 
1596  | 
assumes "ENR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1597  | 
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
 | 
1598  | 
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
 | 
1599  | 
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
 | 
1600  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1601  | 
(*UNUSED  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1602  | 
lemma ENR_Times:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1603  | 
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
 | 
1604  | 
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
 | 
1605  | 
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
 | 
1606  | 
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
 | 
1607  | 
oops  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1608  | 
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
 | 
1609  | 
*)  | 
| 
 
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  | 
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
 | 
1612  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1613  | 
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
 | 
1614  | 
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
 | 
1615  | 
  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
 | 
1616  | 
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
 | 
1617  | 
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
 | 
1618  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1619  | 
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
 | 
1620  | 
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
 | 
1621  | 
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
 | 
1622  | 
  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
 | 
1623  | 
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
 | 
1624  | 
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
 | 
1625  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1626  | 
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
 | 
1627  | 
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
 | 
1628  | 
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
 | 
1629  | 
  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
 | 
1630  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1631  | 
  have "frontier (cball a r) retract_of (- {b})"
 | 
| 72490 | 1632  | 
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
 | 
1633  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1634  | 
by simp  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1635  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1636  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1637  | 
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
 | 
1638  | 
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
 | 
1639  | 
assumes "0 < r"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1640  | 
  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
 | 
1641  | 
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
 | 
1642  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1643  | 
lemma ENR_sphere:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1644  | 
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
 | 
1645  | 
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
 | 
1646  | 
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
 | 
1647  | 
case True  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1648  | 
  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
 | 
1649  | 
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
 | 
1650  | 
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
 | 
1651  | 
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
 | 
1652  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1653  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1654  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1655  | 
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
 | 
1656  | 
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
 | 
1657  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1658  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1659  | 
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
 | 
1660  | 
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
 | 
1661  | 
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
 | 
1662  | 
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
 | 
1663  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1664  | 
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
 | 
1665  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1666  | 
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
 | 
1667  | 
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
 | 
1668  | 
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
 | 
1669  | 
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
 | 
1670  | 
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
 | 
1671  | 
case True  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1672  | 
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
 | 
1673  | 
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
 | 
1674  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1675  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1676  | 
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
 | 
1677  | 
by blast  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1678  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1679  | 
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
 | 
1680  | 
    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
 | 
1681  | 
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
 | 
1682  | 
    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
 | 
1683  | 
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
 | 
1684  | 
qed  | 
| 
 
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  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1687  | 
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
 | 
1688  | 
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
 | 
1689  | 
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
 | 
1690  | 
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
 | 
1691  | 
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
 | 
1692  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1693  | 
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
 | 
1694  | 
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
 | 
1695  | 
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
 | 
1696  | 
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
 | 
1697  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1698  | 
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
 | 
1699  | 
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
 | 
1700  | 
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
 | 
1701  | 
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
 | 
1702  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1703  | 
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
 | 
1704  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1705  | 
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
 | 
1706  | 
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
 | 
1707  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1708  | 
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
 | 
1709  | 
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
 | 
1710  | 
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
 | 
1711  | 
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
 | 
1712  | 
and contf: "continuous_on T f"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1713  | 
and "f ` T \<subseteq> U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1714  | 
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
 | 
1715  | 
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
 | 
1716  | 
"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
 | 
1717  | 
"\<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
 | 
1718  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1719  | 
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
 | 
1720  | 
  obtain h where conth: "continuous_on ({0..1} \<times> S) h"
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1721  | 
             and him: "h ` ({0..1} \<times> S) \<subseteq> U"
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1722  | 
and [simp]: "\<And>x. h(0, x) = f x" "\<And>x. h(1::real, x) = g x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1723  | 
using assms by (auto simp: homotopic_with_def)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1724  | 
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
 | 
1725  | 
  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
 | 
1726  | 
  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
 | 
1727  | 
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
 | 
1728  | 
  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
 | 
1729  | 
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
 | 
1730  | 
  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
 | 
1731  | 
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
 | 
1732  | 
  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
 | 
1733  | 
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
 | 
1734  | 
  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
 | 
1735  | 
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
 | 
1736  | 
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
 | 
1737  | 
  moreover have "continuous_on ({0} \<times> T) (f \<circ> snd)"
 | 
| 72490 | 1738  | 
proof (rule continuous_intros)+  | 
1739  | 
    show "continuous_on (snd ` ({0} \<times> T)) f"
 | 
|
1740  | 
by (simp add: contf)  | 
|
1741  | 
qed  | 
|
1742  | 
  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)"
 | 
|
1743  | 
    by (auto intro!: continuous_on_cases_local conth simp: B_def Un_commute [of "{0} \<times> T"])
 | 
|
1744  | 
then have conth': "continuous_on B h'"  | 
|
1745  | 
    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
 | 
1746  | 
have "image h' B \<subseteq> U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1747  | 
using \<open>f ` T \<subseteq> U\<close> him by (auto simp: h'_def B_def)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1748  | 
  obtain V k where "B \<subseteq> V" and opeTV: "openin (top_of_set ({0..1} \<times> T)) V"
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1749  | 
and contk: "continuous_on V k" and kim: "k ` V \<subseteq> U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1750  | 
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
 | 
1751  | 
using anr  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1752  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1753  | 
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
 | 
1754  | 
    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
 | 
1755  | 
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
 | 
1756  | 
have "ANR B"  | 
| 72490 | 1757  | 
unfolding B_def  | 
1758  | 
proof (rule ANR_closed_Un_local)  | 
|
1759  | 
      show "closedin (top_of_set ({0} \<times> T \<union> {0..1} \<times> S)) ({0::real} \<times> T)"
 | 
|
1760  | 
by (metis cloBT B_def)  | 
|
1761  | 
      show "closedin (top_of_set ({0} \<times> T \<union> {0..1} \<times> S)) ({0..1::real} \<times> S)"
 | 
|
1762  | 
by (metis Un_commute cloBS B_def)  | 
|
1763  | 
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
 | 
1764  | 
note Vk = that  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1765  | 
    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
 | 
1766  | 
"retraction V B r" for V r  | 
| 72490 | 1767  | 
proof -  | 
1768  | 
have "continuous_on V (h' \<circ> r)"  | 
|
1769  | 
using conth' continuous_on_compose retractionE that(2) by blast  | 
|
1770  | 
moreover have "(h' \<circ> r) ` V \<subseteq> U"  | 
|
1771  | 
by (metis \<open>h' ` B \<subseteq> U\<close> image_comp retractionE that(2))  | 
|
1772  | 
ultimately show ?thesis  | 
|
1773  | 
using Vk [of V "h' \<circ> r"] by (metis comp_apply retraction that)  | 
|
1774  | 
qed  | 
|
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1775  | 
show thesis  | 
| 72490 | 1776  | 
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
 | 
1777  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1778  | 
assume "ANR U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1779  | 
with ANR_imp_absolute_neighbourhood_extensor \<open>h' ` B \<subseteq> U\<close> clo0TB conth' that  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1780  | 
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
 | 
1781  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1782  | 
  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
 | 
1783  | 
have "closedin (top_of_set T) S'"  | 
| 72490 | 1784  | 
unfolding S'_def using closedin_self opeTV  | 
1785  | 
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
 | 
1786  | 
  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
 | 
1787  | 
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
 | 
1788  | 
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
 | 
1789  | 
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
 | 
1790  | 
  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
 | 
1791  | 
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
 | 
1792  | 
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
 | 
1793  | 
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
 | 
1794  | 
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
 | 
1795  | 
and a0: "\<And>x. x \<in> S' \<Longrightarrow> a x = 0"  | 
| 72490 | 1796  | 
    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
 | 
1797  | 
  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
 | 
1798  | 
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
 | 
1799  | 
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
 | 
1800  | 
proof (rule ccontr)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1801  | 
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
 | 
1802  | 
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
 | 
1803  | 
apply simp  | 
| 72490 | 1804  | 
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
 | 
1805  | 
show False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1806  | 
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
 | 
1807  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1808  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1809  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1810  | 
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
 | 
1811  | 
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
 | 
1812  | 
      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
 | 
1813  | 
apply (intro continuous_on_compose continuous_intros)  | 
| 72490 | 1814  | 
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
 | 
1815  | 
done  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1816  | 
      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
 | 
1817  | 
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
 | 
1818  | 
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
 | 
1819  | 
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
 | 
1820  | 
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
 | 
1821  | 
by auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1822  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1823  | 
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
 | 
1824  | 
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
 | 
1825  | 
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
 | 
1826  | 
proof clarify  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1827  | 
fix t  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1828  | 
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
 | 
1829  | 
show "k (a t, t) \<in> U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1830  | 
by (metis \<open>t \<in> T\<close> image_subset_iff inV kim not_one_le_zero linear mult_cancel_right1)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1831  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1832  | 
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
 | 
1833  | 
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
 | 
1834  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1835  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1836  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1837  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1838  | 
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
 | 
1839  | 
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
 | 
1840  | 
assumes "closed S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1841  | 
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
 | 
1842  | 
and "ANR T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1843  | 
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
 | 
1844  | 
      and "S \<noteq> {}"
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1845  | 
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
 | 
1846  | 
(\<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
 | 
1847  | 
(is "?lhs = ?rhs")  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1848  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1849  | 
assume ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1850  | 
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
 | 
1851  | 
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
 | 
1852  | 
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
 | 
1853  | 
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
 | 
1854  | 
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
 | 
1855  | 
"\<And>x. x \<in> S \<Longrightarrow> g x = f x"  | 
| 72490 | 1856  | 
proof (rule Borsuk_homotopy_extension_homotopic)  | 
1857  | 
show "range (\<lambda>x. c) \<subseteq> T"  | 
|
1858  | 
      using \<open>S \<noteq> {}\<close> c homotopic_with_imp_subset1 by fastforce
 | 
|
1859  | 
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
 | 
1860  | 
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
 | 
1861  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1862  | 
assume ?rhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1863  | 
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
 | 
1864  | 
by blast  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1865  | 
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
 | 
1866  | 
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
 | 
1867  | 
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
 | 
1868  | 
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
 | 
1869  | 
then show ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1870  | 
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
 | 
1871  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1872  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1873  | 
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
 | 
1874  | 
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
 | 
1875  | 
assumes "closed S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1876  | 
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
 | 
1877  | 
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
 | 
1878  | 
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
 | 
1879  | 
      and "S \<noteq> {}"
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1880  | 
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
 | 
1881  | 
(\<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
 | 
1882  | 
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
 | 
1883  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1884  | 
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
 | 
1885  | 
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
 | 
1886  | 
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
 | 
1887  | 
      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
 | 
1888  | 
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
 | 
1889  | 
(\<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
 | 
1890  | 
(is "?lhs = ?rhs")  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1891  | 
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
 | 
1892  | 
case True with fim show ?thesis  | 
| 72490 | 1893  | 
    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
 | 
1894  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1895  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1896  | 
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
 | 
1897  | 
show ?thesis  | 
| 72490 | 1898  | 
using fim nullhomotopic_into_rel_frontier_extension [OF \<open>closed S\<close> contf convex_cball bounded_cball]  | 
1899  | 
    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
 | 
1900  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1901  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1902  | 
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
 | 
1903  | 
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
 | 
1904  | 
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
 | 
1905  | 
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
 | 
1906  | 
\<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
 | 
1907  | 
(\<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
 | 
1908  | 
(is "?lhs = ?rhs")  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1909  | 
proof (cases "S = {}")
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1910  | 
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
 | 
1911  | 
by simp  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1912  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1913  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1914  | 
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
 | 
1915  | 
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
 | 
1916  | 
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
 | 
1917  | 
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
 | 
1918  | 
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
 | 
1919  | 
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
 | 
1920  | 
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
 | 
1921  | 
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
 | 
1922  | 
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
 | 
1923  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1924  | 
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
 | 
1925  | 
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
 | 
1926  | 
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
 | 
1927  | 
(\<forall>x\<in>S. g x = (x - a) /\<^sub>R norm (x - a))"  | 
| 72490 | 1928  | 
if "bounded (connected_component_set (- S) a)"  | 
1929  | 
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
 | 
1930  | 
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
 | 
1931  | 
"\<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
 | 
1932  | 
using notr  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1933  | 
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
 | 
1934  | 
[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
 | 
1935  | 
with \<open>a \<notin> S\<close> show "\<not> ?lhs"  | 
| 72490 | 1936  | 
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
 | 
1937  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1938  | 
assume "\<not> ?lhs"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1939  | 
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
 | 
1940  | 
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
 | 
1941  | 
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
 | 
1942  | 
by simp  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1943  | 
have "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) (\<lambda>x. (x - a) /\<^sub>R norm (x - a))  | 
| 72490 | 1944  | 
(\<lambda>x. (x - b) /\<^sub>R norm (x - b))"  | 
1945  | 
proof -  | 
|
1946  | 
have "path_component (- S) a b"  | 
|
1947  | 
by (metis (full_types) \<open>closed S\<close> b mem_Collect_eq open_Compl open_path_connected_component)  | 
|
1948  | 
then show ?thesis  | 
|
1949  | 
using Borsuk_maps_homotopic_in_path_component by blast  | 
|
1950  | 
qed  | 
|
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1951  | 
moreover  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1952  | 
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
 | 
1953  | 
(\<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
 | 
1954  | 
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
 | 
1955  | 
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
 | 
1956  | 
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
 | 
1957  | 
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
 | 
1958  | 
by (rule continuous_on_Borsuk_map [OF bnot])  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1959  | 
show "(\<lambda>x. (x - b) /\<^sub>R norm (x - b)) ` ball 0 r \<subseteq> sphere 0 1"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1960  | 
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
 | 
1961  | 
qed blast  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1962  | 
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
 | 
1963  | 
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
 | 
1964  | 
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
 | 
1965  | 
by blast  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1966  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1967  | 
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
 | 
1968  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1969  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1970  | 
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
 | 
1971  | 
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
 | 
1972  | 
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
 | 
1973  | 
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
 | 
1974  | 
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
 | 
1975  | 
(\<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
 | 
1976  | 
(\<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
 | 
1977  | 
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
 | 
1978  | 
proof (rule ccontr)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1979  | 
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
 | 
1980  | 
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
 | 
1981  | 
have "\<nexists>g. continuous_on (S \<union> connected_component_set (- S) a) g \<and>  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1982  | 
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
 | 
1983  | 
(\<forall>x\<in>S. g x = (x - a) /\<^sub>R norm (x - a))"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1984  | 
by (simp add: \<open>a \<notin> S\<close> componentsI non_extensible_Borsuk_map [OF \<open>compact S\<close> _ boc])  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1985  | 
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
 | 
1986  | 
"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
 | 
1987  | 
"\<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
 | 
1988  | 
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
 | 
1989  | 
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
 | 
1990  | 
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
 | 
1991  | 
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
 | 
1992  | 
by (simp add: \<open>b \<notin> S\<close> notcc continuous_on_Borsuk_map)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1993  | 
show "(\<lambda>x. (x - b) /\<^sub>R norm (x - b)) ` ?T \<subseteq> sphere 0 1"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
1994  | 
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
 | 
1995  | 
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
 | 
1996  | 
(\<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
 | 
1997  | 
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
 | 
1998  | 
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
 | 
1999  | 
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
 | 
2000  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2001  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2002  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2003  | 
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
 | 
2004  | 
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
 | 
2005  | 
  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
 | 
2006  | 
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
 | 
2007  | 
(\<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
 | 
2008  | 
(\<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
 | 
2009  | 
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
 | 
2010  | 
(is "?lhs = ?rhs")  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2011  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2012  | 
assume L: ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2013  | 
show ?rhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2014  | 
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
 | 
2015  | 
case True  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2016  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2017  | 
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
 | 
2018  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2019  | 
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
 | 
2020  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2021  | 
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
 | 
2022  | 
case True  | 
| 
 
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  | 
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
 | 
2025  | 
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
 | 
2026  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2027  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2028  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2029  | 
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
 | 
2030  | 
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
 | 
2031  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2032  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2033  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2034  | 
assume R: ?rhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2035  | 
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
 | 
2036  | 
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
 | 
2037  | 
then show ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2038  | 
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
 | 
2039  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2040  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2041  | 
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
 | 
2042  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2043  | 
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
 | 
2044  | 
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
 | 
2045  | 
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
 | 
2046  | 
      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
 | 
2047  | 
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
 | 
2048  | 
proof (cases "U = {}")
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2049  | 
case True  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2050  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2051  | 
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
 | 
2052  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2053  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2054  | 
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
 | 
2055  | 
by auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2056  | 
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
 | 
2057  | 
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
 | 
2058  | 
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
 | 
2059  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2060  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2061  | 
have "continuous_on (T \<union> (S - T)) ?g"  | 
| 72490 | 2062  | 
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
 | 
2063  | 
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
 | 
2064  | 
by metis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2065  | 
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
 | 
2066  | 
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
 | 
2067  | 
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
 | 
2068  | 
by auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2069  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2070  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2071  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2072  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2073  | 
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
 | 
2074  | 
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
 | 
2075  | 
assumes S: "locally connected S \<or> compact S" and "ANR U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2076  | 
and C: "C \<in> components S" and contf: "continuous_on C f" and fim: "f ` C \<subseteq> U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2077  | 
obtains g where "continuous_on S g" "g ` S \<subseteq> U" "\<And>x. x \<in> C \<Longrightarrow> g x = f x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2078  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2079  | 
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
 | 
2080  | 
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
 | 
2081  | 
and "C \<subseteq> T" and contg: "continuous_on T g" and gim: "g ` T \<subseteq> U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2082  | 
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
 | 
2083  | 
using S  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2084  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2085  | 
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
 | 
2086  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2087  | 
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
 | 
2088  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2089  | 
assume "compact S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2090  | 
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
 | 
2091  | 
and contg: "continuous_on W g"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2092  | 
and gim: "g ` W \<subseteq> U" and gf: "\<And>x. x \<in> C \<Longrightarrow> g x = f x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2093  | 
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
 | 
2094  | 
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
 | 
2095  | 
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
 | 
2096  | 
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
 | 
2097  | 
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
 | 
2098  | 
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
 | 
2099  | 
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
 | 
2100  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2101  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2102  | 
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
 | 
2103  | 
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
 | 
2104  | 
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
 | 
2105  | 
by (metis Int_subset_iff V \<open>K \<subseteq> V\<close> contg continuous_on_subset opeK openin_subtopology subset_eq)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2106  | 
show "g ` K \<subseteq> U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2107  | 
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
 | 
2108  | 
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
 | 
2109  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2110  | 
obtain h where "continuous_on S h" "h ` S \<subseteq> U" "\<And>x. x \<in> T \<Longrightarrow> h x = g x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2111  | 
using extension_from_clopen  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2112  | 
by (metis C bot.extremum_uniqueI clo contg gim fim image_is_empty in_components_nonempty ope)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2113  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2114  | 
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
 | 
2115  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2116  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2117  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2118  | 
lemma tube_lemma:  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2119  | 
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
 | 
2120  | 
  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
 | 
2121  | 
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
 | 
2122  | 
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
 | 
2123  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2124  | 
  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
 | 
2125  | 
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
 | 
2126  | 
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
 | 
2127  | 
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
 | 
2128  | 
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
 | 
2129  | 
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
 | 
2130  | 
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
 | 
2131  | 
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
 | 
2132  | 
by auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2133  | 
ultimately show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2134  | 
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
 | 
2135  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2136  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2137  | 
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
 | 
2138  | 
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
 | 
2139  | 
  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
 | 
2140  | 
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
 | 
2141  | 
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
 | 
2142  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2143  | 
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
 | 
2144  | 
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
 | 
2145  | 
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
 | 
2146  | 
by metis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2147  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2148  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2149  | 
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
 | 
2150  | 
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
 | 
2151  | 
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
 | 
2152  | 
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
 | 
2153  | 
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
 | 
2154  | 
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
 | 
2155  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2156  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2157  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2158  | 
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
 | 
2159  | 
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
 | 
2160  | 
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
 | 
2161  | 
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
 | 
2162  | 
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
 | 
2163  | 
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
 | 
2164  | 
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
 | 
2165  | 
"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
 | 
2166  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2167  | 
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
 | 
2168  | 
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
 | 
2169  | 
  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
 | 
2170  | 
             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
 | 
2171  | 
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
 | 
2172  | 
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
 | 
2173  | 
  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
 | 
2174  | 
                             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
 | 
2175  | 
else h z"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2176  | 
  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
 | 
2177  | 
  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
 | 
2178  | 
unfolding h'_def  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2179  | 
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
 | 
2180  | 
    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
 | 
2181  | 
         "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
 | 
2182  | 
      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
 | 
2183  | 
    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
 | 
2184  | 
         "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
 | 
2185  | 
      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
 | 
2186  | 
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
 | 
2187  | 
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
 | 
2188  | 
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
 | 
2189  | 
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
 | 
2190  | 
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
 | 
2191  | 
  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
 | 
2192  | 
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
 | 
2193  | 
  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
 | 
2194  | 
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
 | 
2195  | 
  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
 | 
2196  | 
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
 | 
2197  | 
ultimately  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2198  | 
  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
 | 
2199  | 
               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
 | 
2200  | 
and contk: "continuous_on W k"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2201  | 
and kim: "k ` W \<subseteq> U"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2202  | 
               and kh': "\<And>x. x \<in> ({0,1} \<times> S) \<union> ({0..1} \<times> T) \<Longrightarrow> k x = h' x"
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2203  | 
    by (metis ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR U\<close>, of "({0,1} \<times> S) \<union> ({0..1} \<times> T)" h' "{0..1} \<times> S"])
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2204  | 
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
 | 
2205  | 
              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
 | 
2206  | 
    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
 | 
2207  | 
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
 | 
2208  | 
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
 | 
2209  | 
    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
 | 
2210  | 
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
 | 
2211  | 
    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
 | 
2212  | 
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
 | 
2213  | 
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
 | 
2214  | 
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
 | 
2215  | 
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
 | 
2216  | 
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
 | 
2217  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2218  | 
ultimately show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2219  | 
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
 | 
2220  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2221  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2222  | 
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
 | 
2223  | 
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
 | 
2224  | 
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
 | 
2225  | 
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
 | 
2226  | 
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
 | 
2227  | 
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
 | 
2228  | 
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
 | 
2229  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2230  | 
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
 | 
2231  | 
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
 | 
2232  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2233  | 
  proof (cases "\<V> = {}")
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2234  | 
case True  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2235  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2236  | 
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
 | 
2237  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2238  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2239  | 
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
 | 
2240  | 
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
 | 
2241  | 
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
 | 
2242  | 
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
 | 
2243  | 
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
 | 
2244  | 
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
 | 
2245  | 
    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
 | 
2246  | 
                  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
 | 
2247  | 
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
 | 
2248  | 
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
 | 
2249  | 
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
 | 
2250  | 
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
 | 
2251  | 
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
 | 
2252  | 
    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
 | 
2253  | 
              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
 | 
2254  | 
                                   {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
 | 
2255  | 
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
 | 
2256  | 
      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
 | 
2257  | 
      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
 | 
2258  | 
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
 | 
2259  | 
      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
 | 
2260  | 
                   ({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
 | 
2261  | 
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
 | 
2262  | 
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
 | 
2263  | 
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
 | 
2264  | 
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
 | 
2265  | 
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
 | 
2266  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2267  | 
      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
 | 
2268  | 
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
 | 
2269  | 
      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
 | 
2270  | 
\<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
 | 
2271  | 
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
 | 
2272  | 
qed auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2273  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2274  | 
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
 | 
2275  | 
      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
 | 
2276  | 
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
 | 
2277  | 
      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
 | 
2278  | 
proof clarsimp  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2279  | 
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
 | 
2280  | 
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
 | 
2281  | 
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
 | 
2282  | 
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
 | 
2283  | 
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
 | 
2284  | 
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
 | 
2285  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2286  | 
fix X y  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2287  | 
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
 | 
2288  | 
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
 | 
2289  | 
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
 | 
2290  | 
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
 | 
2291  | 
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
 | 
2292  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2293  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2294  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2295  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2296  | 
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
 | 
2297  | 
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
 | 
2298  | 
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
 | 
2299  | 
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
 | 
2300  | 
(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
 | 
2301  | 
(\<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
 | 
2302  | 
(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
 | 
2303  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2304  | 
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
 | 
2305  | 
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
 | 
2306  | 
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
 | 
2307  | 
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
 | 
2308  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2309  | 
assume ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2310  | 
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
 | 
2311  | 
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
 | 
2312  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2313  | 
assume R: ?rhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2314  | 
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
 | 
2315  | 
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
 | 
2316  | 
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
 | 
2317  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2318  | 
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
 | 
2319  | 
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
 | 
2320  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2321  | 
using S  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2322  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2323  | 
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
 | 
2324  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2325  | 
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
 | 
2326  | 
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
 | 
2327  | 
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
 | 
2328  | 
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
 | 
2329  | 
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
 | 
2330  | 
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
 | 
2331  | 
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
 | 
2332  | 
qed auto  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2333  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2334  | 
assume "compact S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2335  | 
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
 | 
2336  | 
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
 | 
2337  | 
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
 | 
2338  | 
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
 | 
2339  | 
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
 | 
2340  | 
\<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
 | 
2341  | 
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
 | 
2342  | 
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
 | 
2343  | 
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
 | 
2344  | 
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
 | 
2345  | 
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
 | 
2346  | 
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
 | 
2347  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2348  | 
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
 | 
2349  | 
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
 | 
2350  | 
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
 | 
2351  | 
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
 | 
2352  | 
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
 | 
2353  | 
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
 | 
2354  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2355  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2356  | 
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
 | 
2357  | 
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
 | 
2358  | 
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
 | 
2359  | 
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
 | 
2360  | 
by metis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2361  | 
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
 | 
2362  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2363  | 
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
 | 
2364  | 
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
 | 
2365  | 
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
 | 
2366  | 
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
 | 
2367  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2368  | 
show ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2369  | 
apply (subst Seq)  | 
| 72490 | 2370  | 
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
 | 
2371  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2372  | 
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
 | 
2373  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2374  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2375  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2376  | 
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
 | 
2377  | 
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
 | 
2378  | 
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
 | 
2379  | 
shows  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2380  | 
"(\<forall>f g. continuous_on S f \<longrightarrow> f ` S \<subseteq> T \<longrightarrow> continuous_on S g \<longrightarrow> g ` S \<subseteq> T \<longrightarrow>  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2381  | 
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
 | 
2382  | 
\<longleftrightarrow>  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2383  | 
(\<forall>C\<in>components S.  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2384  | 
\<forall>f g. continuous_on C f \<longrightarrow> f ` C \<subseteq> T \<longrightarrow> continuous_on C g \<longrightarrow> g ` C \<subseteq> T \<longrightarrow>  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2385  | 
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
 | 
2386  | 
(is "?lhs = ?rhs")  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2387  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2388  | 
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
 | 
2389  | 
show ?rhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2390  | 
proof clarify  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2391  | 
fix C f g  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2392  | 
assume contf: "continuous_on C f" and fim: "f ` C \<subseteq> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2393  | 
and contg: "continuous_on C g" and gim: "g ` C \<subseteq> T" and C: "C \<in> components S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2394  | 
obtain f' where contf': "continuous_on S f'" and f'im: "f' ` S \<subseteq> T" and f'f: "\<And>x. x \<in> C \<Longrightarrow> f' x = f x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2395  | 
using extension_from_component [OF S \<open>ANR T\<close> C contf fim] by metis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2396  | 
obtain g' where contg': "continuous_on S g'" and g'im: "g' ` S \<subseteq> T" and g'g: "\<And>x. x \<in> C \<Longrightarrow> g' x = g x"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2397  | 
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
 | 
2398  | 
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
 | 
2399  | 
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
 | 
2400  | 
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
 | 
2401  | 
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
 | 
2402  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2403  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2404  | 
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
 | 
2405  | 
show ?lhs  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2406  | 
proof clarify  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2407  | 
fix f g  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2408  | 
assume contf: "continuous_on S f" and fim: "f ` S \<subseteq> T"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2409  | 
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
 | 
2410  | 
moreover have "homotopic_with_canon (\<lambda>x. True) C T f g" if "C \<in> components S" for C  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2411  | 
using R [OF that]  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2412  | 
by (meson contf contg continuous_on_subset fim gim image_mono in_components_subset order.trans that)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2413  | 
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
 | 
2414  | 
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
 | 
2415  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2416  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2417  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2418  | 
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
 | 
2419  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2420  | 
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
 | 
2421  | 
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
 | 
2422  | 
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
 | 
2423  | 
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
 | 
2424  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2425  | 
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
 | 
2426  | 
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
 | 
2427  | 
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
 | 
2428  | 
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
 | 
2429  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2430  | 
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
 | 
2431  | 
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
 | 
2432  | 
have "open(- S)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2433  | 
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
 | 
2434  | 
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
 | 
2435  | 
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
 | 
2436  | 
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
 | 
2437  | 
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
 | 
2438  | 
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
 | 
2439  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2440  | 
proof  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2441  | 
assume "bounded C"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2442  | 
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
 | 
2443  | 
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
 | 
2444  | 
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
 | 
2445  | 
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
 | 
2446  | 
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
 | 
2447  | 
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
 | 
2448  | 
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
 | 
2449  | 
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
 | 
2450  | 
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
 | 
2451  | 
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
 | 
2452  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2453  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2454  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2455  | 
lemma 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
 | 
2456  | 
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
 | 
2457  | 
  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
 | 
2458  | 
shows "connected(- S)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2459  | 
proof -  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2460  | 
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
 | 
2461  | 
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
 | 
2462  | 
show ?thesis  | 
| 72490 | 2463  | 
proof (clarsimp simp: connected_iff_connected_component_eq)  | 
2464  | 
have "\<not> bounded (connected_component_set (- S) x)" if "x \<notin> S" for x  | 
|
2465  | 
by (meson Compl_iff assms componentsI that unbounded_components_complement_absolute_retract)  | 
|
2466  | 
then show "connected_component_set (- S) x = connected_component_set (- S) y"  | 
|
2467  | 
if "x \<notin> S" "y \<notin> S" for x y  | 
|
2468  | 
using cobounded_unique_unbounded_component [OF _ 2]  | 
|
2469  | 
by (metis \<open>compact S\<close> compact_imp_bounded double_compl that)  | 
|
2470  | 
qed  | 
|
| 
70642
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2471  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2472  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2473  | 
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
 | 
2474  | 
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
 | 
2475  | 
  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
 | 
2476  | 
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
 | 
2477  | 
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
 | 
2478  | 
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
 | 
2479  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2480  | 
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
 | 
2481  | 
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
 | 
2482  | 
  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
 | 
2483  | 
shows "connected(- S)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2484  | 
proof (cases "S = {}")
 | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2485  | 
case True  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2486  | 
then show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2487  | 
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
 | 
2488  | 
next  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2489  | 
case False  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2490  | 
show ?thesis  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2491  | 
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
 | 
2492  | 
show "compact S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2493  | 
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
 | 
2494  | 
show "AR S"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2495  | 
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
 | 
2496  | 
qed (rule 2)  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2497  | 
qed  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2498  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2499  | 
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
 | 
2500  | 
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
 | 
2501  | 
  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
 | 
2502  | 
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
 | 
2503  | 
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
 | 
2504  | 
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
 | 
2505  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2506  | 
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
 | 
2507  | 
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
 | 
2508  | 
  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
 | 
2509  | 
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
 | 
2510  | 
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
 | 
2511  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2512  | 
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
 | 
2513  | 
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
 | 
2514  | 
  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
 | 
2515  | 
shows "connected(-S)"  | 
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2516  | 
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
 | 
2517  | 
|
| 
 
de9c4ed2d5df
Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
 
paulson <lp15@cam.ac.uk> 
parents:  
diff
changeset
 | 
2518  | 
end  |