src/HOL/Series.thy
changeset 68594 5b05ede597b8
parent 68527 2f4e2aab190a
child 68721 53ad5c01be3f
--- a/src/HOL/Series.thy	Thu Jul 05 18:27:24 2018 +0100
+++ b/src/HOL/Series.thy	Thu Jul 05 23:37:00 2018 +0100
@@ -28,7 +28,7 @@
 
 text\<open>Variants of the definition\<close>
 lemma sums_def': "f sums s \<longleftrightarrow> (\<lambda>n. \<Sum>i = 0..n. f i) \<longlonglongrightarrow> s"
-  apply (simp add: sums_def)
+  unfolding sums_def
   apply (subst LIMSEQ_Suc_iff [symmetric])
   apply (simp only: lessThan_Suc_atMost atLeast0AtMost)
   done
@@ -81,15 +81,9 @@
 
 lemma sums_group: "f sums s \<Longrightarrow> 0 < k \<Longrightarrow> (\<lambda>n. sum f {n * k ..< n * k + k}) sums s"
   apply (simp only: sums_def sum_nat_group tendsto_def eventually_sequentially)
-  apply safe
-  apply (erule_tac x=S in allE)
-  apply safe
-  apply (rule_tac x="N" in exI, safe)
-  apply (drule_tac x="n*k" in spec)
-  apply (erule mp)
-  apply (erule order_trans)
-  apply simp
-  done
+  apply (erule all_forward imp_forward exE| assumption)+
+  apply (rule_tac x="N" in exI)
+  by (metis le_square mult.commute mult.left_neutral mult_le_cancel2 mult_le_mono)
 
 lemma suminf_cong: "(\<And>n. f n = g n) \<Longrightarrow> suminf f = suminf g"
   by (rule arg_cong[of f g], rule ext) simp
@@ -454,16 +448,7 @@
   apply (drule summable_iff_convergent [THEN iffD1])
   apply (drule convergent_Cauchy)
   apply (simp only: Cauchy_iff LIMSEQ_iff)
-  apply safe
-  apply (drule_tac x="r" in spec)
-  apply safe
-  apply (rule_tac x="M" in exI)
-  apply safe
-  apply (drule_tac x="Suc n" in spec)
-  apply simp
-  apply (drule_tac x="n" in spec)
-  apply simp
-  done
+  by (metis add.commute add_diff_cancel_right' diff_zero le_SucI sum_lessThan_Suc)
 
 lemma summable_imp_convergent: "summable f \<Longrightarrow> convergent f"
   by (force dest!: summable_LIMSEQ_zero simp: convergent_def)
@@ -725,17 +710,9 @@
 text \<open>Absolute convergence imples normal convergence.\<close>
 
 lemma summable_norm_cancel: "summable (\<lambda>n. norm (f n)) \<Longrightarrow> summable f"
-  apply (simp only: summable_Cauchy)
-  apply safe
-  apply (drule_tac x="e" in spec)
-  apply safe
-  apply (rule_tac x="N" in exI)
-  apply safe
-  apply (drule_tac x="m" in spec)
-  apply safe
-  apply (rule order_le_less_trans [OF norm_sum])
-  apply (rule order_le_less_trans [OF abs_ge_self])
-  apply simp
+  unfolding summable_Cauchy
+  apply (erule all_forward imp_forward ex_forward | assumption)+
+  apply (fastforce simp add: order_le_less_trans [OF norm_sum] order_le_less_trans [OF abs_ge_self])
   done
 
 lemma summable_norm: "summable (\<lambda>n. norm (f n)) \<Longrightarrow> norm (suminf f) \<le> (\<Sum>n. norm (f n))"
@@ -834,16 +811,10 @@
   shows "summable (\<lambda>n. norm (a n) * r^n)"
 proof (rule summable_comparison_test')
   show "summable (\<lambda>n. M * (r / r0) ^ n)"
-    using assms
-    by (auto simp add: summable_mult summable_geometric)
+    using assms by (auto simp add: summable_mult summable_geometric)
   show "norm (norm (a n) * r ^ n) \<le> M * (r / r0) ^ n" for n
-    using r r0 M [of n]
-    apply (auto simp add: abs_mult field_simps)
-    apply (cases "r = 0")
-     apply simp
-     apply (cases n)
-      apply auto
-    done
+    using r r0 M [of n] dual_order.order_iff_strict
+    by (fastforce simp add: abs_mult field_simps)
 qed