src/HOL/Series.thy
changeset 62377 ace69956d018
parent 62376 85f38d5f8807
child 62379 340738057c8c
equal deleted inserted replaced
62376:85f38d5f8807 62377:ace69956d018
   226   qed
   226   qed
   227   with pos show "\<forall>n. f n = 0"
   227   with pos show "\<forall>n. f n = 0"
   228     by (auto intro!: antisym)
   228     by (auto intro!: antisym)
   229 qed (metis suminf_zero fun_eq_iff)
   229 qed (metis suminf_zero fun_eq_iff)
   230 
   230 
       
   231 lemma suminf_pos_iff:
       
   232   "summable f \<Longrightarrow> \<forall>n. 0 \<le> f n \<Longrightarrow> 0 < suminf f \<longleftrightarrow> (\<exists>i. 0 < f i)"
       
   233   using setsum_le_suminf[of 0] suminf_eq_zero_iff by (simp add: less_le)
       
   234 
       
   235 lemma suminf_pos2:
       
   236   assumes "summable f" "\<forall>n. 0 \<le> f n" "0 < f i"
       
   237   shows "0 < suminf f"
       
   238 proof -
       
   239   have "0 < (\<Sum>n<Suc i. f n)"
       
   240     using assms by (intro setsum_pos2[where i=i]) auto
       
   241   also have "\<dots> \<le> suminf f"
       
   242     using assms by (intro setsum_le_suminf) auto
       
   243   finally show ?thesis .
       
   244 qed
       
   245 
       
   246 lemma suminf_pos: "summable f \<Longrightarrow> \<forall>n. 0 < f n \<Longrightarrow> 0 < suminf f"
       
   247   by (intro suminf_pos2[where i=0]) (auto intro: less_imp_le)
       
   248 
   231 end
   249 end
   232 
   250 
   233 context
   251 context
   234   fixes f :: "nat \<Rightarrow> 'a::{ordered_cancel_comm_monoid_add, linorder_topology}"
   252   fixes f :: "nat \<Rightarrow> 'a::{ordered_cancel_comm_monoid_add, linorder_topology}"
   235 begin
   253 begin
   242   by (auto simp: less_imp_le ac_simps)
   260   by (auto simp: less_imp_le ac_simps)
   243 
   261 
   244 lemma setsum_less_suminf: "summable f \<Longrightarrow> \<forall>m\<ge>n. 0 < f m \<Longrightarrow> setsum f {..<n} < suminf f"
   262 lemma setsum_less_suminf: "summable f \<Longrightarrow> \<forall>m\<ge>n. 0 < f m \<Longrightarrow> setsum f {..<n} < suminf f"
   245   using setsum_less_suminf2[of n n] by (simp add: less_imp_le)
   263   using setsum_less_suminf2[of n n] by (simp add: less_imp_le)
   246 
   264 
   247 lemma suminf_pos2: "summable f \<Longrightarrow> \<forall>n. 0 \<le> f n \<Longrightarrow> 0 < f i \<Longrightarrow> 0 < suminf f"
       
   248   using setsum_less_suminf2[of 0 i] by simp
       
   249 
       
   250 lemma suminf_pos: "summable f \<Longrightarrow> \<forall>n. 0 < f n \<Longrightarrow> 0 < suminf f"
       
   251   using suminf_pos2[of 0] by (simp add: less_imp_le)
       
   252 
       
   253 lemma suminf_pos_iff:
       
   254   "summable f \<Longrightarrow> \<forall>n. 0 \<le> f n \<Longrightarrow> 0 < suminf f \<longleftrightarrow> (\<exists>i. 0 < f i)"
       
   255   using setsum_le_suminf[of f 0] suminf_eq_zero_iff[of f] by (simp add: less_le)
       
   256 
       
   257 end
   265 end
   258 
   266 
   259 lemma summableI_nonneg_bounded:
   267 lemma summableI_nonneg_bounded:
   260   fixes f:: "nat \<Rightarrow> 'a::{ordered_comm_monoid_add, linorder_topology, conditionally_complete_linorder}"
   268   fixes f:: "nat \<Rightarrow> 'a::{ordered_comm_monoid_add, linorder_topology, conditionally_complete_linorder}"
   261   assumes pos[simp]: "\<And>n. 0 \<le> f n" and le: "\<And>n. (\<Sum>i<n. f i) \<le> x"
   269   assumes pos[simp]: "\<And>n. 0 \<le> f n" and le: "\<And>n. (\<Sum>i<n. f i) \<le> x"
   262   shows "summable f"
   270   shows "summable f"
   263   unfolding summable_def sums_def[abs_def]
   271   unfolding summable_def sums_def[abs_def]
   264 proof (intro exI order_tendstoI)
   272 proof (rule exI LIMSEQ_incseq_SUP)+
   265   have [simp, intro]: "bdd_above (range (\<lambda>n. \<Sum>i<n. f i))"
   273   show "bdd_above (range (\<lambda>n. setsum f {..<n}))"
   266     using le by (auto simp: bdd_above_def)
   274     using le by (auto simp: bdd_above_def)
   267   { fix a assume "a < (SUP n. \<Sum>i<n. f i)"
   275   show "incseq (\<lambda>n. setsum f {..<n})"
   268     then obtain n where "a < (\<Sum>i<n. f i)"
   276     by (auto simp: mono_def intro!: setsum_mono2)
   269       by (auto simp add: less_cSUP_iff)
   277 qed
   270     then have "\<And>m. n \<le> m \<Longrightarrow> a < (\<Sum>i<m. f i)"
   278 
   271       by (rule less_le_trans) (auto intro!: setsum_mono2)
   279 lemma summableI[intro, simp]:
   272     then show "eventually (\<lambda>n. a < (\<Sum>i<n. f i)) sequentially"
   280   fixes f:: "nat \<Rightarrow> 'a::{canonically_ordered_monoid_add, linorder_topology, complete_linorder}"
   273       by (auto simp: eventually_sequentially) }
   281   shows "summable f"
   274   { fix a assume "(SUP n. \<Sum>i<n. f i) < a"
   282   by (intro summableI_nonneg_bounded[where x=top] zero_le top_greatest)
   275     moreover have "\<And>n. (\<Sum>i<n. f i) \<le> (SUP n. \<Sum>i<n. f i)"
       
   276       by (auto intro: cSUP_upper)
       
   277     ultimately show "eventually (\<lambda>n. (\<Sum>i<n. f i) < a) sequentially"
       
   278       by (auto intro: le_less_trans simp: eventually_sequentially) }
       
   279 qed
       
   280 
   283 
   281 subsection \<open>Infinite summability on topological monoids\<close>
   284 subsection \<open>Infinite summability on topological monoids\<close>
   282 
   285 
   283 lemma Zero_notin_Suc: "0 \<notin> Suc ` A"
   286 lemma Zero_notin_Suc: "0 \<notin> Suc ` A"
   284   by auto
   287   by auto