diff -r 8558e4a37b48 -r a0cfa9050fa8 src/HOL/Library/Extended_Real.thy --- a/src/HOL/Library/Extended_Real.thy Thu Jul 23 16:39:10 2015 +0200 +++ b/src/HOL/Library/Extended_Real.thy Thu Jul 23 16:40:47 2015 +0200 @@ -3182,6 +3182,77 @@ qed +lemma SUP_ereal_add_directed: + fixes f g :: "'a \ ereal" + assumes nonneg: "\i. i \ I \ 0 \ f i" "\i. i \ I \ 0 \ g i" + assumes directed: "\i j. i \ I \ j \ I \ \k\I. f i + g j \ f k + g k" + shows "(SUP i:I. f i + g i) = (SUP i:I. f i) + (SUP i:I. g i)" +proof cases + assume "I = {}" then show ?thesis + by (simp add: bot_ereal_def) +next + assume "I \ {}" + show ?thesis + proof (rule antisym) + show "(SUP i:I. f i + g i) \ (SUP i:I. f i) + (SUP i:I. g i)" + by (rule SUP_least; intro ereal_add_mono SUP_upper) + next + have "bot < (SUP i:I. g i)" + using \I \ {}\ nonneg(2) by (auto simp: bot_ereal_def less_SUP_iff) + then have "(SUP i:I. f i) + (SUP i:I. g i) = (SUP i:I. f i + (SUP i:I. g i))" + by (intro SUP_ereal_add_left[symmetric] \I \ {}\) auto + also have "\ = (SUP i:I. (SUP j:I. f i + g j))" + using nonneg(1) by (intro SUP_cong refl SUP_ereal_add_right[symmetric] \I \ {}\) auto + also have "\ \ (SUP i:I. f i + g i)" + using directed by (intro SUP_least) (blast intro: SUP_upper2) + finally show "(SUP i:I. f i) + (SUP i:I. g i) \ (SUP i:I. f i + g i)" . + qed +qed + +lemma SUP_ereal_setsum_directed: + fixes f g :: "'a \ 'b \ ereal" + assumes "I \ {}" + assumes directed: "\N i j. N \ A \ i \ I \ j \ I \ \k\I. \n\N. f n i \ f n k \ f n j \ f n k" + assumes nonneg: "\n i. i \ I \ n \ A \ 0 \ f n i" + shows "(SUP i:I. \n\A. f n i) = (\n\A. SUP i:I. f n i)" +proof - + have "N \ A \ (SUP i:I. \n\N. f n i) = (\n\N. SUP i:I. f n i)" for N + proof (induction N rule: infinite_finite_induct) + case (insert n N) + moreover have "(SUP i:I. f n i + (\l\N. f l i)) = (SUP i:I. f n i) + (SUP i:I. \l\N. f l i)" + proof (rule SUP_ereal_add_directed) + fix i assume "i \ I" then show "0 \ f n i" "0 \ (\l\N. f l i)" + using insert by (auto intro!: setsum_nonneg nonneg) + next + fix i j assume "i \ I" "j \ I" + from directed[OF \insert n N \ A\ this] guess k .. + then show "\k\I. f n i + (\l\N. f l j) \ f n k + (\l\N. f l k)" + by (intro bexI[of _ k]) (auto intro!: ereal_add_mono setsum_mono) + qed + ultimately show ?case + by simp + qed (simp_all add: SUP_constant \I \ {}\) + from this[of A] show ?thesis by simp +qed + +lemma suminf_SUP_eq_directed: + fixes f :: "_ \ nat \ ereal" + assumes "I \ {}" + assumes directed: "\N i j. i \ I \ j \ I \ finite N \ \k\I. \n\N. f i n \ f k n \ f j n \ f k n" + assumes nonneg: "\n i. 0 \ f n i" + shows "(\i. SUP n:I. f n i) = (SUP n:I. \i. f n i)" +proof (subst (1 2) suminf_ereal_eq_SUP) + show "\n i. 0 \ f n i" "\i. 0 \ (SUP n:I. f n i)" + using \I \ {}\ nonneg by (auto intro: SUP_upper2) + show "(SUP n. \iiMore Limits\ + lemma convergent_limsup_cl: fixes X :: "nat \ 'a::{complete_linorder,linorder_topology}" shows "convergent X \ limsup X = lim X"