| author | wenzelm | 
| Sat, 13 Aug 2022 11:22:51 +0200 | |
| changeset 75835 | 5c53e24d3dc2 | 
| parent 71633 | 07bec530f02e | 
| child 77221 | 0cdb384bf56a | 
| permissions | -rw-r--r-- | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | (* | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | Title: HOL/Analysis/FPS_Convergence.thy | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3 | Author: Manuel Eberl, TU München | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 5 | Connection of formal power series and actual convergent power series on Banach spaces | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 6 | (most notably the complex numbers). | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 7 | *) | 
| 69517 | 8 | section \<open>Convergence of Formal Power Series\<close> | 
| 9 | ||
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | theory FPS_Convergence | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | imports | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | Generalised_Binomial_Theorem | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | "HOL-Computational_Algebra.Formal_Power_Series" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | begin | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 16 | text \<open> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 17 | In this theory, we will connect formal power series (which are algebraic objects) with analytic | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 18 | functions. This will become more important in complex analysis, and indeed some of the less | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 19 | trivial results will only be proven there. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 20 | \<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 21 | |
| 70136 | 22 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Balls with extended real radius\<close> | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 23 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 24 | (* TODO: This should probably go somewhere else *) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 25 | |
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 26 | text \<open> | 
| 69597 | 27 | The following is a variant of \<^const>\<open>ball\<close> that also allows an infinite radius. | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | \<close> | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 29 | definition eball :: "'a :: metric_space \<Rightarrow> ereal \<Rightarrow> 'a set" where | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 30 |   "eball z r = {z'. ereal (dist z z') < r}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 32 | lemma in_eball_iff [simp]: "z \<in> eball z0 r \<longleftrightarrow> ereal (dist z0 z) < r" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 33 | by (simp add: eball_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | lemma eball_ereal [simp]: "eball z (ereal r) = ball z r" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 36 | by auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 37 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 | lemma eball_inf [simp]: "eball z \<infinity> = UNIV" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | by auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 40 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 41 | lemma eball_empty [simp]: "r \<le> 0 \<Longrightarrow> eball z r = {}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 | proof safe | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 | fix x assume "r \<le> 0" "x \<in> eball z r" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 44 | hence "dist z x < r" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 45 | also have "\<dots> \<le> ereal 0" using \<open>r \<le> 0\<close> by (simp add: zero_ereal_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 |   finally show "x \<in> {}" by simp
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 48 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 49 | lemma eball_conv_UNION_balls: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 50 |   "eball z r = (\<Union>r'\<in>{r'. ereal r' < r}. ball z r')"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 51 | by (cases r) (use dense gt_ex in force)+ | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 | lemma eball_mono: "r \<le> r' \<Longrightarrow> eball z r \<le> eball z r'" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 54 | by auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 55 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 56 | lemma ball_eball_mono: "ereal r \<le> r' \<Longrightarrow> ball z r \<le> eball z r'" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 57 | using eball_mono[of "ereal r" r'] by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 58 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 59 | lemma open_eball [simp, intro]: "open (eball z r)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 60 | by (cases r) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 | subsection \<open>Basic properties of convergent power series\<close> | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 64 | |
| 70136 | 65 | definition\<^marker>\<open>tag important\<close> fps_conv_radius :: "'a :: {banach, real_normed_div_algebra} fps \<Rightarrow> ereal" where
 | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 66 | "fps_conv_radius f = conv_radius (fps_nth f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 67 | |
| 70136 | 68 | definition\<^marker>\<open>tag important\<close> eval_fps :: "'a :: {banach, real_normed_div_algebra} fps \<Rightarrow> 'a \<Rightarrow> 'a" where
 | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 69 | "eval_fps f z = (\<Sum>n. fps_nth f n * z ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 71 | lemma norm_summable_fps: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 72 |   fixes f :: "'a :: {banach, real_normed_div_algebra} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 73 | shows "norm z < fps_conv_radius f \<Longrightarrow> summable (\<lambda>n. norm (fps_nth f n * z ^ n))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 74 | by (rule abs_summable_in_conv_radius) (simp_all add: fps_conv_radius_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 75 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 76 | lemma summable_fps: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 77 |   fixes f :: "'a :: {banach, real_normed_div_algebra} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 78 | shows "norm z < fps_conv_radius f \<Longrightarrow> summable (\<lambda>n. fps_nth f n * z ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 79 | by (rule summable_in_conv_radius) (simp_all add: fps_conv_radius_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 80 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 81 | theorem sums_eval_fps: | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 82 |   fixes f :: "'a :: {banach, real_normed_div_algebra} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 83 | assumes "norm z < fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | shows "(\<lambda>n. fps_nth f n * z ^ n) sums eval_fps f z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | using assms unfolding eval_fps_def fps_conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 86 | by (intro summable_sums summable_in_conv_radius) simp_all | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 87 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 88 | lemma continuous_on_eval_fps: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 89 |   fixes f :: "'a :: {banach, real_normed_div_algebra} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 90 | shows "continuous_on (eball 0 (fps_conv_radius f)) (eval_fps f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 91 | proof (subst continuous_on_eq_continuous_at [OF open_eball], safe) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 92 | fix x :: 'a assume x: "x \<in> eball 0 (fps_conv_radius f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 93 | define r where "r = (if fps_conv_radius f = \<infinity> then norm x + 1 else | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 94 | (norm x + real_of_ereal (fps_conv_radius f)) / 2)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 95 | have r: "norm x < r \<and> ereal r < fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 96 | using x by (cases "fps_conv_radius f") | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 97 | (auto simp: r_def eball_def split: if_splits) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 98 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 99 | have "continuous_on (cball 0 r) (\<lambda>x. \<Sum>i. fps_nth f i * (x - 0) ^ i)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | by (rule powser_continuous_suminf) (insert r, auto simp: fps_conv_radius_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 | hence "continuous_on (cball 0 r) (eval_fps f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 | by (simp add: eval_fps_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 | thus "isCont (eval_fps f) x" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 | by (rule continuous_on_interior) (use r in auto) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | lemma continuous_on_eval_fps' [continuous_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | assumes "continuous_on A g" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 | assumes "g ` A \<subseteq> eball 0 (fps_conv_radius f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | shows "continuous_on A (\<lambda>x. eval_fps f (g x))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | using continuous_on_compose2[OF continuous_on_eval_fps assms] . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | lemma has_field_derivative_powser: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 114 |   fixes z :: "'a :: {banach, real_normed_field}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | assumes "ereal (norm z) < conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 | shows "((\<lambda>z. \<Sum>n. f n * z ^ n) has_field_derivative (\<Sum>n. diffs f n * z ^ n)) (at z within A)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 117 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 | define K where "K = (if conv_radius f = \<infinity> then norm z + 1 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | else (norm z + real_of_ereal (conv_radius f)) / 2)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 120 | have K: "norm z < K \<and> ereal K < conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 | using assms by (cases "conv_radius f") (auto simp: K_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 | have "0 \<le> norm z" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 | also from K have "\<dots> < K" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 | finally have K_pos: "K > 0" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 125 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | have "summable (\<lambda>n. f n * of_real K ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 127 | using K and K_pos by (intro summable_in_conv_radius) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 128 | moreover from K and K_pos have "norm z < norm (of_real K :: 'a)" by auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 129 | ultimately show ?thesis | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | by (rule has_field_derivative_at_within [OF termdiffs_strong]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | lemma has_field_derivative_eval_fps: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 |   fixes z :: "'a :: {banach, real_normed_field}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | assumes "norm z < fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | shows "(eval_fps f has_field_derivative eval_fps (fps_deriv f) z) (at z within A)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | have "(eval_fps f has_field_derivative eval_fps (Abs_fps (diffs (fps_nth f))) z) (at z within A)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | using assms unfolding eval_fps_def fps_nth_Abs_fps fps_conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | by (intro has_field_derivative_powser) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | also have "Abs_fps (diffs (fps_nth f)) = fps_deriv f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | by (simp add: fps_eq_iff diffs_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | finally show ?thesis . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 144 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 145 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 146 | lemma holomorphic_on_eval_fps [holomorphic_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 147 |   fixes z :: "'a :: {banach, real_normed_field}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | assumes "A \<subseteq> eball 0 (fps_conv_radius f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 149 | shows "eval_fps f holomorphic_on A" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 150 | proof (rule holomorphic_on_subset [OF _ assms]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 | show "eval_fps f holomorphic_on eball 0 (fps_conv_radius f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | proof (subst holomorphic_on_open [OF open_eball], safe, goal_cases) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | case (1 x) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | thus ?case | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | by (intro exI[of _ "eval_fps (fps_deriv f) x"]) (auto intro: has_field_derivative_eval_fps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 157 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 158 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | lemma analytic_on_eval_fps: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 160 |   fixes z :: "'a :: {banach, real_normed_field}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 | assumes "A \<subseteq> eball 0 (fps_conv_radius f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 | shows "eval_fps f analytic_on A" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | proof (rule analytic_on_subset [OF _ assms]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 164 | show "eval_fps f analytic_on eball 0 (fps_conv_radius f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 | using holomorphic_on_eval_fps[of "eball 0 (fps_conv_radius f)"] | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 | by (subst analytic_on_open) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | |
| 68721 | 169 | lemma continuous_eval_fps [continuous_intros]: | 
| 170 |   fixes z :: "'a::{real_normed_field,banach}"
 | |
| 171 | assumes "norm z < fps_conv_radius F" | |
| 172 | shows "continuous (at z within A) (eval_fps F)" | |
| 173 | proof - | |
| 174 | from ereal_dense2[OF assms] obtain K :: real where K: "norm z < K" "K < fps_conv_radius F" | |
| 175 | by auto | |
| 176 | have "0 \<le> norm z" by simp | |
| 177 | also have "norm z < K" by fact | |
| 178 | finally have "K > 0" . | |
| 179 | from K and \<open>K > 0\<close> have "summable (\<lambda>n. fps_nth F n * of_real K ^ n)" | |
| 180 | by (intro summable_fps) auto | |
| 181 | from this have "isCont (eval_fps F) z" unfolding eval_fps_def | |
| 182 | by (rule isCont_powser) (use K in auto) | |
| 183 | thus "continuous (at z within A) (eval_fps F)" | |
| 184 | by (simp add: continuous_at_imp_continuous_within) | |
| 185 | qed | |
| 186 | ||
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 187 | |
| 70136 | 188 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Lower bounds on radius of convergence\<close> | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 189 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 190 | lemma fps_conv_radius_deriv: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 191 |   fixes f :: "'a :: {banach, real_normed_field} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 192 | shows "fps_conv_radius (fps_deriv f) \<ge> fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 193 | unfolding fps_conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 194 | proof (rule conv_radius_geI_ex) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 195 | fix r :: real assume r: "r > 0" "ereal r < conv_radius (fps_nth f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 196 | define K where "K = (if conv_radius (fps_nth f) = \<infinity> then r + 1 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 197 | else (real_of_ereal (conv_radius (fps_nth f)) + r) / 2)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 198 | have K: "r < K \<and> ereal K < conv_radius (fps_nth f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 199 | using r by (cases "conv_radius (fps_nth f)") (auto simp: K_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 | have "summable (\<lambda>n. diffs (fps_nth f) n * of_real r ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 201 | proof (rule termdiff_converges) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 | fix x :: 'a assume "norm x < K" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | hence "ereal (norm x) < ereal K" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 204 | also have "\<dots> < conv_radius (fps_nth f)" using K by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 | finally show "summable (\<lambda>n. fps_nth f n * x ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 206 | by (intro summable_in_conv_radius) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 207 | qed (insert K r, auto) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 208 | also have "\<dots> = (\<lambda>n. fps_nth (fps_deriv f) n * of_real r ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 | by (simp add: fps_deriv_def diffs_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 210 | finally show "\<exists>z::'a. norm z = r \<and> summable (\<lambda>n. fps_nth (fps_deriv f) n * z ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 211 | using r by (intro exI[of _ "of_real r"]) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 212 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 213 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | lemma eval_fps_at_0: "eval_fps f 0 = fps_nth f 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | by (simp add: eval_fps_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 216 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | lemma fps_conv_radius_norm [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | "fps_conv_radius (Abs_fps (\<lambda>n. norm (fps_nth f n))) = fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | by (simp add: fps_conv_radius_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 | lemma fps_conv_radius_const [simp]: "fps_conv_radius (fps_const c) = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | have "fps_conv_radius (fps_const c) = conv_radius (\<lambda>_. 0 :: 'a)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 | unfolding fps_conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 | by (intro conv_radius_cong eventually_mono[OF eventually_gt_at_top[of 0]]) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 | thus ?thesis by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | lemma fps_conv_radius_0 [simp]: "fps_conv_radius 0 = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 230 | by (simp only: fps_const_0_eq_0 [symmetric] fps_conv_radius_const) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 | lemma fps_conv_radius_1 [simp]: "fps_conv_radius 1 = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 | by (simp only: fps_const_1_eq_1 [symmetric] fps_conv_radius_const) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 234 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 235 | lemma fps_conv_radius_numeral [simp]: "fps_conv_radius (numeral n) = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 236 | by (simp add: numeral_fps_const) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 237 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 238 | lemma fps_conv_radius_fps_X_power [simp]: "fps_conv_radius (fps_X ^ n) = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 239 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 240 | have "fps_conv_radius (fps_X ^ n :: 'a fps) = conv_radius (\<lambda>_. 0 :: 'a)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 | unfolding fps_conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 242 | by (intro conv_radius_cong eventually_mono[OF eventually_gt_at_top[of n]]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 243 | (auto simp: fps_X_power_iff) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 | thus ?thesis by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 245 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 246 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 247 | lemma fps_conv_radius_fps_X [simp]: "fps_conv_radius fps_X = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 248 | using fps_conv_radius_fps_X_power[of 1] by (simp only: power_one_right) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 249 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 250 | lemma fps_conv_radius_shift [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 251 | "fps_conv_radius (fps_shift n f) = fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 252 | by (simp add: fps_conv_radius_def fps_shift_def conv_radius_shift) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 254 | lemma fps_conv_radius_cmult_left: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 255 | "c \<noteq> 0 \<Longrightarrow> fps_conv_radius (fps_const c * f) = fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | unfolding fps_conv_radius_def by (simp add: conv_radius_cmult_left) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | lemma fps_conv_radius_cmult_right: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | "c \<noteq> 0 \<Longrightarrow> fps_conv_radius (f * fps_const c) = fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 | unfolding fps_conv_radius_def by (simp add: conv_radius_cmult_right) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 | lemma fps_conv_radius_uminus [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 | "fps_conv_radius (-f) = fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 264 | using fps_conv_radius_cmult_left[of "-1" f] | 
| 68403 | 265 | by (simp flip: fps_const_neg) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 266 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 267 | lemma fps_conv_radius_add: "fps_conv_radius (f + g) \<ge> min (fps_conv_radius f) (fps_conv_radius g)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 268 | unfolding fps_conv_radius_def using conv_radius_add_ge[of "fps_nth f" "fps_nth g"] | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 269 | by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 271 | lemma fps_conv_radius_diff: "fps_conv_radius (f - g) \<ge> min (fps_conv_radius f) (fps_conv_radius g)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 272 | using fps_conv_radius_add[of f "-g"] by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 273 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 274 | lemma fps_conv_radius_mult: "fps_conv_radius (f * g) \<ge> min (fps_conv_radius f) (fps_conv_radius g)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 275 | using conv_radius_mult_ge[of "fps_nth f" "fps_nth g"] | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 276 | by (simp add: fps_mult_nth fps_conv_radius_def atLeast0AtMost) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 277 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 278 | lemma fps_conv_radius_power: "fps_conv_radius (f ^ n) \<ge> fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 279 | proof (induction n) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 280 | case (Suc n) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 281 | hence "fps_conv_radius f \<le> min (fps_conv_radius f) (fps_conv_radius (f ^ n))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 282 | by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 283 | also have "\<dots> \<le> fps_conv_radius (f * f ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 284 | by (rule fps_conv_radius_mult) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 285 | finally show ?case by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 286 | qed simp_all | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 287 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 288 | context | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 289 | begin | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 290 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 291 | lemma natfun_inverse_bound: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 292 |   fixes f :: "'a :: {real_normed_field} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 293 | assumes "fps_nth f 0 = 1" and "\<delta> > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 294 | and summable: "summable (\<lambda>n. norm (fps_nth f (Suc n)) * \<delta> ^ Suc n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | and le: "(\<Sum>n. norm (fps_nth f (Suc n)) * \<delta> ^ Suc n) \<le> 1" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | shows "norm (natfun_inverse f n) \<le> inverse (\<delta> ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 297 | proof (induction n rule: less_induct) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 298 | case (less m) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 299 | show ?case | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 300 | proof (cases m) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 | case 0 | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 302 | thus ?thesis using assms by (simp add: field_split_simps norm_inverse norm_divide) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 303 | next | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 304 | case [simp]: (Suc n) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 305 | have "norm (natfun_inverse f (Suc n)) = | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 306 | norm (\<Sum>i = Suc 0..Suc n. fps_nth f i * natfun_inverse f (Suc n - i))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 307 | (is "_ = norm ?S") using assms | 
| 70113 
c8deb8ba6d05
Fixing the main Homology theory; also moving a lot of sum/prod lemmas into their generic context
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 308 | by (simp add: field_simps norm_mult norm_divide del: sum.cl_ivl_Suc) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 309 | also have "norm ?S \<le> (\<Sum>i = Suc 0..Suc n. norm (fps_nth f i * natfun_inverse f (Suc n - i)))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 310 | by (rule norm_sum) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 311 | also have "\<dots> \<le> (\<Sum>i = Suc 0..Suc n. norm (fps_nth f i) / \<delta> ^ (Suc n - i))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 312 | proof (intro sum_mono, goal_cases) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 313 | case (1 i) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 314 | have "norm (fps_nth f i * natfun_inverse f (Suc n - i)) = | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 315 | norm (fps_nth f i) * norm (natfun_inverse f (Suc n - i))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 316 | by (simp add: norm_mult) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 317 | also have "\<dots> \<le> norm (fps_nth f i) * inverse (\<delta> ^ (Suc n - i))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 318 | using 1 by (intro mult_left_mono less.IH) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 319 | also have "\<dots> = norm (fps_nth f i) / \<delta> ^ (Suc n - i)" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 320 | by (simp add: field_split_simps) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 321 | finally show ?case . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 322 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 323 | also have "\<dots> = (\<Sum>i = Suc 0..Suc n. norm (fps_nth f i) * \<delta> ^ i) / \<delta> ^ Suc n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 324 | by (subst sum_divide_distrib, rule sum.cong) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 325 | (insert \<open>\<delta> > 0\<close>, auto simp: field_simps power_diff) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 326 | also have "(\<Sum>i = Suc 0..Suc n. norm (fps_nth f i) * \<delta> ^ i) = | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 327 | (\<Sum>i=0..n. norm (fps_nth f (Suc i)) * \<delta> ^ (Suc i))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 328 | by (subst sum.atLeast_Suc_atMost_Suc_shift) simp_all | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 329 |     also have "{0..n} = {..<Suc n}" by auto
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 330 | also have "(\<Sum>i< Suc n. norm (fps_nth f (Suc i)) * \<delta> ^ (Suc i)) \<le> | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 331 | (\<Sum>n. norm (fps_nth f (Suc n)) * \<delta> ^ (Suc n))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 332 | using \<open>\<delta> > 0\<close> by (intro sum_le_suminf ballI mult_nonneg_nonneg zero_le_power summable) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 333 | also have "\<dots> \<le> 1" by fact | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 334 | finally show ?thesis using \<open>\<delta> > 0\<close> | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 335 | by (simp add: divide_right_mono field_split_simps) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 336 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 337 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 338 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 339 | private lemma fps_conv_radius_inverse_pos_aux: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 340 |   fixes f :: "'a :: {banach, real_normed_field} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 341 | assumes "fps_nth f 0 = 1" "fps_conv_radius f > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 342 | shows "fps_conv_radius (inverse f) > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 343 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 344 | let ?R = "fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 345 | define h where "h = Abs_fps (\<lambda>n. norm (fps_nth f n))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 346 | have [simp]: "fps_conv_radius h = ?R" by (simp add: h_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 347 | have "continuous_on (eball 0 (fps_conv_radius h)) (eval_fps h)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 348 | by (intro continuous_on_eval_fps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 349 | hence *: "open (eval_fps h -` A \<inter> eball 0 ?R)" if "open A" for A | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 350 | using that by (subst (asm) continuous_on_open_vimage) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 351 |   have "open (eval_fps h -` {..<2} \<inter> eball 0 ?R)"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 352 | by (rule *) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 353 |   moreover have "0 \<in> eval_fps h -` {..<2} \<inter> eball 0 ?R"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 354 | using assms by (auto simp: eball_def zero_ereal_def eval_fps_at_0 h_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 355 |   ultimately obtain \<epsilon> where \<epsilon>: "\<epsilon> > 0" "ball 0 \<epsilon> \<subseteq> eval_fps h -` {..<2} \<inter> eball 0 ?R"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 356 | by (subst (asm) open_contains_ball_eq) blast+ | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 357 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 358 | define \<delta> where "\<delta> = real_of_ereal (min (ereal \<epsilon> / 2) (?R / 2))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 359 | have \<delta>: "0 < \<delta> \<and> \<delta> < \<epsilon> \<and> ereal \<delta> < ?R" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 360 | using \<open>\<epsilon> > 0\<close> and assms by (cases ?R) (auto simp: \<delta>_def min_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 361 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 362 | have summable: "summable (\<lambda>n. norm (fps_nth f n) * \<delta> ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 363 | using \<delta> by (intro summable_in_conv_radius) (simp_all add: fps_conv_radius_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 364 | hence "(\<lambda>n. norm (fps_nth f n) * \<delta> ^ n) sums eval_fps h \<delta>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 365 | by (simp add: eval_fps_def summable_sums h_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 366 | hence "(\<lambda>n. norm (fps_nth f (Suc n)) * \<delta> ^ Suc n) sums (eval_fps h \<delta> - 1)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 367 | by (subst sums_Suc_iff) (auto simp: assms) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 368 |   moreover {
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 369 | from \<delta> have "\<delta> \<in> ball 0 \<epsilon>" by auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 370 |     also have "\<dots> \<subseteq> eval_fps h -` {..<2} \<inter> eball 0 ?R" by fact
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 371 | finally have "eval_fps h \<delta> < 2" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 372 | } | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 373 | ultimately have le: "(\<Sum>n. norm (fps_nth f (Suc n)) * \<delta> ^ Suc n) \<le> 1" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 374 | by (simp add: sums_iff) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 375 | from summable have summable: "summable (\<lambda>n. norm (fps_nth f (Suc n)) * \<delta> ^ Suc n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 | by (subst summable_Suc_iff) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 377 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 378 | have "0 < \<delta>" using \<delta> by blast | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 379 | also have "\<delta> = inverse (limsup (\<lambda>n. ereal (inverse \<delta>)))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 380 | using \<delta> by (subst Limsup_const) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 381 | also have "\<dots> \<le> conv_radius (natfun_inverse f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 382 | unfolding conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 383 | proof (intro ereal_inverse_antimono Limsup_mono | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 384 | eventually_mono[OF eventually_gt_at_top[of 0]]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 385 | fix n :: nat assume n: "n > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 386 | have "root n (norm (natfun_inverse f n)) \<le> root n (inverse (\<delta> ^ n))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 387 | using n assms \<delta> le summable | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 388 | by (intro real_root_le_mono natfun_inverse_bound) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | also have "\<dots> = inverse \<delta>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | using n \<delta> by (simp add: power_inverse [symmetric] real_root_pos2) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 391 | finally show "ereal (inverse \<delta>) \<ge> ereal (root n (norm (natfun_inverse f n)))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | by (subst ereal_less_eq) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | next | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 394 | have "0 = limsup (\<lambda>n. 0::ereal)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | by (rule Limsup_const [symmetric]) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | also have "\<dots> \<le> limsup (\<lambda>n. ereal (root n (norm (natfun_inverse f n))))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 | by (intro Limsup_mono) (auto simp: real_root_ge_zero) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 398 | finally show "0 \<le> \<dots>" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 400 | also have "\<dots> = fps_conv_radius (inverse f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 401 | using assms by (simp add: fps_conv_radius_def fps_inverse_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | finally show ?thesis by (simp add: zero_ereal_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 404 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 405 | lemma fps_conv_radius_inverse_pos: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 406 |   fixes f :: "'a :: {banach, real_normed_field} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | assumes "fps_nth f 0 \<noteq> 0" and "fps_conv_radius f > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 408 | shows "fps_conv_radius (inverse f) > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 409 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 410 | let ?c = "fps_nth f 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 411 | have "fps_conv_radius (inverse f) = fps_conv_radius (fps_const ?c * inverse f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 412 | using assms by (subst fps_conv_radius_cmult_left) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 413 | also have "fps_const ?c * inverse f = inverse (fps_const (inverse ?c) * f)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | using assms by (simp add: fps_inverse_mult fps_const_inverse) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 415 | also have "fps_conv_radius \<dots> > 0" using assms | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | by (intro fps_conv_radius_inverse_pos_aux) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | (auto simp: fps_conv_radius_cmult_left) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 | finally show ?thesis . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 421 | end | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 422 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 | lemma fps_conv_radius_exp [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 424 |   fixes c :: "'a :: {banach, real_normed_field}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 425 | shows "fps_conv_radius (fps_exp c) = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 426 | unfolding fps_conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 427 | proof (rule conv_radius_inftyI'') | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 428 | fix z :: 'a | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | have "(\<lambda>n. norm (c * z) ^ n /\<^sub>R fact n) sums exp (norm (c * z))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 430 | by (rule exp_converges) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 431 | also have "(\<lambda>n. norm (c * z) ^ n /\<^sub>R fact n) = (\<lambda>n. norm (fps_nth (fps_exp c) n * z ^ n))" | 
| 71633 | 432 | by (rule ext) (simp add: norm_divide norm_mult norm_power field_split_simps) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | finally have "summable \<dots>" by (simp add: sums_iff) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 434 | thus "summable (\<lambda>n. fps_nth (fps_exp c) n * z ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 435 | by (rule summable_norm_cancel) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 436 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 437 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 438 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | subsection \<open>Evaluating power series\<close> | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 440 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 441 | theorem eval_fps_deriv: | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 442 | assumes "norm z < fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 443 | shows "eval_fps (fps_deriv f) z = deriv (eval_fps f) z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 444 | by (intro DERIV_imp_deriv [symmetric] has_field_derivative_eval_fps assms) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 445 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 446 | theorem fps_nth_conv_deriv: | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | fixes f :: "complex fps" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 448 | assumes "fps_conv_radius f > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 449 | shows "fps_nth f n = (deriv ^^ n) (eval_fps f) 0 / fact n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 | using assms | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | proof (induction n arbitrary: f) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 | case 0 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 453 | thus ?case by (simp add: eval_fps_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 454 | next | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | case (Suc n f) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | have "(deriv ^^ Suc n) (eval_fps f) 0 = (deriv ^^ n) (deriv (eval_fps f)) 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 | unfolding funpow_Suc_right o_def .. | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | also have "eventually (\<lambda>z::complex. z \<in> eball 0 (fps_conv_radius f)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 459 | using Suc.prems by (intro eventually_nhds_in_open) (auto simp: zero_ereal_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | hence "eventually (\<lambda>z. deriv (eval_fps f) z = eval_fps (fps_deriv f) z) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | by eventually_elim (simp add: eval_fps_deriv) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 462 | hence "(deriv ^^ n) (deriv (eval_fps f)) 0 = (deriv ^^ n) (eval_fps (fps_deriv f)) 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 463 | by (intro higher_deriv_cong_ev refl) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 464 | also have "\<dots> / fact n = fps_nth (fps_deriv f) n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 465 | using Suc.prems fps_conv_radius_deriv[of f] | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 466 | by (intro Suc.IH [symmetric]) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 467 | also have "\<dots> / of_nat (Suc n) = fps_nth f (Suc n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | by (simp add: fps_deriv_def del: of_nat_Suc) | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 469 | finally show ?case by (simp add: field_split_simps) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 470 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 471 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 472 | theorem eval_fps_eqD: | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 | fixes f g :: "complex fps" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 474 | assumes "fps_conv_radius f > 0" "fps_conv_radius g > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 475 | assumes "eventually (\<lambda>z. eval_fps f z = eval_fps g z) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 | shows "f = g" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 477 | proof (rule fps_ext) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 478 | fix n :: nat | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 | have "fps_nth f n = (deriv ^^ n) (eval_fps f) 0 / fact n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 480 | using assms by (intro fps_nth_conv_deriv) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 481 | also have "(deriv ^^ n) (eval_fps f) 0 = (deriv ^^ n) (eval_fps g) 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 482 | by (intro higher_deriv_cong_ev refl assms) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 | also have "\<dots> / fact n = fps_nth g n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | using assms by (intro fps_nth_conv_deriv [symmetric]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 485 | finally show "fps_nth f n = fps_nth g n" . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 486 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 487 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 488 | lemma eval_fps_const [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 489 |   fixes c :: "'a :: {banach, real_normed_div_algebra}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 490 | shows "eval_fps (fps_const c) z = c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 491 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 492 |   have "(\<lambda>n::nat. if n \<in> {0} then c else 0) sums (\<Sum>n\<in>{0::nat}. c)"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | by (rule sums_If_finite_set) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 494 |   also have "?this \<longleftrightarrow> (\<lambda>n::nat. fps_nth (fps_const c) n * z ^ n) sums (\<Sum>n\<in>{0::nat}. c)"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 495 | by (intro sums_cong) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 |   also have "(\<Sum>n\<in>{0::nat}. c) = c" 
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 497 | by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 498 | finally show ?thesis | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | by (simp add: eval_fps_def sums_iff) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 500 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 501 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 502 | lemma eval_fps_0 [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 503 |   "eval_fps (0 :: 'a :: {banach, real_normed_div_algebra} fps) z = 0"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 504 | by (simp only: fps_const_0_eq_0 [symmetric] eval_fps_const) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 505 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 506 | lemma eval_fps_1 [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 507 |   "eval_fps (1 :: 'a :: {banach, real_normed_div_algebra} fps) z = 1"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 508 | by (simp only: fps_const_1_eq_1 [symmetric] eval_fps_const) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | lemma eval_fps_numeral [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 511 |   "eval_fps (numeral n :: 'a :: {banach, real_normed_div_algebra} fps) z = numeral n"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 512 | by (simp only: numeral_fps_const eval_fps_const) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 513 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 514 | lemma eval_fps_X_power [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 515 |   "eval_fps (fps_X ^ m :: 'a :: {banach, real_normed_div_algebra} fps) z = z ^ m"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 516 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 517 |   have "(\<lambda>n::nat. if n \<in> {m} then z ^ n else 0 :: 'a) sums (\<Sum>n\<in>{m::nat}. z ^ n)"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 518 | by (rule sums_If_finite_set) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 519 |   also have "?this \<longleftrightarrow> (\<lambda>n::nat. fps_nth (fps_X ^ m) n * z ^ n) sums (\<Sum>n\<in>{m::nat}. z ^ n)"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 520 | by (intro sums_cong) (auto simp: fps_X_power_iff) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 521 |   also have "(\<Sum>n\<in>{m::nat}. z ^ n) = z ^ m"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 523 | finally show ?thesis | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 524 | by (simp add: eval_fps_def sums_iff) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 525 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 526 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 527 | lemma eval_fps_X [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 528 |   "eval_fps (fps_X :: 'a :: {banach, real_normed_div_algebra} fps) z = z"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | using eval_fps_X_power[of 1 z] by (simp only: power_one_right) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 531 | lemma eval_fps_minus: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 532 |   fixes f :: "'a :: {banach, real_normed_div_algebra} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 533 | assumes "norm z < fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 534 | shows "eval_fps (-f) z = -eval_fps f z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 535 | using assms unfolding eval_fps_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 536 | by (subst suminf_minus [symmetric]) (auto intro!: summable_fps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 537 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 538 | lemma eval_fps_add: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 |   fixes f g :: "'a :: {banach, real_normed_div_algebra} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 540 | assumes "norm z < fps_conv_radius f" "norm z < fps_conv_radius g" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 541 | shows "eval_fps (f + g) z = eval_fps f z + eval_fps g z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 542 | using assms unfolding eval_fps_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | by (subst suminf_add) (auto simp: ring_distribs intro!: summable_fps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 544 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 545 | lemma eval_fps_diff: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 546 |   fixes f g :: "'a :: {banach, real_normed_div_algebra} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 547 | assumes "norm z < fps_conv_radius f" "norm z < fps_conv_radius g" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 548 | shows "eval_fps (f - g) z = eval_fps f z - eval_fps g z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 549 | using assms unfolding eval_fps_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 550 | by (subst suminf_diff) (auto simp: ring_distribs intro!: summable_fps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 551 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 552 | lemma eval_fps_mult: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 553 |   fixes f g :: "'a :: {banach, real_normed_div_algebra, comm_ring_1} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 554 | assumes "norm z < fps_conv_radius f" "norm z < fps_conv_radius g" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 555 | shows "eval_fps (f * g) z = eval_fps f z * eval_fps g z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 556 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 557 | have "eval_fps f z * eval_fps g z = | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 558 | (\<Sum>k. \<Sum>i\<le>k. fps_nth f i * fps_nth g (k - i) * (z ^ i * z ^ (k - i)))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 559 | unfolding eval_fps_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 560 | proof (subst Cauchy_product) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 561 | show "summable (\<lambda>k. norm (fps_nth f k * z ^ k))" "summable (\<lambda>k. norm (fps_nth g k * z ^ k))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 562 | by (rule norm_summable_fps assms)+ | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 563 | qed (simp_all add: algebra_simps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 564 | also have "(\<lambda>k. \<Sum>i\<le>k. fps_nth f i * fps_nth g (k - i) * (z ^ i * z ^ (k - i))) = | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 565 | (\<lambda>k. \<Sum>i\<le>k. fps_nth f i * fps_nth g (k - i) * z ^ k)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 566 | by (intro ext sum.cong refl) (simp add: power_add [symmetric]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 567 | also have "suminf \<dots> = eval_fps (f * g) z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | by (simp add: eval_fps_def fps_mult_nth atLeast0AtMost sum_distrib_right) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 569 | finally show ?thesis .. | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 570 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 572 | lemma eval_fps_shift: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 573 |   fixes f :: "'a :: {banach, real_normed_div_algebra, comm_ring_1} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 574 | assumes "n \<le> subdegree f" "norm z < fps_conv_radius f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 575 | shows "eval_fps (fps_shift n f) z = (if z = 0 then fps_nth f n else eval_fps f z / z ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 576 | proof (cases "z = 0") | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 577 | case False | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 578 | have "eval_fps (fps_shift n f * fps_X ^ n) z = eval_fps (fps_shift n f) z * z ^ n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 579 | using assms by (subst eval_fps_mult) simp_all | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 580 | also from assms have "fps_shift n f * fps_X ^ n = f" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 581 | by (simp add: fps_shift_times_fps_X_power) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 582 | finally show ?thesis using False by (simp add: field_simps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 583 | qed (simp_all add: eval_fps_at_0) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 584 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 585 | lemma eval_fps_exp [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 586 |   fixes c :: "'a :: {banach, real_normed_field}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 587 | shows "eval_fps (fps_exp c) z = exp (c * z)" unfolding eval_fps_def exp_def | 
| 71633 | 588 | by (simp add: eval_fps_def exp_def scaleR_conv_of_real field_split_simps) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 590 | text \<open> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 591 | The case of division is more complicated and will therefore not be handled here. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 592 | Handling division becomes much more easy using complex analysis, and we will do so once | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 593 | that is available. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 594 | \<close> | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 595 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 596 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 597 | subsection \<open>Power series expansions of analytic functions\<close> | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 598 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 599 | text \<open> | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 600 | This predicate contains the notion that the given formal power series converges | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 601 | in some disc of positive radius around the origin and is equal to the given complex | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 602 | function there. | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 603 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 604 | This relationship is unique in the sense that no complex function can have more than | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 605 | one formal power series to which it expands, and if two holomorphic functions that are | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 606 | holomorphic on a connected open set around the origin and have the same power series | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 607 | expansion, they must be equal on that set. | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 608 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 609 | More concrete statements about the radius of convergence can usually be made, but for | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 610 | many purposes, the statment that the series converges to the function in some neighbourhood | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 611 | of the origin is enough, and that can be shown almost fully automatically in most cases, | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 612 | as there are straightforward introduction rules to show this. | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 613 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 614 | In particular, when one wants to relate the coefficients of the power series to the | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 615 | values of the derivatives of the function at the origin, or if one wants to approximate | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 616 | the coefficients of the series with the singularities of the function, this predicate | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 617 | is enough. | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 618 | \<close> | 
| 70136 | 619 | definition\<^marker>\<open>tag important\<close> | 
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 620 |   has_fps_expansion :: "('a :: {banach,real_normed_div_algebra} \<Rightarrow> 'a) \<Rightarrow> 'a fps \<Rightarrow> bool"
 | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 621 | (infixl "has'_fps'_expansion" 60) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 622 | where "(f has_fps_expansion F) \<longleftrightarrow> | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 623 | fps_conv_radius F > 0 \<and> eventually (\<lambda>z. eval_fps F z = f z) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 624 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 | named_theorems fps_expansion_intros | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 626 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 627 | lemma fps_nth_fps_expansion: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 628 | fixes f :: "complex \<Rightarrow> complex" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 629 | assumes "f has_fps_expansion F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 630 | shows "fps_nth F n = (deriv ^^ n) f 0 / fact n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 631 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 632 | have "fps_nth F n = (deriv ^^ n) (eval_fps F) 0 / fact n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 633 | using assms by (intro fps_nth_conv_deriv) (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 634 | also have "(deriv ^^ n) (eval_fps F) 0 = (deriv ^^ n) f 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 635 | using assms by (intro higher_deriv_cong_ev) (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 636 | finally show ?thesis . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 637 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 638 | |
| 68721 | 639 | lemma has_fps_expansion_imp_continuous: | 
| 640 |   fixes F :: "'a::{real_normed_field,banach} fps"
 | |
| 641 | assumes "f has_fps_expansion F" | |
| 642 | shows "continuous (at 0 within A) f" | |
| 643 | proof - | |
| 644 | from assms have "isCont (eval_fps F) 0" | |
| 645 | by (intro continuous_eval_fps) (auto simp: has_fps_expansion_def zero_ereal_def) | |
| 646 | also have "?this \<longleftrightarrow> isCont f 0" using assms | |
| 647 | by (intro isCont_cong) (auto simp: has_fps_expansion_def) | |
| 648 | finally have "isCont f 0" . | |
| 649 | thus "continuous (at 0 within A) f" | |
| 650 | by (simp add: continuous_at_imp_continuous_within) | |
| 651 | qed | |
| 652 | ||
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 653 | lemma has_fps_expansion_const [simp, intro, fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 654 | "(\<lambda>_. c) has_fps_expansion fps_const c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 655 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 656 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 657 | lemma has_fps_expansion_0 [simp, intro, fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 658 | "(\<lambda>_. 0) has_fps_expansion 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 659 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 660 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 661 | lemma has_fps_expansion_1 [simp, intro, fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 662 | "(\<lambda>_. 1) has_fps_expansion 1" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 663 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 664 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 | lemma has_fps_expansion_numeral [simp, intro, fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 666 | "(\<lambda>_. numeral n) has_fps_expansion numeral n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 667 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 668 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 669 | lemma has_fps_expansion_fps_X_power [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 670 | "(\<lambda>x. x ^ n) has_fps_expansion (fps_X ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 671 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 672 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 673 | lemma has_fps_expansion_fps_X [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 674 | "(\<lambda>x. x) has_fps_expansion fps_X" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 675 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 676 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 677 | lemma has_fps_expansion_cmult_left [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 678 |   fixes c :: "'a :: {banach, real_normed_div_algebra, comm_ring_1}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 679 | assumes "f has_fps_expansion F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 680 | shows "(\<lambda>x. c * f x) has_fps_expansion fps_const c * F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 681 | proof (cases "c = 0") | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 682 | case False | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 683 | from assms have "eventually (\<lambda>z. z \<in> eball 0 (fps_conv_radius F)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 684 | by (intro eventually_nhds_in_open) (auto simp: has_fps_expansion_def zero_ereal_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 685 | moreover from assms have "eventually (\<lambda>z. eval_fps F z = f z) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 686 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 687 | ultimately have "eventually (\<lambda>z. eval_fps (fps_const c * F) z = c * f z) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 688 | by eventually_elim (simp_all add: eval_fps_mult) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 689 | with assms and False show ?thesis | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 690 | by (auto simp: has_fps_expansion_def fps_conv_radius_cmult_left) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 691 | qed auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 692 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 693 | lemma has_fps_expansion_cmult_right [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 694 |   fixes c :: "'a :: {banach, real_normed_div_algebra, comm_ring_1}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 695 | assumes "f has_fps_expansion F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 696 | shows "(\<lambda>x. f x * c) has_fps_expansion F * fps_const c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 697 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 698 | have "F * fps_const c = fps_const c * F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 699 | by (intro fps_ext) (auto simp: mult.commute) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 700 | with has_fps_expansion_cmult_left [OF assms] show ?thesis | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 701 | by (simp add: mult.commute) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 702 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 703 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 704 | lemma has_fps_expansion_minus [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 705 | assumes "f has_fps_expansion F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 706 | shows "(\<lambda>x. - f x) has_fps_expansion -F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 707 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 708 | from assms have "eventually (\<lambda>x. x \<in> eball 0 (fps_conv_radius F)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 709 | by (intro eventually_nhds_in_open) (auto simp: has_fps_expansion_def zero_ereal_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 710 | moreover from assms have "eventually (\<lambda>x. eval_fps F x = f x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 711 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 712 | ultimately have "eventually (\<lambda>x. eval_fps (-F) x = -f x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 713 | by eventually_elim (auto simp: eval_fps_minus) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 714 | thus ?thesis using assms by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 715 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 716 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 717 | lemma has_fps_expansion_add [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 718 | assumes "f has_fps_expansion F" "g has_fps_expansion G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 719 | shows "(\<lambda>x. f x + g x) has_fps_expansion F + G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 720 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 721 | from assms have "0 < min (fps_conv_radius F) (fps_conv_radius G)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 722 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 723 | also have "\<dots> \<le> fps_conv_radius (F + G)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 724 | by (rule fps_conv_radius_add) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 725 | finally have radius: "\<dots> > 0" . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 726 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 727 | from assms have "eventually (\<lambda>x. x \<in> eball 0 (fps_conv_radius F)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 728 | "eventually (\<lambda>x. x \<in> eball 0 (fps_conv_radius G)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 729 | by (intro eventually_nhds_in_open; force simp: has_fps_expansion_def zero_ereal_def)+ | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 730 | moreover have "eventually (\<lambda>x. eval_fps F x = f x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 731 | and "eventually (\<lambda>x. eval_fps G x = g x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 732 | using assms by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 733 | ultimately have "eventually (\<lambda>x. eval_fps (F + G) x = f x + g x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 734 | by eventually_elim (auto simp: eval_fps_add) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 735 | with radius show ?thesis by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 736 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 737 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 738 | lemma has_fps_expansion_diff [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 739 | assumes "f has_fps_expansion F" "g has_fps_expansion G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 740 | shows "(\<lambda>x. f x - g x) has_fps_expansion F - G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 741 | using has_fps_expansion_add[of f F "\<lambda>x. - g x" "-G"] assms | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 742 | by (simp add: has_fps_expansion_minus) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 743 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 744 | lemma has_fps_expansion_mult [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 745 |   fixes F G :: "'a :: {banach, real_normed_div_algebra, comm_ring_1} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 746 | assumes "f has_fps_expansion F" "g has_fps_expansion G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 747 | shows "(\<lambda>x. f x * g x) has_fps_expansion F * G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 748 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 749 | from assms have "0 < min (fps_conv_radius F) (fps_conv_radius G)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 750 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 751 | also have "\<dots> \<le> fps_conv_radius (F * G)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 752 | by (rule fps_conv_radius_mult) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 753 | finally have radius: "\<dots> > 0" . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 754 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 755 | from assms have "eventually (\<lambda>x. x \<in> eball 0 (fps_conv_radius F)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 756 | "eventually (\<lambda>x. x \<in> eball 0 (fps_conv_radius G)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 757 | by (intro eventually_nhds_in_open; force simp: has_fps_expansion_def zero_ereal_def)+ | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 758 | moreover have "eventually (\<lambda>x. eval_fps F x = f x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 759 | and "eventually (\<lambda>x. eval_fps G x = g x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 760 | using assms by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 761 | ultimately have "eventually (\<lambda>x. eval_fps (F * G) x = f x * g x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 762 | by eventually_elim (auto simp: eval_fps_mult) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 763 | with radius show ?thesis by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 764 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 765 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 766 | lemma has_fps_expansion_inverse [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 767 |   fixes F :: "'a :: {banach, real_normed_field} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 768 | assumes "f has_fps_expansion F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 769 | assumes "fps_nth F 0 \<noteq> 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 770 | shows "(\<lambda>x. inverse (f x)) has_fps_expansion inverse F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 771 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 772 | have radius: "fps_conv_radius (inverse F) > 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 773 | using assms unfolding has_fps_expansion_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 774 | by (intro fps_conv_radius_inverse_pos) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 775 | let ?R = "min (fps_conv_radius F) (fps_conv_radius (inverse F))" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 776 | from assms radius | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 777 | have "eventually (\<lambda>x. x \<in> eball 0 (fps_conv_radius F)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 778 | "eventually (\<lambda>x. x \<in> eball 0 (fps_conv_radius (inverse F))) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 779 | by (intro eventually_nhds_in_open; force simp: has_fps_expansion_def zero_ereal_def)+ | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 780 | moreover have "eventually (\<lambda>z. eval_fps F z = f z) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 781 | using assms by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 782 | ultimately have "eventually (\<lambda>z. eval_fps (inverse F) z = inverse (f z)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 783 | proof eventually_elim | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 784 | case (elim z) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 785 | hence "eval_fps (inverse F * F) z = eval_fps (inverse F) z * f z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 786 | by (subst eval_fps_mult) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 787 | also have "eval_fps (inverse F * F) z = 1" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 788 | using assms by (simp add: inverse_mult_eq_1) | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 789 | finally show ?case by (auto simp: field_split_simps) | 
| 66480 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 790 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 791 | with radius show ?thesis by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 792 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 793 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 794 | lemma has_fps_expansion_exp [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 795 |   fixes c :: "'a :: {banach, real_normed_field}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 796 | shows "(\<lambda>x. exp (c * x)) has_fps_expansion fps_exp c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 797 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 798 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 799 | lemma has_fps_expansion_exp1 [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 800 |   "(\<lambda>x::'a :: {banach, real_normed_field}. exp x) has_fps_expansion fps_exp 1"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 801 | using has_fps_expansion_exp[of 1] by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 802 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 803 | lemma has_fps_expansion_exp_neg1 [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 804 |   "(\<lambda>x::'a :: {banach, real_normed_field}. exp (-x)) has_fps_expansion fps_exp (-1)"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 805 | using has_fps_expansion_exp[of "-1"] by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 806 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 807 | lemma has_fps_expansion_deriv [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 808 | assumes "f has_fps_expansion F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 809 | shows "deriv f has_fps_expansion fps_deriv F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 810 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 811 | have "eventually (\<lambda>z. z \<in> eball 0 (fps_conv_radius F)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 812 | using assms by (intro eventually_nhds_in_open) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 813 | (auto simp: has_fps_expansion_def zero_ereal_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 814 | moreover from assms have "eventually (\<lambda>z. eval_fps F z = f z) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 815 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 816 | then obtain s where "open s" "0 \<in> s" and s: "\<And>w. w \<in> s \<Longrightarrow> eval_fps F w = f w" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | by (auto simp: eventually_nhds) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 818 | hence "eventually (\<lambda>w. w \<in> s) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 819 | by (intro eventually_nhds_in_open) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 820 | ultimately have "eventually (\<lambda>z. eval_fps (fps_deriv F) z = deriv f z) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 821 | proof eventually_elim | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 822 | case (elim z) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 823 | hence "eval_fps (fps_deriv F) z = deriv (eval_fps F) z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 824 | by (simp add: eval_fps_deriv) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 825 | also have "eventually (\<lambda>w. w \<in> s) (nhds z)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 826 | using elim and \<open>open s\<close> by (intro eventually_nhds_in_open) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 827 | hence "eventually (\<lambda>w. eval_fps F w = f w) (nhds z)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 828 | by eventually_elim (simp add: s) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 829 | hence "deriv (eval_fps F) z = deriv f z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 830 | by (intro deriv_cong_ev refl) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 831 | finally show ?case . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 832 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 833 | with assms and fps_conv_radius_deriv[of F] show ?thesis | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 834 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 835 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 836 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 837 | lemma fps_conv_radius_binomial: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 838 |   fixes c :: "'a :: {real_normed_field,banach}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 839 | shows "fps_conv_radius (fps_binomial c) = (if c \<in> \<nat> then \<infinity> else 1)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 840 | unfolding fps_conv_radius_def by (simp add: conv_radius_gchoose) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 841 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 842 | lemma fps_conv_radius_ln: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 843 |   fixes c :: "'a :: {banach, real_normed_field, field_char_0}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 844 | shows "fps_conv_radius (fps_ln c) = (if c = 0 then \<infinity> else 1)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 845 | proof (cases "c = 0") | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | case False | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 847 | have "conv_radius (\<lambda>n. 1 / of_nat n :: 'a) = 1" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 848 | proof (rule conv_radius_ratio_limit_nonzero) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 849 | show "(\<lambda>n. norm (1 / of_nat n :: 'a) / norm (1 / of_nat (Suc n) :: 'a)) \<longlonglongrightarrow> 1" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 850 | using LIMSEQ_Suc_n_over_n by (simp add: norm_divide del: of_nat_Suc) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 851 | qed auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 852 | also have "conv_radius (\<lambda>n. 1 / of_nat n :: 'a) = | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 853 | conv_radius (\<lambda>n. if n = 0 then 0 else (- 1) ^ (n - 1) / of_nat n :: 'a)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 854 | by (intro conv_radius_cong eventually_mono[OF eventually_gt_at_top[of 0]]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 855 | (simp add: norm_mult norm_divide norm_power) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 856 | finally show ?thesis using False unfolding fps_ln_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | by (subst fps_conv_radius_cmult_left) (simp_all add: fps_conv_radius_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 858 | qed (auto simp: fps_ln_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 859 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 860 | lemma fps_conv_radius_ln_nonzero [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 861 |   assumes "c \<noteq> (0 :: 'a :: {banach,real_normed_field,field_char_0})"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 862 | shows "fps_conv_radius (fps_ln c) = 1" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 863 | using assms by (simp add: fps_conv_radius_ln) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 864 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 865 | lemma fps_conv_radius_sin [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 866 |   fixes c :: "'a :: {banach, real_normed_field, field_char_0}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 867 | shows "fps_conv_radius (fps_sin c) = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 868 | proof (cases "c = 0") | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 869 | case False | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | have "\<infinity> = conv_radius (\<lambda>n. of_real (sin_coeff n) :: 'a)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 871 | proof (rule sym, rule conv_radius_inftyI'', rule summable_norm_cancel, goal_cases) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | case (1 z) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 873 | show ?case using summable_norm_sin[of z] by (simp add: norm_mult) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 874 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 875 | also have "\<dots> / norm c = conv_radius (\<lambda>n. c ^ n * of_real (sin_coeff n) :: 'a)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 876 | using False by (subst conv_radius_mult_power) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 877 | also have "\<dots> = fps_conv_radius (fps_sin c)" unfolding fps_conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 878 | by (rule conv_radius_cong_weak) (auto simp add: fps_sin_def sin_coeff_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 879 | finally show ?thesis by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 880 | qed simp_all | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 881 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 882 | lemma fps_conv_radius_cos [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 883 |   fixes c :: "'a :: {banach, real_normed_field, field_char_0}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 884 | shows "fps_conv_radius (fps_cos c) = \<infinity>" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 885 | proof (cases "c = 0") | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | case False | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 887 | have "\<infinity> = conv_radius (\<lambda>n. of_real (cos_coeff n) :: 'a)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 888 | proof (rule sym, rule conv_radius_inftyI'', rule summable_norm_cancel, goal_cases) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | case (1 z) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 890 | show ?case using summable_norm_cos[of z] by (simp add: norm_mult) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 891 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 892 | also have "\<dots> / norm c = conv_radius (\<lambda>n. c ^ n * of_real (cos_coeff n) :: 'a)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 893 | using False by (subst conv_radius_mult_power) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 894 | also have "\<dots> = fps_conv_radius (fps_cos c)" unfolding fps_conv_radius_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 895 | by (rule conv_radius_cong_weak) (auto simp add: fps_cos_def cos_coeff_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 896 | finally show ?thesis by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 897 | qed simp_all | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 898 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 899 | lemma eval_fps_sin [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 900 |   fixes z :: "'a :: {banach, real_normed_field, field_char_0}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | shows "eval_fps (fps_sin c) z = sin (c * z)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 902 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 903 | have "(\<lambda>n. sin_coeff n *\<^sub>R (c * z) ^ n) sums sin (c * z)" by (rule sin_converges) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 904 | also have "(\<lambda>n. sin_coeff n *\<^sub>R (c * z) ^ n) = (\<lambda>n. fps_nth (fps_sin c) n * z ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 905 | by (rule ext) (auto simp: sin_coeff_def fps_sin_def power_mult_distrib scaleR_conv_of_real) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 | finally show ?thesis by (simp add: sums_iff eval_fps_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 907 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 908 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 909 | lemma eval_fps_cos [simp]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 910 |   fixes z :: "'a :: {banach, real_normed_field, field_char_0}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 911 | shows "eval_fps (fps_cos c) z = cos (c * z)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 912 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 913 | have "(\<lambda>n. cos_coeff n *\<^sub>R (c * z) ^ n) sums cos (c * z)" by (rule cos_converges) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 914 | also have "(\<lambda>n. cos_coeff n *\<^sub>R (c * z) ^ n) = (\<lambda>n. fps_nth (fps_cos c) n * z ^ n)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 915 | by (rule ext) (auto simp: cos_coeff_def fps_cos_def power_mult_distrib scaleR_conv_of_real) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 916 | finally show ?thesis by (simp add: sums_iff eval_fps_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 917 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 918 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 919 | lemma cos_eq_zero_imp_norm_ge: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 920 | assumes "cos (z :: complex) = 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 921 | shows "norm z \<ge> pi / 2" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 923 | from assms obtain n where "z = complex_of_real ((of_int n + 1 / 2) * pi)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 924 | by (auto simp: cos_eq_0 algebra_simps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 925 | also have "norm \<dots> = \<bar>real_of_int n + 1 / 2\<bar> * pi" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 926 | by (subst norm_of_real) (simp_all add: abs_mult) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 927 | also have "real_of_int n + 1 / 2 = of_int (2 * n + 1) / 2" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 928 | also have "\<bar>\<dots>\<bar> = of_int \<bar>2 * n + 1\<bar> / 2" by (subst abs_divide) simp_all | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 929 | also have "\<dots> * pi = of_int \<bar>2 * n + 1\<bar> * (pi / 2)" by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 930 | also have "\<dots> \<ge> of_int 1 * (pi / 2)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 931 | by (intro mult_right_mono, subst of_int_le_iff) (auto simp: abs_if) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 932 | finally show ?thesis by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 933 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 934 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 935 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 937 | lemma eval_fps_binomial: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 938 | fixes c :: complex | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 939 | assumes "norm z < 1" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 940 | shows "eval_fps (fps_binomial c) z = (1 + z) powr c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 941 | using gen_binomial_complex[OF assms] by (simp add: sums_iff eval_fps_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 942 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 943 | lemma has_fps_expansion_binomial_complex [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 944 | fixes c :: complex | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 945 | shows "(\<lambda>x. (1 + x) powr c) has_fps_expansion fps_binomial c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 946 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 947 | have *: "eventually (\<lambda>z::complex. z \<in> eball 0 1) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 948 | by (intro eventually_nhds_in_open) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 949 | thus ?thesis | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 950 | by (auto simp: has_fps_expansion_def eval_fps_binomial fps_conv_radius_binomial | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 951 | intro!: eventually_mono [OF *]) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 952 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 953 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 954 | lemma has_fps_expansion_sin [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 |   fixes c :: "'a :: {banach, real_normed_field, field_char_0}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 956 | shows "(\<lambda>x. sin (c * x)) has_fps_expansion fps_sin c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 957 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 958 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 959 | lemma has_fps_expansion_sin' [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 960 |   "(\<lambda>x::'a :: {banach, real_normed_field}. sin x) has_fps_expansion fps_sin 1"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 961 | using has_fps_expansion_sin[of 1] by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 962 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 963 | lemma has_fps_expansion_cos [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 964 |   fixes c :: "'a :: {banach, real_normed_field, field_char_0}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 965 | shows "(\<lambda>x. cos (c * x)) has_fps_expansion fps_cos c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 966 | by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 | lemma has_fps_expansion_cos' [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 969 |   "(\<lambda>x::'a :: {banach, real_normed_field}. cos x) has_fps_expansion fps_cos 1"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 970 | using has_fps_expansion_cos[of 1] by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 971 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 972 | lemma has_fps_expansion_shift [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 973 |   fixes F :: "'a :: {banach, real_normed_field} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 974 | assumes "f has_fps_expansion F" and "n \<le> subdegree F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 975 | assumes "c = fps_nth F n" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 976 | shows "(\<lambda>x. if x = 0 then c else f x / x ^ n) has_fps_expansion (fps_shift n F)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 977 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 978 | have "eventually (\<lambda>x. x \<in> eball 0 (fps_conv_radius F)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 979 | using assms by (intro eventually_nhds_in_open) (auto simp: has_fps_expansion_def zero_ereal_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 980 | moreover have "eventually (\<lambda>x. eval_fps F x = f x) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 981 | using assms by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 982 | ultimately have "eventually (\<lambda>x. eval_fps (fps_shift n F) x = | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 983 | (if x = 0 then c else f x / x ^ n)) (nhds 0)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 984 | by eventually_elim (auto simp: eval_fps_shift assms) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 985 | with assms show ?thesis by (auto simp: has_fps_expansion_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 986 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 987 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 988 | lemma has_fps_expansion_divide [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 989 |   fixes F G :: "'a :: {banach, real_normed_field} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 990 | assumes "f has_fps_expansion F" and "g has_fps_expansion G" and | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 991 | "subdegree G \<le> subdegree F" "G \<noteq> 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 992 | "c = fps_nth F (subdegree G) / fps_nth G (subdegree G)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 993 | shows "(\<lambda>x. if x = 0 then c else f x / g x) has_fps_expansion (F / G)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 994 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 995 | define n where "n = subdegree G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 996 | define F' and G' where "F' = fps_shift n F" and "G' = fps_shift n G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 997 | have "F = F' * fps_X ^ n" "G = G' * fps_X ^ n" unfolding F'_def G'_def n_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 998 | by (rule fps_shift_times_fps_X_power [symmetric] le_refl | fact)+ | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 999 | moreover from assms have "fps_nth G' 0 \<noteq> 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1000 | by (simp add: G'_def n_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1001 | ultimately have FG: "F / G = F' * inverse G'" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1002 | by (simp add: fps_divide_unit) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1003 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1004 | have "(\<lambda>x. (if x = 0 then fps_nth F n else f x / x ^ n) * | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1005 | inverse (if x = 0 then fps_nth G n else g x / x ^ n)) has_fps_expansion F / G" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1006 | (is "?h has_fps_expansion _") unfolding FG F'_def G'_def n_def using \<open>G \<noteq> 0\<close> | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1007 | by (intro has_fps_expansion_mult has_fps_expansion_inverse | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1008 | has_fps_expansion_shift assms) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1009 | also have "?h = (\<lambda>x. if x = 0 then c else f x / g x)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1010 | using assms(5) unfolding n_def | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1011 | by (intro ext) (auto split: if_splits simp: field_simps) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1012 | finally show ?thesis . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1013 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1014 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1015 | lemma has_fps_expansion_divide' [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1016 |   fixes F G :: "'a :: {banach, real_normed_field} fps"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1017 | assumes "f has_fps_expansion F" and "g has_fps_expansion G" and "fps_nth G 0 \<noteq> 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1018 | shows "(\<lambda>x. f x / g x) has_fps_expansion (F / G)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1019 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1020 | have "(\<lambda>x. if x = 0 then fps_nth F 0 / fps_nth G 0 else f x / g x) has_fps_expansion (F / G)" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1021 | (is "?h has_fps_expansion _") using assms(3) by (intro has_fps_expansion_divide assms) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1022 | also from assms have "fps_nth F 0 = f 0" "fps_nth G 0 = g 0" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1023 | by (auto simp: has_fps_expansion_def eval_fps_at_0 dest: eventually_nhds_x_imp_x) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1024 | hence "?h = (\<lambda>x. f x / g x)" by auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1025 | finally show ?thesis . | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1026 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1027 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1028 | lemma has_fps_expansion_tan [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1029 |   fixes c :: "'a :: {banach, real_normed_field, field_char_0}"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1030 | shows "(\<lambda>x. tan (c * x)) has_fps_expansion fps_tan c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1031 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1032 | have "(\<lambda>x. sin (c * x) / cos (c * x)) has_fps_expansion fps_sin c / fps_cos c" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1033 | by (intro fps_expansion_intros) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1034 | thus ?thesis by (simp add: tan_def fps_tan_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1035 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1036 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1037 | lemma has_fps_expansion_tan' [fps_expansion_intros]: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1038 |   "tan has_fps_expansion fps_tan (1 :: 'a :: {banach, real_normed_field, field_char_0})"
 | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1039 | using has_fps_expansion_tan[of 1] by simp | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1040 | |
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1041 | lemma has_fps_expansion_imp_holomorphic: | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1042 | assumes "f has_fps_expansion F" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1043 | obtains s where "open s" "0 \<in> s" "f holomorphic_on s" "\<And>z. z \<in> s \<Longrightarrow> f z = eval_fps F z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1044 | proof - | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1045 | from assms obtain s where s: "open s" "0 \<in> s" "\<And>z. z \<in> s \<Longrightarrow> eval_fps F z = f z" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1046 | unfolding has_fps_expansion_def eventually_nhds by blast | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1047 | let ?s' = "eball 0 (fps_conv_radius F) \<inter> s" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1048 | have "eval_fps F holomorphic_on ?s'" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1049 | by (intro holomorphic_intros) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1050 | also have "?this \<longleftrightarrow> f holomorphic_on ?s'" | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1051 | using s by (intro holomorphic_cong) auto | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1052 | finally show ?thesis using s assms | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1053 | by (intro that[of ?s']) (auto simp: has_fps_expansion_def zero_ereal_def) | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1054 | qed | 
| 
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1055 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 1056 | end |