src/HOL/Analysis/Harmonic_Numbers.thy
changeset 66447 a1f5c5c26fa6
parent 65395 7504569a73c7
child 66495 0b46bd081228
equal deleted inserted replaced
66445:407de0768126 66447:a1f5c5c26fa6
   213     finally show "?em (2*n) - ?em n + ln 2 = (\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k))" ..
   213     finally show "?em (2*n) - ?em n + ln 2 = (\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k))" ..
   214   qed
   214   qed
   215   moreover have "(\<lambda>n. ?em (2*n) - ?em n + ln (2::real))
   215   moreover have "(\<lambda>n. ?em (2*n) - ?em n + ln (2::real))
   216                      \<longlonglongrightarrow> euler_mascheroni - euler_mascheroni + ln 2"
   216                      \<longlonglongrightarrow> euler_mascheroni - euler_mascheroni + ln 2"
   217     by (intro tendsto_intros euler_mascheroni_LIMSEQ filterlim_compose[OF euler_mascheroni_LIMSEQ]
   217     by (intro tendsto_intros euler_mascheroni_LIMSEQ filterlim_compose[OF euler_mascheroni_LIMSEQ]
   218               filterlim_subseq) (auto simp: subseq_def)
   218               filterlim_subseq) (auto simp: strict_mono_def)
   219   hence "(\<lambda>n. ?em (2*n) - ?em n + ln (2::real)) \<longlonglongrightarrow> ln 2" by simp
   219   hence "(\<lambda>n. ?em (2*n) - ?em n + ln (2::real)) \<longlonglongrightarrow> ln 2" by simp
   220   ultimately have "(\<lambda>n. (\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k))) \<longlonglongrightarrow> ln 2"
   220   ultimately have "(\<lambda>n. (\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k))) \<longlonglongrightarrow> ln 2"
   221     by (rule Lim_transform_eventually)
   221     by (rule Lim_transform_eventually)
   222 
   222 
   223   moreover have "summable (\<lambda>k. (-1)^k * inverse (real_of_nat (Suc k)))"
   223   moreover have "summable (\<lambda>k. (-1)^k * inverse (real_of_nat (Suc k)))"
   225     by (intro summable_Leibniz(1) decseq_imp_monoseq decseq_SucI) simp_all
   225     by (intro summable_Leibniz(1) decseq_imp_monoseq decseq_SucI) simp_all
   226   hence A: "(\<lambda>n. \<Sum>k<n. (-1)^k / real_of_nat (Suc k)) \<longlonglongrightarrow> (\<Sum>k. (-1)^k / real_of_nat (Suc k))"
   226   hence A: "(\<lambda>n. \<Sum>k<n. (-1)^k / real_of_nat (Suc k)) \<longlonglongrightarrow> (\<Sum>k. (-1)^k / real_of_nat (Suc k))"
   227     by (simp add: summable_sums_iff divide_inverse sums_def)
   227     by (simp add: summable_sums_iff divide_inverse sums_def)
   228   from filterlim_compose[OF this filterlim_subseq[of "op * (2::nat)"]]
   228   from filterlim_compose[OF this filterlim_subseq[of "op * (2::nat)"]]
   229     have "(\<lambda>n. \<Sum>k<2*n. (-1)^k / real_of_nat (Suc k)) \<longlonglongrightarrow> (\<Sum>k. (-1)^k / real_of_nat (Suc k))"
   229     have "(\<lambda>n. \<Sum>k<2*n. (-1)^k / real_of_nat (Suc k)) \<longlonglongrightarrow> (\<Sum>k. (-1)^k / real_of_nat (Suc k))"
   230     by (simp add: subseq_def)
   230     by (simp add: strict_mono_def)
   231   ultimately have "(\<Sum>k. (- 1) ^ k / real_of_nat (Suc k)) = ln 2" by (intro LIMSEQ_unique)
   231   ultimately have "(\<Sum>k. (- 1) ^ k / real_of_nat (Suc k)) = ln 2" by (intro LIMSEQ_unique)
   232   with A show ?thesis by (simp add: sums_def)
   232   with A show ?thesis by (simp add: sums_def)
   233 qed
   233 qed
   234 
   234 
   235 lemma alternating_harmonic_series_sums':
   235 lemma alternating_harmonic_series_sums':