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