diff -r 9f2ca03ae7b7 -r 729d90a531e4 src/HOL/RealVector.thy --- a/src/HOL/RealVector.thy Wed Jun 03 07:12:57 2009 -0700 +++ b/src/HOL/RealVector.thy Wed Jun 03 07:44:56 2009 -0700 @@ -416,12 +416,26 @@ by (rule Reals_cases) auto +subsection {* Topological spaces *} + +class "open" = + fixes "open" :: "'a set \ bool" + +class topological_space = "open" + + assumes open_UNIV: "open UNIV" + assumes open_Int: "open A \ open B \ open (A \ B)" + assumes open_Union: "\A\T. open A \ open (\T)" + + subsection {* Metric spaces *} class dist = fixes dist :: "'a \ 'a \ real" -class metric_space = dist + +class open_dist = "open" + dist + + assumes open_dist: "open S = (\x\S. \e>0. \y. dist y x < e \ y \ S)" + +class metric_space = open_dist + assumes dist_eq_0_iff [simp]: "dist x y = 0 \ x = y" assumes dist_triangle2: "dist x y \ dist x z + dist y z" begin @@ -452,6 +466,27 @@ lemma dist_triangle: "dist x z \ dist x y + dist y z" using dist_triangle2 [of x z y] by (simp add: dist_commute) +subclass topological_space +proof + have "\e::real. 0 < e" + by (fast intro: zero_less_one) + then show "open UNIV" + unfolding open_dist by simp +next + fix A B assume "open A" "open B" + then show "open (A \ B)" + unfolding open_dist + apply clarify + apply (drule (1) bspec)+ + apply (clarify, rename_tac r s) + apply (rule_tac x="min r s" in exI, simp) + done +next + fix T assume "\A\T. open A" + then show "open (\T)" + unfolding open_dist by fast +qed + end @@ -466,7 +501,7 @@ class dist_norm = dist + norm + minus + assumes dist_norm: "dist x y = norm (x - y)" -class real_normed_vector = real_vector + sgn_div_norm + dist_norm + +class real_normed_vector = real_vector + sgn_div_norm + dist_norm + open_dist + assumes norm_ge_zero [simp]: "0 \ norm x" and norm_eq_zero [simp]: "norm x = 0 \ x = 0" and norm_triangle_ineq: "norm (x + y) \ norm x + norm y" @@ -497,15 +532,19 @@ instantiation real :: real_normed_field begin -definition - real_norm_def [simp]: "norm r = \r\" +definition real_norm_def [simp]: + "norm r = \r\" -definition - dist_real_def: "dist x y = \x - y\" +definition dist_real_def: + "dist x y = \x - y\" + +definition open_real_def: + "open S = (\x\S. \e>0. \y::real. dist y x < e \ y \ S)" instance apply (intro_classes, unfold real_norm_def real_scaleR_def) apply (rule dist_real_def) +apply (rule open_real_def) apply (simp add: real_sgn_def) apply (rule abs_ge_zero) apply (rule abs_eq_0)