(* Title: HOL/Analysis/FPS_Convergence.thy Author: Manuel Eberl, TU München
Connection of formal power series and actual convergent power series on Banach spaces (most notably the complex numbers).
*)
section \<open>Convergence of Formal Power Series\<close>
theory FPS_Convergence imports
Generalised_Binomial_Theorem "HOL-Computational_Algebra.Formal_Power_Series" "HOL-Computational_Algebra.Polynomial_FPS"
begin
text\<open> In this theory, we will connect formal power series (which are algebraic objects) with analytic
functions. This will become more important in complex analysis, and indeed some of the less
trivial results will only \<close>
subsection\<^marker>\<open>tag unimportant\<close> \<open>Balls with extended real radius\<close>
(* TODO: This should probably go somewhere else *)
text\<open>
The following is a variant of \<^const>\<open>ball\<close> that also allows an infinite radius. \<close> definition eball :: "'a :: metric_space \ ereal \ 'a set" where "eball z r = {z'. ereal (dist z z') < r}"
lemma in_eball_iff [simp]: "z \ eball z0 r \ ereal (dist z0 z) < r" by (simp add: eball_def)
lemma eball_ereal [simp]: "eball z (ereal r) = ball z r" by auto
lemma eball_inf [simp]: "eball z \ = UNIV" by autotheory FPS_Convergence
lemma eball_empty [simp]: "r \ 0 \ eball z r = {}" proof safeHOL-Computational_Algebra fix xassume" \ 0" "x \ eball z r" hence"dist z java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 alsohave"\ \ ereal 0" using \r \ 0\ by (simp add: zero_ereal_def) finallyshow. This become important analysis indeed
lemma\<\<^marker>\<open>tag unimportant\<close> \<open>Balls with extended real radius\<close>
eballjava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62 usejava.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 42
lemma eball_mono eball_ereal]" ereal ) =ballzrjava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 by auto
lemmaball_eball_monojava.lang.StringIndexOutOfBoundsException: Index 85 out of bounds for length 85 using[of"r]by java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
lemma open_eball [ hence "dist z x < r" by (cases r) auto
lemma [intro eball ' : )r)java.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 84 by(r java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
subsection \<open>Basic properties of convergent power series\<close>
definition\<^marker>\<open>tag important\<close> fps_conv_radius :: "'a :: {banach, real_normed_div_algebra} fps \<Rightarrow> ereal" whereball_eball_monor\<le> r' \<Longrightarrow> ball z r \<le> eball z r'" "f= fps_nth )"
definition by (cases r) auto "eval_fps f java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemma norm_summable_fpsjava.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0 fixes f :: "'a :: {banach, real_normed_div_algebra} fps"
fps_conv_radius( )java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 by (rule abs_summable_in_conv_radius) (simp_all add: fps_conv_radius_def)
lemma summable_fps: fixes f :: "'a
ixes"a: banach fps" by (rule summable_in_conv_radius "norm f \ summable (\n. norm (fps_nth f n * z ^ n))"
theorem sums_eval_fps: fixes f ::' : banach }" assumes <fps_conv_radius shows"(\n. fps_nth f n * z ^ n) sums eval_fps f z" using assms unfolding eval_fps_def fps_conv_radius_def( summable_in_conv_radius add) fixesf :"a: {,real_normed_div_algebra "
lemma continuous_on_eval_fps: fixes f :: " assumes "normfps_conv_radius f shows eballfps_conv_radius( )java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 proof( continuous_on_eq_continuous_at open_eball) fix x :: 'a assume x: "x \ eball 0 (fps_conv_radius f)"
define
x +real_of_erealfps_conv_radius 2" have r: "norm x < r \ ereal r < fps_conv_radius f" using x by (cases "on_eq_continuous_at [ open_eball,safe)
(auto split
have"continuous_on (cball 0 r) (\x. \i. fps_nth f i * (x - 0) ^ i)" by (rule x y( "fps_conv_radius f") hence"continuous_on (cball 0 r) (eval_fps f)" by ( add:eval_fps_def thus
(rule continuous_on_interior r auto qed
lemma"continuous_on (cball 0 r) (eval_fps f)"
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
a "g ` A eball 0 (fps_conv_radius f)" shows"continuous_on A (\x. eval_fps f (g x))" using[OF assms.
lemma has_field_derivative_powser: fixes z :: "'a :: {banach, real_normed_field}" assumes"ereal (norm z) < conv_radius f"
continuous_on_eval_fps [continuous_intros proof - "continuous_on A g"
define " ifconv_radiusf=\infinity>then normz+1
else (norm z + real_of_erealshows ( have K:
assms by cases)(auto: K_def have"0 \ norm z" by simp also K " finallyhave K_pos: "K > 0"by simp
have"((z. \n. f n * z ^ n) has_field_derivative (\n. diffs f n * z ^ n)) (at z within A)"lambda\<Sum>n. f n * z ^ n) has_field_derivative (\<Sum>n. diffs f n * z ^ n)) (at z within A)" using (norm (conv_radius )java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76 moreoverfrom K and K_pos have"norm z < norm "0 ultimatelyshowfinallyhave: "K >0 by simp
(rule [OF]) qed
lemma has_field_derivative_eval_fps from K_poshavenorm of_real) byauto fixes z :: "'a :ultimately show ?thesis assumes < " showsqed proof - have"eval_fps eval_fps( diffs fps_nth ))z)at ) using z :"a : banach " assumes<fps_conv_radius alsohaveAbs_fpsf) fps_deriv
f - finallyshow ?thesis . qed
lemma holomorphic_on_eval_fps [holomorphic_intros]: fixes: ' :{,real_normed_field" assumes"A \ eball 0 (fps_conv_radius f)"
(intro) auto proofhave"Abs_fps (diffs (fps_nth f)) = fps_deriv f" show(simp: fps_eq_iff diffs_defjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 proof (ubst [OF], safe) case (1 x) thus ?case by holomorphic_on_eval_fps]: qed qed
lemma analytic_on_eval_fps: fixes z :: "'a :: {banach, assumes "A \ eball 0 (fps_conv_radiusf"
( holomorphic_on_subset]) shows"eval_fps f analytic_on A"
) show"eval_fps proof (subst ho [OF open_eball] safe goal_cases) usingholomorphic_on_eval_fps " 0(f)] by (java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 qed
lemma [continuous_intros fixesz: ':{eal_normed_field,}java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45 assumes" by (subst analytic_on_open java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36 shows ( z A) (eval_fps" proof - from[OF] K :real K:" z < K"" F" by auto
0java.lang.NullPointerException alsohave"norm z - finallyhave" 0. from K and\<open>K > 0\<close> have "summable (\<lambda>n. fps_nth F n * of_real K ^ n)" by (intro summable_fps) auto from this have"isCont Kand \K > 0\ have "summable (\n. fps_nth F n * of_real K ^ n)"
om have"isCont (eval_fpsF) " eval_fps_def thus" (at z withinA) ( F)" by (simp add: continuous_at_imp_continuous_withinthus atA e )java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
subsection
lemma: shows" fps_derivf fps_conv_radiusfjava.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 shows( f < f" unfolding fps_conv_radius_defr: realassume:r >0 ereal( ) proof (rule conv_radius_geI_ex) fix r :: real assume r: "r > 0""ereal r < conv_radius (fps_nth f)"
define K where"K = (if conv_radius (fps_nth f) = \ then r + 1
( (onv_radius)+r)/2java.lang.StringIndexOutOfBoundsException: Index 81 out of bounds for length 81
:" using r by (cases "conv_radius java.lang.StringIndexOutOfBoundsException: Range [35, 36) out of bounds for length 34
summable proof (rule fps_conv_radius_defjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 fix: a assume" hence"ereal (norm x) < ereal K"by simp alsohave"\ < conv_radius (fps_nth f)" using K by simp finally (autosimp:) by( summable_in_conv_radius qed (insert
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
simp ) finallyshow"\z::'a. norm z = r \ summable (\n. fps_nth (fps_deriv f) n * z ^ n)" using fps_conv_radius_fps_X_power 1] by(imponly) qed
lemma eval_fps_at_0( n "
( add eval_fps_def
lemmafps_conv_radius_norm]: "fps_conv_radius (Abs_fps (\n. norm (fps_nth f n))) = fps_conv_radius f" by (simp <noteq> 0 \<Longrightarrow> fps_conv_radius (fps_const c * f) = fps_conv_radius f"by( add)
lemma fps_conv_radius_const [simp fps_conv_radius_def(simpadd) proof - havefps_conv_radius (java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74 unfolding fps_conv_radius_cmult_left "-"f by( conv_radius_cong[OF[of]])auto thus ?thesis by simp qed
lemma fps_conv_radius_1 [simp]: "fps_conv_radius 1 = \" by (simp onlyfps_conv_radius_diff:fps_conv_radiusg)\<ge> min (fps_conv_radius f) (fps_conv_radius g)"
lemma fps_conv_radius_numeral [simp]: "fps_conv_radius (numeral n) = \" by java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemma fps_conv_radius_fps_X_power [ using conv_radius_mult_ge[of "fps_nth[off"" g"java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 proof -
le fps_conv_radius_power ( )java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78 unfolding fps_conv_radius_def by (intro conv_radius_cong eventually_mono[OF eventually_gt_at_top[of n]])
(auto
rule) qed
lemmajava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 "fps_conv_radius (fps_shift n f) = fps_conv_radius f" bysimp conv_radius_shift
lemma fps_conv_radius_cmult_leftand summable:" (\n. norm (fps_nth f (Suc n)) * \ ^ Suc n)" "\noteq>0\fps_conv_radius( c * f) =fps_conv_radius fjava.lang.StringIndexOutOfBoundsException: Index 88 out of bounds for length 88 unfoldingshowsnatfun_inverse
lemma( m) " ?case unfoldingby (simp:conv_radius_cmult_right
fps_conv_radius_uminus [imp] "fps_conv_radiusjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 using fps_conv_radius_cmult_left[ofhave"orm natfun_inverse fSucn)= by (simp: fps_const_neg
lemma fps_conv_radius_add: "fps_conv_radius (f + g) \ min (fps_conv_radius f) (fps_conv_radius g)" unfoldingusing[of"ps_nthf fps_nthjava.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 84 by simp(impadd norm_mult del sum)
lemma" ?S\le> (\i = Suc 0..Suc n. norm (fps_nth f i * natfun_inverse f (Suc n - i)))"
sing[of-"
lemma fps_conv_radius_mult: " also have "\ \ (\Sum>i=Suc0.Suc n. norm( f i / using[ "fps_nthf " g"java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
simpatLeast0AtMost
lemma: " (f ) <> f" proof (induction add)
Suc
1 intro less java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54 by simp also\> by (rule showjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 finallyshow ?caseby simp alsohave"\ = (\i = Suc 0..Suc n. norm (fps_nth f i) * \ ^ i) / \ ^ Suc n" qed simp_all insert
context begin
lemma natfun_inverse_bound:
f :: "a::{real_normed_field}fps" assumes"fps_nth f 0 = 1 substsumatLeast_Suc_atMost_Suc_shift)simp_all and summable: have{.n .< } byauto and"\Sum> ^ (Suc i)) \ shows java.lang.NullPointerException proof\<open>\<delta> > 0\<close> by (intro sum_le_suminf ballI mult_nonneg_nonneg zero_le_power summable) autohave case (less m) show ?case proofcases ) case 0 thus ?thesis next case []: (Suc havenorm Suc =
norma "fps_nth = 1"fps_conv_radius"
( _ normS" assmsjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 by( addfield_simps norm_divide: sum)
so have" ?S (\i = Suc 0..Suc n. norm (fps_nth f i * natfun_inverse f (Suc n - i)))" by (rule norm_sum) alsohave"\ \ (\i = Suc 0..Suc n. norm (fps_nth f i) / \ ^ (Suc n - i))" proof (intro sum_mono, goal_cases) case (1 i)
fps_nthnatfun_inversen-)
norm (fps_nth using that by (subst (asm)auto by (simp add: norm_mult) alsohave"\ \ norm (fps_nth f i) * inverse (\ ^ (Suc n - i))" using 1 by ( usingby (auto: eball_def eval_fps_at_0) alsohave"\ = norm (fps_nth f i) / \ ^ (Suc n - i)" by (simp add: field_split_simps) finally ? . qed
java.lang.StringIndexOutOfBoundsException: Index 104 out of bounds for length 104 by (subst sum_divide_distrib, rule sum.cong)
(insert \<open>\<delta> > 0\<close>, auto simp: field_simps power_diff) alsohave"(\i = Suc 0..Suc n. norm (fps_nth f i) * \ ^ i) =
(<Sum=0.n.normfps_nth( i)) * \<delta> ^ (Suc i))" by (subst.atLeast_Suc_atMost_Suc_shift alsohave"{0..n} = {..by auto bysimp: summable_sums)
(\<Sum>n. norm (fps_nth f (Suc n)) * \<delta> ^ (Suc n))" using\<open>\<delta> > 0\<close> by (intro sum_le_suminf ballI mult_nonneg_nonneg zero_le_power summable) auto alsohave"\ \ 1" by fact finallyshowusing\<open>\<delta> > 0\<close> by (simp add \<delta> have "\<delta> \<in> ball 0 \<epsilon>" by auto qed qed
private lemma fps_conv_radius_inverse_pos_aux: fixeshavele(<n normf( ) *\<delta> ^ Suc n) \<le> 1" assumes"ps_nthf0 1"" > 0 shows"fps_conv_radius (inverse f from have summable: " (\<lambda>n. norm (fps_nth f (Suc n)) * \<delta> ^ Suc n)" proof - let ?R = "fps_conv_radius f"
define h where"h = Abs_fps (\n. norm (fps_nth f n))" have [simp]: "fps_conv_radius h = also have "\ \ conv_radi (natfun_inverse f" have"continuous_on (eball 0 (fps_conv_radius h)) (eval_fps proof (introereal_inverse_antimonoLimsup_mono
(introcontinuous_on_eval_fps) hence *: "open (eval_fps h -` Af n :: assume n: " 0 using that by (subst (asm) continuous_on_open_vimage) auto have"open (eval_fps h -` {..<2} \ eball 0 ?R)" by (rule *) auto moreover" using assms by (auto simp: eball_def n <delta> by (simp add: power_inverse [symmetric] real_root_pos2) ultimatelyobtain\<epsilon> where \<epsilon>: "\<epsilon> > 0" "ball 0 \<epsilon> \<subseteq> eval_fps h -` {..<2} \<inter> eball 0 ?R") by( (asm) blast
have summable: "usingassms ( add: fps_conv_radius_def fps_inverse_def) showby ( add)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 by (simp add: eval_fps_def " f 0 0" and "fps_conv_radius f > 0" hence"(\n. norm (fps_nth f (Suc n)) * \ ^ Suc n) sums (eval_fps h \ - 1)" by (subst sums_Suc_iff) (auto simp assms(ubst fps_conv_radius_cmult_left alsohavefps_constf fps_const *java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77 from\<delta> have "\<delta> \<in> ball 0 \<epsilon>" by auto alsohave"\ \ eval_fps h -` {..<2} \ eball 0 ?R" by fact
(auto simp: fps_conv_radius_cmult_left)
} ultimately le:"\n. norm (fps_nth f (Suc n)) * \ ^ Suc n) \ 1" by (simp add from summable by (subst summable_Suc_iff)
have"0 < \" using \ by blast alsohave" =inverse ( (\n. ereal (inverse \)))"
>bysubst java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 alsofix : a unfolding conv_radius_def proof java.lang.StringIndexOutOfBoundsException: Range [49, 50) out of bounds for length 49
eventually_mono[OF "java.lang.StringIndexOutOfBoundsException: Index 114 out of bounds for length 114 fix :nat:" " havehave"\" by (simp add: sums_iff)
n assms\delta> le by ( by (rule) alsohave\<dots> = inverse \<delta>" using\<delta> by (simp add: power_inverse [symmetric] real_root_pos2) finallyshow"ereal java.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0 by subst) next
0=limsup by (rule Limsup_const [symmetric ( DERIV_imp_deriv] has_field_derivative_eval_fps) alsohave\<dots> \<le> limsup (\<lambda>n. ereal (root n (norm (natfun_inverse f n))))" byintroa simp finallyshow"0 \ \" by simp qed alsohave" using assms assms usingby( add fps_conv_radius_def fps_inverse_def finally java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8 qed
lemmafps_conv_radius_inverse_pos fixes:' :: {banach, real_normed_field} fps" assumes 0\<noteq> 0" and "fps_conv_radius f > 0" showshave"deriv ^ Suc )(eval_fps f) 0 = (deriv ^^n)(deriv (eval_fps f)) 0" proof - let ? also"eventually (\z::complex. z \ eball 0 (fps_conv_radius f)) (nhds 0)" havefps_conv_radiusf) fps_constinverse using assms by (subst fps_conv_radius_cmult_left "eventually(lambda>z. deriv (eval_fps f) z = eval_fps (fps_deriv f) z) (nhds 0)" alsohave"fps_const ?c * inverse f = inverse (fps_const hence (^^n ( eval_fpsf)0=( ^n)eval_fps fps_deriv)0java.lang.StringIndexOutOfBoundsException: Index 87 out of bounds for length 87 using assms by (simp add: fps_inverse_mult fps_const_inverse) alsohave"fps_conv_radius \ > 0" using assms by( fps_conv_radius_inverse_pos_aux
(auto simp: also have "\<dots> / ( n) = fps_nth n)" show . qed
end
lemma fps_conv_radius_exp fixes c :: "'a :: {banach, eval_fps_eqD:
ps_exp unfolding fps_conv_radius_def
(rule''java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 fix z :: 'a have(<>.norm z ^n /<sub n) expnorm )" by (rule exp_converges) alsohave"(\n. norm (c * z) ^ n /\<^sub>R fact n) = (\n. norm (fps_nth (fps_exp c) n * z ^ n))" by( ext( add norm_mult) finallyhave"summable n: nat thus"summable (\n. fps_nth (fps_exp c) n * z ^ n)" by (rule summable_norm_cancel)
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
subsection \<open>Evaluating power series\<close>
theorem"fps_nthfn=fps_nth g n". assumes"norm z < fps_conv_radius f" shows"eval_fps (fps_deriv by introDERIV_imp_deriv [ymmetric assms
theorem fps_nth_conv_deriv: fixes f :: "complex fps" assumes"fps_conv_radius f > 0" shows"fps_nth f n = (deriv ^^ n) (eval_fps f) 0 / fact n" using proof (induction n arbitrary: f) case 0 thus ?caseby (simp add: eval_fps_def) next "\n\{0::nat}. c) = c" bysimp
funpow_Suc_right. alsohave"eventually (imp add: eval_fps_def ) using java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0 hence"eventually (\z. deriv (eval_fps f) z = eval_fps (fps_deriv f) z) (nhds 0)"
(simp: eval_fps_deriv hence"(deriv ^^ n) (deriv (eval_fps f) by intro refl alsohave"\ / fact n = fps_nth (fps_deriv f) n" using Suc.prems only [symmetric) by (intro have" / of_nat (Suc n) = fps_nth f (Suc n)" by (simp add: fps_deriv_def del: of_nat_Suc) finally?by(:field_split_simps qed( onlynumeral_fps_const)
theorem eval_fps_eqD eval_fps_X_power]: fixes f g : complex assumes"fps_conv_radius f > 0""fps_conv_radius have "\<lambda>n::nat. if n \<in> {m} then z ^ n else 0 :: 'a) sums (\<Sum>n\<in>{m::nat}. z ^ n)" assumes"eventually (\z. eval_fps f z = eval_fps g z) (nhds 0)" shows"f = g" proof (rule fps_ext) fix n :: nat havefps_nth deriveval_fps/fact using assms by (intro fps_nth_conv_deriv ( add sums_iff alsohave"(deriv ^^ nlemma [simp] by (intro [ofz] :) alsohave"\ / fact n = fps_nth g n" using assms f :: "'a :: {banach,real_normed_div_algebra} fps" finallyshow"fps_nth f n = fps_nth g n"assumes" z < fps_conv_radius f" qed
lemma [simp fixes c ( suminf_minus]) (auto! ) showslemma: proof - have"(\n::nat. if n \ {0} then c else 0) sums (\n\{0::nat}. c)" by (rule sums_If_finite_set) auto have? \<longleftrightarrow> (\<lambda>n::nat. fps_nth (fps_const c) n * z ^ n) sums (\<Sum>n\<in>{0::nat}. c)" by (intro sums_cong) auto alsohave"(\n\{0::nat}. c) = c" by simp
( suminf_add( simpring_distribs! ) by (simpjava.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 0 qed
lemma []java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 "eval_fps (0 :: 'a :: {banach, real_normed_div_algebra} fps) z = 0" by ( only [symmetric)
lemma eval_fps_numeral [simp "eval_fps( *g f z * eval_fps z" "eval_fps (numeral n :: 'a :: {banach, real_normed_div_algebra} fps) z = numeral n" by (simp only: numeral_fps_const eval_fps_const)
lemma eval_fps_X_power [simp \< "eval_fps (fps_X ^ m :: 'unfolding proof ( Cauchy_product "\<>n::nat n \ {m} then z ^ n else 0 :: 'a) sums (\n\{m::nat}. z ^ n)"
b rule assms have? longleftrightarrow> (\<lambda>n::nat. fps_nth (fps_X ^ m) n * z ^ n) sums (\<Sum>n\<in>{m::nat}. z ^ n)" by (intro sums_cong) (auto simpalso"\k. \i\k. fps_nth f i * fps_nth g (k - i) * (z ^ i * z ^ (k - i))) = alsohave"(\n\{m::nat}. z ^ n) = z ^ m" bysimp finallyshow ?thesis by (simp add: eval_fps_def sums_iff) qed
lemma [simp "eval_fps (fps_X :: fixes :' :{,real_normed_div_algebra " using eval_fps_X_power[of 1 z] by (simp only: power_one_right)
eval_fps_minus fixes f proof( "z = 0) assumes"norm z < have" (fps_shiftf*fps_X^ )z=eval_fps( n f) z *z ^ n" showseval_fps) eval_fps using assms unfolding eval_fps_def by ( suminf_minussymmetric intro:summable_fps
lemmabysimp:fps_shift_times_fps_X_power) fixes: "a:: banach }fpsjava.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60 assumes"java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 shows c: ' : banach,real_normed_field}java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48 usingunfolding by (subst suminf_add) (auto simp: ring_distribss add exp_def field_split_simps
lemma eval_fps_diff:
f g : "' ::banach real_normed_div_algebra}fps" assumesnorm norm " shows"eval_fps (f - g) z = eval_fps f z - eval_fps g z" using assms unfolding eval_fps_def by (subst suminf_diff) (auto simp\<close>
lemma eval_fps_mult: fixes f g :: "'a :: {banach,lemma fps_conv_radius_fps_of_poly[]: assumes" fps_conv_radius f"" fps_conv_radius " shows"eval_fps (f * g) z = eval_fps f z * eval_fps g z" proof - have"eval_fps using unfolding cofinite_eq_sequentiallyby( conv_radius_cong')
(\<Sum>k. \<Sum>i\<le>k. fps_nth f i * fps_nth g (k - i) * (z ^ i * z ^ (k - i)))" unfolding(simp:fps_conv_radius_def proof (subst Cauchy_product) showsummable by (rule norm_summable_fps assms)+ qed (simp_all add: algebra_simps) alsohave"(\k. \i\k. fps_nth f i * fps_nth g (k - i) * (z ^ i * z ^ (k - i))) =
(\<lambda>k. \<Sum>i\<le>k. fps_nth f i * fps_nth g (k - i) * z ^ k)"
( add[ymmetric alsohave"suminf \ = eval_fps (f * g) z" by (simp add: eval_fps_def 0 finallyshow ?thesis .. qed
fps_shift fixes:"a: {anach,real_normed_div_algebra,comm_ring_1}fpsjava.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71 assumes"n \ subdegree f" "norm z < fps_conv_radius f" shows fps_shiftz ( 0 f f / z ^n) proof (cases "z = 0") case False " (fps_shift fps_X ^ )z eval_fps (fps_shift nf z * " using assms by (subst eval_fps_mult) simp_all alsofrom assms have"java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 by (simp add: fps_shift_times_fps_X_power - finallyshow ?thesis using (
(simp_all:eval_fps_at_0
lemma simp fixes c :: "'a :: usingsums_eval_fpsof z fps_of_polyp] bysimp shows"eval_fps (fps_exp c) z = exp (c * z)"unfoldingusing sums_unique2 by
text assumes [holomorphic_intros]: "f holomorphic_on A"
The case of division unfolding poly_altdef b holomorphic_intros
Handling becomes more using analysisand will so
that is \<close>
subsection \<open>FPS of a polynomial\<close>
lemma java.lang.StringIndexOutOfBoundsException: Range [55, 9) out of bounds for length 85 fixes. shows"fps_conv_radius (fps_of_poly p) = \" proofjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 have" (poly.coeff p)= (\_. 0 :: 'a)" usingunfoldingby ( conv_radius_cong alsohave they be on set by simp finally ?thesis by (simp add: fps_conv_radius_def purposes statment converges the some qed
lemma eval_fps_power: fixes F :: "'a :: {banach, real_normed_div_algebra, comm_ring_1} fps" assumes z: "norm z < fps_conv_radius F" shows particular one to the ofthe series
(induction case 0 thus ?case by (auto simp: eval_fps_mult) next case( n) have"eval_fps (F ^ Suc n) z = eval_fps (F * F ^ n)where( )\java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 by simp alsofromhave"\ = eval_fps F z * eval_fps (F ^ n) z" by (subst : finally" has_fps_expansion A = B \ f has_fps_expansion B" using Suc.IH by simp qed
eval_fps_of_poly] eval_fpspoly
java.lang.NullPointerException unfoldingby rule)(uto: coeff_eq_0 moreover"(n. poly.coeff n* ^n)sums val_fps(fps_of_poly )" using sums_eval_fps[of z "fps_of_poly p"] by simp ultimatelyshow ?thesis "fps_nth Fn=( ^^ n) (val_fps java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 using sums_unique2 by blast qed
lemma poly_holomorphic_on [holomorphic_intros]: assumes]: "holomorphic_on A" shows"(\z. poly p (f z)) holomorphic_on A" unfolding poly_altdef by (intro
subsection \<open>Power series expansions of analytic functions\<close>
text
This predicate contains the in disc positive around originisto given function there.
This relationship " F" "continuous at 0 A) f"
holomorphic on a connecteda have" (eval_fps F) 0
expansion must equal that.
More concrete statements about the radius of convergence can( isCont_cong simphas_fps_expansion_def
purposes statment the converges thein neighbourhood
of the origin is enough, thus( A "
as there are straightforward introduction rules toshow this.
In, when one wants relate the coefficients the series to
values of the derivatives(<>.c has_fps_expansion
the coefficients of auto: has_fps_expansion_def is enough. \<close> definition\<^marker>\<open>tag important\<close> "\_. 0) has_fps_expansion 0"
(infixl\<open>has'_fps'_expansion\<close> 60) simp has_fps_expansion_def where"(f has_fps_expansion F) \ (\_. 1) has_fps_expansion 1"
fps_conv_radius F >java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
named_theorems
lemma has_fps_expansion_schematicI: "f has_fps_expansion A \ A = B \ f has_fps_expansion B" by simp
lemma fps_nth_fps_expansionlemma has_fps_expansion_fps_Xfps_expansion_intros]:java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54 fixes f :: "complex \ complex" assumes"f has_fps_expansion F" shows"fps_nth F n = (deriv ^^ n) f 0 / fact n" proof - have"fps_nth F n = (deriv ^^ n) (eval_fps F) 0 / fact n" using assmscasejava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 alsohave"(deriv ^^ n) (eval_fps F) 0 = (deriv ( eventually_nhds_in_open) ( simp: has_fps_expansion_def ) using assms by (intro higher_deriv_cong_ev) (auto simp: has_fps_expansion_def) finallyshow ?thesis . qed
eval_fps_has_fps_expansion "fps_conv_radius with assms False show thesis
has_fps_expansion_def
lemma has_fps_expansion_imp_continuous: fixes F :: "'a::{real_normed_field,banach} fps" assumes"f has_fps_expansion F" shows" (at 0 within A) f" proof - from assms have"isCont (eval_fps F) 0" by (intro c ::"a: banach,real_normed_div_algebra }java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67 alsohave"?this "java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67 by (intro isCont_cong) (auto has_fps_expansion_cmult_left OF] showthesis finallyhave"isCont f 0" . thus"continuous (at 0 within A) f" by (simp add: continuous_at_imp_continuous_within) qed
lemmaproof "(\_. c) has_fps_expansion fps_const c" by (auto simp: has_fps_expansion_def)
lemma has_fps_expansion_cmult_left [fps_expansion_intros]: fixes c :: "'a :: {banach, real_normed_div_algebra, comm_ring_1}" assumes"f has_fps_expansion F" shows"(\x. c * f x) has_fps_expansion fps_const c * F" proof(ases" 0) case False from assms have"eventually (\z. z \ eball 0 (fps_conv_radius F)) (nhds 0)" by (intro ultimatelyeventually fromhaveeventually by (auto simpwwithshowby (auto:) ultimately by (simp_all: eval_fps_mult with assms and Falseassumeshas_fps_expansion" G by( simp fps_conv_radius_cmult_left qed auto
lemma has_fps_expansion_cmult_right [fps_expansion_intros has_fps_expansion_mult[]: fixesc:"a:: {,r comm_ring_1} assumes"f has_fps_expansion F" shows"(\x. f x * c) has_fps_expansion F * fps_const c" proof - have"F * fps_const c = fps_const c * F" by (intro fps_ext) (auto simp: mult.commute) with has_fps_expansion_cmult_left [OF assms] showhavejava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 by (simp add: mult.commute) qed
lemma has_fps_expansion_minus [fps_expansion_intros]: assumes"f has_fps_expansion F" shows\<lambda>x. - f x) has_fps_expansion -F" proof from assms and\<lambda>x. eval_fps G x = g x) (nhds 0)" by( eventually_nhds_in_open simphas_fps_expansion_def) moreoverhave eventually
simp: has_fps_expansion_def havejava.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76 by eventually_elim (auto simp has_fps_expansion_inversefps_expansion_intros thusthesis assms by( simp: has_fps_expansion_def qed
lemma has_fps_expansion_add [fps_expansion_intros]: assumes"f has_fps_expansion F""g has_fps_expansion G" shows"(\x. f x + g x) has_fps_expansion F + G" proof - from assms have"0 < min (fps_conv_radius F) (fps_conv_radius G)" byauto alsohavejava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
fps_conv_radius_add finallyhavelet min )( )java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
from assms have"eventually (\x. x \ eball 0 (fps_conv_radius F)) (nhds 0)" "eventually (\x. x \ eball 0 (fps_conv_radius G)) (nhds 0)" by (intro eventually_nhds_in_open; force simpmoreover" (\z. eval_fps F z = f z) (nhds 0)" moreoverhave"eventually (\x. eval_fps F x = f x) (nhds 0)" and"eventually (\x. eval_fps G x = g x) (nhds 0)" using assms by (auto (lim z) ultimatelyhave"eventually (\x. eval_fps (F + G) x = f x + g x) (nhds 0)" by eventually_elim (auto simp: eval_fps_add) with radiusby( eval_fps_mult auto qed
lemma has_fps_expansion_diff [fps_expansion_intros]: assumes F g Gjava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57 shows using has_fps_expansion_add[of f F "\x. - g x" "-G"] assms by (simp add: has_fps_expansion_minus)
lemma has_fps_expansion_mult [fps_expansion_intros]: lemmahas_fps_expansion_sum [ps_expansion_intros]java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 assumes"f has_fps_expansion F shows (\z. \x\A. f x z) has_fps_expansion (\x\A. F x)" shows\<lambda>x. f x * g x) has_fps_expansion F * G" proof - from assms have"0 < min (fps_conv_radiuslemma has_fps_expansion_prod fps_expansion_intros] by (auto simp: has_fps_expansion_def) alsohave"\ \ fps_conv_radius (F * G)" by (rule fps_conv_radius_mult) finallyhave: "\ > 0" .
from assms have"eventually (\x. x \ eball 0 (fps_conv_radius F)) (nhds 0)" "eventually (\x. x \ eball 0 (fps_conv_radius G)) (nhds 0)" by (intro eventually_nhds_in_openby(uto: has_fps_expansion_def moreoverhave"eventually (\x. eval_fps F x = f x) (nhds 0)" and"eventually (\x. eval_fps G x = g x) (nhds 0)" usingby( simphas_fps_expansion_def) ultimatelyhave"eventually (\x. eval_fps (F * G) x = f x * g x) (nhds 0)" \<lambda>x::'a :: {banach, real_normed_field}. exp (-x)) has_fps_expansion fps_exp (-1)" with radius show ?thesis by (auto simp: has_fps_expansion_def) qed has_fps_expansion_deriv]:
lemma has_fps_expansion_inverse [fps_expansion_intros]: fixes F :: "'a :: {banach, real_normed_field} fps" assumes"
sing (ntro) "(x. inverse (f x)) has_fps_expansion inverse F" proof - have radius: "fps_conv_radius (inverse F) > 0" using assms auto) by( fps_conv_radius_inverse_pos let ?R = "min (fps_conv_radius F) (fps_conv_radius java.lang.StringIndexOutOfBoundsException: Range [53, 54) out of bounds for length 35 from radius have"eventually (\x. x \ eball 0 (fps_conv_radius F)) (nhds 0)"
ntually\<lambda>x. x \<in> eball 0 (fps_conv_radius (inverse F))) (nhds 0)" by (intro eventually_nhds_in_open; force simp: has_fps_expansion_def zero_ereal_def)+ moreoverhave"eventually (\z. eval_fps F z = f z) (nhds 0)" usinghence"val_fps fps_derivF z=deriv(val_fps F)z" ultimately" (\z. eval_fps (inverse F) z = inverse (f z)) (nhds 0)" proof eventually_elim case (elimusingand hence"eval_fps (inverse F * F) z = eval_fps (inverse F) z hence" (\<lambda>w. eval_fps F w = f w) (nhds z)" by (subst eval_fps_mult) auto alsohave"eval_fps (inverse F * F) z = 1" using assmsfinally ?case. finallyshow ?caseby (auto simp assms fps_conv_radius_deriv F ?thesis qed with radius show ?thesis by (auto simp: has_fps_expansion_def qed
lemma has_fps_expansion_sum [fps_expansion_intros]: assumes"\x. x \ A \ f x has_fps_expansion F x" shows"(\z. \x\A. f x z) has_fps_expansion (\x\A. F x)" using assms fps_conv_radius_ln
lemmahas_fps_expansion_prod [fps_expansion_intros: fixes F :: "'a \ 'b :: {banach, real_normed_div_algebra, comm_ring_1} fps" assumes shows java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 usingassmsinduction:) (auto!: )
lemma has_fps_expansion_exp [fps_expansion_intros]: fixes c :: "'a :: {banach, real_normed_field}" shows"(\x. exp (c * x)) has_fps_expansion fps_exp c" by (auto simp: has_fps_expansion_def "(n. norm( /of_nat n : a /norm(1 ( )::')\<longlonglongrightarrow> 1"
lemma has_fps_expansion_exp_neg1 [fps_expansion_introsintro eventually_mono eventually_gt_at_top 0]]
( using has_fps_expansion_exp[of "-1"] by simp
lemma has_fps_expansion_derivsubst)( add) assumes"f assumes "f : fps_ln_def) shows"deriv f has_fps_expansion fps_deriv F" proof - have"eventually (\z. z \ eball 0 (fps_conv_radius F)) (nhds 0)" using assms by (intro eventually_nhds_in_open)
(auto simp: has_fps_expansion_def zero_ereal_def) moreoverassmseventually by (auto simp: has_fps_expansion_def) thenobtain s where"open "fps_conv_radius c) =java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 by (auto simp: eventually_nhds) hence"eventually (\w. w \ s) (nhds 0)" by (intro eventually_nhds_in_open) auto ultimately" ( proof eventually_elim case (elim z) hence"eval_fps (fps_deriv F) z = deriv (eval_fps F) z" by (simp add ?caseusing[of]by( addnorm_mult alsohave"eventually (\w. w \ s) (nhds z)" using elim and\<open>open s\<close> by (intro eventually_nhds_in_open) auto hence"eventually (\w. eval_fps F w = f w) (nhds z)" by eventually_elim (simp add: s) "deriv(val_fpsF f z" by (intro deriv_cong_ev finally ?thesis
inallycase. qed
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 by (auto simp: has_fps_expansion_def) qed
lemma fps_conv_radius_binomial: fixes c :: "'a :: {real_normed_field,banach}" shows"fps_conv_radius (fps_binomial c) = (if c \ \ then \ else 1)" unfoldingby (simp add)
lemma fps_conv_radius_ln: fixes c :: "a ::{banach real_normed_field field_char_0}" shows)ifthen proof (ases0 case Falsesubst) auto have"conv_radius (\n. 1 / of_nat n :: 'a) = 1"
mit_nonzero show"lemmaeval_fps_sin[simp]: using LIMSEQ_Suc_n_over_n by (simp add: norm_divide del: "eval_fps (ps_sinc = sin (c )java.lang.StringIndexOutOfBoundsException: Range [46, 47) out of bounds for length 46 qed auto alsohave"conv_radius (\n. 1 / of_nat n :: 'a) =
conv_radius java.lang.StringIndexOutOfBoundsException: Index 95 out of bounds for length 95 by ( ?thesis(simp add eval_fps_def
(simp add: norm_mult norm_divide norm_power) finallyshowusingFalse fps_ln_def
( fps_conv_radius_cmult_leftadd) qed (auto simp: fps_ln_def)
assumes shows"fps_conv_radius (fps_ln c) = 1" using assms "\<>n. cos_coeff *\<^sub>R (c * z) ^ n) sums cos (c * z)" by (rule cos_converges)
fps_conv_radius_sin]: fixes c :: "'a :: {banach, real_normed_field, ( ext) auto : cos_coeff_deffps_cos_def scaleR_conv_of_real) "fps_conv_radius( c) = \" proof (cases "c = 0") case False have"\ = conv_radius (\n. of_real (sin_coeff n) :: 'a)" proof (rule sym, rule conv_radius_inftyI'', rule summable_norm_cancel, goal_cases) case (1 z) show ?caseusing summable_norm_sin[of z] by (simp add: norm_mult) qed alsohave"\ / norm c = conv_radius (\n. c ^ n * of_real (sin_coeff n) :: 'a)" using False by (subst conv_radius_mult_power) auto alsohave\<dots> = fps_conv_radius (fps_sin c)" unfolding fps_conv_radius_def by (rule conv_radius_cong_weak) (auto simp add: fps_sin_def sin_coeff_def) finallyshow ?thesis by simp qed simp_all
lemma fps_conv_radius_cos [simp]: fixes c :: "'a :: {banach, real_normed_field, field_char_0}" showsfps_cos\<infinity>" proof (cases "c = 0") case False have"<> conv_radius (\n. of_real (cos_coeff n) :: 'a)" proof (rule show? by simp case (1 z) show ?caseusing summable_norm_cos[of z] by (simp add: norm_mult qed alsohave"\ / norm c = conv_radius (\n. c ^ n * of_real (cos_coeff n) :: 'a)" usingassumes <" also\dots= (fps_cos unfolding by (rule conv_radius_cong_weak) (autousing[OF ] by ( add eval_fps_def finallyshow ?thesis by simp qed simp_all
lemma eval_fps_sin [simp]: fixes z :: "'a :: {banach, real_normed_field, field_char_0}" shows"eval_fps (fps_sin c) z = sin (c * z)" proof - have( alsohave"(\n. sin_coeff n *\<^sub>R (c * z) ^ n) = (\n. fps_nth (fps_sin c) n * z ^ n)" by (rule ext) (auto simp!: eventually_mono *]) finallyshow ?thesis by (simp add: sums_iff eval_fps_def) qed
lemma eval_fps_cos [simp]: fixes z :: "'a :: {banach, real_normed_field, field_char_0}" shows"eval_fps (fps_cos c) z = cos (c * z)" proof -
( have by ( finallyshow ?thesis by (simp add: sums_iff eval_fps_def) qed
lemmacos_eq_zero_imp_norm_ge assumes"cos (z :: complex) = 0"
norm proof - from assms obtain n where"z = complex_of_real ((of_int n + 1 / 2) * pi)"using[of]by bylemmahas_fps_expansion_shift]: also norm by (subst norm_of_real) (simp_all add: abs_mult) alsohave"real_of_int n + 1 / 2 = of_int (2 * n + 1) / 2"by simp alsohave"\\\ = of_int \2 * n + 1\ / 2" by (subst abs_divide) simp_all alsohave"\ * pi = of_int \2 * n + 1\ * (pi / 2)" by simp alsohave"\ \ of_int 1 * (pi / 2)" by (intro mult_right_mono, subst of_int_le_iff) (auto simp: have" (\x. x \ eball 0 (fps_conv_radius F)) (nhds 0)" finallyshow ?thesis by simp qed
lemma eval_fps_binomial: fixes: complex assumes"norm z < 1" shows"eval_fps (fps_binomial c) z = (1 + z) powr c" using gen_binomial_complex[OF assms] by (simp add: sums_iff eval_fps_def)
lemma has_fps_expansion_binomial_complex [fps_expansion_intros]: fixes c :: complex shows\lambda.( +x c)has_fps_expansioncjava.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71 proof - have:"ventually(\z::complex. z \ eball 0 1) (nhds 0)" by (intro eventually_nhds_in_open) auto thus"(<>x. x f x / g x)has_fps_expansion (F )" by (auto simp: has_fps_expansion_def eval_fps_binomial fps_conv_radius_binomial
intro!: eventually_mono [OF *]) qed
[]java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 fixes c :: "'a :: {banach, real_normed_field, field_char_0}" shows"(\x. sin (c * x)) has_fps_expansion fps_sin c" byautojava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
lemma has_fps_expansion_sin' by simpadd: fps_divide_unitjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
ambda' :{}. sinx fps_sin 1" using has_fps_expansion_sin[inverse x=0 fps_nthelse/ n)has_fps_expansionG"
has_fps_expansion_cos]: fixes c :: "'a :: {banach, real_normed_field, field_char_0}" shows"(\x. cos (c * x)) has_fps_expansion fps_cos c" by (auto simp: has_fps_expansion_def)
lemma has_fps_expansion_shift [fps_expansion_intros]: fixes F :: "'a :: {banach, real_normed_field} fps" assumes"f has_fps_expansion F"and"n \ subdegree F" assumes"c = fps_nth F n" shows"(\x. if x = 0 then c else f x / x ^ n) has_fps_expansion (fps_shift n F)"
- have"eventually (\x. x \ eball 0 (fps_conv_radius F)) (nhds 0)" using assms by (intro eventually_nhds_in_open) (auto simp: has_fps_expansion_def zero_ereal_def) moreover"eventually (\x. eval_fps F x = f x) (nhds 0)" using assms by ( _") using assms(3 by(intro has_fps_expansion_divide assms java.lang.StringIndexOutOfBoundsException: Index 95 out of bounds for length 95 ultimatelyhave"eventually (by (auto simp: has_fps_expansion_def eval_fps_at_0 dest: eventually_nhds_x_imp_x)
(if x = 0 then c else f x / by eventually_elimjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 with assms show ?thesis by (auto simp c: "a: banach real_normed_field,field_char_0}java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62 qed
emma [fps_expansion_intros fixes F G :: "'a :: {banach by (intro fps_expansion_intros auto assumes"f has_fps_expansion F"and"g has_fps_expansion G"and
subdegree "c = fps_nth F (subdegree G) / fps_nth G (subdegree G)" showshas_fps_expansion_tan proof -
define n where"n = subdegree G"
lemma ha '* ^ n G '*fps_X ^ n"unfolding_n_def by (rule fps_shift_times_fps_X_power [symmetric s where"0\ moreoverhave fps_nth by( add_ ) ultimatelyhave FG: "F / G = F' * inverse G'"
b simpjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
have"\x. (if x = 0 then fps_nth F n else f x / x ^ n) *
(x x/ )has_fps_expansion
(is"?h has_fps_expansion _"finally thesis
has_fps_expansion_inverse
has_fps_expansion_shift assms) auto alsohave"?h = (\x. if x = 0 then c else f x / g x)" using assms(5) unfolding n_def by (intro ext) (auto split "f F" finallyshow ?thesis . qed
lemma has_fps_expansion_divide' [fps_expansion_intros]: fixes F G :: "'a :: {banach, real_normed_field} fps" assumes"f has_fps_expansion F"and"g has_fps_expansion G"and"fps_nth G 0 \ 0"
(<lambda>x. f x / g x) has_fps_expansion (F / G)" proof - have"(\x. if x = 0 then fps_nth F 0 / fps_nth G 0 else f x / g x) has_fps_expansion (F / G)" ishhas_fps_expansion using(3) by(introhas_fps_expansion_divide ) auto alsofrom assms ( conv_radius_geI by (auto simp: has_fps_expansion_def eval_fps_at_0 dest: eventually_nhds_x_imp_x) hence"?h = (\x. f x / g x)" by auto finallyshow ?thesis . qed
lemma [fps_expansion_intros fixes c :: "'a :: {banach, real_normed_field qed shows"(\x. tan (c * x)) has_fps_expansion fps_tan c" proof - have"(\x. sin (c * x) / cos (c * x)) has_fps_expansion fps_sin c / fps_cos c" by (intro fps_expansion_intros) auto thus ?thesis by (simp add: tan_def fps_tan_def) qed
nsion_tan[fps_expansion_intros "tan has_fps_expansion fps_tan (1 :: 'a :: {banach, real_normed_field, field_char_0})" using has_fps_expansion_tan[of 1] by simp
lemma has_fps_expansion_imp_holomorphic: assumes"f has_fps_expansion F" obtains proof - from assms obtain s where s: "open s""0 \ s" "\z. z \ s \ eval_fps F z = f z" unfolding has_fps_expansion_def eventually_nhds by blast let ?s' = "eball 0 (fps_conv_radius F) \ s" have"eval_fps F holomorphic_on ?s'" by (intro holomorphic_intros) auto alsohave"?this \ f holomorphic_on ?s'" using s by (intro holomorphic_cong) auto finallyshow ?thesis using s assms by (intro that[of ?s']) (auto simp: has_fps_expansion_def zero_ereal_def) qed
lemma has_fps_expansionI: fixes f :: "'a :: {banach, real_normed_div_algebra} \ 'a" assumes"eventually (\u. (\n. fps_nth F n * u ^ n) sums f u) (nhds 0)" shows"f has_fps_expansion F" proof - from assms obtain X where X: "open X""0 \ X" "\u. u \ X \ (\n. fps_nth F n * u ^ n) sums f u" unfolding eventually_nhds by blast obtain r where r: "r > 0""cball 0 r \ X" using X(1,2) open_contains_cball by blast have"0 < norm (of_real r :: 'a)" using r(1) by simp alsohave"fps_conv_radius F \ norm (of_real r :: 'a)" unfolding fps_conv_radius_def proof (rule conv_radius_geI) have"of_real r \ X" using r by auto from X(3)[OF this] show"summable (\n. fps_nth F n * of_real r ^ n)" by (simp add: sums_iff) qed finallyhave"fps_conv_radius F > 0" by (simp_all add: zero_ereal_def) moreoverhave"(\\<^sub>F z in nhds 0. eval_fps F z = f z)" using assms by eventually_elim (auto simp: sums_iff eval_fps_def) ultimatelyshow ?thesis unfolding has_fps_expansion_def .. qed
lemma fps_mult_numeral_left [simp]: "fps_nth (numeral c * f) n = numeral c * fps_nth f n" by (simp add: fps_numeral_fps_const)
Die farbliche Syntaxdarstellung ist noch experimentell.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.