src/HOL/Analysis/Abstract_Topology.thy
changeset 69918 eddcc7c726f3
parent 69874 11065b70407d
child 69922 4a9167f377b0
equal deleted inserted replaced
69917:66c4567664b5 69918:eddcc7c726f3
   401 lemma closedin_subtopology_Un:
   401 lemma closedin_subtopology_Un:
   402     "\<lbrakk>closedin (subtopology X T) S; closedin (subtopology X U) S\<rbrakk>
   402     "\<lbrakk>closedin (subtopology X T) S; closedin (subtopology X U) S\<rbrakk>
   403      \<Longrightarrow> closedin (subtopology X (T \<union> U)) S"
   403      \<Longrightarrow> closedin (subtopology X (T \<union> U)) S"
   404 by (simp add: closedin_subtopology) blast
   404 by (simp add: closedin_subtopology) blast
   405 
   405 
   406 
   406 lemma openin_trans_full:
   407 subsection \<open>The standard Euclidean topology\<close>
   407    "\<lbrakk>openin (subtopology X U) S; openin X U\<rbrakk> \<Longrightarrow> openin X S"
       
   408   by (simp add: openin_open_subtopology)
       
   409 
       
   410 
       
   411 subsection \<open>The canonical topology from the underlying type class\<close>
   408 
   412 
   409 abbreviation%important euclidean :: "'a::topological_space topology"
   413 abbreviation%important euclidean :: "'a::topological_space topology"
   410   where "euclidean \<equiv> topology open"
   414   where "euclidean \<equiv> topology open"
   411 
   415 
   412 abbreviation top_of_set :: "'a::topological_space set \<Rightarrow> 'a topology"
   416 abbreviation top_of_set :: "'a::topological_space set \<Rightarrow> 'a topology"
  1265   by (simp add: Diff_Int_distrib closure_of_subtopology_open frontier_of_def interior_of_subtopology_open)
  1269   by (simp add: Diff_Int_distrib closure_of_subtopology_open frontier_of_def interior_of_subtopology_open)
  1266 
  1270 
  1267 lemma discrete_topology_frontier_of [simp]:
  1271 lemma discrete_topology_frontier_of [simp]:
  1268      "(discrete_topology U) frontier_of S = {}"
  1272      "(discrete_topology U) frontier_of S = {}"
  1269   by (simp add: Diff_eq discrete_topology_closure_of frontier_of_closures)
  1273   by (simp add: Diff_eq discrete_topology_closure_of frontier_of_closures)
       
  1274 
       
  1275 
       
  1276 subsection\<open>Locally finite collections\<close>
       
  1277 
       
  1278 definition locally_finite_in
       
  1279   where
       
  1280  "locally_finite_in X \<A> \<longleftrightarrow>
       
  1281         (\<Union>\<A> \<subseteq> topspace X) \<and>
       
  1282         (\<forall>x \<in> topspace X. \<exists>V. openin X V \<and> x \<in> V \<and> finite {U \<in> \<A>. U \<inter> V \<noteq> {}})"
       
  1283 
       
  1284 lemma finite_imp_locally_finite_in:
       
  1285    "\<lbrakk>finite \<A>; \<Union>\<A> \<subseteq> topspace X\<rbrakk> \<Longrightarrow> locally_finite_in X \<A>"
       
  1286   by (auto simp: locally_finite_in_def)
       
  1287 
       
  1288 lemma locally_finite_in_subset:
       
  1289   assumes "locally_finite_in X \<A>" "\<B> \<subseteq> \<A>"
       
  1290   shows "locally_finite_in X \<B>"
       
  1291 proof -
       
  1292   have "finite {U \<in> \<A>. U \<inter> V \<noteq> {}} \<Longrightarrow> finite {U \<in> \<B>. U \<inter> V \<noteq> {}}" for V
       
  1293     apply (erule rev_finite_subset) using \<open>\<B> \<subseteq> \<A>\<close> by blast
       
  1294   then show ?thesis
       
  1295   using assms unfolding locally_finite_in_def by (fastforce simp add:)
       
  1296 qed
       
  1297 
       
  1298 lemma locally_finite_in_refinement:
       
  1299   assumes \<A>: "locally_finite_in X \<A>" and f: "\<And>S. S \<in> \<A> \<Longrightarrow> f S \<subseteq> S"
       
  1300   shows "locally_finite_in X (f ` \<A>)"
       
  1301 proof -
       
  1302   show ?thesis
       
  1303     unfolding locally_finite_in_def
       
  1304   proof safe
       
  1305     fix x
       
  1306     assume "x \<in> topspace X"
       
  1307     then obtain V where "openin X V" "x \<in> V" "finite {U \<in> \<A>. U \<inter> V \<noteq> {}}"
       
  1308       using \<A> unfolding locally_finite_in_def by blast
       
  1309     moreover have "{U \<in> \<A>. f U \<inter> V \<noteq> {}} \<subseteq> {U \<in> \<A>. U \<inter> V \<noteq> {}}" for V
       
  1310       using f by blast
       
  1311     ultimately have "finite {U \<in> \<A>. f U \<inter> V \<noteq> {}}"
       
  1312       using finite_subset by blast
       
  1313     moreover have "f ` {U \<in> \<A>. f U \<inter> V \<noteq> {}} = {U \<in> f ` \<A>. U \<inter> V \<noteq> {}}"
       
  1314       by blast
       
  1315     ultimately have "finite {U \<in> f ` \<A>. U \<inter> V \<noteq> {}}"
       
  1316       by (metis (no_types, lifting) finite_imageI)
       
  1317     then show "\<exists>V. openin X V \<and> x \<in> V \<and> finite {U \<in> f ` \<A>. U \<inter> V \<noteq> {}}"
       
  1318       using \<open>openin X V\<close> \<open>x \<in> V\<close> by blast
       
  1319   next
       
  1320     show "\<And>x xa. \<lbrakk>xa \<in> \<A>; x \<in> f xa\<rbrakk> \<Longrightarrow> x \<in> topspace X"
       
  1321       by (meson Sup_upper \<A> f locally_finite_in_def subset_iff)
       
  1322   qed
       
  1323 qed
       
  1324 
       
  1325 lemma locally_finite_in_subtopology:
       
  1326   assumes \<A>: "locally_finite_in X \<A>" "\<Union>\<A> \<subseteq> S"
       
  1327   shows "locally_finite_in (subtopology X S) \<A>"
       
  1328   unfolding locally_finite_in_def
       
  1329 proof safe
       
  1330   fix x
       
  1331   assume x: "x \<in> topspace (subtopology X S)"
       
  1332   then obtain V where "openin X V" "x \<in> V" and fin: "finite {U \<in> \<A>. U \<inter> V \<noteq> {}}"
       
  1333     using \<A> unfolding locally_finite_in_def topspace_subtopology by blast
       
  1334   show "\<exists>V. openin (subtopology X S) V \<and> x \<in> V \<and> finite {U \<in> \<A>. U \<inter> V \<noteq> {}}"
       
  1335   proof (intro exI conjI)
       
  1336     show "openin (subtopology X S) (S \<inter> V)"
       
  1337       by (simp add: \<open>openin X V\<close> openin_subtopology_Int2)
       
  1338     have "{U \<in> \<A>. U \<inter> (S \<inter> V) \<noteq> {}} \<subseteq> {U \<in> \<A>. U \<inter> V \<noteq> {}}"
       
  1339       by auto
       
  1340     with fin show "finite {U \<in> \<A>. U \<inter> (S \<inter> V) \<noteq> {}}"
       
  1341       using finite_subset by auto
       
  1342     show "x \<in> S \<inter> V"
       
  1343       using x \<open>x \<in> V\<close> by (simp add: topspace_subtopology)
       
  1344   qed
       
  1345 next
       
  1346   show "\<And>x A. \<lbrakk>x \<in> A; A \<in> \<A>\<rbrakk> \<Longrightarrow> x \<in> topspace (subtopology X S)"
       
  1347     using assms unfolding locally_finite_in_def topspace_subtopology by blast
       
  1348 qed
       
  1349 
       
  1350 
       
  1351 lemma closedin_locally_finite_Union:
       
  1352   assumes clo: "\<And>S. S \<in> \<A> \<Longrightarrow> closedin X S" and \<A>: "locally_finite_in X \<A>"
       
  1353   shows "closedin X (\<Union>\<A>)"
       
  1354   using \<A> unfolding locally_finite_in_def closedin_def
       
  1355 proof clarify
       
  1356   show "openin X (topspace X - \<Union>\<A>)"
       
  1357   proof (subst openin_subopen, clarify)
       
  1358     fix x
       
  1359     assume "x \<in> topspace X" and "x \<notin> \<Union>\<A>"
       
  1360     then obtain V where "openin X V" "x \<in> V" and fin: "finite {U \<in> \<A>. U \<inter> V \<noteq> {}}"
       
  1361       using \<A> unfolding locally_finite_in_def by blast
       
  1362     let ?T = "V - \<Union>{S \<in> \<A>. S \<inter> V \<noteq> {}}"
       
  1363     show "\<exists>T. openin X T \<and> x \<in> T \<and> T \<subseteq> topspace X - \<Union>\<A>"
       
  1364     proof (intro exI conjI)
       
  1365       show "openin X ?T"
       
  1366         by (metis (no_types, lifting) fin \<open>openin X V\<close> clo closedin_Union mem_Collect_eq openin_diff)
       
  1367       show "x \<in> ?T"
       
  1368         using \<open>x \<notin> \<Union>\<A>\<close> \<open>x \<in> V\<close> by auto
       
  1369       show "?T \<subseteq> topspace X - \<Union>\<A>"
       
  1370         using \<open>openin X V\<close> openin_subset by auto
       
  1371     qed
       
  1372   qed
       
  1373 qed
       
  1374 
       
  1375 lemma locally_finite_in_closure:
       
  1376   assumes \<A>: "locally_finite_in X \<A>"
       
  1377   shows "locally_finite_in X ((\<lambda>S. X closure_of S) ` \<A>)"
       
  1378   using \<A> unfolding locally_finite_in_def
       
  1379 proof (intro conjI; clarsimp)
       
  1380   fix x A
       
  1381   assume "x \<in> X closure_of A"
       
  1382   then show "x \<in> topspace X"
       
  1383     by (meson in_closure_of)
       
  1384 next
       
  1385   fix x
       
  1386   assume "x \<in> topspace X" and "\<Union>\<A> \<subseteq> topspace X"
       
  1387   then obtain V where V: "openin X V" "x \<in> V" and fin: "finite {U \<in> \<A>. U \<inter> V \<noteq> {}}"
       
  1388     using \<A> unfolding locally_finite_in_def by blast
       
  1389   have eq: "{y \<in> f ` \<A>. Q y} = f ` {x. x \<in> \<A> \<and> Q(f x)}" for f Q
       
  1390     by blast
       
  1391   have eq2: "{A \<in> \<A>. X closure_of A \<inter> V \<noteq> {}} = {A \<in> \<A>. A \<inter> V \<noteq> {}}"
       
  1392     using openin_Int_closure_of_eq_empty V  by blast
       
  1393   have "finite {U \<in> (closure_of) X ` \<A>. U \<inter> V \<noteq> {}}"
       
  1394     by (simp add: eq eq2 fin)
       
  1395   with V show "\<exists>V. openin X V \<and> x \<in> V \<and> finite {U \<in> (closure_of) X ` \<A>. U \<inter> V \<noteq> {}}"
       
  1396     by blast
       
  1397 qed
       
  1398 
       
  1399 lemma closedin_Union_locally_finite_closure:
       
  1400    "locally_finite_in X \<A> \<Longrightarrow> closedin X (\<Union>((\<lambda>S. X closure_of S) ` \<A>))"
       
  1401   by (metis (mono_tags) closedin_closure_of closedin_locally_finite_Union imageE locally_finite_in_closure)
       
  1402 
       
  1403 lemma closure_of_Union_subset: "\<Union>((\<lambda>S. X closure_of S) ` \<A>) \<subseteq> X closure_of (\<Union>\<A>)"
       
  1404   by clarify (meson Union_upper closure_of_mono subsetD)
       
  1405 
       
  1406 lemma closure_of_locally_finite_Union:
       
  1407    "locally_finite_in X \<A> \<Longrightarrow> X closure_of (\<Union>\<A>) = \<Union>((\<lambda>S. X closure_of S) ` \<A>)"
       
  1408   apply (rule closure_of_unique)
       
  1409   apply (simp add: SUP_upper2 Sup_le_iff closure_of_subset locally_finite_in_def)
       
  1410   apply (simp add: closedin_Union_locally_finite_closure)
       
  1411   by (simp add: Sup_le_iff closure_of_minimal)
  1270 
  1412 
  1271 
  1413 
  1272 subsection\<open>Continuous maps\<close>
  1414 subsection\<open>Continuous maps\<close>
  1273 
  1415 
  1274 definition continuous_map where
  1416 definition continuous_map where