src/HOL/Analysis/Elementary_Topology.thy
author nipkow
Wed, 16 Jan 2019 17:03:31 +0100
changeset 69669 de2f0a24b0f0
parent 69615 e502cd4d7062
child 69676 56acd449da41
permissions -rw-r--r--
Reorg of material
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     1
(*  Author:     L C Paulson, University of Cambridge
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     2
    Author:     Amine Chaieb, University of Cambridge
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     3
    Author:     Robert Himmelmann, TU Muenchen
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     4
    Author:     Brian Huffman, Portland State University
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     5
*)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     6
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     7
section \<open>Elementary Topology\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     8
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
     9
theory Elementary_Topology
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    10
imports
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    11
  "HOL-Library.Set_Idioms"
69615
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
    12
  "HOL-Library.Disjoint_Sets"
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    13
  Product_Vector
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    14
begin
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    15
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    16
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
    17
subsection \<open>TODO: move?\<close>
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    18
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
    19
lemma open_subopen: "open S \<longleftrightarrow> (\<forall>x\<in>S. \<exists>T. open T \<and> x \<in> T \<and> T \<subseteq> S)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
    20
  using openI by auto
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    21
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
    22
69613
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    23
subsubsection%unimportant \<open>Archimedean properties and useful consequences\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    24
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    25
text\<open>Bernoulli's inequality\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    26
proposition Bernoulli_inequality:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    27
  fixes x :: real
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    28
  assumes "-1 \<le> x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    29
    shows "1 + n * x \<le> (1 + x) ^ n"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    30
