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