author huffman Wed, 28 Mar 2018 12:12:19 -0700 changeset 67957 55f00429da84 parent 67956 79dbb9dccc99 child 67958 732c0b059463
tuned some proofs
```--- a/src/HOL/Topological_Spaces.thy	Wed Mar 28 11:19:07 2018 -0700
+++ b/src/HOL/Topological_Spaces.thy	Wed Mar 28 12:12:19 2018 -0700
@@ -3472,23 +3472,7 @@
lemma tendsto_Pair [tendsto_intros]:
assumes "(f \<longlongrightarrow> a) F" and "(g \<longlongrightarrow> b) F"
shows "((\<lambda>x. (f x, g x)) \<longlongrightarrow> (a, b)) F"
-proof (rule topological_tendstoI)
-  fix S
-  assume "open S" and "(a, b) \<in> S"
-  then obtain A B where "open A" "open B" "a \<in> A" "b \<in> B" "A \<times> B \<subseteq> S"
-    unfolding open_prod_def by fast
-  have "eventually (\<lambda>x. f x \<in> A) F"
-    using \<open>(f \<longlongrightarrow> a) F\<close> \<open>open A\<close> \<open>a \<in> A\<close>
-    by (rule topological_tendstoD)
-  moreover
-  have "eventually (\<lambda>x. g x \<in> B) F"
-    using \<open>(g \<longlongrightarrow> b) F\<close> \<open>open B\<close> \<open>b \<in> B\<close>
-    by (rule topological_tendstoD)
-  ultimately
-  show "eventually (\<lambda>x. (f x, g x) \<in> S) F"
-    by (rule eventually_elim2)
-       (simp add: subsetD [OF \<open>A \<times> B \<subseteq> S\<close>])
-qed
+  unfolding nhds_prod using assms by (rule filterlim_Pair)

lemma continuous_fst[continuous_intros]: "continuous F f \<Longrightarrow> continuous F (\<lambda>x. fst (f x))"
unfolding continuous_def by (rule tendsto_fst)
@@ -3625,17 +3609,13 @@
using continuous_on_eq_continuous_within continuous_on_swap by blast

lemma open_diagonal_complement:
-  "open {(x,y) | x y. x \<noteq> (y::('a::t2_space))}"
-proof (rule topological_space_class.openI)
-  fix t assume "t \<in> {(x, y) | x y. x \<noteq> (y::'a)}"
-  then obtain x y where "t = (x,y)" "x \<noteq> y" by blast
-  then obtain U V where *: "open U \<and> open V \<and> x \<in> U \<and> y \<in> V \<and> U \<inter> V = {}"
-    by (auto simp add: separation_t2)
-  define T where "T = U \<times> V"
-  have "open T" using * open_Times T_def by auto
-  moreover have "t \<in> T" unfolding T_def using \<open>t = (x,y)\<close> * by auto
-  moreover have "T \<subseteq> {(x, y) | x y. x \<noteq> y}" unfolding T_def using * by auto
-  ultimately show "\<exists>T. open T \<and> t \<in> T \<and> T \<subseteq> {(x, y) | x y. x \<noteq> y}" by auto
+  "open {(x,y) |x y. x \<noteq> (y::('a::t2_space))}"
+proof -
+  have "open {(x, y). x \<noteq> (y::'a)}"
+    unfolding split_def by (intro open_Collect_neq continuous_intros)
+  also have "{(x, y). x \<noteq> (y::'a)} = {(x, y) |x y. x \<noteq> (y::'a)}"
+    by auto
+  finally show ?thesis .
qed

lemma closed_diagonal:
@@ -3647,29 +3627,12 @@

lemma open_superdiagonal:
"open {(x,y) | x y. x > (y::'a::{linorder_topology})}"
-proof (rule topological_space_class.openI)
-  fix t assume "t \<in> {(x, y) | x y. y < (x::'a)}"
-  then obtain x y where "t = (x, y)" "x > y" by blast
-  show "\<exists>T. open T \<and> t \<in> T \<and> T \<subseteq> {(x, y) | x y. y < x}"
-  proof (cases)
-    assume "\<exists>z. y < z \<and> z < x"
-    then obtain z where z: "y < z \<and> z < x" by blast
-    define T where "T = {z<..} \<times> {..<z}"
-    have "open T" unfolding T_def by (simp add: open_Times)
-    moreover have "t \<in> T" using T_def z \<open>t = (x,y)\<close> by auto
-    moreover have "T \<subseteq> {(x, y) | x y. y < x}" unfolding T_def by auto
-    ultimately show ?thesis by auto
-  next
-    assume "\<not>(\<exists>z. y < z \<and> z < x)"
-    then have *: "{x ..} = {y<..}" "{..< x} = {..y}"
-      using \<open>x > y\<close> apply auto using leI by blast
-    define T where "T = {x ..} \<times> {.. y}"
-    then have "T = {y<..} \<times> {..< x}" using * by simp
-    then have "open T" unfolding T_def by (simp add: open_Times)
-    moreover have "t \<in> T" using T_def \<open>t = (x,y)\<close> by auto
-    moreover have "T \<subseteq> {(x, y) | x y. y < x}" unfolding T_def using \<open>x > y\<close> by auto
-    ultimately show ?thesis by auto
-  qed
+proof -
+  have "open {(x, y). x > (y::'a)}"
+    unfolding split_def by (intro open_Collect_less continuous_intros)
+  also have "{(x, y). x > (y::'a)} = {(x, y) |x y. x > (y::'a)}"
+    by auto
+  finally show ?thesis .
qed

lemma closed_subdiagonal:
@@ -3681,29 +3644,12 @@

lemma open_subdiagonal:
"open {(x,y) | x y. x < (y::'a::{linorder_topology})}"
-proof (rule topological_space_class.openI)
-  fix t assume "t \<in> {(x, y) | x y. y > (x::'a)}"
-  then obtain x y where "t = (x, y)" "x < y" by blast
-  show "\<exists>T. open T \<and> t \<in> T \<and> T \<subseteq> {(x, y) | x y. y > x}"
-  proof (cases)
-    assume "\<exists>z. y > z \<and> z > x"
-    then obtain z where z: "y > z \<and> z > x" by blast
-    define T where "T = {..<z} \<times> {z<..}"
-    have "open T" unfolding T_def by (simp add: open_Times)
-    moreover have "t \<in> T" using T_def z \<open>t = (x,y)\<close> by auto
-    moreover have "T \<subseteq> {(x, y) |x y. y > x}" unfolding T_def by auto
-    ultimately show ?thesis by auto
-  next
-    assume "\<not>(\<exists>z. y > z \<and> z > x)"
-    then have *: "{..x} = {..<y}" "{x<..} = {y..}"
-      using \<open>x < y\<close> apply auto using leI by blast
-    define T where "T = {..x} \<times> {y..}"
-    then have "T = {..<y} \<times> {x<..}" using * by simp
-    then have "open T" unfolding T_def by (simp add: open_Times)
-    moreover have "t \<in> T" using T_def \<open>t = (x,y)\<close> by auto
-    moreover have "T \<subseteq> {(x, y) |x y. y > x}" unfolding T_def using \<open>x < y\<close> by auto
-    ultimately show ?thesis by auto
-  qed
+proof -
+  have "open {(x, y). x < (y::'a)}"
+    unfolding split_def by (intro open_Collect_less continuous_intros)
+  also have "{(x, y). x < (y::'a)} = {(x, y) |x y. x < (y::'a)}"
+    by auto
+  finally show ?thesis .
qed

lemma closed_superdiagonal:```