equal
deleted
inserted
replaced
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" . |