src/HOL/Analysis/Locally.thy
author wenzelm
Sat, 01 Jun 2019 11:29:59 +0200
changeset 70299 83774d669b51
parent 69945 35ba13ac6e5c
child 71137 3c0a26b8b49a
permissions -rw-r--r--
Added tag Isabelle2019-RC4 for changeset ad2d84c42380
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69945
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     1
section \<open>Neigbourhood bases and Locally path-connected spaces\<close>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     2
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     3
theory Locally
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     4
  imports
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     5
    Path_Connected Function_Topology
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     6
begin
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     7
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     8
subsection\<open>Neigbourhood bases (useful for "local" properties of various kinds)\<close>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    10
definition neighbourhood_base_at where
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    11
 "neighbourhood_base_at x P X \<equiv>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    12
        \<forall>W. openin X W \<and> x \<in> W
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    13
            \<longrightarrow> (\<exists>U V. openin X U \<and> P V \<and> x \<in> U \<and> U \<subseteq> V \<and> V \<subseteq> W)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    14
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    15
definition neighbourhood_base_of where
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    16
 "neighbourhood_base_of P X \<equiv>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    17
        \<forall>x \<in> topspace X. neighbourhood_base_at x P X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    18
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    19
lemma neighbourhood_base_of:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    20
   "neighbourhood_base_of P X \<longleftrightarrow>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    21
        (\<forall>W x. openin X W \<and> x \<in> W
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    22
          \<longrightarrow> (\<exists>U V. openin X U \<and> P V \<and> x \<in> U \<and> U \<subseteq> V \<and> V \<subseteq> W))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    23
  unfolding neighbourhood_base_at_def neighbourhood_base_of_def
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    24
  using openin_subset by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    25
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    26
lemma neighbourhood_base_at_mono:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    27
   "\<lbrakk>neighbourhood_base_at x P X; \<And>S. \<lbrakk>P S; x \<in> S\<rbrakk> \<Longrightarrow> Q S\<rbrakk> \<Longrightarrow> neighbourhood_base_at x Q X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    28
  unfolding neighbourhood_base_at_def
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    29
  by (meson subset_eq)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    30
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    31
lemma neighbourhood_base_of_mono:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    32
   "\<lbrakk>neighbourhood_base_of P X; \<And>S. P S \<Longrightarrow> Q S\<rbrakk> \<Longrightarrow> neighbourhood_base_of Q X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    33
  unfolding neighbourhood_base_of_def
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    34
  using neighbourhood_base_at_mono by force
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    35
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    36
lemma open_neighbourhood_base_at:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    37
   "(\<And>S. \<lbrakk>P S; x \<in> S\<rbrakk> \<Longrightarrow> openin X S)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    38
        \<Longrightarrow> neighbourhood_base_at x P X \<longleftrightarrow> (\<forall>W. openin X W \<and> x \<in> W \<longrightarrow> (\<exists>U. P U \<and> x \<in> U \<and> U \<subseteq> W))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    39
  unfolding neighbourhood_base_at_def
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    40
  by (meson subsetD)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    41
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    42
lemma open_neighbourhood_base_of:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    43
  "(\<forall>S. P S \<longrightarrow> openin X S)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    44
        \<Longrightarrow> neighbourhood_base_of P X \<longleftrightarrow> (\<forall>W x. openin X W \<and> x \<in> W \<longrightarrow> (\<exists>U. P U \<and> x \<in> U \<and> U \<subseteq> W))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    45
  apply (simp add: neighbourhood_base_of, safe, blast)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    46
  by meson
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    47
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    48
lemma neighbourhood_base_of_open_subset:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    49
   "\<lbrakk>neighbourhood_base_of P X; openin X S\<rbrakk>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    50
        \<Longrightarrow> neighbourhood_base_of P (subtopology X S)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    51
  apply (clarsimp simp add: neighbourhood_base_of openin_subtopology_alt image_def)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    52
  apply (rename_tac x V)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    53
  apply (drule_tac x="S \<inter> V" in spec)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    54
  apply (simp add: Int_ac)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    55
  by (metis IntI le_infI1 openin_Int)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    56
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    57
lemma neighbourhood_base_of_topology_base:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    58
   "openin X = arbitrary union_of (\<lambda>W. W \<in> \<B>)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    59
        \<Longrightarrow> neighbourhood_base_of P X \<longleftrightarrow>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    60
             (\<forall>W x. W \<in> \<B> \<and> x \<in> W  \<longrightarrow> (\<exists>U V. openin X U \<and> P V \<and> x \<in> U \<and> U \<subseteq> V \<and> V \<subseteq> W))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    61
  apply (auto simp: openin_topology_base_unique neighbourhood_base_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    62
  by (meson subset_trans)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    63
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    64
lemma neighbourhood_base_at_unlocalized:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    65
  assumes "\<And>S T. \<lbrakk>P S; openin X T; x \<in> T; T \<subseteq> S\<rbrakk> \<Longrightarrow> P T"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    66
  shows "neighbourhood_base_at x P X
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    67
     \<longleftrightarrow> (x \<in> topspace X \<longrightarrow> (\<exists>U V. openin X U \<and> P V \<and> x \<in> U \<and> U \<subseteq> V \<and> V \<subseteq> topspace X))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    68
         (is "?lhs = ?rhs")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    69
proof
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    70
  assume R: ?rhs show ?lhs
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    71
    unfolding neighbourhood_base_at_def
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    72
  proof clarify
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    73
    fix W
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    74
    assume "openin X W" "x \<in> W"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    75
    then have "x \<in> topspace X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    76
      using openin_subset by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    77
    with R obtain U V where "openin X U" "P V" "x \<in> U" "U \<subseteq> V" "V \<subseteq> topspace X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    78
      by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    79
    then show "\<exists>U V. openin X U \<and> P V \<and> x \<in> U \<and> U \<subseteq> V \<and> V \<subseteq> W"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    80
      by (metis IntI \<open>openin X W\<close> \<open>x \<in> W\<close> assms inf_le1 inf_le2 openin_Int)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    81
  qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    82
qed (simp add: neighbourhood_base_at_def)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    83
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    84
lemma neighbourhood_base_at_with_subset:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    85
   "\<lbrakk>openin X U; x \<in> U\<rbrakk>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    86
        \<Longrightarrow> (neighbourhood_base_at x P X \<longleftrightarrow> neighbourhood_base_at x (\<lambda>T. T \<subseteq> U \<and> P T) X)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    87
  apply (simp add: neighbourhood_base_at_def)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    88
  apply (metis IntI Int_subset_iff openin_Int)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    89
  done
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    90
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    91
lemma neighbourhood_base_of_with_subset:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    92
   "neighbourhood_base_of P X \<longleftrightarrow> neighbourhood_base_of (\<lambda>t. t \<subseteq> topspace X \<and> P t) X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    93
  using neighbourhood_base_at_with_subset
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    94
  by (fastforce simp add: neighbourhood_base_of_def)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    95
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    96
subsection\<open>Locally path-connected spaces\<close>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    97
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    98
definition weakly_locally_path_connected_at
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    99
  where "weakly_locally_path_connected_at x X \<equiv> neighbourhood_base_at x (path_connectedin X) X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   100
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   101
definition locally_path_connected_at
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   102
  where "locally_path_connected_at x X \<equiv>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   103
    neighbourhood_base_at x (\<lambda>U. openin X U \<and> path_connectedin X U) X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   104
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   105
definition locally_path_connected_space
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   106
  where "locally_path_connected_space X \<equiv> neighbourhood_base_of (path_connectedin X) X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   107
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   108
lemma locally_path_connected_space_alt:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   109
  "locally_path_connected_space X \<longleftrightarrow> neighbourhood_base_of (\<lambda>U. openin X U \<and> path_connectedin X U) X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   110
  (is "?P = ?Q")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
  and locally_path_connected_space_eq_open_path_component_of:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
  "locally_path_connected_space X \<longleftrightarrow>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
        (\<forall>U x. openin X U \<and> x \<in> U \<longrightarrow> openin X (Collect (path_component_of (subtopology X U) x)))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   114
  (is "?P = ?R")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   115
proof -
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
  have ?P if ?Q
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   117
    using locally_path_connected_space_def neighbourhood_base_of_mono that by auto
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   118
  moreover have ?R if P: ?P
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   119
  proof -
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   120
    show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   121
    proof clarify
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   122
      fix U y
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   123
      assume "openin X U" "y \<in> U"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   124
      have "\<exists>T. openin X T \<and> x \<in> T \<and> T \<subseteq> Collect (path_component_of (subtopology X U) y)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   125
        if "path_component_of (subtopology X U) y x" for x
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   127
      proof -
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   128
        have "x \<in> U"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   129
          using path_component_of_equiv that topspace_subtopology by fastforce
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   130
        then have "\<exists>Ua. openin X Ua \<and> (\<exists>V. path_connectedin X V \<and> x \<in> Ua \<and> Ua \<subseteq> V \<and> V \<subseteq> U)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   131
      using P
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
      by (simp add: \<open>openin X U\<close> locally_path_connected_space_def neighbourhood_base_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   133
        then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   134
          by (metis dual_order.trans path_component_of_equiv path_component_of_maximal path_connectedin_subtopology subset_iff that)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
      qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   136
      then show "openin X (Collect (path_component_of (subtopology X U) y))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   137
        using openin_subopen by force
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   138
    qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
  qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   140
  moreover have ?Q if ?R
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   141
    using that
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   142
    apply (simp add: open_neighbourhood_base_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
    by (metis mem_Collect_eq openin_subset path_component_of_refl path_connectedin_path_component_of path_connectedin_subtopology that topspace_subtopology_subset)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   144
  ultimately show "?P = ?Q" "?P = ?R"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   145
    by blast+
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   146
qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
lemma locally_path_connected_space:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   149
   "locally_path_connected_space X
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
   \<longleftrightarrow> (\<forall>V x. openin X V \<and> x \<in> V \<longrightarrow> (\<exists>U. openin X U \<and> path_connectedin X U \<and> x \<in> U \<and> U \<subseteq> V))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
  by (simp add: locally_path_connected_space_alt open_neighbourhood_base_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   152
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
lemma locally_path_connected_space_open_path_components:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   154
   "locally_path_connected_space X \<longleftrightarrow>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
        (\<forall>U c. openin X U \<and> c \<in> path_components_of(subtopology X U) \<longrightarrow> openin X c)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   156
  apply (auto simp: locally_path_connected_space_eq_open_path_component_of path_components_of_def topspace_subtopology)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
  by (metis imageI inf.absorb_iff2 openin_closedin_eq)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
lemma openin_path_component_of_locally_path_connected_space:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   160
   "locally_path_connected_space X \<Longrightarrow> openin X (Collect (path_component_of X x))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   161
  apply (auto simp: locally_path_connected_space_eq_open_path_component_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   162
  by (metis openin_empty openin_topspace path_component_of_eq_empty subtopology_topspace)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   163
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   164
lemma openin_path_components_of_locally_path_connected_space:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   165
   "\<lbrakk>locally_path_connected_space X; c \<in> path_components_of X\<rbrakk> \<Longrightarrow> openin X c"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   166
  apply (auto simp: locally_path_connected_space_eq_open_path_component_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   167
  by (metis (no_types, lifting) imageE openin_topspace path_components_of_def subtopology_topspace)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   168
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   169
lemma closedin_path_components_of_locally_path_connected_space:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   170
   "\<lbrakk>locally_path_connected_space X; c \<in> path_components_of X\<rbrakk> \<Longrightarrow> closedin X c"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   171
  by (simp add: closedin_def complement_path_components_of_Union openin_path_components_of_locally_path_connected_space openin_clauses(3) path_components_of_subset)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   172
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   173
lemma closedin_path_component_of_locally_path_connected_space:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   174
  assumes "locally_path_connected_space X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   175
  shows "closedin X (Collect (path_component_of X x))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   176
proof (cases "x \<in> topspace X")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   177
  case True
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   178
  then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   179
    by (simp add: assms closedin_path_components_of_locally_path_connected_space path_component_in_path_components_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   180
next
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   181
  case False
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   182
  then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   183
    by (metis closedin_empty path_component_of_eq_empty)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   184
qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   185
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   186
lemma weakly_locally_path_connected_at:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   187
   "weakly_locally_path_connected_at x X \<longleftrightarrow>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   188
    (\<forall>V. openin X V \<and> x \<in> V
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   189
          \<longrightarrow> (\<exists>U. openin X U \<and> x \<in> U \<and> U \<subseteq> V \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   190
                  (\<forall>y \<in> U. \<exists>C. path_connectedin X C \<and> C \<subseteq> V \<and> x \<in> C \<and> y \<in> C)))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   191
         (is "?lhs = ?rhs")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   192
proof
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   193
  assume ?lhs then show ?rhs
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   194
    apply (simp add: weakly_locally_path_connected_at_def neighbourhood_base_at_def)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   195
    by (meson order_trans subsetD)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   196
next
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   197
  have *: "\<exists>V. path_connectedin X V \<and> U \<subseteq> V \<and> V \<subseteq> W"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   198
    if "(\<forall>y\<in>U. \<exists>C. path_connectedin X C \<and> C \<subseteq> W \<and> x \<in> C \<and> y \<in> C)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   199
    for W U
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   200
  proof (intro exI conjI)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   201
    let ?V = "(Collect (path_component_of (subtopology X W) x))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   202
      show "path_connectedin X (Collect (path_component_of (subtopology X W) x))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   203
        by (meson path_connectedin_path_component_of path_connectedin_subtopology)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   204
      show "U \<subseteq> ?V"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   205
        by (auto simp: path_component_of path_connectedin_subtopology that)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   206
      show "?V \<subseteq> W"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   207
        by (meson path_connectedin_path_component_of path_connectedin_subtopology)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   208
    qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   209
  assume ?rhs
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   210
  then show ?lhs
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   211
    unfolding weakly_locally_path_connected_at_def neighbourhood_base_at_def by (metis "*")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   212
qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   213
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   214
lemma locally_path_connected_space_im_kleinen:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   215
   "locally_path_connected_space X \<longleftrightarrow>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   216
      (\<forall>V x. openin X V \<and> x \<in> V
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   217
             \<longrightarrow> (\<exists>U. openin X U \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   218
                    x \<in> U \<and> U \<subseteq> V \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   219
                    (\<forall>y \<in> U. \<exists>c. path_connectedin X c \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   220
                                c \<subseteq> V \<and> x \<in> c \<and> y \<in> c)))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   221
  apply (simp add: locally_path_connected_space_def neighbourhood_base_of_def)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   222
  apply (simp add: weakly_locally_path_connected_at flip: weakly_locally_path_connected_at_def)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   223
  using openin_subset apply force
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   224
  done
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   225
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   226
lemma locally_path_connected_space_open_subset:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   227
   "\<lbrakk>locally_path_connected_space X; openin X s\<rbrakk>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   228
        \<Longrightarrow> locally_path_connected_space (subtopology X s)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   229
  apply (simp add: locally_path_connected_space_def neighbourhood_base_of openin_open_subtopology path_connectedin_subtopology)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   230
  by (meson order_trans)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   231
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   232
lemma locally_path_connected_space_quotient_map_image:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   233
  assumes f: "quotient_map X Y f" and X: "locally_path_connected_space X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   234
  shows "locally_path_connected_space Y"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   235
  unfolding locally_path_connected_space_open_path_components
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   236
proof clarify
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   237
  fix V C
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   238
  assume V: "openin Y V" and c: "C \<in> path_components_of (subtopology Y V)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   239
  then have sub: "C \<subseteq> topspace Y"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   240
    using path_connectedin_path_components_of path_connectedin_subset_topspace path_connectedin_subtopology by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   241
  have "openin X {x \<in> topspace X. f x \<in> C}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   242
  proof (subst openin_subopen, clarify)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   243
    fix x
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   244
    assume x: "x \<in> topspace X" and "f x \<in> C"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   245
    let ?T = "Collect (path_component_of (subtopology X {z \<in> topspace X. f z \<in> V}) x)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   246
    show "\<exists>T. openin X T \<and> x \<in> T \<and> T \<subseteq> {x \<in> topspace X. f x \<in> C}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   247
    proof (intro exI conjI)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   248
      have "\<exists>U. openin X U \<and> ?T \<in> path_components_of (subtopology X U)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   249
      proof (intro exI conjI)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   250
        show "openin X ({z \<in> topspace X. f z \<in> V})"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   251
          using V f openin_subset quotient_map_def by fastforce
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   252
        show "Collect (path_component_of (subtopology X {z \<in> topspace X. f z \<in> V}) x)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   253
        \<in> path_components_of (subtopology X {z \<in> topspace X. f z \<in> V})"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   254
          by (metis (no_types, lifting) Int_iff \<open>f x \<in> C\<close> c mem_Collect_eq path_component_in_path_components_of path_components_of_subset topspace_subtopology topspace_subtopology_subset x)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   255
      qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   256
      with X show "openin X ?T"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   257
        using locally_path_connected_space_open_path_components by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   258
      show x: "x \<in> ?T"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   259
        using V \<open>f x \<in> C\<close> c openin_subset path_component_of_equiv path_components_of_subset topspace_subtopology topspace_subtopology_subset x
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   260
        by fastforce
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   261
      have "f ` ?T \<subseteq> C"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   262
      proof (rule path_components_of_maximal)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   263
        show "C \<in> path_components_of (subtopology Y V)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   264
          by (simp add: c)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   265
        show "path_connectedin (subtopology Y V) (f ` ?T)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   266
        proof -
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   267
          have "quotient_map (subtopology X {a \<in> topspace X. f a \<in> V}) (subtopology Y V) f"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   268
            by (simp add: V f quotient_map_restriction)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   269
          then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   270
            by (meson path_connectedin_continuous_map_image path_connectedin_path_component_of quotient_imp_continuous_map)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   271
        qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   272
        show "\<not> disjnt C (f ` ?T)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   273
          by (metis (no_types, lifting) \<open>f x \<in> C\<close> x disjnt_iff image_eqI)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   274
      qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   275
      then show "?T \<subseteq> {x \<in> topspace X. f x \<in> C}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   276
        by (force simp: path_component_of_equiv topspace_subtopology)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   277
    qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   278
  qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   279
  then show "openin Y C"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   280
    using f sub by (simp add: quotient_map_def)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   281
qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   282
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   283
lemma homeomorphic_locally_path_connected_space:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   284
  assumes "X homeomorphic_space Y"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   285
  shows "locally_path_connected_space X \<longleftrightarrow> locally_path_connected_space Y"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   286
proof -
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   287
  obtain f g where "homeomorphic_maps X Y f g"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   288
    using assms homeomorphic_space_def by fastforce
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   289
  then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   290
    by (metis (no_types) homeomorphic_map_def homeomorphic_maps_map locally_path_connected_space_quotient_map_image)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   291
qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   292
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   293
lemma locally_path_connected_space_retraction_map_image:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   294
   "\<lbrakk>retraction_map X Y r; locally_path_connected_space X\<rbrakk>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   295
        \<Longrightarrow> locally_path_connected_space Y"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   296
  using Abstract_Topology.retraction_imp_quotient_map locally_path_connected_space_quotient_map_image by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   297
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   298
lemma locally_path_connected_space_euclideanreal: "locally_path_connected_space euclideanreal"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   299
  unfolding locally_path_connected_space_def neighbourhood_base_of
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   300
  proof clarsimp
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   301
  fix W and x :: "real"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   302
  assume "open W" "x \<in> W"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   303
  then obtain e where "e > 0" and e: "\<And>x'. \<bar>x' - x\<bar> < e \<longrightarrow> x' \<in> W"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   304
    by (auto simp: open_real)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   305
  then show "\<exists>U. open U \<and> (\<exists>V. path_connected V \<and> x \<in> U \<and> U \<subseteq> V \<and> V \<subseteq> W)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   306
    by (force intro!: convex_imp_path_connected exI [where x = "{x-e<..<x+e}"])
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   307
qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   308
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   309
lemma locally_path_connected_space_discrete_topology:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   310
   "locally_path_connected_space (discrete_topology U)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   311
  using locally_path_connected_space_open_path_components by fastforce
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   312
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   313
lemma path_component_eq_connected_component_of:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   314
  assumes "locally_path_connected_space X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   315
  shows "(path_component_of_set X x = connected_component_of_set X x)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   316
proof (cases "x \<in> topspace X")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   317
  case True
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   318
  then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   319
    using connectedin_connected_component_of [of X x]
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   320
    apply (clarsimp simp add: connectedin_def connected_space_clopen_in topspace_subtopology_subset cong: conj_cong)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   321
    apply (drule_tac x="path_component_of_set X x" in spec)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   322
    by (metis assms closedin_closed_subtopology closedin_connected_component_of closedin_path_component_of_locally_path_connected_space inf.absorb_iff2 inf.orderE openin_path_component_of_locally_path_connected_space openin_subtopology path_component_of_eq_empty path_component_subset_connected_component_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   323
next
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   324
  case False
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   325
  then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   326
    using connected_component_of_eq_empty path_component_of_eq_empty by fastforce
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   327
qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   328
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   329
lemma path_components_eq_connected_components_of:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   330
   "locally_path_connected_space X \<Longrightarrow> (path_components_of X = connected_components_of X)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   331
  by (simp add: path_components_of_def connected_components_of_def image_def path_component_eq_connected_component_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   332
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   333
lemma path_connected_eq_connected_space:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   334
   "locally_path_connected_space X
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   335
         \<Longrightarrow> path_connected_space X \<longleftrightarrow> connected_space X"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   336
  by (metis connected_components_of_subset_sing path_components_eq_connected_components_of path_components_of_subset_singleton)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   337
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   338
lemma locally_path_connected_space_product_topology:
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   339
   "locally_path_connected_space(product_topology X I) \<longleftrightarrow>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   340
        topspace(product_topology X I) = {} \<or>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   341
        finite {i. i \<in> I \<and> ~path_connected_space(X i)} \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   342
        (\<forall>i \<in> I. locally_path_connected_space(X i))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   343
    (is "?lhs \<longleftrightarrow> ?empty \<or> ?rhs")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   344
proof (cases ?empty)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   345
  case True
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   346
  then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   347
    by (simp add: locally_path_connected_space_def neighbourhood_base_of openin_closedin_eq)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   348
next
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   349
  case False
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   350
  then obtain z where z: "z \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   351
    by auto
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   352
  have ?rhs if L: ?lhs
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   353
  proof -
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   354
    obtain U C where U: "openin (product_topology X I) U"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   355
      and V: "path_connectedin (product_topology X I) C"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   356
      and "z \<in> U" "U \<subseteq> C" and Csub: "C \<subseteq> (\<Pi>\<^sub>E i\<in>I. topspace (X i))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   357
      using L apply (clarsimp simp add: locally_path_connected_space_def neighbourhood_base_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   358
      by (metis openin_topspace topspace_product_topology z)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   359
    then obtain V where finV: "finite {i \<in> I. V i \<noteq> topspace (X i)}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   360
      and XV: "\<And>i. i\<in>I \<Longrightarrow> openin (X i) (V i)" and "z \<in> Pi\<^sub>E I V" and subU: "Pi\<^sub>E I V \<subseteq> U"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   361
      by (force simp: openin_product_topology_alt)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   362
    show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   363
    proof (intro conjI ballI)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   364
      have "path_connected_space (X i)" if "i \<in> I" "V i = topspace (X i)" for i
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   365
      proof -
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   366
        have pc: "path_connectedin (X i) ((\<lambda>x. x i) ` C)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   367
          apply (rule path_connectedin_continuous_map_image [OF _ V])
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   368
          by (simp add: continuous_map_product_projection \<open>i \<in> I\<close>)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   369
        moreover have "((\<lambda>x. x i) ` C) = topspace (X i)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   370
        proof
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   371
          show "(\<lambda>x. x i) ` C \<subseteq> topspace (X i)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   372
            by (simp add: pc path_connectedin_subset_topspace)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   373
          have "V i \<subseteq> (\<lambda>x. x i) ` (\<Pi>\<^sub>E i\<in>I. V i)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   374
            by (metis \<open>z \<in> Pi\<^sub>E I V\<close> empty_iff image_projection_PiE order_refl that(1))
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   375
          also have "\<dots> \<subseteq> (\<lambda>x. x i) ` U"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   376
            using subU by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   377
          finally show "topspace (X i) \<subseteq> (\<lambda>x. x i) ` C"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   378
            using \<open>U \<subseteq> C\<close> that by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   379
        qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   380
        ultimately show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   381
          by (simp add: path_connectedin_topspace)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   382
      qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   383
      then have "{i \<in> I. \<not> path_connected_space (X i)} \<subseteq> {i \<in> I. V i \<noteq> topspace (X i)}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   384
        by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   385
      with finV show "finite {i \<in> I. \<not> path_connected_space (X i)}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   386
        using finite_subset by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   387
    next
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   388
      show "locally_path_connected_space (X i)" if "i \<in> I" for i
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   389
        apply (rule locally_path_connected_space_quotient_map_image [OF _ L, where f = "\<lambda>x. x i"])
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   390
        by (metis False Abstract_Topology.retraction_imp_quotient_map retraction_map_product_projection that)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   391
    qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   392
  qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   393
  moreover have ?lhs if R: ?rhs
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   394
  proof (clarsimp simp add: locally_path_connected_space_def neighbourhood_base_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   395
    fix F z
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   396
    assume "openin (product_topology X I) F" and "z \<in> F"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   397
    then obtain W where finW: "finite {i \<in> I. W i \<noteq> topspace (X i)}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   398
            and opeW: "\<And>i. i \<in> I \<Longrightarrow> openin (X i) (W i)" and "z \<in> Pi\<^sub>E I W" "Pi\<^sub>E I W \<subseteq> F"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   399
      by (auto simp: openin_product_topology_alt)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   400
    have "\<forall>i \<in> I. \<exists>U C. openin (X i) U \<and> path_connectedin (X i) C \<and> z i \<in> U \<and> U \<subseteq> C \<and> C \<subseteq> W i \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   401
                        (W i = topspace (X i) \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   402
                         path_connected_space (X i) \<longrightarrow> U = topspace (X i) \<and> C = topspace (X i))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   403
          (is "\<forall>i \<in> I. ?\<Phi> i")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   404
    proof
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   405
      fix i assume "i \<in> I"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   406
      have "locally_path_connected_space (X i)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   407
        by (simp add: R \<open>i \<in> I\<close>)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   408
      moreover have "openin (X i) (W i) " "z i \<in> W i"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   409
        using \<open>z \<in> Pi\<^sub>E I W\<close> opeW \<open>i \<in> I\<close> by auto
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   410
      ultimately obtain U C where UC: "openin (X i) U" "path_connectedin (X i) C" "z i \<in> U" "U \<subseteq> C" "C \<subseteq> W i"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   411
        using \<open>i \<in> I\<close> by (force simp: locally_path_connected_space_def neighbourhood_base_of)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   412
      show "?\<Phi> i"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   413
      proof (cases "W i = topspace (X i) \<and> path_connected_space(X i)")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   414
        case True
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   415
        then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   416
          using \<open>z i \<in> W i\<close> path_connectedin_topspace by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   417
      next
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   418
        case False
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   419
        then show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   420
          by (meson UC)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   421
      qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   422
    qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   423
    then obtain U C where
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   424
      *: "\<And>i. i \<in> I \<Longrightarrow> openin (X i) (U i) \<and> path_connectedin (X i) (C i) \<and> z i \<in> (U i) \<and> (U i) \<subseteq> (C i) \<and> (C i) \<subseteq> W i \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   425
                        (W i = topspace (X i) \<and> path_connected_space (X i)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   426
                         \<longrightarrow> (U i) = topspace (X i) \<and> (C i) = topspace (X i))"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   427
      by metis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   428
    let ?A = "{i \<in> I. \<not> path_connected_space (X i)} \<union> {i \<in> I. W i \<noteq> topspace (X i)}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   429
    have "{i \<in> I. U i \<noteq> topspace (X i)} \<subseteq> ?A"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   430
      by (clarsimp simp add: "*")
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   431
    moreover have "finite ?A"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   432
      by (simp add: that finW)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   433
    ultimately have "finite {i \<in> I. U i \<noteq> topspace (X i)}"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   434
      using finite_subset by auto
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   435
    then have "openin (product_topology X I) (Pi\<^sub>E I U)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   436
      using * by (simp add: openin_PiE_gen)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   437
    then show "\<exists>U. openin (product_topology X I) U \<and>
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   438
            (\<exists>V. path_connectedin (product_topology X I) V \<and> z \<in> U \<and> U \<subseteq> V \<and> V \<subseteq> F)"
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   439
      apply (rule_tac x="PiE I U" in exI, simp)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   440
      apply (rule_tac x="PiE I C" in exI)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   441
      using \<open>z \<in> Pi\<^sub>E I W\<close> \<open>Pi\<^sub>E I W \<subseteq> F\<close> *
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   442
      apply (simp add: path_connectedin_PiE subset_PiE PiE_iff PiE_mono dual_order.trans)
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   443
      done
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   444
  qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   445
  ultimately show ?thesis
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   446
    using False by blast
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   447
qed
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   448
35ba13ac6e5c New abstract topological material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   449
end