src/HOL/Analysis/Abstract_Topology_2.thy
changeset 70136 f03a01a18c6e
parent 69939 812ce526da33
child 70178 4900351361b0
equal deleted inserted replaced
70135:ad6d4a14adb5 70136:f03a01a18c6e
   279     using \<open>T \<subseteq> image f S\<close> \<open>inj f\<close> unfolding inj_on_def subset_eq by auto
   279     using \<open>T \<subseteq> image f S\<close> \<open>inj f\<close> unfolding inj_on_def subset_eq by auto
   280   ultimately have "y \<in> interior S" ..
   280   ultimately have "y \<in> interior S" ..
   281   with \<open>x = f y\<close> show "x \<in> f ` interior S" ..
   281   with \<open>x = f y\<close> show "x \<in> f ` interior S" ..
   282 qed
   282 qed
   283 
   283 
   284 subsection%unimportant \<open>Equality of continuous functions on closure and related results\<close>
   284 subsection\<^marker>\<open>tag unimportant\<close> \<open>Equality of continuous functions on closure and related results\<close>
   285 
   285 
   286 lemma continuous_closedin_preimage_constant:
   286 lemma continuous_closedin_preimage_constant:
   287   fixes f :: "_ \<Rightarrow> 'b::t1_space"
   287   fixes f :: "_ \<Rightarrow> 'b::t1_space"
   288   shows "continuous_on S f \<Longrightarrow> closedin (top_of_set S) {x \<in> S. f x = a}"
   288   shows "continuous_on S f \<Longrightarrow> closedin (top_of_set S) {x \<in> S. f x = a}"
   289   using continuous_closedin_preimage[of S f "{a}"] by (simp add: vimage_def Collect_conj_eq)
   289   using continuous_closedin_preimage[of S f "{a}"] by (simp add: vimage_def Collect_conj_eq)
   317   ultimately have "closure S = (closure S \<inter> f -` T)"
   317   ultimately have "closure S = (closure S \<inter> f -` T)"
   318     using closure_minimal[of S "(closure S \<inter> f -` T)"] by auto
   318     using closure_minimal[of S "(closure S \<inter> f -` T)"] by auto
   319   then show ?thesis by auto
   319   then show ?thesis by auto
   320 qed
   320 qed
   321 
   321 
   322 subsection%unimportant \<open>A function constant on a set\<close>
   322 subsection\<^marker>\<open>tag unimportant\<close> \<open>A function constant on a set\<close>
   323 
   323 
   324 definition constant_on  (infixl "(constant'_on)" 50)
   324 definition constant_on  (infixl "(constant'_on)" 50)
   325   where "f constant_on A \<equiv> \<exists>y. \<forall>x\<in>A. f x = y"
   325   where "f constant_on A \<equiv> \<exists>y. \<forall>x\<in>A. f x = y"
   326 
   326 
   327 lemma constant_on_subset: "\<lbrakk>f constant_on A; B \<subseteq> A\<rbrakk> \<Longrightarrow> f constant_on B"
   327 lemma constant_on_subset: "\<lbrakk>f constant_on A; B \<subseteq> A\<rbrakk> \<Longrightarrow> f constant_on B"
   339     shows "f constant_on (closure S)"
   339     shows "f constant_on (closure S)"
   340 using continuous_constant_on_closure [OF contf] cof unfolding constant_on_def
   340 using continuous_constant_on_closure [OF contf] cof unfolding constant_on_def
   341 by metis
   341 by metis
   342 
   342 
   343 
   343 
   344 subsection%unimportant \<open>Continuity relative to a union.\<close>
   344 subsection\<^marker>\<open>tag unimportant\<close> \<open>Continuity relative to a union.\<close>
   345 
   345 
   346 lemma continuous_on_Un_local:
   346 lemma continuous_on_Un_local:
   347     "\<lbrakk>closedin (top_of_set (s \<union> t)) s; closedin (top_of_set (s \<union> t)) t;
   347     "\<lbrakk>closedin (top_of_set (s \<union> t)) s; closedin (top_of_set (s \<union> t)) t;
   348       continuous_on s f; continuous_on t f\<rbrakk>
   348       continuous_on s f; continuous_on t f\<rbrakk>
   349      \<Longrightarrow> continuous_on (s \<union> t) f"
   349      \<Longrightarrow> continuous_on (s \<union> t) f"
   389     shows "continuous_on s (\<lambda>t. if t \<le> a then f(t) else g(t))"
   389     shows "continuous_on s (\<lambda>t. if t \<le> a then f(t) else g(t))"
   390 using assms
   390 using assms
   391 by (auto simp: continuous_on_id intro: continuous_on_cases_le [where h = id, simplified])
   391 by (auto simp: continuous_on_id intro: continuous_on_cases_le [where h = id, simplified])
   392 
   392 
   393 
   393 
   394 subsection%unimportant\<open>Inverse function property for open/closed maps\<close>
   394 subsection\<^marker>\<open>tag unimportant\<close>\<open>Inverse function property for open/closed maps\<close>
   395 
   395 
   396 lemma continuous_on_inverse_open_map:
   396 lemma continuous_on_inverse_open_map:
   397   assumes contf: "continuous_on S f"
   397   assumes contf: "continuous_on S f"
   398     and imf: "f ` S = T"
   398     and imf: "f ` S = T"
   399     and injf: "\<And>x. x \<in> S \<Longrightarrow> g (f x) = x"
   399     and injf: "\<And>x. x \<in> S \<Longrightarrow> g (f x) = x"
   477     by (metis hom homeomorphism_def)
   477     by (metis hom homeomorphism_def)
   478   ultimately show ?thesis
   478   ultimately show ?thesis
   479     by (simp add: continuous_on_closed oo)
   479     by (simp add: continuous_on_closed oo)
   480 qed
   480 qed
   481 
   481 
   482 subsection%unimportant \<open>Seperability\<close>
   482 subsection\<^marker>\<open>tag unimportant\<close> \<open>Seperability\<close>
   483 
   483 
   484 lemma subset_second_countable:
   484 lemma subset_second_countable:
   485   obtains \<B> :: "'a:: second_countable_topology set set"
   485   obtains \<B> :: "'a:: second_countable_topology set set"
   486     where "countable \<B>"
   486     where "countable \<B>"
   487           "{} \<notin> \<B>"
   487           "{} \<notin> \<B>"
   538     by (clarsimp simp add: countable_subset_image)
   538     by (clarsimp simp add: countable_subset_image)
   539   then show ?thesis ..
   539   then show ?thesis ..
   540 qed
   540 qed
   541 
   541 
   542 
   542 
   543 subsection%unimportant\<open>Closed Maps\<close>
   543 subsection\<^marker>\<open>tag unimportant\<close>\<open>Closed Maps\<close>
   544 
   544 
   545 lemma continuous_imp_closed_map:
   545 lemma continuous_imp_closed_map:
   546   fixes f :: "'a::t2_space \<Rightarrow> 'b::t2_space"
   546   fixes f :: "'a::t2_space \<Rightarrow> 'b::t2_space"
   547   assumes "closedin (top_of_set S) U"
   547   assumes "closedin (top_of_set S) U"
   548           "continuous_on S f" "f ` S = T" "compact S"
   548           "continuous_on S f" "f ` S = T" "compact S"
   559     using cloU by (auto simp: closedin_closed)
   559     using cloU by (auto simp: closedin_closed)
   560   with cc [of "S \<inter> V"] \<open>T' \<subseteq> T\<close> show ?thesis
   560   with cc [of "S \<inter> V"] \<open>T' \<subseteq> T\<close> show ?thesis
   561     by (fastforce simp add: closedin_closed)
   561     by (fastforce simp add: closedin_closed)
   562 qed
   562 qed
   563 
   563 
   564 subsection%unimportant\<open>Open Maps\<close>
   564 subsection\<^marker>\<open>tag unimportant\<close>\<open>Open Maps\<close>
   565 
   565 
   566 lemma open_map_restrict:
   566 lemma open_map_restrict:
   567   assumes opeU: "openin (top_of_set (S \<inter> f -` T')) U"
   567   assumes opeU: "openin (top_of_set (S \<inter> f -` T')) U"
   568     and oo: "\<And>U. openin (top_of_set S) U \<Longrightarrow> openin (top_of_set T) (f ` U)"
   568     and oo: "\<And>U. openin (top_of_set S) U \<Longrightarrow> openin (top_of_set T) (f ` U)"
   569     and "T' \<subseteq> T"
   569     and "T' \<subseteq> T"
   574   with oo [of "S \<inter> V"] \<open>T' \<subseteq> T\<close> show ?thesis
   574   with oo [of "S \<inter> V"] \<open>T' \<subseteq> T\<close> show ?thesis
   575     by (fastforce simp add: openin_open)
   575     by (fastforce simp add: openin_open)
   576 qed
   576 qed
   577 
   577 
   578 
   578 
   579 subsection%unimportant\<open>Quotient maps\<close>
   579 subsection\<^marker>\<open>tag unimportant\<close>\<open>Quotient maps\<close>
   580 
   580 
   581 lemma quotient_map_imp_continuous_open:
   581 lemma quotient_map_imp_continuous_open:
   582   assumes T: "f ` S \<subseteq> T"
   582   assumes T: "f ` S \<subseteq> T"
   583       and ope: "\<And>U. U \<subseteq> T
   583       and ope: "\<And>U. U \<subseteq> T
   584               \<Longrightarrow> (openin (top_of_set S) (S \<inter> f -` U) \<longleftrightarrow>
   584               \<Longrightarrow> (openin (top_of_set S) (S \<inter> f -` U) \<longleftrightarrow>
   691   assumes "continuous_on S f" "f ` S = T" "compact S" "U \<subseteq> T"
   691   assumes "continuous_on S f" "f ` S = T" "compact S" "U \<subseteq> T"
   692     shows "openin (top_of_set S) (S \<inter> f -` U) \<longleftrightarrow>
   692     shows "openin (top_of_set S) (S \<inter> f -` U) \<longleftrightarrow>
   693            openin (top_of_set T) U"
   693            openin (top_of_set T) U"
   694   by (metis (no_types, lifting) assms closed_map_imp_quotient_map continuous_imp_closed_map)
   694   by (metis (no_types, lifting) assms closed_map_imp_quotient_map continuous_imp_closed_map)
   695 
   695 
   696 subsection%unimportant\<open>Pasting lemmas for functions, for of casewise definitions\<close>
   696 subsection\<^marker>\<open>tag unimportant\<close>\<open>Pasting lemmas for functions, for of casewise definitions\<close>
   697 
   697 
   698 subsubsection\<open>on open sets\<close>
   698 subsubsection\<open>on open sets\<close>
   699 
   699 
   700 lemma pasting_lemma:
   700 lemma pasting_lemma:
   701   assumes ope: "\<And>i. i \<in> I \<Longrightarrow> openin X (T i)"
   701   assumes ope: "\<And>i. i \<in> I \<Longrightarrow> openin X (T i)"
   903     using that continuous_map_frontier_frontier_preimage_subset [OF contp, of U] fg by blast
   903     using that continuous_map_frontier_frontier_preimage_subset [OF contp, of U] fg by blast
   904 qed
   904 qed
   905 
   905 
   906 subsection \<open>Retractions\<close>
   906 subsection \<open>Retractions\<close>
   907 
   907 
   908 definition%important retraction :: "('a::topological_space) set \<Rightarrow> 'a set \<Rightarrow> ('a \<Rightarrow> 'a) \<Rightarrow> bool"
   908 definition\<^marker>\<open>tag important\<close> retraction :: "('a::topological_space) set \<Rightarrow> 'a set \<Rightarrow> ('a \<Rightarrow> 'a) \<Rightarrow> bool"
   909 where "retraction S T r \<longleftrightarrow>
   909 where "retraction S T r \<longleftrightarrow>
   910   T \<subseteq> S \<and> continuous_on S r \<and> r ` S \<subseteq> T \<and> (\<forall>x\<in>T. r x = x)"
   910   T \<subseteq> S \<and> continuous_on S r \<and> r ` S \<subseteq> T \<and> (\<forall>x\<in>T. r x = x)"
   911 
   911 
   912 definition%important retract_of (infixl "retract'_of" 50) where
   912 definition\<^marker>\<open>tag important\<close> retract_of (infixl "retract'_of" 50) where
   913 "T retract_of S  \<longleftrightarrow>  (\<exists>r. retraction S T r)"
   913 "T retract_of S  \<longleftrightarrow>  (\<exists>r. retraction S T r)"
   914 
   914 
   915 lemma retraction_idempotent: "retraction S T r \<Longrightarrow> x \<in> S \<Longrightarrow>  r (r x) = r x"
   915 lemma retraction_idempotent: "retraction S T r \<Longrightarrow> x \<in> S \<Longrightarrow>  r (r x) = r x"
   916   unfolding retraction_def by auto
   916   unfolding retraction_def by auto
   917 
   917