# HG changeset patch # User wenzelm # Date 1469981120 -7200 # Node ID 1826a90b9cbc2e5729895a318dfaf40e0f160d69 # Parent 7e0b0db5e9acf42301235e55803a76cd34acef80 simplified theory structure; diff -r 7e0b0db5e9ac -r 1826a90b9cbc src/HOL/Complex_Main.thy --- a/src/HOL/Complex_Main.thy Sun Jul 31 17:25:38 2016 +0200 +++ b/src/HOL/Complex_Main.thy Sun Jul 31 18:05:20 2016 +0200 @@ -6,7 +6,7 @@ Real Complex Transcendental - Taylor + MacLaurin Deriv begin diff -r 7e0b0db5e9ac -r 1826a90b9cbc src/HOL/Decision_Procs/Approximation.thy --- a/src/HOL/Decision_Procs/Approximation.thy Sun Jul 31 17:25:38 2016 +0200 +++ b/src/HOL/Decision_Procs/Approximation.thy Sun Jul 31 18:05:20 2016 +0200 @@ -4075,7 +4075,7 @@ case False have "lx \ real_of_float c" "real_of_float c \ ux" "lx \ xs!x" "xs!x \ ux" using Suc bnd_c \bounded_by xs vs\[THEN bounded_byE, OF \x < length vs\] bnd_x by auto - from Taylor.taylor[OF zero_less_Suc, of F, OF F0 DERIV[unfolded Suc] this False] + from taylor[OF zero_less_Suc, of F, OF F0 DERIV[unfolded Suc] this False] obtain t::real where t_bnd: "if xs ! x < c then xs ! x < t \ t < c else c < t \ t < xs ! x" and fl_eq: "interpret_floatarith f (xs[x := xs ! x]) = (\m = 0..MacLaurin Series\ +section \MacLaurin and Taylor Series\ theory MacLaurin imports Transcendental @@ -556,4 +556,118 @@ done qed + +section \Taylor series\ + +text \ + We use MacLaurin and the translation of the expansion point \c\ to \0\ + to prove Taylor's theorem. +\ + +lemma taylor_up: + assumes INIT: "n > 0" "diff 0 = f" + and DERIV: "\m t. m < n \ a \ t \ t \ b \ DERIV (diff m) t :> (diff (Suc m) t)" + and INTERV: "a \ c" "c < b" + shows "\t::real. c < t \ t < b \ + f b = (\m 0" "(\m x. diff m (x + c)) 0 = (\x. f (x + c))" + by auto + moreover + have "\m t. m < n \ 0 \ t \ t \ b - c \ DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c)" + proof (intro strip) + fix m t + assume "m < n \ 0 \ t \ t \ b - c" + with DERIV and INTERV have "DERIV (diff m) (t + c) :> diff (Suc m) (t + c)" + by auto + moreover from DERIV_ident and DERIV_const have "DERIV (\x. x + c) t :> 1 + 0" + by (rule DERIV_add) + ultimately have "DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c) * (1 + 0)" + by (rule DERIV_chain2) + then show "DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c)" + by simp + qed + ultimately obtain x where + "0 < x \ x < b - c \ + f (b - c + c) = + (\m x + c < b \ f b = + (\m 0" "diff 0 = f" + and DERIV: "(\m t. m < n \ a \ t \ t \ b \ DERIV (diff m) t :> diff (Suc m) t)" + and INTERV: "a < c" "c \ b" + shows "\t. a < t \ t < c \ + f a = (\m 0" "(\m x. diff m (x + c)) 0 = (\x. f (x + c))" + by auto + moreover + have "\m t. m < n \ a - c \ t \ t \ 0 \ DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c)" + proof (rule allI impI)+ + fix m t + assume "m < n \ a - c \ t \ t \ 0" + with DERIV and INTERV have "DERIV (diff m) (t + c) :> diff (Suc m) (t + c)" + by auto + moreover from DERIV_ident and DERIV_const have "DERIV (\x. x + c) t :> 1 + 0" + by (rule DERIV_add) + ultimately have "DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c) * (1 + 0)" + by (rule DERIV_chain2) + then show "DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c)" + by simp + qed + ultimately obtain x where + "a - c < x \ x < 0 \ + f (a - c + c) = + (\m x + c < c \ + f a = (\m 0" "diff 0 = f" + and DERIV: "\m t. m < n \ a \ t \ t \ b \ DERIV (diff m) t :> diff (Suc m) t" + and INTERV: "a \ c " "c \ b" "a \ x" "x \ b" "x \ c" + shows "\t. + (if x < c then x < t \ t < c else c < t \ t < x) \ + f x = (\mm t. m < n \ x \ t \ t \ b \ DERIV (diff m) t :> diff (Suc m) t" + using DERIV and INTERV by fastforce + moreover note True + moreover from INTERV have "c \ b" + by simp + ultimately have "\t>x. t < c \ f x = + (\mm t. m < n \ a \ t \ t \ x \ DERIV (diff m) t :> diff (Suc m) t" + using DERIV and INTERV by fastforce + moreover from INTERV have "a \ c" + by arith + moreover from False and INTERV have "c < x" + by arith + ultimately have "\t>c. t < x \ f x = + (\mTaylor series\ - -theory Taylor -imports MacLaurin -begin - -text \ - We use MacLaurin and the translation of the expansion point \c\ to \0\ - to prove Taylor's theorem. -\ - -lemma taylor_up: - assumes INIT: "n > 0" "diff 0 = f" - and DERIV: "\m t. m < n \ a \ t \ t \ b \ DERIV (diff m) t :> (diff (Suc m) t)" - and INTERV: "a \ c" "c < b" - shows "\t::real. c < t \ t < b \ - f b = (\m 0" "(\m x. diff m (x + c)) 0 = (\x. f (x + c))" - by auto - moreover - have "\m t. m < n \ 0 \ t \ t \ b - c \ DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c)" - proof (intro strip) - fix m t - assume "m < n \ 0 \ t \ t \ b - c" - with DERIV and INTERV have "DERIV (diff m) (t + c) :> diff (Suc m) (t + c)" - by auto - moreover from DERIV_ident and DERIV_const have "DERIV (\x. x + c) t :> 1 + 0" - by (rule DERIV_add) - ultimately have "DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c) * (1 + 0)" - by (rule DERIV_chain2) - then show "DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c)" - by simp - qed - ultimately obtain x where - "0 < x \ x < b - c \ - f (b - c + c) = - (\m x + c < b \ f b = - (\m 0" "diff 0 = f" - and DERIV: "(\m t. m < n \ a \ t \ t \ b \ DERIV (diff m) t :> diff (Suc m) t)" - and INTERV: "a < c" "c \ b" - shows "\t. a < t \ t < c \ - f a = (\m 0" "(\m x. diff m (x + c)) 0 = (\x. f (x + c))" - by auto - moreover - have "\m t. m < n \ a - c \ t \ t \ 0 \ DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c)" - proof (rule allI impI)+ - fix m t - assume "m < n \ a - c \ t \ t \ 0" - with DERIV and INTERV have "DERIV (diff m) (t + c) :> diff (Suc m) (t + c)" - by auto - moreover from DERIV_ident and DERIV_const have "DERIV (\x. x + c) t :> 1 + 0" - by (rule DERIV_add) - ultimately have "DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c) * (1 + 0)" - by (rule DERIV_chain2) - then show "DERIV (\x. diff m (x + c)) t :> diff (Suc m) (t + c)" - by simp - qed - ultimately obtain x where - "a - c < x \ x < 0 \ - f (a - c + c) = - (\m x + c < c \ - f a = (\m 0" "diff 0 = f" - and DERIV: "\m t. m < n \ a \ t \ t \ b \ DERIV (diff m) t :> diff (Suc m) t" - and INTERV: "a \ c " "c \ b" "a \ x" "x \ b" "x \ c" - shows "\t. - (if x < c then x < t \ t < c else c < t \ t < x) \ - f x = (\mm t. m < n \ x \ t \ t \ b \ DERIV (diff m) t :> diff (Suc m) t" - using DERIV and INTERV by fastforce - moreover note True - moreover from INTERV have "c \ b" - by simp - ultimately have "\t>x. t < c \ f x = - (\mm t. m < n \ a \ t \ t \ x \ DERIV (diff m) t :> diff (Suc m) t" - using DERIV and INTERV by fastforce - moreover from INTERV have "a \ c" - by arith - moreover from False and INTERV have "c < x" - by arith - ultimately have "\t>c. t < x \ f x = - (\m