diff options
author | Samuel Mimram <smimram@debian.org> | 2006-11-21 21:38:49 +0000 |
---|---|---|
committer | Samuel Mimram <smimram@debian.org> | 2006-11-21 21:38:49 +0000 |
commit | 208a0f7bfa5249f9795e6e225f309cbe715c0fad (patch) | |
tree | 591e9e512063e34099782e2518573f15ffeac003 /theories/Reals/SeqSeries.v | |
parent | de0085539583f59dc7c4bf4e272e18711d565466 (diff) |
Imported Upstream version 8.1~gammaupstream/8.1.gamma
Diffstat (limited to 'theories/Reals/SeqSeries.v')
-rw-r--r-- | theories/Reals/SeqSeries.v | 756 |
1 files changed, 379 insertions, 377 deletions
diff --git a/theories/Reals/SeqSeries.v b/theories/Reals/SeqSeries.v index 6cab2486..bc17cd43 100644 --- a/theories/Reals/SeqSeries.v +++ b/theories/Reals/SeqSeries.v @@ -5,8 +5,8 @@ (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (************************************************************************) - -(*i $Id: SeqSeries.v 8670 2006-03-28 22:16:14Z herbelin $ i*) + +(*i $Id: SeqSeries.v 9245 2006-10-17 12:53:34Z notin $ i*) Require Import Rbase. Require Import Rfunctions. @@ -25,393 +25,395 @@ Open Local Scope R_scope. (**********) Lemma sum_maj1 : - forall (fn:nat -> R -> R) (An:nat -> R) (x l1 l2:R) - (N:nat), - Un_cv (fun n:nat => SP fn n x) l1 -> - Un_cv (fun n:nat => sum_f_R0 An n) l2 -> - (forall n:nat, Rabs (fn n x) <= An n) -> - Rabs (l1 - SP fn N x) <= l2 - sum_f_R0 An N. -intros; - cut - (sigT - (fun l:R => - Un_cv (fun n:nat => sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n) l)). -intro X; - cut - (sigT - (fun l:R => - Un_cv (fun n:nat => sum_f_R0 (fun l:nat => An (S N + l)%nat) n) l)). -intro X0; elim X; intros l1N H2. -elim X0; intros l2N H3. -cut (l1 - SP fn N x = l1N). -intro; cut (l2 - sum_f_R0 An N = l2N). -intro; rewrite H4; rewrite H5. -apply sum_cv_maj with - (fun l:nat => An (S N + l)%nat) (fun (l:nat) (x:R) => fn (S N + l)%nat x) x. -unfold SP in |- *; apply H2. -apply H3. -intros; apply H1. -symmetry in |- *; eapply UL_sequence. -apply H3. -unfold Un_cv in H0; unfold Un_cv in |- *; intros; elim (H0 eps H5); - intros N0 H6. -unfold R_dist in H6; exists N0; intros. -unfold R_dist in |- *; - replace (sum_f_R0 (fun l:nat => An (S N + l)%nat) n - (l2 - sum_f_R0 An N)) - with (sum_f_R0 An N + sum_f_R0 (fun l:nat => An (S N + l)%nat) n - l2); - [ idtac | ring ]. -replace (sum_f_R0 An N + sum_f_R0 (fun l:nat => An (S N + l)%nat) n) with - (sum_f_R0 An (S (N + n))). -apply H6; unfold ge in |- *; apply le_trans with n. -apply H7. -apply le_trans with (N + n)%nat. -apply le_plus_r. -apply le_n_Sn. -cut (0 <= N)%nat. -cut (N < S (N + n))%nat. -intros; assert (H10 := sigma_split An H9 H8). -unfold sigma in H10. -do 2 rewrite <- minus_n_O in H10. -replace (sum_f_R0 An (S (N + n))) with - (sum_f_R0 (fun k:nat => An (0 + k)%nat) (S (N + n))). -replace (sum_f_R0 An N) with (sum_f_R0 (fun k:nat => An (0 + k)%nat) N). -cut ((S (N + n) - S N)%nat = n). -intro; rewrite H11 in H10. -apply H10. -apply INR_eq; rewrite minus_INR. -do 2 rewrite S_INR; rewrite plus_INR; ring. -apply le_n_S; apply le_plus_l. -apply sum_eq; intros. -reflexivity. -apply sum_eq; intros. -reflexivity. -apply le_lt_n_Sm; apply le_plus_l. -apply le_O_n. -symmetry in |- *; eapply UL_sequence. -apply H2. -unfold Un_cv in H; unfold Un_cv in |- *; intros. -elim (H eps H4); intros N0 H5. -unfold R_dist in H5; exists N0; intros. -unfold R_dist, SP in |- *; - replace + forall (fn:nat -> R -> R) (An:nat -> R) (x l1 l2:R) + (N:nat), + Un_cv (fun n:nat => SP fn n x) l1 -> + Un_cv (fun n:nat => sum_f_R0 An n) l2 -> + (forall n:nat, Rabs (fn n x) <= An n) -> + Rabs (l1 - SP fn N x) <= l2 - sum_f_R0 An N. +Proof. + intros; + cut + (sigT + (fun l:R => + Un_cv (fun n:nat => sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n) l)). + intro X; + cut + (sigT + (fun l:R => + Un_cv (fun n:nat => sum_f_R0 (fun l:nat => An (S N + l)%nat) n) l)). + intro X0; elim X; intros l1N H2. + elim X0; intros l2N H3. + cut (l1 - SP fn N x = l1N). + intro; cut (l2 - sum_f_R0 An N = l2N). + intro; rewrite H4; rewrite H5. + apply sum_cv_maj with + (fun l:nat => An (S N + l)%nat) (fun (l:nat) (x:R) => fn (S N + l)%nat x) x. + unfold SP in |- *; apply H2. + apply H3. + intros; apply H1. + symmetry in |- *; eapply UL_sequence. + apply H3. + unfold Un_cv in H0; unfold Un_cv in |- *; intros; elim (H0 eps H5); + intros N0 H6. + unfold R_dist in H6; exists N0; intros. + unfold R_dist in |- *; + replace (sum_f_R0 (fun l:nat => An (S N + l)%nat) n - (l2 - sum_f_R0 An N)) + with (sum_f_R0 An N + sum_f_R0 (fun l:nat => An (S N + l)%nat) n - l2); + [ idtac | ring ]. + replace (sum_f_R0 An N + sum_f_R0 (fun l:nat => An (S N + l)%nat) n) with + (sum_f_R0 An (S (N + n))). + apply H6; unfold ge in |- *; apply le_trans with n. + apply H7. + apply le_trans with (N + n)%nat. + apply le_plus_r. + apply le_n_Sn. + cut (0 <= N)%nat. + cut (N < S (N + n))%nat. + intros; assert (H10 := sigma_split An H9 H8). + unfold sigma in H10. + do 2 rewrite <- minus_n_O in H10. + replace (sum_f_R0 An (S (N + n))) with + (sum_f_R0 (fun k:nat => An (0 + k)%nat) (S (N + n))). + replace (sum_f_R0 An N) with (sum_f_R0 (fun k:nat => An (0 + k)%nat) N). + cut ((S (N + n) - S N)%nat = n). + intro; rewrite H11 in H10. + apply H10. + apply INR_eq; rewrite minus_INR. + do 2 rewrite S_INR; rewrite plus_INR; ring. + apply le_n_S; apply le_plus_l. + apply sum_eq; intros. + reflexivity. + apply sum_eq; intros. + reflexivity. + apply le_lt_n_Sm; apply le_plus_l. + apply le_O_n. + symmetry in |- *; eapply UL_sequence. + apply H2. + unfold Un_cv in H; unfold Un_cv in |- *; intros. + elim (H eps H4); intros N0 H5. + unfold R_dist in H5; exists N0; intros. + unfold R_dist, SP in |- *; + replace + (sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n - + (l1 - sum_f_R0 (fun k:nat => fn k x) N)) with + (sum_f_R0 (fun k:nat => fn k x) N + + sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n - l1); + [ idtac | ring ]. + replace + (sum_f_R0 (fun k:nat => fn k x) N + + sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n) with + (sum_f_R0 (fun k:nat => fn k x) (S (N + n))). + unfold SP in H5; apply H5; unfold ge in |- *; apply le_trans with n. + apply H6. + apply le_trans with (N + n)%nat. + apply le_plus_r. + apply le_n_Sn. + cut (0 <= N)%nat. + cut (N < S (N + n))%nat. + intros; assert (H9 := sigma_split (fun k:nat => fn k x) H8 H7). + unfold sigma in H9. + do 2 rewrite <- minus_n_O in H9. + replace (sum_f_R0 (fun k:nat => fn k x) (S (N + n))) with + (sum_f_R0 (fun k:nat => fn (0 + k)%nat x) (S (N + n))). + replace (sum_f_R0 (fun k:nat => fn k x) N) with + (sum_f_R0 (fun k:nat => fn (0 + k)%nat x) N). + cut ((S (N + n) - S N)%nat = n). + intro; rewrite H10 in H9. + apply H9. + apply INR_eq; rewrite minus_INR. + do 2 rewrite S_INR; rewrite plus_INR; ring. + apply le_n_S; apply le_plus_l. + apply sum_eq; intros. + reflexivity. + apply sum_eq; intros. + reflexivity. + apply le_lt_n_Sm. + apply le_plus_l. + apply le_O_n. + apply existT with (l2 - sum_f_R0 An N). + unfold Un_cv in H0; unfold Un_cv in |- *; intros. + elim (H0 eps H2); intros N0 H3. + unfold R_dist in H3; exists N0; intros. + unfold R_dist in |- *; + replace (sum_f_R0 (fun l:nat => An (S N + l)%nat) n - (l2 - sum_f_R0 An N)) + with (sum_f_R0 An N + sum_f_R0 (fun l:nat => An (S N + l)%nat) n - l2); + [ idtac | ring ]. + replace (sum_f_R0 An N + sum_f_R0 (fun l:nat => An (S N + l)%nat) n) with + (sum_f_R0 An (S (N + n))). + apply H3; unfold ge in |- *; apply le_trans with n. + apply H4. + apply le_trans with (N + n)%nat. + apply le_plus_r. + apply le_n_Sn. + cut (0 <= N)%nat. + cut (N < S (N + n))%nat. + intros; assert (H7 := sigma_split An H6 H5). + unfold sigma in H7. + do 2 rewrite <- minus_n_O in H7. + replace (sum_f_R0 An (S (N + n))) with + (sum_f_R0 (fun k:nat => An (0 + k)%nat) (S (N + n))). + replace (sum_f_R0 An N) with (sum_f_R0 (fun k:nat => An (0 + k)%nat) N). + cut ((S (N + n) - S N)%nat = n). + intro; rewrite H8 in H7. + apply H7. + apply INR_eq; rewrite minus_INR. + do 2 rewrite S_INR; rewrite plus_INR; ring. + apply le_n_S; apply le_plus_l. + apply sum_eq; intros. + reflexivity. + apply sum_eq; intros. + reflexivity. + apply le_lt_n_Sm. + apply le_plus_l. + apply le_O_n. + apply existT with (l1 - SP fn N x). + unfold Un_cv in H; unfold Un_cv in |- *; intros. + elim (H eps H2); intros N0 H3. + unfold R_dist in H3; exists N0; intros. + unfold R_dist, SP in |- *. + replace (sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n - - (l1 - sum_f_R0 (fun k:nat => fn k x) N)) with + (l1 - sum_f_R0 (fun k:nat => fn k x) N)) with + (sum_f_R0 (fun k:nat => fn k x) N + + sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n - l1); + [ idtac | ring ]. + replace (sum_f_R0 (fun k:nat => fn k x) N + - sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n - l1); - [ idtac | ring ]. -replace - (sum_f_R0 (fun k:nat => fn k x) N + - sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n) with - (sum_f_R0 (fun k:nat => fn k x) (S (N + n))). -unfold SP in H5; apply H5; unfold ge in |- *; apply le_trans with n. -apply H6. -apply le_trans with (N + n)%nat. -apply le_plus_r. -apply le_n_Sn. -cut (0 <= N)%nat. -cut (N < S (N + n))%nat. -intros; assert (H9 := sigma_split (fun k:nat => fn k x) H8 H7). -unfold sigma in H9. -do 2 rewrite <- minus_n_O in H9. -replace (sum_f_R0 (fun k:nat => fn k x) (S (N + n))) with - (sum_f_R0 (fun k:nat => fn (0 + k)%nat x) (S (N + n))). -replace (sum_f_R0 (fun k:nat => fn k x) N) with - (sum_f_R0 (fun k:nat => fn (0 + k)%nat x) N). -cut ((S (N + n) - S N)%nat = n). -intro; rewrite H10 in H9. -apply H9. -apply INR_eq; rewrite minus_INR. -do 2 rewrite S_INR; rewrite plus_INR; ring. -apply le_n_S; apply le_plus_l. -apply sum_eq; intros. -reflexivity. -apply sum_eq; intros. -reflexivity. -apply le_lt_n_Sm. -apply le_plus_l. -apply le_O_n. -apply existT with (l2 - sum_f_R0 An N). -unfold Un_cv in H0; unfold Un_cv in |- *; intros. -elim (H0 eps H2); intros N0 H3. -unfold R_dist in H3; exists N0; intros. -unfold R_dist in |- *; - replace (sum_f_R0 (fun l:nat => An (S N + l)%nat) n - (l2 - sum_f_R0 An N)) - with (sum_f_R0 An N + sum_f_R0 (fun l:nat => An (S N + l)%nat) n - l2); - [ idtac | ring ]. -replace (sum_f_R0 An N + sum_f_R0 (fun l:nat => An (S N + l)%nat) n) with - (sum_f_R0 An (S (N + n))). -apply H3; unfold ge in |- *; apply le_trans with n. -apply H4. -apply le_trans with (N + n)%nat. -apply le_plus_r. -apply le_n_Sn. -cut (0 <= N)%nat. -cut (N < S (N + n))%nat. -intros; assert (H7 := sigma_split An H6 H5). -unfold sigma in H7. -do 2 rewrite <- minus_n_O in H7. -replace (sum_f_R0 An (S (N + n))) with - (sum_f_R0 (fun k:nat => An (0 + k)%nat) (S (N + n))). -replace (sum_f_R0 An N) with (sum_f_R0 (fun k:nat => An (0 + k)%nat) N). -cut ((S (N + n) - S N)%nat = n). -intro; rewrite H8 in H7. -apply H7. -apply INR_eq; rewrite minus_INR. -do 2 rewrite S_INR; rewrite plus_INR; ring. -apply le_n_S; apply le_plus_l. -apply sum_eq; intros. -reflexivity. -apply sum_eq; intros. -reflexivity. -apply le_lt_n_Sm. -apply le_plus_l. -apply le_O_n. -apply existT with (l1 - SP fn N x). -unfold Un_cv in H; unfold Un_cv in |- *; intros. -elim (H eps H2); intros N0 H3. -unfold R_dist in H3; exists N0; intros. -unfold R_dist, SP in |- *. -replace - (sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n - - (l1 - sum_f_R0 (fun k:nat => fn k x) N)) with - (sum_f_R0 (fun k:nat => fn k x) N + - sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n - l1); - [ idtac | ring ]. -replace - (sum_f_R0 (fun k:nat => fn k x) N + - sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n) with - (sum_f_R0 (fun k:nat => fn k x) (S (N + n))). -unfold SP in H3; apply H3. -unfold ge in |- *; apply le_trans with n. -apply H4. -apply le_trans with (N + n)%nat. -apply le_plus_r. -apply le_n_Sn. -cut (0 <= N)%nat. -cut (N < S (N + n))%nat. -intros; assert (H7 := sigma_split (fun k:nat => fn k x) H6 H5). -unfold sigma in H7. -do 2 rewrite <- minus_n_O in H7. -replace (sum_f_R0 (fun k:nat => fn k x) (S (N + n))) with - (sum_f_R0 (fun k:nat => fn (0 + k)%nat x) (S (N + n))). -replace (sum_f_R0 (fun k:nat => fn k x) N) with - (sum_f_R0 (fun k:nat => fn (0 + k)%nat x) N). -cut ((S (N + n) - S N)%nat = n). -intro; rewrite H8 in H7. -apply H7. -apply INR_eq; rewrite minus_INR. -do 2 rewrite S_INR; rewrite plus_INR; ring. -apply le_n_S; apply le_plus_l. -apply sum_eq; intros. -reflexivity. -apply sum_eq; intros. -reflexivity. -apply le_lt_n_Sm. -apply le_plus_l. -apply le_O_n. + sum_f_R0 (fun l:nat => fn (S N + l)%nat x) n) with + (sum_f_R0 (fun k:nat => fn k x) (S (N + n))). + unfold SP in H3; apply H3. + unfold ge in |- *; apply le_trans with n. + apply H4. + apply le_trans with (N + n)%nat. + apply le_plus_r. + apply le_n_Sn. + cut (0 <= N)%nat. + cut (N < S (N + n))%nat. + intros; assert (H7 := sigma_split (fun k:nat => fn k x) H6 H5). + unfold sigma in H7. + do 2 rewrite <- minus_n_O in H7. + replace (sum_f_R0 (fun k:nat => fn k x) (S (N + n))) with + (sum_f_R0 (fun k:nat => fn (0 + k)%nat x) (S (N + n))). + replace (sum_f_R0 (fun k:nat => fn k x) N) with + (sum_f_R0 (fun k:nat => fn (0 + k)%nat x) N). + cut ((S (N + n) - S N)%nat = n). + intro; rewrite H8 in H7. + apply H7. + apply INR_eq; rewrite minus_INR. + do 2 rewrite S_INR; rewrite plus_INR; ring. + apply le_n_S; apply le_plus_l. + apply sum_eq; intros. + reflexivity. + apply sum_eq; intros. + reflexivity. + apply le_lt_n_Sm. + apply le_plus_l. + apply le_O_n. Qed. -(* Comparaison of convergence for series *) +(** Comparaison of convergence for series *) Lemma Rseries_CV_comp : - forall An Bn:nat -> R, - (forall n:nat, 0 <= An n <= Bn n) -> - sigT (fun l:R => Un_cv (fun N:nat => sum_f_R0 Bn N) l) -> - sigT (fun l:R => Un_cv (fun N:nat => sum_f_R0 An N) l). -intros An Bn H X; apply cv_cauchy_2. -assert (H0 := cv_cauchy_1 _ X). -unfold Cauchy_crit_series in |- *; unfold Cauchy_crit in |- *. -intros; elim (H0 eps H1); intros. -exists x; intros. -cut - (R_dist (sum_f_R0 An n) (sum_f_R0 An m) <= - R_dist (sum_f_R0 Bn n) (sum_f_R0 Bn m)). -intro; apply Rle_lt_trans with (R_dist (sum_f_R0 Bn n) (sum_f_R0 Bn m)). -assumption. -apply H2; assumption. -assert (H5 := lt_eq_lt_dec n m). -elim H5; intro. -elim a; intro. -rewrite (tech2 An n m); [ idtac | assumption ]. -rewrite (tech2 Bn n m); [ idtac | assumption ]. -unfold R_dist in |- *; unfold Rminus in |- *; do 2 rewrite Ropp_plus_distr; - do 2 rewrite <- Rplus_assoc; do 2 rewrite Rplus_opp_r; - do 2 rewrite Rplus_0_l; do 2 rewrite Rabs_Ropp; repeat rewrite Rabs_right. -apply sum_Rle; intros. -elim (H (S n + n0)%nat); intros. -apply H8. -apply Rle_ge; apply cond_pos_sum; intro. -elim (H (S n + n0)%nat); intros. -apply Rle_trans with (An (S n + n0)%nat); assumption. -apply Rle_ge; apply cond_pos_sum; intro. -elim (H (S n + n0)%nat); intros; assumption. -rewrite b; unfold R_dist in |- *; unfold Rminus in |- *; - do 2 rewrite Rplus_opp_r; rewrite Rabs_R0; right; - reflexivity. -rewrite (tech2 An m n); [ idtac | assumption ]. -rewrite (tech2 Bn m n); [ idtac | assumption ]. -unfold R_dist in |- *; unfold Rminus in |- *; do 2 rewrite Rplus_assoc; - rewrite (Rplus_comm (sum_f_R0 An m)); rewrite (Rplus_comm (sum_f_R0 Bn m)); - do 2 rewrite Rplus_assoc; do 2 rewrite Rplus_opp_l; - do 2 rewrite Rplus_0_r; repeat rewrite Rabs_right. -apply sum_Rle; intros. -elim (H (S m + n0)%nat); intros; apply H8. -apply Rle_ge; apply cond_pos_sum; intro. -elim (H (S m + n0)%nat); intros. -apply Rle_trans with (An (S m + n0)%nat); assumption. -apply Rle_ge. -apply cond_pos_sum; intro. -elim (H (S m + n0)%nat); intros; assumption. + forall An Bn:nat -> R, + (forall n:nat, 0 <= An n <= Bn n) -> + sigT (fun l:R => Un_cv (fun N:nat => sum_f_R0 Bn N) l) -> + sigT (fun l:R => Un_cv (fun N:nat => sum_f_R0 An N) l). +Proof. + intros An Bn H X; apply cv_cauchy_2. + assert (H0 := cv_cauchy_1 _ X). + unfold Cauchy_crit_series in |- *; unfold Cauchy_crit in |- *. + intros; elim (H0 eps H1); intros. + exists x; intros. + cut + (R_dist (sum_f_R0 An n) (sum_f_R0 An m) <= + R_dist (sum_f_R0 Bn n) (sum_f_R0 Bn m)). + intro; apply Rle_lt_trans with (R_dist (sum_f_R0 Bn n) (sum_f_R0 Bn m)). + assumption. + apply H2; assumption. + assert (H5 := lt_eq_lt_dec n m). + elim H5; intro. + elim a; intro. + rewrite (tech2 An n m); [ idtac | assumption ]. + rewrite (tech2 Bn n m); [ idtac | assumption ]. + unfold R_dist in |- *; unfold Rminus in |- *; do 2 rewrite Ropp_plus_distr; + do 2 rewrite <- Rplus_assoc; do 2 rewrite Rplus_opp_r; + do 2 rewrite Rplus_0_l; do 2 rewrite Rabs_Ropp; repeat rewrite Rabs_right. + apply sum_Rle; intros. + elim (H (S n + n0)%nat); intros. + apply H8. + apply Rle_ge; apply cond_pos_sum; intro. + elim (H (S n + n0)%nat); intros. + apply Rle_trans with (An (S n + n0)%nat); assumption. + apply Rle_ge; apply cond_pos_sum; intro. + elim (H (S n + n0)%nat); intros; assumption. + rewrite b; unfold R_dist in |- *; unfold Rminus in |- *; + do 2 rewrite Rplus_opp_r; rewrite Rabs_R0; right; + reflexivity. + rewrite (tech2 An m n); [ idtac | assumption ]. + rewrite (tech2 Bn m n); [ idtac | assumption ]. + unfold R_dist in |- *; unfold Rminus in |- *; do 2 rewrite Rplus_assoc; + rewrite (Rplus_comm (sum_f_R0 An m)); rewrite (Rplus_comm (sum_f_R0 Bn m)); + do 2 rewrite Rplus_assoc; do 2 rewrite Rplus_opp_l; + do 2 rewrite Rplus_0_r; repeat rewrite Rabs_right. + apply sum_Rle; intros. + elim (H (S m + n0)%nat); intros; apply H8. + apply Rle_ge; apply cond_pos_sum; intro. + elim (H (S m + n0)%nat); intros. + apply Rle_trans with (An (S m + n0)%nat); assumption. + apply Rle_ge. + apply cond_pos_sum; intro. + elim (H (S m + n0)%nat); intros; assumption. Qed. -(* Cesaro's theorem *) +(** Cesaro's theorem *) Lemma Cesaro : - forall (An Bn:nat -> R) (l:R), - Un_cv Bn l -> - (forall n:nat, 0 < An n) -> - cv_infty (fun n:nat => sum_f_R0 An n) -> - Un_cv (fun n:nat => sum_f_R0 (fun k:nat => An k * Bn k) n / sum_f_R0 An n) - l. + forall (An Bn:nat -> R) (l:R), + Un_cv Bn l -> + (forall n:nat, 0 < An n) -> + cv_infty (fun n:nat => sum_f_R0 An n) -> + Un_cv (fun n:nat => sum_f_R0 (fun k:nat => An k * Bn k) n / sum_f_R0 An n) + l. Proof with trivial. -unfold Un_cv in |- *; intros; assert (H3 : forall n:nat, 0 < sum_f_R0 An n)... -intro; apply tech1... -assert (H4 : forall n:nat, sum_f_R0 An n <> 0)... -intro; red in |- *; intro; assert (H5 := H3 n); rewrite H4 in H5; - elim (Rlt_irrefl _ H5)... -assert (H5 := cv_infty_cv_R0 _ H4 H1); assert (H6 : 0 < eps / 2)... -unfold Rdiv in |- *; apply Rmult_lt_0_compat... -apply Rinv_0_lt_compat; prove_sup... -elim (H _ H6); clear H; intros N1 H; - set (C := Rabs (sum_f_R0 (fun k:nat => An k * (Bn k - l)) N1)); - assert - (H7 : - exists N : nat, - (forall n:nat, (N <= n)%nat -> C / sum_f_R0 An n < eps / 2))... -case (Req_dec C 0); intro... -exists 0%nat; intros... -rewrite H7; unfold Rdiv in |- *; rewrite Rmult_0_l; apply Rmult_lt_0_compat... -apply Rinv_0_lt_compat; prove_sup... -assert (H8 : 0 < eps / (2 * Rabs C))... -unfold Rdiv in |- *; apply Rmult_lt_0_compat... -apply Rinv_0_lt_compat; apply Rmult_lt_0_compat... -prove_sup... -apply Rabs_pos_lt... -elim (H5 _ H8); intros; exists x; intros; assert (H11 := H9 _ H10); - unfold R_dist in H11; unfold Rminus in H11; rewrite Ropp_0 in H11; - rewrite Rplus_0_r in H11... -apply Rle_lt_trans with (Rabs (C / sum_f_R0 An n))... -apply RRle_abs... -unfold Rdiv in |- *; rewrite Rabs_mult; apply Rmult_lt_reg_l with (/ Rabs C)... -apply Rinv_0_lt_compat; apply Rabs_pos_lt... -rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym... -rewrite Rmult_1_l; replace (/ Rabs C * (eps * / 2)) with (eps / (2 * Rabs C))... -unfold Rdiv in |- *; rewrite Rinv_mult_distr... -ring... -discrR... -apply Rabs_no_R0... -apply Rabs_no_R0... -elim H7; clear H7; intros N2 H7; set (N := max N1 N2); exists (S N); intros; - unfold R_dist in |- *; - replace (sum_f_R0 (fun k:nat => An k * Bn k) n / sum_f_R0 An n - l) with - (sum_f_R0 (fun k:nat => An k * (Bn k - l)) n / sum_f_R0 An n)... -assert (H9 : (N1 < n)%nat)... -apply lt_le_trans with (S N)... -apply le_lt_n_Sm; unfold N in |- *; apply le_max_l... -rewrite (tech2 (fun k:nat => An k * (Bn k - l)) _ _ H9); unfold Rdiv in |- *; - rewrite Rmult_plus_distr_r; - apply Rle_lt_trans with - (Rabs (sum_f_R0 (fun k:nat => An k * (Bn k - l)) N1 / sum_f_R0 An n) + - Rabs - (sum_f_R0 (fun i:nat => An (S N1 + i)%nat * (Bn (S N1 + i)%nat - l)) - (n - S N1) / sum_f_R0 An n))... -apply Rabs_triang... -rewrite (double_var eps); apply Rplus_lt_compat... -unfold Rdiv in |- *; rewrite Rabs_mult; fold C in |- *; rewrite Rabs_right... -apply (H7 n); apply le_trans with (S N)... -apply le_trans with N; [ unfold N in |- *; apply le_max_r | apply le_n_Sn ]... -apply Rle_ge; left; apply Rinv_0_lt_compat... + unfold Un_cv in |- *; intros; assert (H3 : forall n:nat, 0 < sum_f_R0 An n)... + intro; apply tech1... + assert (H4 : forall n:nat, sum_f_R0 An n <> 0)... + intro; red in |- *; intro; assert (H5 := H3 n); rewrite H4 in H5; + elim (Rlt_irrefl _ H5)... + assert (H5 := cv_infty_cv_R0 _ H4 H1); assert (H6 : 0 < eps / 2)... + unfold Rdiv in |- *; apply Rmult_lt_0_compat... + apply Rinv_0_lt_compat; prove_sup... + elim (H _ H6); clear H; intros N1 H; + set (C := Rabs (sum_f_R0 (fun k:nat => An k * (Bn k - l)) N1)); + assert + (H7 : + exists N : nat, + (forall n:nat, (N <= n)%nat -> C / sum_f_R0 An n < eps / 2))... + case (Req_dec C 0); intro... + exists 0%nat; intros... + rewrite H7; unfold Rdiv in |- *; rewrite Rmult_0_l; apply Rmult_lt_0_compat... + apply Rinv_0_lt_compat; prove_sup... + assert (H8 : 0 < eps / (2 * Rabs C))... + unfold Rdiv in |- *; apply Rmult_lt_0_compat... + apply Rinv_0_lt_compat; apply Rmult_lt_0_compat... + prove_sup... + apply Rabs_pos_lt... + elim (H5 _ H8); intros; exists x; intros; assert (H11 := H9 _ H10); + unfold R_dist in H11; unfold Rminus in H11; rewrite Ropp_0 in H11; + rewrite Rplus_0_r in H11... + apply Rle_lt_trans with (Rabs (C / sum_f_R0 An n))... + apply RRle_abs... + unfold Rdiv in |- *; rewrite Rabs_mult; apply Rmult_lt_reg_l with (/ Rabs C)... + apply Rinv_0_lt_compat; apply Rabs_pos_lt... + rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym... + rewrite Rmult_1_l; replace (/ Rabs C * (eps * / 2)) with (eps / (2 * Rabs C))... + unfold Rdiv in |- *; rewrite Rinv_mult_distr... + ring... + discrR... + apply Rabs_no_R0... + apply Rabs_no_R0... + elim H7; clear H7; intros N2 H7; set (N := max N1 N2); exists (S N); intros; + unfold R_dist in |- *; + replace (sum_f_R0 (fun k:nat => An k * Bn k) n / sum_f_R0 An n - l) with + (sum_f_R0 (fun k:nat => An k * (Bn k - l)) n / sum_f_R0 An n)... + assert (H9 : (N1 < n)%nat)... + apply lt_le_trans with (S N)... + apply le_lt_n_Sm; unfold N in |- *; apply le_max_l... + rewrite (tech2 (fun k:nat => An k * (Bn k - l)) _ _ H9); unfold Rdiv in |- *; + rewrite Rmult_plus_distr_r; + apply Rle_lt_trans with + (Rabs (sum_f_R0 (fun k:nat => An k * (Bn k - l)) N1 / sum_f_R0 An n) + + Rabs + (sum_f_R0 (fun i:nat => An (S N1 + i)%nat * (Bn (S N1 + i)%nat - l)) + (n - S N1) / sum_f_R0 An n))... + apply Rabs_triang... + rewrite (double_var eps); apply Rplus_lt_compat... + unfold Rdiv in |- *; rewrite Rabs_mult; fold C in |- *; rewrite Rabs_right... + apply (H7 n); apply le_trans with (S N)... + apply le_trans with N; [ unfold N in |- *; apply le_max_r | apply le_n_Sn ]... + apply Rle_ge; left; apply Rinv_0_lt_compat... -unfold R_dist in H; unfold Rdiv in |- *; rewrite Rabs_mult; - rewrite (Rabs_right (/ sum_f_R0 An n))... -apply Rle_lt_trans with - (sum_f_R0 (fun i:nat => Rabs (An (S N1 + i)%nat * (Bn (S N1 + i)%nat - l))) - (n - S N1) * / sum_f_R0 An n)... -do 2 rewrite <- (Rmult_comm (/ sum_f_R0 An n)); apply Rmult_le_compat_l... -left; apply Rinv_0_lt_compat... -apply - (Rsum_abs (fun i:nat => An (S N1 + i)%nat * (Bn (S N1 + i)%nat - l)) - (n - S N1))... -apply Rle_lt_trans with - (sum_f_R0 (fun i:nat => An (S N1 + i)%nat * (eps / 2)) (n - S N1) * - / sum_f_R0 An n)... -do 2 rewrite <- (Rmult_comm (/ sum_f_R0 An n)); apply Rmult_le_compat_l... -left; apply Rinv_0_lt_compat... -apply sum_Rle; intros; rewrite Rabs_mult; - pattern (An (S N1 + n0)%nat) at 2 in |- *; - rewrite <- (Rabs_right (An (S N1 + n0)%nat))... -apply Rmult_le_compat_l... -apply Rabs_pos... -left; apply H; unfold ge in |- *; apply le_trans with (S N1); - [ apply le_n_Sn | apply le_plus_l ]... -apply Rle_ge; left... -rewrite <- (scal_sum (fun i:nat => An (S N1 + i)%nat) (n - S N1) (eps / 2)); - unfold Rdiv in |- *; repeat rewrite Rmult_assoc; apply Rmult_lt_compat_l... -pattern (/ 2) at 2 in |- *; rewrite <- Rmult_1_r; apply Rmult_lt_compat_l... -apply Rinv_0_lt_compat; prove_sup... -rewrite Rmult_comm; apply Rmult_lt_reg_l with (sum_f_R0 An n)... -rewrite <- Rmult_assoc; rewrite <- Rinv_r_sym... -rewrite Rmult_1_l; rewrite Rmult_1_r; rewrite (tech2 An N1 n)... -rewrite Rplus_comm; - pattern (sum_f_R0 (fun i:nat => An (S N1 + i)%nat) (n - S N1)) at 1 in |- *; - rewrite <- Rplus_0_r; apply Rplus_lt_compat_l... -apply Rle_ge; left; apply Rinv_0_lt_compat... -replace (sum_f_R0 (fun k:nat => An k * (Bn k - l)) n) with - (sum_f_R0 (fun k:nat => An k * Bn k) n + - sum_f_R0 (fun k:nat => An k * - l) n)... -rewrite <- (scal_sum An n (- l)); field... -rewrite <- plus_sum; apply sum_eq; intros; ring... + unfold R_dist in H; unfold Rdiv in |- *; rewrite Rabs_mult; + rewrite (Rabs_right (/ sum_f_R0 An n))... + apply Rle_lt_trans with + (sum_f_R0 (fun i:nat => Rabs (An (S N1 + i)%nat * (Bn (S N1 + i)%nat - l))) + (n - S N1) * / sum_f_R0 An n)... + do 2 rewrite <- (Rmult_comm (/ sum_f_R0 An n)); apply Rmult_le_compat_l... + left; apply Rinv_0_lt_compat... + apply + (Rsum_abs (fun i:nat => An (S N1 + i)%nat * (Bn (S N1 + i)%nat - l)) + (n - S N1))... + apply Rle_lt_trans with + (sum_f_R0 (fun i:nat => An (S N1 + i)%nat * (eps / 2)) (n - S N1) * + / sum_f_R0 An n)... + do 2 rewrite <- (Rmult_comm (/ sum_f_R0 An n)); apply Rmult_le_compat_l... + left; apply Rinv_0_lt_compat... + apply sum_Rle; intros; rewrite Rabs_mult; + pattern (An (S N1 + n0)%nat) at 2 in |- *; + rewrite <- (Rabs_right (An (S N1 + n0)%nat))... + apply Rmult_le_compat_l... + apply Rabs_pos... + left; apply H; unfold ge in |- *; apply le_trans with (S N1); + [ apply le_n_Sn | apply le_plus_l ]... + apply Rle_ge; left... + rewrite <- (scal_sum (fun i:nat => An (S N1 + i)%nat) (n - S N1) (eps / 2)); + unfold Rdiv in |- *; repeat rewrite Rmult_assoc; apply Rmult_lt_compat_l... + pattern (/ 2) at 2 in |- *; rewrite <- Rmult_1_r; apply Rmult_lt_compat_l... + apply Rinv_0_lt_compat; prove_sup... + rewrite Rmult_comm; apply Rmult_lt_reg_l with (sum_f_R0 An n)... + rewrite <- Rmult_assoc; rewrite <- Rinv_r_sym... + rewrite Rmult_1_l; rewrite Rmult_1_r; rewrite (tech2 An N1 n)... + rewrite Rplus_comm; + pattern (sum_f_R0 (fun i:nat => An (S N1 + i)%nat) (n - S N1)) at 1 in |- *; + rewrite <- Rplus_0_r; apply Rplus_lt_compat_l... + apply Rle_ge; left; apply Rinv_0_lt_compat... + replace (sum_f_R0 (fun k:nat => An k * (Bn k - l)) n) with + (sum_f_R0 (fun k:nat => An k * Bn k) n + + sum_f_R0 (fun k:nat => An k * - l) n)... + rewrite <- (scal_sum An n (- l)); field... + rewrite <- plus_sum; apply sum_eq; intros; ring... Qed. Lemma Cesaro_1 : - forall (An:nat -> R) (l:R), - Un_cv An l -> Un_cv (fun n:nat => sum_f_R0 An (pred n) / INR n) l. + forall (An:nat -> R) (l:R), + Un_cv An l -> Un_cv (fun n:nat => sum_f_R0 An (pred n) / INR n) l. Proof with trivial. -intros Bn l H; set (An := fun _:nat => 1)... -assert (H0 : forall n:nat, 0 < An n)... -intro; unfold An in |- *; apply Rlt_0_1... -assert (H1 : forall n:nat, 0 < sum_f_R0 An n)... -intro; apply tech1... -assert (H2 : cv_infty (fun n:nat => sum_f_R0 An n))... -unfold cv_infty in |- *; intro; case (Rle_dec M 0); intro... -exists 0%nat; intros; apply Rle_lt_trans with 0... -assert (H2 : 0 < M)... -auto with real... -clear n; set (m := up M); elim (archimed M); intros; - assert (H5 : (0 <= m)%Z)... -apply le_IZR; unfold m in |- *; simpl in |- *; left; apply Rlt_trans with M... -elim (IZN _ H5); intros; exists x; intros; unfold An in |- *; rewrite sum_cte; - rewrite Rmult_1_l; apply Rlt_trans with (IZR (up M))... -apply Rle_lt_trans with (INR x)... -rewrite INR_IZR_INZ; fold m in |- *; rewrite <- H6; right... -apply lt_INR; apply le_lt_n_Sm... -assert (H3 := Cesaro _ _ _ H H0 H2)... -unfold Un_cv in |- *; unfold Un_cv in H3; intros; elim (H3 _ H4); intros; - exists (S x); intros; unfold R_dist in |- *; unfold R_dist in H5; - apply Rle_lt_trans with - (Rabs - (sum_f_R0 (fun k:nat => An k * Bn k) (pred n) / sum_f_R0 An (pred n) - l))... -right; - replace (sum_f_R0 Bn (pred n) / INR n - l) with - (sum_f_R0 (fun k:nat => An k * Bn k) (pred n) / sum_f_R0 An (pred n) - l)... -unfold Rminus in |- *; do 2 rewrite <- (Rplus_comm (- l)); - apply Rplus_eq_compat_l... -unfold An in |- *; - replace (sum_f_R0 (fun k:nat => 1 * Bn k) (pred n)) with - (sum_f_R0 Bn (pred n))... -rewrite sum_cte; rewrite Rmult_1_l; replace (S (pred n)) with n... -apply S_pred with 0%nat; apply lt_le_trans with (S x)... -apply lt_O_Sn... -apply sum_eq; intros; ring... -apply H5; unfold ge in |- *; apply le_S_n; replace (S (pred n)) with n... -apply S_pred with 0%nat; apply lt_le_trans with (S x)... -apply lt_O_Sn... + intros Bn l H; set (An := fun _:nat => 1)... + assert (H0 : forall n:nat, 0 < An n)... + intro; unfold An in |- *; apply Rlt_0_1... + assert (H1 : forall n:nat, 0 < sum_f_R0 An n)... + intro; apply tech1... + assert (H2 : cv_infty (fun n:nat => sum_f_R0 An n))... + unfold cv_infty in |- *; intro; case (Rle_dec M 0); intro... + exists 0%nat; intros; apply Rle_lt_trans with 0... + assert (H2 : 0 < M)... + auto with real... + clear n; set (m := up M); elim (archimed M); intros; + assert (H5 : (0 <= m)%Z)... + apply le_IZR; unfold m in |- *; simpl in |- *; left; apply Rlt_trans with M... + elim (IZN _ H5); intros; exists x; intros; unfold An in |- *; rewrite sum_cte; + rewrite Rmult_1_l; apply Rlt_trans with (IZR (up M))... + apply Rle_lt_trans with (INR x)... + rewrite INR_IZR_INZ; fold m in |- *; rewrite <- H6; right... + apply lt_INR; apply le_lt_n_Sm... + assert (H3 := Cesaro _ _ _ H H0 H2)... + unfold Un_cv in |- *; unfold Un_cv in H3; intros; elim (H3 _ H4); intros; + exists (S x); intros; unfold R_dist in |- *; unfold R_dist in H5; + apply Rle_lt_trans with + (Rabs + (sum_f_R0 (fun k:nat => An k * Bn k) (pred n) / sum_f_R0 An (pred n) - l))... + right; + replace (sum_f_R0 Bn (pred n) / INR n - l) with + (sum_f_R0 (fun k:nat => An k * Bn k) (pred n) / sum_f_R0 An (pred n) - l)... + unfold Rminus in |- *; do 2 rewrite <- (Rplus_comm (- l)); + apply Rplus_eq_compat_l... + unfold An in |- *; + replace (sum_f_R0 (fun k:nat => 1 * Bn k) (pred n)) with + (sum_f_R0 Bn (pred n))... + rewrite sum_cte; rewrite Rmult_1_l; replace (S (pred n)) with n... + apply S_pred with 0%nat; apply lt_le_trans with (S x)... + apply lt_O_Sn... + apply sum_eq; intros; ring... + apply H5; unfold ge in |- *; apply le_S_n; replace (S (pred n)) with n... + apply S_pred with 0%nat; apply lt_le_trans with (S x)... + apply lt_O_Sn... Qed. |