292 with monoseq_le[OF `monoseq a` `a ----> 0`] |
292 with monoseq_le[OF `monoseq a` `a ----> 0`] |
293 have "(\<forall> n. a n \<le> 0) \<and> (\<forall>m. \<forall>n\<ge>m. a m \<le> a n)" by auto |
293 have "(\<forall> n. a n \<le> 0) \<and> (\<forall>m. \<forall>n\<ge>m. a m \<le> a n)" by auto |
294 hence ord: "\<And>n m. m \<le> n \<Longrightarrow> ?a n \<le> ?a m" and ge0: "\<And> n. 0 \<le> ?a n" by auto |
294 hence ord: "\<And>n m. m \<le> n \<Longrightarrow> ?a n \<le> ?a m" and ge0: "\<And> n. 0 \<le> ?a n" by auto |
295 { fix n have "?a (Suc n) \<le> ?a n" using ord[where n="Suc n" and m=n] by auto } |
295 { fix n have "?a (Suc n) \<le> ?a n" using ord[where n="Suc n" and m=n] by auto } |
296 note monotone = this |
296 note monotone = this |
297 note leibniz = summable_Leibniz'[OF _ ge0, of "\<lambda>x. x", OF LIMSEQ_minus[OF `a ----> 0`, unfolded minus_zero] monotone] |
297 note leibniz = summable_Leibniz'[OF _ ge0, of "\<lambda>x. x", OF tendsto_minus[OF `a ----> 0`, unfolded minus_zero] monotone] |
298 have "summable (\<lambda> n. (-1)^n * ?a n)" using leibniz(1) by auto |
298 have "summable (\<lambda> n. (-1)^n * ?a n)" using leibniz(1) by auto |
299 then obtain l where "(\<lambda> n. (-1)^n * ?a n) sums l" unfolding summable_def by auto |
299 then obtain l where "(\<lambda> n. (-1)^n * ?a n) sums l" unfolding summable_def by auto |
300 from this[THEN sums_minus] |
300 from this[THEN sums_minus] |
301 have "(\<lambda> n. (-1)^n * a n) sums -l" by auto |
301 have "(\<lambda> n. (-1)^n * a n) sums -l" by auto |
302 hence ?summable unfolding summable_def by auto |
302 hence ?summable unfolding summable_def by auto |
306 from suminf_minus[OF leibniz(1), unfolded mult_minus_right minus_minus] |
306 from suminf_minus[OF leibniz(1), unfolded mult_minus_right minus_minus] |
307 have move_minus: "(\<Sum>n. - (-1 ^ n * a n)) = - (\<Sum>n. -1 ^ n * a n)" by auto |
307 have move_minus: "(\<Sum>n. - (-1 ^ n * a n)) = - (\<Sum>n. -1 ^ n * a n)" by auto |
308 |
308 |
309 have ?pos using `0 \<le> ?a 0` by auto |
309 have ?pos using `0 \<le> ?a 0` by auto |
310 moreover have ?neg using leibniz(2,4) unfolding mult_minus_right setsum_negf move_minus neg_le_iff_le by auto |
310 moreover have ?neg using leibniz(2,4) unfolding mult_minus_right setsum_negf move_minus neg_le_iff_le by auto |
311 moreover have ?f and ?g using leibniz(3,5)[unfolded mult_minus_right setsum_negf move_minus, THEN LIMSEQ_minus_cancel] by auto |
311 moreover have ?f and ?g using leibniz(3,5)[unfolded mult_minus_right setsum_negf move_minus, THEN tendsto_minus_cancel] by auto |
312 ultimately show ?thesis by auto |
312 ultimately show ?thesis by auto |
313 qed |
313 qed |
314 from this[THEN conjunct1] this[THEN conjunct2, THEN conjunct1] this[THEN conjunct2, THEN conjunct2, THEN conjunct1] this[THEN conjunct2, THEN conjunct2, THEN conjunct2, THEN conjunct1] |
314 from this[THEN conjunct1] this[THEN conjunct2, THEN conjunct1] this[THEN conjunct2, THEN conjunct2, THEN conjunct1] this[THEN conjunct2, THEN conjunct2, THEN conjunct2, THEN conjunct1] |
315 this[THEN conjunct2, THEN conjunct2, THEN conjunct2, THEN conjunct2] |
315 this[THEN conjunct2, THEN conjunct2, THEN conjunct2, THEN conjunct2] |
316 show ?summable and ?pos and ?neg and ?f and ?g . |
316 show ?summable and ?pos and ?neg and ?f and ?g . |
2580 qed |
2580 qed |
2581 qed |
2581 qed |
2582 |
2582 |
2583 lemma zeroseq_arctan_series: fixes x :: real |
2583 lemma zeroseq_arctan_series: fixes x :: real |
2584 assumes "\<bar>x\<bar> \<le> 1" shows "(\<lambda> n. 1 / real (n*2+1) * x^(n*2+1)) ----> 0" (is "?a ----> 0") |
2584 assumes "\<bar>x\<bar> \<le> 1" shows "(\<lambda> n. 1 / real (n*2+1) * x^(n*2+1)) ----> 0" (is "?a ----> 0") |
2585 proof (cases "x = 0") case True thus ?thesis unfolding One_nat_def by (auto simp add: LIMSEQ_const) |
2585 proof (cases "x = 0") case True thus ?thesis unfolding One_nat_def by (auto simp add: tendsto_const) |
2586 next |
2586 next |
2587 case False |
2587 case False |
2588 have "norm x \<le> 1" and "x \<le> 1" and "-1 \<le> x" using assms by auto |
2588 have "norm x \<le> 1" and "x \<le> 1" and "-1 \<le> x" using assms by auto |
2589 show "?a ----> 0" |
2589 show "?a ----> 0" |
2590 proof (cases "\<bar>x\<bar> < 1") |
2590 proof (cases "\<bar>x\<bar> < 1") |
2591 case True hence "norm x < 1" by auto |
2591 case True hence "norm x < 1" by auto |
2592 from LIMSEQ_mult[OF LIMSEQ_inverse_real_of_nat LIMSEQ_power_zero[OF `norm x < 1`, THEN LIMSEQ_Suc]] |
2592 from tendsto_mult[OF LIMSEQ_inverse_real_of_nat LIMSEQ_power_zero[OF `norm x < 1`, THEN LIMSEQ_Suc]] |
2593 have "(\<lambda>n. 1 / real (n + 1) * x ^ (n + 1)) ----> 0" |
2593 have "(\<lambda>n. 1 / real (n + 1) * x ^ (n + 1)) ----> 0" |
2594 unfolding inverse_eq_divide Suc_eq_plus1 by simp |
2594 unfolding inverse_eq_divide Suc_eq_plus1 by simp |
2595 then show ?thesis using pos2 by (rule LIMSEQ_linear) |
2595 then show ?thesis using pos2 by (rule LIMSEQ_linear) |
2596 next |
2596 next |
2597 case False hence "x = -1 \<or> x = 1" using `\<bar>x\<bar> \<le> 1` by auto |
2597 case False hence "x = -1 \<or> x = 1" using `\<bar>x\<bar> \<le> 1` by auto |
2598 hence n_eq: "\<And> n. x ^ (n * 2 + 1) = x" unfolding One_nat_def by auto |
2598 hence n_eq: "\<And> n. x ^ (n * 2 + 1) = x" unfolding One_nat_def by auto |
2599 from LIMSEQ_mult[OF LIMSEQ_inverse_real_of_nat[THEN LIMSEQ_linear, OF pos2, unfolded inverse_eq_divide] LIMSEQ_const[of x]] |
2599 from tendsto_mult[OF LIMSEQ_inverse_real_of_nat[THEN LIMSEQ_linear, OF pos2, unfolded inverse_eq_divide] tendsto_const[of x]] |
2600 show ?thesis unfolding n_eq Suc_eq_plus1 by auto |
2600 show ?thesis unfolding n_eq Suc_eq_plus1 by auto |
2601 qed |
2601 qed |
2602 qed |
2602 qed |
2603 |
2603 |
2604 lemma summable_arctan_series: fixes x :: real and n :: nat |
2604 lemma summable_arctan_series: fixes x :: real and n :: nat |
2773 by (auto intro!: isCont_add isCont_rabs isCont_ident isCont_minus isCont_arctan isCont_inverse isCont_mult isCont_power isCont_const isCont_setsum) |
2773 by (auto intro!: isCont_add isCont_rabs isCont_ident isCont_minus isCont_arctan isCont_inverse isCont_mult isCont_power isCont_const isCont_setsum) |
2774 ultimately have "0 \<le> ?a 1 n - ?diff 1 n" by (rule LIM_less_bound) |
2774 ultimately have "0 \<le> ?a 1 n - ?diff 1 n" by (rule LIM_less_bound) |
2775 hence "?diff 1 n \<le> ?a 1 n" by auto |
2775 hence "?diff 1 n \<le> ?a 1 n" by auto |
2776 } |
2776 } |
2777 have "?a 1 ----> 0" |
2777 have "?a 1 ----> 0" |
2778 unfolding LIMSEQ_rabs_zero power_one divide_inverse One_nat_def |
2778 unfolding tendsto_rabs_zero_iff power_one divide_inverse One_nat_def |
2779 by (auto intro!: LIMSEQ_mult LIMSEQ_linear LIMSEQ_inverse_real_of_nat) |
2779 by (auto intro!: tendsto_mult LIMSEQ_linear LIMSEQ_inverse_real_of_nat) |
2780 have "?diff 1 ----> 0" |
2780 have "?diff 1 ----> 0" |
2781 proof (rule LIMSEQ_I) |
2781 proof (rule LIMSEQ_I) |
2782 fix r :: real assume "0 < r" |
2782 fix r :: real assume "0 < r" |
2783 obtain N :: nat where N_I: "\<And> n. N \<le> n \<Longrightarrow> ?a 1 n < r" using LIMSEQ_D[OF `?a 1 ----> 0` `0 < r`] by auto |
2783 obtain N :: nat where N_I: "\<And> n. N \<le> n \<Longrightarrow> ?a 1 n < r" using LIMSEQ_D[OF `?a 1 ----> 0` `0 < r`] by auto |
2784 { fix n assume "N \<le> n" from `?diff 1 n \<le> ?a 1 n` N_I[OF this] |
2784 { fix n assume "N \<le> n" from `?diff 1 n \<le> ?a 1 n` N_I[OF this] |
2785 have "norm (?diff 1 n - 0) < r" by auto } |
2785 have "norm (?diff 1 n - 0) < r" by auto } |
2786 thus "\<exists> N. \<forall> n \<ge> N. norm (?diff 1 n - 0) < r" by blast |
2786 thus "\<exists> N. \<forall> n \<ge> N. norm (?diff 1 n - 0) < r" by blast |
2787 qed |
2787 qed |
2788 from this[unfolded LIMSEQ_rabs_zero diff_minus add_commute[of "arctan 1"], THEN LIMSEQ_add_const, of "- arctan 1", THEN LIMSEQ_minus] |
2788 from this[unfolded tendsto_rabs_zero_iff diff_minus add_commute[of "arctan 1"], THEN LIMSEQ_add_const, of "- arctan 1", THEN tendsto_minus] |
2789 have "(?c 1) sums (arctan 1)" unfolding sums_def by auto |
2789 have "(?c 1) sums (arctan 1)" unfolding sums_def by auto |
2790 hence "arctan 1 = (\<Sum> i. ?c 1 i)" by (rule sums_unique) |
2790 hence "arctan 1 = (\<Sum> i. ?c 1 i)" by (rule sums_unique) |
2791 |
2791 |
2792 show ?thesis |
2792 show ?thesis |
2793 proof (cases "x = 1", simp add: `arctan 1 = (\<Sum> i. ?c 1 i)`) |
2793 proof (cases "x = 1", simp add: `arctan 1 = (\<Sum> i. ?c 1 i)`) |