# HG changeset patch # User huffman # Date 1243988420 25200 # Node ID b8570dead501523fd1d1c7f11a0914ef6ec91bb2 # Parent 69570155ddf8aa541bd4fbc7b7ef8d38af6ea04f reuse definition of nets from Limits.thy diff -r 69570155ddf8 -r b8570dead501 src/HOL/Library/Topology_Euclidean_Space.thy --- a/src/HOL/Library/Topology_Euclidean_Space.thy Tue Jun 02 17:03:22 2009 -0700 +++ b/src/HOL/Library/Topology_Euclidean_Space.thy Tue Jun 02 17:20:20 2009 -0700 @@ -991,65 +991,18 @@ using frontier_complement frontier_subset_eq[of "UNIV - S"] unfolding open_closed by auto -subsection{* A variant of nets (Slightly non-standard but good for our purposes). *} - -typedef (open) 'a net = - "{net :: 'a set set. (\A. A \ net) - \ (\A\net. \B\net. \C\net. C \ A \ C \ B)}" -proof - show "UNIV \ ?net" by auto -qed - -lemma Rep_net_nonempty: "\A. A \ Rep_net net" -using Rep_net [of net] by simp - -lemma Rep_net_directed: - "A \ Rep_net net \ B \ Rep_net net \ \C\Rep_net net. C \ A \ C \ B" -using Rep_net [of net] by simp - - subsection{* Common nets and The "within" modifier for nets. *} definition - at :: "'a::metric_space \ 'a net" where - "at a = Abs_net ((\r. {x. 0 < dist x a \ dist x a < r}) ` {r. 0 < r})" - -definition at_infinity :: "'a::real_normed_vector net" where "at_infinity = Abs_net (range (\r. {x. r \ norm x}))" definition - sequentially :: "nat net" where - "sequentially = Abs_net (range (\n. {n..}))" - -definition - within :: "'a net \ 'a set \ 'a net" (infixr "within" 70) where - "net within S = Abs_net ((\A. A \ S) ` Rep_net net)" - -definition indirection :: "real ^'n::finite \ real ^'n \ (real ^'n) net" (infixr "indirection" 70) where "a indirection v = (at a) within {b. \c\0. b - a = c*s v}" text{* Prove That They are all nets. *} -lemma Abs_net_inverse': - assumes "\A. A \ net" - assumes "\A B. A \ net \ B \ net \ \C\net. C \ A \ C \ B" - shows "Rep_net (Abs_net net) = net" -using assms by (simp add: Abs_net_inverse) - -lemma image_nonempty: "\x. x \ A \ \x. x \ f ` A" -by auto - -lemma Rep_net_at: - "Rep_net (at a) = ((\r. {x. 0 < dist x a \ dist x a < r}) ` {r. 0 < r})" -unfolding at_def -apply (rule Abs_net_inverse') -apply (rule image_nonempty, rule_tac x=1 in exI, simp) -apply (clarsimp, rename_tac r s) -apply (rule_tac x="min r s" in exI, auto) -done - lemma Rep_net_at_infinity: "Rep_net at_infinity = range (\r. {x. r \ norm x})" unfolding at_infinity_def @@ -1059,25 +1012,6 @@ apply (rule_tac x="max r s" in exI, auto) done -lemma Rep_net_sequentially: - "Rep_net sequentially = range (\n. {n..})" -unfolding sequentially_def -apply (rule Abs_net_inverse') -apply (rule image_nonempty, simp) -apply (clarsimp, rename_tac m n) -apply (rule_tac x="max m n" in exI, auto) -done - -lemma Rep_net_within: - "Rep_net (net within S) = (\A. A \ S) ` Rep_net net" -unfolding within_def -apply (rule Abs_net_inverse') -apply (rule image_nonempty, rule Rep_net_nonempty) -apply (clarsimp, rename_tac A B) -apply (drule (1) Rep_net_directed) -apply (clarify, rule_tac x=C in bexI, auto) -done - lemma within_UNIV: "net within UNIV = net" by (simp add: Rep_net_inject [symmetric] Rep_net_within) @@ -1135,29 +1069,17 @@ subsection{* Some property holds "sufficiently close" to the limit point. *} -definition - eventually :: "('a \ bool) \ 'a net \ bool" where - "eventually P net \ (\A\Rep_net net. \x\A. P x)" - lemma eventually_at: "eventually P (at a) \ (\d>0. \x. 0 < dist x a \ dist x a < d \ P x)" -unfolding eventually_def Rep_net_at by auto +unfolding eventually_def Rep_net_at dist_nz by auto lemma eventually_at_infinity: "eventually P at_infinity \ (\b. \x. norm x >= b \ P x)" unfolding eventually_def Rep_net_at_infinity by auto -lemma eventually_sequentially: - "eventually P sequentially \ (\N. \n\N. P n)" -unfolding eventually_def Rep_net_sequentially by auto - -lemma eventually_within_eq: - "eventually P (net within S) = eventually (\x. x \ S \ P x) net" -unfolding eventually_def Rep_net_within by auto - lemma eventually_within: "eventually P (at a within S) \ (\d>0. \x\S. 0 < dist x a \ dist x a < d \ P x)" -unfolding eventually_within_eq eventually_at by auto +unfolding eventually_within eventually_at dist_nz by auto lemma eventually_within_le: "eventually P (at a within S) \ (\d>0. \x\S. 0 < dist x a \ dist x a <= d \ P x)" (is "?lhs = ?rhs") @@ -1175,9 +1097,6 @@ unfolding eventually_def trivial_limit_def using Rep_net_nonempty [of net] by auto -lemma eventually_True [simp]: "eventually (\x. True) net" - by (simp add: always_eventually) - lemma trivial_limit_eventually: "trivial_limit net \ eventually P net" unfolding trivial_limit_def eventually_def by auto @@ -1194,14 +1113,7 @@ lemma eventually_conjI: "\eventually (\x. P x) net; eventually (\x. Q x) net\ \ eventually (\x. P x \ Q x) net" -unfolding eventually_def -apply (clarify, rename_tac A B) -apply (drule (1) Rep_net_directed, clarify) -apply (rule_tac x=C in bexI, auto) -done - -lemma eventually_mono: "(\x. P x \ Q x) \ eventually P net \ eventually Q net" - by (metis eventually_def) +by (rule eventually_conj) lemma eventually_rev_mono: "eventually P net \ (\x. P x \ Q x) \ eventually Q net" @@ -1210,30 +1122,15 @@ lemma eventually_and: " eventually (\x. P x \ Q x) net \ eventually P net \ eventually Q net" by (auto intro!: eventually_conjI elim: eventually_rev_mono) -lemma eventually_mp: "eventually (\x. P x \ Q x) net \ eventually P net \ eventually Q net" - apply (atomize(full)) - unfolding imp_conjL[symmetric] eventually_and[symmetric] - by (auto simp add: eventually_def) - lemma eventually_false: "eventually (\x. False) net \ trivial_limit net" by (auto simp add: eventually_False) lemma not_eventually: "(\x. \ P x ) \ ~(trivial_limit net) ==> ~(eventually (\x. P x) net)" by (simp add: eventually_False) -lemma eventually_rev_mp: - assumes 1: "eventually (\x. P x) net" - assumes 2: "eventually (\x. P x \ Q x) net" - shows "eventually (\x. Q x) net" -using 2 1 by (rule eventually_mp) - subsection{* Limits, defined as vacuously true when the limit is trivial. *} -definition tendsto:: "('a \ 'b::metric_space) \ 'b \ 'a net \ bool" (infixr "--->" 55) where - tendsto_def: "(f ---> l) net \ (\e>0. eventually (\x. dist (f x) l < e) net)" - -lemma tendstoD: "(f ---> l) net \ e>0 \ eventually (\x. dist (f x) l < e) net" - unfolding tendsto_def by auto +notation tendsto (infixr "--->" 55) text{* Notation Lim to avoid collition with lim defined in analysis *} definition "Lim net f = (THE l. (f ---> l) net)"