# HG changeset patch # User huffman # Date 1243832373 25200 # Node ID 2261c8781f7387073f8f84728f870ce42f1c7757 # Parent 738eb25e1dd80bf285ff44a649fb981ac82246b9 new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters diff -r 738eb25e1dd8 -r 2261c8781f73 src/HOL/Lim.thy --- a/src/HOL/Lim.thy Sun May 31 11:27:19 2009 -0700 +++ b/src/HOL/Lim.thy Sun May 31 21:59:33 2009 -0700 @@ -13,6 +13,10 @@ text{*Standard Definitions*} definition + at :: "'a::metric_space \ 'a filter" where + "at a = Abs_filter (\P. \r>0. \x. x \ a \ dist x a < r \ P x)" + +definition LIM :: "['a::metric_space \ 'b::metric_space, 'a, 'b] \ bool" ("((_)/ -- (_)/ --> (_))" [60, 0, 60] 60) where [code del]: "f -- a --> L = @@ -27,6 +31,20 @@ isUCont :: "['a::metric_space \ 'b::metric_space] \ bool" where [code del]: "isUCont f = (\r>0. \s>0. \x y. dist x y < s \ dist (f x) (f y) < r)" +subsection {* Neighborhood Filter *} + +lemma eventually_at: + "eventually P (at a) \ (\d>0. \x. x \ a \ dist x a < d \ P x)" +unfolding at_def +apply (rule eventually_Abs_filter) +apply (rule_tac x=1 in exI, simp) +apply (clarify, rule_tac x=r in exI, simp) +apply (clarify, rename_tac r s) +apply (rule_tac x="min r s" in exI, simp) +done + +lemma LIM_conv_tendsto: "(f -- a --> L) \ tendsto f L (at a)" +unfolding LIM_def tendsto_def eventually_at .. subsection {* Limits of Functions *} @@ -86,33 +104,7 @@ fixes f g :: "'a::metric_space \ 'b::real_normed_vector" assumes f: "f -- a --> L" and g: "g -- a --> M" shows "(\x. f x + g x) -- a --> (L + M)" -proof (rule metric_LIM_I) - fix r :: real - assume r: "0 < r" - from metric_LIM_D [OF f half_gt_zero [OF r]] - obtain fs - where fs: "0 < fs" - and fs_lt: "\x. x \ a \ dist x a < fs \ dist (f x) L < r/2" - by blast - from metric_LIM_D [OF g half_gt_zero [OF r]] - obtain gs - where gs: "0 < gs" - and gs_lt: "\x. x \ a \ dist x a < gs \ dist (g x) M < r/2" - by blast - show "\s>0. \x. x \ a \ dist x a < s \ dist (f x + g x) (L + M) < r" - proof (intro exI conjI strip) - show "0 < min fs gs" by (simp add: fs gs) - fix x :: 'a - assume "x \ a \ dist x a < min fs gs" - hence "x \ a \ dist x a < fs \ dist x a < gs" by simp - with fs_lt gs_lt - have "dist (f x) L < r/2" and "dist (g x) M < r/2" by blast+ - hence "dist (f x) L + dist (g x) M < r" by arith - thus "dist (f x + g x) (L + M) < r" - unfolding dist_norm - by (blast intro: norm_diff_triangle_ineq order_le_less_trans) - qed -qed +using assms unfolding LIM_conv_tendsto by (rule tendsto_add) lemma LIM_add_zero: fixes f g :: "'a::metric_space \ 'b::real_normed_vector" @@ -127,7 +119,7 @@ lemma LIM_minus: fixes f :: "'a::metric_space \ 'b::real_normed_vector" shows "f -- a --> L \ (\x. - f x) -- a --> - L" -by (simp only: LIM_def dist_norm minus_diff_minus norm_minus_cancel) +unfolding LIM_conv_tendsto by (rule tendsto_minus) (* TODO: delete *) lemma LIM_add_minus: @@ -138,7 +130,7 @@ lemma LIM_diff: fixes f g :: "'a::metric_space \ 'b::real_normed_vector" shows "\f -- x --> l; g -- x --> m\ \ (\x. f x - g x) -- x --> l - m" -by (simp only: diff_minus LIM_add LIM_minus) +unfolding LIM_conv_tendsto by (rule tendsto_diff) lemma LIM_zero: fixes f :: "'a::metric_space \ 'b::real_normed_vector" @@ -178,7 +170,7 @@ lemma LIM_norm: fixes f :: "'a::metric_space \ 'b::real_normed_vector" shows "f -- a --> l \ (\x. norm (f x)) -- a --> norm l" -by (erule LIM_imp_LIM, simp add: norm_triangle_ineq3) +unfolding LIM_conv_tendsto by (rule tendsto_norm) lemma LIM_norm_zero: fixes f :: "'a::metric_space \ 'b::real_normed_vector" @@ -369,26 +361,12 @@ text {* Bounded Linear Operators *} -lemma (in bounded_linear) cont: "f -- a --> f a" -proof (rule LIM_I) - fix r::real assume r: "0 < r" - obtain K where K: "0 < K" and norm_le: "\x. norm (f x) \ norm x * K" - using pos_bounded by fast - show "\s>0. \x. x \ a \ norm (x - a) < s \ norm (f x - f a) < r" - proof (rule exI, safe) - from r K show "0 < r / K" by (rule divide_pos_pos) - next - fix x assume x: "norm (x - a) < r / K" - have "norm (f x - f a) = norm (f (x - a))" by (simp only: diff) - also have "\ \ norm (x - a) * K" by (rule norm_le) - also from K x have "\ < r" by (simp only: pos_less_divide_eq) - finally show "norm (f x - f a) < r" . - qed -qed - lemma (in bounded_linear) LIM: "g -- a --> l \ (\x. f (g x)) -- a --> f l" -by (rule LIM_compose [OF cont]) +unfolding LIM_conv_tendsto by (rule tendsto) + +lemma (in bounded_linear) cont: "f -- a --> f a" +by (rule LIM [OF LIM_ident]) lemma (in bounded_linear) LIM_zero: "g -- a --> 0 \ (\x. f (g x)) -- a --> 0" @@ -396,40 +374,16 @@ text {* Bounded Bilinear Operators *} +lemma (in bounded_bilinear) LIM: + "\f -- a --> L; g -- a --> M\ \ (\x. f x ** g x) -- a --> L ** M" +unfolding LIM_conv_tendsto by (rule tendsto) + lemma (in bounded_bilinear) LIM_prod_zero: fixes a :: "'d::metric_space" assumes f: "f -- a --> 0" assumes g: "g -- a --> 0" shows "(\x. f x ** g x) -- a --> 0" -proof (rule metric_LIM_I, unfold dist_norm) - fix r::real assume r: "0 < r" - obtain K where K: "0 < K" - and norm_le: "\x y. norm (x ** y) \ norm x * norm y * K" - using pos_bounded by fast - from K have K': "0 < inverse K" - by (rule positive_imp_inverse_positive) - obtain s where s: "0 < s" - and norm_f: "\x. \x \ a; dist x a < s\ \ norm (f x) < r" - using metric_LIM_D [OF f r, unfolded dist_norm] by auto - obtain t where t: "0 < t" - and norm_g: "\x. \x \ a; dist x a < t\ \ norm (g x) < inverse K" - using metric_LIM_D [OF g K', unfolded dist_norm] by auto - show "\s>0. \x. x \ a \ dist x a < s \ norm (f x ** g x - 0) < r" - proof (rule exI, safe) - from s t show "0 < min s t" by simp - next - fix x assume x: "x \ a" - assume "dist x a < min s t" - hence xs: "dist x a < s" and xt: "dist x a < t" by simp_all - from x xs have 1: "norm (f x) < r" by (rule norm_f) - from x xt have 2: "norm (g x) < inverse K" by (rule norm_g) - have "norm (f x ** g x) \ norm (f x) * norm (g x) * K" by (rule norm_le) - also from 1 2 K have "\ < r * inverse K * K" - by (intro mult_strict_right_mono mult_strict_mono' norm_ge_zero) - also from K have "r * inverse K * K = r" by simp - finally show "norm (f x ** g x - 0) < r" by simp - qed -qed +using LIM [OF f g] by (simp add: zero_left) lemma (in bounded_bilinear) LIM_left_zero: "f -- a --> 0 \ (\x. f x ** c) -- a --> 0" @@ -439,19 +393,6 @@ "f -- a --> 0 \ (\x. c ** f x) -- a --> 0" by (rule bounded_linear.LIM_zero [OF bounded_linear_right]) -lemma (in bounded_bilinear) LIM: - "\f -- a --> L; g -- a --> M\ \ (\x. f x ** g x) -- a --> L ** M" -apply (drule LIM_zero) -apply (drule LIM_zero) -apply (rule LIM_zero_cancel) -apply (subst prod_diff_prod) -apply (rule LIM_add_zero) -apply (rule LIM_add_zero) -apply (erule (1) LIM_prod_zero) -apply (erule LIM_left_zero) -apply (erule LIM_right_zero) -done - lemmas LIM_mult = mult.LIM lemmas LIM_mult_zero = mult.LIM_prod_zero diff -r 738eb25e1dd8 -r 2261c8781f73 src/HOL/Limits.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/Limits.thy Sun May 31 21:59:33 2009 -0700 @@ -0,0 +1,296 @@ +(* Title : Limits.thy + Author : Brian Huffman +*) + +header {* Filters and Limits *} + +theory Limits +imports RealVector RComplete +begin + +subsection {* Filters *} + +typedef (open) 'a filter = + "{f :: ('a \ bool) \ bool. f (\x. True) + \ (\P Q. (\x. P x \ Q x) \ f P \ f Q) + \ (\P Q. f P \ f Q \ f (\x. P x \ Q x))}" +proof + show "(\P. True) \ ?filter" by simp +qed + +definition + eventually :: "('a \ bool) \ 'a filter \ bool" where + "eventually P F \ Rep_filter F P" + +lemma eventually_True [simp]: "eventually (\x. True) F" +unfolding eventually_def using Rep_filter [of F] by blast + +lemma eventually_mono: + "(\x. P x \ Q x) \ eventually P F \ eventually Q F" +unfolding eventually_def using Rep_filter [of F] by blast + +lemma eventually_conj: + "\eventually (\x. P x) F; eventually (\x. Q x) F\ + \ eventually (\x. P x \ Q x) F" +unfolding eventually_def using Rep_filter [of F] by blast + +lemma eventually_mp: + assumes "eventually (\x. P x \ Q x) F" + assumes "eventually (\x. P x) F" + shows "eventually (\x. Q x) F" +proof (rule eventually_mono) + show "\x. (P x \ Q x) \ P x \ Q x" by simp + show "eventually (\x. (P x \ Q x) \ P x) F" + using assms by (rule eventually_conj) +qed + +lemma eventually_rev_mp: + assumes "eventually (\x. P x) F" + assumes "eventually (\x. P x \ Q x) F" + shows "eventually (\x. Q x) F" +using assms(2) assms(1) by (rule eventually_mp) + +lemma eventually_conj_iff: + "eventually (\x. P x \ Q x) net \ eventually P net \ eventually Q net" +by (auto intro: eventually_conj elim: eventually_rev_mp) + +lemma eventually_Abs_filter: + assumes "f (\x. True)" + assumes "\P Q. (\x. P x \ Q x) \ f P \ f Q" + assumes "\P Q. f P \ f Q \ f (\x. P x \ Q x)" + shows "eventually P (Abs_filter f) \ f P" +unfolding eventually_def using assms +by (subst Abs_filter_inverse, auto) + +lemma filter_ext: + "(\P. eventually P F \ eventually P F') \ F = F'" +unfolding eventually_def +by (simp add: Rep_filter_inject [THEN iffD1] ext) + +lemma eventually_elim1: + assumes "eventually (\i. P i) F" + assumes "\i. P i \ Q i" + shows "eventually (\i. Q i) F" +using assms by (auto elim!: eventually_rev_mp) + +lemma eventually_elim2: + assumes "eventually (\i. P i) F" + assumes "eventually (\i. Q i) F" + assumes "\i. P i \ Q i \ R i" + shows "eventually (\i. R i) F" +using assms by (auto elim!: eventually_rev_mp) + + +subsection {* Convergence to Zero *} + +definition + Zfun :: "('a \ 'b::real_normed_vector) \ 'a filter \ bool" where + "Zfun S F = (\r>0. eventually (\i. norm (S i) < r) F)" + +lemma ZfunI: + "(\r. 0 < r \ eventually (\i. norm (S i) < r) F) \ Zfun S F" +unfolding Zfun_def by simp + +lemma ZfunD: + "\Zfun S F; 0 < r\ \ eventually (\i. norm (S i) < r) F" +unfolding Zfun_def by simp + +lemma Zfun_zero: "Zfun (\i. 0) F" +unfolding Zfun_def by simp + +lemma Zfun_norm_iff: "Zfun (\i. norm (S i)) F = Zfun (\i. S i) F" +unfolding Zfun_def by simp + +lemma Zfun_imp_Zfun: + assumes X: "Zfun X F" + assumes Y: "\n. norm (Y n) \ norm (X n) * K" + shows "Zfun (\n. Y n) F" +proof (cases) + assume K: "0 < K" + show ?thesis + proof (rule ZfunI) + fix r::real assume "0 < r" + hence "0 < r / K" + using K by (rule divide_pos_pos) + then have "eventually (\i. norm (X i) < r / K) F" + using ZfunD [OF X] by fast + then show "eventually (\i. norm (Y i) < r) F" + proof (rule eventually_elim1) + fix i assume "norm (X i) < r / K" + hence "norm (X i) * K < r" + by (simp add: pos_less_divide_eq K) + thus "norm (Y i) < r" + by (simp add: order_le_less_trans [OF Y]) + qed + qed +next + assume "\ 0 < K" + hence K: "K \ 0" by (simp only: not_less) + { + fix i + have "norm (Y i) \ norm (X i) * K" by (rule Y) + also have "\ \ norm (X i) * 0" + using K norm_ge_zero by (rule mult_left_mono) + finally have "norm (Y i) = 0" by simp + } + thus ?thesis by (simp add: Zfun_zero) +qed + +lemma Zfun_le: "\Zfun Y F; \n. norm (X n) \ norm (Y n)\ \ Zfun X F" +by (erule_tac K="1" in Zfun_imp_Zfun, simp) + +lemma Zfun_add: + assumes X: "Zfun X F" and Y: "Zfun Y F" + shows "Zfun (\n. X n + Y n) F" +proof (rule ZfunI) + fix r::real assume "0 < r" + hence r: "0 < r / 2" by simp + have "eventually (\i. norm (X i) < r/2) F" + using X r by (rule ZfunD) + moreover + have "eventually (\i. norm (Y i) < r/2) F" + using Y r by (rule ZfunD) + ultimately + show "eventually (\i. norm (X i + Y i) < r) F" + proof (rule eventually_elim2) + fix i + assume *: "norm (X i) < r/2" "norm (Y i) < r/2" + have "norm (X i + Y i) \ norm (X i) + norm (Y i)" + by (rule norm_triangle_ineq) + also have "\ < r/2 + r/2" + using * by (rule add_strict_mono) + finally show "norm (X i + Y i) < r" + by simp + qed +qed + +lemma Zfun_minus: "Zfun X F \ Zfun (\i. - X i) F" +unfolding Zfun_def by simp + +lemma Zfun_diff: "\Zfun X F; Zfun Y F\ \ Zfun (\i. X i - Y i) F" +by (simp only: diff_minus Zfun_add Zfun_minus) + +lemma (in bounded_linear) Zfun: + assumes X: "Zfun X F" + shows "Zfun (\n. f (X n)) F" +proof - + obtain K where "\x. norm (f x) \ norm x * K" + using bounded by fast + with X show ?thesis + by (rule Zfun_imp_Zfun) +qed + +lemma (in bounded_bilinear) Zfun: + assumes X: "Zfun X F" + assumes Y: "Zfun Y F" + shows "Zfun (\n. X n ** Y n) F" +proof (rule ZfunI) + fix r::real assume r: "0 < r" + obtain K where K: "0 < K" + and norm_le: "\x y. norm (x ** y) \ norm x * norm y * K" + using pos_bounded by fast + from K have K': "0 < inverse K" + by (rule positive_imp_inverse_positive) + have "eventually (\i. norm (X i) < r) F" + using X r by (rule ZfunD) + moreover + have "eventually (\i. norm (Y i) < inverse K) F" + using Y K' by (rule ZfunD) + ultimately + show "eventually (\i. norm (X i ** Y i) < r) F" + proof (rule eventually_elim2) + fix i + assume *: "norm (X i) < r" "norm (Y i) < inverse K" + have "norm (X i ** Y i) \ norm (X i) * norm (Y i) * K" + by (rule norm_le) + also have "norm (X i) * norm (Y i) * K < r * inverse K * K" + by (intro mult_strict_right_mono mult_strict_mono' norm_ge_zero * K) + also from K have "r * inverse K * K = r" + by simp + finally show "norm (X i ** Y i) < r" . + qed +qed + +lemma (in bounded_bilinear) Zfun_left: + "Zfun X F \ Zfun (\n. X n ** a) F" +by (rule bounded_linear_left [THEN bounded_linear.Zfun]) + +lemma (in bounded_bilinear) Zfun_right: + "Zfun X F \ Zfun (\n. a ** X n) F" +by (rule bounded_linear_right [THEN bounded_linear.Zfun]) + +lemmas Zfun_mult = mult.Zfun +lemmas Zfun_mult_right = mult.Zfun_right +lemmas Zfun_mult_left = mult.Zfun_left + + +subsection{* Limits *} + +definition + tendsto :: "('a \ 'b::metric_space) \ 'b \ 'a filter \ bool" where + "tendsto f l net \ (\e>0. eventually (\x. dist (f x) l < e) net)" + +lemma tendstoI: + "(\e. 0 < e \ eventually (\x. dist (f x) l < e) net) + \ tendsto f l net" + unfolding tendsto_def by auto + +lemma tendstoD: + "tendsto f l net \ 0 < e \ eventually (\x. dist (f x) l < e) net" + unfolding tendsto_def by auto + +lemma tendsto_Zfun_iff: "tendsto (\n. X n) L F = Zfun (\n. X n - L) F" +by (simp only: tendsto_def Zfun_def dist_norm) + +lemma tendsto_const: "tendsto (\n. k) k F" +by (simp add: tendsto_def) + +lemma tendsto_norm: + fixes a :: "'a::real_normed_vector" + shows "tendsto X a F \ tendsto (\n. norm (X n)) (norm a) F" +apply (simp add: tendsto_def dist_norm, safe) +apply (drule_tac x="e" in spec, safe) +apply (erule eventually_elim1) +apply (erule order_le_less_trans [OF norm_triangle_ineq3]) +done + +lemma add_diff_add: + fixes a b c d :: "'a::ab_group_add" + shows "(a + c) - (b + d) = (a - b) + (c - d)" +by simp + +lemma minus_diff_minus: + fixes a b :: "'a::ab_group_add" + shows "(- a) - (- b) = - (a - b)" +by simp + +lemma tendsto_add: + fixes a b :: "'a::real_normed_vector" + shows "\tendsto X a F; tendsto Y b F\ \ tendsto (\n. X n + Y n) (a + b) F" +by (simp only: tendsto_Zfun_iff add_diff_add Zfun_add) + +lemma tendsto_minus: + fixes a :: "'a::real_normed_vector" + shows "tendsto X a F \ tendsto (\n. - X n) (- a) F" +by (simp only: tendsto_Zfun_iff minus_diff_minus Zfun_minus) + +lemma tendsto_minus_cancel: + fixes a :: "'a::real_normed_vector" + shows "tendsto (\n. - X n) (- a) F \ tendsto X a F" +by (drule tendsto_minus, simp) + +lemma tendsto_diff: + fixes a b :: "'a::real_normed_vector" + shows "\tendsto X a F; tendsto Y b F\ \ tendsto (\n. X n - Y n) (a - b) F" +by (simp add: diff_minus tendsto_add tendsto_minus) + +lemma (in bounded_linear) tendsto: + "tendsto X a F \ tendsto (\n. f (X n)) (f a) F" +by (simp only: tendsto_Zfun_iff diff [symmetric] Zfun) + +lemma (in bounded_bilinear) tendsto: + "\tendsto X a F; tendsto Y b F\ \ tendsto (\n. X n ** Y n) (a ** b) F" +by (simp only: tendsto_Zfun_iff prod_diff_prod + Zfun_add Zfun Zfun_left Zfun_right) + +end diff -r 738eb25e1dd8 -r 2261c8781f73 src/HOL/SEQ.thy --- a/src/HOL/SEQ.thy Sun May 31 11:27:19 2009 -0700 +++ b/src/HOL/SEQ.thy Sun May 31 21:59:33 2009 -0700 @@ -9,10 +9,14 @@ header {* Sequences and Convergence *} theory SEQ -imports RealVector RComplete +imports Limits begin definition + sequentially :: "nat filter" where + "sequentially = Abs_filter (\P. \N. \n\N. P n)" + +definition Zseq :: "[nat \ 'a::real_normed_vector] \ bool" where --{*Standard definition of sequence converging to zero*} [code del]: "Zseq X = (\r>0. \no. \n\no. norm (X n) < r)" @@ -67,6 +71,24 @@ [code del]: "Cauchy X = (\e>0. \M. \m \ M. \n \ M. dist (X m) (X n) < e)" +subsection {* Sequentially *} + +lemma eventually_sequentially: + "eventually P sequentially \ (\N. \n\N. P n)" +unfolding sequentially_def +apply (rule eventually_Abs_filter) +apply simp +apply (clarify, rule_tac x=N in exI, simp) +apply (clarify, rename_tac M N) +apply (rule_tac x="max M N" in exI, simp) +done + +lemma Zseq_conv_Zfun: "Zseq X \ Zfun X sequentially" +unfolding Zseq_def Zfun_def eventually_sequentially .. + +lemma LIMSEQ_conv_tendsto: "(X ----> L) \ tendsto X L sequentially" +unfolding LIMSEQ_def tendsto_def eventually_sequentially .. + subsection {* Bounded Sequences *} lemma BseqI': assumes K: "\n. norm (X n) \ K" shows "Bseq X" @@ -134,61 +156,14 @@ assumes X: "Zseq X" assumes Y: "\n. norm (Y n) \ norm (X n) * K" shows "Zseq (\n. Y n)" -proof (cases) - assume K: "0 < K" - show ?thesis - proof (rule ZseqI) - fix r::real assume "0 < r" - hence "0 < r / K" - using K by (rule divide_pos_pos) - then obtain N where "\n\N. norm (X n) < r / K" - using ZseqD [OF X] by fast - hence "\n\N. norm (X n) * K < r" - by (simp add: pos_less_divide_eq K) - hence "\n\N. norm (Y n) < r" - by (simp add: order_le_less_trans [OF Y]) - thus "\N. \n\N. norm (Y n) < r" .. - qed -next - assume "\ 0 < K" - hence K: "K \ 0" by (simp only: linorder_not_less) - { - fix n::nat - have "norm (Y n) \ norm (X n) * K" by (rule Y) - also have "\ \ norm (X n) * 0" - using K norm_ge_zero by (rule mult_left_mono) - finally have "norm (Y n) = 0" by simp - } - thus ?thesis by (simp add: Zseq_zero) -qed +using assms unfolding Zseq_conv_Zfun by (rule Zfun_imp_Zfun) lemma Zseq_le: "\Zseq Y; \n. norm (X n) \ norm (Y n)\ \ Zseq X" by (erule_tac K="1" in Zseq_imp_Zseq, simp) lemma Zseq_add: - assumes X: "Zseq X" - assumes Y: "Zseq Y" - shows "Zseq (\n. X n + Y n)" -proof (rule ZseqI) - fix r::real assume "0 < r" - hence r: "0 < r / 2" by simp - obtain M where M: "\n\M. norm (X n) < r/2" - using ZseqD [OF X r] by fast - obtain N where N: "\n\N. norm (Y n) < r/2" - using ZseqD [OF Y r] by fast - show "\N. \n\N. norm (X n + Y n) < r" - proof (intro exI allI impI) - fix n assume n: "max M N \ n" - have "norm (X n + Y n) \ norm (X n) + norm (Y n)" - by (rule norm_triangle_ineq) - also have "\ < r/2 + r/2" - proof (rule add_strict_mono) - from M n show "norm (X n) < r/2" by simp - from N n show "norm (Y n) < r/2" by simp - qed - finally show "norm (X n + Y n) < r" by simp - qed -qed + "Zseq X \ Zseq Y \ Zseq (\n. X n + Y n)" +unfolding Zseq_conv_Zfun by (rule Zfun_add) lemma Zseq_minus: "Zseq X \ Zseq (\n. - X n)" unfolding Zseq_def by simp @@ -197,44 +172,12 @@ by (simp only: diff_minus Zseq_add Zseq_minus) lemma (in bounded_linear) Zseq: - assumes X: "Zseq X" - shows "Zseq (\n. f (X n))" -proof - - obtain K where "\x. norm (f x) \ norm x * K" - using bounded by fast - with X show ?thesis - by (rule Zseq_imp_Zseq) -qed + "Zseq X \ Zseq (\n. f (X n))" +unfolding Zseq_conv_Zfun by (rule Zfun) lemma (in bounded_bilinear) Zseq: - assumes X: "Zseq X" - assumes Y: "Zseq Y" - shows "Zseq (\n. X n ** Y n)" -proof (rule ZseqI) - fix r::real assume r: "0 < r" - obtain K where K: "0 < K" - and norm_le: "\x y. norm (x ** y) \ norm x * norm y * K" - using pos_bounded by fast - from K have K': "0 < inverse K" - by (rule positive_imp_inverse_positive) - obtain M where M: "\n\M. norm (X n) < r" - using ZseqD [OF X r] by fast - obtain N where N: "\n\N. norm (Y n) < inverse K" - using ZseqD [OF Y K'] by fast - show "\N. \n\N. norm (X n ** Y n) < r" - proof (intro exI allI impI) - fix n assume n: "max M N \ n" - have "norm (X n ** Y n) \ norm (X n) * norm (Y n) * K" - by (rule norm_le) - also have "norm (X n) * norm (Y n) * K < r * inverse K * K" - proof (intro mult_strict_right_mono mult_strict_mono' norm_ge_zero K) - from M n show Xn: "norm (X n) < r" by simp - from N n show Yn: "norm (Y n) < inverse K" by simp - qed - also from K have "r * inverse K * K = r" by simp - finally show "norm (X n ** Y n) < r" . - qed -qed + "Zseq X \ Zseq Y \ Zseq (\n. X n ** Y n)" +unfolding Zseq_conv_Zfun by (rule Zfun) lemma (in bounded_bilinear) Zseq_prod_Bseq: assumes X: "Zseq X" @@ -341,12 +284,7 @@ lemma LIMSEQ_norm: fixes a :: "'a::real_normed_vector" shows "X ----> a \ (\n. norm (X n)) ----> norm a" -apply (simp add: LIMSEQ_iff, safe) -apply (drule_tac x="r" in spec, safe) -apply (rule_tac x="no" in exI, safe) -apply (drule_tac x="n" in spec, safe) -apply (erule order_le_less_trans [OF norm_triangle_ineq3]) -done +unfolding LIMSEQ_conv_tendsto by (rule tendsto_norm) lemma LIMSEQ_ignore_initial_segment: "f ----> a \ (\n. f (n + k)) ----> a" @@ -381,26 +319,15 @@ unfolding LIMSEQ_def by (metis div_le_dividend div_mult_self1_is_m le_trans nat_mult_commute) - -lemma add_diff_add: - fixes a b c d :: "'a::ab_group_add" - shows "(a + c) - (b + d) = (a - b) + (c - d)" -by simp - -lemma minus_diff_minus: - fixes a b :: "'a::ab_group_add" - shows "(- a) - (- b) = - (a - b)" -by simp - lemma LIMSEQ_add: fixes a b :: "'a::real_normed_vector" shows "\X ----> a; Y ----> b\ \ (\n. X n + Y n) ----> a + b" -by (simp only: LIMSEQ_Zseq_iff add_diff_add Zseq_add) +unfolding LIMSEQ_conv_tendsto by (rule tendsto_add) lemma LIMSEQ_minus: fixes a :: "'a::real_normed_vector" shows "X ----> a \ (\n. - X n) ----> - a" -by (simp only: LIMSEQ_Zseq_iff minus_diff_minus Zseq_minus) +unfolding LIMSEQ_conv_tendsto by (rule tendsto_minus) lemma LIMSEQ_minus_cancel: fixes a :: "'a::real_normed_vector" @@ -410,7 +337,7 @@ lemma LIMSEQ_diff: fixes a b :: "'a::real_normed_vector" shows "\X ----> a; Y ----> b\ \ (\n. X n - Y n) ----> a - b" -by (simp add: diff_minus LIMSEQ_add LIMSEQ_minus) +unfolding LIMSEQ_conv_tendsto by (rule tendsto_diff) lemma LIMSEQ_unique: "\X ----> a; X ----> b\ \ a = b" apply (rule ccontr) @@ -425,12 +352,11 @@ lemma (in bounded_linear) LIMSEQ: "X ----> a \ (\n. f (X n)) ----> f a" -by (simp only: LIMSEQ_Zseq_iff diff [symmetric] Zseq) +unfolding LIMSEQ_conv_tendsto by (rule tendsto) lemma (in bounded_bilinear) LIMSEQ: "\X ----> a; Y ----> b\ \ (\n. X n ** Y n) ----> a ** b" -by (simp only: LIMSEQ_Zseq_iff prod_diff_prod - Zseq_add Zseq Zseq_left Zseq_right) +unfolding LIMSEQ_conv_tendsto by (rule tendsto) lemma LIMSEQ_mult: fixes a b :: "'a::real_normed_algebra"