src/HOL/Analysis/FPS_Convergence.thy
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--
HOL: minor additions regarding linear algebra
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
dc20f278e8f3 tuned style and headers
nipkow
parents: 68721
diff changeset
     8
section \<open>Convergence of Formal Power Series\<close>
dc20f278e8f3 tuned style and headers
nipkow
parents: 68721
diff changeset
     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
f03a01a18c6e modernized tags: default scope excludes proof;
wenzelm
parents: 70113
diff changeset
    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
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69517
diff changeset
    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
f03a01a18c6e modernized tags: default scope excludes proof;
wenzelm
parents: 70113
diff changeset
    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
f03a01a18c6e modernized tags: default scope excludes proof;
wenzelm
parents: 70113
diff changeset
    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
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   174
lemma continuous_eval_fps [continuous_intros]:
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   175
  fixes z :: "'a::{real_normed_field,banach}"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   176
  assumes "norm z < fps_conv_radius F"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   177
  shows   "continuous (at z within A) (eval_fps F)"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   178
proof -
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   179
  from ereal_dense2[OF assms] obtain K :: real where K: "norm z < K" "K < fps_conv_radius F"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   180
    by auto
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   181
  have "0 \<le> norm z" by simp
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   182
  also have "norm z < K" by fact
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   183
  finally have "K > 0" .
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   184
  from K and \<open>K > 0\<close> have "summable (\<lambda>n. fps_nth F n * of_real K ^ n)"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   185
    by (intro summable_fps) auto
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   186
  from this have "isCont (eval_fps F) z" unfolding eval_fps_def
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   187
    by (rule isCont_powser) (use K in auto)
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   188
  thus "continuous (at z within A)  (eval_fps F)"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   189
    by (simp add: continuous_at_imp_continuous_within)
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   190
qed
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   191
66480
4b8d1df8933b HOL-Analysis: Convergent FPS and infinite sums
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   192
70136
f03a01a18c6e modernized tags: default scope excludes proof;
wenzelm
parents: 70113
diff changeset
   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
223172b97d0b reorient -> split; documented split
nipkow
parents: 68046
diff changeset
   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
07bec530f02e cleaned proofs
nipkow
parents: 71189
diff changeset
   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
07bec530f02e cleaned proofs
nipkow
parents: 71189
diff changeset
   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
f03a01a18c6e modernized tags: default scope excludes proof;
wenzelm
parents: 70113
diff changeset
   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
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   698
lemma has_fps_expansion_imp_continuous:
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   699
  fixes F :: "'a::{real_normed_field,banach} fps"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   700
  assumes "f has_fps_expansion F"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   701
  shows   "continuous (at 0 within A) f"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   702
proof -
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   703
  from assms have "isCont (eval_fps F) 0"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   704
    by (intro continuous_eval_fps) (auto simp: has_fps_expansion_def zero_ereal_def)
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   705
  also have "?this \<longleftrightarrow> isCont f 0" using assms
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   706
    by (intro isCont_cong) (auto simp: has_fps_expansion_def)
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   707
  finally have "isCont f 0" .
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   708
  thus "continuous (at 0 within A) f"
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   709
    by (simp add: continuous_at_imp_continuous_within)
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   710
qed
53ad5c01be3f Small lemmas about analysis
eberlm <eberlm@in.tum.de>
parents: 68643
diff changeset
   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
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1126
lemma has_fps_expansionI:
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1127
  fixes f :: "'a :: {banach, real_normed_div_algebra} \<Rightarrow> 'a"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1128
  assumes "eventually (\<lambda>u. (\<lambda>n. fps_nth F n * u ^ n) sums f u) (nhds 0)"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1129
  shows   "f has_fps_expansion F"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1130
proof -
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  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"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1132
    unfolding eventually_nhds by blast
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1133
  obtain r where r: "r > 0" "cball 0 r \<subseteq> X"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1134
    using X(1,2) open_contains_cball by blast
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1135
  have "0 < norm (of_real r :: 'a)"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1136
    using r(1) by simp
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1137
  also have "fps_conv_radius F \<ge> norm (of_real r :: 'a)"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1138
    unfolding fps_conv_radius_def
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1139
  proof (rule conv_radius_geI)
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1140
    have "of_real r \<in> X"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1141
      using r by auto
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1142
    from X(3)[OF this] show "summable (\<lambda>n. fps_nth F n * of_real r ^ n)"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1143
      by (simp add: sums_iff)
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1144
  qed
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1145
  finally have "fps_conv_radius F > 0"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1146
    by (simp_all add: zero_ereal_def)
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1147
  moreover have "(\<forall>\<^sub>F z in nhds 0. eval_fps F z = f z)"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1148
    using assms by eventually_elim (auto simp: sums_iff eval_fps_def)
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1149
  ultimately show ?thesis
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1150
    unfolding has_fps_expansion_def ..
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1151
qed
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1152
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1153
lemma fps_mult_numeral_left [simp]: "fps_nth (numeral c * f) n = numeral c * fps_nth f n"
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  1154
  by (simp add: fps_numeral_fps_const)
1eb12389c499 New material by Manuel Eberl
paulson <lp15@cam.ac.uk>
parents: 80914
diff changeset
  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