author | Manuel Eberl <eberlm@in.tum.de> |
Tue, 03 Jun 2025 15:18:54 +0200 | |
changeset 82684 | a6cfe84d0ddd |
parent 82541 | 5160b68e78a9 |
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 |
82400
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
13 |
"HOL-Computational_Algebra.Formal_Power_Series" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
14 |
"HOL-Computational_Algebra.Polynomial_FPS" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
15 |
|
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
16 |
begin |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
17 |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
18 |
text \<open> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
19 |
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:
70817
diff
changeset
|
20 |
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:
70817
diff
changeset
|
21 |
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:
70817
diff
changeset
|
22 |
\<close> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
23 |
|
70136 | 24 |
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
|
25 |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
26 |
(* 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:
70817
diff
changeset
|
27 |
|
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
28 |
text \<open> |
69597 | 29 |
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
|
30 |
\<close> |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
31 |
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
|
32 |
"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
|
33 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
34 |
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
|
35 |
by (simp add: eball_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
36 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
37 |
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
|
38 |
by auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
39 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
40 |
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
|
41 |
by auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
42 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
43 |
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
|
44 |
proof safe |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
45 |
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
|
46 |
hence "dist z x < r" by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
47 |
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
|
48 |
finally show "x \<in> {}" by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
49 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
50 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
51 |
lemma eball_conv_UNION_balls: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
52 |
"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
|
53 |
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
|
54 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
55 |
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
|
56 |
by auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
57 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
58 |
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
|
59 |
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
|
60 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
61 |
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
|
62 |
by (cases r) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
63 |
|
82529
ff4b062aae57
moved some lemmas to where they fit better
Manuel Eberl <manuel@pruvisto.org>
parents:
82400
diff
changeset
|
64 |
lemma connected_eball [intro]: "connected (eball (z :: 'a :: real_normed_vector) r)" |
ff4b062aae57
moved some lemmas to where they fit better
Manuel Eberl <manuel@pruvisto.org>
parents:
82400
diff
changeset
|
65 |
by (cases r) auto |
ff4b062aae57
moved some lemmas to where they fit better
Manuel Eberl <manuel@pruvisto.org>
parents:
82400
diff
changeset
|
66 |
|
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
67 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
68 |
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
|
69 |
|
70136 | 70 |
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
|
71 |
"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
|
72 |
|
70136 | 73 |
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
|
74 |
"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
|
75 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
76 |
lemma norm_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. norm (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 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
|
80 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
81 |
lemma summable_fps: |
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 |
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
|
84 |
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
|
85 |
|
68643
3db6c9338ec1
Tagged some more files in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
86 |
theorem sums_eval_fps: |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
87 |
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
|
88 |
assumes "norm z < fps_conv_radius f" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
89 |
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
|
90 |
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
|
91 |
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
|
92 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
93 |
lemma continuous_on_eval_fps: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
94 |
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
|
95 |
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
|
96 |
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
|
97 |
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
|
98 |
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
|
99 |
(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
|
100 |
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
|
101 |
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
|
102 |
(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
|
103 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
104 |
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
|
105 |
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
|
106 |
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
|
107 |
by (simp add: eval_fps_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
108 |
thus "isCont (eval_fps f) x" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
109 |
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
|
110 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
111 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
112 |
lemma continuous_on_eval_fps' [continuous_intros]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
113 |
assumes "continuous_on A g" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
114 |
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
|
115 |
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
|
116 |
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
|
117 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
118 |
lemma has_field_derivative_powser: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
119 |
fixes z :: "'a :: {banach, real_normed_field}" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
120 |
assumes "ereal (norm z) < conv_radius f" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
121 |
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
|
122 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
123 |
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
|
124 |
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
|
125 |
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
|
126 |
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
|
127 |
have "0 \<le> norm z" by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
128 |
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
|
129 |
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
|
130 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
131 |
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
|
132 |
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
|
133 |
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
|
134 |
ultimately show ?thesis |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
135 |
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
|
136 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
137 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
138 |
lemma has_field_derivative_eval_fps: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
139 |
fixes z :: "'a :: {banach, real_normed_field}" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
140 |
assumes "norm z < fps_conv_radius f" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
141 |
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
|
142 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
143 |
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
|
144 |
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
|
145 |
by (intro has_field_derivative_powser) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
146 |
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
|
147 |
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
|
148 |
finally show ?thesis . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
149 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
150 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
151 |
lemma holomorphic_on_eval_fps [holomorphic_intros]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
152 |
fixes z :: "'a :: {banach, real_normed_field}" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
153 |
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
|
154 |
shows "eval_fps f holomorphic_on A" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
155 |
proof (rule holomorphic_on_subset [OF _ assms]) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
156 |
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
|
157 |
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
|
158 |
case (1 x) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
159 |
thus ?case |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
160 |
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
|
161 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
162 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
163 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
164 |
lemma analytic_on_eval_fps: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
165 |
fixes z :: "'a :: {banach, real_normed_field}" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
166 |
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
|
167 |
shows "eval_fps f analytic_on A" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
168 |
proof (rule analytic_on_subset [OF _ assms]) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
169 |
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
|
170 |
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
|
171 |
by (subst analytic_on_open) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
172 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
173 |
|
68721 | 174 |
lemma continuous_eval_fps [continuous_intros]: |
175 |
fixes z :: "'a::{real_normed_field,banach}" |
|
176 |
assumes "norm z < fps_conv_radius F" |
|
177 |
shows "continuous (at z within A) (eval_fps F)" |
|
178 |
proof - |
|
179 |
from ereal_dense2[OF assms] obtain K :: real where K: "norm z < K" "K < fps_conv_radius F" |
|
180 |
by auto |
|
181 |
have "0 \<le> norm z" by simp |
|
182 |
also have "norm z < K" by fact |
|
183 |
finally have "K > 0" . |
|
184 |
from K and \<open>K > 0\<close> have "summable (\<lambda>n. fps_nth F n * of_real K ^ n)" |
|
185 |
by (intro summable_fps) auto |
|
186 |
from this have "isCont (eval_fps F) z" unfolding eval_fps_def |
|
187 |
by (rule isCont_powser) (use K in auto) |
|
188 |
thus "continuous (at z within A) (eval_fps F)" |
|
189 |
by (simp add: continuous_at_imp_continuous_within) |
|
190 |
qed |
|
191 |
||
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
192 |
|
70136 | 193 |
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
|
194 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
195 |
lemma fps_conv_radius_deriv: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
196 |
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
|
197 |
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
|
198 |
unfolding fps_conv_radius_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
199 |
proof (rule conv_radius_geI_ex) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
200 |
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
|
201 |
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
|
202 |
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
|
203 |
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
|
204 |
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
|
205 |
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
|
206 |
proof (rule termdiff_converges) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
207 |
fix x :: 'a assume "norm x < K" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
208 |
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
|
209 |
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
|
210 |
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
|
211 |
by (intro summable_in_conv_radius) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
212 |
qed (insert K r, auto) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
213 |
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
|
214 |
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
|
215 |
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
|
216 |
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
|
217 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
218 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
219 |
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
|
220 |
by (simp add: eval_fps_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
221 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
222 |
lemma fps_conv_radius_norm [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
223 |
"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
|
224 |
by (simp add: fps_conv_radius_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
225 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
226 |
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
|
227 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
228 |
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
|
229 |
unfolding fps_conv_radius_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
230 |
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
|
231 |
thus ?thesis by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
232 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
233 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
234 |
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
|
235 |
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
|
236 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
237 |
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
|
238 |
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
|
239 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
240 |
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
|
241 |
by (simp add: numeral_fps_const) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
242 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
243 |
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
|
244 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
245 |
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
|
246 |
unfolding fps_conv_radius_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
247 |
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
|
248 |
(auto simp: fps_X_power_iff) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
249 |
thus ?thesis by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
250 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
251 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
252 |
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
|
253 |
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
|
254 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
255 |
lemma fps_conv_radius_shift [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
256 |
"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
|
257 |
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
|
258 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
259 |
lemma fps_conv_radius_cmult_left: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
260 |
"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
|
261 |
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
|
262 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
263 |
lemma fps_conv_radius_cmult_right: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
264 |
"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
|
265 |
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
|
266 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
267 |
lemma fps_conv_radius_uminus [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
268 |
"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
|
269 |
using fps_conv_radius_cmult_left[of "-1" f] |
68403 | 270 |
by (simp flip: fps_const_neg) |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
271 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
272 |
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
|
273 |
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
|
274 |
by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
275 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
276 |
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
|
277 |
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
|
278 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
279 |
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
|
280 |
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
|
281 |
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
|
282 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
283 |
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
|
284 |
proof (induction n) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
285 |
case (Suc n) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
286 |
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
|
287 |
by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
288 |
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
|
289 |
by (rule fps_conv_radius_mult) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
290 |
finally show ?case by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
291 |
qed simp_all |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
292 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
293 |
context |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
294 |
begin |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
295 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
296 |
lemma natfun_inverse_bound: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
297 |
fixes f :: "'a :: {real_normed_field} fps" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
298 |
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
|
299 |
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
|
300 |
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
|
301 |
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
|
302 |
proof (induction n rule: less_induct) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
303 |
case (less m) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
304 |
show ?case |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
305 |
proof (cases m) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
306 |
case 0 |
70817
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
haftmann
parents:
70136
diff
changeset
|
307 |
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
|
308 |
next |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
309 |
case [simp]: (Suc n) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
310 |
have "norm (natfun_inverse f (Suc n)) = |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
311 |
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
|
312 |
(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:
69597
diff
changeset
|
313 |
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
|
314 |
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
|
315 |
by (rule norm_sum) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
316 |
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
|
317 |
proof (intro sum_mono, goal_cases) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
318 |
case (1 i) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
319 |
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
|
320 |
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
|
321 |
by (simp add: norm_mult) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
322 |
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
|
323 |
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
|
324 |
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:
70136
diff
changeset
|
325 |
by (simp add: field_split_simps) |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
326 |
finally show ?case . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
327 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
328 |
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
|
329 |
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
|
330 |
(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
|
331 |
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
|
332 |
(\<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
|
333 |
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
|
334 |
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
|
335 |
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
|
336 |
(\<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
|
337 |
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
|
338 |
also have "\<dots> \<le> 1" by fact |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
339 |
finally show ?thesis using \<open>\<delta> > 0\<close> |
70817
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
haftmann
parents:
70136
diff
changeset
|
340 |
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
|
341 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
342 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
343 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
344 |
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
|
345 |
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
|
346 |
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
|
347 |
shows "fps_conv_radius (inverse f) > 0" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
348 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
349 |
let ?R = "fps_conv_radius f" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
350 |
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
|
351 |
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
|
352 |
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
|
353 |
by (intro continuous_on_eval_fps) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
354 |
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
|
355 |
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
|
356 |
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
|
357 |
by (rule *) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
358 |
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
|
359 |
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
|
360 |
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
|
361 |
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
|
362 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
363 |
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
|
364 |
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
|
365 |
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
|
366 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
367 |
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
|
368 |
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
|
369 |
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
|
370 |
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
|
371 |
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
|
372 |
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
|
373 |
moreover { |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
374 |
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
|
375 |
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
|
376 |
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
|
377 |
} |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
378 |
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
|
379 |
by (simp add: sums_iff) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
380 |
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
|
381 |
by (subst summable_Suc_iff) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
382 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
383 |
have "0 < \<delta>" using \<delta> by blast |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
384 |
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
|
385 |
using \<delta> by (subst Limsup_const) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
386 |
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
|
387 |
unfolding conv_radius_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
388 |
proof (intro ereal_inverse_antimono Limsup_mono |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
389 |
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
|
390 |
fix n :: nat assume n: "n > 0" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
391 |
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
|
392 |
using n assms \<delta> le summable |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
393 |
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
|
394 |
also have "\<dots> = inverse \<delta>" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
395 |
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
|
396 |
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
|
397 |
by (subst ereal_less_eq) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
398 |
next |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
399 |
have "0 = limsup (\<lambda>n. 0::ereal)" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
400 |
by (rule Limsup_const [symmetric]) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
401 |
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
|
402 |
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
|
403 |
finally show "0 \<le> \<dots>" by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
404 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
405 |
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
|
406 |
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
|
407 |
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
|
408 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
409 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
410 |
lemma fps_conv_radius_inverse_pos: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
411 |
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
|
412 |
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
|
413 |
shows "fps_conv_radius (inverse f) > 0" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
414 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
415 |
let ?c = "fps_nth f 0" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
416 |
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
|
417 |
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
|
418 |
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
|
419 |
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
|
420 |
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
|
421 |
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
|
422 |
(auto simp: fps_conv_radius_cmult_left) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
423 |
finally show ?thesis . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
424 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
425 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
426 |
end |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
427 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
428 |
lemma fps_conv_radius_exp [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
429 |
fixes c :: "'a :: {banach, real_normed_field}" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
430 |
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
|
431 |
unfolding fps_conv_radius_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
432 |
proof (rule conv_radius_inftyI'') |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
433 |
fix z :: 'a |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
434 |
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
|
435 |
by (rule exp_converges) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
436 |
also have "(\<lambda>n. norm (c * z) ^ n /\<^sub>R fact n) = (\<lambda>n. norm (fps_nth (fps_exp c) n * z ^ n))" |
71633 | 437 |
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
|
438 |
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
|
439 |
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
|
440 |
by (rule summable_norm_cancel) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
441 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
442 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
443 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
444 |
subsection \<open>Evaluating power series\<close> |
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:
68403
diff
changeset
|
446 |
theorem eval_fps_deriv: |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
447 |
assumes "norm z < fps_conv_radius f" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
448 |
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
|
449 |
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
|
450 |
|
68643
3db6c9338ec1
Tagged some more files in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
451 |
theorem fps_nth_conv_deriv: |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
452 |
fixes f :: "complex fps" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
453 |
assumes "fps_conv_radius f > 0" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
454 |
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
|
455 |
using assms |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
456 |
proof (induction n arbitrary: f) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
457 |
case 0 |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
458 |
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
|
459 |
next |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
460 |
case (Suc n f) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
461 |
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
|
462 |
unfolding funpow_Suc_right o_def .. |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
463 |
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
|
464 |
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
|
465 |
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
|
466 |
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
|
467 |
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
|
468 |
by (intro higher_deriv_cong_ev refl) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
469 |
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
|
470 |
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
|
471 |
by (intro Suc.IH [symmetric]) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
472 |
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
|
473 |
by (simp add: fps_deriv_def del: of_nat_Suc) |
70817
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
haftmann
parents:
70136
diff
changeset
|
474 |
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
|
475 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
476 |
|
68643
3db6c9338ec1
Tagged some more files in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
477 |
theorem eval_fps_eqD: |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
478 |
fixes f g :: "complex fps" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
479 |
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
|
480 |
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
|
481 |
shows "f = g" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
482 |
proof (rule fps_ext) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
483 |
fix n :: nat |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
484 |
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
|
485 |
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
|
486 |
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
|
487 |
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
|
488 |
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
|
489 |
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
|
490 |
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
|
491 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
492 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
493 |
lemma eval_fps_const [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
494 |
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
|
495 |
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
|
496 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
497 |
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
|
498 |
by (rule sums_If_finite_set) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
499 |
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
|
500 |
by (intro sums_cong) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
501 |
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
|
502 |
by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
503 |
finally show ?thesis |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
504 |
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
|
505 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
506 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
507 |
lemma eval_fps_0 [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
508 |
"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
|
509 |
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
|
510 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
511 |
lemma eval_fps_1 [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
512 |
"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
|
513 |
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
|
514 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
515 |
lemma eval_fps_numeral [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
516 |
"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
|
517 |
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
|
518 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
519 |
lemma eval_fps_X_power [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
520 |
"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
|
521 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
522 |
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
|
523 |
by (rule sums_If_finite_set) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
524 |
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
|
525 |
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
|
526 |
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
|
527 |
by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
528 |
finally show ?thesis |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
529 |
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
|
530 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
531 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
532 |
lemma eval_fps_X [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
533 |
"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
|
534 |
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
|
535 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
536 |
lemma eval_fps_minus: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
537 |
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
|
538 |
assumes "norm z < fps_conv_radius f" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
539 |
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
|
540 |
using assms unfolding eval_fps_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
541 |
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
|
542 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
543 |
lemma eval_fps_add: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
544 |
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
|
545 |
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
|
546 |
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
|
547 |
using assms unfolding eval_fps_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
548 |
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
|
549 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
550 |
lemma eval_fps_diff: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
551 |
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
|
552 |
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
|
553 |
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
|
554 |
using assms unfolding eval_fps_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
555 |
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
|
556 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
557 |
lemma eval_fps_mult: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
558 |
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
|
559 |
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
|
560 |
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
|
561 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
562 |
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
|
563 |
(\<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
|
564 |
unfolding eval_fps_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
565 |
proof (subst Cauchy_product) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
566 |
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
|
567 |
by (rule norm_summable_fps assms)+ |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
568 |
qed (simp_all add: algebra_simps) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
569 |
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
|
570 |
(\<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
|
571 |
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
|
572 |
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
|
573 |
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
|
574 |
finally show ?thesis .. |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
575 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
576 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
577 |
lemma eval_fps_shift: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
578 |
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
|
579 |
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
|
580 |
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
|
581 |
proof (cases "z = 0") |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
582 |
case False |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
583 |
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
|
584 |
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
|
585 |
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
|
586 |
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
|
587 |
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
|
588 |
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
|
589 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
590 |
lemma eval_fps_exp [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
591 |
fixes c :: "'a :: {banach, real_normed_field}" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
592 |
shows "eval_fps (fps_exp c) z = exp (c * z)" unfolding eval_fps_def exp_def |
71633 | 593 |
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
|
594 |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
595 |
text \<open> |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
596 |
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:
70817
diff
changeset
|
597 |
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:
70817
diff
changeset
|
598 |
that is available. |
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
599 |
\<close> |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
600 |
|
82400
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
601 |
subsection \<open>FPS of a polynomial\<close> |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
602 |
|
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
603 |
lemma fps_conv_radius_fps_of_poly [simp]: |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
604 |
fixes p :: "'a :: {banach, real_normed_div_algebra} poly" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
605 |
shows "fps_conv_radius (fps_of_poly p) = \<infinity>" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
606 |
proof - |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
607 |
have "conv_radius (poly.coeff p) = conv_radius (\<lambda>_. 0 :: 'a)" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
608 |
using MOST_coeff_eq_0 unfolding cofinite_eq_sequentially by (rule conv_radius_cong') |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
609 |
also have "\<dots> = \<infinity>" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
610 |
by simp |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
611 |
finally show ?thesis |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
612 |
by (simp add: fps_conv_radius_def) |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
613 |
qed |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
614 |
|
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
615 |
lemma eval_fps_power: |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
616 |
fixes F :: "'a :: {banach, real_normed_div_algebra, comm_ring_1} fps" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
617 |
assumes z: "norm z < fps_conv_radius F" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
618 |
shows "eval_fps (F ^ n) z = eval_fps F z ^ n" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
619 |
proof (induction n) |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
620 |
case 0 |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
621 |
thus ?case |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
622 |
by (auto simp: eval_fps_mult) |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
623 |
next |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
624 |
case (Suc n) |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
625 |
have "eval_fps (F ^ Suc n) z = eval_fps (F * F ^ n) z" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
626 |
by simp |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
627 |
also from z have "\<dots> = eval_fps F z * eval_fps (F ^ n) z" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
628 |
by (subst eval_fps_mult) (auto intro!: less_le_trans[OF _ fps_conv_radius_power]) |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
629 |
finally show ?case |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
630 |
using Suc.IH by simp |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
631 |
qed |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
632 |
|
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
633 |
lemma eval_fps_of_poly [simp]: "eval_fps (fps_of_poly p) z = poly p z" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
634 |
proof - |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
635 |
have "(\<lambda>n. poly.coeff p n * z ^ n) sums poly p z" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
636 |
unfolding poly_altdef by (rule sums_finite) (auto simp: coeff_eq_0) |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
637 |
moreover have "(\<lambda>n. poly.coeff p n * z ^ n) sums eval_fps (fps_of_poly p) z" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
638 |
using sums_eval_fps[of z "fps_of_poly p"] by simp |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
639 |
ultimately show ?thesis |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
640 |
using sums_unique2 by blast |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
641 |
qed |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
642 |
|
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
643 |
lemma poly_holomorphic_on [holomorphic_intros]: |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
644 |
assumes [holomorphic_intros]: "f holomorphic_on A" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
645 |
shows "(\<lambda>z. poly p (f z)) holomorphic_on A" |
24d09a911713
Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents:
82338
diff
changeset
|
646 |
unfolding poly_altdef by (intro holomorphic_intros) |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
647 |
|
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
648 |
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
|
649 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
650 |
text \<open> |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
651 |
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
|
652 |
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
|
653 |
function there. |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
654 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
655 |
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
|
656 |
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
|
657 |
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
|
658 |
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
|
659 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
660 |
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
|
661 |
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
|
662 |
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
|
663 |
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
|
664 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
665 |
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
|
666 |
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
|
667 |
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
|
668 |
is enough. |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
669 |
\<close> |
70136 | 670 |
definition\<^marker>\<open>tag important\<close> |
68643
3db6c9338ec1
Tagged some more files in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
671 |
has_fps_expansion :: "('a :: {banach,real_normed_div_algebra} \<Rightarrow> 'a) \<Rightarrow> 'a fps \<Rightarrow> bool" |
80914
d97fdabd9e2b
standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents:
77221
diff
changeset
|
672 |
(infixl \<open>has'_fps'_expansion\<close> 60) |
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
673 |
where "(f has_fps_expansion F) \<longleftrightarrow> |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
674 |
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
|
675 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
676 |
named_theorems fps_expansion_intros |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
677 |
|
77221
0cdb384bf56a
More new theorems from the number theory development
paulson <lp15@cam.ac.uk>
parents:
71633
diff
changeset
|
678 |
lemma has_fps_expansion_schematicI: |
0cdb384bf56a
More new theorems from the number theory development
paulson <lp15@cam.ac.uk>
parents:
71633
diff
changeset
|
679 |
"f has_fps_expansion A \<Longrightarrow> A = B \<Longrightarrow> f has_fps_expansion B" |
0cdb384bf56a
More new theorems from the number theory development
paulson <lp15@cam.ac.uk>
parents:
71633
diff
changeset
|
680 |
by simp |
0cdb384bf56a
More new theorems from the number theory development
paulson <lp15@cam.ac.uk>
parents:
71633
diff
changeset
|
681 |
|
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
682 |
lemma fps_nth_fps_expansion: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
683 |
fixes f :: "complex \<Rightarrow> complex" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
684 |
assumes "f has_fps_expansion F" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
685 |
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
|
686 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
687 |
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
|
688 |
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
|
689 |
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
|
690 |
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
|
691 |
finally show ?thesis . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
692 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
693 |
|
82541
5160b68e78a9
some material on power series and infinite products
Manuel Eberl <eberlm@in.tum.de>
parents:
82533
diff
changeset
|
694 |
lemma eval_fps_has_fps_expansion: |
5160b68e78a9
some material on power series and infinite products
Manuel Eberl <eberlm@in.tum.de>
parents:
82533
diff
changeset
|
695 |
"fps_conv_radius F > 0 \<Longrightarrow> eval_fps F has_fps_expansion F" |
5160b68e78a9
some material on power series and infinite products
Manuel Eberl <eberlm@in.tum.de>
parents:
82533
diff
changeset
|
696 |
unfolding has_fps_expansion_def by simp |
5160b68e78a9
some material on power series and infinite products
Manuel Eberl <eberlm@in.tum.de>
parents:
82533
diff
changeset
|
697 |
|
68721 | 698 |
lemma has_fps_expansion_imp_continuous: |
699 |
fixes F :: "'a::{real_normed_field,banach} fps" |
|
700 |
assumes "f has_fps_expansion F" |
|
701 |
shows "continuous (at 0 within A) f" |
|
702 |
proof - |
|
703 |
from assms have "isCont (eval_fps F) 0" |
|
704 |
by (intro continuous_eval_fps) (auto simp: has_fps_expansion_def zero_ereal_def) |
|
705 |
also have "?this \<longleftrightarrow> isCont f 0" using assms |
|
706 |
by (intro isCont_cong) (auto simp: has_fps_expansion_def) |
|
707 |
finally have "isCont f 0" . |
|
708 |
thus "continuous (at 0 within A) f" |
|
709 |
by (simp add: continuous_at_imp_continuous_within) |
|
710 |
qed |
|
711 |
||
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
712 |
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
|
713 |
"(\<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
|
714 |
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 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
716 |
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
|
717 |
"(\<lambda>_. 0) has_fps_expansion 0" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
718 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
719 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
720 |
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
|
721 |
"(\<lambda>_. 1) has_fps_expansion 1" |
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 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
724 |
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
|
725 |
"(\<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
|
726 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
727 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
728 |
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
|
729 |
"(\<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
|
730 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
731 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
732 |
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
|
733 |
"(\<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
|
734 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
735 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
736 |
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
|
737 |
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
|
738 |
assumes "f has_fps_expansion F" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
739 |
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
|
740 |
proof (cases "c = 0") |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
741 |
case False |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
742 |
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
|
743 |
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
|
744 |
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
|
745 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
746 |
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
|
747 |
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
|
748 |
with assms and False show ?thesis |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
749 |
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
|
750 |
qed auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
751 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
752 |
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
|
753 |
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
|
754 |
assumes "f has_fps_expansion F" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
755 |
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
|
756 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
757 |
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
|
758 |
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
|
759 |
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
|
760 |
by (simp add: mult.commute) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
761 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
762 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
763 |
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
|
764 |
assumes "f has_fps_expansion F" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
765 |
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
|
766 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
767 |
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
|
768 |
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
|
769 |
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
|
770 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
771 |
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
|
772 |
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
|
773 |
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
|
774 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
775 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
776 |
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
|
777 |
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
|
778 |
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
|
779 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
780 |
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
|
781 |
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 |
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
|
783 |
by (rule fps_conv_radius_add) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
784 |
finally have radius: "\<dots> > 0" . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
785 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
786 |
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
|
787 |
"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
|
788 |
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
|
789 |
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
|
790 |
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
|
791 |
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
|
792 |
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
|
793 |
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
|
794 |
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
|
795 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
796 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
797 |
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
|
798 |
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
|
799 |
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
|
800 |
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
|
801 |
by (simp add: has_fps_expansion_minus) |
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_mult [fps_expansion_intros]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
804 |
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
|
805 |
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
|
806 |
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
|
807 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
808 |
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
|
809 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
810 |
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
|
811 |
by (rule fps_conv_radius_mult) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
812 |
finally have radius: "\<dots> > 0" . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
813 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
814 |
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
|
815 |
"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
|
816 |
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
|
817 |
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
|
818 |
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
|
819 |
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
|
820 |
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
|
821 |
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
|
822 |
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
|
823 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
824 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
825 |
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
|
826 |
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
|
827 |
assumes "f has_fps_expansion F" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
828 |
assumes "fps_nth F 0 \<noteq> 0" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
829 |
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
|
830 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
831 |
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
|
832 |
using assms unfolding has_fps_expansion_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
833 |
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
|
834 |
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
|
835 |
from assms radius |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
836 |
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
|
837 |
"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
|
838 |
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
|
839 |
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
|
840 |
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
|
841 |
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
|
842 |
proof eventually_elim |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
843 |
case (elim z) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
844 |
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
|
845 |
by (subst eval_fps_mult) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
846 |
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
|
847 |
using assms by (simp add: inverse_mult_eq_1) |
70817
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
haftmann
parents:
70136
diff
changeset
|
848 |
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
|
849 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
850 |
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
|
851 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
852 |
|
82533
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
853 |
lemma has_fps_expansion_sum [fps_expansion_intros]: |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
854 |
assumes "\<And>x. x \<in> A \<Longrightarrow> f x has_fps_expansion F x" |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
855 |
shows "(\<lambda>z. \<Sum>x\<in>A. f x z) has_fps_expansion (\<Sum>x\<in>A. F x)" |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
856 |
using assms by (induction A rule: infinite_finite_induct) (auto intro!: fps_expansion_intros) |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
857 |
|
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
858 |
lemma has_fps_expansion_prod [fps_expansion_intros]: |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
859 |
fixes F :: "'a \<Rightarrow> 'b :: {banach, real_normed_div_algebra, comm_ring_1} fps" |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
860 |
assumes "\<And>x. x \<in> A \<Longrightarrow> f x has_fps_expansion F x" |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
861 |
shows "(\<lambda>z. \<Prod>x\<in>A. f x z) has_fps_expansion (\<Prod>x\<in>A. F x)" |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
862 |
using assms by (induction A rule: infinite_finite_induct) (auto intro!: fps_expansion_intros) |
42964a5121a9
more about formal convergence of power series
Manuel Eberl <manuel@pruvisto.org>
parents:
82529
diff
changeset
|
863 |
|
66480
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
864 |
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
|
865 |
fixes c :: "'a :: {banach, real_normed_field}" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
866 |
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
|
867 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
868 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
869 |
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
|
870 |
"(\<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
|
871 |
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
|
872 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
873 |
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
|
874 |
"(\<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
|
875 |
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
|
876 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
877 |
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
|
878 |
assumes "f has_fps_expansion F" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
879 |
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
|
880 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
881 |
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
|
882 |
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
|
883 |
(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
|
884 |
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
|
885 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
886 |
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
|
887 |
by (auto simp: eventually_nhds) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
888 |
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
|
889 |
by (intro eventually_nhds_in_open) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
890 |
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
|
891 |
proof eventually_elim |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
892 |
case (elim z) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
893 |
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
|
894 |
by (simp add: eval_fps_deriv) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
895 |
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
|
896 |
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
|
897 |
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
|
898 |
by eventually_elim (simp add: s) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
899 |
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
|
900 |
by (intro deriv_cong_ev refl) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
901 |
finally show ?case . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
902 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
903 |
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
|
904 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
905 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
906 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
907 |
lemma fps_conv_radius_binomial: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
908 |
fixes c :: "'a :: {real_normed_field,banach}" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
909 |
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
|
910 |
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
|
911 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
912 |
lemma fps_conv_radius_ln: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
913 |
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
|
914 |
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
|
915 |
proof (cases "c = 0") |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
916 |
case False |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
917 |
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
|
918 |
proof (rule conv_radius_ratio_limit_nonzero) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
919 |
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
|
920 |
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
|
921 |
qed auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
922 |
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
|
923 |
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
|
924 |
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
|
925 |
(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
|
926 |
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
|
927 |
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
|
928 |
qed (auto simp: fps_ln_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
929 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
930 |
lemma fps_conv_radius_ln_nonzero [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
931 |
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
|
932 |
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
|
933 |
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
|
934 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
935 |
lemma fps_conv_radius_sin [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
936 |
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
|
937 |
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
|
938 |
proof (cases "c = 0") |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
939 |
case False |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
940 |
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
|
941 |
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
|
942 |
case (1 z) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
943 |
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
|
944 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
945 |
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
|
946 |
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
|
947 |
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
|
948 |
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
|
949 |
finally show ?thesis by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
950 |
qed simp_all |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
951 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
952 |
lemma fps_conv_radius_cos [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
953 |
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
|
954 |
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
|
955 |
proof (cases "c = 0") |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
956 |
case False |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
957 |
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
|
958 |
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
|
959 |
case (1 z) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
960 |
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
|
961 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
962 |
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
|
963 |
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
|
964 |
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
|
965 |
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
|
966 |
finally show ?thesis by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
967 |
qed simp_all |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
968 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
969 |
lemma eval_fps_sin [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
970 |
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
|
971 |
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
|
972 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
973 |
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
|
974 |
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
|
975 |
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
|
976 |
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
|
977 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
978 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
979 |
lemma eval_fps_cos [simp]: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
980 |
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
|
981 |
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
|
982 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
983 |
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
|
984 |
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
|
985 |
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
|
986 |
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
|
987 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
988 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
989 |
lemma cos_eq_zero_imp_norm_ge: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
990 |
assumes "cos (z :: complex) = 0" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
991 |
shows "norm z \<ge> pi / 2" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
992 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
993 |
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
|
994 |
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
|
995 |
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
|
996 |
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
|
997 |
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
|
998 |
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
|
999 |
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
|
1000 |
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
|
1001 |
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
|
1002 |
finally show ?thesis by simp |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1003 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1004 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1005 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1006 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1007 |
lemma eval_fps_binomial: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1008 |
fixes c :: complex |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1009 |
assumes "norm z < 1" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1010 |
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
|
1011 |
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
|
1012 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1013 |
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
|
1014 |
fixes c :: complex |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1015 |
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
|
1016 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1017 |
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
|
1018 |
by (intro eventually_nhds_in_open) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1019 |
thus ?thesis |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1020 |
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
|
1021 |
intro!: eventually_mono [OF *]) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1022 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1023 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1024 |
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
|
1025 |
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
|
1026 |
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
|
1027 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1028 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1029 |
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
|
1030 |
"(\<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
|
1031 |
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
|
1032 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1033 |
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
|
1034 |
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
|
1035 |
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
|
1036 |
by (auto simp: has_fps_expansion_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1037 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1038 |
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
|
1039 |
"(\<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
|
1040 |
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
|
1041 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1042 |
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
|
1043 |
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
|
1044 |
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
|
1045 |
assumes "c = fps_nth F n" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1046 |
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
|
1047 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1048 |
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
|
1049 |
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
|
1050 |
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
|
1051 |
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
|
1052 |
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
|
1053 |
(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
|
1054 |
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
|
1055 |
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
|
1056 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1057 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1058 |
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
|
1059 |
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
|
1060 |
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
|
1061 |
"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
|
1062 |
"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
|
1063 |
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
|
1064 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1065 |
define n where "n = subdegree G" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1066 |
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
|
1067 |
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
|
1068 |
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
|
1069 |
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
|
1070 |
by (simp add: G'_def n_def) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1071 |
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
|
1072 |
by (simp add: fps_divide_unit) |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1073 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1074 |
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
|
1075 |
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
|
1076 |
(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
|
1077 |
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
|
1078 |
has_fps_expansion_shift assms) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1079 |
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
|
1080 |
using assms(5) unfolding n_def |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1081 |
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
|
1082 |
finally show ?thesis . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1083 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1084 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1085 |
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
|
1086 |
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
|
1087 |
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
|
1088 |
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
|
1089 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1090 |
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
|
1091 |
(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
|
1092 |
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
|
1093 |
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
|
1094 |
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
|
1095 |
finally show ?thesis . |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1096 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1097 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1098 |
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
|
1099 |
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
|
1100 |
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
|
1101 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1102 |
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
|
1103 |
by (intro fps_expansion_intros) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1104 |
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
|
1105 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1106 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1107 |
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
|
1108 |
"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
|
1109 |
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
|
1110 |
|
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1111 |
lemma has_fps_expansion_imp_holomorphic: |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1112 |
assumes "f has_fps_expansion F" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1113 |
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
|
1114 |
proof - |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1115 |
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
|
1116 |
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
|
1117 |
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
|
1118 |
have "eval_fps F holomorphic_on ?s'" |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1119 |
by (intro holomorphic_intros) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1120 |
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
|
1121 |
using s by (intro holomorphic_cong) auto |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1122 |
finally show ?thesis using s assms |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1123 |
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
|
1124 |
qed |
4b8d1df8933b
HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff
changeset
|
1125 |
|
82338 | 1126 |
lemma has_fps_expansionI: |
1127 |
fixes f :: "'a :: {banach, real_normed_div_algebra} \<Rightarrow> 'a" |
|
1128 |
assumes "eventually (\<lambda>u. (\<lambda>n. fps_nth F n * u ^ n) sums f u) (nhds 0)" |
|
1129 |
shows "f has_fps_expansion F" |
|
1130 |
proof - |
|
1131 |
from assms obtain X where X: "open X" "0 \<in> X" "\<And>u. u \<in> X \<Longrightarrow> (\<lambda>n. fps_nth F n * u ^ n) sums f u" |
|
1132 |
unfolding eventually_nhds by blast |
|
1133 |
obtain r where r: "r > 0" "cball 0 r \<subseteq> X" |
|
1134 |
using X(1,2) open_contains_cball by blast |
|
1135 |
have "0 < norm (of_real r :: 'a)" |
|
1136 |
using r(1) by simp |
|
1137 |
also have "fps_conv_radius F \<ge> norm (of_real r :: 'a)" |
|
1138 |
unfolding fps_conv_radius_def |
|
1139 |
proof (rule conv_radius_geI) |
|
1140 |
have "of_real r \<in> X" |
|
1141 |
using r by auto |
|
1142 |
from X(3)[OF this] show "summable (\<lambda>n. fps_nth F n * of_real r ^ n)" |
|
1143 |
by (simp add: sums_iff) |
|
1144 |
qed |
|
1145 |
finally have "fps_conv_radius F > 0" |
|
1146 |
by (simp_all add: zero_ereal_def) |
|
1147 |
moreover have "(\<forall>\<^sub>F z in nhds 0. eval_fps F z = f z)" |
|
1148 |
using assms by eventually_elim (auto simp: sums_iff eval_fps_def) |
|
1149 |
ultimately show ?thesis |
|
1150 |
unfolding has_fps_expansion_def .. |
|
1151 |
qed |
|
1152 |
||
1153 |
lemma fps_mult_numeral_left [simp]: "fps_nth (numeral c * f) n = numeral c * fps_nth f n" |
|
1154 |
by (simp add: fps_numeral_fps_const) |
|
1155 |
||
71189
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
1156 |
end |