src/HOL/Series.thy
changeset 71827 5e315defb038
parent 70723 4e39d87c9737
child 72219 0f38c96a0a74
equal deleted inserted replaced
71826:f424e164d752 71827:5e315defb038
    27   where "suminf f = (THE s. f sums s)"
    27   where "suminf f = (THE s. f sums s)"
    28 
    28 
    29 text\<open>Variants of the definition\<close>
    29 text\<open>Variants of the definition\<close>
    30 lemma sums_def': "f sums s \<longleftrightarrow> (\<lambda>n. \<Sum>i = 0..n. f i) \<longlonglongrightarrow> s"
    30 lemma sums_def': "f sums s \<longleftrightarrow> (\<lambda>n. \<Sum>i = 0..n. f i) \<longlonglongrightarrow> s"
    31   unfolding sums_def
    31   unfolding sums_def
    32   apply (subst LIMSEQ_Suc_iff [symmetric])
    32   apply (subst filterlim_sequentially_Suc [symmetric])
    33   apply (simp only: lessThan_Suc_atMost atLeast0AtMost)
    33   apply (simp only: lessThan_Suc_atMost atLeast0AtMost)
    34   done
    34   done
    35 
    35 
    36 lemma sums_def_le: "f sums s \<longleftrightarrow> (\<lambda>n. \<Sum>i\<le>n. f i) \<longlonglongrightarrow> s"
    36 lemma sums_def_le: "f sums s \<longleftrightarrow> (\<lambda>n. \<Sum>i\<le>n. f i) \<longlonglongrightarrow> s"
    37   by (simp add: sums_def' atMost_atLeast0)
    37   by (simp add: sums_def' atMost_atLeast0)
    66 lemma summable_iff_convergent: "summable f \<longleftrightarrow> convergent (\<lambda>n. \<Sum>i<n. f i)"
    66 lemma summable_iff_convergent: "summable f \<longleftrightarrow> convergent (\<lambda>n. \<Sum>i<n. f i)"
    67   by (simp add: summable_def sums_def convergent_def)
    67   by (simp add: summable_def sums_def convergent_def)
    68 
    68 
    69 lemma summable_iff_convergent': "summable f \<longleftrightarrow> convergent (\<lambda>n. sum f {..n})"
    69 lemma summable_iff_convergent': "summable f \<longleftrightarrow> convergent (\<lambda>n. sum f {..n})"
    70   by (simp_all only: summable_iff_convergent convergent_def
    70   by (simp_all only: summable_iff_convergent convergent_def
    71         lessThan_Suc_atMost [symmetric] LIMSEQ_Suc_iff[of "\<lambda>n. sum f {..<n}"])
    71         lessThan_Suc_atMost [symmetric] filterlim_sequentially_Suc[of "\<lambda>n. sum f {..<n}"])
    72 
    72 
    73 lemma suminf_eq_lim: "suminf f = lim (\<lambda>n. \<Sum>i<n. f i)"
    73 lemma suminf_eq_lim: "suminf f = lim (\<lambda>n. \<Sum>i<n. f i)"
    74   by (simp add: suminf_def sums_def lim_def)
    74   by (simp add: suminf_def sums_def lim_def)
    75 
    75 
    76 lemma sums_zero[simp, intro]: "(\<lambda>n. 0) sums 0"
    76 lemma sums_zero[simp, intro]: "(\<lambda>n. 0) sums 0"
   180 
   180 
   181 lemma sums_unique2: "f sums a \<Longrightarrow> f sums b \<Longrightarrow> a = b"
   181 lemma sums_unique2: "f sums a \<Longrightarrow> f sums b \<Longrightarrow> a = b"
   182   for a b :: 'a
   182   for a b :: 'a
   183   by (simp add: sums_iff)
   183   by (simp add: sums_iff)
   184 
   184 
       
   185 lemma sums_Uniq: "\<exists>\<^sub>\<le>\<^sub>1a. f sums a"
       
   186   for a b :: 'a
       
   187   by (simp add: sums_unique2 Uniq_def)
       
   188 
   185 lemma suminf_finite:
   189 lemma suminf_finite:
   186   assumes N: "finite N"
   190   assumes N: "finite N"
   187     and f: "\<And>n. n \<notin> N \<Longrightarrow> f n = 0"
   191     and f: "\<And>n. n \<notin> N \<Longrightarrow> f n = 0"
   188   shows "suminf f = (\<Sum>n\<in>N. f n)"
   192   shows "suminf f = (\<Sum>n\<in>N. f n)"
   189   using sums_finite[OF assms, THEN sums_unique] by simp
   193   using sums_finite[OF assms, THEN sums_unique] by simp
   303     using assms by (auto intro!: tendsto_add simp: sums_def)
   307     using assms by (auto intro!: tendsto_add simp: sums_def)
   304   moreover have "(\<Sum>i<n. f (Suc i)) + f 0 = (\<Sum>i<Suc n. f i)" for n
   308   moreover have "(\<Sum>i<n. f (Suc i)) + f 0 = (\<Sum>i<Suc n. f i)" for n
   305     unfolding lessThan_Suc_eq_insert_0
   309     unfolding lessThan_Suc_eq_insert_0
   306     by (simp add: ac_simps sum.atLeast1_atMost_eq image_Suc_lessThan)
   310     by (simp add: ac_simps sum.atLeast1_atMost_eq image_Suc_lessThan)
   307   ultimately show ?thesis
   311   ultimately show ?thesis
   308     by (auto simp: sums_def simp del: sum.lessThan_Suc intro: LIMSEQ_Suc_iff[THEN iffD1])
   312     by (auto simp: sums_def simp del: sum.lessThan_Suc intro: filterlim_sequentially_Suc[THEN iffD1])
   309 qed
   313 qed
   310 
   314 
   311 lemma sums_add: "f sums a \<Longrightarrow> g sums b \<Longrightarrow> (\<lambda>n. f n + g n) sums (a + b)"
   315 lemma sums_add: "f sums a \<Longrightarrow> g sums b \<Longrightarrow> (\<lambda>n. f n + g n) sums (a + b)"
   312   unfolding sums_def by (simp add: sum.distrib tendsto_add)
   316   unfolding sums_def by (simp add: sum.distrib tendsto_add)
   313 
   317 
   354 begin
   358 begin
   355 
   359 
   356 lemma sums_Suc_iff: "(\<lambda>n. f (Suc n)) sums s \<longleftrightarrow> f sums (s + f 0)"
   360 lemma sums_Suc_iff: "(\<lambda>n. f (Suc n)) sums s \<longleftrightarrow> f sums (s + f 0)"
   357 proof -
   361 proof -
   358   have "f sums (s + f 0) \<longleftrightarrow> (\<lambda>i. \<Sum>j<Suc i. f j) \<longlonglongrightarrow> s + f 0"
   362   have "f sums (s + f 0) \<longleftrightarrow> (\<lambda>i. \<Sum>j<Suc i. f j) \<longlonglongrightarrow> s + f 0"
   359     by (subst LIMSEQ_Suc_iff) (simp add: sums_def)
   363     by (subst filterlim_sequentially_Suc) (simp add: sums_def)
   360   also have "\<dots> \<longleftrightarrow> (\<lambda>i. (\<Sum>j<i. f (Suc j)) + f 0) \<longlonglongrightarrow> s + f 0"
   364   also have "\<dots> \<longleftrightarrow> (\<lambda>i. (\<Sum>j<i. f (Suc j)) + f 0) \<longlonglongrightarrow> s + f 0"
   361     by (simp add: ac_simps lessThan_Suc_eq_insert_0 image_Suc_lessThan sum.atLeast1_atMost_eq)
   365     by (simp add: ac_simps lessThan_Suc_eq_insert_0 image_Suc_lessThan sum.atLeast1_atMost_eq)
   362   also have "\<dots> \<longleftrightarrow> (\<lambda>n. f (Suc n)) sums s"
   366   also have "\<dots> \<longleftrightarrow> (\<lambda>n. f (Suc n)) sums s"
   363   proof
   367   proof
   364     assume "(\<lambda>i. (\<Sum>j<i. f (Suc j)) + f 0) \<longlonglongrightarrow> s + f 0"
   368     assume "(\<lambda>i. (\<Sum>j<i. f (Suc j)) + f 0) \<longlonglongrightarrow> s + f 0"
   633 lemma telescope_sums:
   637 lemma telescope_sums:
   634   fixes c :: "'a::real_normed_vector"
   638   fixes c :: "'a::real_normed_vector"
   635   assumes "f \<longlonglongrightarrow> c"
   639   assumes "f \<longlonglongrightarrow> c"
   636   shows "(\<lambda>n. f (Suc n) - f n) sums (c - f 0)"
   640   shows "(\<lambda>n. f (Suc n) - f n) sums (c - f 0)"
   637   unfolding sums_def
   641   unfolding sums_def
   638 proof (subst LIMSEQ_Suc_iff [symmetric])
   642 proof (subst filterlim_sequentially_Suc [symmetric])
   639   have "(\<lambda>n. \<Sum>k<Suc n. f (Suc k) - f k) = (\<lambda>n. f (Suc n) - f 0)"
   643   have "(\<lambda>n. \<Sum>k<Suc n. f (Suc k) - f k) = (\<lambda>n. f (Suc n) - f 0)"
   640     by (simp add: lessThan_Suc_atMost atLeast0AtMost [symmetric] sum_Suc_diff)
   644     by (simp add: lessThan_Suc_atMost atLeast0AtMost [symmetric] sum_Suc_diff)
   641   also have "\<dots> \<longlonglongrightarrow> c - f 0"
   645   also have "\<dots> \<longlonglongrightarrow> c - f 0"
   642     by (intro tendsto_diff LIMSEQ_Suc[OF assms] tendsto_const)
   646     by (intro tendsto_diff LIMSEQ_Suc[OF assms] tendsto_const)
   643   finally show "(\<lambda>n. \<Sum>n<Suc n. f (Suc n) - f n) \<longlonglongrightarrow> c - f 0" .
   647   finally show "(\<lambda>n. \<Sum>n<Suc n. f (Suc n) - f n) \<longlonglongrightarrow> c - f 0" .