344 by (simp add: summable_def sums_def convergent_def) |
344 by (simp add: summable_def sums_def convergent_def) |
345 |
345 |
346 lemma summable_Cauchy: |
346 lemma summable_Cauchy: |
347 "summable f = |
347 "summable f = |
348 (\<forall>e > 0. \<exists>N. \<forall>m \<ge> N. \<forall>n. abs(setsum f {m..<n}) < e)" |
348 (\<forall>e > 0. \<exists>N. \<forall>m \<ge> N. \<forall>n. abs(setsum f {m..<n}) < e)" |
349 apply (auto simp add: summable_convergent_sumr_iff Cauchy_convergent_iff [symmetric] Cauchy_def diff_minus[symmetric]) |
349 apply (simp only: summable_convergent_sumr_iff Cauchy_convergent_iff [symmetric] Cauchy_def diff_minus [symmetric], safe) |
350 apply (drule_tac [!] spec, auto) |
350 apply (drule spec, drule (1) mp) |
351 apply (rule_tac x = M in exI) |
351 apply (erule exE, rule_tac x="M" in exI, clarify) |
352 apply (rule_tac [2] x = N in exI, auto) |
352 apply (rule_tac x="m" and y="n" in linorder_le_cases) |
353 apply (cut_tac [!] m = m and n = n in less_linear, auto) |
353 apply (frule (1) order_trans) |
354 apply (frule le_less_trans [THEN less_imp_le], assumption) |
354 apply (drule_tac x="n" in spec, drule (1) mp) |
355 apply (drule_tac x = n in spec, simp) |
355 apply (drule_tac x="m" in spec, drule (1) mp) |
356 apply (drule_tac x = m in spec) |
356 apply (simp add: setsum_diff [symmetric]) |
357 apply(simp add: setsum_diff[symmetric]) |
357 apply simp |
358 apply(subst abs_minus_commute) |
358 apply (drule spec, drule (1) mp) |
359 apply(simp add: setsum_diff[symmetric]) |
359 apply (erule exE, rule_tac x="N" in exI, clarify) |
360 apply(simp add: setsum_diff[symmetric]) |
360 apply (rule_tac x="m" and y="n" in linorder_le_cases) |
|
361 apply (subst abs_minus_commute) |
|
362 apply (simp add: setsum_diff [symmetric]) |
|
363 apply (simp add: setsum_diff [symmetric]) |
361 done |
364 done |
362 |
365 |
363 text{*Comparison test*} |
366 text{*Comparison test*} |
364 |
367 |
365 lemma summable_comparison_test: |
368 lemma summable_comparison_test: |