proof (induct n)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    31
  case 0
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    32
  then show ?case by simp
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    33
next
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    34
  case (Suc n)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    35
  have "1 + Suc n * x \<le> 1 + (Suc n)*x + n * x^2"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    36
    by (simp add: algebra_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    37
  also have "... = (1 + x) * (1 + n*x)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    38
    by (auto simp: power2_eq_square algebra_simps  of_nat_Suc)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    39
  also have "... \<le> (1 + x) ^ Suc n"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    40
    using Suc.hyps assms mult_left_mono by fastforce
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    41
  finally show ?case .
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    42
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    43
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    44
corollary Bernoulli_inequality_even:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    45
  fixes x :: real
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    46
  assumes "even n"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    47
    shows "1 + n * x \<le> (1 + x) ^ n"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    48
proof (cases "-1 \<le> x \<or> n=0")
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    49
  case True
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    50
  then show ?thesis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    51
    by (auto simp: Bernoulli_inequality)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    52
next
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    53
  case False
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    54
  then have "real n \<ge> 1"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    55
    by simp
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    56
  with False have "n * x \<le> -1"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    57
    by (metis linear minus_zero mult.commute mult.left_neutral mult_left_mono_neg neg_le_iff_le order_trans zero_le_one)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    58
  then have "1 + n * x \<le> 0"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    59
    by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    60
  also have "... \<le> (1 + x) ^ n"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    61
    using assms
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    62
    using zero_le_even_power by blast
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    63
  finally show ?thesis .
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    64
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    65
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    66
corollary real_arch_pow:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    67
  fixes x :: real
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    68
  assumes x: "1 < x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    69
  shows "\<exists>n. y < x^n"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    70
proof -
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    71
  from x have x0: "x - 1 > 0"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    72
    by arith
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    73
  from reals_Archimedean3[OF x0, rule_format, of y]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    74
  obtain n :: nat where n: "y < real n * (x - 1)" by metis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    75
  from x0 have x00: "x- 1 \<ge> -1" by arith
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    76
  from Bernoulli_inequality[OF x00, of n] n
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    77
  have "y < x^n" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    78
  then show ?thesis by metis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    79
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    80
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    81
corollary real_arch_pow_inv:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    82
  fixes x y :: real
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    83
  assumes y: "y > 0"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    84
    and x1: "x < 1"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    85
  shows "\<exists>n. x^n < y"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    86
proof (cases "x > 0")
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    87
  case True
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    88
  with x1 have ix: "1 < 1/x" by (simp add: field_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    89
  from real_arch_pow[OF ix, of "1/y"]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    90
  obtain n where n: "1/y < (1/x)^n" by blast
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    91
  then show ?thesis using y \<open>x > 0\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    92
    by (auto simp add: field_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    93
next
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    94
  case False
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    95
  with y x1 show ?thesis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    96
    by (metis less_le_trans not_less power_one_right)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    97
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    98
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
    99
lemma forall_pos_mono:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   100
  "(\<And>d e::real. d < e \<Longrightarrow> P d \<Longrightarrow> P e) \<Longrightarrow>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   101
    (\<And>n::nat. n \<noteq> 0 \<Longrightarrow> P (inverse (real n))) \<Longrightarrow> (\<And>e. 0 < e \<Longrightarrow> P e)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   102
  by (metis real_arch_inverse)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   103
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   104
lemma forall_pos_mono_1:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   105
  "(\<And>d e::real. d < e \<Longrightarrow> P d \<Longrightarrow> P e) \<Longrightarrow>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   106
    (\<And>n. P (inverse (real (Suc n)))) \<Longrightarrow> 0 < e \<Longrightarrow> P e"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   107
  apply (rule forall_pos_mono)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   108
  apply auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   109
  apply (metis Suc_pred of_nat_Suc)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   110
  done
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   111
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   112
subsubsection%unimportant \<open>Affine transformations of intervals\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   113
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   114
lemma real_affinity_le: "0 < m \<Longrightarrow> m * x + c \<le> y \<longleftrightarrow> x \<le> inverse m * y + - (c / m)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   115
  for m :: "'a::linordered_field"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   116
  by (simp add: field_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   117
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   118
lemma real_le_affinity: "0 < m \<Longrightarrow> y \<le> m * x + c \<longleftrightarrow> inverse m * y + - (c / m) \<le> x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   119
  for m :: "'a::linordered_field"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   120
  by (simp add: field_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   121
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   122
lemma real_affinity_lt: "0 < m \<Longrightarrow> m * x + c < y \<longleftrightarrow> x < inverse m * y + - (c / m)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   123
  for m :: "'a::linordered_field"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   124
  by (simp add: field_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   125
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   126
lemma real_lt_affinity: "0 < m \<Longrightarrow> y < m * x + c \<longleftrightarrow> inverse m * y + - (c / m) < x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   127
  for m :: "'a::linordered_field"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   128
  by (simp add: field_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   129
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   130
lemma real_affinity_eq: "m \<noteq> 0 \<Longrightarrow> m * x + c = y \<longleftrightarrow> x = inverse m * y + - (c / m)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   131
  for m :: "'a::linordered_field"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   132
  by (simp add: field_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   133
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   134
lemma real_eq_affinity: "m \<noteq> 0 \<Longrightarrow> y = m * x + c  \<longleftrightarrow> inverse m * y + - (c / m) = x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   135
  for m :: "'a::linordered_field"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   136
  by (simp add: field_simps)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   137
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   138
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
   139
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   140
subsection \<open>Topological Basis\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   141
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   142
context topological_space
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   143
begin
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   144
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   145
definition%important "topological_basis B \<longleftrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   146
  (\<forall>b\<in>B. open b) \<and> (\<forall>x. open x \<longrightarrow> (\<exists>B'. B' \<subseteq> B \<and> \<Union>B' = x))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   147
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   148
lemma topological_basis:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   149
  "topological_basis B \<longleftrightarrow> (\<forall>x. open x \<longleftrightarrow> (\<exists>B'. B' \<subseteq> B \<and> \<Union>B' = x))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   150
  unfolding topological_basis_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   151
  apply safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   152
     apply fastforce
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   153
    apply fastforce
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   154
   apply (erule_tac x=x in allE, simp)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   155
   apply (rule_tac x="{x}" in exI, auto)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   156
  done
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   157
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   158
lemma topological_basis_iff:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   159
  assumes "\<And>B'. B' \<in> B \<Longrightarrow> open B'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   160
  shows "topological_basis B \<longleftrightarrow> (\<forall>O'. open O' \<longrightarrow> (\<forall>x\<in>O'. \<exists>B'\<in>B. x \<in> B' \<and> B' \<subseteq> O'))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   161
    (is "_ \<longleftrightarrow> ?rhs")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   162
proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   163
  fix O' and x::'a
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   164
  assume H: "topological_basis B" "open O'" "x \<in> O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   165
  then have "(\<exists>B'\<subseteq>B. \<Union>B' = O')" by (simp add: topological_basis_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   166
  then obtain B' where "B' \<subseteq> B" "O' = \<Union>B'" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   167
  then show "\<exists>B'\<in>B. x \<in> B' \<and> B' \<subseteq> O'" using H by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   168
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   169
  assume H: ?rhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   170
  show "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   171
    using assms unfolding topological_basis_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   172
  proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   173
    fix O' :: "'a set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   174
    assume "open O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   175
    with H obtain f where "\<forall>x\<in>O'. f x \<in> B \<and> x \<in> f x \<and> f x \<subseteq> O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   176
      by (force intro: bchoice simp: Bex_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   177
    then show "\<exists>B'\<subseteq>B. \<Union>B' = O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   178
      by (auto intro: exI[where x="{f x |x. x \<in> O'}"])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   179
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   180
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   181
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   182
lemma topological_basisI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   183
  assumes "\<And>B'. B' \<in> B \<Longrightarrow> open B'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   184
    and "\<And>O' x. open O' \<Longrightarrow> x \<in> O' \<Longrightarrow> \<exists>B'\<in>B. x \<in> B' \<and> B' \<subseteq> O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   185
  shows "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   186
  using assms by (subst topological_basis_iff) auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   187
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   188
lemma topological_basisE:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   189
  fixes O'
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   190
  assumes "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   191
    and "open O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   192
    and "x \<in> O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   193
  obtains B' where "B' \<in> B" "x \<in> B'" "B' \<subseteq> O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   194
proof atomize_elim
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   195
  from assms have "\<And>B'. B'\<in>B \<Longrightarrow> open B'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   196
    by (simp add: topological_basis_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   197
  with topological_basis_iff assms
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   198
  show  "\<exists>B'. B' \<in> B \<and> x \<in> B' \<and> B' \<subseteq> O'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   199
    using assms by (simp add: Bex_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   200
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   201
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   202
lemma topological_basis_open:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   203
  assumes "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   204
    and "X \<in> B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   205
  shows "open X"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   206
  using assms by (simp add: topological_basis_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   207
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   208
lemma topological_basis_imp_subbasis:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   209
  assumes B: "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   210
  shows "open = generate_topology B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   211
proof (intro ext iffI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   212
  fix S :: "'a set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   213
  assume "open S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   214
  with B obtain B' where "B' \<subseteq> B" "S = \<Union>B'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   215
    unfolding topological_basis_def by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   216
  then show "generate_topology B S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   217
    by (auto intro: generate_topology.intros dest: topological_basis_open)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   218
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   219
  fix S :: "'a set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   220
  assume "generate_topology B S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   221
  then show "open S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   222
    by induct (auto dest: topological_basis_open[OF B])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   223
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   224
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   225
lemma basis_dense:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   226
  fixes B :: "'a set set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   227
    and f :: "'a set \<Rightarrow> 'a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   228
  assumes "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   229
    and choosefrom_basis: "\<And>B'. B' \<noteq> {} \<Longrightarrow> f B' \<in> B'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   230
  shows "\<forall>X. open X \<longrightarrow> X \<noteq> {} \<longrightarrow> (\<exists>B' \<in> B. f B' \<in> X)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   231
proof (intro allI impI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   232
  fix X :: "'a set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   233
  assume "open X" and "X \<noteq> {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   234
  from topological_basisE[OF \<open>topological_basis B\<close> \<open>open X\<close> choosefrom_basis[OF \<open>X \<noteq> {}\<close>]]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   235
  obtain B' where "B' \<in> B" "f X \<in> B'" "B' \<subseteq> X" .
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   236
  then show "\<exists>B'\<in>B. f B' \<in> X"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   237
    by (auto intro!: choosefrom_basis)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   238
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   239
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   240
end
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   241
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   242
lemma topological_basis_prod:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   243
  assumes A: "topological_basis A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   244
    and B: "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   245
  shows "topological_basis ((\<lambda>(a, b). a \<times> b) ` (A \<times> B))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   246
  unfolding topological_basis_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   247
proof (safe, simp_all del: ex_simps add: subset_image_iff ex_simps(1)[symmetric])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   248
  fix S :: "('a \<times> 'b) set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   249
  assume "open S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   250
  then show "\<exists>X\<subseteq>A \<times> B. (\<Union>(a,b)\<in>X. a \<times> b) = S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   251
  proof (safe intro!: exI[of _ "{x\<in>A \<times> B. fst x \<times> snd x \<subseteq> S}"])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   252
    fix x y
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   253
    assume "(x, y) \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   254
    from open_prod_elim[OF \<open>open S\<close> this]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   255
    obtain a b where a: "open a""x \<in> a" and b: "open b" "y \<in> b" and "a \<times> b \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   256
      by (metis mem_Sigma_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   257
    moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   258
    from A a obtain A0 where "A0 \<in> A" "x \<in> A0" "A0 \<subseteq> a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   259
      by (rule topological_basisE)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   260
    moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   261
    from B b obtain B0 where "B0 \<in> B" "y \<in> B0" "B0 \<subseteq> b"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   262
      by (rule topological_basisE)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   263
    ultimately show "(x, y) \<in> (\<Union>(a, b)\<in>{X \<in> A \<times> B. fst X \<times> snd X \<subseteq> S}. a \<times> b)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   264
      by (intro UN_I[of "(A0, B0)"]) auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   265
  qed auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   266
qed (metis A B topological_basis_open open_Times)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   267
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   268
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   269
subsection \<open>Countable Basis\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   270
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   271
locale%important countable_basis =
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   272
  fixes B :: "'a::topological_space set set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   273
  assumes is_basis: "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   274
    and countable_basis: "countable B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   275
begin
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   276
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   277
lemma open_countable_basis_ex:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   278
  assumes "open X"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   279
  shows "\<exists>B' \<subseteq> B. X = \<Union>B'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   280
  using assms countable_basis is_basis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   281
  unfolding topological_basis_def by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   282
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   283
lemma open_countable_basisE:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   284
  assumes "open X"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   285
  obtains B' where "B' \<subseteq> B" "X = \<Union>B'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   286
  using assms open_countable_basis_ex
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   287
  by atomize_elim simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   288
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   289
lemma countable_dense_exists:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   290
  "\<exists>D::'a set. countable D \<and> (\<forall>X. open X \<longrightarrow> X \<noteq> {} \<longrightarrow> (\<exists>d \<in> D. d \<in> X))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   291
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   292
  let ?f = "(\<lambda>B'. SOME x. x \<in> B')"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   293
  have "countable (?f ` B)" using countable_basis by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   294
  with basis_dense[OF is_basis, of ?f] show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   295
    by (intro exI[where x="?f ` B"]) (metis (mono_tags) all_not_in_conv imageI someI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   296
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   297
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   298
lemma countable_dense_setE:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   299
  obtains D :: "'a set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   300
  where "countable D" "\<And>X. open X \<Longrightarrow> X \<noteq> {} \<Longrightarrow> \<exists>d \<in> D. d \<in> X"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   301
  using countable_dense_exists by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   302
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   303
end
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   304
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   305
lemma (in first_countable_topology) first_countable_basisE:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   306
  fixes x :: 'a
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   307
  obtains \<A> where "countable \<A>" "\<And>A. A \<in> \<A> \<Longrightarrow> x \<in> A" "\<And>A. A \<in> \<A> \<Longrightarrow> open A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   308
    "\<And>S. open S \<Longrightarrow> x \<in> S \<Longrightarrow> (\<exists>A\<in>\<A>. A \<subseteq> S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   309
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   310
  obtain \<A> where \<A>: "(\<forall>i::nat. x \<in> \<A> i \<and> open (\<A> i))" "(\<forall>S. open S \<and> x \<in> S \<longrightarrow> (\<exists>i. \<A> i \<subseteq> S))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   311
    using first_countable_basis[of x] by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   312
  show thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   313
  proof 
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   314
    show "countable (range \<A>)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   315
      by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   316
  qed (use \<A> in auto)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   317
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   318
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   319
lemma (in first_countable_topology) first_countable_basis_Int_stableE:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   320
  obtains \<A> where "countable \<A>" "\<And>A. A \<in> \<A> \<Longrightarrow> x \<in> A" "\<And>A. A \<in> \<A> \<Longrightarrow> open A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   321
    "\<And>S. open S \<Longrightarrow> x \<in> S \<Longrightarrow> (\<exists>A\<in>\<A>. A \<subseteq> S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   322
    "\<And>A B. A \<in> \<A> \<Longrightarrow> B \<in> \<A> \<Longrightarrow> A \<inter> B \<in> \<A>"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   323
proof atomize_elim
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   324
  obtain \<B> where \<B>:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   325
    "countable \<B>"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   326
    "\<And>B. B \<in> \<B> \<Longrightarrow> x \<in> B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   327
    "\<And>B. B \<in> \<B> \<Longrightarrow> open B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   328
    "\<And>S. open S \<Longrightarrow> x \<in> S \<Longrightarrow> \<exists>B\<in>\<B>. B \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   329
    by (rule first_countable_basisE) blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   330
  define \<A> where [abs_def]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   331
    "\<A> = (\<lambda>N. \<Inter>((\<lambda>n. from_nat_into \<B> n) ` N)) ` (Collect finite::nat set set)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   332
  then show "\<exists>\<A>. countable \<A> \<and> (\<forall>A. A \<in> \<A> \<longrightarrow> x \<in> A) \<and> (\<forall>A. A \<in> \<A> \<longrightarrow> open A) \<and>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   333
        (\<forall>S. open S \<longrightarrow> x \<in> S \<longrightarrow> (\<exists>A\<in>\<A>. A \<subseteq> S)) \<and> (\<forall>A B. A \<in> \<A> \<longrightarrow> B \<in> \<A> \<longrightarrow> A \<inter> B \<in> \<A>)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   334
  proof (safe intro!: exI[where x=\<A>])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   335
    show "countable \<A>"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   336
      unfolding \<A>_def by (intro countable_image countable_Collect_finite)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   337
    fix A
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   338
    assume "A \<in> \<A>"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   339
    then show "x \<in> A" "open A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   340
      using \<B>(4)[OF open_UNIV] by (auto simp: \<A>_def intro: \<B> from_nat_into)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   341
  next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   342
    let ?int = "\<lambda>N. \<Inter>(from_nat_into \<B> ` N)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   343
    fix A B
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   344
    assume "A \<in> \<A>" "B \<in> \<A>"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   345
    then obtain N M where "A = ?int N" "B = ?int M" "finite (N \<union> M)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   346
      by (auto simp: \<A>_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   347
    then show "A \<inter> B \<in> \<A>"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   348
      by (auto simp: \<A>_def intro!: image_eqI[where x="N \<union> M"])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   349
  next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   350
    fix S
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   351
    assume "open S" "x \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   352
    then obtain a where a: "a\<in>\<B>" "a \<subseteq> S" using \<B> by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   353
    then show "\<exists>a\<in>\<A>. a \<subseteq> S" using a \<B>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   354
      by (intro bexI[where x=a]) (auto simp: \<A>_def intro: image_eqI[where x="{to_nat_on \<B> a}"])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   355
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   356
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   357
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   358
lemma (in topological_space) first_countableI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   359
  assumes "countable \<A>"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   360
    and 1: "\<And>A. A \<in> \<A> \<Longrightarrow> x \<in> A" "\<And>A. A \<in> \<A> \<Longrightarrow> open A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   361
    and 2: "\<And>S. open S \<Longrightarrow> x \<in> S \<Longrightarrow> \<exists>A\<in>\<A>. A \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   362
  shows "\<exists>\<A>::nat \<Rightarrow> 'a set. (\<forall>i. x \<in> \<A> i \<and> open (\<A> i)) \<and> (\<forall>S. open S \<and> x \<in> S \<longrightarrow> (\<exists>i. \<A> i \<subseteq> S))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   363
proof (safe intro!: exI[of _ "from_nat_into \<A>"])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   364
  fix i
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   365
  have "\<A> \<noteq> {}" using 2[of UNIV] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   366
  show "x \<in> from_nat_into \<A> i" "open (from_nat_into \<A> i)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   367
    using range_from_nat_into_subset[OF \<open>\<A> \<noteq> {}\<close>] 1 by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   368
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   369
  fix S
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   370
  assume "open S" "x\<in>S" from 2[OF this]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   371
  show "\<exists>i. from_nat_into \<A> i \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   372
    using subset_range_from_nat_into[OF \<open>countable \<A>\<close>] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   373
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   374
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   375
instance prod :: (first_countable_topology, first_countable_topology) first_countable_topology
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   376
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   377
  fix x :: "'a \<times> 'b"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   378
  obtain \<A> where \<A>:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   379
      "countable \<A>"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   380
      "\<And>a. a \<in> \<A> \<Longrightarrow> fst x \<in> a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   381
      "\<And>a. a \<in> \<A> \<Longrightarrow> open a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   382
      "\<And>S. open S \<Longrightarrow> fst x \<in> S \<Longrightarrow> \<exists>a\<in>\<A>. a \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   383
    by (rule first_countable_basisE[of "fst x"]) blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   384
  obtain B where B:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   385
      "countable B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   386
      "\<And>a. a \<in> B \<Longrightarrow> snd x \<in> a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   387
      "\<And>a. a \<in> B \<Longrightarrow> open a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   388
      "\<And>S. open S \<Longrightarrow> snd x \<in> S \<Longrightarrow> \<exists>a\<in>B. a \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   389
    by (rule first_countable_basisE[of "snd x"]) blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   390
  show "\<exists>\<A>::nat \<Rightarrow> ('a \<times> 'b) set.
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   391
    (\<forall>i. x \<in> \<A> i \<and> open (\<A> i)) \<and> (\<forall>S. open S \<and> x \<in> S \<longrightarrow> (\<exists>i. \<A> i \<subseteq> S))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   392
  proof (rule first_countableI[of "(\<lambda>(a, b). a \<times> b) ` (\<A> \<times> B)"], safe)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   393
    fix a b
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   394
    assume x: "a \<in> \<A>" "b \<in> B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   395
    show "x \<in> a \<times> b" 
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   396
      by (simp add: \<A>(2) B(2) mem_Times_iff x)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   397
    show "open (a \<times> b)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   398
      by (simp add: \<A>(3) B(3) open_Times x)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   399
  next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   400
    fix S
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   401
    assume "open S" "x \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   402
    then obtain a' b' where a'b': "open a'" "open b'" "x \<in> a' \<times> b'" "a' \<times> b' \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   403
      by (rule open_prod_elim)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   404
    moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   405
    from a'b' \<A>(4)[of a'] B(4)[of b']
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   406
    obtain a b where "a \<in> \<A>" "a \<subseteq> a'" "b \<in> B" "b \<subseteq> b'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   407
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   408
    ultimately
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   409
    show "\<exists>a\<in>(\<lambda>(a, b). a \<times> b) ` (\<A> \<times> B). a \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   410
      by (auto intro!: bexI[of _ "a \<times> b"] bexI[of _ a] bexI[of _ b])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   411
  qed (simp add: \<A> B)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   412
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   413
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   414
class second_countable_topology = topological_space +
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   415
  assumes ex_countable_subbasis:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   416
    "\<exists>B::'a::topological_space set set. countable B \<and> open = generate_topology B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   417
begin
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   418
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   419
lemma ex_countable_basis: "\<exists>B::'a set set. countable B \<and> topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   420
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   421
  from ex_countable_subbasis obtain B where B: "countable B" "open = generate_topology B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   422
    by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   423
  let ?B = "Inter ` {b. finite b \<and> b \<subseteq> B }"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   424
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   425
  show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   426
  proof (intro exI conjI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   427
    show "countable ?B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   428
      by (intro countable_image countable_Collect_finite_subset B)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   429
    {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   430
      fix S
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   431
      assume "open S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   432
      then have "\<exists>B'\<subseteq>{b. finite b \<and> b \<subseteq> B}. (\<Union>b\<in>B'. \<Inter>b) = S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   433
        unfolding B
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   434
      proof induct
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   435
        case UNIV
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   436
        show ?case by (intro exI[of _ "{{}}"]) simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   437
      next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   438
        case (Int a b)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   439
        then obtain x y where x: "a = \<Union>(Inter ` x)" "\<And>i. i \<in> x \<Longrightarrow> finite i \<and> i \<subseteq> B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   440
          and y: "b = \<Union>(Inter ` y)" "\<And>i. i \<in> y \<Longrightarrow> finite i \<and> i \<subseteq> B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   441
          by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   442
        show ?case
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   443
          unfolding x y Int_UN_distrib2
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   444
          by (intro exI[of _ "{i \<union> j| i j.  i \<in> x \<and> j \<in> y}"]) (auto dest: x(2) y(2))
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   445
      next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   446
        case (UN K)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   447
        then have "\<forall>k\<in>K. \<exists>B'\<subseteq>{b. finite b \<and> b \<subseteq> B}. \<Union> (Inter ` B') = k" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   448
        then obtain k where
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   449
            "\<forall>ka\<in>K. k ka \<subseteq> {b. finite b \<and> b \<subseteq> B} \<and> \<Union>(Inter ` (k ka)) = ka"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   450
          unfolding bchoice_iff ..
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   451
        then show "\<exists>B'\<subseteq>{b. finite b \<and> b \<subseteq> B}. \<Union> (Inter ` B') = \<Union>K"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   452
          by (intro exI[of _ "\<Union>(k ` K)"]) auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   453
      next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   454
        case (Basis S)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   455
        then show ?case
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   456
          by (intro exI[of _ "{{S}}"]) auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   457
      qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   458
      then have "(\<exists>B'\<subseteq>Inter ` {b. finite b \<and> b \<subseteq> B}. \<Union>B' = S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   459
        unfolding subset_image_iff by blast }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   460
    then show "topological_basis ?B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   461
      unfolding topological_space_class.topological_basis_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   462
      by (safe intro!: topological_space_class.open_Inter)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   463
         (simp_all add: B generate_topology.Basis subset_eq)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   464
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   465
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   466
69615
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   467
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   468
end
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   469
69615
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   470
lemma univ_second_countable:
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   471
  obtains \<B> :: "'a::second_countable_topology set set"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   472
  where "countable \<B>" "\<And>C. C \<in> \<B> \<Longrightarrow> open C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   473
       "\<And>S. open S \<Longrightarrow> \<exists>U. U \<subseteq> \<B> \<and> S = \<Union>U"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   474
by (metis ex_countable_basis topological_basis_def)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   475
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   476
proposition Lindelof:
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   477
  fixes \<F> :: "'a::second_countable_topology set set"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   478
  assumes \<F>: "\<And>S. S \<in> \<F> \<Longrightarrow> open S"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   479
  obtains \<F>' where "\<F>' \<subseteq> \<F>" "countable \<F>'" "\<Union>\<F>' = \<Union>\<F>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   480
proof -
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   481
  obtain \<B> :: "'a set set"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   482
    where "countable \<B>" "\<And>C. C \<in> \<B> \<Longrightarrow> open C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   483
      and \<B>: "\<And>S. open S \<Longrightarrow> \<exists>U. U \<subseteq> \<B> \<and> S = \<Union>U"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   484
    using univ_second_countable by blast
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   485
  define \<D> where "\<D> \<equiv> {S. S \<in> \<B> \<and> (\<exists>U. U \<in> \<F> \<and> S \<subseteq> U)}"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   486
  have "countable \<D>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   487
    apply (rule countable_subset [OF _ \<open>countable \<B>\<close>])
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   488
    apply (force simp: \<D>_def)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   489
    done
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   490
  have "\<And>S. \<exists>U. S \<in> \<D> \<longrightarrow> U \<in> \<F> \<and> S \<subseteq> U"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   491
    by (simp add: \<D>_def)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   492
  then obtain G where G: "\<And>S. S \<in> \<D> \<longrightarrow> G S \<in> \<F> \<and> S \<subseteq> G S"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   493
    by metis
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   494
  have "\<Union>\<F> \<subseteq> \<Union>\<D>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   495
    unfolding \<D>_def by (blast dest: \<F> \<B>)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   496
  moreover have "\<Union>\<D> \<subseteq> \<Union>\<F>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   497
    using \<D>_def by blast
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   498
  ultimately have eq1: "\<Union>\<F> = \<Union>\<D>" ..
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   499
  have eq2: "\<Union>\<D> = \<Union> (G ` \<D>)"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   500
    using G eq1 by auto
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   501
  show ?thesis
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   502
    apply (rule_tac \<F>' = "G ` \<D>" in that)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   503
    using G \<open>countable \<D>\<close>
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   504
    by (auto simp: eq1 eq2)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   505
qed
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   506
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   507
lemma countable_disjoint_open_subsets:
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   508
  fixes \<F> :: "'a::second_countable_topology set set"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   509
  assumes "\<And>S. S \<in> \<F> \<Longrightarrow> open S" and pw: "pairwise disjnt \<F>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   510
    shows "countable \<F>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   511
proof -
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   512
  obtain \<F>' where "\<F>' \<subseteq> \<F>" "countable \<F>'" "\<Union>\<F>' = \<Union>\<F>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   513
    by (meson assms Lindelof)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   514
  with pw have "\<F> \<subseteq> insert {} \<F>'"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   515
    by (fastforce simp add: pairwise_def disjnt_iff)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   516
  then show ?thesis
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   517
    by (simp add: \<open>countable \<F>'\<close> countable_subset)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   518
qed
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   519
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   520
sublocale second_countable_topology <
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   521
  countable_basis "SOME B. countable B \<and> topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   522
  using someI_ex[OF ex_countable_basis]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   523
  by unfold_locales safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   524
69615
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   525
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   526
instance prod :: (second_countable_topology, second_countable_topology) second_countable_topology
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   527
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   528
  obtain A :: "'a set set" where "countable A" "topological_basis A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   529
    using ex_countable_basis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   530
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   531
  obtain B :: "'b set set" where "countable B" "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   532
    using ex_countable_basis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   533
  ultimately show "\<exists>B::('a \<times> 'b) set set. countable B \<and> open = generate_topology B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   534
    by (auto intro!: exI[of _ "(\<lambda>(a, b). a \<times> b) ` (A \<times> B)"] topological_basis_prod
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   535
      topological_basis_imp_subbasis)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   536
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   537
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   538
instance second_countable_topology \<subseteq> first_countable_topology
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   539
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   540
  fix x :: 'a
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   541
  define B :: "'a set set" where "B = (SOME B. countable B \<and> topological_basis B)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   542
  then have B: "countable B" "topological_basis B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   543
    using countable_basis is_basis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   544
    by (auto simp: countable_basis is_basis)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   545
  then show "\<exists>A::nat \<Rightarrow> 'a set.
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   546
    (\<forall>i. x \<in> A i \<and> open (A i)) \<and> (\<forall>S. open S \<and> x \<in> S \<longrightarrow> (\<exists>i. A i \<subseteq> S))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   547
    by (intro first_countableI[of "{b\<in>B. x \<in> b}"])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   548
       (fastforce simp: topological_space_class.topological_basis_def)+
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   549
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   550
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   551
instance nat :: second_countable_topology
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   552
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   553
  show "\<exists>B::nat set set. countable B \<and> open = generate_topology B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   554
    by (intro exI[of _ "range lessThan \<union> range greaterThan"]) (auto simp: open_nat_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   555
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   556
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   557
lemma countable_separating_set_linorder1:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   558
  shows "\<exists>B::('a::{linorder_topology, second_countable_topology} set). countable B \<and> (\<forall>x y. x < y \<longrightarrow> (\<exists>b \<in> B. x < b \<and> b \<le> y))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   559
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   560
  obtain A::"'a set set" where "countable A" "topological_basis A" using ex_countable_basis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   561
  define B1 where "B1 = {(LEAST x. x \<in> U)| U. U \<in> A}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   562
  then have "countable B1" using \<open>countable A\<close> by (simp add: Setcompr_eq_image)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   563
  define B2 where "B2 = {(SOME x. x \<in> U)| U. U \<in> A}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   564
  then have "countable B2" using \<open>countable A\<close> by (simp add: Setcompr_eq_image)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   565
  have "\<exists>b \<in> B1 \<union> B2. x < b \<and> b \<le> y" if "x < y" for x y
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   566
  proof (cases)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   567
    assume "\<exists>z. x < z \<and> z < y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   568
    then obtain z where z: "x < z \<and> z < y" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   569
    define U where "U = {x<..<y}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   570
    then have "open U" by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   571
    moreover have "z \<in> U" using z U_def by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   572
    ultimately obtain V where "V \<in> A" "z \<in> V" "V \<subseteq> U" using topological_basisE[OF \<open>topological_basis A\<close>] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   573
    define w where "w = (SOME x. x \<in> V)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   574
    then have "w \<in> V" using \<open>z \<in> V\<close> by (metis someI2)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   575
    then have "x < w \<and> w \<le> y" using \<open>w \<in> V\<close> \<open>V \<subseteq> U\<close> U_def by fastforce
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   576
    moreover have "w \<in> B1 \<union> B2" using w_def B2_def \<open>V \<in> A\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   577
    ultimately show ?thesis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   578
  next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   579
    assume "\<not>(\<exists>z. x < z \<and> z < y)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   580
    then have *: "\<And>z. z > x \<Longrightarrow> z \<ge> y" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   581
    define U where "U = {x<..}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   582
    then have "open U" by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   583
    moreover have "y \<in> U" using \<open>x < y\<close> U_def by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   584
    ultimately obtain "V" where "V \<in> A" "y \<in> V" "V \<subseteq> U" using topological_basisE[OF \<open>topological_basis A\<close>] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   585
    have "U = {y..}" unfolding U_def using * \<open>x < y\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   586
    then have "V \<subseteq> {y..}" using \<open>V \<subseteq> U\<close> by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   587
    then have "(LEAST w. w \<in> V) = y" using \<open>y \<in> V\<close> by (meson Least_equality atLeast_iff subsetCE)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   588
    then have "y \<in> B1 \<union> B2" using \<open>V \<in> A\<close> B1_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   589
    moreover have "x < y \<and> y \<le> y" using \<open>x < y\<close> by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   590
    ultimately show ?thesis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   591
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   592
  moreover have "countable (B1 \<union> B2)" using \<open>countable B1\<close> \<open>countable B2\<close> by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   593
  ultimately show ?thesis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   594
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   595
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   596
lemma countable_separating_set_linorder2:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   597
  shows "\<exists>B::('a::{linorder_topology, second_countable_topology} set). countable B \<and> (\<forall>x y. x < y \<longrightarrow> (\<exists>b \<in> B. x \<le> b \<and> b < y))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   598
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   599
  obtain A::"'a set set" where "countable A" "topological_basis A" using ex_countable_basis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   600
  define B1 where "B1 = {(GREATEST x. x \<in> U) | U. U \<in> A}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   601
  then have "countable B1" using \<open>countable A\<close> by (simp add: Setcompr_eq_image)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   602
  define B2 where "B2 = {(SOME x. x \<in> U)| U. U \<in> A}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   603
  then have "countable B2" using \<open>countable A\<close> by (simp add: Setcompr_eq_image)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   604
  have "\<exists>b \<in> B1 \<union> B2. x \<le> b \<and> b < y" if "x < y" for x y
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   605
  proof (cases)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   606
    assume "\<exists>z. x < z \<and> z < y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   607
    then obtain z where z: "x < z \<and> z < y" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   608
    define U where "U = {x<..<y}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   609
    then have "open U" by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   610
    moreover have "z \<in> U" using z U_def by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   611
    ultimately obtain "V" where "V \<in> A" "z \<in> V" "V \<subseteq> U" using topological_basisE[OF \<open>topological_basis A\<close>] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   612
    define w where "w = (SOME x. x \<in> V)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   613
    then have "w \<in> V" using \<open>z \<in> V\<close> by (metis someI2)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   614
    then have "x \<le> w \<and> w < y" using \<open>w \<in> V\<close> \<open>V \<subseteq> U\<close> U_def by fastforce
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   615
    moreover have "w \<in> B1 \<union> B2" using w_def B2_def \<open>V \<in> A\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   616
    ultimately show ?thesis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   617
  next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   618
    assume "\<not>(\<exists>z. x < z \<and> z < y)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   619
    then have *: "\<And>z. z < y \<Longrightarrow> z \<le> x" using leI by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   620
    define U where "U = {..<y}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   621
    then have "open U" by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   622
    moreover have "x \<in> U" using \<open>x < y\<close> U_def by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   623
    ultimately obtain "V" where "V \<in> A" "x \<in> V" "V \<subseteq> U" using topological_basisE[OF \<open>topological_basis A\<close>] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   624
    have "U = {..x}" unfolding U_def using * \<open>x < y\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   625
    then have "V \<subseteq> {..x}" using \<open>V \<subseteq> U\<close> by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   626
    then have "(GREATEST x. x \<in> V) = x" using \<open>x \<in> V\<close> by (meson Greatest_equality atMost_iff subsetCE)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   627
    then have "x \<in> B1 \<union> B2" using \<open>V \<in> A\<close> B1_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   628
    moreover have "x \<le> x \<and> x < y" using \<open>x < y\<close> by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   629
    ultimately show ?thesis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   630
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   631
  moreover have "countable (B1 \<union> B2)" using \<open>countable B1\<close> \<open>countable B2\<close> by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   632
  ultimately show ?thesis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   633
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   634
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   635
lemma countable_separating_set_dense_linorder:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   636
  shows "\<exists>B::('a::{linorder_topology, dense_linorder, second_countable_topology} set). countable B \<and> (\<forall>x y. x < y \<longrightarrow> (\<exists>b \<in> B. x < b \<and> b < y))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   637
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   638
  obtain B::"'a set" where B: "countable B" "\<And>x y. x < y \<Longrightarrow> (\<exists>b \<in> B. x < b \<and> b \<le> y)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   639
    using countable_separating_set_linorder1 by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   640
  have "\<exists>b \<in> B. x < b \<and> b < y" if "x < y" for x y
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   641
  proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   642
    obtain z where "x < z" "z < y" using \<open>x < y\<close> dense by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   643
    then obtain b where "b \<in> B" "x < b \<and> b \<le> z" using B(2) by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   644
    then have "x < b \<and> b < y" using \<open>z < y\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   645
    then show ?thesis using \<open>b \<in> B\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   646
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   647
  then show ?thesis using B(1) by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   648
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   649
69615
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
   650
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   651
subsection%important \<open>Polish spaces\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   652
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   653
text \<open>Textbooks define Polish spaces as completely metrizable.
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   654
  We assume the topology to be complete for a given metric.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   655
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   656
class polish_space = complete_space + second_countable_topology
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   657
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   658
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   659
subsection \<open>Limit Points\<close>
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   660
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   661
definition%important (in topological_space) islimpt:: "'a \<Rightarrow> 'a set \<Rightarrow> bool"  (infixr "islimpt" 60)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   662
  where "x islimpt S \<longleftrightarrow> (\<forall>T. x\<in>T \<longrightarrow> open T \<longrightarrow> (\<exists>y\<in>S. y\<in>T \<and> y\<noteq>x))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   663
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   664
lemma islimptI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   665
  assumes "\<And>T. x \<in> T \<Longrightarrow> open T \<Longrightarrow> \<exists>y\<in>S. y \<in> T \<and> y \<noteq> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   666
  shows "x islimpt S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   667
  using assms unfolding islimpt_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   668
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   669
lemma islimptE:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   670
  assumes "x islimpt S" and "x \<in> T" and "open T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   671
  obtains y where "y \<in> S" and "y \<in> T" and "y \<noteq> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   672
  using assms unfolding islimpt_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   673
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   674
lemma islimpt_iff_eventually: "x islimpt S \<longleftrightarrow> \<not> eventually (\<lambda>y. y \<notin> S) (at x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   675
  unfolding islimpt_def eventually_at_topological by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   676
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   677
lemma islimpt_subset: "x islimpt S \<Longrightarrow> S \<subseteq> T \<Longrightarrow> x islimpt T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   678
  unfolding islimpt_def by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   679
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   680
lemma islimpt_UNIV_iff: "x islimpt UNIV \<longleftrightarrow> \<not> open {x}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   681
  unfolding islimpt_def by (safe, fast, case_tac "T = {x}", fast, fast)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   682
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   683
lemma islimpt_punctured: "x islimpt S = x islimpt (S-{x})"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   684
  unfolding islimpt_def by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   685
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   686
text \<open>A perfect space has no isolated points.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   687
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   688
lemma islimpt_UNIV [simp, intro]: "x islimpt UNIV"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   689
  for x :: "'a::perfect_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   690
  unfolding islimpt_UNIV_iff by (rule not_open_singleton)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   691
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   692
lemma closed_limpt: "closed S \<longleftrightarrow> (\<forall>x. x islimpt S \<longrightarrow> x \<in> S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   693
  unfolding closed_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   694
  apply (subst open_subopen)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   695
  apply (simp add: islimpt_def subset_eq)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   696
  apply (metis ComplE ComplI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   697
  done
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   698
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   699
lemma islimpt_EMPTY[simp]: "\<not> x islimpt {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   700
  by (auto simp: islimpt_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   701
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   702
lemma islimpt_Un: "x islimpt (S \<union> T) \<longleftrightarrow> x islimpt S \<or> x islimpt T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   703
  by (simp add: islimpt_iff_eventually eventually_conj_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   704
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   705
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   706
lemma islimpt_insert:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   707
  fixes x :: "'a::t1_space"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   708
  shows "x islimpt (insert a s) \<longleftrightarrow> x islimpt s"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   709
proof
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   710
  assume *: "x islimpt (insert a s)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   711
  show "x islimpt s"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   712
  proof (rule islimptI)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   713
    fix t
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   714
    assume t: "x \<in> t" "open t"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   715
    show "\<exists>y\<in>s. y \<in> t \<and> y \<noteq> x"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   716
    proof (cases "x = a")
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   717
      case True
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   718
      obtain y where "y \<in> insert a s" "y \<in> t" "y \<noteq> x"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   719
        using * t by (rule islimptE)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   720
      with \<open>x = a\<close> show ?thesis by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   721
    next
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   722
      case False
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   723
      with t have t': "x \<in> t - {a}" "open (t - {a})"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   724
        by (simp_all add: open_Diff)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   725
      obtain y where "y \<in> insert a s" "y \<in> t - {a}" "y \<noteq> x"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   726
        using * t' by (rule islimptE)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   727
      then show ?thesis by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   728
    qed
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   729
  qed
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   730
next
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   731
  assume "x islimpt s"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   732
  then show "x islimpt (insert a s)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   733
    by (rule islimpt_subset) auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   734
qed
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   735
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   736
lemma islimpt_finite:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   737
  fixes x :: "'a::t1_space"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   738
  shows "finite s \<Longrightarrow> \<not> x islimpt s"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   739
  by (induct set: finite) (simp_all add: islimpt_insert)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   740
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   741
lemma islimpt_Un_finite:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   742
  fixes x :: "'a::t1_space"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   743
  shows "finite s \<Longrightarrow> x islimpt (s \<union> t) \<longleftrightarrow> x islimpt t"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   744
  by (simp add: islimpt_Un islimpt_finite)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   745
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   746
lemma islimpt_eq_acc_point:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   747
  fixes l :: "'a :: t1_space"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   748
  shows "l islimpt S \<longleftrightarrow> (\<forall>U. l\<in>U \<longrightarrow> open U \<longrightarrow> infinite (U \<inter> S))"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   749
proof (safe intro!: islimptI)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   750
  fix U
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   751
  assume "l islimpt S" "l \<in> U" "open U" "finite (U \<inter> S)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   752
  then have "l islimpt S" "l \<in> (U - (U \<inter> S - {l}))" "open (U - (U \<inter> S - {l}))"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   753
    by (auto intro: finite_imp_closed)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   754
  then show False
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   755
    by (rule islimptE) auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   756
next
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   757
  fix T
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   758
  assume *: "\<forall>U. l\<in>U \<longrightarrow> open U \<longrightarrow> infinite (U \<inter> S)" "l \<in> T" "open T"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   759
  then have "infinite (T \<inter> S - {l})"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   760
    by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   761
  then have "\<exists>x. x \<in> (T \<inter> S - {l})"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   762
    unfolding ex_in_conv by (intro notI) simp
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   763
  then show "\<exists>y\<in>S. y \<in> T \<and> y \<noteq> l"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   764
    by auto
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   765
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   766
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   767
lemma acc_point_range_imp_convergent_subsequence:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   768
  fixes l :: "'a :: first_countable_topology"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   769
  assumes l: "\<forall>U. l\<in>U \<longrightarrow> open U \<longrightarrow> infinite (U \<inter> range f)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   770
  shows "\<exists>r::nat\<Rightarrow>nat. strict_mono r \<and> (f \<circ> r) \<longlonglongrightarrow> l"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   771
proof -
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   772
  from countable_basis_at_decseq[of l]
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   773
  obtain A where A:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   774
      "\<And>i. open (A i)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   775
      "\<And>i. l \<in> A i"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   776
      "\<And>S. open S \<Longrightarrow> l \<in> S \<Longrightarrow> eventually (\<lambda>i. A i \<subseteq> S) sequentially"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   777
    by blast
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   778
  define s where "s n i = (SOME j. i < j \<and> f j \<in> A (Suc n))" for n i
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   779
  {
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   780
    fix n i
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   781
    have "infinite (A (Suc n) \<inter> range f - f`{.. i})"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   782
      using l A by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   783
    then have "\<exists>x. x \<in> A (Suc n) \<inter> range f - f`{.. i}"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   784
      unfolding ex_in_conv by (intro notI) simp
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   785
    then have "\<exists>j. f j \<in> A (Suc n) \<and> j \<notin> {.. i}"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   786
      by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   787
    then have "\<exists>a. i < a \<and> f a \<in> A (Suc n)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   788
      by (auto simp: not_le)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   789
    then have "i < s n i" "f (s n i) \<in> A (Suc n)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   790
      unfolding s_def by (auto intro: someI2_ex)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   791
  }
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   792
  note s = this
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   793
  define r where "r = rec_nat (s 0 0) s"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   794
  have "strict_mono r"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   795
    by (auto simp: r_def s strict_mono_Suc_iff)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   796
  moreover
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   797
  have "(\<lambda>n. f (r n)) \<longlonglongrightarrow> l"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   798
  proof (rule topological_tendstoI)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   799
    fix S
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   800
    assume "open S" "l \<in> S"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   801
    with A(3) have "eventually (\<lambda>i. A i \<subseteq> S) sequentially"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   802
      by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   803
    moreover
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   804
    {
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   805
      fix i
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   806
      assume "Suc 0 \<le> i"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   807
      then have "f (r i) \<in> A i"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   808
        by (cases i) (simp_all add: r_def s)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   809
    }
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   810
    then have "eventually (\<lambda>i. f (r i) \<in> A i) sequentially"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   811
      by (auto simp: eventually_sequentially)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   812
    ultimately show "eventually (\<lambda>i. f (r i) \<in> S) sequentially"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   813
      by eventually_elim auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   814
  qed
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   815
  ultimately show "\<exists>r::nat\<Rightarrow>nat. strict_mono r \<and> (f \<circ> r) \<longlonglongrightarrow> l"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   816
    by (auto simp: convergent_def comp_def)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   817
qed
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   818
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   819
lemma islimpt_range_imp_convergent_subsequence:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   820
  fixes l :: "'a :: {t1_space, first_countable_topology}"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   821
  assumes l: "l islimpt (range f)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   822
  shows "\<exists>r::nat\<Rightarrow>nat. strict_mono r \<and> (f \<circ> r) \<longlonglongrightarrow> l"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   823
  using l unfolding islimpt_eq_acc_point
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   824
  by (rule acc_point_range_imp_convergent_subsequence)
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   825
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   826
lemma sequence_unique_limpt:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   827
  fixes f :: "nat \<Rightarrow> 'a::t2_space"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   828
  assumes "(f \<longlongrightarrow> l) sequentially"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   829
    and "l' islimpt (range f)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   830
  shows "l' = l"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   831
proof (rule ccontr)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   832
  assume "l' \<noteq> l"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   833
  obtain s t where "open s" "open t" "l' \<in> s" "l \<in> t" "s \<inter> t = {}"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   834
    using hausdorff [OF \<open>l' \<noteq> l\<close>] by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   835
  have "eventually (\<lambda>n. f n \<in> t) sequentially"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   836
    using assms(1) \<open>open t\<close> \<open>l \<in> t\<close> by (rule topological_tendstoD)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   837
  then obtain N where "\<forall>n\<ge>N. f n \<in> t"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   838
    unfolding eventually_sequentially by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   839
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   840
  have "UNIV = {..<N} \<union> {N..}"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   841
    by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   842
  then have "l' islimpt (f ` ({..<N} \<union> {N..}))"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   843
    using assms(2) by simp
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   844
  then have "l' islimpt (f ` {..<N} \<union> f ` {N..})"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   845
    by (simp add: image_Un)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   846
  then have "l' islimpt (f ` {N..})"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   847
    by (simp add: islimpt_Un_finite)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   848
  then obtain y where "y \<in> f ` {N..}" "y \<in> s" "y \<noteq> l'"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   849
    using \<open>l' \<in> s\<close> \<open>open s\<close> by (rule islimptE)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   850
  then obtain n where "N \<le> n" "f n \<in> s" "f n \<noteq> l'"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   851
    by auto
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   852
  with \<open>\<forall>n\<ge>N. f n \<in> t\<close> have "f n \<in> s \<inter> t"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   853
    by simp
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   854
  with \<open>s \<inter> t = {}\<close> show False
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
   855
    by simp
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   856
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   857
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   858
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   859
subsection \<open>Interior of a Set\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   860
69564
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
   861
definition%important interior :: "('a::topological_space) set \<Rightarrow> 'a set" where
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
   862
"interior S = \<Union>{T. open T \<and> T \<subseteq> S}"
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   863
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   864
lemma interiorI [intro?]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   865
  assumes "open T" and "x \<in> T" and "T \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   866
  shows "x \<in> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   867
  using assms unfolding interior_def by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   868
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   869
lemma interiorE [elim?]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   870
  assumes "x \<in> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   871
  obtains T where "open T" and "x \<in> T" and "T \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   872
  using assms unfolding interior_def by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   873
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   874
lemma open_interior [simp, intro]: "open (interior S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   875
  by (simp add: interior_def open_Union)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   876
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   877
lemma interior_subset: "interior S \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   878
  by (auto simp: interior_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   879
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   880
lemma interior_maximal: "T \<subseteq> S \<Longrightarrow> open T \<Longrightarrow> T \<subseteq> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   881
  by (auto simp: interior_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   882
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   883
lemma interior_open: "open S \<Longrightarrow> interior S = S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   884
  by (intro equalityI interior_subset interior_maximal subset_refl)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   885
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   886
lemma interior_eq: "interior S = S \<longleftrightarrow> open S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   887
  by (metis open_interior interior_open)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   888
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   889
lemma open_subset_interior: "open S \<Longrightarrow> S \<subseteq> interior T \<longleftrightarrow> S \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   890
  by (metis interior_maximal interior_subset subset_trans)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   891
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   892
lemma interior_empty [simp]: "interior {} = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   893
  using open_empty by (rule interior_open)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   894
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   895
lemma interior_UNIV [simp]: "interior UNIV = UNIV"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   896
  using open_UNIV by (rule interior_open)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   897
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   898
lemma interior_interior [simp]: "interior (interior S) = interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   899
  using open_interior by (rule interior_open)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   900
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   901
lemma interior_mono: "S \<subseteq> T \<Longrightarrow> interior S \<subseteq> interior T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   902
  by (auto simp: interior_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   903
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   904
lemma interior_unique:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   905
  assumes "T \<subseteq> S" and "open T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   906
  assumes "\<And>T'. T' \<subseteq> S \<Longrightarrow> open T' \<Longrightarrow> T' \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   907
  shows "interior S = T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   908
  by (intro equalityI assms interior_subset open_interior interior_maximal)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   909
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   910
lemma interior_singleton [simp]: "interior {a} = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   911
  for a :: "'a::perfect_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   912
  apply (rule interior_unique, simp_all)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   913
  using not_open_singleton subset_singletonD
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   914
  apply fastforce
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   915
  done
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   916
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   917
lemma interior_Int [simp]: "interior (S \<inter> T) = interior S \<inter> interior T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   918
  by (intro equalityI Int_mono Int_greatest interior_mono Int_lower1
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   919
    Int_lower2 interior_maximal interior_subset open_Int open_interior)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   920
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   921
lemma eventually_nhds_in_nhd: "x \<in> interior s \<Longrightarrow> eventually (\<lambda>y. y \<in> s) (nhds x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   922
  using interior_subset[of s] by (subst eventually_nhds) blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   923
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   924
lemma interior_limit_point [intro]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   925
  fixes x :: "'a::perfect_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   926
  assumes x: "x \<in> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   927
  shows "x islimpt S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   928
  using x islimpt_UNIV [of x]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   929
  unfolding interior_def islimpt_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   930
  apply (clarsimp, rename_tac T T')
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   931
  apply (drule_tac x="T \<inter> T'" in spec)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   932
  apply (auto simp: open_Int)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   933
  done
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   934
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   935
lemma interior_closed_Un_empty_interior:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   936
  assumes cS: "closed S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   937
    and iT: "interior T = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   938
  shows "interior (S \<union> T) = interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   939
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   940
  show "interior S \<subseteq> interior (S \<union> T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   941
    by (rule interior_mono) (rule Un_upper1)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   942
  show "interior (S \<union> T) \<subseteq> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   943
  proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   944
    fix x
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   945
    assume "x \<in> interior (S \<union> T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   946
    then obtain R where "open R" "x \<in> R" "R \<subseteq> S \<union> T" ..
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   947
    show "x \<in> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   948
    proof (rule ccontr)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   949
      assume "x \<notin> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   950
      with \<open>x \<in> R\<close> \<open>open R\<close> obtain y where "y \<in> R - S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   951
        unfolding interior_def by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   952
      from \<open>open R\<close> \<open>closed S\<close> have "open (R - S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   953
        by (rule open_Diff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   954
      from \<open>R \<subseteq> S \<union> T\<close> have "R - S \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   955
        by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   956
      from \<open>y \<in> R - S\<close> \<open>open (R - S)\<close> \<open>R - S \<subseteq> T\<close> \<open>interior T = {}\<close> show False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   957
        unfolding interior_def by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   958
    qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   959
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   960
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   961
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   962
lemma interior_Times: "interior (A \<times> B) = interior A \<times> interior B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   963
proof (rule interior_unique)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   964
  show "interior A \<times> interior B \<subseteq> A \<times> B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   965
    by (intro Sigma_mono interior_subset)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   966
  show "open (interior A \<times> interior B)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   967
    by (intro open_Times open_interior)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   968
  fix T
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   969
  assume "T \<subseteq> A \<times> B" and "open T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   970
  then show "T \<subseteq> interior A \<times> interior B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   971
  proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   972
    fix x y
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   973
    assume "(x, y) \<in> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   974
    then obtain C D where "open C" "open D" "C \<times> D \<subseteq> T" "x \<in> C" "y \<in> D"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   975
      using \<open>open T\<close> unfolding open_prod_def by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   976
    then have "open C" "open D" "C \<subseteq> A" "D \<subseteq> B" "x \<in> C" "y \<in> D"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   977
      using \<open>T \<subseteq> A \<times> B\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   978
    then show "x \<in> interior A" and "y \<in> interior B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   979
      by (auto intro: interiorI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   980
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   981
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   982
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   983
lemma interior_Ici:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   984
  fixes x :: "'a :: {dense_linorder,linorder_topology}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   985
  assumes "b < x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   986
  shows "interior {x ..} = {x <..}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   987
proof (rule interior_unique)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   988
  fix T
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   989
  assume "T \<subseteq> {x ..}" "open T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   990
  moreover have "x \<notin> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   991
  proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   992
    assume "x \<in> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   993
    obtain y where "y < x" "{y <.. x} \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   994
      using open_left[OF \<open>open T\<close> \<open>x \<in> T\<close> \<open>b < x\<close>] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   995
    with dense[OF \<open>y < x\<close>] obtain z where "z \<in> T" "z < x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   996
      by (auto simp: subset_eq Ball_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   997
    with \<open>T \<subseteq> {x ..}\<close> show False by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   998
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
   999
  ultimately show "T \<subseteq> {x <..}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1000
    by (auto simp: subset_eq less_le)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1001
qed auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1002
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1003
lemma interior_Iic:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1004
  fixes x :: "'a ::{dense_linorder,linorder_topology}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1005
  assumes "x < b"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1006
  shows "interior {.. x} = {..< x}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1007
proof (rule interior_unique)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1008
  fix T
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1009
  assume "T \<subseteq> {.. x}" "open T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1010
  moreover have "x \<notin> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1011
  proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1012
    assume "x \<in> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1013
    obtain y where "x < y" "{x ..< y} \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1014
      using open_right[OF \<open>open T\<close> \<open>x \<in> T\<close> \<open>x < b\<close>] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1015
    with dense[OF \<open>x < y\<close>] obtain z where "z \<in> T" "x < z"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1016
      by (auto simp: subset_eq Ball_def less_le)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1017
    with \<open>T \<subseteq> {.. x}\<close> show False by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1018
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1019
  ultimately show "T \<subseteq> {..< x}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1020
    by (auto simp: subset_eq less_le)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1021
qed auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1022
69615
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1023
lemma countable_disjoint_nonempty_interior_subsets:
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1024
  fixes \<F> :: "'a::second_countable_topology set set"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1025
  assumes pw: "pairwise disjnt \<F>" and int: "\<And>S. \<lbrakk>S \<in> \<F>; interior S = {}\<rbrakk> \<Longrightarrow> S = {}"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1026
  shows "countable \<F>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1027
proof (rule countable_image_inj_on)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1028
  have "disjoint (interior ` \<F>)"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1029
    using pw by (simp add: disjoint_image_subset interior_subset)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1030
  then show "countable (interior ` \<F>)"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1031
    by (auto intro: countable_disjoint_open_subsets)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1032
  show "inj_on interior \<F>"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1033
    using pw apply (clarsimp simp: inj_on_def pairwise_def)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1034
    apply (metis disjnt_def disjnt_subset1 inf.orderE int interior_subset)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1035
    done
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  1036
qed
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1037
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1038
subsection \<open>Closure of a Set\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1039
69564
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1040
definition%important closure :: "('a::topological_space) set \<Rightarrow> 'a set" where
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1041
"closure S = S \<union> {x . x islimpt S}"
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1042
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1043
lemma interior_closure: "interior S = - (closure (- S))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1044
  by (auto simp: interior_def closure_def islimpt_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1045
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1046
lemma closure_interior: "closure S = - interior (- S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1047
  by (simp add: interior_closure)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1048
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1049
lemma closed_closure[simp, intro]: "closed (closure S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1050
  by (simp add: closure_interior closed_Compl)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1051
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1052
lemma closure_subset: "S \<subseteq> closure S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1053
  by (simp add: closure_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1054
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1055
lemma closure_hull: "closure S = closed hull S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1056
  by (auto simp: hull_def closure_interior interior_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1057
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1058
lemma closure_eq: "closure S = S \<longleftrightarrow> closed S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1059
  unfolding closure_hull using closed_Inter by (rule hull_eq)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1060
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1061
lemma closure_closed [simp]: "closed S \<Longrightarrow> closure S = S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1062
  by (simp only: closure_eq)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1063
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1064
lemma closure_closure [simp]: "closure (closure S) = closure S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1065
  unfolding closure_hull by (rule hull_hull)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1066
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1067
lemma closure_mono: "S \<subseteq> T \<Longrightarrow> closure S \<subseteq> closure T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1068
  unfolding closure_hull by (rule hull_mono)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1069
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1070
lemma closure_minimal: "S \<subseteq> T \<Longrightarrow> closed T \<Longrightarrow> closure S \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1071
  unfolding closure_hull by (rule hull_minimal)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1072
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1073
lemma closure_unique:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1074
  assumes "S \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1075
    and "closed T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1076
    and "\<And>T'. S \<subseteq> T' \<Longrightarrow> closed T' \<Longrightarrow> T \<subseteq> T'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1077
  shows "closure S = T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1078
  using assms unfolding closure_hull by (rule hull_unique)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1079
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1080
lemma closure_empty [simp]: "closure {} = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1081
  using closed_empty by (rule closure_closed)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1082
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1083
lemma closure_UNIV [simp]: "closure UNIV = UNIV"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1084
  using closed_UNIV by (rule closure_closed)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1085
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1086
lemma closure_Un [simp]: "closure (S \<union> T) = closure S \<union> closure T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1087
  by (simp add: closure_interior)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1088
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1089
lemma closure_eq_empty [iff]: "closure S = {} \<longleftrightarrow> S = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1090
  using closure_empty closure_subset[of S] by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1091
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1092
lemma closure_subset_eq: "closure S \<subseteq> S \<longleftrightarrow> closed S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1093
  using closure_eq[of S] closure_subset[of S] by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1094
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1095
lemma open_Int_closure_eq_empty: "open S \<Longrightarrow> (S \<inter> closure T) = {} \<longleftrightarrow> S \<inter> T = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1096
  using open_subset_interior[of S "- T"]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1097
  using interior_subset[of "- T"]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1098
  by (auto simp: closure_interior)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1099
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1100
lemma open_Int_closure_subset: "open S \<Longrightarrow> S \<inter> closure T \<subseteq> closure (S \<inter> T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1101
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1102
  fix x
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1103
  assume *: "open S" "x \<in> S \<inter> closure T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1104
  have "x islimpt (S \<inter> T)" if **: "x islimpt T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1105
  proof (rule islimptI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1106
    fix A
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1107
    assume "x \<in> A" "open A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1108
    with * have "x \<in> A \<inter> S" "open (A \<inter> S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1109
      by (simp_all add: open_Int)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1110
    with ** obtain y where "y \<in> T" "y \<in> A \<inter> S" "y \<noteq> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1111
      by (rule islimptE)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1112
    then have "y \<in> S \<inter> T" "y \<in> A \<and> y \<noteq> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1113
      by simp_all
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1114
    then show "\<exists>y\<in>(S \<inter> T). y \<in> A \<and> y \<noteq> x" ..
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1115
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1116
  with * show "x \<in> closure (S \<inter> T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1117
    unfolding closure_def by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1118
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1119
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1120
lemma closure_complement: "closure (- S) = - interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1121
  by (simp add: closure_interior)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1122
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1123
lemma interior_complement: "interior (- S) = - closure S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1124
  by (simp add: closure_interior)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1125
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1126
lemma interior_diff: "interior(S - T) = interior S - closure T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1127
  by (simp add: Diff_eq interior_complement)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1128
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1129
lemma closure_Times: "closure (A \<times> B) = closure A \<times> closure B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1130
proof (rule closure_unique)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1131
  show "A \<times> B \<subseteq> closure A \<times> closure B"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1132
    by (intro Sigma_mono closure_subset)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1133
  show "closed (closure A \<times> closure B)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1134
    by (intro closed_Times closed_closure)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1135
  fix T
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1136
  assume "A \<times> B \<subseteq> T" and "closed T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1137
  then show "closure A \<times> closure B \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1138
    apply (simp add: closed_def open_prod_def, clarify)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1139
    apply (rule ccontr)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1140
    apply (drule_tac x="(a, b)" in bspec, simp, clarify, rename_tac C D)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1141
    apply (simp add: closure_interior interior_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1142
    apply (drule_tac x=C in spec)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1143
    apply (drule_tac x=D in spec, auto)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1144
    done
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1145
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1146
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1147
lemma islimpt_in_closure: "(x islimpt S) = (x\<in>closure(S-{x}))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1148
  unfolding closure_def using islimpt_punctured by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1149
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1150
lemma connected_imp_connected_closure: "connected S \<Longrightarrow> connected (closure S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1151
  by (rule connectedI) (meson closure_subset open_Int open_Int_closure_eq_empty subset_trans connectedD)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1152
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1153
lemma bdd_below_closure:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1154
  fixes A :: "real set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1155
  assumes "bdd_below A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1156
  shows "bdd_below (closure A)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1157
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1158
  from assms obtain m where "\<And>x. x \<in> A \<Longrightarrow> m \<le> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1159
    by (auto simp: bdd_below_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1160
  then have "A \<subseteq> {m..}" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1161
  then have "closure A \<subseteq> {m..}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1162
    using closed_real_atLeast by (rule closure_minimal)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1163
  then show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1164
    by (auto simp: bdd_below_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1165
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1166
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1167
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1168
subsection \<open>Frontier (also known as boundary)\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1169
69564
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1170
definition%important frontier :: "('a::topological_space) set \<Rightarrow> 'a set" where
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1171
"frontier S = closure S - interior S"
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1172
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1173
lemma frontier_closed [iff]: "closed (frontier S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1174
  by (simp add: frontier_def closed_Diff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1175
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1176
lemma frontier_closures: "frontier S = closure S \<inter> closure (- S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1177
  by (auto simp: frontier_def interior_closure)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1178
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1179
lemma frontier_Int: "frontier(S \<inter> T) = closure(S \<inter> T) \<inter> (frontier S \<union> frontier T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1180
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1181
  have "closure (S \<inter> T) \<subseteq> closure S" "closure (S \<inter> T) \<subseteq> closure T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1182
    by (simp_all add: closure_mono)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1183
  then show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1184
    by (auto simp: frontier_closures)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1185
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1186
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1187
lemma frontier_Int_subset: "frontier(S \<inter> T) \<subseteq> frontier S \<union> frontier T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1188
  by (auto simp: frontier_Int)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1189
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1190
lemma frontier_Int_closed:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1191
  assumes "closed S" "closed T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1192
  shows "frontier(S \<inter> T) = (frontier S \<inter> T) \<union> (S \<inter> frontier T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1193
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1194
  have "closure (S \<inter> T) = T \<inter> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1195
    using assms by (simp add: Int_commute closed_Int)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1196
  moreover have "T \<inter> (closure S \<inter> closure (- S)) = frontier S \<inter> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1197
    by (simp add: Int_commute frontier_closures)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1198
  ultimately show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1199
    by (simp add: Int_Un_distrib Int_assoc Int_left_commute assms frontier_closures)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1200
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1201
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1202
lemma frontier_subset_closed: "closed S \<Longrightarrow> frontier S \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1203
  by (metis frontier_def closure_closed Diff_subset)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1204
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1205
lemma frontier_empty [simp]: "frontier {} = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1206
  by (simp add: frontier_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1207
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1208
lemma frontier_subset_eq: "frontier S \<subseteq> S \<longleftrightarrow> closed S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1209
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1210
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1211
    assume "frontier S \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1212
    then have "closure S \<subseteq> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1213
      using interior_subset unfolding frontier_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1214
    then have "closed S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1215
      using closure_subset_eq by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1216
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1217
  then show ?thesis using frontier_subset_closed[of S] ..
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1218
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1219
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1220
lemma frontier_complement [simp]: "frontier (- S) = frontier S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1221
  by (auto simp: frontier_def closure_complement interior_complement)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1222
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1223
lemma frontier_Un_subset: "frontier(S \<union> T) \<subseteq> frontier S \<union> frontier T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1224
  by (metis compl_sup frontier_Int_subset frontier_complement)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1225
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1226
lemma frontier_disjoint_eq: "frontier S \<inter> S = {} \<longleftrightarrow> open S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1227
  using frontier_complement frontier_subset_eq[of "- S"]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1228
  unfolding open_closed by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1229
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1230
lemma frontier_UNIV [simp]: "frontier UNIV = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1231
  using frontier_complement frontier_empty by fastforce
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1232
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1233
lemma frontier_interiors: "frontier s = - interior(s) - interior(-s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1234
  by (simp add: Int_commute frontier_def interior_closure)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1235
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1236
lemma frontier_interior_subset: "frontier(interior S) \<subseteq> frontier S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1237
  by (simp add: Diff_mono frontier_interiors interior_mono interior_subset)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1238
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1239
lemma closure_Un_frontier: "closure S = S \<union> frontier S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1240
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1241
  have "S \<union> interior S = S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1242
    using interior_subset by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1243
  then show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1244
    using closure_subset by (auto simp: frontier_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1245
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1246
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1247
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1248
subsection%unimportant \<open>Filters and the ``eventually true'' quantifier\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1249
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1250
text \<open>Identify Trivial limits, where we can't approach arbitrarily closely.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1251
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1252
lemma trivial_limit_within: "trivial_limit (at a within S) \<longleftrightarrow> \<not> a islimpt S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1253
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1254
  assume "trivial_limit (at a within S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1255
  then show "\<not> a islimpt S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1256
    unfolding trivial_limit_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1257
    unfolding eventually_at_topological
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1258
    unfolding islimpt_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1259
    apply (clarsimp simp add: set_eq_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1260
    apply (rename_tac T, rule_tac x=T in exI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1261
    apply (clarsimp, drule_tac x=y in bspec, simp_all)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1262
    done
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1263
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1264
  assume "\<not> a islimpt S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1265
  then show "trivial_limit (at a within S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1266
    unfolding trivial_limit_def eventually_at_topological islimpt_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1267
    by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1268
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1269
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1270
lemma trivial_limit_at_iff: "trivial_limit (at a) \<longleftrightarrow> \<not> a islimpt UNIV"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1271
  using trivial_limit_within [of a UNIV] by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1272
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1273
lemma trivial_limit_at: "\<not> trivial_limit (at a)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1274
  for a :: "'a::perfect_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1275
  by (rule at_neq_bot)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1276
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1277
lemma not_trivial_limit_within: "\<not> trivial_limit (at x within S) = (x \<in> closure (S - {x}))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1278
  using islimpt_in_closure by (metis trivial_limit_within)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1279
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1280
lemma not_in_closure_trivial_limitI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1281
  "x \<notin> closure s \<Longrightarrow> trivial_limit (at x within s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1282
  using not_trivial_limit_within[of x s]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1283
  by safe (metis Diff_empty Diff_insert0 closure_subset contra_subsetD)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1284
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1285
lemma filterlim_at_within_closure_implies_filterlim: "filterlim f l (at x within s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1286
  if "x \<in> closure s \<Longrightarrow> filterlim f l (at x within s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1287
  by (metis bot.extremum filterlim_filtercomap filterlim_mono not_in_closure_trivial_limitI that)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1288
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1289
lemma at_within_eq_bot_iff: "at c within A = bot \<longleftrightarrow> c \<notin> closure (A - {c})"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1290
  using not_trivial_limit_within[of c A] by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1291
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1292
text \<open>Some property holds "sufficiently close" to the limit point.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1293
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1294
lemma trivial_limit_eventually: "trivial_limit net \<Longrightarrow> eventually P net"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1295
  by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1296
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1297
lemma trivial_limit_eq: "trivial_limit net \<longleftrightarrow> (\<forall>P. eventually P net)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1298
  by (simp add: filter_eq_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1299
69613
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1300
lemma Lim_topological:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1301
  "(f \<longlongrightarrow> l) net \<longleftrightarrow>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1302
    trivial_limit net \<or> (\<forall>S. open S \<longrightarrow> l \<in> S \<longrightarrow> eventually (\<lambda>x. f x \<in> S) net)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1303
  unfolding tendsto_def trivial_limit_eq by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1304
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1305
lemma eventually_within_Un:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1306
  "eventually P (at x within (s \<union> t)) \<longleftrightarrow>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1307
    eventually P (at x within s) \<and> eventually P (at x within t)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1308
  unfolding eventually_at_filter
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1309
  by (auto elim!: eventually_rev_mp)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1310
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1311
lemma Lim_within_union:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1312
 "(f \<longlongrightarrow> l) (at x within (s \<union> t)) \<longleftrightarrow>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1313
  (f \<longlongrightarrow> l) (at x within s) \<and> (f \<longlongrightarrow> l) (at x within t)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1314
  unfolding tendsto_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1315
  by (auto simp: eventually_within_Un)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  1316
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1317
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1318
subsection \<open>Limits\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1319
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1320
lemma Lim_eventually: "eventually (\<lambda>x. f x = l) net \<Longrightarrow> (f \<longlongrightarrow> l) net"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1321
  by (rule topological_tendstoI) (auto elim: eventually_mono)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1322
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1323
text \<open>The expected monotonicity property.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1324
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1325
lemma Lim_Un:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1326
  assumes "(f \<longlongrightarrow> l) (at x within S)" "(f \<longlongrightarrow> l) (at x within T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1327
  shows "(f \<longlongrightarrow> l) (at x within (S \<union> T))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1328
  using assms unfolding at_within_union by (rule filterlim_sup)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1329
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1330
lemma Lim_Un_univ:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1331
  "(f \<longlongrightarrow> l) (at x within S) \<Longrightarrow> (f \<longlongrightarrow> l) (at x within T) \<Longrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1332
    S \<union> T = UNIV \<Longrightarrow> (f \<longlongrightarrow> l) (at x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1333
  by (metis Lim_Un)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1334
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1335
text \<open>Interrelations between restricted and unrestricted limits.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1336
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1337
lemma Lim_at_imp_Lim_at_within: "(f \<longlongrightarrow> l) (at x) \<Longrightarrow> (f \<longlongrightarrow> l) (at x within S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1338
  by (metis order_refl filterlim_mono subset_UNIV at_le)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1339
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1340
lemma eventually_within_interior:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1341
  assumes "x \<in> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1342
  shows "eventually P (at x within S) \<longleftrightarrow> eventually P (at x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1343
  (is "?lhs = ?rhs")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1344
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1345
  from assms obtain T where T: "open T" "x \<in> T" "T \<subseteq> S" ..
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1346
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1347
    assume ?lhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1348
    then obtain A where "open A" and "x \<in> A" and "\<forall>y\<in>A. y \<noteq> x \<longrightarrow> y \<in> S \<longrightarrow> P y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1349
      by (auto simp: eventually_at_topological)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1350
    with T have "open (A \<inter> T)" and "x \<in> A \<inter> T" and "\<forall>y \<in> A \<inter> T. y \<noteq> x \<longrightarrow> P y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1351
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1352
    then show ?rhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1353
      by (auto simp: eventually_at_topological)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1354
  next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1355
    assume ?rhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1356
    then show ?lhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1357
      by (auto elim: eventually_mono simp: eventually_at_filter)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1358
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1359
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1360
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1361
lemma at_within_interior: "x \<in> interior S \<Longrightarrow> at x within S = at x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1362
  unfolding filter_eq_iff by (intro allI eventually_within_interior)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1363
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1364
lemma Lim_within_LIMSEQ:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1365
  fixes a :: "'a::first_countable_topology"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1366
  assumes "\<forall>S. (\<forall>n. S n \<noteq> a \<and> S n \<in> T) \<and> S \<longlonglongrightarrow> a \<longrightarrow> (\<lambda>n. X (S n)) \<longlonglongrightarrow> L"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1367
  shows "(X \<longlongrightarrow> L) (at a within T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1368
  using assms unfolding tendsto_def [where l=L]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1369
  by (simp add: sequentially_imp_eventually_within)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1370
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1371
lemma Lim_right_bound:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1372
  fixes f :: "'a :: {linorder_topology, conditionally_complete_linorder, no_top} \<Rightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1373
    'b::{linorder_topology, conditionally_complete_linorder}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1374
  assumes mono: "\<And>a b. a \<in> I \<Longrightarrow> b \<in> I \<Longrightarrow> x < a \<Longrightarrow> a \<le> b \<Longrightarrow> f a \<le> f b"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1375
    and bnd: "\<And>a. a \<in> I \<Longrightarrow> x < a \<Longrightarrow> K \<le> f a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1376
  shows "(f \<longlongrightarrow> Inf (f ` ({x<..} \<inter> I))) (at x within ({x<..} \<inter> I))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1377
proof (cases "{x<..} \<inter> I = {}")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1378
  case True
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1379
  then show ?thesis by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1380
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1381
  case False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1382
  show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1383
  proof (rule order_tendstoI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1384
    fix a
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1385
    assume a: "a < Inf (f ` ({x<..} \<inter> I))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1386
    {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1387
      fix y
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1388
      assume "y \<in> {x<..} \<inter> I"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1389
      with False bnd have "Inf (f ` ({x<..} \<inter> I)) \<le> f y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1390
        by (auto intro!: cInf_lower bdd_belowI2)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1391
      with a have "a < f y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1392
        by (blast intro: less_le_trans)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1393
    }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1394
    then show "eventually (\<lambda>x. a < f x) (at x within ({x<..} \<inter> I))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1395
      by (auto simp: eventually_at_filter intro: exI[of _ 1] zero_less_one)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1396
  next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1397
    fix a
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1398
    assume "Inf (f ` ({x<..} \<inter> I)) < a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1399
    from cInf_lessD[OF _ this] False obtain y where y: "x < y" "y \<in> I" "f y < a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1400
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1401
    then have "eventually (\<lambda>x. x \<in> I \<longrightarrow> f x < a) (at_right x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1402
      unfolding eventually_at_right[OF \<open>x < y\<close>] by (metis less_imp_le le_less_trans mono)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1403
    then show "eventually (\<lambda>x. f x < a) (at x within ({x<..} \<inter> I))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1404
      unfolding eventually_at_filter by eventually_elim simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1405
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1406
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1407
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1408
(*could prove directly from islimpt_sequential_inj, but only for metric spaces*)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1409
lemma islimpt_sequential:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1410
  fixes x :: "'a::first_countable_topology"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1411
  shows "x islimpt S \<longleftrightarrow> (\<exists>f. (\<forall>n::nat. f n \<in> S - {x}) \<and> (f \<longlongrightarrow> x) sequentially)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1412
    (is "?lhs = ?rhs")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1413
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1414
  assume ?lhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1415
  from countable_basis_at_decseq[of x] obtain A where A:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1416
      "\<And>i. open (A i)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1417
      "\<And>i. x \<in> A i"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1418
      "\<And>S. open S \<Longrightarrow> x \<in> S \<Longrightarrow> eventually (\<lambda>i. A i \<subseteq> S) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1419
    by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1420
  define f where "f n = (SOME y. y \<in> S \<and> y \<in> A n \<and> x \<noteq> y)" for n
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1421
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1422
    fix n
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1423
    from \<open>?lhs\<close> have "\<exists>y. y \<in> S \<and> y \<in> A n \<and> x \<noteq> y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1424
      unfolding islimpt_def using A(1,2)[of n] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1425
    then have "f n \<in> S \<and> f n \<in> A n \<and> x \<noteq> f n"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1426
      unfolding f_def by (rule someI_ex)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1427
    then have "f n \<in> S" "f n \<in> A n" "x \<noteq> f n" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1428
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1429
  then have "\<forall>n. f n \<in> S - {x}" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1430
  moreover have "(\<lambda>n. f n) \<longlonglongrightarrow> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1431
  proof (rule topological_tendstoI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1432
    fix S
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1433
    assume "open S" "x \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1434
    from A(3)[OF this] \<open>\<And>n. f n \<in> A n\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1435
    show "eventually (\<lambda>x. f x \<in> S) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1436
      by (auto elim!: eventually_mono)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1437
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1438
  ultimately show ?rhs by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1439
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1440
  assume ?rhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1441
  then obtain f :: "nat \<Rightarrow> 'a" where f: "\<And>n. f n \<in> S - {x}" and lim: "f \<longlonglongrightarrow> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1442
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1443
  show ?lhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1444
    unfolding islimpt_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1445
  proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1446
    fix T
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1447
    assume "open T" "x \<in> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1448
    from lim[THEN topological_tendstoD, OF this] f
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1449
    show "\<exists>y\<in>S. y \<in> T \<and> y \<noteq> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1450
      unfolding eventually_sequentially by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1451
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1452
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1453
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1454
text\<open>Deducing things about the limit from the elements.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1455
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1456
lemma Lim_in_closed_set:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1457
  assumes "closed S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1458
    and "eventually (\<lambda>x. f(x) \<in> S) net"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1459
    and "\<not> trivial_limit net" "(f \<longlongrightarrow> l) net"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1460
  shows "l \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1461
proof (rule ccontr)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1462
  assume "l \<notin> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1463
  with \<open>closed S\<close> have "open (- S)" "l \<in> - S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1464
    by (simp_all add: open_Compl)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1465
  with assms(4) have "eventually (\<lambda>x. f x \<in> - S) net"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1466
    by (rule topological_tendstoD)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1467
  with assms(2) have "eventually (\<lambda>x. False) net"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1468
    by (rule eventually_elim2) simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1469
  with assms(3) show "False"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1470
    by (simp add: eventually_False)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1471
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1472
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1473
text\<open>These are special for limits out of the same topological space.\<close>
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1474
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1475
lemma Lim_within_id: "(id \<longlongrightarrow> a) (at a within s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1476
  unfolding id_def by (rule tendsto_ident_at)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1477
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1478
lemma Lim_at_id: "(id \<longlongrightarrow> a) (at a)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1479
  unfolding id_def by (rule tendsto_ident_at)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1480
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1481
text\<open>It's also sometimes useful to extract the limit point from the filter.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1482
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1483
abbreviation netlimit :: "'a::t2_space filter \<Rightarrow> 'a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1484
  where "netlimit F \<equiv> Lim F (\<lambda>x. x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1485
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1486
lemma netlimit_within: "\<not> trivial_limit (at a within S) \<Longrightarrow> netlimit (at a within S) = a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1487
  by (rule tendsto_Lim) (auto intro: tendsto_intros)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1488
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1489
lemma netlimit_at [simp]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1490
  fixes a :: "'a::{perfect_space,t2_space}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1491
  shows "netlimit (at a) = a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1492
  using netlimit_within [of a UNIV] by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1493
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1494
lemma lim_within_interior:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1495
  "x \<in> interior S \<Longrightarrow> (f \<longlongrightarrow> l) (at x within S) \<longleftrightarrow> (f \<longlongrightarrow> l) (at x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1496
  by (metis at_within_interior)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1497
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1498
lemma netlimit_within_interior:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1499
  fixes x :: "'a::{t2_space,perfect_space}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1500
  assumes "x \<in> interior S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1501
  shows "netlimit (at x within S) = x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1502
  using assms by (metis at_within_interior netlimit_at)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1503
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1504
text\<open>Useful lemmas on closure and set of possible sequential limits.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1505
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1506
lemma closure_sequential:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1507
  fixes l :: "'a::first_countable_topology"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1508
  shows "l \<in> closure S \<longleftrightarrow> (\<exists>x. (\<forall>n. x n \<in> S) \<and> (x \<longlongrightarrow> l) sequentially)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1509
  (is "?lhs = ?rhs")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1510
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1511
  assume "?lhs"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1512
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1513
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1514
    assume "l \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1515
    then have "?rhs" using tendsto_const[of l sequentially] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1516
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1517
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1518
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1519
    assume "l islimpt S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1520
    then have "?rhs" unfolding islimpt_sequential by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1521
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1522
  ultimately show "?rhs"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1523
    unfolding closure_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1524
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1525
  assume "?rhs"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1526
  then show "?lhs" unfolding closure_def islimpt_sequential by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1527
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1528
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1529
lemma closed_sequential_limits:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1530
  fixes S :: "'a::first_countable_topology set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1531
  shows "closed S \<longleftrightarrow> (\<forall>x l. (\<forall>n. x n \<in> S) \<and> (x \<longlongrightarrow> l) sequentially \<longrightarrow> l \<in> S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1532
by (metis closure_sequential closure_subset_eq subset_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1533
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1534
lemma tendsto_If_within_closures:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1535
  assumes f: "x \<in> s \<union> (closure s \<inter> closure t) \<Longrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1536
      (f \<longlongrightarrow> l x) (at x within s \<union> (closure s \<inter> closure t))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1537
  assumes g: "x \<in> t \<union> (closure s \<inter> closure t) \<Longrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1538
      (g \<longlongrightarrow> l x) (at x within t \<union> (closure s \<inter> closure t))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1539
  assumes "x \<in> s \<union> t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1540
  shows "((\<lambda>x. if x \<in> s then f x else g x) \<longlongrightarrow> l x) (at x within s \<union> t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1541
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1542
  have *: "(s \<union> t) \<inter> {x. x \<in> s} = s" "(s \<union> t) \<inter> {x. x \<notin> s} = t - s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1543
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1544
  have "(f \<longlongrightarrow> l x) (at x within s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1545
    by (rule filterlim_at_within_closure_implies_filterlim)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1546
       (use \<open>x \<in> _\<close> in \<open>auto simp: inf_commute closure_def intro: tendsto_within_subset[OF f]\<close>)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1547
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1548
  have "(g \<longlongrightarrow> l x) (at x within t - s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1549
    by (rule filterlim_at_within_closure_implies_filterlim)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1550
      (use \<open>x \<in> _\<close> in
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1551
        \<open>auto intro!: tendsto_within_subset[OF g] simp: closure_def intro: islimpt_subset\<close>)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1552
  ultimately show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1553
    by (intro filterlim_at_within_If) (simp_all only: *)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1554
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1555
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1556
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1557
subsection \<open>Compactness\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1558
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1559
subsubsection \<open>Bolzano-Weierstrass property\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1560
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  1561
proposition Heine_Borel_imp_Bolzano_Weierstrass:
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1562
  assumes "compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1563
    and "infinite t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1564
    and "t \<subseteq> s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1565
  shows "\<exists>x \<in> s. x islimpt t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1566
proof (rule ccontr)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1567
  assume "\<not> (\<exists>x \<in> s. x islimpt t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1568
  then obtain f where f: "\<forall>x\<in>s. x \<in> f x \<and> open (f x) \<and> (\<forall>y\<in>t. y \<in> f x \<longrightarrow> y = x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1569
    unfolding islimpt_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1570
    using bchoice[of s "\<lambda> x T. x \<in> T \<and> open T \<and> (\<forall>y\<in>t. y \<in> T \<longrightarrow> y = x)"]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1571
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1572
  obtain g where g: "g \<subseteq> {t. \<exists>x. x \<in> s \<and> t = f x}" "finite g" "s \<subseteq> \<Union>g"
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  1573
    using assms(1)[unfolded compact_eq_Heine_Borel, THEN spec[where x="{t. \<exists>x. x\<in>s \<and> t = f x}"]]
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1574
    using f by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1575
  from g(1,3) have g':"\<forall>x\<in>g. \<exists>xa \<in> s. x = f xa"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1576
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1577
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1578
    fix x y
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1579
    assume "x \<in> t" "y \<in> t" "f x = f y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1580
    then have "x \<in> f x"  "y \<in> f x \<longrightarrow> y = x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1581
      using f[THEN bspec[where x=x]] and \<open>t \<subseteq> s\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1582
    then have "x = y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1583
      using \<open>f x = f y\<close> and f[THEN bspec[where x=y]] and \<open>y \<in> t\<close> and \<open>t \<subseteq> s\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1584
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1585
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1586
  then have "inj_on f t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1587
    unfolding inj_on_def by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1588
  then have "infinite (f ` t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1589
    using assms(2) using finite_imageD by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1590
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1591
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1592
    fix x
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1593
    assume "x \<in> t" "f x \<notin> g"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1594
    from g(3) assms(3) \<open>x \<in> t\<close> obtain h where "h \<in> g" and "x \<in> h"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1595
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1596
    then obtain y where "y \<in> s" "h = f y"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1597
      using g'[THEN bspec[where x=h]] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1598
    then have "y = x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1599
      using f[THEN bspec[where x=y]] and \<open>x\<in>t\<close> and \<open>x\<in>h\<close>[unfolded \<open>h = f y\<close>]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1600
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1601
    then have False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1602
      using \<open>f x \<notin> g\<close> \<open>h \<in> g\<close> unfolding \<open>h = f y\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1603
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1604
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1605
  then have "f ` t \<subseteq> g" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1606
  ultimately show False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1607
    using g(2) using finite_subset by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1608
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1609
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1610
lemma sequence_infinite_lemma:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1611
  fixes f :: "nat \<Rightarrow> 'a::t1_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1612
  assumes "\<forall>n. f n \<noteq> l"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1613
    and "(f \<longlongrightarrow> l) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1614
  shows "infinite (range f)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1615
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1616
  assume "finite (range f)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1617
  then have "closed (range f)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1618
    by (rule finite_imp_closed)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1619
  then have "open (- range f)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1620
    by (rule open_Compl)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1621
  from assms(1) have "l \<in> - range f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1622
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1623
  from assms(2) have "eventually (\<lambda>n. f n \<in> - range f) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1624
    using \<open>open (- range f)\<close> \<open>l \<in> - range f\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1625
    by (rule topological_tendstoD)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1626
  then show False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1627
    unfolding eventually_sequentially
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1628
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1629
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1630
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  1631
lemma Bolzano_Weierstrass_imp_closed:
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1632
  fixes s :: "'a::{first_countable_topology,t2_space} set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1633
  assumes "\<forall>t. infinite t \<and> t \<subseteq> s --> (\<exists>x \<in> s. x islimpt t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1634
  shows "closed s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1635
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1636
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1637
    fix x l
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1638
    assume as: "\<forall>n::nat. x n \<in> s" "(x \<longlongrightarrow> l) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1639
    then have "l \<in> s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1640
    proof (cases "\<forall>n. x n \<noteq> l")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1641
      case False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1642
      then show "l\<in>s" using as(1) by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1643
    next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1644
      case True note cas = this
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1645
      with as(2) have "infinite (range x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1646
        using sequence_infinite_lemma[of x l] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1647
      then obtain l' where "l'\<in>s" "l' islimpt (range x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1648
        using assms[THEN spec[where x="range x"]] as(1) by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1649
      then show "l\<in>s" using sequence_unique_limpt[of x l l']
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1650
        using as cas by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1651
    qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1652
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1653
  then show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1654
    unfolding closed_sequential_limits by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1655
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1656
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1657
lemma closure_insert:
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1658
  fixes x :: "'a::t1_space"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1659
  shows "closure (insert x s) = insert x (closure s)"
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1660
  apply (rule closure_unique)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1661
  apply (rule insert_mono [OF closure_subset])
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1662
  apply (rule closed_insert [OF closed_closure])
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1663
  apply (simp add: closure_minimal)
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1664
  done
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  1665
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1666
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1667
text\<open>In particular, some common special cases.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1668
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1669
lemma compact_Un [intro]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1670
  assumes "compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1671
    and "compact t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1672
  shows " compact (s \<union> t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1673
proof (rule compactI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1674
  fix f
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1675
  assume *: "Ball f open" "s \<union> t \<subseteq> \<Union>f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1676
  from * \<open>compact s\<close> obtain s' where "s' \<subseteq> f \<and> finite s' \<and> s \<subseteq> \<Union>s'"
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  1677
    unfolding compact_eq_Heine_Borel by (auto elim!: allE[of _ f])
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1678
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1679
  from * \<open>compact t\<close> obtain t' where "t' \<subseteq> f \<and> finite t' \<and> t \<subseteq> \<Union>t'"
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  1680
    unfolding compact_eq_Heine_Borel by (auto elim!: allE[of _ f])
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1681
  ultimately show "\<exists>f'\<subseteq>f. finite f' \<and> s \<union> t \<subseteq> \<Union>f'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1682
    by (auto intro!: exI[of _ "s' \<union> t'"])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1683
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1684
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1685
lemma compact_Union [intro]: "finite S \<Longrightarrow> (\<And>T. T \<in> S \<Longrightarrow> compact T) \<Longrightarrow> compact (\<Union>S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1686
  by (induct set: finite) auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1687
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1688
lemma compact_UN [intro]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1689
  "finite A \<Longrightarrow> (\<And>x. x \<in> A \<Longrightarrow> compact (B x)) \<Longrightarrow> compact (\<Union>x\<in>A. B x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1690
  by (rule compact_Union) auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1691
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1692
lemma closed_Int_compact [intro]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1693
  assumes "closed s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1694
    and "compact t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1695
  shows "compact (s \<inter> t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1696
  using compact_Int_closed [of t s] assms
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1697
  by (simp add: Int_commute)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1698
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1699
lemma compact_Int [intro]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1700
  fixes s t :: "'a :: t2_space set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1701
  assumes "compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1702
    and "compact t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1703
  shows "compact (s \<inter> t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1704
  using assms by (intro compact_Int_closed compact_imp_closed)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1705
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1706
lemma compact_sing [simp]: "compact {a}"
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  1707
  unfolding compact_eq_Heine_Borel by auto
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1708
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1709
lemma compact_insert [simp]:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1710
  assumes "compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1711
  shows "compact (insert x s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1712
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1713
  have "compact ({x} \<union> s)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1714
    using compact_sing assms by (rule compact_Un)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1715
  then show ?thesis by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1716
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1717
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1718
lemma finite_imp_compact: "finite s \<Longrightarrow> compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1719
  by (induct set: finite) simp_all
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1720
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1721
lemma open_delete:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1722
  fixes s :: "'a::t1_space set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1723
  shows "open s \<Longrightarrow> open (s - {x})"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1724
  by (simp add: open_Diff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1725
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1726
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1727
text\<open>Compactness expressed with filters\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1728
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1729
lemma closure_iff_nhds_not_empty:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1730
  "x \<in> closure X \<longleftrightarrow> (\<forall>A. \<forall>S\<subseteq>A. open S \<longrightarrow> x \<in> S \<longrightarrow> X \<inter> A \<noteq> {})"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1731
proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1732
  assume x: "x \<in> closure X"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1733
  fix S A
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1734
  assume "open S" "x \<in> S" "X \<inter> A = {}" "S \<subseteq> A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1735
  then have "x \<notin> closure (-S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1736
    by (auto simp: closure_complement subset_eq[symmetric] intro: interiorI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1737
  with x have "x \<in> closure X - closure (-S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1738
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1739
  also have "\<dots> \<subseteq> closure (X \<inter> S)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1740
    using \<open>open S\<close> open_Int_closure_subset[of S X] by (simp add: closed_Compl ac_simps)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1741
  finally have "X \<inter> S \<noteq> {}" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1742
  then show False using \<open>X \<inter> A = {}\<close> \<open>S \<subseteq> A\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1743
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1744
  assume "\<forall>A S. S \<subseteq> A \<longrightarrow> open S \<longrightarrow> x \<in> S \<longrightarrow> X \<inter> A \<noteq> {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1745
  from this[THEN spec, of "- X", THEN spec, of "- closure X"]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1746
  show "x \<in> closure X"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1747
    by (simp add: closure_subset open_Compl)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1748
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1749
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1750
lemma compact_filter:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1751
  "compact U \<longleftrightarrow> (\<forall>F. F \<noteq> bot \<longrightarrow> eventually (\<lambda>x. x \<in> U) F \<longrightarrow> (\<exists>x\<in>U. inf (nhds x) F \<noteq> bot))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1752
proof (intro allI iffI impI compact_fip[THEN iffD2] notI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1753
  fix F
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1754
  assume "compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1755
  assume F: "F \<noteq> bot" "eventually (\<lambda>x. x \<in> U) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1756
  then have "U \<noteq> {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1757
    by (auto simp: eventually_False)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1758
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1759
  define Z where "Z = closure ` {A. eventually (\<lambda>x. x \<in> A) F}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1760
  then have "\<forall>z\<in>Z. closed z"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1761
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1762
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1763
  have ev_Z: "\<And>z. z \<in> Z \<Longrightarrow> eventually (\<lambda>x. x \<in> z) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1764
    unfolding Z_def by (auto elim: eventually_mono intro: set_mp[OF closure_subset])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1765
  have "(\<forall>B \<subseteq> Z. finite B \<longrightarrow> U \<inter> \<Inter>B \<noteq> {})"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1766
  proof (intro allI impI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1767
    fix B assume "finite B" "B \<subseteq> Z"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1768
    with \<open>finite B\<close> ev_Z F(2) have "eventually (\<lambda>x. x \<in> U \<inter> (\<Inter>B)) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1769
      by (auto simp: eventually_ball_finite_distrib eventually_conj_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1770
    with F show "U \<inter> \<Inter>B \<noteq> {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1771
      by (intro notI) (simp add: eventually_False)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1772
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1773
  ultimately have "U \<inter> \<Inter>Z \<noteq> {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1774
    using \<open>compact U\<close> unfolding compact_fip by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1775
  then obtain x where "x \<in> U" and x: "\<And>z. z \<in> Z \<Longrightarrow> x \<in> z"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1776
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1777
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1778
  have "\<And>P. eventually P (inf (nhds x) F) \<Longrightarrow> P \<noteq> bot"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1779
    unfolding eventually_inf eventually_nhds
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1780
  proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1781
    fix P Q R S
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1782
    assume "eventually R F" "open S" "x \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1783
    with open_Int_closure_eq_empty[of S "{x. R x}"] x[of "closure {x. R x}"]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1784
    have "S \<inter> {x. R x} \<noteq> {}" by (auto simp: Z_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1785
    moreover assume "Ball S Q" "\<forall>x. Q x \<and> R x \<longrightarrow> bot x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1786
    ultimately show False by (auto simp: set_eq_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1787
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1788
  with \<open>x \<in> U\<close> show "\<exists>x\<in>U. inf (nhds x) F \<noteq> bot"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1789
    by (metis eventually_bot)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1790
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1791
  fix A
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1792
  assume A: "\<forall>a\<in>A. closed a" "\<forall>B\<subseteq>A. finite B \<longrightarrow> U \<inter> \<Inter>B \<noteq> {}" "U \<inter> \<Inter>A = {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1793
  define F where "F = (INF a\<in>insert U A. principal a)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1794
  have "F \<noteq> bot"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1795
    unfolding F_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1796
  proof (rule INF_filter_not_bot)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1797
    fix X
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1798
    assume X: "X \<subseteq> insert U A" "finite X"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1799
    with A(2)[THEN spec, of "X - {U}"] have "U \<inter> \<Inter>(X - {U}) \<noteq> {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1800
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1801
    with X show "(INF a\<in>X. principal a) \<noteq> bot"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1802
      by (auto simp: INF_principal_finite principal_eq_bot_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1803
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1804
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1805
  have "F \<le> principal U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1806
    unfolding F_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1807
  then have "eventually (\<lambda>x. x \<in> U) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1808
    by (auto simp: le_filter_def eventually_principal)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1809
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1810
  assume "\<forall>F. F \<noteq> bot \<longrightarrow> eventually (\<lambda>x. x \<in> U) F \<longrightarrow> (\<exists>x\<in>U. inf (nhds x) F \<noteq> bot)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1811
  ultimately obtain x where "x \<in> U" and x: "inf (nhds x) F \<noteq> bot"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1812
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1813
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1814
  { fix V assume "V \<in> A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1815
    then have "F \<le> principal V"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1816
      unfolding F_def by (intro INF_lower2[of V]) auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1817
    then have V: "eventually (\<lambda>x. x \<in> V) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1818
      by (auto simp: le_filter_def eventually_principal)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1819
    have "x \<in> closure V"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1820
      unfolding closure_iff_nhds_not_empty
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1821
    proof (intro impI allI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1822
      fix S A
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1823
      assume "open S" "x \<in> S" "S \<subseteq> A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1824
      then have "eventually (\<lambda>x. x \<in> A) (nhds x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1825
        by (auto simp: eventually_nhds)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1826
      with V have "eventually (\<lambda>x. x \<in> V \<inter> A) (inf (nhds x) F)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1827
        by (auto simp: eventually_inf)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1828
      with x show "V \<inter> A \<noteq> {}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1829
        by (auto simp del: Int_iff simp add: trivial_limit_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1830
    qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1831
    then have "x \<in> V"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1832
      using \<open>V \<in> A\<close> A(1) by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1833
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1834
  with \<open>x\<in>U\<close> have "x \<in> U \<inter> \<Inter>A" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1835
  with \<open>U \<inter> \<Inter>A = {}\<close> show False by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1836
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1837
69564
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1838
definition%important countably_compact :: "('a::topological_space) set \<Rightarrow> bool" where
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1839
"countably_compact U \<longleftrightarrow>
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1840
  (\<forall>A. countable A \<longrightarrow> (\<forall>a\<in>A. open a) \<longrightarrow> U \<subseteq> \<Union>A
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1841
     \<longrightarrow> (\<exists>T\<subseteq>A. finite T \<and> U \<subseteq> \<Union>T))"
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1842
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1843
lemma countably_compactE:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1844
  assumes "countably_compact s" and "\<forall>t\<in>C. open t" and "s \<subseteq> \<Union>C" "countable C"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1845
  obtains C' where "C' \<subseteq> C" and "finite C'" and "s \<subseteq> \<Union>C'"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1846
  using assms unfolding countably_compact_def by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1847
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1848
lemma countably_compactI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1849
  assumes "\<And>C. \<forall>t\<in>C. open t \<Longrightarrow> s \<subseteq> \<Union>C \<Longrightarrow> countable C \<Longrightarrow> (\<exists>C'\<subseteq>C. finite C' \<and> s \<subseteq> \<Union>C')"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1850
  shows "countably_compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1851
  using assms unfolding countably_compact_def by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1852
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1853
lemma compact_imp_countably_compact: "compact U \<Longrightarrow> countably_compact U"
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  1854
  by (auto simp: compact_eq_Heine_Borel countably_compact_def)
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1855
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1856
lemma countably_compact_imp_compact:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1857
  assumes "countably_compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1858
    and ccover: "countable B" "\<forall>b\<in>B. open b"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1859
    and basis: "\<And>T x. open T \<Longrightarrow> x \<in> T \<Longrightarrow> x \<in> U \<Longrightarrow> \<exists>b\<in>B. x \<in> b \<and> b \<inter> U \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1860
  shows "compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1861
  using \<open>countably_compact U\<close>
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  1862
  unfolding compact_eq_Heine_Borel countably_compact_def
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1863
proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1864
  fix A
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1865
  assume A: "\<forall>a\<in>A. open a" "U \<subseteq> \<Union>A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1866
  assume *: "\<forall>A. countable A \<longrightarrow> (\<forall>a\<in>A. open a) \<longrightarrow> U \<subseteq> \<Union>A \<longrightarrow> (\<exists>T\<subseteq>A. finite T \<and> U \<subseteq> \<Union>T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1867
  moreover define C where "C = {b\<in>B. \<exists>a\<in>A. b \<inter> U \<subseteq> a}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1868
  ultimately have "countable C" "\<forall>a\<in>C. open a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1869
    unfolding C_def using ccover by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1870
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1871
  have "\<Union>A \<inter> U \<subseteq> \<Union>C"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1872
  proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1873
    fix x a
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1874
    assume "x \<in> U" "x \<in> a" "a \<in> A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1875
    with basis[of a x] A obtain b where "b \<in> B" "x \<in> b" "b \<inter> U \<subseteq> a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1876
      by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1877
    with \<open>a \<in> A\<close> show "x \<in> \<Union>C"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1878
      unfolding C_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1879
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1880
  then have "U \<subseteq> \<Union>C" using \<open>U \<subseteq> \<Union>A\<close> by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1881
  ultimately obtain T where T: "T\<subseteq>C" "finite T" "U \<subseteq> \<Union>T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1882
    using * by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1883
  then have "\<forall>t\<in>T. \<exists>a\<in>A. t \<inter> U \<subseteq> a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1884
    by (auto simp: C_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1885
  then obtain f where "\<forall>t\<in>T. f t \<in> A \<and> t \<inter> U \<subseteq> f t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1886
    unfolding bchoice_iff Bex_def ..
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1887
  with T show "\<exists>T\<subseteq>A. finite T \<and> U \<subseteq> \<Union>T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1888
    unfolding C_def by (intro exI[of _ "f`T"]) fastforce
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1889
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1890
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1891
proposition countably_compact_imp_compact_second_countable:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1892
  "countably_compact U \<Longrightarrow> compact (U :: 'a :: second_countable_topology set)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1893
proof (rule countably_compact_imp_compact)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1894
  fix T and x :: 'a
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1895
  assume "open T" "x \<in> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1896
  from topological_basisE[OF is_basis this] obtain b where
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1897
    "b \<in> (SOME B. countable B \<and> topological_basis B)" "x \<in> b" "b \<subseteq> T" .
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1898
  then show "\<exists>b\<in>SOME B. countable B \<and> topological_basis B. x \<in> b \<and> b \<inter> U \<subseteq> T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1899
    by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1900
qed (insert countable_basis topological_basis_open[OF is_basis], auto)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1901
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1902
lemma countably_compact_eq_compact:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1903
  "countably_compact U \<longleftrightarrow> compact (U :: 'a :: second_countable_topology set)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1904
  using countably_compact_imp_compact_second_countable compact_imp_countably_compact by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1905
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1906
subsubsection\<open>Sequential compactness\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1907
69564
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1908
definition%important seq_compact :: "'a::topological_space set \<Rightarrow> bool" where
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1909
"seq_compact S \<longleftrightarrow>
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1910
  (\<forall>f. (\<forall>n. f n \<in> S)
a59f7d07bf17 tuned defs
nipkow
parents: 69544
diff changeset
  1911
    \<longrightarrow> (\<exists>l\<in>S. \<exists>r::nat\<Rightarrow>nat. strict_mono r \<and> ((f \<circ> r) \<longlongrightarrow> l) sequentially))"
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1912
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1913
lemma seq_compactI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1914
  assumes "\<And>f. \<forall>n. f n \<in> S \<Longrightarrow> \<exists>l\<in>S. \<exists>r::nat\<Rightarrow>nat. strict_mono r \<and> ((f \<circ> r) \<longlongrightarrow> l) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1915
  shows "seq_compact S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1916
  unfolding seq_compact_def using assms by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1917
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1918
lemma seq_compactE:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1919
  assumes "seq_compact S" "\<forall>n. f n \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1920
  obtains l r where "l \<in> S" "strict_mono (r :: nat \<Rightarrow> nat)" "((f \<circ> r) \<longlongrightarrow> l) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1921
  using assms unfolding seq_compact_def by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1922
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1923
lemma closed_sequentially: (* TODO: move upwards *)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1924
  assumes "closed s" and "\<forall>n. f n \<in> s" and "f \<longlonglongrightarrow> l"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1925
  shows "l \<in> s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1926
proof (rule ccontr)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1927
  assume "l \<notin> s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1928
  with \<open>closed s\<close> and \<open>f \<longlonglongrightarrow> l\<close> have "eventually (\<lambda>n. f n \<in> - s) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1929
    by (fast intro: topological_tendstoD)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1930
  with \<open>\<forall>n. f n \<in> s\<close> show "False"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1931
    by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1932
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1933
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1934
lemma seq_compact_Int_closed:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1935
  assumes "seq_compact s" and "closed t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1936
  shows "seq_compact (s \<inter> t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1937
proof (rule seq_compactI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1938
  fix f assume "\<forall>n::nat. f n \<in> s \<inter> t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1939
  hence "\<forall>n. f n \<in> s" and "\<forall>n. f n \<in> t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1940
    by simp_all
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1941
  from \<open>seq_compact s\<close> and \<open>\<forall>n. f n \<in> s\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1942
  obtain l r where "l \<in> s" and r: "strict_mono r" and l: "(f \<circ> r) \<longlonglongrightarrow> l"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1943
    by (rule seq_compactE)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1944
  from \<open>\<forall>n. f n \<in> t\<close> have "\<forall>n. (f \<circ> r) n \<in> t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1945
    by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1946
  from \<open>closed t\<close> and this and l have "l \<in> t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1947
    by (rule closed_sequentially)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1948
  with \<open>l \<in> s\<close> and r and l show "\<exists>l\<in>s \<inter> t. \<exists>r. strict_mono r \<and> (f \<circ> r) \<longlonglongrightarrow> l"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1949
    by fast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1950
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1951
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1952
lemma seq_compact_closed_subset:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1953
  assumes "closed s" and "s \<subseteq> t" and "seq_compact t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1954
  shows "seq_compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1955
  using assms seq_compact_Int_closed [of t s] by (simp add: Int_absorb1)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1956
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1957
lemma seq_compact_imp_countably_compact:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1958
  fixes U :: "'a :: first_countable_topology set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1959
  assumes "seq_compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1960
  shows "countably_compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1961
proof (safe intro!: countably_compactI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1962
  fix A
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1963
  assume A: "\<forall>a\<in>A. open a" "U \<subseteq> \<Union>A" "countable A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1964
  have subseq: "\<And>X. range X \<subseteq> U \<Longrightarrow> \<exists>r x. x \<in> U \<and> strict_mono (r :: nat \<Rightarrow> nat) \<and> (X \<circ> r) \<longlonglongrightarrow> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1965
    using \<open>seq_compact U\<close> by (fastforce simp: seq_compact_def subset_eq)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1966
  show "\<exists>T\<subseteq>A. finite T \<and> U \<subseteq> \<Union>T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1967
  proof cases
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1968
    assume "finite A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1969
    with A show ?thesis by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1970
  next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1971
    assume "infinite A"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1972
    then have "A \<noteq> {}" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1973
    show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1974
    proof (rule ccontr)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1975
      assume "\<not> (\<exists>T\<subseteq>A. finite T \<and> U \<subseteq> \<Union>T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1976
      then have "\<forall>T. \<exists>x. T \<subseteq> A \<and> finite T \<longrightarrow> (x \<in> U - \<Union>T)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1977
        by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1978
      then obtain X' where T: "\<And>T. T \<subseteq> A \<Longrightarrow> finite T \<Longrightarrow> X' T \<in> U - \<Union>T"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1979
        by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1980
      define X where "X n = X' (from_nat_into A ` {.. n})" for n
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1981
      have X: "\<And>n. X n \<in> U - (\<Union>i\<le>n. from_nat_into A i)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1982
        using \<open>A \<noteq> {}\<close> unfolding X_def by (intro T) (auto intro: from_nat_into)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1983
      then have "range X \<subseteq> U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1984
        by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1985
      with subseq[of X] obtain r x where "x \<in> U" and r: "strict_mono r" "(X \<circ> r) \<longlonglongrightarrow> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1986
        by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1987
      from \<open>x\<in>U\<close> \<open>U \<subseteq> \<Union>A\<close> from_nat_into_surj[OF \<open>countable A\<close>]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1988
      obtain n where "x \<in> from_nat_into A n" by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1989
      with r(2) A(1) from_nat_into[OF \<open>A \<noteq> {}\<close>, of n]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1990
      have "eventually (\<lambda>i. X (r i) \<in> from_nat_into A n) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1991
        unfolding tendsto_def by (auto simp: comp_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1992
      then obtain N where "\<And>i. N \<le> i \<Longrightarrow> X (r i) \<in> from_nat_into A n"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1993
        by (auto simp: eventually_sequentially)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1994
      moreover from X have "\<And>i. n \<le> r i \<Longrightarrow> X (r i) \<notin> from_nat_into A n"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1995
        by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1996
      moreover from \<open>strict_mono r\<close>[THEN seq_suble, of "max n N"] have "\<exists>i. n \<le> r i \<and> N \<le> i"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1997
        by (auto intro!: exI[of _ "max n N"])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1998
      ultimately show False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  1999
        by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2000
    qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2001
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2002
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2003
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2004
lemma compact_imp_seq_compact:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2005
  fixes U :: "'a :: first_countable_topology set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2006
  assumes "compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2007
  shows "seq_compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2008
  unfolding seq_compact_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2009
proof safe
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2010
  fix X :: "nat \<Rightarrow> 'a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2011
  assume "\<forall>n. X n \<in> U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2012
  then have "eventually (\<lambda>x. x \<in> U) (filtermap X sequentially)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2013
    by (auto simp: eventually_filtermap)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2014
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2015
  have "filtermap X sequentially \<noteq> bot"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2016
    by (simp add: trivial_limit_def eventually_filtermap)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2017
  ultimately
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2018
  obtain x where "x \<in> U" and x: "inf (nhds x) (filtermap X sequentially) \<noteq> bot" (is "?F \<noteq> _")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2019
    using \<open>compact U\<close> by (auto simp: compact_filter)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2020
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2021
  from countable_basis_at_decseq[of x]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2022
  obtain A where A:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2023
      "\<And>i. open (A i)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2024
      "\<And>i. x \<in> A i"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2025
      "\<And>S. open S \<Longrightarrow> x \<in> S \<Longrightarrow> eventually (\<lambda>i. A i \<subseteq> S) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2026
    by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2027
  define s where "s n i = (SOME j. i < j \<and> X j \<in> A (Suc n))" for n i
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2028
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2029
    fix n i
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2030
    have "\<exists>a. i < a \<and> X a \<in> A (Suc n)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2031
    proof (rule ccontr)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2032
      assume "\<not> (\<exists>a>i. X a \<in> A (Suc n))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2033
      then have "\<And>a. Suc i \<le> a \<Longrightarrow> X a \<notin> A (Suc n)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2034
        by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2035
      then have "eventually (\<lambda>x. x \<notin> A (Suc n)) (filtermap X sequentially)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2036
        by (auto simp: eventually_filtermap eventually_sequentially)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2037
      moreover have "eventually (\<lambda>x. x \<in> A (Suc n)) (nhds x)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2038
        using A(1,2)[of "Suc n"] by (auto simp: eventually_nhds)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2039
      ultimately have "eventually (\<lambda>x. False) ?F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2040
        by (auto simp: eventually_inf)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2041
      with x show False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2042
        by (simp add: eventually_False)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2043
    qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2044
    then have "i < s n i" "X (s n i) \<in> A (Suc n)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2045
      unfolding s_def by (auto intro: someI2_ex)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2046
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2047
  note s = this
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2048
  define r where "r = rec_nat (s 0 0) s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2049
  have "strict_mono r"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2050
    by (auto simp: r_def s strict_mono_Suc_iff)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2051
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2052
  have "(\<lambda>n. X (r n)) \<longlonglongrightarrow> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2053
  proof (rule topological_tendstoI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2054
    fix S
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2055
    assume "open S" "x \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2056
    with A(3) have "eventually (\<lambda>i. A i \<subseteq> S) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2057
      by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2058
    moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2059
    {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2060
      fix i
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2061
      assume "Suc 0 \<le> i"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2062
      then have "X (r i) \<in> A i"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2063
        by (cases i) (simp_all add: r_def s)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2064
    }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2065
    then have "eventually (\<lambda>i. X (r i) \<in> A i) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2066
      by (auto simp: eventually_sequentially)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2067
    ultimately show "eventually (\<lambda>i. X (r i) \<in> S) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2068
      by eventually_elim auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2069
  qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2070
  ultimately show "\<exists>x \<in> U. \<exists>r. strict_mono r \<and> (X \<circ> r) \<longlonglongrightarrow> x"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2071
    using \<open>x \<in> U\<close> by (auto simp: convergent_def comp_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2072
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2073
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2074
lemma countably_compact_imp_acc_point:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2075
  assumes "countably_compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2076
    and "countable t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2077
    and "infinite t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2078
    and "t \<subseteq> s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2079
  shows "\<exists>x\<in>s. \<forall>U. x\<in>U \<and> open U \<longrightarrow> infinite (U \<inter> t)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2080
proof (rule ccontr)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2081
  define C where "C = (\<lambda>F. interior (F \<union> (- t))) ` {F. finite F \<and> F \<subseteq> t }"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2082
  note \<open>countably_compact s\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2083
  moreover have "\<forall>t\<in>C. open t"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2084
    by (auto simp: C_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2085
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2086
  assume "\<not> (\<exists>x\<in>s. \<forall>U. x\<in>U \<and> open U \<longrightarrow> infinite (U \<inter> t))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2087
  then have s: "\<And>x. x \<in> s \<Longrightarrow> \<exists>U. x\<in>U \<and> open U \<and> finite (U \<inter> t)" by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2088
  have "s \<subseteq> \<Union>C"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2089
    using \<open>t \<subseteq> s\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2090
    unfolding C_def
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2091
    apply (safe dest!: s)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2092
    apply (rule_tac a="U \<inter> t" in UN_I)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2093
    apply (auto intro!: interiorI simp add: finite_subset)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2094
    done
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2095
  moreover
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2096
  from \<open>countable t\<close> have "countable C"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2097
    unfolding C_def by (auto intro: countable_Collect_finite_subset)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2098
  ultimately
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2099
  obtain D where "D \<subseteq> C" "finite D" "s \<subseteq> \<Union>D"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2100
    by (rule countably_compactE)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2101
  then obtain E where E: "E \<subseteq> {F. finite F \<and> F \<subseteq> t }" "finite E"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2102
    and s: "s \<subseteq> (\<Union>F\<in>E. interior (F \<union> (- t)))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2103
    by (metis (lifting) finite_subset_image C_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2104
  from s \<open>t \<subseteq> s\<close> have "t \<subseteq> \<Union>E"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2105
    using interior_subset by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2106
  moreover have "finite (\<Union>E)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2107
    using E by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2108
  ultimately show False using \<open>infinite t\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2109
    by (auto simp: finite_subset)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2110
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2111
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2112
lemma countable_acc_point_imp_seq_compact:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2113
  fixes s :: "'a::first_countable_topology set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2114
  assumes "\<forall>t. infinite t \<and> countable t \<and> t \<subseteq> s \<longrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2115
    (\<exists>x\<in>s. \<forall>U. x\<in>U \<and> open U \<longrightarrow> infinite (U \<inter> t))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2116
  shows "seq_compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2117
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2118
  {
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2119
    fix f :: "nat \<Rightarrow> 'a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2120
    assume f: "\<forall>n. f n \<in> s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2121
    have "\<exists>l\<in>s. \<exists>r. strict_mono r \<and> ((f \<circ> r) \<longlongrightarrow> l) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2122
    proof (cases "finite (range f)")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2123
      case True
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2124
      obtain l where "infinite {n. f n = f l}"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2125
        using pigeonhole_infinite[OF _ True] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2126
      then obtain r :: "nat \<Rightarrow> nat" where "strict_mono  r" and fr: "\<forall>n. f (r n) = f l"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2127
        using infinite_enumerate by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2128
      then have "strict_mono r \<and> (f \<circ> r) \<longlonglongrightarrow> f l"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2129
        by (simp add: fr o_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2130
      with f show "\<exists>l\<in>s. \<exists>r. strict_mono  r \<and> (f \<circ> r) \<longlonglongrightarrow> l"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2131
        by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2132
    next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2133
      case False
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2134
      with f assms have "\<exists>x\<in>s. \<forall>U. x\<in>U \<and> open U \<longrightarrow> infinite (U \<inter> range f)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2135
        by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2136
      then obtain l where "l \<in> s" "\<forall>U. l\<in>U \<and> open U \<longrightarrow> infinite (U \<inter> range f)" ..
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2137
      from this(2) have "\<exists>r. strict_mono r \<and> ((f \<circ> r) \<longlongrightarrow> l) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2138
        using acc_point_range_imp_convergent_subsequence[of l f] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2139
      with \<open>l \<in> s\<close> show "\<exists>l\<in>s. \<exists>r. strict_mono r \<and> ((f \<circ> r) \<longlongrightarrow> l) sequentially" ..
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2140
    qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2141
  }
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2142
  then show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2143
    unfolding seq_compact_def by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2144
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2145
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2146
lemma seq_compact_eq_countably_compact:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2147
  fixes U :: "'a :: first_countable_topology set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2148
  shows "seq_compact U \<longleftrightarrow> countably_compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2149
  using
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2150
    countable_acc_point_imp_seq_compact
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2151
    countably_compact_imp_acc_point
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2152
    seq_compact_imp_countably_compact
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2153
  by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2154
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2155
lemma seq_compact_eq_acc_point:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2156
  fixes s :: "'a :: first_countable_topology set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2157
  shows "seq_compact s \<longleftrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2158
    (\<forall>t. infinite t \<and> countable t \<and> t \<subseteq> s --> (\<exists>x\<in>s. \<forall>U. x\<in>U \<and> open U \<longrightarrow> infinite (U \<inter> t)))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2159
  using
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2160
    countable_acc_point_imp_seq_compact[of s]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2161
    countably_compact_imp_acc_point[of s]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2162
    seq_compact_imp_countably_compact[of s]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2163
  by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2164
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2165
lemma seq_compact_eq_compact:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2166
  fixes U :: "'a :: second_countable_topology set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2167
  shows "seq_compact U \<longleftrightarrow> compact U"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2168
  using seq_compact_eq_countably_compact countably_compact_eq_compact by blast
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2169
69529
4ab9657b3257 capitalize proper names in lemma names
nipkow
parents: 69516
diff changeset
  2170
proposition Bolzano_Weierstrass_imp_seq_compact:
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2171
  fixes s :: "'a::{t1_space, first_countable_topology} set"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2172
  shows "\<forall>t. infinite t \<and> t \<subseteq> s \<longrightarrow> (\<exists>x \<in> s. x islimpt t) \<Longrightarrow> seq_compact s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2173
  by (rule countable_acc_point_imp_seq_compact) (metis islimpt_eq_acc_point)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2174
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2175
69613
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2176
subsection%unimportant \<open>Cartesian products\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2177
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2178
lemma seq_compact_Times: "seq_compact s \<Longrightarrow> seq_compact t \<Longrightarrow> seq_compact (s \<times> t)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2179
  unfolding seq_compact_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2180
  apply clarify
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2181
  apply (drule_tac x="fst \<circ> f" in spec)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2182
  apply (drule mp, simp add: mem_Times_iff)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2183
  apply (clarify, rename_tac l1 r1)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2184
  apply (drule_tac x="snd \<circ> f \<circ> r1" in spec)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2185
  apply (drule mp, simp add: mem_Times_iff)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2186
  apply (clarify, rename_tac l2 r2)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2187
  apply (rule_tac x="(l1, l2)" in rev_bexI, simp)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2188
  apply (rule_tac x="r1 \<circ> r2" in exI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2189
  apply (rule conjI, simp add: strict_mono_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2190
  apply (drule_tac f=r2 in LIMSEQ_subseq_LIMSEQ, assumption)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2191
  apply (drule (1) tendsto_Pair) back
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2192
  apply (simp add: o_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2193
  done
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2194
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2195
lemma compact_Times:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2196
  assumes "compact s" "compact t"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2197
  shows "compact (s \<times> t)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2198
proof (rule compactI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2199
  fix C
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2200
  assume C: "\<forall>t\<in>C. open t" "s \<times> t \<subseteq> \<Union>C"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2201
  have "\<forall>x\<in>s. \<exists>a. open a \<and> x \<in> a \<and> (\<exists>d\<subseteq>C. finite d \<and> a \<times> t \<subseteq> \<Union>d)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2202
  proof
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2203
    fix x
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2204
    assume "x \<in> s"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2205
    have "\<forall>y\<in>t. \<exists>a b c. c \<in> C \<and> open a \<and> open b \<and> x \<in> a \<and> y \<in> b \<and> a \<times> b \<subseteq> c" (is "\<forall>y\<in>t. ?P y")
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2206
    proof
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2207
      fix y
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2208
      assume "y \<in> t"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2209
      with \<open>x \<in> s\<close> C obtain c where "c \<in> C" "(x, y) \<in> c" "open c" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2210
      then show "?P y" by (auto elim!: open_prod_elim)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2211
    qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2212
    then obtain a b c where b: "\<And>y. y \<in> t \<Longrightarrow> open (b y)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2213
      and c: "\<And>y. y \<in> t \<Longrightarrow> c y \<in> C \<and> open (a y) \<and> open (b y) \<and> x \<in> a y \<and> y \<in> b y \<and> a y \<times> b y \<subseteq> c y"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2214
      by metis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2215
    then have "\<forall>y\<in>t. open (b y)" "t \<subseteq> (\<Union>y\<in>t. b y)" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2216
    with compactE_image[OF \<open>compact t\<close>] obtain D where D: "D \<subseteq> t" "finite D" "t \<subseteq> (\<Union>y\<in>D. b y)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2217
      by metis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2218
    moreover from D c have "(\<Inter>y\<in>D. a y) \<times> t \<subseteq> (\<Union>y\<in>D. c y)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2219
      by (fastforce simp: subset_eq)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2220
    ultimately show "\<exists>a. open a \<and> x \<in> a \<and> (\<exists>d\<subseteq>C. finite d \<and> a \<times> t \<subseteq> \<Union>d)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2221
      using c by (intro exI[of _ "c`D"] exI[of _ "\<Inter>(a`D)"] conjI) (auto intro!: open_INT)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2222
  qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2223
  then obtain a d where a: "\<And>x. x\<in>s \<Longrightarrow> open (a x)" "s \<subseteq> (\<Union>x\<in>s. a x)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2224
    and d: "\<And>x. x \<in> s \<Longrightarrow> d x \<subseteq> C \<and> finite (d x) \<and> a x \<times> t \<subseteq> \<Union>d x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2225
    unfolding subset_eq UN_iff by metis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2226
  moreover
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2227
  from compactE_image[OF \<open>compact s\<close> a]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2228
  obtain e where e: "e \<subseteq> s" "finite e" and s: "s \<subseteq> (\<Union>x\<in>e. a x)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2229
    by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2230
  moreover
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2231
  {
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2232
    from s have "s \<times> t \<subseteq> (\<Union>x\<in>e. a x \<times> t)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2233
      by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2234
    also have "\<dots> \<subseteq> (\<Union>x\<in>e. \<Union>d x)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2235
      using d \<open>e \<subseteq> s\<close> by (intro UN_mono) auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2236
    finally have "s \<times> t \<subseteq> (\<Union>x\<in>e. \<Union>d x)" .
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2237
  }
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2238
  ultimately show "\<exists>C'\<subseteq>C. finite C' \<and> s \<times> t \<subseteq> \<Union>C'"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2239
    by (intro exI[of _ "(\<Union>x\<in>e. d x)"]) (auto simp: subset_eq)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2240
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2241
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2242
69615
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2243
lemma tube_lemma:
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2244
  assumes "compact K"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2245
  assumes "open W"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2246
  assumes "{x0} \<times> K \<subseteq> W"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2247
  shows "\<exists>X0. x0 \<in> X0 \<and> open X0 \<and> X0 \<times> K \<subseteq> W"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2248
proof -
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2249
  {
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2250
    fix y assume "y \<in> K"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2251
    then have "(x0, y) \<in> W" using assms by auto
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2252
    with \<open>open W\<close>
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2253
    have "\<exists>X0 Y. open X0 \<and> open Y \<and> x0 \<in> X0 \<and> y \<in> Y \<and> X0 \<times> Y \<subseteq> W"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2254
      by (rule open_prod_elim) blast
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2255
  }
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2256
  then obtain X0 Y where
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2257
    *: "\<forall>y \<in> K. open (X0 y) \<and> open (Y y) \<and> x0 \<in> X0 y \<and> y \<in> Y y \<and> X0 y \<times> Y y \<subseteq> W"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2258
    by metis
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2259
  from * have "\<forall>t\<in>Y ` K. open t" "K \<subseteq> \<Union>(Y ` K)" by auto
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2260
  with \<open>compact K\<close> obtain CC where CC: "CC \<subseteq> Y ` K" "finite CC" "K \<subseteq> \<Union>CC"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2261
    by (meson compactE)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2262
  then obtain c where c: "\<And>C. C \<in> CC \<Longrightarrow> c C \<in> K \<and> C = Y (c C)"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2263
    by (force intro!: choice)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2264
  with * CC show ?thesis
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2265
    by (force intro!: exI[where x="\<Inter>C\<in>CC. X0 (c C)"]) (* SLOW *)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2266
qed
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2267
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2268
lemma continuous_on_prod_compactE:
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2269
  fixes fx::"'a::topological_space \<times> 'b::topological_space \<Rightarrow> 'c::metric_space"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2270
    and e::real
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2271
  assumes cont_fx: "continuous_on (U \<times> C) fx"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2272
  assumes "compact C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2273
  assumes [intro]: "x0 \<in> U"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2274
  notes [continuous_intros] = continuous_on_compose2[OF cont_fx]
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2275
  assumes "e > 0"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2276
  obtains X0 where "x0 \<in> X0" "open X0"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2277
    "\<forall>x\<in>X0 \<inter> U. \<forall>t \<in> C. dist (fx (x, t)) (fx (x0, t)) \<le> e"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2278
proof -
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2279
  define psi where "psi = (\<lambda>(x, t). dist (fx (x, t)) (fx (x0, t)))"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2280
  define W0 where "W0 = {(x, t) \<in> U \<times> C. psi (x, t) < e}"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2281
  have W0_eq: "W0 = psi -` {..<e} \<inter> U \<times> C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2282
    by (auto simp: vimage_def W0_def)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2283
  have "open {..<e}" by simp
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2284
  have "continuous_on (U \<times> C) psi"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2285
    by (auto intro!: continuous_intros simp: psi_def split_beta')
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2286
  from this[unfolded continuous_on_open_invariant, rule_format, OF \<open>open {..<e}\<close>]
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2287
  obtain W where W: "open W" "W \<inter> U \<times> C = W0 \<inter> U \<times> C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2288
    unfolding W0_eq by blast
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2289
  have "{x0} \<times> C \<subseteq> W \<inter> U \<times> C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2290
    unfolding W
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2291
    by (auto simp: W0_def psi_def \<open>0 < e\<close>)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2292
  then have "{x0} \<times> C \<subseteq> W" by blast
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2293
  from tube_lemma[OF \<open>compact C\<close> \<open>open W\<close> this]
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2294
  obtain X0 where X0: "x0 \<in> X0" "open X0" "X0 \<times> C \<subseteq> W"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2295
    by blast
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2296
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2297
  have "\<forall>x\<in>X0 \<inter> U. \<forall>t \<in> C. dist (fx (x, t)) (fx (x0, t)) \<le> e"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2298
  proof safe
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2299
    fix x assume x: "x \<in> X0" "x \<in> U"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2300
    fix t assume t: "t \<in> C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2301
    have "dist (fx (x, t)) (fx (x0, t)) = psi (x, t)"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2302
      by (auto simp: psi_def)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2303
    also
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2304
    {
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2305
      have "(x, t) \<in> X0 \<times> C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2306
        using t x
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2307
        by auto
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2308
      also note \<open>\<dots> \<subseteq> W\<close>
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2309
      finally have "(x, t) \<in> W" .
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2310
      with t x have "(x, t) \<in> W \<inter> U \<times> C"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2311
        by blast
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2312
      also note \<open>W \<inter> U \<times> C = W0 \<inter> U \<times> C\<close>
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2313
      finally  have "psi (x, t) < e"
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2314
        by (auto simp: W0_def)
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2315
    }
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2316
    finally show "dist (fx (x, t)) (fx (x0, t)) \<le> e" by simp
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2317
  qed
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2318
  from X0(1,2) this show ?thesis ..
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2319
qed
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2320
e502cd4d7062 moved material from Connected.thy to more appropriate places
immler
parents: 69613
diff changeset
  2321
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2322
subsection \<open>Continuity\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2323
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2324
lemma continuous_at_imp_continuous_within:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2325
  "continuous (at x) f \<Longrightarrow> continuous (at x within s) f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2326
  unfolding continuous_within continuous_at using Lim_at_imp_Lim_at_within by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2327
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2328
lemma Lim_trivial_limit: "trivial_limit net \<Longrightarrow> (f \<longlongrightarrow> l) net"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2329
  by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2330
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2331
lemmas continuous_on = continuous_on_def \<comment> \<open>legacy theorem name\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2332
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2333
lemma continuous_within_subset:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2334
  "continuous (at x within s) f \<Longrightarrow> t \<subseteq> s \<Longrightarrow> continuous (at x within t) f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2335
  unfolding continuous_within by(metis tendsto_within_subset)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2336
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2337
lemma continuous_on_interior:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2338
  "continuous_on s f \<Longrightarrow> x \<in> interior s \<Longrightarrow> continuous (at x) f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2339
  by (metis continuous_on_eq_continuous_at continuous_on_subset interiorE)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2340
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2341
lemma continuous_on_eq:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2342
  "\<lbrakk>continuous_on s f; \<And>x. x \<in> s \<Longrightarrow> f x = g x\<rbrakk> \<Longrightarrow> continuous_on s g"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2343
  unfolding continuous_on_def tendsto_def eventually_at_topological
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2344
  by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2345
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2346
text \<open>Characterization of various kinds of continuity in terms of sequences.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2347
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2348
lemma continuous_within_sequentiallyI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2349
  fixes f :: "'a::{first_countable_topology, t2_space} \<Rightarrow> 'b::topological_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2350
  assumes "\<And>u::nat \<Rightarrow> 'a. u \<longlonglongrightarrow> a \<Longrightarrow> (\<forall>n. u n \<in> s) \<Longrightarrow> (\<lambda>n. f (u n)) \<longlonglongrightarrow> f a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2351
  shows "continuous (at a within s) f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2352
  using assms unfolding continuous_within tendsto_def[where l = "f a"]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2353
  by (auto intro!: sequentially_imp_eventually_within)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2354
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2355
lemma continuous_within_tendsto_compose:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2356
  fixes f::"'a::t2_space \<Rightarrow> 'b::topological_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2357
  assumes "continuous (at a within s) f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2358
          "eventually (\<lambda>n. x n \<in> s) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2359
          "(x \<longlongrightarrow> a) F "
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2360
  shows "((\<lambda>n. f (x n)) \<longlongrightarrow> f a) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2361
proof -
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2362
  have *: "filterlim x (inf (nhds a) (principal s)) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2363
    using assms(2) assms(3) unfolding at_within_def filterlim_inf by (auto simp: filterlim_principal eventually_mono)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2364
  show ?thesis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2365
    by (auto simp: assms(1) continuous_within[symmetric] tendsto_at_within_iff_tendsto_nhds[symmetric] intro!: filterlim_compose[OF _ *])
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2366
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2367
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2368
lemma continuous_within_tendsto_compose':
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2369
  fixes f::"'a::t2_space \<Rightarrow> 'b::topological_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2370
  assumes "continuous (at a within s) f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2371
    "\<And>n. x n \<in> s"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2372
    "(x \<longlongrightarrow> a) F "
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2373
  shows "((\<lambda>n. f (x n)) \<longlongrightarrow> f a) F"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2374
  by (auto intro!: continuous_within_tendsto_compose[OF assms(1)] simp add: assms)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2375
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2376
lemma continuous_within_sequentially:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2377
  fixes f :: "'a::{first_countable_topology, t2_space} \<Rightarrow> 'b::topological_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2378
  shows "continuous (at a within s) f \<longleftrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2379
    (\<forall>x. (\<forall>n::nat. x n \<in> s) \<and> (x \<longlongrightarrow> a) sequentially
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2380
         \<longrightarrow> ((f \<circ> x) \<longlongrightarrow> f a) sequentially)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2381
  using continuous_within_tendsto_compose'[of a s f _ sequentially]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2382
    continuous_within_sequentiallyI[of a s f]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2383
  by (auto simp: o_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2384
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2385
lemma continuous_at_sequentiallyI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2386
  fixes f :: "'a::{first_countable_topology, t2_space} \<Rightarrow> 'b::topological_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2387
  assumes "\<And>u. u \<longlonglongrightarrow> a \<Longrightarrow> (\<lambda>n. f (u n)) \<longlonglongrightarrow> f a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2388
  shows "continuous (at a) f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2389
  using continuous_within_sequentiallyI[of a UNIV f] assms by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2390
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2391
lemma continuous_at_sequentially:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2392
  fixes f :: "'a::metric_space \<Rightarrow> 'b::topological_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2393
  shows "continuous (at a) f \<longleftrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2394
    (\<forall>x. (x \<longlongrightarrow> a) sequentially --> ((f \<circ> x) \<longlongrightarrow> f a) sequentially)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2395
  using continuous_within_sequentially[of a UNIV f] by simp
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2396
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2397
lemma continuous_on_sequentiallyI:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2398
  fixes f :: "'a::{first_countable_topology, t2_space} \<Rightarrow> 'b::topological_space"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2399
  assumes "\<And>u a. (\<forall>n. u n \<in> s) \<Longrightarrow> a \<in> s \<Longrightarrow> u \<longlonglongrightarrow> a \<Longrightarrow> (\<lambda>n. f (u n)) \<longlonglongrightarrow> f a"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2400
  shows "continuous_on s f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2401
  using assms unfolding continuous_on_eq_continuous_within
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2402
  using continuous_within_sequentiallyI[of _ s f] by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2403
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2404
lemma continuous_on_sequentially:
69544
5aa5a8d6e5b5 split off theorems involving classes below metric_space and real_normed_vector
immler
parents: 69529
diff changeset
  2405
  fixes f :: "'a::{first_countable_topology, t2_space} \<Rightarrow> 'b::topological_space"
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2406
  shows "continuous_on s f \<longleftrightarrow>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2407
    (\<forall>x. \<forall>a \<in> s. (\<forall>n. x(n) \<in> s) \<and> (x \<longlongrightarrow> a) sequentially
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2408
      --> ((f \<circ> x) \<longlongrightarrow> f a) sequentially)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2409
    (is "?lhs = ?rhs")
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2410
proof
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2411
  assume ?rhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2412
  then show ?lhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2413
    using continuous_within_sequentially[of _ s f]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2414
    unfolding continuous_on_eq_continuous_within
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2415
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2416
next
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2417
  assume ?lhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2418
  then show ?rhs
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2419
    unfolding continuous_on_eq_continuous_within
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2420
    using continuous_within_sequentially[of _ s f]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2421
    by auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2422
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2423
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2424
text \<open>Continuity in terms of open preimages.\<close>
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2425
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2426
lemma continuous_at_open:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2427
  "continuous (at x) f \<longleftrightarrow> (\<forall>t. open t \<and> f x \<in> t --> (\<exists>s. open s \<and> x \<in> s \<and> (\<forall>x' \<in> s. (f x') \<in> t)))"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2428
  unfolding continuous_within_topological [of x UNIV f]
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2429
  unfolding imp_conjL
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2430
  by (intro all_cong imp_cong ex_cong conj_cong refl) auto
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2431
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2432
lemma continuous_imp_tendsto:
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2433
  assumes "continuous (at x0) f"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2434
    and "x \<longlonglongrightarrow> x0"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2435
  shows "(f \<circ> x) \<longlonglongrightarrow> (f x0)"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2436
proof (rule topological_tendstoI)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2437
  fix S
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2438
  assume "open S" "f x0 \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2439
  then obtain T where T_def: "open T" "x0 \<in> T" "\<forall>x\<in>T. f x \<in> S"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2440
     using assms continuous_at_open by metis
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2441
  then have "eventually (\<lambda>n. x n \<in> T) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2442
    using assms T_def by (auto simp: tendsto_def)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2443
  then show "eventually (\<lambda>n. (f \<circ> x) n \<in> S) sequentially"
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2444
    using T_def by (auto elim!: eventually_mono)
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2445
qed
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2446
69613
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2447
subsection \<open>Homeomorphisms\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2448
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2449
definition%important "homeomorphism s t f g \<longleftrightarrow>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2450
  (\<forall>x\<in>s. (g(f x) = x)) \<and> (f ` s = t) \<and> continuous_on s f \<and>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2451
  (\<forall>y\<in>t. (f(g y) = y)) \<and> (g ` t = s) \<and> continuous_on t g"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2452
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2453
lemma homeomorphismI [intro?]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2454
  assumes "continuous_on S f" "continuous_on T g"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2455
          "f ` S \<subseteq> T" "g ` T \<subseteq> S" "\<And>x. x \<in> S \<Longrightarrow> g(f x) = x" "\<And>y. y \<in> T \<Longrightarrow> f(g y) = y"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2456
    shows "homeomorphism S T f g"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2457
  using assms by (force simp: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2458
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2459
lemma homeomorphism_translation:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2460
  fixes a :: "'a :: real_normed_vector"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2461
  shows "homeomorphism ((+) a ` S) S ((+) (- a)) ((+) a)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2462
unfolding homeomorphism_def by (auto simp: algebra_simps continuous_intros)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2463
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2464
lemma homeomorphism_ident: "homeomorphism T T (\<lambda>a. a) (\<lambda>a. a)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2465
  by (rule homeomorphismI) (auto simp: continuous_on_id)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2466
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2467
lemma homeomorphism_compose:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2468
  assumes "homeomorphism S T f g" "homeomorphism T U h k"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2469
    shows "homeomorphism S U (h o f) (g o k)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2470
  using assms
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2471
  unfolding homeomorphism_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2472
  by (intro conjI ballI continuous_on_compose) (auto simp: image_comp [symmetric])
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2473
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2474
lemma homeomorphism_symD: "homeomorphism S t f g \<Longrightarrow> homeomorphism t S g f"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2475
  by (simp add: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2476
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2477
lemma homeomorphism_sym: "homeomorphism S t f g = homeomorphism t S g f"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2478
  by (force simp: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2479
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2480
definition%important homeomorphic :: "'a::topological_space set \<Rightarrow> 'b::topological_space set \<Rightarrow> bool"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2481
    (infixr "homeomorphic" 60)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2482
  where "s homeomorphic t \<equiv> (\<exists>f g. homeomorphism s t f g)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2483
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2484
lemma homeomorphic_empty [iff]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2485
     "S homeomorphic {} \<longleftrightarrow> S = {}" "{} homeomorphic S \<longleftrightarrow> S = {}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2486
  by (auto simp: homeomorphic_def homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2487
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2488
lemma homeomorphic_refl: "s homeomorphic s"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2489
  unfolding homeomorphic_def homeomorphism_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2490
  using continuous_on_id
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2491
  apply (rule_tac x = "(\<lambda>x. x)" in exI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2492
  apply (rule_tac x = "(\<lambda>x. x)" in exI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2493
  apply blast
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2494
  done
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2495
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2496
lemma homeomorphic_sym: "s homeomorphic t \<longleftrightarrow> t homeomorphic s"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2497
  unfolding homeomorphic_def homeomorphism_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2498
  by blast
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2499
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2500
lemma homeomorphic_trans [trans]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2501
  assumes "S homeomorphic T"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2502
      and "T homeomorphic U"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2503
    shows "S homeomorphic U"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2504
  using assms
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2505
  unfolding homeomorphic_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2506
by (metis homeomorphism_compose)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2507
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2508
lemma homeomorphic_minimal:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2509
  "s homeomorphic t \<longleftrightarrow>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2510
    (\<exists>f g. (\<forall>x\<in>s. f(x) \<in> t \<and> (g(f(x)) = x)) \<and>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2511
           (\<forall>y\<in>t. g(y) \<in> s \<and> (f(g(y)) = y)) \<and>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2512
           continuous_on s f \<and> continuous_on t g)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2513
   (is "?lhs = ?rhs")
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2514
proof
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2515
  assume ?lhs
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2516
  then show ?rhs
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2517
    by (fastforce simp: homeomorphic_def homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2518
next
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2519
  assume ?rhs
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2520
  then show ?lhs
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2521
    apply clarify
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2522
    unfolding homeomorphic_def homeomorphism_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2523
    by (metis equalityI image_subset_iff subsetI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2524
 qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2525
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2526
lemma homeomorphicI [intro?]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2527
   "\<lbrakk>f ` S = T; g ` T = S;
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2528
     continuous_on S f; continuous_on T g;
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2529
     \<And>x. x \<in> S \<Longrightarrow> g(f(x)) = x;
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2530
     \<And>y. y \<in> T \<Longrightarrow> f(g(y)) = y\<rbrakk> \<Longrightarrow> S homeomorphic T"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2531
unfolding homeomorphic_def homeomorphism_def by metis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2532
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2533
lemma homeomorphism_of_subsets:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2534
   "\<lbrakk>homeomorphism S T f g; S' \<subseteq> S; T'' \<subseteq> T; f ` S' = T'\<rbrakk>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2535
    \<Longrightarrow> homeomorphism S' T' f g"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2536
apply (auto simp: homeomorphism_def elim!: continuous_on_subset)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2537
by (metis subsetD imageI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2538
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2539
lemma homeomorphism_apply1: "\<lbrakk>homeomorphism S T f g; x \<in> S\<rbrakk> \<Longrightarrow> g(f x) = x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2540
  by (simp add: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2541
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2542
lemma homeomorphism_apply2: "\<lbrakk>homeomorphism S T f g; x \<in> T\<rbrakk> \<Longrightarrow> f(g x) = x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2543
  by (simp add: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2544
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2545
lemma homeomorphism_image1: "homeomorphism S T f g \<Longrightarrow> f ` S = T"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2546
  by (simp add: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2547
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2548
lemma homeomorphism_image2: "homeomorphism S T f g \<Longrightarrow> g ` T = S"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2549
  by (simp add: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2550
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2551
lemma homeomorphism_cont1: "homeomorphism S T f g \<Longrightarrow> continuous_on S f"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2552
  by (simp add: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2553
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2554
lemma homeomorphism_cont2: "homeomorphism S T f g \<Longrightarrow> continuous_on T g"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2555
  by (simp add: homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2556
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2557
lemma continuous_on_no_limpt:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2558
   "(\<And>x. \<not> x islimpt S) \<Longrightarrow> continuous_on S f"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2559
  unfolding continuous_on_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2560
  by (metis UNIV_I empty_iff eventually_at_topological islimptE open_UNIV tendsto_def trivial_limit_within)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2561
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2562
lemma continuous_on_finite:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2563
  fixes S :: "'a::t1_space set"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2564
  shows "finite S \<Longrightarrow> continuous_on S f"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2565
by (metis continuous_on_no_limpt islimpt_finite)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2566
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2567
lemma homeomorphic_finite:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2568
  fixes S :: "'a::t1_space set" and T :: "'b::t1_space set"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2569
  assumes "finite T"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2570
  shows "S homeomorphic T \<longleftrightarrow> finite S \<and> finite T \<and> card S = card T" (is "?lhs = ?rhs")
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2571
proof
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2572
  assume "S homeomorphic T"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2573
  with assms show ?rhs
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2574
    apply (auto simp: homeomorphic_def homeomorphism_def)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2575
     apply (metis finite_imageI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2576
    by (metis card_image_le finite_imageI le_antisym)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2577
next
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2578
  assume R: ?rhs
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2579
  with finite_same_card_bij obtain h where "bij_betw h S T"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2580
    by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2581
  with R show ?lhs
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2582
    apply (auto simp: homeomorphic_def homeomorphism_def continuous_on_finite)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2583
    apply (rule_tac x=h in exI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2584
    apply (rule_tac x="inv_into S h" in exI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2585
    apply (auto simp:  bij_betw_inv_into_left bij_betw_inv_into_right bij_betw_imp_surj_on inv_into_into bij_betwE)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2586
    apply (metis bij_betw_def bij_betw_inv_into)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2587
    done
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2588
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2589
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2590
text \<open>Relatively weak hypotheses if a set is compact.\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2591
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2592
lemma homeomorphism_compact:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2593
  fixes f :: "'a::topological_space \<Rightarrow> 'b::t2_space"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2594
  assumes "compact s" "continuous_on s f"  "f ` s = t"  "inj_on f s"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2595
  shows "\<exists>g. homeomorphism s t f g"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2596
proof -
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2597
  define g where "g x = (SOME y. y\<in>s \<and> f y = x)" for x
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2598
  have g: "\<forall>x\<in>s. g (f x) = x"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2599
    using assms(3) assms(4)[unfolded inj_on_def] unfolding g_def by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2600
  {
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2601
    fix y
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2602
    assume "y \<in> t"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2603
    then obtain x where x:"f x = y" "x\<in>s"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2604
      using assms(3) by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2605
    then have "g (f x) = x" using g by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2606
    then have "f (g y) = y" unfolding x(1)[symmetric] by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2607
  }
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2608
  then have g':"\<forall>x\<in>t. f (g x) = x" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2609
  moreover
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2610
  {
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2611
    fix x
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2612
    have "x\<in>s \<Longrightarrow> x \<in> g ` t"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2613
      using g[THEN bspec[where x=x]]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2614
      unfolding image_iff
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2615
      using assms(3)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2616
      by (auto intro!: bexI[where x="f x"])
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2617
    moreover
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2618
    {
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2619
      assume "x\<in>g ` t"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2620
      then obtain y where y:"y\<in>t" "g y = x" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2621
      then obtain x' where x':"x'\<in>s" "f x' = y"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2622
        using assms(3) by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2623
      then have "x \<in> s"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2624
        unfolding g_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2625
        using someI2[of "\<lambda>b. b\<in>s \<and> f b = y" x' "\<lambda>x. x\<in>s"]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2626
        unfolding y(2)[symmetric] and g_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2627
        by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2628
    }
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2629
    ultimately have "x\<in>s \<longleftrightarrow> x \<in> g ` t" ..
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2630
  }
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2631
  then have "g ` t = s" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2632
  ultimately show ?thesis
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2633
    unfolding homeomorphism_def homeomorphic_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2634
    apply (rule_tac x=g in exI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2635
    using g and assms(3) and continuous_on_inv[OF assms(2,1), of g, unfolded assms(3)] and assms(2)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2636
    apply auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2637
    done
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2638
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2639
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2640
lemma homeomorphic_compact:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2641
  fixes f :: "'a::topological_space \<Rightarrow> 'b::t2_space"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2642
  shows "compact s \<Longrightarrow> continuous_on s f \<Longrightarrow> (f ` s = t) \<Longrightarrow> inj_on f s \<Longrightarrow> s homeomorphic t"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2643
  unfolding homeomorphic_def by (metis homeomorphism_compact)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2644
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2645
text\<open>Preservation of topological properties.\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2646
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2647
lemma homeomorphic_compactness: "s homeomorphic t \<Longrightarrow> (compact s \<longleftrightarrow> compact t)"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2648
  unfolding homeomorphic_def homeomorphism_def
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2649
  by (metis compact_continuous_image)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2650
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2651
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2652
subsection%unimportant \<open>On Linorder Topologies\<close>
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2653
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2654
lemma islimpt_greaterThanLessThan1:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2655
  fixes a b::"'a::{linorder_topology, dense_order}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2656
  assumes "a < b"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2657
  shows  "a islimpt {a<..<b}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2658
proof (rule islimptI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2659
  fix T
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2660
  assume "open T" "a \<in> T"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2661
  from open_right[OF this \<open>a < b\<close>]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2662
  obtain c where c: "a < c" "{a..<c} \<subseteq> T" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2663
  with assms dense[of a "min c b"]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2664
  show "\<exists>y\<in>{a<..<b}. y \<in> T \<and> y \<noteq> a"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2665
    by (metis atLeastLessThan_iff greaterThanLessThan_iff min_less_iff_conj
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2666
      not_le order.strict_implies_order subset_eq)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2667
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2668
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2669
lemma islimpt_greaterThanLessThan2:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2670
  fixes a b::"'a::{linorder_topology, dense_order}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2671
  assumes "a < b"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2672
  shows  "b islimpt {a<..<b}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2673
proof (rule islimptI)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2674
  fix T
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2675
  assume "open T" "b \<in> T"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2676
  from open_left[OF this \<open>a < b\<close>]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2677
  obtain c where c: "c < b" "{c<..b} \<subseteq> T" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2678
  with assms dense[of "max a c" b]
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2679
  show "\<exists>y\<in>{a<..<b}. y \<in> T \<and> y \<noteq> b"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2680
    by (metis greaterThanAtMost_iff greaterThanLessThan_iff max_less_iff_conj
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2681
      not_le order.strict_implies_order subset_eq)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2682
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2683
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2684
lemma closure_greaterThanLessThan[simp]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2685
  fixes a b::"'a::{linorder_topology, dense_order}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2686
  shows "a < b \<Longrightarrow> closure {a <..< b} = {a .. b}" (is "_ \<Longrightarrow> ?l = ?r")
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2687
proof
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2688
  have "?l \<subseteq> closure ?r"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2689
    by (rule closure_mono) auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2690
  thus "closure {a<..<b} \<subseteq> {a..b}" by simp
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2691
qed (auto simp: closure_def order.order_iff_strict islimpt_greaterThanLessThan1
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2692
  islimpt_greaterThanLessThan2)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2693
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2694
lemma closure_greaterThan[simp]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2695
  fixes a b::"'a::{no_top, linorder_topology, dense_order}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2696
  shows "closure {a<..} = {a..}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2697
proof -
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2698
  from gt_ex obtain b where "a < b" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2699
  hence "{a<..} = {a<..<b} \<union> {b..}" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2700
  also have "closure \<dots> = {a..}" using \<open>a < b\<close> unfolding closure_Un
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2701
    by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2702
  finally show ?thesis .
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2703
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2704
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2705
lemma closure_lessThan[simp]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2706
  fixes b::"'a::{no_bot, linorder_topology, dense_order}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2707
  shows "closure {..<b} = {..b}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2708
proof -
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2709
  from lt_ex obtain a where "a < b" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2710
  hence "{..<b} = {a<..<b} \<union> {..a}" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2711
  also have "closure \<dots> = {..b}" using \<open>a < b\<close> unfolding closure_Un
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2712
    by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2713
  finally show ?thesis .
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2714
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2715
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2716
lemma closure_atLeastLessThan[simp]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2717
  fixes a b::"'a::{linorder_topology, dense_order}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2718
  assumes "a < b"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2719
  shows "closure {a ..< b} = {a .. b}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2720
proof -
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2721
  from assms have "{a ..< b} = {a} \<union> {a <..< b}" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2722
  also have "closure \<dots> = {a .. b}" unfolding closure_Un
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2723
    by (auto simp: assms less_imp_le)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2724
  finally show ?thesis .
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2725
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2726
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2727
lemma closure_greaterThanAtMost[simp]:
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2728
  fixes a b::"'a::{linorder_topology, dense_order}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2729
  assumes "a < b"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2730
  shows "closure {a <.. b} = {a .. b}"
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2731
proof -
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2732
  from assms have "{a <.. b} = {b} \<union> {a <..< b}" by auto
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2733
  also have "closure \<dots> = {a .. b}" unfolding closure_Un
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2734
    by (auto simp: assms less_imp_le)
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2735
  finally show ?thesis .
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2736
qed
1331e57b54c6 moved material from Connected.thy to more appropriate places
immler
parents: 69611
diff changeset
  2737
69611
42cc3609fedf moved some material from Connected.thy to more appropriate places
immler
parents: 69564
diff changeset
  2738
69516
09bb8f470959 most of Topology_Euclidean_Space (now Elementary_Topology) requires fewer dependencies
immler
parents:
diff changeset
  2739
end