# HG changeset patch # User huffman # Date 1244056403 25200 # Node ID 1501fc26f11b724119939497f819243872b0b2aa # Parent 4c22ef11078b8c9f9167fa694fa637b5a1ee8c9f add classes for t0, t1, and t2 spaces diff -r 4c22ef11078b -r 1501fc26f11b src/HOL/Library/Topology_Euclidean_Space.thy --- a/src/HOL/Library/Topology_Euclidean_Space.thy Wed Jun 03 11:22:49 2009 -0700 +++ b/src/HOL/Library/Topology_Euclidean_Space.thy Wed Jun 03 12:13:23 2009 -0700 @@ -484,33 +484,55 @@ subsection{* Hausdorff and other separation properties *} -lemma hausdorff: - fixes x y :: "'a::metric_space" - assumes xy: "x \ y" - shows "\U V. open U \ open V \ x\ U \ y \ V \ (U \ V = {})" (is "\U V. ?P U V") -proof- +axclass t0_space \ topological_space + t0_space: + "x \ y \ \U. open U \ \ (x \ U \ y \ U)" + +axclass t1_space \ topological_space + t1_space: + "x \ y \ \U V. open U \ open V \ x \ U \ y \ U \ x \ V \ y \ V" + +instance t1_space \ t0_space +by default (fast dest: t1_space) + +text {* T2 spaces are also known as Hausdorff spaces. *} + +axclass t2_space \ topological_space + hausdorff: + "x \ y \ \U V. open U \ open V \ x \ U \ y \ V \ U \ V = {}" + +instance t2_space \ t1_space +by default (fast dest: hausdorff) + +instance metric_space \ t2_space +proof + fix x y :: "'a::metric_space" + assume xy: "x \ y" let ?U = "ball x (dist x y / 2)" let ?V = "ball y (dist x y / 2)" have th0: "\d x y z. (d x z :: real) <= d x y + d y z \ d y z = d z y ==> ~(d x y * 2 < d x z \ d z y * 2 < d x z)" by arith - have "?P ?U ?V" using dist_pos_lt[OF xy] th0[of dist,OF dist_triangle dist_commute] - by (auto simp add: expand_set_eq less_divide_eq_number_of1) - then show ?thesis by blast + have "open ?U \ open ?V \ x \ ?U \ y \ ?V \ ?U \ ?V = {}" + using dist_pos_lt[OF xy] th0[of dist,OF dist_triangle dist_commute] + by (auto simp add: expand_set_eq) + then show "\U V. open U \ open V \ x \ U \ y \ V \ U \ V = {}" + by blast qed lemma separation_t2: - fixes x y :: "'a::metric_space" + fixes x y :: "'a::t2_space" shows "x \ y \ (\U V. open U \ open V \ x \ U \ y \ V \ U \ V = {})" using hausdorff[of x y] by blast lemma separation_t1: - fixes x y :: "'a::metric_space" + fixes x y :: "'a::t1_space" shows "x \ y \ (\U V. open U \ open V \ x \U \ y\ U \ x\V \ y\V)" - using separation_t2[of x y] by blast + using t1_space[of x y] by blast lemma separation_t0: - fixes x y :: "'a::metric_space" - shows "x \ y \ (\U. open U \ ~(x\U \ y\U))" by(metis separation_t1) + fixes x y :: "'a::t0_space" + shows "x \ y \ (\U. open U \ ~(x\U \ y\U))" + using t0_space[of x y] by blast subsection{* Limit points *}