src/HOL/Analysis/Function_Topology.thy
changeset 69994 cf7150ab1075
parent 69945 35ba13ac6e5c
child 70019 095dce9892e8
--- a/src/HOL/Analysis/Function_Topology.thy	Tue Mar 26 22:18:30 2019 +0100
+++ b/src/HOL/Analysis/Function_Topology.thy	Wed Mar 27 14:08:26 2019 +0000
@@ -78,6 +78,9 @@
   where "product_topology T I =
     topology_generated_by {(\<Pi>\<^sub>E i\<in>I. X i) |X. (\<forall>i. openin (T i) (X i)) \<and> finite {i. X i \<noteq> topspace (T i)}}"
 
+abbreviation powertop_real :: "'a set \<Rightarrow> ('a \<Rightarrow> real) topology"
+  where "powertop_real \<equiv> product_topology (\<lambda>i. euclideanreal)"
+
 text \<open>The total set of the product topology is the product of the total sets
 along each coordinate.\<close>
 
@@ -1994,5 +1997,55 @@
     PiE I S = {} \<or> (\<forall>i \<in> I. path_connectedin (X i) (S i))"
   by (fastforce simp add: path_connectedin_def subtopology_PiE path_connected_space_product_topology subset_PiE PiE_eq_empty_iff topspace_subtopology_subset)
 
+subsection \<open>Projections from a function topology to a component\<close>
+
+lemma quotient_map_product_projection:
+  assumes "i \<in> I"
+  shows "quotient_map(product_topology X I) (X i) (\<lambda>x. x i) \<longleftrightarrow>
+           (topspace(product_topology X I) = {} \<longrightarrow> topspace(X i) = {})"
+         (is "?lhs = ?rhs")
+proof
+  assume ?lhs with assms show ?rhs
+    by (auto simp: continuous_open_quotient_map open_map_product_projection)
+next
+  assume ?rhs with assms show ?lhs
+    by (auto simp: Abstract_Topology.retraction_imp_quotient_map retraction_map_product_projection)
+qed
+
+lemma product_topology_homeomorphic_component:
+  assumes "i \<in> I" "\<And>j. \<lbrakk>j \<in> I; j \<noteq> i\<rbrakk> \<Longrightarrow> \<exists>a. topspace(X j) = {a}"
+  shows "product_topology X I homeomorphic_space (X i)"
+proof -
+  have "quotient_map (product_topology X I) (X i) (\<lambda>x. x i)"
+    using assms by (force simp add: quotient_map_product_projection PiE_eq_empty_iff)
+  moreover
+  have "inj_on (\<lambda>x. x i) (\<Pi>\<^sub>E i\<in>I. topspace (X i))"
+    using assms by (auto simp: inj_on_def PiE_iff) (metis extensionalityI singletonD)
+  ultimately show ?thesis
+    unfolding homeomorphic_space_def
+    by (rule_tac x="\<lambda>x. x i" in exI) (simp add: homeomorphic_map_def flip: homeomorphic_map_maps)
+qed
+
+lemma topological_property_of_product_component:
+  assumes major: "P (product_topology X I)"
+    and minor: "\<And>z i. \<lbrakk>z \<in> (\<Pi>\<^sub>E i\<in>I. topspace(X i)); P(product_topology X I); i \<in> I\<rbrakk> 
+                      \<Longrightarrow> P(subtopology (product_topology X I) (PiE I (\<lambda>j. if j = i then topspace(X i) else {z j})))"
+               (is "\<And>z i. \<lbrakk>_; _; _\<rbrakk> \<Longrightarrow> P (?SX z i)")
+    and PQ:  "\<And>X X'. X homeomorphic_space X' \<Longrightarrow> (P X \<longleftrightarrow> Q X')"
+  shows "(\<Pi>\<^sub>E i\<in>I. topspace(X i)) = {} \<or> (\<forall>i \<in> I. Q(X i))"
+proof -
+  have "Q(X i)" if "(\<Pi>\<^sub>E i\<in>I. topspace(X i)) \<noteq> {}" "i \<in> I" for i
+  proof -
+    from that obtain f where f: "f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))" 
+      by force
+    have "?SX f i homeomorphic_space X i"
+      apply (simp add: subtopology_PiE )
+      using product_topology_homeomorphic_component [OF \<open>i \<in> I\<close>, of "\<lambda>j. subtopology (X j) (if j = i then topspace (X i) else {f j})"]
+      using f by fastforce
+    then show ?thesis
+      using minor [OF f major \<open>i \<in> I\<close>] PQ by auto
+  qed
+  then show ?thesis by metis
+qed
 
 end