diff options
author | 2006-11-21 21:38:49 +0000 | |
---|---|---|
committer | 2006-11-21 21:38:49 +0000 | |
commit | 208a0f7bfa5249f9795e6e225f309cbe715c0fad (patch) | |
tree | 591e9e512063e34099782e2518573f15ffeac003 /theories/Reals/SeqProp.v | |
parent | de0085539583f59dc7c4bf4e272e18711d565466 (diff) |
Imported Upstream version 8.1~gammaupstream/8.1.gamma
Diffstat (limited to 'theories/Reals/SeqProp.v')
-rw-r--r-- | theories/Reals/SeqProp.v | 2280 |
1 files changed, 1158 insertions, 1122 deletions
diff --git a/theories/Reals/SeqProp.v b/theories/Reals/SeqProp.v index 2e851b13..133f2b89 100644 --- a/theories/Reals/SeqProp.v +++ b/theories/Reals/SeqProp.v @@ -6,7 +6,7 @@ (* * GNU Lesser General Public License Version 2.1 *) (************************************************************************) -(*i $Id: SeqProp.v 8670 2006-03-28 22:16:14Z herbelin $ i*) +(*i $Id: SeqProp.v 9245 2006-10-17 12:53:34Z notin $ i*) Require Import Rbase. Require Import Rfunctions. @@ -23,136 +23,143 @@ Definition has_lb (Un:nat -> R) : Prop := bound (EUn (opp_seq Un)). (**********) Lemma growing_cv : - forall Un:nat -> R, - Un_growing Un -> has_ub Un -> sigT (fun l:R => Un_cv Un l). -unfold Un_growing, Un_cv in |- *; intros; - destruct (completeness (EUn Un) H0 (EUn_noempty Un)) as [x [H2 H3]]. - exists x; intros eps H1. - unfold is_upper_bound in H2, H3. -assert (H5 : forall n:nat, Un n <= x). + forall Un:nat -> R, + Un_growing Un -> has_ub Un -> sigT (fun l:R => Un_cv Un l). +Proof. + unfold Un_growing, Un_cv in |- *; intros; + destruct (completeness (EUn Un) H0 (EUn_noempty Un)) as [x [H2 H3]]. + exists x; intros eps H1. + unfold is_upper_bound in H2, H3. + assert (H5 : forall n:nat, Un n <= x). intro n; apply (H2 (Un n) (Un_in_EUn Un n)). -cut (exists N : nat, x - eps < Un N). -intro H6; destruct H6 as [N H6]; exists N. -intros n H7; unfold R_dist in |- *; apply (Rabs_def1 (Un n - x) eps). -unfold Rgt in H1. - apply (Rle_lt_trans (Un n - x) 0 eps (Rle_minus (Un n) x (H5 n)) H1). -fold Un_growing in H; generalize (growing_prop Un n N H H7); intro H8. - generalize - (Rlt_le_trans (x - eps) (Un N) (Un n) H6 (Rge_le (Un n) (Un N) H8)); - intro H9; generalize (Rplus_lt_compat_l (- x) (x - eps) (Un n) H9); - unfold Rminus in |- *; rewrite <- (Rplus_assoc (- x) x (- eps)); - rewrite (Rplus_comm (- x) (Un n)); fold (Un n - x) in |- *; - rewrite Rplus_opp_l; rewrite (let (H1, H2) := Rplus_ne (- eps) in H2); - trivial. -cut (~ (forall N:nat, Un N <= x - eps)). -intro H6; apply (not_all_not_ex nat (fun N:nat => x - eps < Un N)). - intro H7; apply H6; intro N; apply Rnot_lt_le; apply H7. -intro H7; generalize (Un_bound_imp Un (x - eps) H7); intro H8; - unfold is_upper_bound in H8; generalize (H3 (x - eps) H8); - apply Rlt_not_le; apply tech_Rgt_minus; exact H1. + cut (exists N : nat, x - eps < Un N). + intro H6; destruct H6 as [N H6]; exists N. + intros n H7; unfold R_dist in |- *; apply (Rabs_def1 (Un n - x) eps). + unfold Rgt in H1. + apply (Rle_lt_trans (Un n - x) 0 eps (Rle_minus (Un n) x (H5 n)) H1). + fold Un_growing in H; generalize (growing_prop Un n N H H7); intro H8. + generalize + (Rlt_le_trans (x - eps) (Un N) (Un n) H6 (Rge_le (Un n) (Un N) H8)); + intro H9; generalize (Rplus_lt_compat_l (- x) (x - eps) (Un n) H9); + unfold Rminus in |- *; rewrite <- (Rplus_assoc (- x) x (- eps)); + rewrite (Rplus_comm (- x) (Un n)); fold (Un n - x) in |- *; + rewrite Rplus_opp_l; rewrite (let (H1, H2) := Rplus_ne (- eps) in H2); + trivial. + cut (~ (forall N:nat, Un N <= x - eps)). + intro H6; apply (not_all_not_ex nat (fun N:nat => x - eps < Un N)). + intro H7; apply H6; intro N; apply Rnot_lt_le; apply H7. + intro H7; generalize (Un_bound_imp Un (x - eps) H7); intro H8; + unfold is_upper_bound in H8; generalize (H3 (x - eps) H8); + apply Rlt_not_le; apply tech_Rgt_minus; exact H1. Qed. Lemma decreasing_growing : - forall Un:nat -> R, Un_decreasing Un -> Un_growing (opp_seq Un). -intro. -unfold Un_growing, opp_seq, Un_decreasing in |- *. -intros. -apply Ropp_le_contravar. -apply H. + forall Un:nat -> R, Un_decreasing Un -> Un_growing (opp_seq Un). +Proof. + intro. + unfold Un_growing, opp_seq, Un_decreasing in |- *. + intros. + apply Ropp_le_contravar. + apply H. Qed. Lemma decreasing_cv : - forall Un:nat -> R, - Un_decreasing Un -> has_lb Un -> sigT (fun l:R => Un_cv Un l). -intros. -cut (sigT (fun l:R => Un_cv (opp_seq Un) l) -> sigT (fun l:R => Un_cv Un l)). -intro X. -apply X. -apply growing_cv. -apply decreasing_growing; assumption. -exact H0. -intro X. -elim X; intros. -apply existT with (- x). -unfold Un_cv in p. -unfold R_dist in p. -unfold opp_seq in p. -unfold Un_cv in |- *. -unfold R_dist in |- *. -intros. -elim (p eps H1); intros. -exists x0; intros. -assert (H4 := H2 n H3). -rewrite <- Rabs_Ropp. -replace (- (Un n - - x)) with (- Un n - x); [ assumption | ring ]. + forall Un:nat -> R, + Un_decreasing Un -> has_lb Un -> sigT (fun l:R => Un_cv Un l). +Proof. + intros. + cut (sigT (fun l:R => Un_cv (opp_seq Un) l) -> sigT (fun l:R => Un_cv Un l)). + intro X. + apply X. + apply growing_cv. + apply decreasing_growing; assumption. + exact H0. + intro X. + elim X; intros. + apply existT with (- x). + unfold Un_cv in p. + unfold R_dist in p. + unfold opp_seq in p. + unfold Un_cv in |- *. + unfold R_dist in |- *. + intros. + elim (p eps H1); intros. + exists x0; intros. + assert (H4 := H2 n H3). + rewrite <- Rabs_Ropp. + replace (- (Un n - - x)) with (- Un n - x); [ assumption | ring ]. Qed. (***********) Lemma maj_sup : - forall Un:nat -> R, has_ub Un -> sigT (fun l:R => is_lub (EUn Un) l). -intros. -unfold has_ub in H. -apply completeness. -assumption. -exists (Un 0%nat). -unfold EUn in |- *. -exists 0%nat; reflexivity. + forall Un:nat -> R, has_ub Un -> sigT (fun l:R => is_lub (EUn Un) l). +Proof. + intros. + unfold has_ub in H. + apply completeness. + assumption. + exists (Un 0%nat). + unfold EUn in |- *. + exists 0%nat; reflexivity. Qed. (**********) Lemma min_inf : - forall Un:nat -> R, - has_lb Un -> sigT (fun l:R => is_lub (EUn (opp_seq Un)) l). -intros; unfold has_lb in H. -apply completeness. -assumption. -exists (- Un 0%nat). -exists 0%nat. -reflexivity. + forall Un:nat -> R, + has_lb Un -> sigT (fun l:R => is_lub (EUn (opp_seq Un)) l). +Proof. + intros; unfold has_lb in H. + apply completeness. + assumption. + exists (- Un 0%nat). + exists 0%nat. + reflexivity. Qed. Definition majorant (Un:nat -> R) (pr:has_ub Un) : R := match maj_sup Un pr with - | existT a b => a + | existT a b => a end. Definition minorant (Un:nat -> R) (pr:has_lb Un) : R := match min_inf Un pr with - | existT a b => - a + | existT a b => - a end. Lemma maj_ss : - forall (Un:nat -> R) (k:nat), - has_ub Un -> has_ub (fun i:nat => Un (k + i)%nat). -intros. -unfold has_ub in H. -unfold bound in H. -elim H; intros. -unfold is_upper_bound in H0. -unfold has_ub in |- *. -exists x. -unfold is_upper_bound in |- *. -intros. -apply H0. -elim H1; intros. -exists (k + x1)%nat; assumption. + forall (Un:nat -> R) (k:nat), + has_ub Un -> has_ub (fun i:nat => Un (k + i)%nat). +Proof. + intros. + unfold has_ub in H. + unfold bound in H. + elim H; intros. + unfold is_upper_bound in H0. + unfold has_ub in |- *. + exists x. + unfold is_upper_bound in |- *. + intros. + apply H0. + elim H1; intros. + exists (k + x1)%nat; assumption. Qed. Lemma min_ss : - forall (Un:nat -> R) (k:nat), - has_lb Un -> has_lb (fun i:nat => Un (k + i)%nat). -intros. -unfold has_lb in H. -unfold bound in H. -elim H; intros. -unfold is_upper_bound in H0. -unfold has_lb in |- *. -exists x. -unfold is_upper_bound in |- *. -intros. -apply H0. -elim H1; intros. -exists (k + x1)%nat; assumption. + forall (Un:nat -> R) (k:nat), + has_lb Un -> has_lb (fun i:nat => Un (k + i)%nat). +Proof. + intros. + unfold has_lb in H. + unfold bound in H. + elim H; intros. + unfold is_upper_bound in H0. + unfold has_lb in |- *. + exists x. + unfold is_upper_bound in |- *. + intros. + apply H0. + elim H1; intros. + exists (k + x1)%nat; assumption. Qed. Definition sequence_majorant (Un:nat -> R) (pr:has_ub Un) @@ -162,1134 +169,1163 @@ Definition sequence_minorant (Un:nat -> R) (pr:has_lb Un) (i:nat) : R := minorant (fun k:nat => Un (i + k)%nat) (min_ss Un i pr). Lemma Wn_decreasing : - forall (Un:nat -> R) (pr:has_ub Un), Un_decreasing (sequence_majorant Un pr). -intros. -unfold Un_decreasing in |- *. -intro. -unfold sequence_majorant in |- *. -assert (H := maj_sup (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr)). -assert (H0 := maj_sup (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr)). -elim H; intros. -elim H0; intros. -cut (majorant (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr) = x); - [ intro Maj1; rewrite Maj1 | idtac ]. -cut (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr) = x0); - [ intro Maj2; rewrite Maj2 | idtac ]. -unfold is_lub in p. -unfold is_lub in p0. -elim p; intros. -apply H2. -elim p0; intros. -unfold is_upper_bound in |- *. -intros. -unfold is_upper_bound in H3. -apply H3. -elim H5; intros. -exists (1 + x2)%nat. -replace (n + (1 + x2))%nat with (S n + x2)%nat. -assumption. -replace (S n) with (1 + n)%nat; [ ring | ring ]. -cut - (is_lub (EUn (fun k:nat => Un (n + k)%nat)) - (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr))). -intro. -unfold is_lub in p0; unfold is_lub in H1. -elim p0; intros; elim H1; intros. -assert (H6 := H5 x0 H2). -assert - (H7 := H3 (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr)) H4). -apply Rle_antisym; assumption. -unfold majorant in |- *. -case (maj_sup (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr)). -trivial. -cut - (is_lub (EUn (fun k:nat => Un (S n + k)%nat)) - (majorant (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr))). -intro. -unfold is_lub in p; unfold is_lub in H1. -elim p; intros; elim H1; intros. -assert (H6 := H5 x H2). -assert - (H7 := - H3 (majorant (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr)) H4). -apply Rle_antisym; assumption. -unfold majorant in |- *. -case (maj_sup (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr)). -trivial. + forall (Un:nat -> R) (pr:has_ub Un), Un_decreasing (sequence_majorant Un pr). +Proof. + intros. + unfold Un_decreasing in |- *. + intro. + unfold sequence_majorant in |- *. + assert (H := maj_sup (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr)). + assert (H0 := maj_sup (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr)). + elim H; intros. + elim H0; intros. + cut (majorant (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr) = x); + [ intro Maj1; rewrite Maj1 | idtac ]. + cut (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr) = x0); + [ intro Maj2; rewrite Maj2 | idtac ]. + unfold is_lub in p. + unfold is_lub in p0. + elim p; intros. + apply H2. + elim p0; intros. + unfold is_upper_bound in |- *. + intros. + unfold is_upper_bound in H3. + apply H3. + elim H5; intros. + exists (1 + x2)%nat. + replace (n + (1 + x2))%nat with (S n + x2)%nat. + assumption. + replace (S n) with (1 + n)%nat; [ ring | ring ]. + cut + (is_lub (EUn (fun k:nat => Un (n + k)%nat)) + (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr))). + intro. + unfold is_lub in p0; unfold is_lub in H1. + elim p0; intros; elim H1; intros. + assert (H6 := H5 x0 H2). + assert + (H7 := H3 (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr)) H4). + apply Rle_antisym; assumption. + unfold majorant in |- *. + case (maj_sup (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr)). + trivial. + cut + (is_lub (EUn (fun k:nat => Un (S n + k)%nat)) + (majorant (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr))). + intro. + unfold is_lub in p; unfold is_lub in H1. + elim p; intros; elim H1; intros. + assert (H6 := H5 x H2). + assert + (H7 := + H3 (majorant (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr)) H4). + apply Rle_antisym; assumption. + unfold majorant in |- *. + case (maj_sup (fun k:nat => Un (S n + k)%nat) (maj_ss Un (S n) pr)). + trivial. Qed. Lemma Vn_growing : - forall (Un:nat -> R) (pr:has_lb Un), Un_growing (sequence_minorant Un pr). -intros. -unfold Un_growing in |- *. -intro. -unfold sequence_minorant in |- *. -assert (H := min_inf (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr)). -assert (H0 := min_inf (fun k:nat => Un (n + k)%nat) (min_ss Un n pr)). -elim H; intros. -elim H0; intros. -cut (minorant (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr) = - x); - [ intro Maj1; rewrite Maj1 | idtac ]. -cut (minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr) = - x0); - [ intro Maj2; rewrite Maj2 | idtac ]. -unfold is_lub in p. -unfold is_lub in p0. -elim p; intros. -apply Ropp_le_contravar. -apply H2. -elim p0; intros. -unfold is_upper_bound in |- *. -intros. -unfold is_upper_bound in H3. -apply H3. -elim H5; intros. -exists (1 + x2)%nat. -unfold opp_seq in H6. -unfold opp_seq in |- *. -replace (n + (1 + x2))%nat with (S n + x2)%nat. -assumption. -replace (S n) with (1 + n)%nat; [ ring | ring ]. -cut - (is_lub (EUn (opp_seq (fun k:nat => Un (n + k)%nat))) - (- minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr))). -intro. -unfold is_lub in p0; unfold is_lub in H1. -elim p0; intros; elim H1; intros. -assert (H6 := H5 x0 H2). -assert - (H7 := H3 (- minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr)) H4). -rewrite <- - (Ropp_involutive (minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr))) - . -apply Ropp_eq_compat; apply Rle_antisym; assumption. -unfold minorant in |- *. -case (min_inf (fun k:nat => Un (n + k)%nat) (min_ss Un n pr)). -intro; rewrite Ropp_involutive. -trivial. -cut - (is_lub (EUn (opp_seq (fun k:nat => Un (S n + k)%nat))) - (- minorant (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr))). -intro. -unfold is_lub in p; unfold is_lub in H1. -elim p; intros; elim H1; intros. -assert (H6 := H5 x H2). -assert - (H7 := - H3 (- minorant (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr)) H4). -rewrite <- - (Ropp_involutive - (minorant (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr))) - . -apply Ropp_eq_compat; apply Rle_antisym; assumption. -unfold minorant in |- *. -case (min_inf (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr)). -intro; rewrite Ropp_involutive. -trivial. + forall (Un:nat -> R) (pr:has_lb Un), Un_growing (sequence_minorant Un pr). +Proof. + intros. + unfold Un_growing in |- *. + intro. + unfold sequence_minorant in |- *. + assert (H := min_inf (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr)). + assert (H0 := min_inf (fun k:nat => Un (n + k)%nat) (min_ss Un n pr)). + elim H; intros. + elim H0; intros. + cut (minorant (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr) = - x); + [ intro Maj1; rewrite Maj1 | idtac ]. + cut (minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr) = - x0); + [ intro Maj2; rewrite Maj2 | idtac ]. + unfold is_lub in p. + unfold is_lub in p0. + elim p; intros. + apply Ropp_le_contravar. + apply H2. + elim p0; intros. + unfold is_upper_bound in |- *. + intros. + unfold is_upper_bound in H3. + apply H3. + elim H5; intros. + exists (1 + x2)%nat. + unfold opp_seq in H6. + unfold opp_seq in |- *. + replace (n + (1 + x2))%nat with (S n + x2)%nat. + assumption. + replace (S n) with (1 + n)%nat; [ ring | ring ]. + cut + (is_lub (EUn (opp_seq (fun k:nat => Un (n + k)%nat))) + (- minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr))). + intro. + unfold is_lub in p0; unfold is_lub in H1. + elim p0; intros; elim H1; intros. + assert (H6 := H5 x0 H2). + assert + (H7 := H3 (- minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr)) H4). + rewrite <- + (Ropp_involutive (minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr))) + . + apply Ropp_eq_compat; apply Rle_antisym; assumption. + unfold minorant in |- *. + case (min_inf (fun k:nat => Un (n + k)%nat) (min_ss Un n pr)). + intro; rewrite Ropp_involutive. + trivial. + cut + (is_lub (EUn (opp_seq (fun k:nat => Un (S n + k)%nat))) + (- minorant (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr))). + intro. + unfold is_lub in p; unfold is_lub in H1. + elim p; intros; elim H1; intros. + assert (H6 := H5 x H2). + assert + (H7 := + H3 (- minorant (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr)) H4). + rewrite <- + (Ropp_involutive + (minorant (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr))) + . + apply Ropp_eq_compat; apply Rle_antisym; assumption. + unfold minorant in |- *. + case (min_inf (fun k:nat => Un (S n + k)%nat) (min_ss Un (S n) pr)). + intro; rewrite Ropp_involutive. + trivial. Qed. (**********) Lemma Vn_Un_Wn_order : - forall (Un:nat -> R) (pr1:has_ub Un) (pr2:has_lb Un) - (n:nat), sequence_minorant Un pr2 n <= Un n <= sequence_majorant Un pr1 n. -intros. -split. -unfold sequence_minorant in |- *. -cut - (sigT (fun l:R => is_lub (EUn (opp_seq (fun i:nat => Un (n + i)%nat))) l)). -intro X. -elim X; intros. -replace (minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2)) with (- x). -unfold is_lub in p. -elim p; intros. -unfold is_upper_bound in H. -rewrite <- (Ropp_involutive (Un n)). -apply Ropp_le_contravar. -apply H. -exists 0%nat. -unfold opp_seq in |- *. -replace (n + 0)%nat with n; [ reflexivity | ring ]. -cut - (is_lub (EUn (opp_seq (fun k:nat => Un (n + k)%nat))) - (- minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2))). -intro. -unfold is_lub in p; unfold is_lub in H. -elim p; intros; elim H; intros. -assert (H4 := H3 x H0). -assert - (H5 := H1 (- minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2)) H2). -rewrite <- - (Ropp_involutive (minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2))) - . -apply Ropp_eq_compat; apply Rle_antisym; assumption. -unfold minorant in |- *. -case (min_inf (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2)). -intro; rewrite Ropp_involutive. -trivial. -apply min_inf. -apply min_ss; assumption. -unfold sequence_majorant in |- *. -cut (sigT (fun l:R => is_lub (EUn (fun i:nat => Un (n + i)%nat)) l)). -intro X. -elim X; intros. -replace (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr1)) with x. -unfold is_lub in p. -elim p; intros. -unfold is_upper_bound in H. -apply H. -exists 0%nat. -replace (n + 0)%nat with n; [ reflexivity | ring ]. -cut - (is_lub (EUn (fun k:nat => Un (n + k)%nat)) - (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr1))). -intro. -unfold is_lub in p; unfold is_lub in H. -elim p; intros; elim H; intros. -assert (H4 := H3 x H0). -assert - (H5 := H1 (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr1)) H2). -apply Rle_antisym; assumption. -unfold majorant in |- *. -case (maj_sup (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr1)). -intro; trivial. -apply maj_sup. -apply maj_ss; assumption. + forall (Un:nat -> R) (pr1:has_ub Un) (pr2:has_lb Un) + (n:nat), sequence_minorant Un pr2 n <= Un n <= sequence_majorant Un pr1 n. +Proof. + intros. + split. + unfold sequence_minorant in |- *. + cut + (sigT (fun l:R => is_lub (EUn (opp_seq (fun i:nat => Un (n + i)%nat))) l)). + intro X. + elim X; intros. + replace (minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2)) with (- x). + unfold is_lub in p. + elim p; intros. + unfold is_upper_bound in H. + rewrite <- (Ropp_involutive (Un n)). + apply Ropp_le_contravar. + apply H. + exists 0%nat. + unfold opp_seq in |- *. + replace (n + 0)%nat with n; [ reflexivity | ring ]. + cut + (is_lub (EUn (opp_seq (fun k:nat => Un (n + k)%nat))) + (- minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2))). + intro. + unfold is_lub in p; unfold is_lub in H. + elim p; intros; elim H; intros. + assert (H4 := H3 x H0). + assert + (H5 := H1 (- minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2)) H2). + rewrite <- + (Ropp_involutive (minorant (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2))) + . + apply Ropp_eq_compat; apply Rle_antisym; assumption. + unfold minorant in |- *. + case (min_inf (fun k:nat => Un (n + k)%nat) (min_ss Un n pr2)). + intro; rewrite Ropp_involutive. + trivial. + apply min_inf. + apply min_ss; assumption. + unfold sequence_majorant in |- *. + cut (sigT (fun l:R => is_lub (EUn (fun i:nat => Un (n + i)%nat)) l)). + intro X. + elim X; intros. + replace (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr1)) with x. + unfold is_lub in p. + elim p; intros. + unfold is_upper_bound in H. + apply H. + exists 0%nat. + replace (n + 0)%nat with n; [ reflexivity | ring ]. + cut + (is_lub (EUn (fun k:nat => Un (n + k)%nat)) + (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr1))). + intro. + unfold is_lub in p; unfold is_lub in H. + elim p; intros; elim H; intros. + assert (H4 := H3 x H0). + assert + (H5 := H1 (majorant (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr1)) H2). + apply Rle_antisym; assumption. + unfold majorant in |- *. + case (maj_sup (fun k:nat => Un (n + k)%nat) (maj_ss Un n pr1)). + intro; trivial. + apply maj_sup. + apply maj_ss; assumption. Qed. Lemma min_maj : - forall (Un:nat -> R) (pr1:has_ub Un) (pr2:has_lb Un), - has_ub (sequence_minorant Un pr2). -intros. -assert (H := Vn_Un_Wn_order Un pr1 pr2). -unfold has_ub in |- *. -unfold bound in |- *. -unfold has_ub in pr1. -unfold bound in pr1. -elim pr1; intros. -exists x. -unfold is_upper_bound in |- *. -intros. -unfold is_upper_bound in H0. -elim H1; intros. -rewrite H2. -apply Rle_trans with (Un x1). -assert (H3 := H x1); elim H3; intros; assumption. -apply H0. -exists x1; reflexivity. + forall (Un:nat -> R) (pr1:has_ub Un) (pr2:has_lb Un), + has_ub (sequence_minorant Un pr2). +Proof. + intros. + assert (H := Vn_Un_Wn_order Un pr1 pr2). + unfold has_ub in |- *. + unfold bound in |- *. + unfold has_ub in pr1. + unfold bound in pr1. + elim pr1; intros. + exists x. + unfold is_upper_bound in |- *. + intros. + unfold is_upper_bound in H0. + elim H1; intros. + rewrite H2. + apply Rle_trans with (Un x1). + assert (H3 := H x1); elim H3; intros; assumption. + apply H0. + exists x1; reflexivity. Qed. Lemma maj_min : - forall (Un:nat -> R) (pr1:has_ub Un) (pr2:has_lb Un), - has_lb (sequence_majorant Un pr1). -intros. -assert (H := Vn_Un_Wn_order Un pr1 pr2). -unfold has_lb in |- *. -unfold bound in |- *. -unfold has_lb in pr2. -unfold bound in pr2. -elim pr2; intros. -exists x. -unfold is_upper_bound in |- *. -intros. -unfold is_upper_bound in H0. -elim H1; intros. -rewrite H2. -apply Rle_trans with (opp_seq Un x1). -assert (H3 := H x1); elim H3; intros. -unfold opp_seq in |- *; apply Ropp_le_contravar. -assumption. -apply H0. -exists x1; reflexivity. + forall (Un:nat -> R) (pr1:has_ub Un) (pr2:has_lb Un), + has_lb (sequence_majorant Un pr1). +Proof. + intros. + assert (H := Vn_Un_Wn_order Un pr1 pr2). + unfold has_lb in |- *. + unfold bound in |- *. + unfold has_lb in pr2. + unfold bound in pr2. + elim pr2; intros. + exists x. + unfold is_upper_bound in |- *. + intros. + unfold is_upper_bound in H0. + elim H1; intros. + rewrite H2. + apply Rle_trans with (opp_seq Un x1). + assert (H3 := H x1); elim H3; intros. + unfold opp_seq in |- *; apply Ropp_le_contravar. + assumption. + apply H0. + exists x1; reflexivity. Qed. (**********) Lemma cauchy_maj : forall Un:nat -> R, Cauchy_crit Un -> has_ub Un. -intros. -unfold has_ub in |- *. -apply cauchy_bound. -assumption. +Proof. + intros. + unfold has_ub in |- *. + apply cauchy_bound. + assumption. Qed. (**********) Lemma cauchy_opp : - forall Un:nat -> R, Cauchy_crit Un -> Cauchy_crit (opp_seq Un). -intro. -unfold Cauchy_crit in |- *. -unfold R_dist in |- *. -intros. -elim (H eps H0); intros. -exists x; intros. -unfold opp_seq in |- *. -rewrite <- Rabs_Ropp. -replace (- (- Un n - - Un m)) with (Un n - Un m); - [ apply H1; assumption | ring ]. + forall Un:nat -> R, Cauchy_crit Un -> Cauchy_crit (opp_seq Un). +Proof. + intro. + unfold Cauchy_crit in |- *. + unfold R_dist in |- *. + intros. + elim (H eps H0); intros. + exists x; intros. + unfold opp_seq in |- *. + rewrite <- Rabs_Ropp. + replace (- (- Un n - - Un m)) with (Un n - Un m); + [ apply H1; assumption | ring ]. Qed. (**********) Lemma cauchy_min : forall Un:nat -> R, Cauchy_crit Un -> has_lb Un. -intros. -unfold has_lb in |- *. -assert (H0 := cauchy_opp _ H). -apply cauchy_bound. -assumption. +Proof. + intros. + unfold has_lb in |- *. + assert (H0 := cauchy_opp _ H). + apply cauchy_bound. + assumption. Qed. (**********) Lemma maj_cv : - forall (Un:nat -> R) (pr:Cauchy_crit Un), - sigT (fun l:R => Un_cv (sequence_majorant Un (cauchy_maj Un pr)) l). -intros. -apply decreasing_cv. -apply Wn_decreasing. -apply maj_min. -apply cauchy_min. -assumption. + forall (Un:nat -> R) (pr:Cauchy_crit Un), + sigT (fun l:R => Un_cv (sequence_majorant Un (cauchy_maj Un pr)) l). +Proof. + intros. + apply decreasing_cv. + apply Wn_decreasing. + apply maj_min. + apply cauchy_min. + assumption. Qed. (**********) Lemma min_cv : - forall (Un:nat -> R) (pr:Cauchy_crit Un), - sigT (fun l:R => Un_cv (sequence_minorant Un (cauchy_min Un pr)) l). -intros. -apply growing_cv. -apply Vn_growing. -apply min_maj. -apply cauchy_maj. -assumption. + forall (Un:nat -> R) (pr:Cauchy_crit Un), + sigT (fun l:R => Un_cv (sequence_minorant Un (cauchy_min Un pr)) l). +Proof. + intros. + apply growing_cv. + apply Vn_growing. + apply min_maj. + apply cauchy_maj. + assumption. Qed. Lemma cond_eq : - forall x y:R, (forall eps:R, 0 < eps -> Rabs (x - y) < eps) -> x = y. -intros. -case (total_order_T x y); intro. -elim s; intro. -cut (0 < y - x). -intro. -assert (H1 := H (y - x) H0). -rewrite <- Rabs_Ropp in H1. -cut (- (x - y) = y - x); [ intro; rewrite H2 in H1 | ring ]. -rewrite Rabs_right in H1. -elim (Rlt_irrefl _ H1). -left; assumption. -apply Rplus_lt_reg_r with x. -rewrite Rplus_0_r; replace (x + (y - x)) with y; [ assumption | ring ]. -assumption. -cut (0 < x - y). -intro. -assert (H1 := H (x - y) H0). -rewrite Rabs_right in H1. -elim (Rlt_irrefl _ H1). -left; assumption. -apply Rplus_lt_reg_r with y. -rewrite Rplus_0_r; replace (y + (x - y)) with x; [ assumption | ring ]. + forall x y:R, (forall eps:R, 0 < eps -> Rabs (x - y) < eps) -> x = y. +Proof. + intros. + case (total_order_T x y); intro. + elim s; intro. + cut (0 < y - x). + intro. + assert (H1 := H (y - x) H0). + rewrite <- Rabs_Ropp in H1. + cut (- (x - y) = y - x); [ intro; rewrite H2 in H1 | ring ]. + rewrite Rabs_right in H1. + elim (Rlt_irrefl _ H1). + left; assumption. + apply Rplus_lt_reg_r with x. + rewrite Rplus_0_r; replace (x + (y - x)) with y; [ assumption | ring ]. + assumption. + cut (0 < x - y). + intro. + assert (H1 := H (x - y) H0). + rewrite Rabs_right in H1. + elim (Rlt_irrefl _ H1). + left; assumption. + apply Rplus_lt_reg_r with y. + rewrite Rplus_0_r; replace (y + (x - y)) with x; [ assumption | ring ]. Qed. Lemma not_Rlt : forall r1 r2:R, ~ r1 < r2 -> r1 >= r2. -intros r1 r2; generalize (Rtotal_order r1 r2); unfold Rge in |- *. -tauto. +Proof. + intros r1 r2; generalize (Rtotal_order r1 r2); unfold Rge in |- *. + tauto. Qed. (**********) Lemma approx_maj : - forall (Un:nat -> R) (pr:has_ub Un) (eps:R), - 0 < eps -> exists k : nat, Rabs (majorant Un pr - Un k) < eps. -intros. -set (P := fun k:nat => Rabs (majorant Un pr - Un k) < eps). -unfold P in |- *. -cut - ((exists k : nat, P k) -> - exists k : nat, Rabs (majorant Un pr - Un k) < eps). -intros. -apply H0. -apply not_all_not_ex. -red in |- *; intro. -2: unfold P in |- *; trivial. -unfold P in H1. -cut (forall n:nat, Rabs (majorant Un pr - Un n) >= eps). -intro. -cut (is_lub (EUn Un) (majorant Un pr)). -intro. -unfold is_lub in H3. -unfold is_upper_bound in H3. -elim H3; intros. -cut (forall n:nat, eps <= majorant Un pr - Un n). -intro. -cut (forall n:nat, Un n <= majorant Un pr - eps). -intro. -cut (forall x:R, EUn Un x -> x <= majorant Un pr - eps). -intro. -assert (H9 := H5 (majorant Un pr - eps) H8). -cut (eps <= 0). -intro. -elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H H10)). -apply Rplus_le_reg_l with (majorant Un pr - eps). -rewrite Rplus_0_r. -replace (majorant Un pr - eps + eps) with (majorant Un pr); - [ assumption | ring ]. -intros. -unfold EUn in H8. -elim H8; intros. -rewrite H9; apply H7. -intro. -assert (H7 := H6 n). -apply Rplus_le_reg_l with (eps - Un n). -replace (eps - Un n + Un n) with eps. -replace (eps - Un n + (majorant Un pr - eps)) with (majorant Un pr - Un n). -assumption. -ring. -ring. -intro. -assert (H6 := H2 n). -rewrite Rabs_right in H6. -apply Rge_le. -assumption. -apply Rle_ge. -apply Rplus_le_reg_l with (Un n). -rewrite Rplus_0_r; - replace (Un n + (majorant Un pr - Un n)) with (majorant Un pr); - [ apply H4 | ring ]. -exists n; reflexivity. -unfold majorant in |- *. -case (maj_sup Un pr). -trivial. -intro. -assert (H2 := H1 n). -apply not_Rlt; assumption. + forall (Un:nat -> R) (pr:has_ub Un) (eps:R), + 0 < eps -> exists k : nat, Rabs (majorant Un pr - Un k) < eps. +Proof. + intros. + set (P := fun k:nat => Rabs (majorant Un pr - Un k) < eps). + unfold P in |- *. + cut + ((exists k : nat, P k) -> + exists k : nat, Rabs (majorant Un pr - Un k) < eps). + intros. + apply H0. + apply not_all_not_ex. + red in |- *; intro. + 2: unfold P in |- *; trivial. + unfold P in H1. + cut (forall n:nat, Rabs (majorant Un pr - Un n) >= eps). + intro. + cut (is_lub (EUn Un) (majorant Un pr)). + intro. + unfold is_lub in H3. + unfold is_upper_bound in H3. + elim H3; intros. + cut (forall n:nat, eps <= majorant Un pr - Un n). + intro. + cut (forall n:nat, Un n <= majorant Un pr - eps). + intro. + cut (forall x:R, EUn Un x -> x <= majorant Un pr - eps). + intro. + assert (H9 := H5 (majorant Un pr - eps) H8). + cut (eps <= 0). + intro. + elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H H10)). + apply Rplus_le_reg_l with (majorant Un pr - eps). + rewrite Rplus_0_r. + replace (majorant Un pr - eps + eps) with (majorant Un pr); + [ assumption | ring ]. + intros. + unfold EUn in H8. + elim H8; intros. + rewrite H9; apply H7. + intro. + assert (H7 := H6 n). + apply Rplus_le_reg_l with (eps - Un n). + replace (eps - Un n + Un n) with eps. + replace (eps - Un n + (majorant Un pr - eps)) with (majorant Un pr - Un n). + assumption. + ring. + ring. + intro. + assert (H6 := H2 n). + rewrite Rabs_right in H6. + apply Rge_le. + assumption. + apply Rle_ge. + apply Rplus_le_reg_l with (Un n). + rewrite Rplus_0_r; + replace (Un n + (majorant Un pr - Un n)) with (majorant Un pr); + [ apply H4 | ring ]. + exists n; reflexivity. + unfold majorant in |- *. + case (maj_sup Un pr). + trivial. + intro. + assert (H2 := H1 n). + apply not_Rlt; assumption. Qed. (**********) Lemma approx_min : - forall (Un:nat -> R) (pr:has_lb Un) (eps:R), - 0 < eps -> exists k : nat, Rabs (minorant Un pr - Un k) < eps. -intros. -set (P := fun k:nat => Rabs (minorant Un pr - Un k) < eps). -unfold P in |- *. -cut - ((exists k : nat, P k) -> - exists k : nat, Rabs (minorant Un pr - Un k) < eps). -intros. -apply H0. -apply not_all_not_ex. -red in |- *; intro. -2: unfold P in |- *; trivial. -unfold P in H1. -cut (forall n:nat, Rabs (minorant Un pr - Un n) >= eps). -intro. -cut (is_lub (EUn (opp_seq Un)) (- minorant Un pr)). -intro. -unfold is_lub in H3. -unfold is_upper_bound in H3. -elim H3; intros. -cut (forall n:nat, eps <= Un n - minorant Un pr). -intro. -cut (forall n:nat, opp_seq Un n <= - minorant Un pr - eps). -intro. -cut (forall x:R, EUn (opp_seq Un) x -> x <= - minorant Un pr - eps). -intro. -assert (H9 := H5 (- minorant Un pr - eps) H8). -cut (eps <= 0). -intro. -elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H H10)). -apply Rplus_le_reg_l with (- minorant Un pr - eps). -rewrite Rplus_0_r. -replace (- minorant Un pr - eps + eps) with (- minorant Un pr); - [ assumption | ring ]. -intros. -unfold EUn in H8. -elim H8; intros. -rewrite H9; apply H7. -intro. -assert (H7 := H6 n). -unfold opp_seq in |- *. -apply Rplus_le_reg_l with (eps + Un n). -replace (eps + Un n + - Un n) with eps. -replace (eps + Un n + (- minorant Un pr - eps)) with (Un n - minorant Un pr). -assumption. -ring. -ring. -intro. -assert (H6 := H2 n). -rewrite Rabs_left1 in H6. -apply Rge_le. -replace (Un n - minorant Un pr) with (- (minorant Un pr - Un n)); - [ assumption | ring ]. -apply Rplus_le_reg_l with (- minorant Un pr). -rewrite Rplus_0_r; - replace (- minorant Un pr + (minorant Un pr - Un n)) with (- Un n). -apply H4. -exists n; reflexivity. -ring. -unfold minorant in |- *. -case (min_inf Un pr). -intro. -rewrite Ropp_involutive. -trivial. -intro. -assert (H2 := H1 n). -apply not_Rlt; assumption. + forall (Un:nat -> R) (pr:has_lb Un) (eps:R), + 0 < eps -> exists k : nat, Rabs (minorant Un pr - Un k) < eps. +Proof. + intros. + set (P := fun k:nat => Rabs (minorant Un pr - Un k) < eps). + unfold P in |- *. + cut + ((exists k : nat, P k) -> + exists k : nat, Rabs (minorant Un pr - Un k) < eps). + intros. + apply H0. + apply not_all_not_ex. + red in |- *; intro. + 2: unfold P in |- *; trivial. + unfold P in H1. + cut (forall n:nat, Rabs (minorant Un pr - Un n) >= eps). + intro. + cut (is_lub (EUn (opp_seq Un)) (- minorant Un pr)). + intro. + unfold is_lub in H3. + unfold is_upper_bound in H3. + elim H3; intros. + cut (forall n:nat, eps <= Un n - minorant Un pr). + intro. + cut (forall n:nat, opp_seq Un n <= - minorant Un pr - eps). + intro. + cut (forall x:R, EUn (opp_seq Un) x -> x <= - minorant Un pr - eps). + intro. + assert (H9 := H5 (- minorant Un pr - eps) H8). + cut (eps <= 0). + intro. + elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H H10)). + apply Rplus_le_reg_l with (- minorant Un pr - eps). + rewrite Rplus_0_r. + replace (- minorant Un pr - eps + eps) with (- minorant Un pr); + [ assumption | ring ]. + intros. + unfold EUn in H8. + elim H8; intros. + rewrite H9; apply H7. + intro. + assert (H7 := H6 n). + unfold opp_seq in |- *. + apply Rplus_le_reg_l with (eps + Un n). + replace (eps + Un n + - Un n) with eps. + replace (eps + Un n + (- minorant Un pr - eps)) with (Un n - minorant Un pr). + assumption. + ring. + ring. + intro. + assert (H6 := H2 n). + rewrite Rabs_left1 in H6. + apply Rge_le. + replace (Un n - minorant Un pr) with (- (minorant Un pr - Un n)); + [ assumption | ring ]. + apply Rplus_le_reg_l with (- minorant Un pr). + rewrite Rplus_0_r; + replace (- minorant Un pr + (minorant Un pr - Un n)) with (- Un n). + apply H4. + exists n; reflexivity. + ring. + unfold minorant in |- *. + case (min_inf Un pr). + intro. + rewrite Ropp_involutive. + trivial. + intro. + assert (H2 := H1 n). + apply not_Rlt; assumption. Qed. -(* Unicity of limit for convergent sequences *) +(** Unicity of limit for convergent sequences *) Lemma UL_sequence : - forall (Un:nat -> R) (l1 l2:R), Un_cv Un l1 -> Un_cv Un l2 -> l1 = l2. -intros Un l1 l2; unfold Un_cv in |- *; unfold R_dist in |- *; intros. -apply cond_eq. -intros; cut (0 < eps / 2); - [ intro - | unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ assumption | apply Rinv_0_lt_compat; prove_sup0 ] ]. -elim (H (eps / 2) H2); intros. -elim (H0 (eps / 2) H2); intros. -set (N := max x x0). -apply Rle_lt_trans with (Rabs (l1 - Un N) + Rabs (Un N - l2)). -replace (l1 - l2) with (l1 - Un N + (Un N - l2)); - [ apply Rabs_triang | ring ]. -rewrite (double_var eps); apply Rplus_lt_compat. -rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H3; - unfold ge, N in |- *; apply le_max_l. -apply H4; unfold ge, N in |- *; apply le_max_r. + forall (Un:nat -> R) (l1 l2:R), Un_cv Un l1 -> Un_cv Un l2 -> l1 = l2. +Proof. + intros Un l1 l2; unfold Un_cv in |- *; unfold R_dist in |- *; intros. + apply cond_eq. + intros; cut (0 < eps / 2); + [ intro + | unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ assumption | apply Rinv_0_lt_compat; prove_sup0 ] ]. + elim (H (eps / 2) H2); intros. + elim (H0 (eps / 2) H2); intros. + set (N := max x x0). + apply Rle_lt_trans with (Rabs (l1 - Un N) + Rabs (Un N - l2)). + replace (l1 - l2) with (l1 - Un N + (Un N - l2)); + [ apply Rabs_triang | ring ]. + rewrite (double_var eps); apply Rplus_lt_compat. + rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H3; + unfold ge, N in |- *; apply le_max_l. + apply H4; unfold ge, N in |- *; apply le_max_r. Qed. (**********) Lemma CV_plus : - forall (An Bn:nat -> R) (l1 l2:R), - Un_cv An l1 -> Un_cv Bn l2 -> Un_cv (fun i:nat => An i + Bn i) (l1 + l2). -unfold Un_cv in |- *; unfold R_dist in |- *; intros. -cut (0 < eps / 2); - [ intro - | unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ assumption | apply Rinv_0_lt_compat; prove_sup0 ] ]. -elim (H (eps / 2) H2); intros. -elim (H0 (eps / 2) H2); intros. -set (N := max x x0). -exists N; intros. -replace (An n + Bn n - (l1 + l2)) with (An n - l1 + (Bn n - l2)); - [ idtac | ring ]. -apply Rle_lt_trans with (Rabs (An n - l1) + Rabs (Bn n - l2)). -apply Rabs_triang. -rewrite (double_var eps); apply Rplus_lt_compat. -apply H3; unfold ge in |- *; apply le_trans with N; - [ unfold N in |- *; apply le_max_l | assumption ]. -apply H4; unfold ge in |- *; apply le_trans with N; - [ unfold N in |- *; apply le_max_r | assumption ]. + forall (An Bn:nat -> R) (l1 l2:R), + Un_cv An l1 -> Un_cv Bn l2 -> Un_cv (fun i:nat => An i + Bn i) (l1 + l2). +Proof. + unfold Un_cv in |- *; unfold R_dist in |- *; intros. + cut (0 < eps / 2); + [ intro + | unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ assumption | apply Rinv_0_lt_compat; prove_sup0 ] ]. + elim (H (eps / 2) H2); intros. + elim (H0 (eps / 2) H2); intros. + set (N := max x x0). + exists N; intros. + replace (An n + Bn n - (l1 + l2)) with (An n - l1 + (Bn n - l2)); + [ idtac | ring ]. + apply Rle_lt_trans with (Rabs (An n - l1) + Rabs (Bn n - l2)). + apply Rabs_triang. + rewrite (double_var eps); apply Rplus_lt_compat. + apply H3; unfold ge in |- *; apply le_trans with N; + [ unfold N in |- *; apply le_max_l | assumption ]. + apply H4; unfold ge in |- *; apply le_trans with N; + [ unfold N in |- *; apply le_max_r | assumption ]. Qed. (**********) Lemma cv_cvabs : - forall (Un:nat -> R) (l:R), - Un_cv Un l -> Un_cv (fun i:nat => Rabs (Un i)) (Rabs l). -unfold Un_cv in |- *; unfold R_dist in |- *; intros. -elim (H eps H0); intros. -exists x; intros. -apply Rle_lt_trans with (Rabs (Un n - l)). -apply Rabs_triang_inv2. -apply H1; assumption. + forall (Un:nat -> R) (l:R), + Un_cv Un l -> Un_cv (fun i:nat => Rabs (Un i)) (Rabs l). +Proof. + unfold Un_cv in |- *; unfold R_dist in |- *; intros. + elim (H eps H0); intros. + exists x; intros. + apply Rle_lt_trans with (Rabs (Un n - l)). + apply Rabs_triang_inv2. + apply H1; assumption. Qed. (**********) Lemma CV_Cauchy : - forall Un:nat -> R, sigT (fun l:R => Un_cv Un l) -> Cauchy_crit Un. -intros Un X; elim X; intros. -unfold Cauchy_crit in |- *; intros. -unfold Un_cv in p; unfold R_dist in p. -cut (0 < eps / 2); - [ intro - | unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ assumption | apply Rinv_0_lt_compat; prove_sup0 ] ]. -elim (p (eps / 2) H0); intros. -exists x0; intros. -unfold R_dist in |- *; - apply Rle_lt_trans with (Rabs (Un n - x) + Rabs (x - Un m)). -replace (Un n - Un m) with (Un n - x + (x - Un m)); - [ apply Rabs_triang | ring ]. -rewrite (double_var eps); apply Rplus_lt_compat. -apply H1; assumption. -rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H1; assumption. + forall Un:nat -> R, sigT (fun l:R => Un_cv Un l) -> Cauchy_crit Un. +Proof. + intros Un X; elim X; intros. + unfold Cauchy_crit in |- *; intros. + unfold Un_cv in p; unfold R_dist in p. + cut (0 < eps / 2); + [ intro + | unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ assumption | apply Rinv_0_lt_compat; prove_sup0 ] ]. + elim (p (eps / 2) H0); intros. + exists x0; intros. + unfold R_dist in |- *; + apply Rle_lt_trans with (Rabs (Un n - x) + Rabs (x - Un m)). + replace (Un n - Un m) with (Un n - x + (x - Un m)); + [ apply Rabs_triang | ring ]. + rewrite (double_var eps); apply Rplus_lt_compat. + apply H1; assumption. + rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H1; assumption. Qed. (**********) Lemma maj_by_pos : - forall Un:nat -> R, - sigT (fun l:R => Un_cv Un l) -> + forall Un:nat -> R, + sigT (fun l:R => Un_cv Un l) -> exists l : R, 0 < l /\ (forall n:nat, Rabs (Un n) <= l). -intros Un X; elim X; intros. -cut (sigT (fun l:R => Un_cv (fun k:nat => Rabs (Un k)) l)). -intro X0. -assert (H := CV_Cauchy (fun k:nat => Rabs (Un k)) X0). -assert (H0 := cauchy_bound (fun k:nat => Rabs (Un k)) H). -elim H0; intros. -exists (x0 + 1). -cut (0 <= x0). -intro. -split. -apply Rplus_le_lt_0_compat; [ assumption | apply Rlt_0_1 ]. -intros. -apply Rle_trans with x0. -unfold is_upper_bound in H1. -apply H1. -exists n; reflexivity. -pattern x0 at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_le_compat_l; left; - apply Rlt_0_1. -apply Rle_trans with (Rabs (Un 0%nat)). -apply Rabs_pos. -unfold is_upper_bound in H1. -apply H1. -exists 0%nat; reflexivity. -apply existT with (Rabs x). -apply cv_cvabs; assumption. +Proof. + intros Un X; elim X; intros. + cut (sigT (fun l:R => Un_cv (fun k:nat => Rabs (Un k)) l)). + intro X0. + assert (H := CV_Cauchy (fun k:nat => Rabs (Un k)) X0). + assert (H0 := cauchy_bound (fun k:nat => Rabs (Un k)) H). + elim H0; intros. + exists (x0 + 1). + cut (0 <= x0). + intro. + split. + apply Rplus_le_lt_0_compat; [ assumption | apply Rlt_0_1 ]. + intros. + apply Rle_trans with x0. + unfold is_upper_bound in H1. + apply H1. + exists n; reflexivity. + pattern x0 at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_le_compat_l; left; + apply Rlt_0_1. + apply Rle_trans with (Rabs (Un 0%nat)). + apply Rabs_pos. + unfold is_upper_bound in H1. + apply H1. + exists 0%nat; reflexivity. + apply existT with (Rabs x). + apply cv_cvabs; assumption. Qed. (**********) Lemma CV_mult : - forall (An Bn:nat -> R) (l1 l2:R), - Un_cv An l1 -> Un_cv Bn l2 -> Un_cv (fun i:nat => An i * Bn i) (l1 * l2). -intros. -cut (sigT (fun l:R => Un_cv An l)). -intro X. -assert (H1 := maj_by_pos An X). -elim H1; intros M H2. -elim H2; intros. -unfold Un_cv in |- *; unfold R_dist in |- *; intros. -cut (0 < eps / (2 * M)). -intro. -case (Req_dec l2 0); intro. -unfold Un_cv in H0; unfold R_dist in H0. -elim (H0 (eps / (2 * M)) H6); intros. -exists x; intros. -apply Rle_lt_trans with - (Rabs (An n * Bn n - An n * l2) + Rabs (An n * l2 - l1 * l2)). -replace (An n * Bn n - l1 * l2) with - (An n * Bn n - An n * l2 + (An n * l2 - l1 * l2)); - [ apply Rabs_triang | ring ]. -replace (Rabs (An n * Bn n - An n * l2)) with - (Rabs (An n) * Rabs (Bn n - l2)). -replace (Rabs (An n * l2 - l1 * l2)) with 0. -rewrite Rplus_0_r. -apply Rle_lt_trans with (M * Rabs (Bn n - l2)). -do 2 rewrite <- (Rmult_comm (Rabs (Bn n - l2))). -apply Rmult_le_compat_l. -apply Rabs_pos. -apply H4. -apply Rmult_lt_reg_l with (/ M). -apply Rinv_0_lt_compat; apply H3. -rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym. -rewrite Rmult_1_l; rewrite (Rmult_comm (/ M)). -apply Rlt_trans with (eps / (2 * M)). -apply H8; assumption. -unfold Rdiv in |- *; rewrite Rinv_mult_distr. -apply Rmult_lt_reg_l with 2. -prove_sup0. -replace (2 * (eps * (/ 2 * / M))) with (2 * / 2 * (eps * / M)); - [ idtac | ring ]. -rewrite <- Rinv_r_sym. -rewrite Rmult_1_l; rewrite double. -pattern (eps * / M) at 1 in |- *; rewrite <- Rplus_0_r. -apply Rplus_lt_compat_l; apply Rmult_lt_0_compat; - [ assumption | apply Rinv_0_lt_compat; assumption ]. -discrR. -discrR. -red in |- *; intro; rewrite H10 in H3; elim (Rlt_irrefl _ H3). -red in |- *; intro; rewrite H10 in H3; elim (Rlt_irrefl _ H3). -rewrite H7; do 2 rewrite Rmult_0_r; unfold Rminus in |- *; - rewrite Rplus_opp_r; rewrite Rabs_R0; reflexivity. -replace (An n * Bn n - An n * l2) with (An n * (Bn n - l2)); [ idtac | ring ]. -symmetry in |- *; apply Rabs_mult. -cut (0 < eps / (2 * Rabs l2)). -intro. -unfold Un_cv in H; unfold R_dist in H; unfold Un_cv in H0; - unfold R_dist in H0. -elim (H (eps / (2 * Rabs l2)) H8); intros N1 H9. -elim (H0 (eps / (2 * M)) H6); intros N2 H10. -set (N := max N1 N2). -exists N; intros. -apply Rle_lt_trans with - (Rabs (An n * Bn n - An n * l2) + Rabs (An n * l2 - l1 * l2)). -replace (An n * Bn n - l1 * l2) with - (An n * Bn n - An n * l2 + (An n * l2 - l1 * l2)); - [ apply Rabs_triang | ring ]. -replace (Rabs (An n * Bn n - An n * l2)) with - (Rabs (An n) * Rabs (Bn n - l2)). -replace (Rabs (An n * l2 - l1 * l2)) with (Rabs l2 * Rabs (An n - l1)). -rewrite (double_var eps); apply Rplus_lt_compat. -apply Rle_lt_trans with (M * Rabs (Bn n - l2)). -do 2 rewrite <- (Rmult_comm (Rabs (Bn n - l2))). -apply Rmult_le_compat_l. -apply Rabs_pos. -apply H4. -apply Rmult_lt_reg_l with (/ M). -apply Rinv_0_lt_compat; apply H3. -rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym. -rewrite Rmult_1_l; rewrite (Rmult_comm (/ M)). -apply Rlt_le_trans with (eps / (2 * M)). -apply H10. -unfold ge in |- *; apply le_trans with N. -unfold N in |- *; apply le_max_r. -assumption. -unfold Rdiv in |- *; rewrite Rinv_mult_distr. -right; ring. -discrR. -red in |- *; intro; rewrite H12 in H3; elim (Rlt_irrefl _ H3). -red in |- *; intro; rewrite H12 in H3; elim (Rlt_irrefl _ H3). -apply Rmult_lt_reg_l with (/ Rabs l2). -apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption. -rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym. -rewrite Rmult_1_l; apply Rlt_le_trans with (eps / (2 * Rabs l2)). -apply H9. -unfold ge in |- *; apply le_trans with N. -unfold N in |- *; apply le_max_l. -assumption. -unfold Rdiv in |- *; right; rewrite Rinv_mult_distr. -ring. -discrR. -apply Rabs_no_R0; assumption. -apply Rabs_no_R0; assumption. -replace (An n * l2 - l1 * l2) with (l2 * (An n - l1)); - [ symmetry in |- *; apply Rabs_mult | ring ]. -replace (An n * Bn n - An n * l2) with (An n * (Bn n - l2)); - [ symmetry in |- *; apply Rabs_mult | ring ]. -unfold Rdiv in |- *; apply Rmult_lt_0_compat. -assumption. -apply Rinv_0_lt_compat; apply Rmult_lt_0_compat; - [ prove_sup0 | apply Rabs_pos_lt; assumption ]. -unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ assumption - | apply Rinv_0_lt_compat; apply Rmult_lt_0_compat; - [ prove_sup0 | assumption ] ]. -apply existT with l1; assumption. + forall (An Bn:nat -> R) (l1 l2:R), + Un_cv An l1 -> Un_cv Bn l2 -> Un_cv (fun i:nat => An i * Bn i) (l1 * l2). +Proof. + intros. + cut (sigT (fun l:R => Un_cv An l)). + intro X. + assert (H1 := maj_by_pos An X). + elim H1; intros M H2. + elim H2; intros. + unfold Un_cv in |- *; unfold R_dist in |- *; intros. + cut (0 < eps / (2 * M)). + intro. + case (Req_dec l2 0); intro. + unfold Un_cv in H0; unfold R_dist in H0. + elim (H0 (eps / (2 * M)) H6); intros. + exists x; intros. + apply Rle_lt_trans with + (Rabs (An n * Bn n - An n * l2) + Rabs (An n * l2 - l1 * l2)). + replace (An n * Bn n - l1 * l2) with + (An n * Bn n - An n * l2 + (An n * l2 - l1 * l2)); + [ apply Rabs_triang | ring ]. + replace (Rabs (An n * Bn n - An n * l2)) with + (Rabs (An n) * Rabs (Bn n - l2)). + replace (Rabs (An n * l2 - l1 * l2)) with 0. + rewrite Rplus_0_r. + apply Rle_lt_trans with (M * Rabs (Bn n - l2)). + do 2 rewrite <- (Rmult_comm (Rabs (Bn n - l2))). + apply Rmult_le_compat_l. + apply Rabs_pos. + apply H4. + apply Rmult_lt_reg_l with (/ M). + apply Rinv_0_lt_compat; apply H3. + rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym. + rewrite Rmult_1_l; rewrite (Rmult_comm (/ M)). + apply Rlt_trans with (eps / (2 * M)). + apply H8; assumption. + unfold Rdiv in |- *; rewrite Rinv_mult_distr. + apply Rmult_lt_reg_l with 2. + prove_sup0. + replace (2 * (eps * (/ 2 * / M))) with (2 * / 2 * (eps * / M)); + [ idtac | ring ]. + rewrite <- Rinv_r_sym. + rewrite Rmult_1_l; rewrite double. + pattern (eps * / M) at 1 in |- *; rewrite <- Rplus_0_r. + apply Rplus_lt_compat_l; apply Rmult_lt_0_compat; + [ assumption | apply Rinv_0_lt_compat; assumption ]. + discrR. + discrR. + red in |- *; intro; rewrite H10 in H3; elim (Rlt_irrefl _ H3). + red in |- *; intro; rewrite H10 in H3; elim (Rlt_irrefl _ H3). + rewrite H7; do 2 rewrite Rmult_0_r; unfold Rminus in |- *; + rewrite Rplus_opp_r; rewrite Rabs_R0; reflexivity. + replace (An n * Bn n - An n * l2) with (An n * (Bn n - l2)); [ idtac | ring ]. + symmetry in |- *; apply Rabs_mult. + cut (0 < eps / (2 * Rabs l2)). + intro. + unfold Un_cv in H; unfold R_dist in H; unfold Un_cv in H0; + unfold R_dist in H0. + elim (H (eps / (2 * Rabs l2)) H8); intros N1 H9. + elim (H0 (eps / (2 * M)) H6); intros N2 H10. + set (N := max N1 N2). + exists N; intros. + apply Rle_lt_trans with + (Rabs (An n * Bn n - An n * l2) + Rabs (An n * l2 - l1 * l2)). + replace (An n * Bn n - l1 * l2) with + (An n * Bn n - An n * l2 + (An n * l2 - l1 * l2)); + [ apply Rabs_triang | ring ]. + replace (Rabs (An n * Bn n - An n * l2)) with + (Rabs (An n) * Rabs (Bn n - l2)). + replace (Rabs (An n * l2 - l1 * l2)) with (Rabs l2 * Rabs (An n - l1)). + rewrite (double_var eps); apply Rplus_lt_compat. + apply Rle_lt_trans with (M * Rabs (Bn n - l2)). + do 2 rewrite <- (Rmult_comm (Rabs (Bn n - l2))). + apply Rmult_le_compat_l. + apply Rabs_pos. + apply H4. + apply Rmult_lt_reg_l with (/ M). + apply Rinv_0_lt_compat; apply H3. + rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym. + rewrite Rmult_1_l; rewrite (Rmult_comm (/ M)). + apply Rlt_le_trans with (eps / (2 * M)). + apply H10. + unfold ge in |- *; apply le_trans with N. + unfold N in |- *; apply le_max_r. + assumption. + unfold Rdiv in |- *; rewrite Rinv_mult_distr. + right; ring. + discrR. + red in |- *; intro; rewrite H12 in H3; elim (Rlt_irrefl _ H3). + red in |- *; intro; rewrite H12 in H3; elim (Rlt_irrefl _ H3). + apply Rmult_lt_reg_l with (/ Rabs l2). + apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption. + rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym. + rewrite Rmult_1_l; apply Rlt_le_trans with (eps / (2 * Rabs l2)). + apply H9. + unfold ge in |- *; apply le_trans with N. + unfold N in |- *; apply le_max_l. + assumption. + unfold Rdiv in |- *; right; rewrite Rinv_mult_distr. + ring. + discrR. + apply Rabs_no_R0; assumption. + apply Rabs_no_R0; assumption. + replace (An n * l2 - l1 * l2) with (l2 * (An n - l1)); + [ symmetry in |- *; apply Rabs_mult | ring ]. + replace (An n * Bn n - An n * l2) with (An n * (Bn n - l2)); + [ symmetry in |- *; apply Rabs_mult | ring ]. + unfold Rdiv in |- *; apply Rmult_lt_0_compat. + assumption. + apply Rinv_0_lt_compat; apply Rmult_lt_0_compat; + [ prove_sup0 | apply Rabs_pos_lt; assumption ]. + unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ assumption + | apply Rinv_0_lt_compat; apply Rmult_lt_0_compat; + [ prove_sup0 | assumption ] ]. + apply existT with l1; assumption. Qed. Lemma tech9 : - forall Un:nat -> R, - Un_growing Un -> forall m n:nat, (m <= n)%nat -> Un m <= Un n. -intros; unfold Un_growing in H. -induction n as [| n Hrecn]. -induction m as [| m Hrecm]. -right; reflexivity. -elim (le_Sn_O _ H0). -cut ((m <= n)%nat \/ m = S n). -intro; elim H1; intro. -apply Rle_trans with (Un n). -apply Hrecn; assumption. -apply H. -rewrite H2; right; reflexivity. -inversion H0. -right; reflexivity. -left; assumption. + forall Un:nat -> R, + Un_growing Un -> forall m n:nat, (m <= n)%nat -> Un m <= Un n. +Proof. + intros; unfold Un_growing in H. + induction n as [| n Hrecn]. + induction m as [| m Hrecm]. + right; reflexivity. + elim (le_Sn_O _ H0). + cut ((m <= n)%nat \/ m = S n). + intro; elim H1; intro. + apply Rle_trans with (Un n). + apply Hrecn; assumption. + apply H. + rewrite H2; right; reflexivity. + inversion H0. + right; reflexivity. + left; assumption. Qed. Lemma tech10 : - forall (Un:nat -> R) (x:R), Un_growing Un -> is_lub (EUn Un) x -> Un_cv Un x. -intros; cut (bound (EUn Un)). -intro; assert (H2 := Un_cv_crit _ H H1). -elim H2; intros. -case (total_order_T x x0); intro. -elim s; intro. -cut (forall n:nat, Un n <= x). -intro; unfold Un_cv in H3; cut (0 < x0 - x). -intro; elim (H3 (x0 - x) H5); intros. -cut (x1 >= x1)%nat. -intro; assert (H8 := H6 x1 H7). -unfold R_dist in H8; rewrite Rabs_left1 in H8. -rewrite Ropp_minus_distr in H8; unfold Rminus in H8. -assert (H9 := Rplus_lt_reg_r x0 _ _ H8). -assert (H10 := Ropp_lt_cancel _ _ H9). -assert (H11 := H4 x1). -elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H10 H11)). -apply Rle_minus; apply Rle_trans with x. -apply H4. -left; assumption. -unfold ge in |- *; apply le_n. -apply Rgt_minus; assumption. -intro; unfold is_lub in H0; unfold is_upper_bound in H0; elim H0; intros. -apply H4; unfold EUn in |- *; exists n; reflexivity. -rewrite b; assumption. -cut (forall n:nat, Un n <= x0). -intro; unfold is_lub in H0; unfold is_upper_bound in H0; elim H0; intros. -cut (forall y:R, EUn Un y -> y <= x0). -intro; assert (H8 := H6 _ H7). -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H8 r)). -unfold EUn in |- *; intros; elim H7; intros. -rewrite H8; apply H4. -intro; case (Rle_dec (Un n) x0); intro. -assumption. -cut (forall n0:nat, (n <= n0)%nat -> x0 < Un n0). -intro; unfold Un_cv in H3; cut (0 < Un n - x0). -intro; elim (H3 (Un n - x0) H5); intros. -cut (max n x1 >= x1)%nat. -intro; assert (H8 := H6 (max n x1) H7). -unfold R_dist in H8. -rewrite Rabs_right in H8. -unfold Rminus in H8; do 2 rewrite <- (Rplus_comm (- x0)) in H8. -assert (H9 := Rplus_lt_reg_r _ _ _ H8). -cut (Un n <= Un (max n x1)). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H10 H9)). -apply tech9; [ assumption | apply le_max_l ]. -apply Rge_trans with (Un n - x0). -unfold Rminus in |- *; apply Rle_ge; do 2 rewrite <- (Rplus_comm (- x0)); - apply Rplus_le_compat_l. -apply tech9; [ assumption | apply le_max_l ]. -left; assumption. -unfold ge in |- *; apply le_max_r. -apply Rplus_lt_reg_r with x0. -rewrite Rplus_0_r; unfold Rminus in |- *; rewrite (Rplus_comm x0); - rewrite Rplus_assoc; rewrite Rplus_opp_l; rewrite Rplus_0_r; - apply H4; apply le_n. -intros; apply Rlt_le_trans with (Un n). -case (Rlt_le_dec x0 (Un n)); intro. -assumption. -elim n0; assumption. -apply tech9; assumption. -unfold bound in |- *; exists x; unfold is_lub in H0; elim H0; intros; - assumption. + forall (Un:nat -> R) (x:R), Un_growing Un -> is_lub (EUn Un) x -> Un_cv Un x. +Proof. + intros; cut (bound (EUn Un)). + intro; assert (H2 := Un_cv_crit _ H H1). + elim H2; intros. + case (total_order_T x x0); intro. + elim s; intro. + cut (forall n:nat, Un n <= x). + intro; unfold Un_cv in H3; cut (0 < x0 - x). + intro; elim (H3 (x0 - x) H5); intros. + cut (x1 >= x1)%nat. + intro; assert (H8 := H6 x1 H7). + unfold R_dist in H8; rewrite Rabs_left1 in H8. + rewrite Ropp_minus_distr in H8; unfold Rminus in H8. + assert (H9 := Rplus_lt_reg_r x0 _ _ H8). + assert (H10 := Ropp_lt_cancel _ _ H9). + assert (H11 := H4 x1). + elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H10 H11)). + apply Rle_minus; apply Rle_trans with x. + apply H4. + left; assumption. + unfold ge in |- *; apply le_n. + apply Rgt_minus; assumption. + intro; unfold is_lub in H0; unfold is_upper_bound in H0; elim H0; intros. + apply H4; unfold EUn in |- *; exists n; reflexivity. + rewrite b; assumption. + cut (forall n:nat, Un n <= x0). + intro; unfold is_lub in H0; unfold is_upper_bound in H0; elim H0; intros. + cut (forall y:R, EUn Un y -> y <= x0). + intro; assert (H8 := H6 _ H7). + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H8 r)). + unfold EUn in |- *; intros; elim H7; intros. + rewrite H8; apply H4. + intro; case (Rle_dec (Un n) x0); intro. + assumption. + cut (forall n0:nat, (n <= n0)%nat -> x0 < Un n0). + intro; unfold Un_cv in H3; cut (0 < Un n - x0). + intro; elim (H3 (Un n - x0) H5); intros. + cut (max n x1 >= x1)%nat. + intro; assert (H8 := H6 (max n x1) H7). + unfold R_dist in H8. + rewrite Rabs_right in H8. + unfold Rminus in H8; do 2 rewrite <- (Rplus_comm (- x0)) in H8. + assert (H9 := Rplus_lt_reg_r _ _ _ H8). + cut (Un n <= Un (max n x1)). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H10 H9)). + apply tech9; [ assumption | apply le_max_l ]. + apply Rge_trans with (Un n - x0). + unfold Rminus in |- *; apply Rle_ge; do 2 rewrite <- (Rplus_comm (- x0)); + apply Rplus_le_compat_l. + apply tech9; [ assumption | apply le_max_l ]. + left; assumption. + unfold ge in |- *; apply le_max_r. + apply Rplus_lt_reg_r with x0. + rewrite Rplus_0_r; unfold Rminus in |- *; rewrite (Rplus_comm x0); + rewrite Rplus_assoc; rewrite Rplus_opp_l; rewrite Rplus_0_r; + apply H4; apply le_n. + intros; apply Rlt_le_trans with (Un n). + case (Rlt_le_dec x0 (Un n)); intro. + assumption. + elim n0; assumption. + apply tech9; assumption. + unfold bound in |- *; exists x; unfold is_lub in H0; elim H0; intros; + assumption. Qed. Lemma tech13 : - forall (An:nat -> R) (k:R), - 0 <= k < 1 -> - Un_cv (fun n:nat => Rabs (An (S n) / An n)) k -> + forall (An:nat -> R) (k:R), + 0 <= k < 1 -> + Un_cv (fun n:nat => Rabs (An (S n) / An n)) k -> exists k0 : R, - k < k0 < 1 /\ - (exists N : nat, + k < k0 < 1 /\ + (exists N : nat, (forall n:nat, (N <= n)%nat -> Rabs (An (S n) / An n) < k0)). -intros; exists (k + (1 - k) / 2). -split. -split. -pattern k at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l. -unfold Rdiv in |- *; apply Rmult_lt_0_compat. -apply Rplus_lt_reg_r with k; rewrite Rplus_0_r; replace (k + (1 - k)) with 1; - [ elim H; intros; assumption | ring ]. -apply Rinv_0_lt_compat; prove_sup0. -apply Rmult_lt_reg_l with 2. -prove_sup0. -unfold Rdiv in |- *; rewrite Rmult_1_r; rewrite Rmult_plus_distr_l; - pattern 2 at 1 in |- *; rewrite Rmult_comm; rewrite Rmult_assoc; - rewrite <- Rinv_l_sym; [ idtac | discrR ]; rewrite Rmult_1_r; - replace (2 * k + (1 - k)) with (1 + k); [ idtac | ring ]. -elim H; intros. -apply Rplus_lt_compat_l; assumption. -unfold Un_cv in H0; cut (0 < (1 - k) / 2). -intro; elim (H0 ((1 - k) / 2) H1); intros. -exists x; intros. -assert (H4 := H2 n H3). -unfold R_dist in H4; rewrite <- Rabs_Rabsolu; - replace (Rabs (An (S n) / An n)) with (Rabs (An (S n) / An n) - k + k); - [ idtac | ring ]; - apply Rle_lt_trans with (Rabs (Rabs (An (S n) / An n) - k) + Rabs k). -apply Rabs_triang. -rewrite (Rabs_right k). -apply Rplus_lt_reg_r with (- k); rewrite <- (Rplus_comm k); - repeat rewrite <- Rplus_assoc; rewrite Rplus_opp_l; - repeat rewrite Rplus_0_l; apply H4. -apply Rle_ge; elim H; intros; assumption. -unfold Rdiv in |- *; apply Rmult_lt_0_compat. -apply Rplus_lt_reg_r with k; rewrite Rplus_0_r; elim H; intros; - replace (k + (1 - k)) with 1; [ assumption | ring ]. -apply Rinv_0_lt_compat; prove_sup0. +Proof. + intros; exists (k + (1 - k) / 2). + split. + split. + pattern k at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l. + unfold Rdiv in |- *; apply Rmult_lt_0_compat. + apply Rplus_lt_reg_r with k; rewrite Rplus_0_r; replace (k + (1 - k)) with 1; + [ elim H; intros; assumption | ring ]. + apply Rinv_0_lt_compat; prove_sup0. + apply Rmult_lt_reg_l with 2. + prove_sup0. + unfold Rdiv in |- *; rewrite Rmult_1_r; rewrite Rmult_plus_distr_l; + pattern 2 at 1 in |- *; rewrite Rmult_comm; rewrite Rmult_assoc; + rewrite <- Rinv_l_sym; [ idtac | discrR ]; rewrite Rmult_1_r; + replace (2 * k + (1 - k)) with (1 + k); [ idtac | ring ]. + elim H; intros. + apply Rplus_lt_compat_l; assumption. + unfold Un_cv in H0; cut (0 < (1 - k) / 2). + intro; elim (H0 ((1 - k) / 2) H1); intros. + exists x; intros. + assert (H4 := H2 n H3). + unfold R_dist in H4; rewrite <- Rabs_Rabsolu; + replace (Rabs (An (S n) / An n)) with (Rabs (An (S n) / An n) - k + k); + [ idtac | ring ]; + apply Rle_lt_trans with (Rabs (Rabs (An (S n) / An n) - k) + Rabs k). + apply Rabs_triang. + rewrite (Rabs_right k). + apply Rplus_lt_reg_r with (- k); rewrite <- (Rplus_comm k); + repeat rewrite <- Rplus_assoc; rewrite Rplus_opp_l; + repeat rewrite Rplus_0_l; apply H4. + apply Rle_ge; elim H; intros; assumption. + unfold Rdiv in |- *; apply Rmult_lt_0_compat. + apply Rplus_lt_reg_r with k; rewrite Rplus_0_r; elim H; intros; + replace (k + (1 - k)) with 1; [ assumption | ring ]. + apply Rinv_0_lt_compat; prove_sup0. Qed. (**********) Lemma growing_ineq : - forall (Un:nat -> R) (l:R), - Un_growing Un -> Un_cv Un l -> forall n:nat, Un n <= l. -intros; case (total_order_T (Un n) l); intro. -elim s; intro. -left; assumption. -right; assumption. -cut (0 < Un n - l). -intro; unfold Un_cv in H0; unfold R_dist in H0. -elim (H0 (Un n - l) H1); intros N1 H2. -set (N := max n N1). -cut (Un n - l <= Un N - l). -intro; cut (Un N - l < Un n - l). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H3 H4)). -apply Rle_lt_trans with (Rabs (Un N - l)). -apply RRle_abs. -apply H2. -unfold ge, N in |- *; apply le_max_r. -unfold Rminus in |- *; do 2 rewrite <- (Rplus_comm (- l)); - apply Rplus_le_compat_l. -apply tech9. -assumption. -unfold N in |- *; apply le_max_l. -apply Rplus_lt_reg_r with l. -rewrite Rplus_0_r. -replace (l + (Un n - l)) with (Un n); [ assumption | ring ]. + forall (Un:nat -> R) (l:R), + Un_growing Un -> Un_cv Un l -> forall n:nat, Un n <= l. +Proof. + intros; case (total_order_T (Un n) l); intro. + elim s; intro. + left; assumption. + right; assumption. + cut (0 < Un n - l). + intro; unfold Un_cv in H0; unfold R_dist in H0. + elim (H0 (Un n - l) H1); intros N1 H2. + set (N := max n N1). + cut (Un n - l <= Un N - l). + intro; cut (Un N - l < Un n - l). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H3 H4)). + apply Rle_lt_trans with (Rabs (Un N - l)). + apply RRle_abs. + apply H2. + unfold ge, N in |- *; apply le_max_r. + unfold Rminus in |- *; do 2 rewrite <- (Rplus_comm (- l)); + apply Rplus_le_compat_l. + apply tech9. + assumption. + unfold N in |- *; apply le_max_l. + apply Rplus_lt_reg_r with l. + rewrite Rplus_0_r. + replace (l + (Un n - l)) with (Un n); [ assumption | ring ]. Qed. -(* Un->l => (-Un) -> (-l) *) +(** Un->l => (-Un) -> (-l) *) Lemma CV_opp : - forall (An:nat -> R) (l:R), Un_cv An l -> Un_cv (opp_seq An) (- l). -intros An l. -unfold Un_cv in |- *; unfold R_dist in |- *; intros. -elim (H eps H0); intros. -exists x; intros. -unfold opp_seq in |- *; replace (- An n - - l) with (- (An n - l)); - [ rewrite Rabs_Ropp | ring ]. -apply H1; assumption. + forall (An:nat -> R) (l:R), Un_cv An l -> Un_cv (opp_seq An) (- l). +Proof. + intros An l. + unfold Un_cv in |- *; unfold R_dist in |- *; intros. + elim (H eps H0); intros. + exists x; intros. + unfold opp_seq in |- *; replace (- An n - - l) with (- (An n - l)); + [ rewrite Rabs_Ropp | ring ]. + apply H1; assumption. Qed. (**********) Lemma decreasing_ineq : - forall (Un:nat -> R) (l:R), - Un_decreasing Un -> Un_cv Un l -> forall n:nat, l <= Un n. -intros. -assert (H1 := decreasing_growing _ H). -assert (H2 := CV_opp _ _ H0). -assert (H3 := growing_ineq _ _ H1 H2). -apply Ropp_le_cancel. -unfold opp_seq in H3; apply H3. + forall (Un:nat -> R) (l:R), + Un_decreasing Un -> Un_cv Un l -> forall n:nat, l <= Un n. +Proof. + intros. + assert (H1 := decreasing_growing _ H). + assert (H2 := CV_opp _ _ H0). + assert (H3 := growing_ineq _ _ H1 H2). + apply Ropp_le_cancel. + unfold opp_seq in H3; apply H3. Qed. (**********) Lemma CV_minus : - forall (An Bn:nat -> R) (l1 l2:R), - Un_cv An l1 -> Un_cv Bn l2 -> Un_cv (fun i:nat => An i - Bn i) (l1 - l2). -intros. -replace (fun i:nat => An i - Bn i) with (fun i:nat => An i + opp_seq Bn i). -unfold Rminus in |- *; apply CV_plus. -assumption. -apply CV_opp; assumption. -unfold Rminus, opp_seq in |- *; reflexivity. + forall (An Bn:nat -> R) (l1 l2:R), + Un_cv An l1 -> Un_cv Bn l2 -> Un_cv (fun i:nat => An i - Bn i) (l1 - l2). +Proof. + intros. + replace (fun i:nat => An i - Bn i) with (fun i:nat => An i + opp_seq Bn i). + unfold Rminus in |- *; apply CV_plus. + assumption. + apply CV_opp; assumption. + unfold Rminus, opp_seq in |- *; reflexivity. Qed. -(* Un -> +oo *) +(** Un -> +oo *) Definition cv_infty (Un:nat -> R) : Prop := forall M:R, exists N : nat, (forall n:nat, (N <= n)%nat -> M < Un n). -(* Un -> +oo => /Un -> O *) +(** Un -> +oo => /Un -> O *) Lemma cv_infty_cv_R0 : - forall Un:nat -> R, - (forall n:nat, Un n <> 0) -> cv_infty Un -> Un_cv (fun n:nat => / Un n) 0. -unfold cv_infty, Un_cv in |- *; unfold R_dist in |- *; intros. -elim (H0 (/ eps)); intros N0 H2. -exists N0; intros. -unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; - rewrite (Rabs_Rinv _ (H n)). -apply Rmult_lt_reg_l with (Rabs (Un n)). -apply Rabs_pos_lt; apply H. -rewrite <- Rinv_r_sym. -apply Rmult_lt_reg_l with (/ eps). -apply Rinv_0_lt_compat; assumption. -rewrite Rmult_1_r; rewrite (Rmult_comm (/ eps)); rewrite Rmult_assoc; - rewrite <- Rinv_r_sym. -rewrite Rmult_1_r; apply Rlt_le_trans with (Un n). -apply H2; assumption. -apply RRle_abs. -red in |- *; intro; rewrite H4 in H1; elim (Rlt_irrefl _ H1). -apply Rabs_no_R0; apply H. + forall Un:nat -> R, + (forall n:nat, Un n <> 0) -> cv_infty Un -> Un_cv (fun n:nat => / Un n) 0. +Proof. + unfold cv_infty, Un_cv in |- *; unfold R_dist in |- *; intros. + elim (H0 (/ eps)); intros N0 H2. + exists N0; intros. + unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; + rewrite (Rabs_Rinv _ (H n)). + apply Rmult_lt_reg_l with (Rabs (Un n)). + apply Rabs_pos_lt; apply H. + rewrite <- Rinv_r_sym. + apply Rmult_lt_reg_l with (/ eps). + apply Rinv_0_lt_compat; assumption. + rewrite Rmult_1_r; rewrite (Rmult_comm (/ eps)); rewrite Rmult_assoc; + rewrite <- Rinv_r_sym. + rewrite Rmult_1_r; apply Rlt_le_trans with (Un n). + apply H2; assumption. + apply RRle_abs. + red in |- *; intro; rewrite H4 in H1; elim (Rlt_irrefl _ H1). + apply Rabs_no_R0; apply H. Qed. (**********) Lemma decreasing_prop : - forall (Un:nat -> R) (m n:nat), - Un_decreasing Un -> (m <= n)%nat -> Un n <= Un m. -unfold Un_decreasing in |- *; intros. -induction n as [| n Hrecn]. -induction m as [| m Hrecm]. -right; reflexivity. -elim (le_Sn_O _ H0). -cut ((m <= n)%nat \/ m = S n). -intro; elim H1; intro. -apply Rle_trans with (Un n). -apply H. -apply Hrecn; assumption. -rewrite H2; right; reflexivity. -inversion H0; [ right; reflexivity | left; assumption ]. + forall (Un:nat -> R) (m n:nat), + Un_decreasing Un -> (m <= n)%nat -> Un n <= Un m. +Proof. + unfold Un_decreasing in |- *; intros. + induction n as [| n Hrecn]. + induction m as [| m Hrecm]. + right; reflexivity. + elim (le_Sn_O _ H0). + cut ((m <= n)%nat \/ m = S n). + intro; elim H1; intro. + apply Rle_trans with (Un n). + apply H. + apply Hrecn; assumption. + rewrite H2; right; reflexivity. + inversion H0; [ right; reflexivity | left; assumption ]. Qed. -(* |x|^n/n! -> 0 *) +(** |x|^n/n! -> 0 *) Lemma cv_speed_pow_fact : - forall x:R, Un_cv (fun n:nat => x ^ n / INR (fact n)) 0. -intro; - cut - (Un_cv (fun n:nat => Rabs x ^ n / INR (fact n)) 0 -> - Un_cv (fun n:nat => x ^ n / INR (fact n)) 0). -intro; apply H. -unfold Un_cv in |- *; unfold R_dist in |- *; intros; case (Req_dec x 0); - intro. -exists 1%nat; intros. -rewrite H1; unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; - rewrite Rabs_R0; rewrite pow_ne_zero; - [ unfold Rdiv in |- *; rewrite Rmult_0_l; rewrite Rabs_R0; assumption - | red in |- *; intro; rewrite H3 in H2; elim (le_Sn_n _ H2) ]. -assert (H2 := Rabs_pos_lt x H1); set (M := up (Rabs x)); cut (0 <= M)%Z. -intro; elim (IZN M H3); intros M_nat H4. -set (Un := fun n:nat => Rabs x ^ (M_nat + n) / INR (fact (M_nat + n))). -cut (Un_cv Un 0); unfold Un_cv in |- *; unfold R_dist in |- *; intros. -elim (H5 eps H0); intros N H6. -exists (M_nat + N)%nat; intros; - cut (exists p : nat, (p >= N)%nat /\ n = (M_nat + p)%nat). -intro; elim H8; intros p H9. -elim H9; intros; rewrite H11; unfold Un in H6; apply H6; assumption. -exists (n - M_nat)%nat. -split. -unfold ge in |- *; apply (fun p n m:nat => plus_le_reg_l n m p) with M_nat; - rewrite <- le_plus_minus. -assumption. -apply le_trans with (M_nat + N)%nat. -apply le_plus_l. -assumption. -apply le_plus_minus; apply le_trans with (M_nat + N)%nat; - [ apply le_plus_l | assumption ]. -set (Vn := fun n:nat => Rabs x * (Un 0%nat / INR (S n))). -cut (1 <= M_nat)%nat. -intro; cut (forall n:nat, 0 < Un n). -intro; cut (Un_decreasing Un). -intro; cut (forall n:nat, Un (S n) <= Vn n). -intro; cut (Un_cv Vn 0). -unfold Un_cv in |- *; unfold R_dist in |- *; intros. -elim (H10 eps0 H5); intros N1 H11. -exists (S N1); intros. -cut (forall n:nat, 0 < Vn n). -intro; apply Rle_lt_trans with (Rabs (Vn (pred n) - 0)). -repeat rewrite Rabs_right. -unfold Rminus in |- *; rewrite Ropp_0; do 2 rewrite Rplus_0_r; - replace n with (S (pred n)). -apply H9. -inversion H12; simpl in |- *; reflexivity. -apply Rle_ge; unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; left; - apply H13. -apply Rle_ge; unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; left; - apply H7. -apply H11; unfold ge in |- *; apply le_S_n; replace (S (pred n)) with n; - [ unfold ge in H12; exact H12 | inversion H12; simpl in |- *; reflexivity ]. -intro; apply Rlt_le_trans with (Un (S n0)); [ apply H7 | apply H9 ]. -cut (cv_infty (fun n:nat => INR (S n))). -intro; cut (Un_cv (fun n:nat => / INR (S n)) 0). -unfold Un_cv, R_dist in |- *; intros; unfold Vn in |- *. -cut (0 < eps1 / (Rabs x * Un 0%nat)). -intro; elim (H11 _ H13); intros N H14. -exists N; intros; - replace (Rabs x * (Un 0%nat / INR (S n)) - 0) with - (Rabs x * Un 0%nat * (/ INR (S n) - 0)); - [ idtac | unfold Rdiv in |- *; ring ]. -rewrite Rabs_mult; apply Rmult_lt_reg_l with (/ Rabs (Rabs x * Un 0%nat)). -apply Rinv_0_lt_compat; apply Rabs_pos_lt. -apply prod_neq_R0. -apply Rabs_no_R0; assumption. -assert (H16 := H7 0%nat); red in |- *; intro; rewrite H17 in H16; - elim (Rlt_irrefl _ H16). -rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym. -rewrite Rmult_1_l. -replace (/ Rabs (Rabs x * Un 0%nat) * eps1) with (eps1 / (Rabs x * Un 0%nat)). -apply H14; assumption. -unfold Rdiv in |- *; rewrite (Rabs_right (Rabs x * Un 0%nat)). -apply Rmult_comm. -apply Rle_ge; apply Rmult_le_pos. -apply Rabs_pos. -left; apply H7. -apply Rabs_no_R0. -apply prod_neq_R0; - [ apply Rabs_no_R0; assumption - | assert (H16 := H7 0%nat); red in |- *; intro; rewrite H17 in H16; - elim (Rlt_irrefl _ H16) ]. -unfold Rdiv in |- *; apply Rmult_lt_0_compat. -assumption. -apply Rinv_0_lt_compat; apply Rmult_lt_0_compat. -apply Rabs_pos_lt; assumption. -apply H7. -apply (cv_infty_cv_R0 (fun n:nat => INR (S n))). -intro; apply not_O_INR; discriminate. -assumption. -unfold cv_infty in |- *; intro; case (total_order_T M0 0); intro. -elim s; intro. -exists 0%nat; intros. -apply Rlt_trans with 0; [ assumption | apply lt_INR_0; apply lt_O_Sn ]. -exists 0%nat; intros; rewrite b; apply lt_INR_0; apply lt_O_Sn. -set (M0_z := up M0). -assert (H10 := archimed M0). -cut (0 <= M0_z)%Z. -intro; elim (IZN _ H11); intros M0_nat H12. -exists M0_nat; intros. -apply Rlt_le_trans with (IZR M0_z). -elim H10; intros; assumption. -rewrite H12; rewrite <- INR_IZR_INZ; apply le_INR. -apply le_trans with n; [ assumption | apply le_n_Sn ]. -apply le_IZR; left; simpl in |- *; unfold M0_z in |- *; - apply Rlt_trans with M0; [ assumption | elim H10; intros; assumption ]. -intro; apply Rle_trans with (Rabs x * Un n * / INR (S n)). -unfold Un in |- *; replace (M_nat + S n)%nat with (M_nat + n + 1)%nat. -rewrite pow_add; replace (Rabs x ^ 1) with (Rabs x); - [ idtac | simpl in |- *; ring ]. -unfold Rdiv in |- *; rewrite <- (Rmult_comm (Rabs x)); - repeat rewrite Rmult_assoc; repeat apply Rmult_le_compat_l. -apply Rabs_pos. -left; apply pow_lt; assumption. -replace (M_nat + n + 1)%nat with (S (M_nat + n)). -rewrite fact_simpl; rewrite mult_comm; rewrite mult_INR; - rewrite Rinv_mult_distr. -apply Rmult_le_compat_l. -left; apply Rinv_0_lt_compat; apply lt_INR_0; apply neq_O_lt; red in |- *; - intro; assert (H10 := sym_eq H9); elim (fact_neq_0 _ H10). -left; apply Rinv_lt_contravar. -apply Rmult_lt_0_compat; apply lt_INR_0; apply lt_O_Sn. -apply lt_INR; apply lt_n_S. -pattern n at 1 in |- *; replace n with (0 + n)%nat; [ idtac | reflexivity ]. -apply plus_lt_compat_r. -apply lt_le_trans with 1%nat; [ apply lt_O_Sn | assumption ]. -apply INR_fact_neq_0. -apply not_O_INR; discriminate. -apply INR_eq; rewrite S_INR; do 3 rewrite plus_INR; reflexivity. -apply INR_eq; do 3 rewrite plus_INR; do 2 rewrite S_INR; ring. -unfold Vn in |- *; rewrite Rmult_assoc; unfold Rdiv in |- *; - rewrite (Rmult_comm (Un 0%nat)); rewrite (Rmult_comm (Un n)). -repeat apply Rmult_le_compat_l. -apply Rabs_pos. -left; apply Rinv_0_lt_compat; apply lt_INR_0; apply lt_O_Sn. -apply decreasing_prop; [ assumption | apply le_O_n ]. -unfold Un_decreasing in |- *; intro; unfold Un in |- *. -replace (M_nat + S n)%nat with (M_nat + n + 1)%nat. -rewrite pow_add; unfold Rdiv in |- *; rewrite Rmult_assoc; - apply Rmult_le_compat_l. -left; apply pow_lt; assumption. -replace (Rabs x ^ 1) with (Rabs x); [ idtac | simpl in |- *; ring ]. -replace (M_nat + n + 1)%nat with (S (M_nat + n)). -apply Rmult_le_reg_l with (INR (fact (S (M_nat + n)))). -apply lt_INR_0; apply neq_O_lt; red in |- *; intro; assert (H9 := sym_eq H8); - elim (fact_neq_0 _ H9). -rewrite (Rmult_comm (Rabs x)); rewrite <- Rmult_assoc; rewrite <- Rinv_r_sym. -rewrite Rmult_1_l. -rewrite fact_simpl; rewrite mult_INR; rewrite Rmult_assoc; - rewrite <- Rinv_r_sym. -rewrite Rmult_1_r; apply Rle_trans with (INR M_nat). -left; rewrite INR_IZR_INZ. -rewrite <- H4; assert (H8 := archimed (Rabs x)); elim H8; intros; assumption. -apply le_INR; apply le_trans with (S M_nat); - [ apply le_n_Sn | apply le_n_S; apply le_plus_l ]. -apply INR_fact_neq_0. -apply INR_fact_neq_0. -apply INR_eq; rewrite S_INR; do 3 rewrite plus_INR; reflexivity. -apply INR_eq; do 3 rewrite plus_INR; do 2 rewrite S_INR; ring. -intro; unfold Un in |- *; unfold Rdiv in |- *; apply Rmult_lt_0_compat. -apply pow_lt; assumption. -apply Rinv_0_lt_compat; apply lt_INR_0; apply neq_O_lt; red in |- *; intro; - assert (H8 := sym_eq H7); elim (fact_neq_0 _ H8). -clear Un Vn; apply INR_le; simpl in |- *. -induction M_nat as [| M_nat HrecM_nat]. -assert (H6 := archimed (Rabs x)); fold M in H6; elim H6; intros. -rewrite H4 in H7; rewrite <- INR_IZR_INZ in H7. -simpl in H7; elim (Rlt_irrefl _ (Rlt_trans _ _ _ H2 H7)). -replace 1 with (INR 1); [ apply le_INR | reflexivity ]; apply le_n_S; - apply le_O_n. -apply le_IZR; simpl in |- *; left; apply Rlt_trans with (Rabs x). -assumption. -elim (archimed (Rabs x)); intros; assumption. -unfold Un_cv in |- *; unfold R_dist in |- *; intros; elim (H eps H0); intros. -exists x0; intros; - apply Rle_lt_trans with (Rabs (Rabs x ^ n / INR (fact n) - 0)). -unfold Rminus in |- *; rewrite Ropp_0; do 2 rewrite Rplus_0_r; - rewrite (Rabs_right (Rabs x ^ n / INR (fact n))). -unfold Rdiv in |- *; rewrite Rabs_mult; rewrite (Rabs_right (/ INR (fact n))). -rewrite RPow_abs; right; reflexivity. -apply Rle_ge; left; apply Rinv_0_lt_compat; apply lt_INR_0; apply neq_O_lt; - red in |- *; intro; assert (H4 := sym_eq H3); elim (fact_neq_0 _ H4). -apply Rle_ge; unfold Rdiv in |- *; apply Rmult_le_pos. -case (Req_dec x 0); intro. -rewrite H3; rewrite Rabs_R0. -induction n as [| n Hrecn]; - [ simpl in |- *; left; apply Rlt_0_1 - | simpl in |- *; rewrite Rmult_0_l; right; reflexivity ]. -left; apply pow_lt; apply Rabs_pos_lt; assumption. -left; apply Rinv_0_lt_compat; apply lt_INR_0; apply neq_O_lt; red in |- *; - intro; assert (H4 := sym_eq H3); elim (fact_neq_0 _ H4). -apply H1; assumption. + forall x:R, Un_cv (fun n:nat => x ^ n / INR (fact n)) 0. +Proof. + intro; + cut + (Un_cv (fun n:nat => Rabs x ^ n / INR (fact n)) 0 -> + Un_cv (fun n:nat => x ^ n / INR (fact n)) 0). + intro; apply H. + unfold Un_cv in |- *; unfold R_dist in |- *; intros; case (Req_dec x 0); + intro. + exists 1%nat; intros. + rewrite H1; unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; + rewrite Rabs_R0; rewrite pow_ne_zero; + [ unfold Rdiv in |- *; rewrite Rmult_0_l; rewrite Rabs_R0; assumption + | red in |- *; intro; rewrite H3 in H2; elim (le_Sn_n _ H2) ]. + assert (H2 := Rabs_pos_lt x H1); set (M := up (Rabs x)); cut (0 <= M)%Z. + intro; elim (IZN M H3); intros M_nat H4. + set (Un := fun n:nat => Rabs x ^ (M_nat + n) / INR (fact (M_nat + n))). + cut (Un_cv Un 0); unfold Un_cv in |- *; unfold R_dist in |- *; intros. + elim (H5 eps H0); intros N H6. + exists (M_nat + N)%nat; intros; + cut (exists p : nat, (p >= N)%nat /\ n = (M_nat + p)%nat). + intro; elim H8; intros p H9. + elim H9; intros; rewrite H11; unfold Un in H6; apply H6; assumption. + exists (n - M_nat)%nat. + split. + unfold ge in |- *; apply (fun p n m:nat => plus_le_reg_l n m p) with M_nat; + rewrite <- le_plus_minus. + assumption. + apply le_trans with (M_nat + N)%nat. + apply le_plus_l. + assumption. + apply le_plus_minus; apply le_trans with (M_nat + N)%nat; + [ apply le_plus_l | assumption ]. + set (Vn := fun n:nat => Rabs x * (Un 0%nat / INR (S n))). + cut (1 <= M_nat)%nat. + intro; cut (forall n:nat, 0 < Un n). + intro; cut (Un_decreasing Un). + intro; cut (forall n:nat, Un (S n) <= Vn n). + intro; cut (Un_cv Vn 0). + unfold Un_cv in |- *; unfold R_dist in |- *; intros. + elim (H10 eps0 H5); intros N1 H11. + exists (S N1); intros. + cut (forall n:nat, 0 < Vn n). + intro; apply Rle_lt_trans with (Rabs (Vn (pred n) - 0)). + repeat rewrite Rabs_right. + unfold Rminus in |- *; rewrite Ropp_0; do 2 rewrite Rplus_0_r; + replace n with (S (pred n)). + apply H9. + inversion H12; simpl in |- *; reflexivity. + apply Rle_ge; unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; left; + apply H13. + apply Rle_ge; unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; left; + apply H7. + apply H11; unfold ge in |- *; apply le_S_n; replace (S (pred n)) with n; + [ unfold ge in H12; exact H12 | inversion H12; simpl in |- *; reflexivity ]. + intro; apply Rlt_le_trans with (Un (S n0)); [ apply H7 | apply H9 ]. + cut (cv_infty (fun n:nat => INR (S n))). + intro; cut (Un_cv (fun n:nat => / INR (S n)) 0). + unfold Un_cv, R_dist in |- *; intros; unfold Vn in |- *. + cut (0 < eps1 / (Rabs x * Un 0%nat)). + intro; elim (H11 _ H13); intros N H14. + exists N; intros; + replace (Rabs x * (Un 0%nat / INR (S n)) - 0) with + (Rabs x * Un 0%nat * (/ INR (S n) - 0)); + [ idtac | unfold Rdiv in |- *; ring ]. + rewrite Rabs_mult; apply Rmult_lt_reg_l with (/ Rabs (Rabs x * Un 0%nat)). + apply Rinv_0_lt_compat; apply Rabs_pos_lt. + apply prod_neq_R0. + apply Rabs_no_R0; assumption. + assert (H16 := H7 0%nat); red in |- *; intro; rewrite H17 in H16; + elim (Rlt_irrefl _ H16). + rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym. + rewrite Rmult_1_l. + replace (/ Rabs (Rabs x * Un 0%nat) * eps1) with (eps1 / (Rabs x * Un 0%nat)). + apply H14; assumption. + unfold Rdiv in |- *; rewrite (Rabs_right (Rabs x * Un 0%nat)). + apply Rmult_comm. + apply Rle_ge; apply Rmult_le_pos. + apply Rabs_pos. + left; apply H7. + apply Rabs_no_R0. + apply prod_neq_R0; + [ apply Rabs_no_R0; assumption + | assert (H16 := H7 0%nat); red in |- *; intro; rewrite H17 in H16; + elim (Rlt_irrefl _ H16) ]. + unfold Rdiv in |- *; apply Rmult_lt_0_compat. + assumption. + apply Rinv_0_lt_compat; apply Rmult_lt_0_compat. + apply Rabs_pos_lt; assumption. + apply H7. + apply (cv_infty_cv_R0 (fun n:nat => INR (S n))). + intro; apply not_O_INR; discriminate. + assumption. + unfold cv_infty in |- *; intro; case (total_order_T M0 0); intro. + elim s; intro. + exists 0%nat; intros. + apply Rlt_trans with 0; [ assumption | apply lt_INR_0; apply lt_O_Sn ]. + exists 0%nat; intros; rewrite b; apply lt_INR_0; apply lt_O_Sn. + set (M0_z := up M0). + assert (H10 := archimed M0). + cut (0 <= M0_z)%Z. + intro; elim (IZN _ H11); intros M0_nat H12. + exists M0_nat; intros. + apply Rlt_le_trans with (IZR M0_z). + elim H10; intros; assumption. + rewrite H12; rewrite <- INR_IZR_INZ; apply le_INR. + apply le_trans with n; [ assumption | apply le_n_Sn ]. + apply le_IZR; left; simpl in |- *; unfold M0_z in |- *; + apply Rlt_trans with M0; [ assumption | elim H10; intros; assumption ]. + intro; apply Rle_trans with (Rabs x * Un n * / INR (S n)). + unfold Un in |- *; replace (M_nat + S n)%nat with (M_nat + n + 1)%nat. + rewrite pow_add; replace (Rabs x ^ 1) with (Rabs x); + [ idtac | simpl in |- *; ring ]. + unfold Rdiv in |- *; rewrite <- (Rmult_comm (Rabs x)); + repeat rewrite Rmult_assoc; repeat apply Rmult_le_compat_l. + apply Rabs_pos. + left; apply pow_lt; assumption. + replace (M_nat + n + 1)%nat with (S (M_nat + n)). + rewrite fact_simpl; rewrite mult_comm; rewrite mult_INR; + rewrite Rinv_mult_distr. + apply Rmult_le_compat_l. + left; apply Rinv_0_lt_compat; apply lt_INR_0; apply neq_O_lt; red in |- *; + intro; assert (H10 := sym_eq H9); elim (fact_neq_0 _ H10). + left; apply Rinv_lt_contravar. + apply Rmult_lt_0_compat; apply lt_INR_0; apply lt_O_Sn. + apply lt_INR; apply lt_n_S. + pattern n at 1 in |- *; replace n with (0 + n)%nat; [ idtac | reflexivity ]. + apply plus_lt_compat_r. + apply lt_le_trans with 1%nat; [ apply lt_O_Sn | assumption ]. + apply INR_fact_neq_0. + apply not_O_INR; discriminate. + ring_nat. + ring_nat. + unfold Vn in |- *; rewrite Rmult_assoc; unfold Rdiv in |- *; + rewrite (Rmult_comm (Un 0%nat)); rewrite (Rmult_comm (Un n)). + repeat apply Rmult_le_compat_l. + apply Rabs_pos. + left; apply Rinv_0_lt_compat; apply lt_INR_0; apply lt_O_Sn. + apply decreasing_prop; [ assumption | apply le_O_n ]. + unfold Un_decreasing in |- *; intro; unfold Un in |- *. + replace (M_nat + S n)%nat with (M_nat + n + 1)%nat. + rewrite pow_add; unfold Rdiv in |- *; rewrite Rmult_assoc; + apply Rmult_le_compat_l. + left; apply pow_lt; assumption. + replace (Rabs x ^ 1) with (Rabs x); [ idtac | simpl in |- *; ring ]. + replace (M_nat + n + 1)%nat with (S (M_nat + n)). + apply Rmult_le_reg_l with (INR (fact (S (M_nat + n)))). + apply lt_INR_0; apply neq_O_lt; red in |- *; intro; assert (H9 := sym_eq H8); + elim (fact_neq_0 _ H9). + rewrite (Rmult_comm (Rabs x)); rewrite <- Rmult_assoc; rewrite <- Rinv_r_sym. + rewrite Rmult_1_l. + rewrite fact_simpl; rewrite mult_INR; rewrite Rmult_assoc; + rewrite <- Rinv_r_sym. + rewrite Rmult_1_r; apply Rle_trans with (INR M_nat). + left; rewrite INR_IZR_INZ. + rewrite <- H4; assert (H8 := archimed (Rabs x)); elim H8; intros; assumption. + apply le_INR; omega. + apply INR_fact_neq_0. + apply INR_fact_neq_0. + ring_nat. + ring_nat. + intro; unfold Un in |- *; unfold Rdiv in |- *; apply Rmult_lt_0_compat. + apply pow_lt; assumption. + apply Rinv_0_lt_compat; apply lt_INR_0; apply neq_O_lt; red in |- *; intro; + assert (H8 := sym_eq H7); elim (fact_neq_0 _ H8). + clear Un Vn; apply INR_le; simpl in |- *. + induction M_nat as [| M_nat HrecM_nat]. + assert (H6 := archimed (Rabs x)); fold M in H6; elim H6; intros. + rewrite H4 in H7; rewrite <- INR_IZR_INZ in H7. + simpl in H7; elim (Rlt_irrefl _ (Rlt_trans _ _ _ H2 H7)). + replace 1 with (INR 1); [ apply le_INR | reflexivity ]; apply le_n_S; + apply le_O_n. + apply le_IZR; simpl in |- *; left; apply Rlt_trans with (Rabs x). + assumption. + elim (archimed (Rabs x)); intros; assumption. + unfold Un_cv in |- *; unfold R_dist in |- *; intros; elim (H eps H0); intros. + exists x0; intros; + apply Rle_lt_trans with (Rabs (Rabs x ^ n / INR (fact n) - 0)). + unfold Rminus in |- *; rewrite Ropp_0; do 2 rewrite Rplus_0_r; + rewrite (Rabs_right (Rabs x ^ n / INR (fact n))). + unfold Rdiv in |- *; rewrite Rabs_mult; rewrite (Rabs_right (/ INR (fact n))). + rewrite RPow_abs; right; reflexivity. + apply Rle_ge; left; apply Rinv_0_lt_compat; apply lt_INR_0; apply neq_O_lt; + red in |- *; intro; assert (H4 := sym_eq H3); elim (fact_neq_0 _ H4). + apply Rle_ge; unfold Rdiv in |- *; apply Rmult_le_pos. + case (Req_dec x 0); intro. + rewrite H3; rewrite Rabs_R0. + induction n as [| n Hrecn]; + [ simpl in |- *; left; apply Rlt_0_1 + | simpl in |- *; rewrite Rmult_0_l; right; reflexivity ]. + left; apply pow_lt; apply Rabs_pos_lt; assumption. + left; apply Rinv_0_lt_compat; apply lt_INR_0; apply neq_O_lt; red in |- *; + intro; assert (H4 := sym_eq H3); elim (fact_neq_0 _ H4). + apply H1; assumption. Qed. |