| author | wenzelm | 
| Wed, 20 Feb 2008 23:24:38 +0100 | |
| changeset 26104 | 200b4e401e65 | 
| parent 25162 | ad4d5365d9d8 | 
| permissions | -rw-r--r-- | 
| 17634 | 1 | (* Title: HOL/Hyperreal/Taylor.thy | 
| 2 | ID: $Id$ | |
| 3 | Author: Lukas Bulwahn, Bernhard Haeupler, Technische Universitaet Muenchen | |
| 4 | *) | |
| 5 | ||
| 6 | header {* Taylor series *}
 | |
| 7 | ||
| 8 | theory Taylor | |
| 9 | imports MacLaurin | |
| 10 | begin | |
| 11 | ||
| 12 | text {*
 | |
| 13 | We use MacLaurin and the translation of the expansion point @{text c} to @{text 0}
 | |
| 14 | to prove Taylor's theorem. | |
| 15 | *} | |
| 16 | ||
| 17 | lemma taylor_up: | |
| 25162 | 18 | assumes INIT: "n>0" "diff 0 = f" | 
| 17634 | 19 | and DERIV: "(\<forall> m t. m < n & a \<le> t & t \<le> b \<longrightarrow> DERIV (diff m) t :> (diff (Suc m) t))" | 
| 20 | and INTERV: "a \<le> c" "c < b" | |
| 21 | shows "\<exists> t. c < t & t < b & | |
| 22 |     f b = setsum (%m. (diff m c / real (fact m)) * (b - c)^m) {0..<n} +
 | |
| 23 | (diff n t / real (fact n)) * (b - c)^n" | |
| 24 | proof - | |
| 25 | from INTERV have "0 < b-c" by arith | |
| 26 | moreover | |
| 25162 | 27 | from INIT have "n>0" "((\<lambda>m x. diff m (x + c)) 0) = (\<lambda>x. f (x + c))" by auto | 
| 17634 | 28 | moreover | 
| 25162 | 29 | have "ALL m t. m < n & 0 <= t & t <= b - c --> DERIV (%x. diff m (x + c)) t :> diff (Suc m) (t + c)" | 
| 17634 | 30 | proof (intro strip) | 
| 31 | fix m t | |
| 32 | assume "m < n & 0 <= t & t <= b - c" | |
| 33 | with DERIV and INTERV have "DERIV (diff m) (t + c) :> diff (Suc m) (t + c)" by auto | |
| 34 | moreover | |
| 23069 
cdfff0241c12
rename lemmas LIM_ident, isCont_ident, DERIV_ident
 huffman parents: 
17634diff
changeset | 35 | from DERIV_ident and DERIV_const have "DERIV (%x. x + c) t :> 1+0" by (rule DERIV_add) | 
| 17634 | 36 | ultimately have "DERIV (%x. diff m (x + c)) t :> diff (Suc m) (t + c) * (1+0)" | 
| 37 | by (rule DERIV_chain2) | |
| 38 | thus "DERIV (%x. diff m (x + c)) t :> diff (Suc m) (t + c)" by simp | |
| 39 | qed | |
| 40 | ultimately | |
| 41 | have EX:"EX t>0. t < b - c & | |
| 42 | f (b - c + c) = (SUM m = 0..<n. diff m (0 + c) / real (fact m) * (b - c) ^ m) + | |
| 43 | diff n (t + c) / real (fact n) * (b - c) ^ n" | |
| 44 | by (rule Maclaurin) | |
| 45 | show ?thesis | |
| 46 | proof - | |
| 47 | from EX obtain x where | |
| 48 | X: "0 < x & x < b - c & | |
| 49 | f (b - c + c) = (\<Sum>m = 0..<n. diff m (0 + c) / real (fact m) * (b - c) ^ m) + | |
| 50 | diff n (x + c) / real (fact n) * (b - c) ^ n" .. | |
| 51 | let ?H = "x + c" | |
| 52 | from X have "c<?H & ?H<b \<and> f b = (\<Sum>m = 0..<n. diff m c / real (fact m) * (b - c) ^ m) + | |
| 53 | diff n ?H / real (fact n) * (b - c) ^ n" | |
| 54 | by fastsimp | |
| 55 | thus ?thesis by fastsimp | |
| 56 | qed | |
| 57 | qed | |
| 58 | ||
| 59 | lemma taylor_down: | |
| 25162 | 60 | assumes INIT: "n>0" "diff 0 = f" | 
| 17634 | 61 | and DERIV: "(\<forall> m t. m < n & a \<le> t & t \<le> b \<longrightarrow> DERIV (diff m) t :> (diff (Suc m) t))" | 
| 62 | and INTERV: "a < c" "c \<le> b" | |
| 63 | shows "\<exists> t. a < t & t < c & | |
| 64 |     f a = setsum (% m. (diff m c / real (fact m)) * (a - c)^m) {0..<n} +
 | |
