25 let ?f = "\<lambda>n. inverse (a / of_nat (Suc n) - of_nat n / of_nat (Suc n))" |
25 let ?f = "\<lambda>n. inverse (a / of_nat (Suc n) - of_nat n / of_nat (Suc n))" |
26 from eventually_gt_at_top[of "0::nat"] |
26 from eventually_gt_at_top[of "0::nat"] |
27 show "eventually (\<lambda>n. ?f n = (a gchoose n) /(a gchoose Suc n)) sequentially" |
27 show "eventually (\<lambda>n. ?f n = (a gchoose n) /(a gchoose Suc n)) sequentially" |
28 proof eventually_elim |
28 proof eventually_elim |
29 fix n :: nat assume n: "n > 0" |
29 fix n :: nat assume n: "n > 0" |
30 let ?P = "\<Prod>i<n. a - of_nat i" |
30 then obtain q where q: "n = Suc q" by (cases n) blast |
|
31 let ?P = "\<Prod>i=0..<n. a - of_nat i" |
31 from n have "(a gchoose n) / (a gchoose Suc n) = (of_nat (Suc n) :: 'a) * |
32 from n have "(a gchoose n) / (a gchoose Suc n) = (of_nat (Suc n) :: 'a) * |
32 (?P / (\<Prod>i\<le>n. a - of_nat i))" |
33 (?P / (\<Prod>i=0..n. a - of_nat i))" |
33 by (simp add: gbinomial_def lessThan_Suc_atMost) |
34 by (simp add: gbinomial_setprod_rev atLeastLessThanSuc_atLeastAtMost) |
34 also from n have "(\<Prod>i\<le>n. a - of_nat i) = ?P * (a - of_nat n)" |
35 also from q have "(\<Prod>i=0..n. a - of_nat i) = ?P * (a - of_nat n)" |
35 by (cases n) (simp_all add: setprod_nat_ivl_Suc lessThan_Suc_atMost) |
36 by (simp add: setprod.atLeast0_atMost_Suc atLeastLessThanSuc_atLeastAtMost) |
36 also have "?P / \<dots> = (?P / ?P) / (a - of_nat n)" by (rule divide_divide_eq_left[symmetric]) |
37 also have "?P / \<dots> = (?P / ?P) / (a - of_nat n)" by (rule divide_divide_eq_left[symmetric]) |
37 also from assms have "?P / ?P = 1" by auto |
38 also from assms have "?P / ?P = 1" by auto |
38 also have "of_nat (Suc n) * (1 / (a - of_nat n)) = |
39 also have "of_nat (Suc n) * (1 / (a - of_nat n)) = |
39 inverse (inverse (of_nat (Suc n)) * (a - of_nat n))" by (simp add: field_simps) |
40 inverse (inverse (of_nat (Suc n)) * (a - of_nat n))" by (simp add: field_simps) |
40 also have "inverse (of_nat (Suc n)) * (a - of_nat n) = a / of_nat (Suc n) - of_nat n / of_nat (Suc n)" |
41 also have "inverse (of_nat (Suc n)) * (a - of_nat n) = a / of_nat (Suc n) - of_nat n / of_nat (Suc n)" |
117 finally have [simp]: "f 0 = 1" . |
118 finally have [simp]: "f 0 = 1" . |
118 |
119 |
119 have "\<exists>c. \<forall>z\<in>ball 0 K. f z * (1 + z) powr (-a) = c" |
120 have "\<exists>c. \<forall>z\<in>ball 0 K. f z * (1 + z) powr (-a) = c" |
120 proof (rule has_field_derivative_zero_constant) |
121 proof (rule has_field_derivative_zero_constant) |
121 fix z :: complex assume z': "z \<in> ball 0 K" |
122 fix z :: complex assume z': "z \<in> ball 0 K" |
122 hence z: "norm z < K" by (simp add: dist_0_norm) |
123 hence z: "norm z < K" by simp |
123 with K have nz: "1 + z \<noteq> 0" by (auto dest!: minus_unique) |
124 with K have nz: "1 + z \<noteq> 0" by (auto dest!: minus_unique) |
124 from z K have "norm z < 1" by simp |
125 from z K have "norm z < 1" by simp |
125 hence "(1 + z) \<notin> \<real>\<^sub>\<le>\<^sub>0" by (cases z) (auto simp: complex_nonpos_Reals_iff) |
126 hence "(1 + z) \<notin> \<real>\<^sub>\<le>\<^sub>0" by (cases z) (auto simp: complex_nonpos_Reals_iff) |
126 hence "((\<lambda>z. f z * (1 + z) powr (-a)) has_field_derivative |
127 hence "((\<lambda>z. f z * (1 + z) powr (-a)) has_field_derivative |
127 f' z * (1 + z) powr (-a) - a * f z * (1 + z) powr (-a-1)) (at z)" using z |
128 f' z * (1 + z) powr (-a) - a * f z * (1 + z) powr (-a-1)) (at z)" using z |
207 have "(\<lambda>n. (of_real a gchoose n :: complex) * of_real z ^ n) sums |
208 have "(\<lambda>n. (of_real a gchoose n :: complex) * of_real z ^ n) sums |
208 (of_real (1 + z)) powr (of_real a)" by simp |
209 (of_real (1 + z)) powr (of_real a)" by simp |
209 also have "(of_real (1 + z) :: complex) powr (of_real a) = of_real ((1 + z) powr a)" |
210 also have "(of_real (1 + z) :: complex) powr (of_real a) = of_real ((1 + z) powr a)" |
210 using assms by (subst powr_of_real) simp_all |
211 using assms by (subst powr_of_real) simp_all |
211 also have "(of_real a gchoose n :: complex) = of_real (a gchoose n)" for n |
212 also have "(of_real a gchoose n :: complex) = of_real (a gchoose n)" for n |
212 by (simp add: gbinomial_def) |
213 by (simp add: gbinomial_setprod_rev) |
213 hence "(\<lambda>n. (of_real a gchoose n :: complex) * of_real z ^ n) = |
214 hence "(\<lambda>n. (of_real a gchoose n :: complex) * of_real z ^ n) = |
214 (\<lambda>n. of_real ((a gchoose n) * z ^ n))" by (intro ext) simp |
215 (\<lambda>n. of_real ((a gchoose n) * z ^ n))" by (intro ext) simp |
215 finally show ?thesis by (simp only: sums_of_real_iff) |
216 finally show ?thesis by (simp only: sums_of_real_iff) |
216 qed |
217 qed |
217 |
218 |