src/HOL/Multivariate_Analysis/Generalised_Binomial_Theorem.thy
changeset 63417 c184ec919c70
parent 63367 6c731c8b7f03
child 63594 bd218a9320b5
equal deleted inserted replaced
63416:6af79184bef3 63417:c184ec919c70
    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