| 65 | (diff n t / real (fact n)) * (a - c)^n" | |
| 66 | proof - | |
| 67 | from INTERV have "a-c < 0" by arith | |
| 68 | moreover | |
| 25162 | 69 | from INIT have "n>0" "((\<lambda>m x. diff m (x + c)) 0) = (\<lambda>x. f (x + c))" by auto | 
| 17634 | 70 | moreover | 
| 71 | have "ALL m t. m < n & a-c <= t & t <= 0 --> DERIV (%x. diff m (x + c)) t :> diff (Suc m) (t + c)" | |
| 72 | proof (rule allI impI)+ | |
| 73 | fix m t | |
| 74 | assume "m < n & a-c <= t & t <= 0" | |
| 75 | with DERIV and INTERV have "DERIV (diff m) (t + c) :> diff (Suc m) (t + c)" by auto | |
| 76 | moreover | |
| 23069 
cdfff0241c12
rename lemmas LIM_ident, isCont_ident, DERIV_ident
 huffman parents: 
17634diff
changeset | 77 | from DERIV_ident and DERIV_const have "DERIV (%x. x + c) t :> 1+0" by (rule DERIV_add) | 
| 17634 | 78 | ultimately have "DERIV (%x. diff m (x + c)) t :> diff (Suc m) (t + c) * (1+0)" by (rule DERIV_chain2) | 
| 79 | thus "DERIV (%x. diff m (x + c)) t :> diff (Suc m) (t + c)" by simp | |
| 80 | qed | |
| 81 | ultimately | |
| 82 | have EX: "EX t>a - c. t < 0 & | |
| 83 | f (a - c + c) = (SUM m = 0..<n. diff m (0 + c) / real (fact m) * (a - c) ^ m) + | |
| 84 | diff n (t + c) / real (fact n) * (a - c) ^ n" | |
| 85 | by (rule Maclaurin_minus) | |
| 86 | show ?thesis | |
| 87 | proof - | |
| 88 | from EX obtain x where X: "a - c < x & x < 0 & | |
| 89 | f (a - c + c) = (SUM m = 0..<n. diff m (0 + c) / real (fact m) * (a - c) ^ m) + | |
| 90 | diff n (x + c) / real (fact n) * (a - c) ^ n" .. | |
| 91 | let ?H = "x + c" | |
| 92 | from X have "a<?H & ?H<c \<and> f a = (\<Sum>m = 0..<n. diff m c / real (fact m) * (a - c) ^ m) + | |
| 93 | diff n ?H / real (fact n) * (a - c) ^ n" | |
| 94 | by fastsimp | |
| 95 | thus ?thesis by fastsimp | |
| 96 | qed | |
| 97 | qed | |
| 98 | ||
| 99 | lemma taylor: | |
| 25162 | 100 | assumes INIT: "n>0" "diff 0 = f" | 
| 17634 | 101 | and DERIV: "(\<forall> m t. m < n & a \<le> t & t \<le> b \<longrightarrow> DERIV (diff m) t :> (diff (Suc m) t))" | 
| 102 | and INTERV: "a \<le> c " "c \<le> b" "a \<le> x" "x \<le> b" "x \<noteq> c" | |
| 103 | shows "\<exists> t. (if x<c then (x < t & t < c) else (c < t & t < x)) & | |
| 104 |     f x = setsum (% m. (diff m c / real (fact m)) * (x - c)^m) {0..<n} +
 | |
| 105 | (diff n t / real (fact n)) * (x - c)^n" | |
| 106 | proof (cases "x<c") | |
| 107 | case True | |
| 108 | note INIT | |
| 109 | moreover from DERIV and INTERV | |
| 110 | have "\<forall>m t. m < n \<and> x \<le> t \<and> t \<le> b \<longrightarrow> DERIV (diff m) t :> diff (Suc m) t" | |
| 111 | by fastsimp | |
| 112 | moreover note True | |
| 113 | moreover from INTERV have "c \<le> b" by simp | |
| 114 | ultimately have EX: "\<exists>t>x. t < c \<and> f x = | |
| 115 | (\<Sum>m = 0..<n. diff m c / real (fact m) * (x - c) ^ m) + | |
| 116 | diff n t / real (fact n) * (x - c) ^ n" | |
| 117 | by (rule taylor_down) | |
| 118 | with True show ?thesis by simp | |
| 119 | next | |
| 120 | case False | |
| 121 | note INIT | |
| 122 | moreover from DERIV and INTERV | |
| 123 | have "\<forall>m t. m < n \<and> a \<le> t \<and> t \<le> x \<longrightarrow> DERIV (diff m) t :> diff (Suc m) t" | |
| 124 | by fastsimp | |
| 125 | moreover from INTERV have "a \<le> c" by arith | |
| 126 | moreover from False and INTERV have "c < x" by arith | |
| 127 | ultimately have EX: "\<exists>t>c. t < x \<and> f x = | |
| 128 | (\<Sum>m = 0..<n. diff m c / real (fact m) * (x - c) ^ m) + | |
| 129 | diff n t / real (fact n) * (x - c) ^ n" | |
| 130 | by (rule taylor_up) | |
| 131 | with False show ?thesis by simp | |
| 132 | qed | |
| 133 | ||
| 134 | end |