src/HOL/Analysis/Retracts.thy
author nipkow
Sun, 17 May 2020 17:18:32 +0200
changeset 71844 57ace76cbffa
parent 71193 777d673fa672
child 72490 df988eac234e
permissions -rw-r--r--
another AVL tree version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
nipkow
parents: 70643
diff changeset
     4
imports
nipkow
parents: 70643
diff changeset
     5
  Brouwer_Fixpoint
nipkow
parents: 70643
diff changeset
     6
  Continuous_Extension
70642
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     7
begin
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     8
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
text \<open>Absolute retracts (AR), absolute neighbourhood retracts (ANR) and also Euclidean neighbourhood
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    10
retracts (ENR). We define AR and ANR by specializing the standard definitions for a set to embedding
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    11
in spaces of higher dimension.
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    12
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    13
John Harrison writes: "This turns out to be sufficient (since any set in \<open>\<real>\<^sup>n\<close> can be
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    14
embedded as a closed subset of a convex subset of \<open>\<real>\<^sup>n\<^sup>+\<^sup>1\<close>) to derive the usual
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    15
definitions, but we need to split them into two implications because of the lack of type
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    16
quantifiers. Then ENR turns out to be equivalent to ANR plus local compactness."\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    17
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    18
definition\<^marker>\<open>tag important\<close> AR :: "'a::topological_space set \<Rightarrow> bool" where
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    19
"AR S \<equiv> \<forall>U. \<forall>S'::('a * real) set.
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    20
  S homeomorphic S' \<and> closedin (top_of_set U) S' \<longrightarrow> S' retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    21
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    22
definition\<^marker>\<open>tag important\<close> ANR :: "'a::topological_space set \<Rightarrow> bool" where
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    23
"ANR S \<equiv> \<forall>U. \<forall>S'::('a * real) set.
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    24
  S homeomorphic S' \<and> closedin (top_of_set U) S'
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    25
  \<longrightarrow> (\<exists>T. openin (top_of_set U) T \<and> S' retract_of T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    26
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    27
definition\<^marker>\<open>tag important\<close> ENR :: "'a::topological_space set \<Rightarrow> bool" where
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    28
"ENR S \<equiv> \<exists>U. open U \<and> S retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    29
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    30
text \<open>First, show that we do indeed get the "usual" properties of ARs and ANRs.\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    31
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    32
lemma AR_imp_absolute_extensor:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    33
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    34
  assumes "AR S" and contf: "continuous_on T f" and "f ` T \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    35
      and cloUT: "closedin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    36
  obtains g where "continuous_on U g" "g ` U \<subseteq> S" "\<And>x. x \<in> T \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    37
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    38
  have "aff_dim S < int (DIM('b \<times> real))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    39
    using aff_dim_le_DIM [of S] by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    40
  then obtain C and S' :: "('b * real) set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    41
          where C: "convex C" "C \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    42
            and cloCS: "closedin (top_of_set C) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    43
            and hom: "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    44
    by (metis that homeomorphic_closedin_convex)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    45
  then have "S' retract_of C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    46
    using \<open>AR S\<close> by (simp add: AR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    47
  then obtain r where "S' \<subseteq> C" and contr: "continuous_on C r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    48
                  and "r ` C \<subseteq> S'" and rid: "\<And>x. x\<in>S' \<Longrightarrow> r x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    49
    by (auto simp: retraction_def retract_of_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    50
  obtain g h where "homeomorphism S S' g h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    51
    using hom by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    52
  then have "continuous_on (f ` T) g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    53
    by (meson \<open>f ` T \<subseteq> S\<close> continuous_on_subset homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    54
  then have contgf: "continuous_on T (g \<circ> f)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    55
    by (metis continuous_on_compose contf)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    56
  have gfTC: "(g \<circ> f) ` T \<subseteq> C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    57
  proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    58
    have "g ` S = S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    59
      by (metis (no_types) \<open>homeomorphism S S' g h\<close> homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    60
    with \<open>S' \<subseteq> C\<close> \<open>f ` T \<subseteq> S\<close> show ?thesis by force
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    61
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    62
  obtain f' where f': "continuous_on U f'"  "f' ` U \<subseteq> C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    63
                      "\<And>x. x \<in> T \<Longrightarrow> f' x = (g \<circ> f) x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    64
    by (metis Dugundji [OF C cloUT contgf gfTC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    65
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    66
  proof (rule_tac g = "h \<circ> r \<circ> f'" in that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    67
    show "continuous_on U (h \<circ> r \<circ> f')"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    68
      apply (intro continuous_on_compose f')
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    69
       using continuous_on_subset contr f' apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    70
      by (meson \<open>homeomorphism S S' g h\<close> \<open>r ` C \<subseteq> S'\<close> continuous_on_subset \<open>f' ` U \<subseteq> C\<close> homeomorphism_def image_mono)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    71
    show "(h \<circ> r \<circ> f') ` U \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    72
      using \<open>homeomorphism S S' g h\<close> \<open>r ` C \<subseteq> S'\<close> \<open>f' ` U \<subseteq> C\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    73
      by (fastforce simp: homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    74
    show "\<And>x. x \<in> T \<Longrightarrow> (h \<circ> r \<circ> f') x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    75
      using \<open>homeomorphism S S' g h\<close> \<open>f ` T \<subseteq> S\<close> f'
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    76
      by (auto simp: rid homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    77
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    78
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    79
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    80
lemma AR_imp_absolute_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    81
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    82
  assumes "AR S" "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    83
      and clo: "closedin (top_of_set U) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    84
    shows "S' retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    85
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    86
  obtain g h where hom: "homeomorphism S S' g h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    87
    using assms by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    88
  have h: "continuous_on S' h" " h ` S' \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    89
    using hom homeomorphism_def apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    90
    apply (metis hom equalityE homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    91
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    92
  obtain h' where h': "continuous_on U h'" "h' ` U \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    93
              and h'h: "\<And>x. x \<in> S' \<Longrightarrow> h' x = h x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    94
    by (blast intro: AR_imp_absolute_extensor [OF \<open>AR S\<close> h clo])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    95
  have [simp]: "S' \<subseteq> U" using clo closedin_limpt by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    96
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    97
  proof (simp add: retraction_def retract_of_def, intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    98
    show "continuous_on U (g \<circ> h')"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    99
      apply (intro continuous_on_compose h')
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   100
      apply (meson hom continuous_on_subset h' homeomorphism_cont1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   101
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   102
    show "(g \<circ> h') ` U \<subseteq> S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   103
      using h'  by clarsimp (metis hom subsetD homeomorphism_def imageI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   104
    show "\<forall>x\<in>S'. (g \<circ> h') x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   105
      by clarsimp (metis h'h hom homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   106
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   107
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   108
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   109
lemma AR_imp_absolute_retract_UNIV:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   110
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
  assumes "AR S" and hom: "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
      and clo: "closed S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
    shows "S' retract_of UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   114
apply (rule AR_imp_absolute_retract [OF \<open>AR S\<close> hom])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   115
using clo closed_closedin by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   117
lemma absolute_extensor_imp_AR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   118
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   119
  assumes "\<And>f :: 'a * real \<Rightarrow> 'a.
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   120
           \<And>U T. \<lbrakk>continuous_on T f;  f ` T \<subseteq> S;
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   121
                  closedin (top_of_set U) T\<rbrakk>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   122
                 \<Longrightarrow> \<exists>g. continuous_on U g \<and> g ` U \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   123
  shows "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   124
proof (clarsimp simp: AR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   125
  fix U and T :: "('a * real) set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
  assume "S homeomorphic T" and clo: "closedin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   127
  then obtain g h where hom: "homeomorphism S T g h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   128
    by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   129
  have h: "continuous_on T h" " h ` T \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   130
    using hom homeomorphism_def apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   131
    apply (metis hom equalityE homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   133
  obtain h' where h': "continuous_on U h'" "h' ` U \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   134
              and h'h: "\<forall>x\<in>T. h' x = h x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
    using assms [OF h clo] by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   136
  have [simp]: "T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   137
    using clo closedin_imp_subset by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   138
  show "T retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
  proof (simp add: retraction_def retract_of_def, intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   140
    show "continuous_on U (g \<circ> h')"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   141
      apply (intro continuous_on_compose h')
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   142
      apply (meson hom continuous_on_subset h' homeomorphism_cont1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   144
    show "(g \<circ> h') ` U \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   145
      using h'  by clarsimp (metis hom subsetD homeomorphism_def imageI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   146
    show "\<forall>x\<in>T. (g \<circ> h') x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
      by clarsimp (metis h'h hom homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   149
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
lemma AR_eq_absolute_extensor:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   152
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
  shows "AR S \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   154
       (\<forall>f :: 'a * real \<Rightarrow> 'a.
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
        \<forall>U T. continuous_on T f \<longrightarrow> f ` T \<subseteq> S \<longrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   156
               closedin (top_of_set U) T \<longrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
                (\<exists>g. continuous_on U g \<and> g ` U \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
apply (rule iffI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
 apply (metis AR_imp_absolute_extensor)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   160
apply (simp add: absolute_extensor_imp_AR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   161
done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   162
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   163
lemma AR_imp_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   164
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   165
  assumes "AR S \<and> closedin (top_of_set U) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   166
    shows "S retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   167
using AR_imp_absolute_retract assms homeomorphic_refl by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   168
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   169
lemma AR_homeomorphic_AR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   170
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   171
  assumes "AR T" "S homeomorphic T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   172
    shows "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   173
unfolding AR_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   174
by (metis assms AR_imp_absolute_retract homeomorphic_trans [of _ S] homeomorphic_sym)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   175
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   176
lemma homeomorphic_AR_iff_AR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   177
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   178
  shows "S homeomorphic T \<Longrightarrow> AR S \<longleftrightarrow> AR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   179
by (metis AR_homeomorphic_AR homeomorphic_sym)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   180
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   181
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   182
lemma ANR_imp_absolute_neighbourhood_extensor:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   183
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   184
  assumes "ANR S" and contf: "continuous_on T f" and "f ` T \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   185
      and cloUT: "closedin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   186
  obtains V g where "T \<subseteq> V" "openin (top_of_set U) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   187
                    "continuous_on V g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   188
                    "g ` V \<subseteq> S" "\<And>x. x \<in> T \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   189
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   190
  have "aff_dim S < int (DIM('b \<times> real))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   191
    using aff_dim_le_DIM [of S] by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   192
  then obtain C and S' :: "('b * real) set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   193
          where C: "convex C" "C \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   194
            and cloCS: "closedin (top_of_set C) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   195
            and hom: "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   196
    by (metis that homeomorphic_closedin_convex)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   197
  then obtain D where opD: "openin (top_of_set C) D" and "S' retract_of D"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   198
    using \<open>ANR S\<close> by (auto simp: ANR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   199
  then obtain r where "S' \<subseteq> D" and contr: "continuous_on D r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   200
                  and "r ` D \<subseteq> S'" and rid: "\<And>x. x \<in> S' \<Longrightarrow> r x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   201
    by (auto simp: retraction_def retract_of_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   202
  obtain g h where homgh: "homeomorphism S S' g h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   203
    using hom by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   204
  have "continuous_on (f ` T) g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   205
    by (meson \<open>f ` T \<subseteq> S\<close> continuous_on_subset homeomorphism_def homgh)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   206
  then have contgf: "continuous_on T (g \<circ> f)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   207
    by (intro continuous_on_compose contf)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   208
  have gfTC: "(g \<circ> f) ` T \<subseteq> C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   209
  proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   210
    have "g ` S = S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   211
      by (metis (no_types) homeomorphism_def homgh)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   212
    then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   213
      by (metis (no_types) assms(3) cloCS closedin_def image_comp image_mono order.trans topspace_euclidean_subtopology)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   214
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   215
  obtain f' where contf': "continuous_on U f'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   216
              and "f' ` U \<subseteq> C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   217
              and eq: "\<And>x. x \<in> T \<Longrightarrow> f' x = (g \<circ> f) x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   218
    by (metis Dugundji [OF C cloUT contgf gfTC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   219
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   220
  proof (rule_tac V = "U \<inter> f' -` D" and g = "h \<circ> r \<circ> f'" in that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   221
    show "T \<subseteq> U \<inter> f' -` D"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   222
      using cloUT closedin_imp_subset \<open>S' \<subseteq> D\<close> \<open>f ` T \<subseteq> S\<close> eq homeomorphism_image1 homgh
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   223
      by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   224
    show ope: "openin (top_of_set U) (U \<inter> f' -` D)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   225
      using  \<open>f' ` U \<subseteq> C\<close> by (auto simp: opD contf' continuous_openin_preimage)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   226
    have conth: "continuous_on (r ` f' ` (U \<inter> f' -` D)) h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   227
      apply (rule continuous_on_subset [of S'])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   228
      using homeomorphism_def homgh apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   229
      using \<open>r ` D \<subseteq> S'\<close> by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   230
    show "continuous_on (U \<inter> f' -` D) (h \<circ> r \<circ> f')"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   231
      apply (intro continuous_on_compose conth
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   232
                   continuous_on_subset [OF contr] continuous_on_subset [OF contf'], auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   233
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   234
    show "(h \<circ> r \<circ> f') ` (U \<inter> f' -` D) \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   235
      using \<open>homeomorphism S S' g h\<close>  \<open>f' ` U \<subseteq> C\<close>  \<open>r ` D \<subseteq> S'\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   236
      by (auto simp: homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   237
    show "\<And>x. x \<in> T \<Longrightarrow> (h \<circ> r \<circ> f') x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   238
      using \<open>homeomorphism S S' g h\<close> \<open>f ` T \<subseteq> S\<close> eq
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   239
      by (auto simp: rid homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   240
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   241
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   242
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   243
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   244
corollary ANR_imp_absolute_neighbourhood_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   245
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   246
  assumes "ANR S" "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   247
      and clo: "closedin (top_of_set U) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   248
  obtains V where "openin (top_of_set U) V" "S' retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   249
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   250
  obtain g h where hom: "homeomorphism S S' g h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   251
    using assms by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   252
  have h: "continuous_on S' h" " h ` S' \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   253
    using hom homeomorphism_def apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   254
    apply (metis hom equalityE homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   255
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   256
    from ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> h clo]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   257
  obtain V h' where "S' \<subseteq> V" and opUV: "openin (top_of_set U) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   258
                and h': "continuous_on V h'" "h' ` V \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   259
                and h'h:"\<And>x. x \<in> S' \<Longrightarrow> h' x = h x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   260
    by (blast intro: ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> h clo])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   261
  have "S' retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   262
  proof (simp add: retraction_def retract_of_def, intro exI conjI \<open>S' \<subseteq> V\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   263
    show "continuous_on V (g \<circ> h')"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   264
      apply (intro continuous_on_compose h')
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   265
      apply (meson hom continuous_on_subset h' homeomorphism_cont1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   266
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   267
    show "(g \<circ> h') ` V \<subseteq> S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   268
      using h'  by clarsimp (metis hom subsetD homeomorphism_def imageI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   269
    show "\<forall>x\<in>S'. (g \<circ> h') x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   270
      by clarsimp (metis h'h hom homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   271
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   272
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   273
    by (rule that [OF opUV])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   274
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   275
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   276
corollary ANR_imp_absolute_neighbourhood_retract_UNIV:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   277
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   278
  assumes "ANR S" and hom: "S homeomorphic S'" and clo: "closed S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   279
  obtains V where "open V" "S' retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   280
  using ANR_imp_absolute_neighbourhood_retract [OF \<open>ANR S\<close> hom]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   281
by (metis clo closed_closedin open_openin subtopology_UNIV)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   282
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   283
corollary neighbourhood_extension_into_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   284
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   285
  assumes contf: "continuous_on S f" and fim: "f ` S \<subseteq> T" and "ANR T" "closed S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   286
  obtains V g where "S \<subseteq> V" "open V" "continuous_on V g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   287
                    "g ` V \<subseteq> T" "\<And>x. x \<in> S \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   288
  using ANR_imp_absolute_neighbourhood_extensor [OF  \<open>ANR T\<close> contf fim]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   289
  by (metis \<open>closed S\<close> closed_closedin open_openin subtopology_UNIV)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   290
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   291
lemma absolute_neighbourhood_extensor_imp_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   292
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   293
  assumes "\<And>f :: 'a * real \<Rightarrow> 'a.
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   294
           \<And>U T. \<lbrakk>continuous_on T f;  f ` T \<subseteq> S;
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   295
                  closedin (top_of_set U) T\<rbrakk>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   296
                 \<Longrightarrow> \<exists>V g. T \<subseteq> V \<and> openin (top_of_set U) V \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   297
                       continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   298
  shows "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   299
proof (clarsimp simp: ANR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   300
  fix U and T :: "('a * real) set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   301
  assume "S homeomorphic T" and clo: "closedin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   302
  then obtain g h where hom: "homeomorphism S T g h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   303
    by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   304
  have h: "continuous_on T h" " h ` T \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   305
    using hom homeomorphism_def apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   306
    apply (metis hom equalityE homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   307
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   308
  obtain V h' where "T \<subseteq> V" and opV: "openin (top_of_set U) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   309
                and h': "continuous_on V h'" "h' ` V \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   310
              and h'h: "\<forall>x\<in>T. h' x = h x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   311
    using assms [OF h clo] by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   312
  have [simp]: "T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   313
    using clo closedin_imp_subset by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   314
  have "T retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   315
  proof (simp add: retraction_def retract_of_def, intro exI conjI \<open>T \<subseteq> V\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   316
    show "continuous_on V (g \<circ> h')"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   317
      apply (intro continuous_on_compose h')
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   318
      apply (meson hom continuous_on_subset h' homeomorphism_cont1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   319
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   320
    show "(g \<circ> h') ` V \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   321
      using h'  by clarsimp (metis hom subsetD homeomorphism_def imageI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   322
    show "\<forall>x\<in>T. (g \<circ> h') x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   323
      by clarsimp (metis h'h hom homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   324
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   325
  then show "\<exists>V. openin (top_of_set U) V \<and> T retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   326
    using opV by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   327
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   328
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   329
lemma ANR_eq_absolute_neighbourhood_extensor:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   330
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   331
  shows "ANR S \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   332
         (\<forall>f :: 'a * real \<Rightarrow> 'a.
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   333
          \<forall>U T. continuous_on T f \<longrightarrow> f ` T \<subseteq> S \<longrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   334
                closedin (top_of_set U) T \<longrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   335
               (\<exists>V g. T \<subseteq> V \<and> openin (top_of_set U) V \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   336
                       continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x \<in> T. g x = f x)))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   337
apply (rule iffI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   338
 apply (metis ANR_imp_absolute_neighbourhood_extensor)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   339
apply (simp add: absolute_neighbourhood_extensor_imp_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   340
done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   341
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   342
lemma ANR_imp_neighbourhood_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   343
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   344
  assumes "ANR S" "closedin (top_of_set U) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   345
  obtains V where "openin (top_of_set U) V" "S retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   346
using ANR_imp_absolute_neighbourhood_retract assms homeomorphic_refl by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   347
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   348
lemma ANR_imp_absolute_closed_neighbourhood_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   349
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   350
  assumes "ANR S" "S homeomorphic S'" and US': "closedin (top_of_set U) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   351
  obtains V W
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   352
    where "openin (top_of_set U) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   353
          "closedin (top_of_set U) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   354
          "S' \<subseteq> V" "V \<subseteq> W" "S' retract_of W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   355
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   356
  obtain Z where "openin (top_of_set U) Z" and S'Z: "S' retract_of Z"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   357
    by (blast intro: assms ANR_imp_absolute_neighbourhood_retract)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   358
  then have UUZ: "closedin (top_of_set U) (U - Z)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   359
    by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   360
  have "S' \<inter> (U - Z) = {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   361
    using \<open>S' retract_of Z\<close> closedin_retract closedin_subtopology by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   362
  then obtain V W
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   363
      where "openin (top_of_set U) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   364
        and "openin (top_of_set U) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   365
        and "S' \<subseteq> V" "U - Z \<subseteq> W" "V \<inter> W = {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   366
      using separation_normal_local [OF US' UUZ]  by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   367
  moreover have "S' retract_of U - W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   368
    apply (rule retract_of_subset [OF S'Z])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   369
    using US' \<open>S' \<subseteq> V\<close> \<open>V \<inter> W = {}\<close> closedin_subset apply fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   370
    using Diff_subset_conv \<open>U - Z \<subseteq> W\<close> by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   371
  ultimately show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   372
    apply (rule_tac V=V and W = "U-W" in that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   373
    using openin_imp_subset apply force+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   374
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   375
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   376
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   377
lemma ANR_imp_closed_neighbourhood_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   378
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   379
  assumes "ANR S" "closedin (top_of_set U) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   380
  obtains V W where "openin (top_of_set U) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   381
                    "closedin (top_of_set U) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   382
                    "S \<subseteq> V" "V \<subseteq> W" "S retract_of W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   383
by (meson ANR_imp_absolute_closed_neighbourhood_retract assms homeomorphic_refl)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   384
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   385
lemma ANR_homeomorphic_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   386
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   387
  assumes "ANR T" "S homeomorphic T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   388
    shows "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   389
unfolding ANR_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   390
by (metis assms ANR_imp_absolute_neighbourhood_retract homeomorphic_trans [of _ S] homeomorphic_sym)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   391
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   392
lemma homeomorphic_ANR_iff_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   393
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   394
  shows "S homeomorphic T \<Longrightarrow> ANR S \<longleftrightarrow> ANR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   395
by (metis ANR_homeomorphic_ANR homeomorphic_sym)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   396
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   397
subsection \<open>Analogous properties of ENRs\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   398
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   399
lemma ENR_imp_absolute_neighbourhood_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   400
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   401
  assumes "ENR S" and hom: "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   402
      and "S' \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   403
  obtains V where "openin (top_of_set U) V" "S' retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   404
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   405
  obtain X where "open X" "S retract_of X"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   406
    using \<open>ENR S\<close> by (auto simp: ENR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   407
  then obtain r where "retraction X S r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   408
    by (auto simp: retract_of_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   409
  have "locally compact S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   410
    using retract_of_locally_compact open_imp_locally_compact
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   411
          homeomorphic_local_compactness \<open>S retract_of X\<close> \<open>open X\<close> hom by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   412
  then obtain W where UW: "openin (top_of_set U) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   413
                  and WS': "closedin (top_of_set W) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   414
    apply (rule locally_compact_closedin_open)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   415
    apply (rename_tac W)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   416
    apply (rule_tac W = "U \<inter> W" in that, blast)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   417
    by (simp add: \<open>S' \<subseteq> U\<close> closedin_limpt)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   418
  obtain f g where hom: "homeomorphism S S' f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   419
    using assms by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   420
  have contg: "continuous_on S' g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   421
    using hom homeomorphism_def by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   422
  moreover have "g ` S' \<subseteq> S" by (metis hom equalityE homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   423
  ultimately obtain h where conth: "continuous_on W h" and hg: "\<And>x. x \<in> S' \<Longrightarrow> h x = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   424
    using Tietze_unbounded [of S' g W] WS' by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   425
  have "W \<subseteq> U" using UW openin_open by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   426
  have "S' \<subseteq> W" using WS' closedin_closed by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   427
  have him: "\<And>x. x \<in> S' \<Longrightarrow> h x \<in> X"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   428
    by (metis (no_types) \<open>S retract_of X\<close> hg hom homeomorphism_def image_insert insert_absorb insert_iff retract_of_imp_subset subset_eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   429
  have "S' retract_of (W \<inter> h -` X)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   430
  proof (simp add: retraction_def retract_of_def, intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   431
    show "S' \<subseteq> W" "S' \<subseteq> h -` X"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   432
      using him WS' closedin_imp_subset by blast+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   433
    show "continuous_on (W \<inter> h -` X) (f \<circ> r \<circ> h)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   434
    proof (intro continuous_on_compose)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   435
      show "continuous_on (W \<inter> h -` X) h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   436
        by (meson conth continuous_on_subset inf_le1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   437
      show "continuous_on (h ` (W \<inter> h -` X)) r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   438
      proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   439
        have "h ` (W \<inter> h -` X) \<subseteq> X"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   440
          by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   441
        then show "continuous_on (h ` (W \<inter> h -` X)) r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   442
          by (meson \<open>retraction X S r\<close> continuous_on_subset retraction)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   443
      qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   444
      show "continuous_on (r ` h ` (W \<inter> h -` X)) f"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   445
        apply (rule continuous_on_subset [of S])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   446
         using hom homeomorphism_def apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   447
        apply clarify
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   448
        apply (meson \<open>retraction X S r\<close> subsetD imageI retraction_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   449
        done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   450
    qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   451
    show "(f \<circ> r \<circ> h) ` (W \<inter> h -` X) \<subseteq> S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   452
      using \<open>retraction X S r\<close> hom
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   453
      by (auto simp: retraction_def homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   454
    show "\<forall>x\<in>S'. (f \<circ> r \<circ> h) x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   455
      using \<open>retraction X S r\<close> hom by (auto simp: retraction_def homeomorphism_def hg)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   456
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   457
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   458
    apply (rule_tac V = "W \<inter> h -` X" in that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   459
     apply (rule openin_trans [OF _ UW])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   460
     using \<open>continuous_on W h\<close> \<open>open X\<close> continuous_openin_preimage_eq apply blast+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   461
     done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   462
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   463
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   464
corollary ENR_imp_absolute_neighbourhood_retract_UNIV:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   465
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   466
  assumes "ENR S" "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   467
  obtains T' where "open T'" "S' retract_of T'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   468
by (metis ENR_imp_absolute_neighbourhood_retract UNIV_I assms(1) assms(2) open_openin subsetI subtopology_UNIV)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   469
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   470
lemma ENR_homeomorphic_ENR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   471
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   472
  assumes "ENR T" "S homeomorphic T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   473
    shows "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   474
unfolding ENR_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   475
by (meson ENR_imp_absolute_neighbourhood_retract_UNIV assms homeomorphic_sym)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   476
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   477
lemma homeomorphic_ENR_iff_ENR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   478
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   479
  assumes "S homeomorphic T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   480
    shows "ENR S \<longleftrightarrow> ENR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   481
by (meson ENR_homeomorphic_ENR assms homeomorphic_sym)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   482
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   483
lemma ENR_translation:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   484
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   485
  shows "ENR(image (\<lambda>x. a + x) S) \<longleftrightarrow> ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   486
by (meson homeomorphic_sym homeomorphic_translation homeomorphic_ENR_iff_ENR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   487
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   488
lemma ENR_linear_image_eq:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   489
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   490
  assumes "linear f" "inj f"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   491
  shows "ENR (image f S) \<longleftrightarrow> ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   492
apply (rule homeomorphic_ENR_iff_ENR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   493
using assms homeomorphic_sym linear_homeomorphic_image by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   494
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   495
text \<open>Some relations among the concepts. We also relate AR to being a retract of UNIV, which is
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   496
often a more convenient proxy in the closed case.\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   497
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   498
lemma AR_imp_ANR: "AR S \<Longrightarrow> ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   499
  using ANR_def AR_def by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   500
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   501
lemma ENR_imp_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   502
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   503
  shows "ENR S \<Longrightarrow> ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   504
apply (simp add: ANR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   505
by (metis ENR_imp_absolute_neighbourhood_retract closedin_imp_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   506
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   507
lemma ENR_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   508
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   509
  shows "ENR S \<longleftrightarrow> ANR S \<and> locally compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   510
proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   511
  assume "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   512
  then have "locally compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   513
    using ENR_def open_imp_locally_compact retract_of_locally_compact by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   514
  then show "ANR S \<and> locally compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   515
    using ENR_imp_ANR \<open>ENR S\<close> by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   516
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   517
  assume "ANR S \<and> locally compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   518
  then have "ANR S" "locally compact S" by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   519
  then obtain T :: "('a * real) set" where "closed T" "S homeomorphic T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   520
    using locally_compact_homeomorphic_closed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   521
    by (metis DIM_prod DIM_real Suc_eq_plus1 lessI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   522
  then show "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   523
    using \<open>ANR S\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   524
    apply (simp add: ANR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   525
    apply (drule_tac x=UNIV in spec)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   526
    apply (drule_tac x=T in spec, clarsimp)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   527
    apply (meson ENR_def ENR_homeomorphic_ENR open_openin)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   528
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   529
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   530
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   531
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   532
lemma AR_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   533
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   534
  shows "AR S \<longleftrightarrow> ANR S \<and> contractible S \<and> S \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   535
        (is "?lhs = ?rhs")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   536
proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   537
  assume ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   538
  obtain C and S' :: "('a * real) set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   539
    where "convex C" "C \<noteq> {}" "closedin (top_of_set C) S'" "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   540
      apply (rule homeomorphic_closedin_convex [of S, where 'n = "'a * real"])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   541
      using aff_dim_le_DIM [of S] by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   542
  with \<open>AR S\<close> have "contractible S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   543
    apply (simp add: AR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   544
    apply (drule_tac x=C in spec)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   545
    apply (drule_tac x="S'" in spec, simp)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   546
    using convex_imp_contractible homeomorphic_contractible_eq retract_of_contractible by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   547
  with \<open>AR S\<close> show ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   548
    apply (auto simp: AR_imp_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   549
    apply (force simp: AR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   550
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   551
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   552
  assume ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   553
  then obtain a and h:: "real \<times> 'a \<Rightarrow> 'a"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   554
      where conth: "continuous_on ({0..1} \<times> S) h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   555
        and hS: "h ` ({0..1} \<times> S) \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   556
        and [simp]: "\<And>x. h(0, x) = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   557
        and [simp]: "\<And>x. h(1, x) = a"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   558
        and "ANR S" "S \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   559
    by (auto simp: contractible_def homotopic_with_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   560
  then have "a \<in> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   561
    by (metis all_not_in_conv atLeastAtMost_iff image_subset_iff mem_Sigma_iff order_refl zero_le_one)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   562
  have "\<exists>g. continuous_on W g \<and> g ` W \<subseteq> S \<and> (\<forall>x\<in>T. g x = f x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   563
         if      f: "continuous_on T f" "f ` T \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   564
            and WT: "closedin (top_of_set W) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   565
         for W T and f :: "'a \<times> real \<Rightarrow> 'a"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   566
  proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   567
    obtain U g
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   568
      where "T \<subseteq> U" and WU: "openin (top_of_set W) U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   569
        and contg: "continuous_on U g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   570
        and "g ` U \<subseteq> S" and gf: "\<And>x. x \<in> T \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   571
      using iffD1 [OF ANR_eq_absolute_neighbourhood_extensor \<open>ANR S\<close>, rule_format, OF f WT]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   572
      by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   573
    have WWU: "closedin (top_of_set W) (W - U)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   574
      using WU closedin_diff by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   575
    moreover have "(W - U) \<inter> T = {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   576
      using \<open>T \<subseteq> U\<close> by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   577
    ultimately obtain V V'
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   578
      where WV': "openin (top_of_set W) V'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   579
        and WV: "openin (top_of_set W) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   580
        and "W - U \<subseteq> V'" "T \<subseteq> V" "V' \<inter> V = {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   581
      using separation_normal_local [of W "W-U" T] WT by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   582
    then have WVT: "T \<inter> (W - V) = {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   583
      by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   584
    have WWV: "closedin (top_of_set W) (W - V)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   585
      using WV closedin_diff by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   586
    obtain j :: " 'a \<times> real \<Rightarrow> real"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   587
      where contj: "continuous_on W j"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   588
        and j:  "\<And>x. x \<in> W \<Longrightarrow> j x \<in> {0..1}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   589
        and j0: "\<And>x. x \<in> W - V \<Longrightarrow> j x = 1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   590
        and j1: "\<And>x. x \<in> T \<Longrightarrow> j x = 0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   591
      by (rule Urysohn_local [OF WT WWV WVT, of 0 "1::real"]) (auto simp: in_segment)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   592
    have Weq: "W = (W - V) \<union> (W - V')"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   593
      using \<open>V' \<inter> V = {}\<close> by force
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   594
    show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   595
    proof (intro conjI exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   596
      have *: "continuous_on (W - V') (\<lambda>x. h (j x, g x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   597
        apply (rule continuous_on_compose2 [OF conth continuous_on_Pair])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   598
          apply (rule continuous_on_subset [OF contj Diff_subset])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   599
         apply (rule continuous_on_subset [OF contg])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   600
         apply (metis Diff_subset_conv Un_commute \<open>W - U \<subseteq> V'\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   601
        using j \<open>g ` U \<subseteq> S\<close> \<open>W - U \<subseteq> V'\<close> apply fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   602
        done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   603
      show "continuous_on W (\<lambda>x. if x \<in> W - V then a else h (j x, g x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   604
        apply (subst Weq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   605
        apply (rule continuous_on_cases_local)
71172
nipkow
parents: 71031
diff changeset
   606
            apply (simp_all add: Weq [symmetric] WWV *)
70642
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   607
          using WV' closedin_diff apply fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   608
         apply (auto simp: j0 j1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   609
        done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   610
    next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   611
      have "h (j (x, y), g (x, y)) \<in> S" if "(x, y) \<in> W" "(x, y) \<in> V" for x y
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   612
      proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   613
        have "j(x, y) \<in> {0..1}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   614
          using j that by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   615
        moreover have "g(x, y) \<in> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   616
          using \<open>V' \<inter> V = {}\<close> \<open>W - U \<subseteq> V'\<close> \<open>g ` U \<subseteq> S\<close> that by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   617
        ultimately show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   618
          using hS by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   619
      qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   620
      with \<open>a \<in> S\<close> \<open>g ` U \<subseteq> S\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   621
      show "(\<lambda>x. if x \<in> W - V then a else h (j x, g x)) ` W \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   622
        by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   623
    next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   624
      show "\<forall>x\<in>T. (if x \<in> W - V then a else h (j x, g x)) = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   625
        using \<open>T \<subseteq> V\<close> by (auto simp: j0 j1 gf)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   626
    qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   627
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   628
  then show ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   629
    by (simp add: AR_eq_absolute_extensor)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   630
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   631
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   632
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   633
lemma ANR_retract_of_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   634
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   635
  assumes "ANR T" "S retract_of T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   636
  shows "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   637
using assms
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   638
apply (simp add: ANR_eq_absolute_neighbourhood_extensor retract_of_def retraction_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   639
apply (clarsimp elim!: all_forward)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   640
apply (erule impCE, metis subset_trans)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   641
apply (clarsimp elim!: ex_forward)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   642
apply (rule_tac x="r \<circ> g" in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   643
by (metis comp_apply continuous_on_compose continuous_on_subset subsetD imageI image_comp image_mono subset_trans)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   644
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   645
lemma AR_retract_of_AR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   646
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   647
  shows "\<lbrakk>AR T; S retract_of T\<rbrakk> \<Longrightarrow> AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   648
using ANR_retract_of_ANR AR_ANR retract_of_contractible by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   649
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   650
lemma ENR_retract_of_ENR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   651
   "\<lbrakk>ENR T; S retract_of T\<rbrakk> \<Longrightarrow> ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   652
by (meson ENR_def retract_of_trans)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   653
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   654
lemma retract_of_UNIV:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   655
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   656
  shows "S retract_of UNIV \<longleftrightarrow> AR S \<and> closed S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   657
by (metis AR_ANR AR_imp_retract ENR_def ENR_imp_ANR closed_UNIV closed_closedin contractible_UNIV empty_not_UNIV open_UNIV retract_of_closed retract_of_contractible retract_of_empty(1) subtopology_UNIV)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   658
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   659
lemma compact_AR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   660
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   661
  shows "compact S \<and> AR S \<longleftrightarrow> compact S \<and> S retract_of UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   662
using compact_imp_closed retract_of_UNIV by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   663
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   664
text \<open>More properties of ARs, ANRs and ENRs\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   665
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   666
lemma not_AR_empty [simp]: "\<not> AR({})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   667
  by (auto simp: AR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   668
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   669
lemma ENR_empty [simp]: "ENR {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   670
  by (simp add: ENR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   671
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   672
lemma ANR_empty [simp]: "ANR ({} :: 'a::euclidean_space set)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   673
  by (simp add: ENR_imp_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   674
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   675
lemma convex_imp_AR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   676
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   677
  shows "\<lbrakk>convex S; S \<noteq> {}\<rbrakk> \<Longrightarrow> AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   678
apply (rule absolute_extensor_imp_AR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   679
apply (rule Dugundji, assumption+)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   680
by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   681
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   682
lemma convex_imp_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   683
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   684
  shows "convex S \<Longrightarrow> ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   685
using ANR_empty AR_imp_ANR convex_imp_AR by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   686
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   687
lemma ENR_convex_closed:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   688
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   689
  shows "\<lbrakk>closed S; convex S\<rbrakk> \<Longrightarrow> ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   690
using ENR_def ENR_empty convex_imp_AR retract_of_UNIV by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   691
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   692
lemma AR_UNIV [simp]: "AR (UNIV :: 'a::euclidean_space set)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   693
  using retract_of_UNIV by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   694
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   695
lemma ANR_UNIV [simp]: "ANR (UNIV :: 'a::euclidean_space set)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   696
  by (simp add: AR_imp_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   697
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   698
lemma ENR_UNIV [simp]:"ENR UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   699
  using ENR_def by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   700
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   701
lemma AR_singleton:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   702
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   703
    shows "AR {a}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   704
  using retract_of_UNIV by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   705
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   706
lemma ANR_singleton:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   707
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   708
    shows "ANR {a}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   709
  by (simp add: AR_imp_ANR AR_singleton)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   710
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   711
lemma ENR_singleton: "ENR {a}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   712
  using ENR_def by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   713
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   714
text \<open>ARs closed under union\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   715
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   716
lemma AR_closed_Un_local_aux:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   717
  fixes U :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   718
  assumes "closedin (top_of_set U) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   719
          "closedin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   720
          "AR S" "AR T" "AR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   721
  shows "(S \<union> T) retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   722
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   723
  have "S \<inter> T \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   724
    using assms AR_def by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   725
  have "S \<subseteq> U" "T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   726
    using assms by (auto simp: closedin_imp_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   727
  define S' where "S' \<equiv> {x \<in> U. setdist {x} S \<le> setdist {x} T}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   728
  define T' where "T' \<equiv> {x \<in> U. setdist {x} T \<le> setdist {x} S}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   729
  define W  where "W \<equiv> {x \<in> U. setdist {x} S = setdist {x} T}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   730
  have US': "closedin (top_of_set U) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   731
    using continuous_closedin_preimage [of U "\<lambda>x. setdist {x} S - setdist {x} T" "{..0}"]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   732
    by (simp add: S'_def vimage_def Collect_conj_eq continuous_on_diff continuous_on_setdist)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   733
  have UT': "closedin (top_of_set U) T'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   734
    using continuous_closedin_preimage [of U "\<lambda>x. setdist {x} T - setdist {x} S" "{..0}"]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   735
    by (simp add: T'_def vimage_def Collect_conj_eq continuous_on_diff continuous_on_setdist)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   736
  have "S \<subseteq> S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   737
    using S'_def \<open>S \<subseteq> U\<close> setdist_sing_in_set by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   738
  have "T \<subseteq> T'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   739
    using T'_def \<open>T \<subseteq> U\<close> setdist_sing_in_set by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   740
  have "S \<inter> T \<subseteq> W" "W \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   741
    using \<open>S \<subseteq> U\<close> by (auto simp: W_def setdist_sing_in_set)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   742
  have "(S \<inter> T) retract_of W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   743
    apply (rule AR_imp_absolute_retract [OF \<open>AR(S \<inter> T)\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   744
     apply (simp add: homeomorphic_refl)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   745
    apply (rule closedin_subset_trans [of U])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   746
    apply (simp_all add: assms closedin_Int \<open>S \<inter> T \<subseteq> W\<close> \<open>W \<subseteq> U\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   747
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   748
  then obtain r0
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   749
    where "S \<inter> T \<subseteq> W" and contr0: "continuous_on W r0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   750
      and "r0 ` W \<subseteq> S \<inter> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   751
      and r0 [simp]: "\<And>x. x \<in> S \<inter> T \<Longrightarrow> r0 x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   752
      by (auto simp: retract_of_def retraction_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   753
  have ST: "x \<in> W \<Longrightarrow> x \<in> S \<longleftrightarrow> x \<in> T" for x
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   754
    using setdist_eq_0_closedin \<open>S \<inter> T \<noteq> {}\<close> assms
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   755
    by (force simp: W_def setdist_sing_in_set)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   756
  have "S' \<inter> T' = W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   757
    by (auto simp: S'_def T'_def W_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   758
  then have cloUW: "closedin (top_of_set U) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   759
    using closedin_Int US' UT' by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   760
  define r where "r \<equiv> \<lambda>x. if x \<in> W then r0 x else x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   761
  have "r ` (W \<union> S) \<subseteq> S" "r ` (W \<union> T) \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   762
    using \<open>r0 ` W \<subseteq> S \<inter> T\<close> r_def by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   763
  have contr: "continuous_on (W \<union> (S \<union> T)) r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   764
  unfolding r_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   765
  proof (rule continuous_on_cases_local [OF _ _ contr0 continuous_on_id])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   766
    show "closedin (top_of_set (W \<union> (S \<union> T))) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   767
      using \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close> \<open>W \<subseteq> U\<close> \<open>closedin (top_of_set U) W\<close> closedin_subset_trans by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   768
    show "closedin (top_of_set (W \<union> (S \<union> T))) (S \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   769
      by (meson \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close> \<open>W \<subseteq> U\<close> assms closedin_Un closedin_subset_trans sup.bounded_iff sup.cobounded2)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   770
    show "\<And>x. x \<in> W \<and> x \<notin> W \<or> x \<in> S \<union> T \<and> x \<in> W \<Longrightarrow> r0 x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   771
      by (auto simp: ST)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   772
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   773
  have cloUWS: "closedin (top_of_set U) (W \<union> S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   774
    by (simp add: cloUW assms closedin_Un)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   775
  obtain g where contg: "continuous_on U g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   776
             and "g ` U \<subseteq> S" and geqr: "\<And>x. x \<in> W \<union> S \<Longrightarrow> g x = r x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   777
    apply (rule AR_imp_absolute_extensor [OF \<open>AR S\<close> _ _ cloUWS])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   778
      apply (rule continuous_on_subset [OF contr])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   779
      using \<open>r ` (W \<union> S) \<subseteq> S\<close> apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   780
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   781
  have cloUWT: "closedin (top_of_set U) (W \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   782
    by (simp add: cloUW assms closedin_Un)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   783
  obtain h where conth: "continuous_on U h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   784
             and "h ` U \<subseteq> T" and heqr: "\<And>x. x \<in> W \<union> T \<Longrightarrow> h x = r x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   785
    apply (rule AR_imp_absolute_extensor [OF \<open>AR T\<close> _ _ cloUWT])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   786
      apply (rule continuous_on_subset [OF contr])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   787
      using \<open>r ` (W \<union> T) \<subseteq> T\<close> apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   788
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   789
  have "U = S' \<union> T'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   790
    by (force simp: S'_def T'_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   791
  then have cont: "continuous_on U (\<lambda>x. if x \<in> S' then g x else h x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   792
    apply (rule ssubst)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   793
    apply (rule continuous_on_cases_local)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   794
    using US' UT' \<open>S' \<inter> T' = W\<close> \<open>U = S' \<union> T'\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   795
          contg conth continuous_on_subset geqr heqr apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   796
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   797
  have UST: "(\<lambda>x. if x \<in> S' then g x else h x) ` U \<subseteq> S \<union> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   798
    using \<open>g ` U \<subseteq> S\<close> \<open>h ` U \<subseteq> T\<close> by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   799
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   800
    apply (simp add: retract_of_def retraction_def \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   801
    apply (rule_tac x="\<lambda>x. if x \<in> S' then g x else h x" in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   802
    apply (intro conjI cont UST)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   803
    by (metis IntI ST Un_iff \<open>S \<subseteq> S'\<close> \<open>S' \<inter> T' = W\<close> \<open>T \<subseteq> T'\<close> subsetD geqr heqr r0 r_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   804
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   805
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   806
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   807
lemma AR_closed_Un_local:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   808
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   809
  assumes STS: "closedin (top_of_set (S \<union> T)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   810
      and STT: "closedin (top_of_set (S \<union> T)) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   811
      and "AR S" "AR T" "AR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   812
    shows "AR(S \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   813
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   814
  have "C retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   815
       if hom: "S \<union> T homeomorphic C" and UC: "closedin (top_of_set U) C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   816
       for U and C :: "('a * real) set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   817
  proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   818
    obtain f g where hom: "homeomorphism (S \<union> T) C f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   819
      using hom by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   820
    have US: "closedin (top_of_set U) (C \<inter> g -` S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   821
      apply (rule closedin_trans [OF _ UC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   822
      apply (rule continuous_closedin_preimage_gen [OF _ _ STS])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   823
      using hom homeomorphism_def apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   824
      apply (metis hom homeomorphism_def set_eq_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   825
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   826
    have UT: "closedin (top_of_set U) (C \<inter> g -` T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   827
      apply (rule closedin_trans [OF _ UC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   828
      apply (rule continuous_closedin_preimage_gen [OF _ _ STT])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   829
      using hom homeomorphism_def apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   830
      apply (metis hom homeomorphism_def set_eq_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   831
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   832
    have ARS: "AR (C \<inter> g -` S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   833
      apply (rule AR_homeomorphic_AR [OF \<open>AR S\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   834
      apply (simp add: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   835
      apply (rule_tac x=g in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   836
      apply (rule_tac x=f in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   837
      using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   838
      apply (rule_tac x="f x" in image_eqI, auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   839
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   840
    have ART: "AR (C \<inter> g -` T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   841
      apply (rule AR_homeomorphic_AR [OF \<open>AR T\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   842
      apply (simp add: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   843
      apply (rule_tac x=g in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   844
      apply (rule_tac x=f in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   845
      using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   846
      apply (rule_tac x="f x" in image_eqI, auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   847
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   848
    have ARI: "AR ((C \<inter> g -` S) \<inter> (C \<inter> g -` T))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   849
      apply (rule AR_homeomorphic_AR [OF \<open>AR (S \<inter> T)\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   850
      apply (simp add: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   851
      apply (rule_tac x=g in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   852
      apply (rule_tac x=f in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   853
      using hom
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   854
      apply (auto simp: homeomorphism_def elim!: continuous_on_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   855
      apply (rule_tac x="f x" in image_eqI, auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   856
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   857
    have "C = (C \<inter> g -` S) \<union> (C \<inter> g -` T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   858
      using hom  by (auto simp: homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   859
    then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   860
      by (metis AR_closed_Un_local_aux [OF US UT ARS ART ARI])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   861
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   862
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   863
    by (force simp: AR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   864
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   865
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   866
corollary AR_closed_Un:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   867
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   868
  shows "\<lbrakk>closed S; closed T; AR S; AR T; AR (S \<inter> T)\<rbrakk> \<Longrightarrow> AR (S \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   869
by (metis AR_closed_Un_local_aux closed_closedin retract_of_UNIV subtopology_UNIV)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   870
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   871
text \<open>ANRs closed under union\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   872
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   873
lemma ANR_closed_Un_local_aux:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   874
  fixes U :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   875
  assumes US: "closedin (top_of_set U) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   876
      and UT: "closedin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   877
      and "ANR S" "ANR T" "ANR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   878
  obtains V where "openin (top_of_set U) V" "(S \<union> T) retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   879
proof (cases "S = {} \<or> T = {}")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   880
  case True with assms that show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   881
    by (metis ANR_imp_neighbourhood_retract Un_commute inf_bot_right sup_inf_absorb)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   882
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   883
  case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   884
  then have [simp]: "S \<noteq> {}" "T \<noteq> {}" by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   885
  have "S \<subseteq> U" "T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   886
    using assms by (auto simp: closedin_imp_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   887
  define S' where "S' \<equiv> {x \<in> U. setdist {x} S \<le> setdist {x} T}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   888
  define T' where "T' \<equiv> {x \<in> U. setdist {x} T \<le> setdist {x} S}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   889
  define W  where "W \<equiv> {x \<in> U. setdist {x} S = setdist {x} T}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   890
  have cloUS': "closedin (top_of_set U) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   891
    using continuous_closedin_preimage [of U "\<lambda>x. setdist {x} S - setdist {x} T" "{..0}"]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   892
    by (simp add: S'_def vimage_def Collect_conj_eq continuous_on_diff continuous_on_setdist)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   893
  have cloUT': "closedin (top_of_set U) T'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   894
    using continuous_closedin_preimage [of U "\<lambda>x. setdist {x} T - setdist {x} S" "{..0}"]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   895
    by (simp add: T'_def vimage_def Collect_conj_eq continuous_on_diff continuous_on_setdist)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   896
  have "S \<subseteq> S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   897
    using S'_def \<open>S \<subseteq> U\<close> setdist_sing_in_set by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   898
  have "T \<subseteq> T'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   899
    using T'_def \<open>T \<subseteq> U\<close> setdist_sing_in_set by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   900
  have "S' \<union> T' = U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   901
    by (auto simp: S'_def T'_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   902
  have "W \<subseteq> S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   903
    by (simp add: Collect_mono S'_def W_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   904
  have "W \<subseteq> T'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   905
    by (simp add: Collect_mono T'_def W_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   906
  have ST_W: "S \<inter> T \<subseteq> W" and "W \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   907
    using \<open>S \<subseteq> U\<close> by (force simp: W_def setdist_sing_in_set)+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   908
  have "S' \<inter> T' = W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   909
    by (auto simp: S'_def T'_def W_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   910
  then have cloUW: "closedin (top_of_set U) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   911
    using closedin_Int cloUS' cloUT' by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   912
  obtain W' W0 where "openin (top_of_set W) W'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   913
                 and cloWW0: "closedin (top_of_set W) W0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   914
                 and "S \<inter> T \<subseteq> W'" "W' \<subseteq> W0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   915
                 and ret: "(S \<inter> T) retract_of W0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   916
    apply (rule ANR_imp_closed_neighbourhood_retract [OF \<open>ANR(S \<inter> T)\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   917
    apply (rule closedin_subset_trans [of U, OF _ ST_W \<open>W \<subseteq> U\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   918
    apply (blast intro: assms)+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   919
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   920
  then obtain U0 where opeUU0: "openin (top_of_set U) U0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   921
                   and U0: "S \<inter> T \<subseteq> U0" "U0 \<inter> W \<subseteq> W0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   922
    unfolding openin_open  using \<open>W \<subseteq> U\<close> by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   923
  have "W0 \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   924
    using \<open>W \<subseteq> U\<close> cloWW0 closedin_subset by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   925
  obtain r0
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   926
    where "S \<inter> T \<subseteq> W0" and contr0: "continuous_on W0 r0" and "r0 ` W0 \<subseteq> S \<inter> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   927
      and r0 [simp]: "\<And>x. x \<in> S \<inter> T \<Longrightarrow> r0 x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   928
    using ret  by (force simp: retract_of_def retraction_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   929
  have ST: "x \<in> W \<Longrightarrow> x \<in> S \<longleftrightarrow> x \<in> T" for x
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   930
    using assms by (auto simp: W_def setdist_sing_in_set dest!: setdist_eq_0_closedin)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   931
  define r where "r \<equiv> \<lambda>x. if x \<in> W0 then r0 x else x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   932
  have "r ` (W0 \<union> S) \<subseteq> S" "r ` (W0 \<union> T) \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   933
    using \<open>r0 ` W0 \<subseteq> S \<inter> T\<close> r_def by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   934
  have contr: "continuous_on (W0 \<union> (S \<union> T)) r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   935
  unfolding r_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   936
  proof (rule continuous_on_cases_local [OF _ _ contr0 continuous_on_id])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   937
    show "closedin (top_of_set (W0 \<union> (S \<union> T))) W0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   938
      apply (rule closedin_subset_trans [of U])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   939
      using cloWW0 cloUW closedin_trans \<open>W0 \<subseteq> U\<close> \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close> apply blast+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   940
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   941
    show "closedin (top_of_set (W0 \<union> (S \<union> T))) (S \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   942
      by (meson \<open>S \<subseteq> U\<close> \<open>T \<subseteq> U\<close> \<open>W0 \<subseteq> U\<close> assms closedin_Un closedin_subset_trans sup.bounded_iff sup.cobounded2)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   943
    show "\<And>x. x \<in> W0 \<and> x \<notin> W0 \<or> x \<in> S \<union> T \<and> x \<in> W0 \<Longrightarrow> r0 x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   944
      using ST cloWW0 closedin_subset by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   945
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   946
  have cloS'WS: "closedin (top_of_set S') (W0 \<union> S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   947
    by (meson closedin_subset_trans US cloUS' \<open>S \<subseteq> S'\<close> \<open>W \<subseteq> S'\<close> cloUW cloWW0 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   948
              closedin_Un closedin_imp_subset closedin_trans)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   949
  obtain W1 g where "W0 \<union> S \<subseteq> W1" and contg: "continuous_on W1 g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   950
                and opeSW1: "openin (top_of_set S') W1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   951
                and "g ` W1 \<subseteq> S" and geqr: "\<And>x. x \<in> W0 \<union> S \<Longrightarrow> g x = r x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   952
    apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> _ \<open>r ` (W0 \<union> S) \<subseteq> S\<close> cloS'WS])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   953
     apply (rule continuous_on_subset [OF contr], blast+)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   954
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   955
  have cloT'WT: "closedin (top_of_set T') (W0 \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   956
    by (meson closedin_subset_trans UT cloUT' \<open>T \<subseteq> T'\<close> \<open>W \<subseteq> T'\<close> cloUW cloWW0 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   957
              closedin_Un closedin_imp_subset closedin_trans)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   958
  obtain W2 h where "W0 \<union> T \<subseteq> W2" and conth: "continuous_on W2 h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   959
                and opeSW2: "openin (top_of_set T') W2"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   960
                and "h ` W2 \<subseteq> T" and heqr: "\<And>x. x \<in> W0 \<union> T \<Longrightarrow> h x = r x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   961
    apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> _ \<open>r ` (W0 \<union> T) \<subseteq> T\<close> cloT'WT])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   962
     apply (rule continuous_on_subset [OF contr], blast+)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   963
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   964
  have "S' \<inter> T' = W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   965
    by (force simp: S'_def T'_def W_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   966
  obtain O1 O2 where "open O1" "W1 = S' \<inter> O1" "open O2" "W2 = T' \<inter> O2"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   967
    using opeSW1 opeSW2 by (force simp: openin_open)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   968
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   969
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   970
    have eq: "W1 - (W - U0) \<union> (W2 - (W - U0)) =
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   971
         ((U - T') \<inter> O1 \<union> (U - S') \<inter> O2 \<union> U \<inter> O1 \<inter> O2) - (W - U0)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   972
     using \<open>U0 \<inter> W \<subseteq> W0\<close> \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W0 \<union> T \<subseteq> W2\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   973
      by (auto simp: \<open>S' \<union> T' = U\<close> [symmetric] \<open>S' \<inter> T' = W\<close> [symmetric] \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   974
    show "openin (top_of_set U) (W1 - (W - U0) \<union> (W2 - (W - U0)))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   975
      apply (subst eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   976
      apply (intro openin_Un openin_Int_open openin_diff closedin_diff cloUW opeUU0 cloUS' cloUT' \<open>open O1\<close> \<open>open O2\<close>, simp_all)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   977
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   978
    have cloW1: "closedin (top_of_set (W1 - (W - U0) \<union> (W2 - (W - U0)))) (W1 - (W - U0))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   979
      using cloUS' apply (simp add: closedin_closed)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   980
      apply (erule ex_forward)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   981
      using U0 \<open>W0 \<union> S \<subseteq> W1\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   982
      apply (auto simp: \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<union> T' = U\<close> [symmetric]\<open>S' \<inter> T' = W\<close> [symmetric])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   983
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   984
    have cloW2: "closedin (top_of_set (W1 - (W - U0) \<union> (W2 - (W - U0)))) (W2 - (W - U0))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   985
      using cloUT' apply (simp add: closedin_closed)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   986
      apply (erule ex_forward)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   987
      using U0 \<open>W0 \<union> T \<subseteq> W2\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   988
      apply (auto simp: \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<union> T' = U\<close> [symmetric]\<open>S' \<inter> T' = W\<close> [symmetric])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   989
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   990
    have *: "\<forall>x\<in>S \<union> T. (if x \<in> S' then g x else h x) = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   991
      using ST \<open>S' \<inter> T' = W\<close> cloT'WT closedin_subset geqr heqr 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   992
      apply (auto simp: r_def, fastforce)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   993
      using \<open>S \<subseteq> S'\<close> \<open>T \<subseteq> T'\<close> \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W1 = S' \<inter> O1\<close>  by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   994
    have "\<exists>r. continuous_on (W1 - (W - U0) \<union> (W2 - (W - U0))) r \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   995
              r ` (W1 - (W - U0) \<union> (W2 - (W - U0))) \<subseteq> S \<union> T \<and> 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   996
              (\<forall>x\<in>S \<union> T. r x = x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   997
      apply (rule_tac x = "\<lambda>x. if  x \<in> S' then g x else h x" in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   998
      apply (intro conjI *)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   999
      apply (rule continuous_on_cases_local 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1000
                  [OF cloW1 cloW2 continuous_on_subset [OF contg] continuous_on_subset [OF conth]])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1001
      using \<open>W1 = S' \<inter> O1\<close> \<open>W2 = T' \<inter> O2\<close> \<open>S' \<inter> T' = W\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1002
            \<open>g ` W1 \<subseteq> S\<close> \<open>h ` W2 \<subseteq> T\<close> apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1003
      using \<open>U0 \<inter> W \<subseteq> W0\<close> \<open>W0 \<union> S \<subseteq> W1\<close> apply (fastforce simp add: geqr heqr)+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1004
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1005
    then show "S \<union> T retract_of W1 - (W - U0) \<union> (W2 - (W - U0))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1006
      using  \<open>W0 \<union> S \<subseteq> W1\<close> \<open>W0 \<union> T \<subseteq> W2\<close> ST opeUU0 U0
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1007
      by (auto simp: retract_of_def retraction_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1008
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1009
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1010
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1011
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1012
lemma ANR_closed_Un_local:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1013
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1014
  assumes STS: "closedin (top_of_set (S \<union> T)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1015
      and STT: "closedin (top_of_set (S \<union> T)) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1016
      and "ANR S" "ANR T" "ANR(S \<inter> T)" 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1017
    shows "ANR(S \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1018
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1019
  have "\<exists>T. openin (top_of_set U) T \<and> C retract_of T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1020
       if hom: "S \<union> T homeomorphic C" and UC: "closedin (top_of_set U) C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1021
       for U and C :: "('a * real) set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1022
  proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1023
    obtain f g where hom: "homeomorphism (S \<union> T) C f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1024
      using hom by (force simp: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1025
    have US: "closedin (top_of_set U) (C \<inter> g -` S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1026
      apply (rule closedin_trans [OF _ UC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1027
      apply (rule continuous_closedin_preimage_gen [OF _ _ STS])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1028
      using hom [unfolded homeomorphism_def] apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1029
      apply (metis hom homeomorphism_def set_eq_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1030
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1031
    have UT: "closedin (top_of_set U) (C \<inter> g -` T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1032
      apply (rule closedin_trans [OF _ UC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1033
      apply (rule continuous_closedin_preimage_gen [OF _ _ STT])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1034
      using hom [unfolded homeomorphism_def] apply blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1035
      apply (metis hom homeomorphism_def set_eq_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1036
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1037
    have ANRS: "ANR (C \<inter> g -` S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1038
      apply (rule ANR_homeomorphic_ANR [OF \<open>ANR S\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1039
      apply (simp add: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1040
      apply (rule_tac x=g in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1041
      apply (rule_tac x=f in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1042
      using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1043
      apply (rule_tac x="f x" in image_eqI, auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1044
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1045
    have ANRT: "ANR (C \<inter> g -` T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1046
      apply (rule ANR_homeomorphic_ANR [OF \<open>ANR T\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1047
      apply (simp add: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1048
      apply (rule_tac x=g in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1049
      apply (rule_tac x=f in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1050
      using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1051
      apply (rule_tac x="f x" in image_eqI, auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1052
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1053
    have ANRI: "ANR ((C \<inter> g -` S) \<inter> (C \<inter> g -` T))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1054
      apply (rule ANR_homeomorphic_ANR [OF \<open>ANR (S \<inter> T)\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1055
      apply (simp add: homeomorphic_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1056
      apply (rule_tac x=g in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1057
      apply (rule_tac x=f in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1058
      using hom
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1059
      apply (auto simp: homeomorphism_def elim!: continuous_on_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1060
      apply (rule_tac x="f x" in image_eqI, auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1061
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1062
    have "C = (C \<inter> g -` S) \<union> (C \<inter> g -` T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1063
      using hom by (auto simp: homeomorphism_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1064
    then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1065
      by (metis ANR_closed_Un_local_aux [OF US UT ANRS ANRT ANRI])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1066
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1067
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1068
    by (auto simp: ANR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1069
qed    
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1070
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1071
corollary ANR_closed_Un:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1072
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1073
  shows "\<lbrakk>closed S; closed T; ANR S; ANR T; ANR (S \<inter> T)\<rbrakk> \<Longrightarrow> ANR (S \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1074
by (simp add: ANR_closed_Un_local closedin_def diff_eq open_Compl openin_open_Int)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1075
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1076
lemma ANR_openin:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1077
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1078
  assumes "ANR T" and opeTS: "openin (top_of_set T) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1079
  shows "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1080
proof (clarsimp simp only: ANR_eq_absolute_neighbourhood_extensor)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1081
  fix f :: "'a \<times> real \<Rightarrow> 'a" and U C
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1082
  assume contf: "continuous_on C f" and fim: "f ` C \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1083
     and cloUC: "closedin (top_of_set U) C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1084
  have "f ` C \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1085
    using fim opeTS openin_imp_subset by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1086
  obtain W g where "C \<subseteq> W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1087
               and UW: "openin (top_of_set U) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1088
               and contg: "continuous_on W g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1089
               and gim: "g ` W \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1090
               and geq: "\<And>x. x \<in> C \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1091
    apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf \<open>f ` C \<subseteq> T\<close> cloUC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1092
    using fim by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1093
  show "\<exists>V g. C \<subseteq> V \<and> openin (top_of_set U) V \<and> continuous_on V g \<and> g ` V \<subseteq> S \<and> (\<forall>x\<in>C. g x = f x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1094
  proof (intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1095
    show "C \<subseteq> W \<inter> g -` S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1096
      using \<open>C \<subseteq> W\<close> fim geq by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1097
    show "openin (top_of_set U) (W \<inter> g -` S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1098
      by (metis (mono_tags, lifting) UW contg continuous_openin_preimage gim opeTS openin_trans)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1099
    show "continuous_on (W \<inter> g -` S) g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1100
      by (blast intro: continuous_on_subset [OF contg])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1101
    show "g ` (W \<inter> g -` S) \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1102
      using gim by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1103
    show "\<forall>x\<in>C. g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1104
      using geq by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1105
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1106
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1107
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1108
lemma ENR_openin:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1109
    fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1110
    assumes "ENR T" and opeTS: "openin (top_of_set T) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1111
    shows "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1112
  using assms apply (simp add: ENR_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1113
  using ANR_openin locally_open_subset by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1114
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1115
lemma ANR_neighborhood_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1116
    fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1117
    assumes "ANR U" "S retract_of T" "openin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1118
    shows "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1119
  using ANR_openin ANR_retract_of_ANR assms by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1120
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1121
lemma ENR_neighborhood_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1122
    fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1123
    assumes "ENR U" "S retract_of T" "openin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1124
    shows "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1125
  using ENR_openin ENR_retract_of_ENR assms by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1126
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1127
lemma ANR_rel_interior:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1128
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1129
  shows "ANR S \<Longrightarrow> ANR(rel_interior S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1130
   by (blast intro: ANR_openin openin_set_rel_interior)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1131
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1132
lemma ANR_delete:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1133
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1134
  shows "ANR S \<Longrightarrow> ANR(S - {a})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1135
   by (blast intro: ANR_openin openin_delete openin_subtopology_self)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1136
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1137
lemma ENR_rel_interior:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1138
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1139
  shows "ENR S \<Longrightarrow> ENR(rel_interior S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1140
   by (blast intro: ENR_openin openin_set_rel_interior)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1141
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1142
lemma ENR_delete:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1143
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1144
  shows "ENR S \<Longrightarrow> ENR(S - {a})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1145
   by (blast intro: ENR_openin openin_delete openin_subtopology_self)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1146
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1147
lemma open_imp_ENR: "open S \<Longrightarrow> ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1148
    using ENR_def by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1149
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1150
lemma open_imp_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1151
    fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1152
    shows "open S \<Longrightarrow> ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1153
  by (simp add: ENR_imp_ANR open_imp_ENR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1154
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1155
lemma ANR_ball [iff]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1156
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1157
    shows "ANR(ball a r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1158
  by (simp add: convex_imp_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1159
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1160
lemma ENR_ball [iff]: "ENR(ball a r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1161
  by (simp add: open_imp_ENR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1162
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1163
lemma AR_ball [simp]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1164
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1165
    shows "AR(ball a r) \<longleftrightarrow> 0 < r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1166
  by (auto simp: AR_ANR convex_imp_contractible)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1167
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1168
lemma ANR_cball [iff]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1169
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1170
    shows "ANR(cball a r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1171
  by (simp add: convex_imp_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1172
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1173
lemma ENR_cball:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1174
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1175
    shows "ENR(cball a r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1176
  using ENR_convex_closed by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1177
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1178
lemma AR_cball [simp]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1179
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1180
    shows "AR(cball a r) \<longleftrightarrow> 0 \<le> r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1181
  by (auto simp: AR_ANR convex_imp_contractible)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1182
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1183
lemma ANR_box [iff]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1184
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1185
    shows "ANR(cbox a b)" "ANR(box a b)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1186
  by (auto simp: convex_imp_ANR open_imp_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1187
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1188
lemma ENR_box [iff]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1189
    fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1190
    shows "ENR(cbox a b)" "ENR(box a b)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1191
apply (simp add: ENR_convex_closed closed_cbox)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1192
by (simp add: open_box open_imp_ENR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1193
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1194
lemma AR_box [simp]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1195
    "AR(cbox a b) \<longleftrightarrow> cbox a b \<noteq> {}" "AR(box a b) \<longleftrightarrow> box a b \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1196
  by (auto simp: AR_ANR convex_imp_contractible)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1197
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1198
lemma ANR_interior:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1199
     fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1200
     shows "ANR(interior S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1201
  by (simp add: open_imp_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1202
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1203
lemma ENR_interior:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1204
     fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1205
     shows "ENR(interior S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1206
  by (simp add: open_imp_ENR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1207
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1208
lemma AR_imp_contractible:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1209
    fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1210
    shows "AR S \<Longrightarrow> contractible S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1211
  by (simp add: AR_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1212
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1213
lemma ENR_imp_locally_compact:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1214
    fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1215
    shows "ENR S \<Longrightarrow> locally compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1216
  by (simp add: ENR_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1217
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1218
lemma ANR_imp_locally_path_connected:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1219
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1220
  assumes "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1221
    shows "locally path_connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1222
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1223
  obtain U and T :: "('a \<times> real) set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1224
     where "convex U" "U \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1225
       and UT: "closedin (top_of_set U) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1226
       and "S homeomorphic T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1227
    apply (rule homeomorphic_closedin_convex [of S])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1228
    using aff_dim_le_DIM [of S] apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1229
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1230
  then have "locally path_connected T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1231
    by (meson ANR_imp_absolute_neighbourhood_retract
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1232
        assms convex_imp_locally_path_connected locally_open_subset retract_of_locally_path_connected)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1233
  then have S: "locally path_connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1234
      if "openin (top_of_set U) V" "T retract_of V" "U \<noteq> {}" for V
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1235
    using \<open>S homeomorphic T\<close> homeomorphic_locally homeomorphic_path_connectedness by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1236
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1237
    using assms
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1238
    apply (clarsimp simp: ANR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1239
    apply (drule_tac x=U in spec)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1240
    apply (drule_tac x=T in spec)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1241
    using \<open>S homeomorphic T\<close> \<open>U \<noteq> {}\<close> UT  apply (blast intro: S)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1242
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1243
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1244
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1245
lemma ANR_imp_locally_connected:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1246
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1247
  assumes "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1248
    shows "locally connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1249
using locally_path_connected_imp_locally_connected ANR_imp_locally_path_connected assms by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1250
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1251
lemma AR_imp_locally_path_connected:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1252
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1253
  assumes "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1254
    shows "locally path_connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1255
by (simp add: ANR_imp_locally_path_connected AR_imp_ANR assms)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1256
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1257
lemma AR_imp_locally_connected:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1258
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1259
  assumes "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1260
    shows "locally connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1261
using ANR_imp_locally_connected AR_ANR assms by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1262
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1263
lemma ENR_imp_locally_path_connected:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1264
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1265
  assumes "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1266
    shows "locally path_connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1267
by (simp add: ANR_imp_locally_path_connected ENR_imp_ANR assms)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1268
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1269
lemma ENR_imp_locally_connected:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1270
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1271
  assumes "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1272
    shows "locally connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1273
using ANR_imp_locally_connected ENR_ANR assms by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1274
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1275
lemma ANR_Times:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1276
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1277
  assumes "ANR S" "ANR T" shows "ANR(S \<times> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1278
proof (clarsimp simp only: ANR_eq_absolute_neighbourhood_extensor)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1279
  fix f :: " ('a \<times> 'b) \<times> real \<Rightarrow> 'a \<times> 'b" and U C
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1280
  assume "continuous_on C f" and fim: "f ` C \<subseteq> S \<times> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1281
     and cloUC: "closedin (top_of_set U) C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1282
  have contf1: "continuous_on C (fst \<circ> f)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1283
    by (simp add: \<open>continuous_on C f\<close> continuous_on_fst)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1284
  obtain W1 g where "C \<subseteq> W1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1285
               and UW1: "openin (top_of_set U) W1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1286
               and contg: "continuous_on W1 g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1287
               and gim: "g ` W1 \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1288
               and geq: "\<And>x. x \<in> C \<Longrightarrow> g x = (fst \<circ> f) x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1289
    apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR S\<close> contf1 _ cloUC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1290
    using fim apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1291
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1292
  have contf2: "continuous_on C (snd \<circ> f)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1293
    by (simp add: \<open>continuous_on C f\<close> continuous_on_snd)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1294
  obtain W2 h where "C \<subseteq> W2"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1295
               and UW2: "openin (top_of_set U) W2"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1296
               and conth: "continuous_on W2 h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1297
               and him: "h ` W2 \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1298
               and heq: "\<And>x. x \<in> C \<Longrightarrow> h x = (snd \<circ> f) x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1299
    apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR T\<close> contf2 _ cloUC])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1300
    using fim apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1301
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1302
  show "\<exists>V g. C \<subseteq> V \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1303
               openin (top_of_set U) V \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1304
               continuous_on V g \<and> g ` V \<subseteq> S \<times> T \<and> (\<forall>x\<in>C. g x = f x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1305
  proof (intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1306
    show "C \<subseteq> W1 \<inter> W2"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1307
      by (simp add: \<open>C \<subseteq> W1\<close> \<open>C \<subseteq> W2\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1308
    show "openin (top_of_set U) (W1 \<inter> W2)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1309
      by (simp add: UW1 UW2 openin_Int)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1310
    show  "continuous_on (W1 \<inter> W2) (\<lambda>x. (g x, h x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1311
      by (metis (no_types) contg conth continuous_on_Pair continuous_on_subset inf_commute inf_le1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1312
    show  "(\<lambda>x. (g x, h x)) ` (W1 \<inter> W2) \<subseteq> S \<times> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1313
      using gim him by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1314
    show  "(\<forall>x\<in>C. (g x, h x) = f x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1315
      using geq heq by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1316
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1317
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1318
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1319
lemma AR_Times:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1320
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1321
  assumes "AR S" "AR T" shows "AR(S \<times> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1322
  using assms by (simp add: AR_ANR ANR_Times contractible_Times)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1323
71173
caede3159e23 reduced imports and removed unused material
nipkow
parents: 71172
diff changeset
  1324
(* Unused
70642
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1325
subsection\<^marker>\<open>tag unimportant\<close>\<open>Retracts and intervals in ordered euclidean space\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1326
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1327
lemma ANR_interval [iff]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1328
  fixes a :: "'a::ordered_euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1329
  shows "ANR{a..b}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1330
  by (simp add: interval_cbox)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1331
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1332
lemma ENR_interval [iff]:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1333
  fixes a :: "'a::ordered_euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1334
  shows "ENR{a..b}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1335
  by (auto simp: interval_cbox)
71173
caede3159e23 reduced imports and removed unused material
nipkow
parents: 71172
diff changeset
  1336
*)
70642
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1337
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1338
subsection \<open>More advanced properties of ANRs and ENRs\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1339
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1340
lemma ENR_rel_frontier_convex:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1341
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1342
  assumes "bounded S" "convex S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1343
    shows "ENR(rel_frontier S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1344
proof (cases "S = {}")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1345
  case True then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1346
    by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1347
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1348
  case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1349
  with assms have "rel_interior S \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1350
    by (simp add: rel_interior_eq_empty)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1351
  then obtain a where a: "a \<in> rel_interior S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1352
    by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1353
  have ahS: "affine hull S - {a} \<subseteq> {x. closest_point (affine hull S) x \<noteq> a}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1354
    by (auto simp: closest_point_self)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1355
  have "rel_frontier S retract_of affine hull S - {a}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1356
    by (simp add: assms a rel_frontier_retract_of_punctured_affine_hull)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1357
  also have "\<dots> retract_of {x. closest_point (affine hull S) x \<noteq> a}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1358
    apply (simp add: retract_of_def retraction_def ahS)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1359
    apply (rule_tac x="closest_point (affine hull S)" in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1360
    apply (auto simp: False closest_point_self affine_imp_convex closest_point_in_set continuous_on_closest_point)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1361
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1362
  finally have "rel_frontier S retract_of {x. closest_point (affine hull S) x \<noteq> a}" .
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1363
  moreover have "openin (top_of_set UNIV) (UNIV \<inter> closest_point (affine hull S) -` (- {a}))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1364
    apply (rule continuous_openin_preimage_gen)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1365
    apply (auto simp: False affine_imp_convex continuous_on_closest_point)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1366
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1367
  ultimately show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1368
    unfolding ENR_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1369
    apply (rule_tac x = "closest_point (affine hull S) -` (- {a})" in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1370
    apply (simp add: vimage_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1371
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1372
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1373
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1374
lemma ANR_rel_frontier_convex:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1375
                 fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1376
  assumes "bounded S" "convex S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1377
    shows "ANR(rel_frontier S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1378
by (simp add: ENR_imp_ANR ENR_rel_frontier_convex assms)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1379
    
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1380
lemma ENR_closedin_Un_local:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1381
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1382
  shows "\<lbrakk>ENR S; ENR T; ENR(S \<inter> T);
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1383
          closedin (top_of_set (S \<union> T)) S; closedin (top_of_set (S \<union> T)) T\<rbrakk>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1384
        \<Longrightarrow> ENR(S \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1385
by (simp add: ENR_ANR ANR_closed_Un_local locally_compact_closedin_Un)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1386
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1387
lemma ENR_closed_Un:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1388
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1389
  shows "\<lbrakk>closed S; closed T; ENR S; ENR T; ENR(S \<inter> T)\<rbrakk> \<Longrightarrow> ENR(S \<union> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1390
by (auto simp: closed_subset ENR_closedin_Un_local)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1391
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1392
lemma absolute_retract_Un:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1393
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1394
  shows "\<lbrakk>S retract_of UNIV; T retract_of UNIV; (S \<inter> T) retract_of UNIV\<rbrakk>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1395
         \<Longrightarrow> (S \<union> T) retract_of UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1396
  by (meson AR_closed_Un_local_aux closed_subset retract_of_UNIV retract_of_imp_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1397
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1398
lemma retract_from_Un_Int:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1399
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1400
  assumes clS: "closedin (top_of_set (S \<union> T)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1401
      and clT: "closedin (top_of_set (S \<union> T)) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1402
      and Un: "(S \<union> T) retract_of U" and Int: "(S \<inter> T) retract_of T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1403
    shows "S retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1404
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1405
  obtain r where r: "continuous_on T r" "r ` T \<subseteq> S \<inter> T" "\<forall>x\<in>S \<inter> T. r x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1406
    using Int by (auto simp: retraction_def retract_of_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1407
  have "S retract_of S \<union> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1408
    unfolding retraction_def retract_of_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1409
  proof (intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1410
    show "continuous_on (S \<union> T) (\<lambda>x. if x \<in> S then x else r x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1411
      apply (rule continuous_on_cases_local [OF clS clT])
71172
nipkow
parents: 71031
diff changeset
  1412
      using r by (auto)
70642
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1413
  qed (use r in auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1414
  also have "\<dots> retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1415
    by (rule Un)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1416
  finally show ?thesis .
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1417
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1418
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1419
lemma AR_from_Un_Int_local:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1420
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1421
  assumes clS: "closedin (top_of_set (S \<union> T)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1422
      and clT: "closedin (top_of_set (S \<union> T)) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1423
      and Un: "AR(S \<union> T)" and Int: "AR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1424
    shows "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1425
  apply (rule AR_retract_of_AR [OF Un])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1426
  by (meson AR_imp_retract clS clT closedin_closed_subset local.Int retract_from_Un_Int retract_of_refl sup_ge2)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1427
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1428
lemma AR_from_Un_Int_local':
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1429
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1430
  assumes "closedin (top_of_set (S \<union> T)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1431
      and "closedin (top_of_set (S \<union> T)) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1432
      and "AR(S \<union> T)" "AR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1433
    shows "AR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1434
  using AR_from_Un_Int_local [of T S] assms by (simp add: Un_commute Int_commute)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1435
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1436
lemma AR_from_Un_Int:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1437
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1438
  assumes clo: "closed S" "closed T" and Un: "AR(S \<union> T)" and Int: "AR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1439
  shows "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1440
  by (metis AR_from_Un_Int_local [OF _ _ Un Int] Un_commute clo closed_closedin closedin_closed_subset inf_sup_absorb subtopology_UNIV top_greatest)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1441
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1442
lemma ANR_from_Un_Int_local:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1443
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1444
  assumes clS: "closedin (top_of_set (S \<union> T)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1445
      and clT: "closedin (top_of_set (S \<union> T)) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1446
      and Un: "ANR(S \<union> T)" and Int: "ANR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1447
    shows "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1448
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1449
  obtain V where clo: "closedin (top_of_set (S \<union> T)) (S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1450
             and ope: "openin (top_of_set (S \<union> T)) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1451
             and ret: "S \<inter> T retract_of V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1452
    using ANR_imp_neighbourhood_retract [OF Int] by (metis clS clT closedin_Int)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1453
  then obtain r where r: "continuous_on V r" and rim: "r ` V \<subseteq> S \<inter> T" and req: "\<forall>x\<in>S \<inter> T. r x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1454
    by (auto simp: retraction_def retract_of_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1455
  have Vsub: "V \<subseteq> S \<union> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1456
    by (meson ope openin_contains_cball)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1457
  have Vsup: "S \<inter> T \<subseteq> V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1458
    by (simp add: retract_of_imp_subset ret)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1459
  then have eq: "S \<union> V = ((S \<union> T) - T) \<union> V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1460
    by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1461
  have eq': "S \<union> V = S \<union> (V \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1462
    using Vsub by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1463
  have "continuous_on (S \<union> V \<inter> T) (\<lambda>x. if x \<in> S then x else r x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1464
  proof (rule continuous_on_cases_local)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1465
    show "closedin (top_of_set (S \<union> V \<inter> T)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1466
      using clS closedin_subset_trans inf.boundedE by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1467
    show "closedin (top_of_set (S \<union> V \<inter> T)) (V \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1468
      using clT Vsup by (auto simp: closedin_closed)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1469
    show "continuous_on (V \<inter> T) r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1470
      by (meson Int_lower1 continuous_on_subset r)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1471
  qed (use req continuous_on_id in auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1472
  with rim have "S retract_of S \<union> V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1473
    unfolding retraction_def retract_of_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1474
    apply (rule_tac x="\<lambda>x. if x \<in> S then x else r x" in exI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1475
    apply (auto simp: eq')
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1476
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1477
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1478
    using ANR_neighborhood_retract [OF Un]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1479
    using \<open>S \<union> V = S \<union> T - T \<union> V\<close> clT ope by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1480
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1481
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1482
lemma ANR_from_Un_Int:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1483
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1484
  assumes clo: "closed S" "closed T" and Un: "ANR(S \<union> T)" and Int: "ANR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1485
  shows "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1486
  by (metis ANR_from_Un_Int_local [OF _ _ Un Int] Un_commute clo closed_closedin closedin_closed_subset inf_sup_absorb subtopology_UNIV top_greatest)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1487
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1488
lemma ANR_finite_Union_convex_closed:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1489
  fixes \<T> :: "'a::euclidean_space set set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1490
  assumes \<T>: "finite \<T>" and clo: "\<And>C. C \<in> \<T> \<Longrightarrow> closed C" and con: "\<And>C. C \<in> \<T> \<Longrightarrow> convex C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1491
  shows "ANR(\<Union>\<T>)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1492
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1493
  have "ANR(\<Union>\<T>)" if "card \<T> < n" for n
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1494
  using assms that
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1495
  proof (induction n arbitrary: \<T>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1496
    case 0 then show ?case by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1497
  next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1498
    case (Suc n)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1499
    have "ANR(\<Union>\<U>)" if "finite \<U>" "\<U> \<subseteq> \<T>" for \<U>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1500
      using that
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1501
    proof (induction \<U>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1502
      case empty
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1503
      then show ?case  by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1504
    next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1505
      case (insert C \<U>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1506
      have "ANR (C \<union> \<Union>\<U>)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1507
      proof (rule ANR_closed_Un)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1508
        show "ANR (C \<inter> \<Union>\<U>)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1509
          unfolding Int_Union
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1510
        proof (rule Suc)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1511
          show "finite ((\<inter>) C ` \<U>)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1512
            by (simp add: insert.hyps(1))
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1513
          show "\<And>Ca. Ca \<in> (\<inter>) C ` \<U> \<Longrightarrow> closed Ca"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1514
            by (metis (no_types, hide_lams) Suc.prems(2) closed_Int subsetD imageE insert.prems insertI1 insertI2)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1515
          show "\<And>Ca. Ca \<in> (\<inter>) C ` \<U> \<Longrightarrow> convex Ca"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1516
            by (metis (mono_tags, lifting) Suc.prems(3) convex_Int imageE insert.prems insert_subset subsetCE)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1517
          show "card ((\<inter>) C ` \<U>) < n"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1518
          proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1519
            have "card \<T> \<le> n"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1520
              by (meson Suc.prems(4) not_less not_less_eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1521
            then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1522
              by (metis Suc.prems(1) card_image_le card_seteq insert.hyps insert.prems insert_subset le_trans not_less)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1523
          qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1524
        qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1525
        show "closed (\<Union>\<U>)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1526
          using Suc.prems(2) insert.hyps(1) insert.prems by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1527
      qed (use Suc.prems convex_imp_ANR insert.prems insert.IH in auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1528
      then show ?case
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1529
        by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1530
    qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1531
    then show ?case
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1532
      using Suc.prems(1) by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1533
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1534
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1535
    by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1536
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1537
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1538
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1539
lemma finite_imp_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1540
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1541
  assumes "finite S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1542
  shows "ANR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1543
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1544
  have "ANR(\<Union>x \<in> S. {x})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1545
    by (blast intro: ANR_finite_Union_convex_closed assms)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1546
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1547
    by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1548
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1549
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1550
lemma ANR_insert:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1551
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1552
  assumes "ANR S" "closed S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1553
  shows "ANR(insert a S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1554
  by (metis ANR_closed_Un ANR_empty ANR_singleton Diff_disjoint Diff_insert_absorb assms closed_singleton insert_absorb insert_is_Un)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1555
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1556
lemma ANR_path_component_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1557
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1558
  shows "ANR S \<Longrightarrow> ANR(path_component_set S x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1559
  using ANR_imp_locally_path_connected ANR_openin openin_path_component_locally_path_connected by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1560
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1561
lemma ANR_connected_component_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1562
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1563
  shows "ANR S \<Longrightarrow> ANR(connected_component_set S x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1564
  by (metis ANR_openin openin_connected_component_locally_connected ANR_imp_locally_connected)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1565
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1566
lemma ANR_component_ANR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1567
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1568
  assumes "ANR S" "c \<in> components S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1569
  shows "ANR c"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1570
  by (metis ANR_connected_component_ANR assms componentsE)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1571
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1572
subsection\<open>Original ANR material, now for ENRs\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1573
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1574
lemma ENR_bounded:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1575
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1576
  assumes "bounded S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1577
  shows "ENR S \<longleftrightarrow> (\<exists>U. open U \<and> bounded U \<and> S retract_of U)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1578
         (is "?lhs = ?rhs")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1579
proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1580
  obtain r where "0 < r" and r: "S \<subseteq> ball 0 r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1581
    using bounded_subset_ballD assms by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1582
  assume ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1583
  then show ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1584
    apply (clarsimp simp: ENR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1585
    apply (rule_tac x="ball 0 r \<inter> U" in exI, auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1586
    using r retract_of_imp_subset retract_of_subset by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1587
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1588
  assume ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1589
  then show ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1590
    using ENR_def by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1591
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1592
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1593
lemma absolute_retract_imp_AR_gen:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1594
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1595
  assumes "S retract_of T" "convex T" "T \<noteq> {}" "S homeomorphic S'" "closedin (top_of_set U) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1596
  shows "S' retract_of U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1597
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1598
  have "AR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1599
    by (simp add: assms convex_imp_AR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1600
  then have "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1601
    using AR_retract_of_AR assms by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1602
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1603
    using assms AR_imp_absolute_retract by metis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1604
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1605
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1606
lemma absolute_retract_imp_AR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1607
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1608
  assumes "S retract_of UNIV" "S homeomorphic S'" "closed S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1609
  shows "S' retract_of UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1610
  using AR_imp_absolute_retract_UNIV assms retract_of_UNIV by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1611
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1612
lemma homeomorphic_compact_arness:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1613
  fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1614
  assumes "S homeomorphic S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1615
  shows "compact S \<and> S retract_of UNIV \<longleftrightarrow> compact S' \<and> S' retract_of UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1616
  using assms homeomorphic_compactness
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1617
  apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1618
   apply (meson assms compact_AR homeomorphic_AR_iff_AR homeomorphic_compactness)+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1619
  done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1620
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1621
lemma absolute_retract_from_Un_Int:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1622
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1623
  assumes "(S \<union> T) retract_of UNIV" "(S \<inter> T) retract_of UNIV" "closed S" "closed T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1624
  shows "S retract_of UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1625
  using AR_from_Un_Int assms retract_of_UNIV by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1626
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1627
lemma ENR_from_Un_Int_gen:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1628
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1629
  assumes "closedin (top_of_set (S \<union> T)) S" "closedin (top_of_set (S \<union> T)) T" "ENR(S \<union> T)" "ENR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1630
  shows "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1631
  apply (simp add: ENR_ANR)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1632
  using ANR_from_Un_Int_local ENR_ANR assms locally_compact_closedin by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1633
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1634
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1635
lemma ENR_from_Un_Int:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1636
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1637
  assumes "closed S" "closed T" "ENR(S \<union> T)" "ENR(S \<inter> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1638
  shows "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1639
  by (meson ENR_from_Un_Int_gen assms closed_subset sup_ge1 sup_ge2)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1640
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1641
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1642
lemma ENR_finite_Union_convex_closed:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1643
  fixes \<T> :: "'a::euclidean_space set set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1644
  assumes \<T>: "finite \<T>" and clo: "\<And>C. C \<in> \<T> \<Longrightarrow> closed C" and con: "\<And>C. C \<in> \<T> \<Longrightarrow> convex C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1645
  shows "ENR(\<Union> \<T>)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1646
  by (simp add: ENR_ANR ANR_finite_Union_convex_closed \<T> clo closed_Union closed_imp_locally_compact con)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1647
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1648
lemma finite_imp_ENR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1649
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1650
  shows "finite S \<Longrightarrow> ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1651
  by (simp add: ENR_ANR finite_imp_ANR finite_imp_closed closed_imp_locally_compact)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1652
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1653
lemma ENR_insert:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1654
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1655
  assumes "closed S" "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1656
  shows "ENR(insert a S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1657
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1658
  have "ENR ({a} \<union> S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1659
    by (metis ANR_insert ENR_ANR Un_commute Un_insert_right assms closed_imp_locally_compact closed_insert sup_bot_right)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1660
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1661
    by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1662
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1663
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1664
lemma ENR_path_component_ENR:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1665
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1666
  assumes "ENR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1667
  shows "ENR(path_component_set S x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1668
  by (metis ANR_imp_locally_path_connected ENR_empty ENR_imp_ANR ENR_openin assms
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1669
            locally_path_connected_2 openin_subtopology_self path_component_eq_empty)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1670
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1671
(*UNUSED
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1672
lemma ENR_Times:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1673
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1674
  assumes "ENR S" "ENR T" shows "ENR(S \<times> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1675
using assms apply (simp add: ENR_ANR ANR_Times)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1676
thm locally_compact_Times
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1677
oops
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1678
  SIMP_TAC[ENR_ANR; ANR_PCROSS; LOCALLY_COMPACT_PCROSS]);;
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1679
*)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1680
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1681
subsection\<open>Finally, spheres are ANRs and ENRs\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1682
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1683
lemma absolute_retract_homeomorphic_convex_compact:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1684
  fixes S :: "'a::euclidean_space set" and U :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1685
  assumes "S homeomorphic U" "S \<noteq> {}" "S \<subseteq> T" "convex U" "compact U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1686
  shows "S retract_of T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1687
  by (metis UNIV_I assms compact_AR convex_imp_AR homeomorphic_AR_iff_AR homeomorphic_compactness homeomorphic_empty(1) retract_of_subset subsetI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1688
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1689
lemma frontier_retract_of_punctured_universe:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1690
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1691
  assumes "convex S" "bounded S" "a \<in> interior S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1692
  shows "(frontier S) retract_of (- {a})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1693
  using rel_frontier_retract_of_punctured_affine_hull
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1694
  by (metis Compl_eq_Diff_UNIV affine_hull_nonempty_interior assms empty_iff rel_frontier_frontier rel_interior_nonempty_interior)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1695
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1696
lemma sphere_retract_of_punctured_universe_gen:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1697
  fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1698
  assumes "b \<in> ball a r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1699
  shows  "sphere a r retract_of (- {b})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1700
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1701
  have "frontier (cball a r) retract_of (- {b})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1702
    apply (rule frontier_retract_of_punctured_universe)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1703
    using assms by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1704
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1705
    by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1706
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1707
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1708
lemma sphere_retract_of_punctured_universe:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1709
  fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1710
  assumes "0 < r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1711
  shows "sphere a r retract_of (- {a})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1712
  by (simp add: assms sphere_retract_of_punctured_universe_gen)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1713
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1714
lemma ENR_sphere:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1715
  fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1716
  shows "ENR(sphere a r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1717
proof (cases "0 < r")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1718
  case True
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1719
  then have "sphere a r retract_of -{a}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1720
    by (simp add: sphere_retract_of_punctured_universe)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1721
  with open_delete show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1722
    by (auto simp: ENR_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1723
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1724
  case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1725
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1726
    using finite_imp_ENR
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1727
    by (metis finite_insert infinite_imp_nonempty less_linear sphere_eq_empty sphere_trivial)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1728
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1729
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1730
corollary\<^marker>\<open>tag unimportant\<close> ANR_sphere:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1731
  fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1732
  shows "ANR(sphere a r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1733
  by (simp add: ENR_imp_ANR ENR_sphere)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1734
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1735
subsection\<open>Spheres are connected, etc\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1736
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1737
lemma locally_path_connected_sphere_gen:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1738
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1739
  assumes "bounded S" and "convex S" 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1740
  shows "locally path_connected (rel_frontier S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1741
proof (cases "rel_interior S = {}")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1742
  case True
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1743
  with assms show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1744
    by (simp add: rel_interior_eq_empty)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1745
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1746
  case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1747
  then obtain a where a: "a \<in> rel_interior S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1748
    by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1749
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1750
  proof (rule retract_of_locally_path_connected)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1751
    show "locally path_connected (affine hull S - {a})"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1752
      by (meson convex_affine_hull convex_imp_locally_path_connected locally_open_subset openin_delete openin_subtopology_self)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1753
    show "rel_frontier S retract_of affine hull S - {a}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1754
      using a assms rel_frontier_retract_of_punctured_affine_hull by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1755
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1756
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1757
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1758
lemma locally_connected_sphere_gen:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1759
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1760
  assumes "bounded S" and "convex S" 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1761
  shows "locally connected (rel_frontier S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1762
  by (simp add: ANR_imp_locally_connected ANR_rel_frontier_convex assms)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1763
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1764
lemma locally_path_connected_sphere:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1765
  fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1766
  shows "locally path_connected (sphere a r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1767
  using ENR_imp_locally_path_connected ENR_sphere by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1768
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1769
lemma locally_connected_sphere:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1770
  fixes a :: "'a::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1771
  shows "locally connected(sphere a r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1772
  using ANR_imp_locally_connected ANR_sphere by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1773
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1774
subsection\<open>Borsuk homotopy extension theorem\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1775
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1776
text\<open>It's only this late so we can use the concept of retraction,
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1777
  saying that the domain sets or range set are ENRs.\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1778
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1779
theorem Borsuk_homotopy_extension_homotopic:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1780
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1781
  assumes cloTS: "closedin (top_of_set T) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1782
      and anr: "(ANR S \<and> ANR T) \<or> ANR U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1783
      and contf: "continuous_on T f"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1784
      and "f ` T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1785
      and "homotopic_with_canon (\<lambda>x. True) S U f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1786
   obtains g' where "homotopic_with_canon (\<lambda>x. True) T U f g'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1787
                    "continuous_on T g'" "image g' T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1788
                    "\<And>x. x \<in> S \<Longrightarrow> g' x = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1789
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1790
  have "S \<subseteq> T" using assms closedin_imp_subset by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1791
  obtain h where conth: "continuous_on ({0..1} \<times> S) h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1792
             and him: "h ` ({0..1} \<times> S) \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1793
             and [simp]: "\<And>x. h(0, x) = f x" "\<And>x. h(1::real, x) = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1794
       using assms by (auto simp: homotopic_with_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1795
  define h' where "h' \<equiv>  \<lambda>z. if snd z \<in> S then h z else (f \<circ> snd) z"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1796
  define B where "B \<equiv> {0::real} \<times> T \<union> {0..1} \<times> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1797
  have clo0T: "closedin (top_of_set ({0..1} \<times> T)) ({0::real} \<times> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1798
    by (simp add: Abstract_Topology.closedin_Times)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1799
  moreover have cloT1S: "closedin (top_of_set ({0..1} \<times> T)) ({0..1} \<times> S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1800
    by (simp add: Abstract_Topology.closedin_Times assms)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1801
  ultimately have clo0TB:"closedin (top_of_set ({0..1} \<times> T)) B"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1802
    by (auto simp: B_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1803
  have cloBS: "closedin (top_of_set B) ({0..1} \<times> S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1804
    by (metis (no_types) Un_subset_iff B_def closedin_subset_trans [OF cloT1S] clo0TB closedin_imp_subset closedin_self)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1805
  moreover have cloBT: "closedin (top_of_set B) ({0} \<times> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1806
    using \<open>S \<subseteq> T\<close> closedin_subset_trans [OF clo0T]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1807
    by (metis B_def Un_upper1 clo0TB closedin_closed inf_le1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1808
  moreover have "continuous_on ({0} \<times> T) (f \<circ> snd)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1809
    apply (rule continuous_intros)+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1810
    apply (simp add: contf)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1811
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1812
  ultimately have conth': "continuous_on B h'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1813
    apply (simp add: h'_def B_def Un_commute [of "{0} \<times> T"])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1814
    apply (auto intro!: continuous_on_cases_local conth)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1815
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1816
  have "image h' B \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1817
    using \<open>f ` T \<subseteq> U\<close> him by (auto simp: h'_def B_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1818
  obtain V k where "B \<subseteq> V" and opeTV: "openin (top_of_set ({0..1} \<times> T)) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1819
               and contk: "continuous_on V k" and kim: "k ` V \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1820
               and keq: "\<And>x. x \<in> B \<Longrightarrow> k x = h' x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1821
  using anr
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1822
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1823
    assume ST: "ANR S \<and> ANR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1824
    have eq: "({0} \<times> T \<inter> {0..1} \<times> S) = {0::real} \<times> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1825
      using \<open>S \<subseteq> T\<close> by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1826
    have "ANR B"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1827
      apply (simp add: B_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1828
      apply (rule ANR_closed_Un_local)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1829
          apply (metis cloBT B_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1830
         apply (metis Un_commute cloBS B_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1831
        apply (simp_all add: ANR_Times convex_imp_ANR ANR_singleton ST eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1832
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1833
    note Vk = that
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1834
    have *: thesis if "openin (top_of_set ({0..1::real} \<times> T)) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1835
                      "retraction V B r" for V r
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1836
      using that
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1837
      apply (clarsimp simp add: retraction_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1838
      apply (rule Vk [of V "h' \<circ> r"], assumption+)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1839
        apply (metis continuous_on_compose conth' continuous_on_subset) 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1840
      using \<open>h' ` B \<subseteq> U\<close> apply force+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1841
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1842
    show thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1843
        apply (rule ANR_imp_neighbourhood_retract [OF \<open>ANR B\<close> clo0TB])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1844
        apply (auto simp: ANR_Times ANR_singleton ST retract_of_def *)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1845
        done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1846
  next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1847
    assume "ANR U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1848
    with ANR_imp_absolute_neighbourhood_extensor \<open>h' ` B \<subseteq> U\<close> clo0TB conth' that
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1849
    show ?thesis by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1850
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1851
  define S' where "S' \<equiv> {x. \<exists>u::real. u \<in> {0..1} \<and> (u, x::'a) \<in> {0..1} \<times> T - V}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1852
  have "closedin (top_of_set T) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1853
    unfolding S'_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1854
    apply (rule closedin_compact_projection, blast)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1855
    using closedin_self opeTV by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1856
  have S'_def: "S' = {x. \<exists>u::real.  (u, x::'a) \<in> {0..1} \<times> T - V}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1857
    by (auto simp: S'_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1858
  have cloTS': "closedin (top_of_set T) S'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1859
    using S'_def \<open>closedin (top_of_set T) S'\<close> by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1860
  have "S \<inter> S' = {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1861
    using S'_def B_def \<open>B \<subseteq> V\<close> by force
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1862
  obtain a :: "'a \<Rightarrow> real" where conta: "continuous_on T a"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1863
      and "\<And>x. x \<in> T \<Longrightarrow> a x \<in> closed_segment 1 0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1864
      and a1: "\<And>x. x \<in> S \<Longrightarrow> a x = 1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1865
      and a0: "\<And>x. x \<in> S' \<Longrightarrow> a x = 0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1866
    apply (rule Urysohn_local [OF cloTS cloTS' \<open>S \<inter> S' = {}\<close>, of 1 0], blast)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1867
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1868
  then have ain: "\<And>x. x \<in> T \<Longrightarrow> a x \<in> {0..1}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1869
    using closed_segment_eq_real_ivl by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1870
  have inV: "(u * a t, t) \<in> V" if "t \<in> T" "0 \<le> u" "u \<le> 1" for t u
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1871
  proof (rule ccontr)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1872
    assume "(u * a t, t) \<notin> V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1873
    with ain [OF \<open>t \<in> T\<close>] have "a t = 0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1874
      apply simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1875
      apply (rule a0)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1876
      by (metis (no_types, lifting) Diff_iff S'_def SigmaI atLeastAtMost_iff mem_Collect_eq mult_le_one mult_nonneg_nonneg that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1877
    show False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1878
      using B_def \<open>(u * a t, t) \<notin> V\<close> \<open>B \<subseteq> V\<close> \<open>a t = 0\<close> that by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1879
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1880
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1881
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1882
    show hom: "homotopic_with_canon (\<lambda>x. True) T U f (\<lambda>x. k (a x, x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1883
    proof (simp add: homotopic_with, intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1884
      show "continuous_on ({0..1} \<times> T) (k \<circ> (\<lambda>z. (fst z *\<^sub>R (a \<circ> snd) z, snd z)))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1885
        apply (intro continuous_on_compose continuous_intros)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1886
        apply (rule continuous_on_subset [OF conta], force)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1887
        apply (rule continuous_on_subset [OF contk])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1888
        apply (force intro: inV)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1889
        done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1890
      show "(k \<circ> (\<lambda>z. (fst z *\<^sub>R (a \<circ> snd) z, snd z))) ` ({0..1} \<times> T) \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1891
        using inV kim by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1892
      show "\<forall>x\<in>T. (k \<circ> (\<lambda>z. (fst z *\<^sub>R (a \<circ> snd) z, snd z))) (0, x) = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1893
        by (simp add: B_def h'_def keq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1894
      show "\<forall>x\<in>T. (k \<circ> (\<lambda>z. (fst z *\<^sub>R (a \<circ> snd) z, snd z))) (1, x) = k (a x, x)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1895
        by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1896
    qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1897
  show "continuous_on T (\<lambda>x. k (a x, x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1898
    using homotopic_with_imp_continuous_maps [OF hom] by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1899
  show "(\<lambda>x. k (a x, x)) ` T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1900
  proof clarify
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1901
    fix t
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1902
    assume "t \<in> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1903
    show "k (a t, t) \<in> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1904
      by (metis \<open>t \<in> T\<close> image_subset_iff inV kim not_one_le_zero linear mult_cancel_right1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1905
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1906
  show "\<And>x. x \<in> S \<Longrightarrow> k (a x, x) = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1907
    by (simp add: B_def a1 h'_def keq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1908
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1909
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1910
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1911
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1912
corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_ANR_extension:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1913
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1914
  assumes "closed S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1915
      and contf: "continuous_on S f"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1916
      and "ANR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1917
      and fim: "f ` S \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1918
      and "S \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1919
   shows "(\<exists>c. homotopic_with_canon (\<lambda>x. True) S T f (\<lambda>x. c)) \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1920
          (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> T \<and> (\<forall>x \<in> S. g x = f x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1921
       (is "?lhs = ?rhs")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1922
proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1923
  assume ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1924
  then obtain c where c: "homotopic_with_canon (\<lambda>x. True) S T (\<lambda>x. c) f"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1925
    by (blast intro: homotopic_with_symD)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1926
  have "closedin (top_of_set UNIV) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1927
    using \<open>closed S\<close> closed_closedin by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1928
  then obtain g where "continuous_on UNIV g" "range g \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1929
                      "\<And>x. x \<in> S \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1930
    apply (rule Borsuk_homotopy_extension_homotopic [OF _ _ continuous_on_const _ c, where T=UNIV])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1931
    using \<open>ANR T\<close> \<open>S \<noteq> {}\<close> c homotopic_with_imp_subset1 apply fastforce+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1932
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1933
  then show ?rhs by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1934
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1935
  assume ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1936
  then obtain g where "continuous_on UNIV g" "range g \<subseteq> T" "\<And>x. x\<in>S \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1937
    by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1938
  then obtain c where "homotopic_with_canon (\<lambda>h. True) UNIV T g (\<lambda>x. c)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1939
    using nullhomotopic_from_contractible [of UNIV g T] contractible_UNIV by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1940
  then have "homotopic_with_canon (\<lambda>x. True) S T g (\<lambda>x. c)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1941
    by (simp add: homotopic_from_subtopology)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1942
  then show ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1943
    by (force elim: homotopic_with_eq [of _ _ _ g "\<lambda>x. c"] simp: \<open>\<And>x. x \<in> S \<Longrightarrow> g x = f x\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1944
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1945
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1946
corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_rel_frontier_extension:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1947
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1948
  assumes "closed S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1949
      and contf: "continuous_on S f"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1950
      and "convex T" "bounded T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1951
      and fim: "f ` S \<subseteq> rel_frontier T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1952
      and "S \<noteq> {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1953
   shows "(\<exists>c. homotopic_with_canon (\<lambda>x. True) S (rel_frontier T) f (\<lambda>x. c)) \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1954
          (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> rel_frontier T \<and> (\<forall>x \<in> S. g x = f x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1955
by (simp add: nullhomotopic_into_ANR_extension assms ANR_rel_frontier_convex)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1956
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1957
corollary\<^marker>\<open>tag unimportant\<close> nullhomotopic_into_sphere_extension:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1958
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b :: euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1959
  assumes "closed S" and contf: "continuous_on S f"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1960
      and "S \<noteq> {}" and fim: "f ` S \<subseteq> sphere a r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1961
    shows "((\<exists>c. homotopic_with_canon (\<lambda>x. True) S (sphere a r) f (\<lambda>x. c)) \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1962
           (\<exists>g. continuous_on UNIV g \<and> range g \<subseteq> sphere a r \<and> (\<forall>x \<in> S. g x = f x)))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1963
           (is "?lhs = ?rhs")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1964
proof (cases "r = 0")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1965
  case True with fim show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1966
    apply auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1967
    using fim continuous_on_const apply fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1968
    by (metis contf contractible_sing nullhomotopic_into_contractible)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1969
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1970
  case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1971
  then have eq: "sphere a r = rel_frontier (cball a r)" by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1972
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1973
    using fim unfolding eq
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1974
    apply (rule nullhomotopic_into_rel_frontier_extension [OF \<open>closed S\<close> contf convex_cball bounded_cball])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1975
    apply (rule \<open>S \<noteq> {}\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1976
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1977
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1978
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1979
proposition\<^marker>\<open>tag unimportant\<close> Borsuk_map_essential_bounded_component:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1980
  fixes a :: "'a :: euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1981
  assumes "compact S" and "a \<notin> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1982
   shows "bounded (connected_component_set (- S) a) \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1983
          \<not>(\<exists>c. homotopic_with_canon (\<lambda>x. True) S (sphere 0 1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1984
                               (\<lambda>x. inverse(norm(x - a)) *\<^sub>R (x - a)) (\<lambda>x. c))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1985
   (is "?lhs = ?rhs")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1986
proof (cases "S = {}")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1987
  case True then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1988
    by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1989
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1990
  case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1991
  have "closed S" "bounded S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1992
    using \<open>compact S\<close> compact_eq_bounded_closed by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1993
  have s01: "(\<lambda>x. (x - a) /\<^sub>R norm (x - a)) ` S \<subseteq> sphere 0 1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1994
    using \<open>a \<notin> S\<close>  by clarsimp (metis dist_eq_0_iff dist_norm mult.commute right_inverse)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1995
  have aincc: "a \<in> connected_component_set (- S) a"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1996
    by (simp add: \<open>a \<notin> S\<close>)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1997
  obtain r where "r>0" and r: "S \<subseteq> ball 0 r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1998
    using bounded_subset_ballD \<open>bounded S\<close> by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1999
  have "\<not> ?rhs \<longleftrightarrow> \<not> ?lhs"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2000
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2001
    assume notr: "\<not> ?rhs"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2002
    have nog: "\<nexists>g. continuous_on (S \<union> connected_component_set (- S) a) g \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2003
                   g ` (S \<union> connected_component_set (- S) a) \<subseteq> sphere 0 1 \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2004
                   (\<forall>x\<in>S. g x = (x - a) /\<^sub>R norm (x - a))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2005
         if "bounded (connected_component_set (- S) a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2006
      apply (rule non_extensible_Borsuk_map [OF \<open>compact S\<close> componentsI _ aincc])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2007
      using  \<open>a \<notin> S\<close> that by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2008
    obtain g where "range g \<subseteq> sphere 0 1" "continuous_on UNIV g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2009
                        "\<And>x. x \<in> S \<Longrightarrow> g x = (x - a) /\<^sub>R norm (x - a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2010
      using notr
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2011
      by (auto simp: nullhomotopic_into_sphere_extension
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2012
                 [OF \<open>closed S\<close> continuous_on_Borsuk_map [OF \<open>a \<notin> S\<close>] False s01])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2013
    with \<open>a \<notin> S\<close> show  "\<not> ?lhs"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2014
      apply (clarsimp simp: Borsuk_map_into_sphere [of a S, symmetric] dest!: nog)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2015
      apply (drule_tac x=g in spec)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2016
      using continuous_on_subset by fastforce 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2017
  next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2018
    assume "\<not> ?lhs"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2019
    then obtain b where b: "b \<in> connected_component_set (- S) a" and "r \<le> norm b"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2020
      using bounded_iff linear by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2021
    then have bnot: "b \<notin> ball 0 r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2022
      by simp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2023
    have "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) (\<lambda>x. (x - a) /\<^sub>R norm (x - a))
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2024
                                                   (\<lambda>x. (x - b) /\<^sub>R norm (x - b))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2025
      apply (rule Borsuk_maps_homotopic_in_path_component)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2026
      using \<open>closed S\<close> b open_Compl open_path_connected_component apply fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2027
      done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2028
    moreover
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2029
    obtain c where "homotopic_with_canon (\<lambda>x. True) (ball 0 r) (sphere 0 1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2030
                                   (\<lambda>x. inverse (norm (x - b)) *\<^sub>R (x - b)) (\<lambda>x. c)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2031
    proof (rule nullhomotopic_from_contractible)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2032
      show "contractible (ball (0::'a) r)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2033
        by (metis convex_imp_contractible convex_ball)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2034
      show "continuous_on (ball 0 r) (\<lambda>x. inverse(norm (x - b)) *\<^sub>R (x - b))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2035
        by (rule continuous_on_Borsuk_map [OF bnot])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2036
      show "(\<lambda>x. (x - b) /\<^sub>R norm (x - b)) ` ball 0 r \<subseteq> sphere 0 1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2037
        using bnot Borsuk_map_into_sphere by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2038
    qed blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2039
    ultimately have "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1) (\<lambda>x. (x - a) /\<^sub>R norm (x - a)) (\<lambda>x. c)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2040
      by (meson homotopic_with_subset_left homotopic_with_trans r)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2041
    then show "\<not> ?rhs"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2042
      by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2043
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2044
  then show ?thesis by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2045
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2046
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2047
lemma homotopic_Borsuk_maps_in_bounded_component:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2048
  fixes a :: "'a :: euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2049
  assumes "compact S" and "a \<notin> S"and "b \<notin> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2050
      and boc: "bounded (connected_component_set (- S) a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2051
      and hom: "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2052
                               (\<lambda>x. (x - a) /\<^sub>R norm (x - a))
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2053
                               (\<lambda>x. (x - b) /\<^sub>R norm (x - b))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2054
   shows "connected_component (- S) a b"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2055
proof (rule ccontr)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2056
  assume notcc: "\<not> connected_component (- S) a b"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2057
  let ?T = "S \<union> connected_component_set (- S) a"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2058
  have "\<nexists>g. continuous_on (S \<union> connected_component_set (- S) a) g \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2059
            g ` (S \<union> connected_component_set (- S) a) \<subseteq> sphere 0 1 \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2060
            (\<forall>x\<in>S. g x = (x - a) /\<^sub>R norm (x - a))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2061
    by (simp add: \<open>a \<notin> S\<close> componentsI non_extensible_Borsuk_map [OF \<open>compact S\<close> _ boc])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2062
  moreover obtain g where "continuous_on (S \<union> connected_component_set (- S) a) g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2063
                          "g ` (S \<union> connected_component_set (- S) a) \<subseteq> sphere 0 1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2064
                          "\<And>x. x \<in> S \<Longrightarrow> g x = (x - a) /\<^sub>R norm (x - a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2065
  proof (rule Borsuk_homotopy_extension_homotopic)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2066
    show "closedin (top_of_set ?T) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2067
      by (simp add: \<open>compact S\<close> closed_subset compact_imp_closed)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2068
    show "continuous_on ?T (\<lambda>x. (x - b) /\<^sub>R norm (x - b))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2069
      by (simp add: \<open>b \<notin> S\<close> notcc continuous_on_Borsuk_map)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2070
    show "(\<lambda>x. (x - b) /\<^sub>R norm (x - b)) ` ?T \<subseteq> sphere 0 1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2071
      by (simp add: \<open>b \<notin> S\<close> notcc Borsuk_map_into_sphere)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2072
    show "homotopic_with_canon (\<lambda>x. True) S (sphere 0 1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2073
             (\<lambda>x. (x - b) /\<^sub>R norm (x - b)) (\<lambda>x. (x - a) /\<^sub>R norm (x - a))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2074
      by (simp add: hom homotopic_with_symD)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2075
    qed (auto simp: ANR_sphere intro: that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2076
  ultimately show False by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2077
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2078
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2079
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2080
lemma Borsuk_maps_homotopic_in_connected_component_eq:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2081
  fixes a :: "'a :: euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2082
  assumes S: "compact S" "a \<notin> S" "b \<notin> S" and 2: "2 \<le> DIM('a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2083
    shows "(homotopic_with_canon (\<lambda>x. True) S (sphere 0 1)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2084
                   (\<lambda>x. (x - a) /\<^sub>R norm (x - a))
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2085
                   (\<lambda>x. (x - b) /\<^sub>R norm (x - b)) \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2086
           connected_component (- S) a b)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2087
         (is "?lhs = ?rhs")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2088
proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2089
  assume L: ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2090
  show ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2091
  proof (cases "bounded(connected_component_set (- S) a)")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2092
    case True
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2093
    show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2094
      by (rule homotopic_Borsuk_maps_in_bounded_component [OF S True L])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2095
  next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2096
    case not_bo_a: False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2097
    show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2098
    proof (cases "bounded(connected_component_set (- S) b)")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2099
      case True
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2100
      show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2101
        using homotopic_Borsuk_maps_in_bounded_component [OF S]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2102
        by (simp add: L True assms connected_component_sym homotopic_Borsuk_maps_in_bounded_component homotopic_with_sym)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2103
    next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2104
      case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2105
      then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2106
        using cobounded_unique_unbounded_component [of "-S" a b] \<open>compact S\<close> not_bo_a
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2107
        by (auto simp: compact_eq_bounded_closed assms connected_component_eq_eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2108
    qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2109
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2110
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2111
  assume R: ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2112
  then have "path_component (- S) a b"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2113
    using assms(1) compact_eq_bounded_closed open_Compl open_path_connected_component_set by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2114
  then show ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2115
    by (simp add: Borsuk_maps_homotopic_in_path_component)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2116
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2117
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2118
subsection\<open>More extension theorems\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2119
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2120
lemma extension_from_clopen:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2121
  assumes ope: "openin (top_of_set S) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2122
      and clo: "closedin (top_of_set S) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2123
      and contf: "continuous_on T f" and fim: "f ` T \<subseteq> U" and null: "U = {} \<Longrightarrow> S = {}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2124
 obtains g where "continuous_on S g" "g ` S \<subseteq> U" "\<And>x. x \<in> T \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2125
proof (cases "U = {}")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2126
  case True
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2127
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2128
    by (simp add: null that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2129
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2130
  case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2131
  then obtain a where "a \<in> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2132
    by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2133
  let ?g = "\<lambda>x. if x \<in> T then f x else a"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2134
  have Seq: "S = T \<union> (S - T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2135
    using clo closedin_imp_subset by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2136
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2137
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2138
    have "continuous_on (T \<union> (S - T)) ?g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2139
      apply (rule continuous_on_cases_local)
71172
nipkow
parents: 71031
diff changeset
  2140
      using Seq clo ope by (auto simp: contf intro: continuous_on_cases_local)
70642
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2141
    with Seq show "continuous_on S ?g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2142
      by metis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2143
    show "?g ` S \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2144
      using \<open>a \<in> U\<close> fim by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2145
    show "\<And>x. x \<in> T \<Longrightarrow> ?g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2146
      by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2147
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2148
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2149
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2150
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2151
lemma extension_from_component:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2152
  fixes f :: "'a :: euclidean_space \<Rightarrow> 'b :: euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2153
  assumes S: "locally connected S \<or> compact S" and "ANR U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2154
     and C: "C \<in> components S" and contf: "continuous_on C f" and fim: "f ` C \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2155
 obtains g where "continuous_on S g" "g ` S \<subseteq> U" "\<And>x. x \<in> C \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2156
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2157
  obtain T g where ope: "openin (top_of_set S) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2158
               and clo: "closedin (top_of_set S) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2159
               and "C \<subseteq> T" and contg: "continuous_on T g" and gim: "g ` T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2160
               and gf: "\<And>x. x \<in> C \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2161
    using S
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2162
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2163
    assume "locally connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2164
    show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2165
      by (metis C \<open>locally connected S\<close> openin_components_locally_connected closedin_component contf fim order_refl that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2166
  next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2167
    assume "compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2168
    then obtain W g where "C \<subseteq> W" and opeW: "openin (top_of_set S) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2169
                 and contg: "continuous_on W g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2170
                 and gim: "g ` W \<subseteq> U" and gf: "\<And>x. x \<in> C \<Longrightarrow> g x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2171
      using ANR_imp_absolute_neighbourhood_extensor [of U C f S] C \<open>ANR U\<close> closedin_component contf fim by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2172
    then obtain V where "open V" and V: "W = S \<inter> V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2173
      by (auto simp: openin_open)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2174
    moreover have "locally compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2175
      by (simp add: \<open>compact S\<close> closed_imp_locally_compact compact_imp_closed)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2176
    ultimately obtain K where opeK: "openin (top_of_set S) K" and "compact K" "C \<subseteq> K" "K \<subseteq> V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2177
      by (metis C Int_subset_iff \<open>C \<subseteq> W\<close> \<open>compact S\<close> compact_components Sura_Bura_clopen_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2178
    show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2179
    proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2180
      show "closedin (top_of_set S) K"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2181
        by (meson \<open>compact K\<close> \<open>compact S\<close> closedin_compact_eq opeK openin_imp_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2182
      show "continuous_on K g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2183
        by (metis Int_subset_iff V \<open>K \<subseteq> V\<close> contg continuous_on_subset opeK openin_subtopology subset_eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2184
      show "g ` K \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2185
        using V \<open>K \<subseteq> V\<close> gim opeK openin_imp_subset by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2186
    qed (use opeK gf \<open>C \<subseteq> K\<close> in auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2187
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2188
  obtain h where "continuous_on S h" "h ` S \<subseteq> U" "\<And>x. x \<in> T \<Longrightarrow> h x = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2189
    using extension_from_clopen
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2190
    by (metis C bot.extremum_uniqueI clo contg gim fim image_is_empty in_components_nonempty ope)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2191
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2192
    by (metis \<open>C \<subseteq> T\<close> gf subset_eq that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2193
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2194
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2195
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2196
lemma tube_lemma:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2197
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2198
  assumes "compact S" and S: "S \<noteq> {}" "(\<lambda>x. (x,a)) ` S \<subseteq> U" 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2199
      and ope: "openin (top_of_set (S \<times> T)) U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2200
  obtains V where "openin (top_of_set T) V" "a \<in> V" "S \<times> V \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2201
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2202
  let ?W = "{y. \<exists>x. x \<in> S \<and> (x, y) \<in> (S \<times> T - U)}"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2203
  have "U \<subseteq> S \<times> T" "closedin (top_of_set (S \<times> T)) (S \<times> T - U)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2204
    using ope by (auto simp: openin_closedin_eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2205
  then have "closedin (top_of_set T) ?W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2206
    using \<open>compact S\<close> closedin_compact_projection by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2207
  moreover have "a \<in> T - ?W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2208
    using \<open>U \<subseteq> S \<times> T\<close> S by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2209
  moreover have "S \<times> (T - ?W) \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2210
    by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2211
  ultimately show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2212
    by (metis (no_types, lifting) Sigma_cong closedin_def that topspace_euclidean_subtopology)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2213
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2214
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2215
lemma tube_lemma_gen:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2216
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2217
  assumes "compact S" "S \<noteq> {}" "T \<subseteq> T'" "S \<times> T \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2218
      and ope: "openin (top_of_set (S \<times> T')) U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2219
  obtains V where "openin (top_of_set T') V" "T \<subseteq> V" "S \<times> V \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2220
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2221
  have "\<And>x. x \<in> T \<Longrightarrow> \<exists>V. openin (top_of_set T') V \<and> x \<in> V \<and> S \<times> V \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2222
    using assms by (auto intro:  tube_lemma [OF \<open>compact S\<close>])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2223
  then obtain F where F: "\<And>x. x \<in> T \<Longrightarrow> openin (top_of_set T') (F x) \<and> x \<in> F x \<and> S \<times> F x \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2224
    by metis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2225
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2226
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2227
    show "openin (top_of_set T') (\<Union>(F ` T))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2228
      using F by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2229
    show "T \<subseteq> \<Union>(F ` T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2230
      using F by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2231
    show "S \<times> \<Union>(F ` T) \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2232
      using F by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2233
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2234
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2235
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2236
proposition\<^marker>\<open>tag unimportant\<close> homotopic_neighbourhood_extension:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2237
  fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2238
  assumes contf: "continuous_on S f" and fim: "f ` S \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2239
      and contg: "continuous_on S g" and gim: "g ` S \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2240
      and clo: "closedin (top_of_set S) T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2241
      and "ANR U" and hom: "homotopic_with_canon (\<lambda>x. True) T U f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2242
    obtains V where "T \<subseteq> V" "openin (top_of_set S) V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2243
                    "homotopic_with_canon (\<lambda>x. True) V U f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2244
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2245
  have "T \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2246
    using clo closedin_imp_subset by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2247
  obtain h where conth: "continuous_on ({0..1::real} \<times> T) h"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2248
             and him: "h ` ({0..1} \<times> T) \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2249
             and h0: "\<And>x. h(0, x) = f x" and h1: "\<And>x. h(1, x) = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2250
    using hom by (auto simp: homotopic_with_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2251
  define h' where "h' \<equiv> \<lambda>z. if fst z \<in> {0} then f(snd z)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2252
                             else if fst z \<in> {1} then g(snd z)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2253
                             else h z"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2254
  let ?S0 = "{0::real} \<times> S" and ?S1 = "{1::real} \<times> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2255
  have "continuous_on(?S0 \<union> (?S1 \<union> {0..1} \<times> T)) h'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2256
    unfolding h'_def
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2257
  proof (intro continuous_on_cases_local)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2258
    show "closedin (top_of_set (?S0 \<union> (?S1 \<union> {0..1} \<times> T))) ?S0"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2259
         "closedin (top_of_set (?S1 \<union> {0..1} \<times> T)) ?S1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2260
      using \<open>T \<subseteq> S\<close> by (force intro: closedin_Times closedin_subset_trans [of "{0..1} \<times> S"])+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2261
    show "closedin (top_of_set (?S0 \<union> (?S1 \<union> {0..1} \<times> T))) (?S1 \<union> {0..1} \<times> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2262
         "closedin (top_of_set (?S1 \<union> {0..1} \<times> T)) ({0..1} \<times> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2263
      using \<open>T \<subseteq> S\<close> by (force intro: clo closedin_Times closedin_subset_trans [of "{0..1} \<times> S"])+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2264
    show "continuous_on (?S0) (\<lambda>x. f (snd x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2265
      by (intro continuous_intros continuous_on_compose2 [OF contf]) auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2266
    show "continuous_on (?S1) (\<lambda>x. g (snd x))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2267
      by (intro continuous_intros continuous_on_compose2 [OF contg]) auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2268
  qed (use h0 h1 conth in auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2269
  then have "continuous_on ({0,1} \<times> S \<union> ({0..1} \<times> T)) h'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2270
    by (metis Sigma_Un_distrib1 Un_assoc insert_is_Un) 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2271
  moreover have "h' ` ({0,1} \<times> S \<union> {0..1} \<times> T) \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2272
    using fim gim him \<open>T \<subseteq> S\<close> unfolding h'_def by force
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2273
  moreover have "closedin (top_of_set ({0..1::real} \<times> S)) ({0,1} \<times> S \<union> {0..1::real} \<times> T)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2274
    by (intro closedin_Times closedin_Un clo) (simp_all add: closed_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2275
  ultimately
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2276
  obtain W k where W: "({0,1} \<times> S) \<union> ({0..1} \<times> T) \<subseteq> W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2277
               and opeW: "openin (top_of_set ({0..1} \<times> S)) W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2278
               and contk: "continuous_on W k"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2279
               and kim: "k ` W \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2280
               and kh': "\<And>x. x \<in> ({0,1} \<times> S) \<union> ({0..1} \<times> T) \<Longrightarrow> k x = h' x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2281
    by (metis ANR_imp_absolute_neighbourhood_extensor [OF \<open>ANR U\<close>, of "({0,1} \<times> S) \<union> ({0..1} \<times> T)" h' "{0..1} \<times> S"])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2282
  obtain T' where opeT': "openin (top_of_set S) T'" 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2283
              and "T \<subseteq> T'" and TW: "{0..1} \<times> T' \<subseteq> W"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2284
    using tube_lemma_gen [of "{0..1::real}" T S W] W \<open>T \<subseteq> S\<close> opeW by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2285
  moreover have "homotopic_with_canon (\<lambda>x. True) T' U f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2286
  proof (simp add: homotopic_with, intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2287
    show "continuous_on ({0..1} \<times> T') k"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2288
      using TW continuous_on_subset contk by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2289
    show "k ` ({0..1} \<times> T') \<subseteq> U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2290
      using TW kim by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2291
    have "T' \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2292
      by (meson opeT' subsetD openin_imp_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2293
    then show "\<forall>x\<in>T'. k (0, x) = f x" "\<forall>x\<in>T'. k (1, x) = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2294
      by (auto simp: kh' h'_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2295
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2296
  ultimately show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2297
    by (blast intro: that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2298
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2299
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2300
text\<open> Homotopy on a union of closed-open sets.\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2301
proposition\<^marker>\<open>tag unimportant\<close> homotopic_on_clopen_Union:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2302
  fixes \<F> :: "'a::euclidean_space set set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2303
  assumes "\<And>S. S \<in> \<F> \<Longrightarrow> closedin (top_of_set (\<Union>\<F>)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2304
      and "\<And>S. S \<in> \<F> \<Longrightarrow> openin (top_of_set (\<Union>\<F>)) S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2305
      and "\<And>S. S \<in> \<F> \<Longrightarrow> homotopic_with_canon (\<lambda>x. True) S T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2306
  shows "homotopic_with_canon (\<lambda>x. True) (\<Union>\<F>) T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2307
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2308
  obtain \<V> where "\<V> \<subseteq> \<F>" "countable \<V>" and eqU: "\<Union>\<V> = \<Union>\<F>"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2309
    using Lindelof_openin assms by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2310
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2311
  proof (cases "\<V> = {}")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2312
    case True
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2313
    then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2314
      by (metis Union_empty eqU homotopic_with_canon_on_empty)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2315
  next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2316
    case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2317
    then obtain V :: "nat \<Rightarrow> 'a set" where V: "range V = \<V>"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2318
      using range_from_nat_into \<open>countable \<V>\<close> by metis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2319
    with \<open>\<V> \<subseteq> \<F>\<close> have clo: "\<And>n. closedin (top_of_set (\<Union>\<F>)) (V n)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2320
                  and ope: "\<And>n. openin (top_of_set (\<Union>\<F>)) (V n)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2321
                  and hom: "\<And>n. homotopic_with_canon (\<lambda>x. True) (V n) T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2322
      using assms by auto 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2323
    then obtain h where conth: "\<And>n. continuous_on ({0..1::real} \<times> V n) (h n)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2324
                  and him: "\<And>n. h n ` ({0..1} \<times> V n) \<subseteq> T" 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2325
                  and h0: "\<And>n. \<And>x. x \<in> V n \<Longrightarrow> h n (0, x) = f x" 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2326
                  and h1: "\<And>n. \<And>x. x \<in> V n \<Longrightarrow> h n (1, x) = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2327
      by (simp add: homotopic_with) metis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2328
    have wop: "b \<in> V x \<Longrightarrow> \<exists>k. b \<in> V k \<and> (\<forall>j<k. b \<notin> V j)" for b x
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2329
        using nat_less_induct [where P = "\<lambda>i. b \<notin> V i"] by meson
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2330
    obtain \<zeta> where cont: "continuous_on ({0..1} \<times> \<Union>(V ` UNIV)) \<zeta>"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2331
              and eq: "\<And>x i. \<lbrakk>x \<in> {0..1} \<times> \<Union>(V ` UNIV) \<inter>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2332
                                   {0..1} \<times> (V i - (\<Union>m<i. V m))\<rbrakk> \<Longrightarrow> \<zeta> x = h i x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2333
    proof (rule pasting_lemma_exists)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2334
      let ?X = "top_of_set ({0..1::real} \<times> \<Union>(range V))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2335
      show "topspace ?X \<subseteq> (\<Union>i. {0..1::real} \<times> (V i - (\<Union>m<i. V m)))"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2336
        by (force simp: Ball_def dest: wop)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2337
      show "openin (top_of_set ({0..1} \<times> \<Union>(V ` UNIV))) 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2338
                   ({0..1::real} \<times> (V i - (\<Union>m<i. V m)))" for i
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2339
      proof (intro openin_Times openin_subtopology_self openin_diff)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2340
        show "openin (top_of_set (\<Union>(V ` UNIV))) (V i)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2341
          using ope V eqU by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2342
        show "closedin (top_of_set (\<Union>(V ` UNIV))) (\<Union>m<i. V m)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2343
          using V clo eqU by (force intro: closedin_Union)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2344
      qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2345
      show "continuous_map (subtopology ?X ({0..1} \<times> (V i - \<Union> (V ` {..<i})))) euclidean (h i)"  for i
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2346
        by (auto simp add: subtopology_subtopology intro!: continuous_on_subset [OF conth])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2347
      show "\<And>i j x. x \<in> topspace ?X \<inter> {0..1} \<times> (V i - (\<Union>m<i. V m)) \<inter> {0..1} \<times> (V j - (\<Union>m<j. V m))
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2348
                    \<Longrightarrow> h i x = h j x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2349
        by clarsimp (metis lessThan_iff linorder_neqE_nat)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2350
    qed auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2351
    show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2352
    proof (simp add: homotopic_with eqU [symmetric], intro exI conjI ballI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2353
      show "continuous_on ({0..1} \<times> \<Union>\<V>) \<zeta>"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2354
        using V eqU by (blast intro!:  continuous_on_subset [OF cont])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2355
      show "\<zeta>` ({0..1} \<times> \<Union>\<V>) \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2356
      proof clarsimp
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2357
        fix t :: real and y :: "'a" and X :: "'a set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2358
        assume "y \<in> X" "X \<in> \<V>" and t: "0 \<le> t" "t \<le> 1"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2359
        then obtain k where "y \<in> V k" and j: "\<forall>j<k. y \<notin> V j"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2360
          by (metis image_iff V wop)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2361
        with him t show "\<zeta>(t, y) \<in> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2362
          by (subst eq) force+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2363
      qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2364
      fix X y
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2365
      assume "X \<in> \<V>" "y \<in> X"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2366
      then obtain k where "y \<in> V k" and j: "\<forall>j<k. y \<notin> V j"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2367
        by (metis image_iff V wop)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2368
      then show "\<zeta>(0, y) = f y" and "\<zeta>(1, y) = g y"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2369
        by (subst eq [where i=k]; force simp: h0 h1)+ 
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2370
    qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2371
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2372
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2373
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2374
lemma homotopic_on_components_eq:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2375
  fixes S :: "'a :: euclidean_space set" and T :: "'b :: euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2376
  assumes S: "locally connected S \<or> compact S" and "ANR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2377
  shows "homotopic_with_canon (\<lambda>x. True) S T f g \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2378
         (continuous_on S f \<and> f ` S \<subseteq> T \<and> continuous_on S g \<and> g ` S \<subseteq> T) \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2379
         (\<forall>C \<in> components S. homotopic_with_canon (\<lambda>x. True) C T f g)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2380
    (is "?lhs \<longleftrightarrow> ?C \<and> ?rhs")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2381
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2382
  have "continuous_on S f" "f ` S \<subseteq> T" "continuous_on S g" "g ` S \<subseteq> T" if ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2383
    using homotopic_with_imp_continuous homotopic_with_imp_subset1 homotopic_with_imp_subset2 that by blast+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2384
  moreover have "?lhs \<longleftrightarrow> ?rhs"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2385
    if contf: "continuous_on S f" and fim: "f ` S \<subseteq> T" and contg: "continuous_on S g" and gim: "g ` S \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2386
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2387
    assume ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2388
    with that show ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2389
      by (simp add: homotopic_with_subset_left in_components_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2390
  next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2391
    assume R: ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2392
    have "\<exists>U. C \<subseteq> U \<and> closedin (top_of_set S) U \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2393
              openin (top_of_set S) U \<and>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2394
              homotopic_with_canon (\<lambda>x. True) U T f g" if C: "C \<in> components S" for C
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2395
    proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2396
      have "C \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2397
        by (simp add: in_components_subset that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2398
      show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2399
        using S
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2400
      proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2401
        assume "locally connected S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2402
        show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2403
        proof (intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2404
          show "closedin (top_of_set S) C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2405
            by (simp add: closedin_component that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2406
          show "openin (top_of_set S) C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2407
            by (simp add: \<open>locally connected S\<close> openin_components_locally_connected that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2408
          show "homotopic_with_canon (\<lambda>x. True) C T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2409
            by (simp add: R that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2410
        qed auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2411
      next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2412
        assume "compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2413
        have hom: "homotopic_with_canon (\<lambda>x. True) C T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2414
          using R that by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2415
        obtain U where "C \<subseteq> U" and opeU: "openin (top_of_set S) U"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2416
                  and hom: "homotopic_with_canon (\<lambda>x. True) U T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2417
          using homotopic_neighbourhood_extension [OF contf fim contg gim _ \<open>ANR T\<close> hom]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2418
            \<open>C \<in> components S\<close> closedin_component by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2419
        then obtain V where "open V" and V: "U = S \<inter> V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2420
          by (auto simp: openin_open)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2421
        moreover have "locally compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2422
          by (simp add: \<open>compact S\<close> closed_imp_locally_compact compact_imp_closed)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2423
        ultimately obtain K where opeK: "openin (top_of_set S) K" and "compact K" "C \<subseteq> K" "K \<subseteq> V"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2424
          by (metis C Int_subset_iff Sura_Bura_clopen_subset \<open>C \<subseteq> U\<close> \<open>compact S\<close> compact_components)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2425
        show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2426
        proof (intro exI conjI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2427
          show "closedin (top_of_set S) K"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2428
            by (meson \<open>compact K\<close> \<open>compact S\<close> closedin_compact_eq opeK openin_imp_subset)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2429
          show "homotopic_with_canon (\<lambda>x. True) K T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2430
            using V \<open>K \<subseteq> V\<close> hom homotopic_with_subset_left opeK openin_imp_subset by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2431
        qed (use opeK \<open>C \<subseteq> K\<close> in auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2432
      qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2433
    qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2434
    then obtain \<phi> where \<phi>: "\<And>C. C \<in> components S \<Longrightarrow> C \<subseteq> \<phi> C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2435
                  and clo\<phi>: "\<And>C. C \<in> components S \<Longrightarrow> closedin (top_of_set S) (\<phi> C)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2436
                  and ope\<phi>: "\<And>C. C \<in> components S \<Longrightarrow> openin (top_of_set S) (\<phi> C)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2437
                  and hom\<phi>: "\<And>C. C \<in> components S \<Longrightarrow> homotopic_with_canon (\<lambda>x. True) (\<phi> C) T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2438
      by metis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2439
    have Seq: "S = \<Union> (\<phi> ` components S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2440
    proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2441
      show "S \<subseteq> \<Union> (\<phi> ` components S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2442
        by (metis Sup_mono Union_components \<phi> imageI)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2443
      show "\<Union> (\<phi> ` components S) \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2444
        using ope\<phi> openin_imp_subset by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2445
    qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2446
    show ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2447
      apply (subst Seq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2448
      apply (rule homotopic_on_clopen_Union)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2449
      using Seq clo\<phi> ope\<phi> hom\<phi> by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2450
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2451
  ultimately show ?thesis by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2452
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2453
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2454
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2455
lemma cohomotopically_trivial_on_components:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2456
  fixes S :: "'a :: euclidean_space set" and T :: "'b :: euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2457
  assumes S: "locally connected S \<or> compact S" and "ANR T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2458
  shows
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2459
   "(\<forall>f g. continuous_on S f \<longrightarrow> f ` S \<subseteq> T \<longrightarrow> continuous_on S g \<longrightarrow> g ` S \<subseteq> T \<longrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2460
           homotopic_with_canon (\<lambda>x. True) S T f g)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2461
    \<longleftrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2462
    (\<forall>C\<in>components S.
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2463
        \<forall>f g. continuous_on C f \<longrightarrow> f ` C \<subseteq> T \<longrightarrow> continuous_on C g \<longrightarrow> g ` C \<subseteq> T \<longrightarrow>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2464
              homotopic_with_canon (\<lambda>x. True) C T f g)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2465
     (is "?lhs = ?rhs")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2466
proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2467
  assume L[rule_format]: ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2468
  show ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2469
  proof clarify
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2470
    fix C f g
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2471
    assume contf: "continuous_on C f" and fim: "f ` C \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2472
       and contg: "continuous_on C g" and gim: "g ` C \<subseteq> T" and C: "C \<in> components S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2473
    obtain f' where contf': "continuous_on S f'" and f'im: "f' ` S \<subseteq> T" and f'f: "\<And>x. x \<in> C \<Longrightarrow> f' x = f x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2474
      using extension_from_component [OF S \<open>ANR T\<close> C contf fim] by metis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2475
    obtain g' where contg': "continuous_on S g'" and g'im: "g' ` S \<subseteq> T" and g'g: "\<And>x. x \<in> C \<Longrightarrow> g' x = g x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2476
      using extension_from_component [OF S \<open>ANR T\<close> C contg gim] by metis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2477
    have "homotopic_with_canon (\<lambda>x. True) C T f' g'"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2478
      using L [OF contf' f'im contg' g'im] homotopic_with_subset_left C in_components_subset by fastforce
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2479
    then show "homotopic_with_canon (\<lambda>x. True) C T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2480
      using f'f g'g homotopic_with_eq by force
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2481
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2482
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2483
  assume R [rule_format]: ?rhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2484
  show ?lhs
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2485
  proof clarify
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2486
    fix f g
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2487
    assume contf: "continuous_on S f" and fim: "f ` S \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2488
      and contg: "continuous_on S g" and gim: "g ` S \<subseteq> T"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2489
    moreover have "homotopic_with_canon (\<lambda>x. True) C T f g" if "C \<in> components S" for C
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2490
      using R [OF that]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2491
      by (meson contf contg continuous_on_subset fim gim image_mono in_components_subset order.trans that)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2492
    ultimately show "homotopic_with_canon (\<lambda>x. True) S T f g"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2493
      by (subst homotopic_on_components_eq [OF S \<open>ANR T\<close>]) auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2494
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2495
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2496
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2497
subsection\<open>The complement of a set and path-connectedness\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2498
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2499
text\<open>Complement in dimension N > 1 of set homeomorphic to any interval in
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2500
 any dimension is (path-)connected. This naively generalizes the argument
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2501
 in Ryuji Maehara's paper "The Jordan curve theorem via the Brouwer fixed point theorem",
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2502
American Mathematical Monthly 1984.\<close>
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2503
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2504
lemma unbounded_components_complement_absolute_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2505
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2506
  assumes C: "C \<in> components(- S)" and S: "compact S" "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2507
    shows "\<not> bounded C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2508
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2509
  obtain y where y: "C = connected_component_set (- S) y" and "y \<notin> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2510
    using C by (auto simp: components_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2511
  have "open(- S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2512
    using S by (simp add: closed_open compact_eq_bounded_closed)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2513
  have "S retract_of UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2514
    using S compact_AR by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2515
  then obtain r where contr: "continuous_on UNIV r" and ontor: "range r \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2516
                  and r: "\<And>x. x \<in> S \<Longrightarrow> r x = x"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2517
    by (auto simp: retract_of_def retraction_def)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2518
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2519
  proof
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2520
    assume "bounded C"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2521
    have "connected_component_set (- S) y \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2522
    proof (rule frontier_subset_retraction)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2523
      show "bounded (connected_component_set (- S) y)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2524
        using \<open>bounded C\<close> y by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2525
      show "frontier (connected_component_set (- S) y) \<subseteq> S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2526
        using C \<open>compact S\<close> compact_eq_bounded_closed frontier_of_components_closed_complement y by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2527
      show "continuous_on (closure (connected_component_set (- S) y)) r"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2528
        by (blast intro: continuous_on_subset [OF contr])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2529
    qed (use ontor r in auto)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2530
    with \<open>y \<notin> S\<close> show False by force
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2531
  qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2532
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2533
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2534
lemma connected_complement_absolute_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2535
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2536
  assumes S: "compact S" "AR S" and 2: "2 \<le> DIM('a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2537
    shows "connected(- S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2538
proof -
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2539
  have "S retract_of UNIV"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2540
    using S compact_AR by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2541
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2542
    apply (clarsimp simp: connected_iff_connected_component_eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2543
    apply (rule cobounded_unique_unbounded_component [OF _ 2])
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2544
      apply (simp add: \<open>compact S\<close> compact_imp_bounded)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2545
     apply (meson ComplI S componentsI unbounded_components_complement_absolute_retract)+
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2546
    done
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2547
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2548
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2549
lemma path_connected_complement_absolute_retract:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2550
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2551
  assumes "compact S" "AR S" "2 \<le> DIM('a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2552
    shows "path_connected(- S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2553
  using connected_complement_absolute_retract [OF assms]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2554
  using \<open>compact S\<close> compact_eq_bounded_closed connected_open_path_connected by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2555
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2556
theorem connected_complement_homeomorphic_convex_compact:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2557
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2558
  assumes hom: "S homeomorphic T" and T: "convex T" "compact T" and 2: "2 \<le> DIM('a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2559
    shows "connected(- S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2560
proof (cases "S = {}")
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2561
  case True
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2562
  then show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2563
    by (simp add: connected_UNIV)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2564
next
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2565
  case False
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2566
  show ?thesis
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2567
  proof (rule connected_complement_absolute_retract)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2568
    show "compact S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2569
      using \<open>compact T\<close> hom homeomorphic_compactness by auto
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2570
    show "AR S"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2571
      by (meson AR_ANR False \<open>convex T\<close> convex_imp_ANR convex_imp_contractible hom homeomorphic_ANR_iff_ANR homeomorphic_contractible_eq)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2572
  qed (rule 2)
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2573
qed
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2574
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2575
corollary path_connected_complement_homeomorphic_convex_compact:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2576
  fixes S :: "'a::euclidean_space set" and T :: "'b::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2577
  assumes hom: "S homeomorphic T" "convex T" "compact T" "2 \<le> DIM('a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2578
    shows "path_connected(- S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2579
  using connected_complement_homeomorphic_convex_compact [OF assms]
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2580
  using \<open>compact T\<close> compact_eq_bounded_closed connected_open_path_connected hom homeomorphic_compactness by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2581
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2582
lemma path_connected_complement_homeomorphic_interval:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2583
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2584
  assumes "S homeomorphic cbox a b" "2 \<le> DIM('a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2585
  shows "path_connected(-S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2586
  using assms compact_cbox convex_box(1) path_connected_complement_homeomorphic_convex_compact by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2587
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2588
lemma connected_complement_homeomorphic_interval:
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2589
  fixes S :: "'a::euclidean_space set"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2590
  assumes "S homeomorphic cbox a b" "2 \<le> DIM('a)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2591
  shows "connected(-S)"
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2592
  using assms path_connected_complement_homeomorphic_interval path_connected_imp_connected by blast
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2593
71184
d62fdaafdafc renamed Analysis/Winding_Numbers to Winding_Numbers_2; reorganised Analysis/Cauchy_Integral_Theorem by splitting it into Contour_Integration, Winding_Numbers,Cauchy_Integral_Theorem and Cauchy_Integral_Formula.
Wenda Li <wl302@cam.ac.uk>
parents: 71173
diff changeset
  2594
70642
de9c4ed2d5df Half of Brouwer_Fixpoint split off to form a separate theory: Retracts.
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2595
end