# HG changeset patch # User huffman # Date 1244774679 25200 # Node ID 784decc70e07679eb90082dec396b8ebe91bf77d # Parent f11a849bab610d0b562d085602c97b090c5b2912 generalize lemma edelstein_fix diff -r f11a849bab61 -r 784decc70e07 src/HOL/Library/Topology_Euclidean_Space.thy --- a/src/HOL/Library/Topology_Euclidean_Space.thy Thu Jun 11 19:23:56 2009 -0700 +++ b/src/HOL/Library/Topology_Euclidean_Space.thy Thu Jun 11 19:44:39 2009 -0700 @@ -5945,9 +5945,10 @@ subsection{* Edelstein fixed point theorem. *} lemma edelstein_fix: + fixes s :: "'a::{heine_borel, real_normed_vector} set" assumes s:"compact s" "s \ {}" and gs:"(g ` s) \ s" and dist:"\x\s. \y\s. x \ y \ dist (g x) (g y) < dist x y" - shows "\! x::real^'a::finite\s. g x = x" + shows "\! x\s. g x = x" proof(cases "\x\s. g x \ x") obtain x where "x\s" using s(2) by auto case False hence g:"\x\s. g x = x" by auto @@ -5990,26 +5991,23 @@ qed qed } note distf = this - def h \ "\n. pastecart (f n x) (f n y)" - let ?s2 = "{pastecart x y |x y. x \ s \ y \ s}" + def h \ "\n. (f n x, f n y)" + let ?s2 = "s \ s" obtain l r where "l\?s2" and r:"subseq r" and lr:"((h \ r) ---> l) sequentially" - using compact_pastecart[OF s(1) s(1), unfolded compact_def, THEN spec[where x=h]] unfolding h_def + using compact_Times [OF s(1) s(1), unfolded compact_def, THEN spec[where x=h]] unfolding h_def using fs[OF `x\s`] and fs[OF `y\s`] by blast - def a \ "fstcart l" def b \ "sndcart l" - have lab:"l = pastecart a b" unfolding a_def b_def and pastecart_fst_snd by simp + def a \ "fst l" def b \ "snd l" + have lab:"l = (a, b)" unfolding a_def b_def by simp have [simp]:"a\s" "b\s" unfolding a_def b_def using `l\?s2` by auto - have "continuous_on (UNIV :: (real ^ _) set) fstcart" - and "continuous_on (UNIV :: (real ^ _) set) sndcart" - using linear_continuous_on using linear_fstcart and linear_sndcart by auto - hence lima:"((fstcart \ (h \ r)) ---> a) sequentially" and limb:"((sndcart \ (h \ r)) ---> b) sequentially" - unfolding atomize_conj unfolding continuous_on_sequentially - apply(erule_tac x="h \ r" in allE) apply(erule_tac x="h \ r" in allE) using lr - unfolding o_def and h_def a_def b_def by auto + have lima:"((fst \ (h \ r)) ---> a) sequentially" + and limb:"((snd \ (h \ r)) ---> b) sequentially" + using lr + unfolding o_def a_def b_def by (simp_all add: tendsto_intros) { fix n::nat - have *:"\fx fy (x::real^_) y. dist fx fy \ dist x y \ \ (dist (fx - fy) (a - b) < dist a b - dist x y)" unfolding dist_norm by norm - { fix x y ::"real^'a" + have *:"\fx fy (x::'a) y. dist fx fy \ dist x y \ \ (dist (fx - fy) (a - b) < dist a b - dist x y)" unfolding dist_norm by norm + { fix x y :: 'a have "dist (-x) (-y) = dist x y" unfolding dist_norm using norm_minus_cancel[of "x - y"] by (auto simp add: uminus_add_conv_diff) } note ** = this @@ -6054,8 +6052,8 @@ have "dist y x < e \ dist (g y) (g x) < e" using dist by fastsimp } hence "continuous_on s g" unfolding continuous_on_def by auto - hence "((sndcart \ h \ r) ---> g a) sequentially" unfolding continuous_on_sequentially - apply (rule allE[where x="\n. (fstcart \ h \ r) n"]) apply (erule ballE[where x=a]) + hence "((snd \ h \ r) ---> g a) sequentially" unfolding continuous_on_sequentially + apply (rule allE[where x="\n. (fst \ h \ r) n"]) apply (erule ballE[where x=a]) using lima unfolding h_def o_def using fs[OF `x\s`] by (auto simp add: y_def) hence "g a = a" using Lim_unique[OF trivial_limit_sequentially limb, of "g a"] unfolding `a=b` and o_assoc by auto