summaryrefslogtreecommitdiff
path: root/theories/Reals/Rlimit.v
diff options
context:
space:
mode:
Diffstat (limited to 'theories/Reals/Rlimit.v')
-rw-r--r--theories/Reals/Rlimit.v843
1 files changed, 431 insertions, 412 deletions
diff --git a/theories/Reals/Rlimit.v b/theories/Reals/Rlimit.v
index b8d304b1..76579ccb 100644
--- a/theories/Reals/Rlimit.v
+++ b/theories/Reals/Rlimit.v
@@ -6,10 +6,10 @@
(* * GNU Lesser General Public License Version 2.1 *)
(************************************************************************)
-(*i $Id: Rlimit.v 5920 2004-07-16 20:01:26Z herbelin $ i*)
+(*i $Id: Rlimit.v 9245 2006-10-17 12:53:34Z notin $ i*)
(*********************************************************)
-(* Definition of the limit *)
+(** Definition of the limit *)
(* *)
(*********************************************************)
@@ -19,76 +19,82 @@ Require Import Classical_Prop.
Require Import Fourier. Open Local Scope R_scope.
(*******************************)
-(* Calculus *)
+(** * Calculus *)
(*******************************)
(*********)
Lemma eps2_Rgt_R0 : forall eps:R, eps > 0 -> eps * / 2 > 0.
-intros; fourier.
+Proof.
+ intros; fourier.
Qed.
(*********)
Lemma eps2 : forall eps:R, eps * / 2 + eps * / 2 = eps.
-intro esp.
-assert (H := double_var esp).
-unfold Rdiv in H.
-symmetry in |- *; exact H.
+Proof.
+ intro esp.
+ assert (H := double_var esp).
+ unfold Rdiv in H.
+ symmetry in |- *; exact H.
Qed.
(*********)
Lemma eps4 : forall eps:R, eps * / (2 + 2) + eps * / (2 + 2) = eps * / 2.
-intro eps.
-replace (2 + 2) with 4.
-pattern eps at 3 in |- *; rewrite double_var.
-rewrite (Rmult_plus_distr_r (eps / 2) (eps / 2) (/ 2)).
-unfold Rdiv in |- *.
-repeat rewrite Rmult_assoc.
-rewrite <- Rinv_mult_distr.
-reflexivity.
-discrR.
-discrR.
-ring.
+Proof.
+ intro eps.
+ replace (2 + 2) with 4.
+ pattern eps at 3 in |- *; rewrite double_var.
+ rewrite (Rmult_plus_distr_r (eps / 2) (eps / 2) (/ 2)).
+ unfold Rdiv in |- *.
+ repeat rewrite Rmult_assoc.
+ rewrite <- Rinv_mult_distr.
+ reflexivity.
+ discrR.
+ discrR.
+ ring.
Qed.
(*********)
Lemma Rlt_eps2_eps : forall eps:R, eps > 0 -> eps * / 2 < eps.
-intros.
-pattern eps at 2 in |- *; rewrite <- Rmult_1_r.
-repeat rewrite (Rmult_comm eps).
-apply Rmult_lt_compat_r.
-exact H.
-apply Rmult_lt_reg_l with 2.
-fourier.
-rewrite Rmult_1_r; rewrite <- Rinv_r_sym.
-fourier.
-discrR.
+Proof.
+ intros.
+ pattern eps at 2 in |- *; rewrite <- Rmult_1_r.
+ repeat rewrite (Rmult_comm eps).
+ apply Rmult_lt_compat_r.
+ exact H.
+ apply Rmult_lt_reg_l with 2.
+ fourier.
+ rewrite Rmult_1_r; rewrite <- Rinv_r_sym.
+ fourier.
+ discrR.
Qed.
(*********)
Lemma Rlt_eps4_eps : forall eps:R, eps > 0 -> eps * / (2 + 2) < eps.
-intros.
-replace (2 + 2) with 4.
-pattern eps at 2 in |- *; rewrite <- Rmult_1_r.
-repeat rewrite (Rmult_comm eps).
-apply Rmult_lt_compat_r.
-exact H.
-apply Rmult_lt_reg_l with 4.
-replace 4 with 4.
-apply Rmult_lt_0_compat; fourier.
-ring.
-rewrite Rmult_1_r; rewrite <- Rinv_r_sym.
-fourier.
-discrR.
-ring.
+Proof.
+ intros.
+ replace (2 + 2) with 4.
+ pattern eps at 2 in |- *; rewrite <- Rmult_1_r.
+ repeat rewrite (Rmult_comm eps).
+ apply Rmult_lt_compat_r.
+ exact H.
+ apply Rmult_lt_reg_l with 4.
+ replace 4 with 4.
+ apply Rmult_lt_0_compat; fourier.
+ ring.
+ rewrite Rmult_1_r; rewrite <- Rinv_r_sym.
+ fourier.
+ discrR.
+ ring.
Qed.
(*********)
Lemma prop_eps : forall r:R, (forall eps:R, eps > 0 -> r < eps) -> r <= 0.
-intros; elim (Rtotal_order r 0); intro.
-apply Rlt_le; assumption.
-elim H0; intro.
-apply Req_le; assumption.
-clear H0; generalize (H r H1); intro; generalize (Rlt_irrefl r); intro;
- elimtype False; auto.
+Proof.
+ intros; elim (Rtotal_order r 0); intro.
+ apply Rlt_le; assumption.
+ elim H0; intro.
+ apply Req_le; assumption.
+ clear H0; generalize (H r H1); intro; generalize (Rlt_irrefl r); intro;
+ elimtype False; auto.
Qed.
(*********)
@@ -96,59 +102,61 @@ Definition mul_factor (l l':R) := / (1 + (Rabs l + Rabs l')).
(*********)
Lemma mul_factor_wd : forall l l':R, 1 + (Rabs l + Rabs l') <> 0.
-intros; rewrite (Rplus_comm 1 (Rabs l + Rabs l')); apply tech_Rplus.
-cut (Rabs (l + l') <= Rabs l + Rabs l').
-cut (0 <= Rabs (l + l')).
-exact (Rle_trans _ _ _).
-exact (Rabs_pos (l + l')).
-exact (Rabs_triang _ _).
-exact Rlt_0_1.
+Proof.
+ intros; rewrite (Rplus_comm 1 (Rabs l + Rabs l')); apply tech_Rplus.
+ cut (Rabs (l + l') <= Rabs l + Rabs l').
+ cut (0 <= Rabs (l + l')).
+ exact (Rle_trans _ _ _).
+ exact (Rabs_pos (l + l')).
+ exact (Rabs_triang _ _).
+ exact Rlt_0_1.
Qed.
(*********)
Lemma mul_factor_gt : forall eps l l':R, eps > 0 -> eps * mul_factor l l' > 0.
-intros; unfold Rgt in |- *; rewrite <- (Rmult_0_r eps);
- apply Rmult_lt_compat_l.
-assumption.
-unfold mul_factor in |- *; apply Rinv_0_lt_compat;
- cut (1 <= 1 + (Rabs l + Rabs l')).
-cut (0 < 1).
-exact (Rlt_le_trans _ _ _).
-exact Rlt_0_1.
-replace (1 <= 1 + (Rabs l + Rabs l')) with (1 + 0 <= 1 + (Rabs l + Rabs l')).
-apply Rplus_le_compat_l.
-cut (Rabs (l + l') <= Rabs l + Rabs l').
-cut (0 <= Rabs (l + l')).
-exact (Rle_trans _ _ _).
-exact (Rabs_pos _).
-exact (Rabs_triang _ _).
-rewrite (proj1 (Rplus_ne 1)); trivial.
+Proof.
+ intros; unfold Rgt in |- *; rewrite <- (Rmult_0_r eps);
+ apply Rmult_lt_compat_l.
+ assumption.
+ unfold mul_factor in |- *; apply Rinv_0_lt_compat;
+ cut (1 <= 1 + (Rabs l + Rabs l')).
+ cut (0 < 1).
+ exact (Rlt_le_trans _ _ _).
+ exact Rlt_0_1.
+ replace (1 <= 1 + (Rabs l + Rabs l')) with (1 + 0 <= 1 + (Rabs l + Rabs l')).
+ apply Rplus_le_compat_l.
+ cut (Rabs (l + l') <= Rabs l + Rabs l').
+ cut (0 <= Rabs (l + l')).
+ exact (Rle_trans _ _ _).
+ exact (Rabs_pos _).
+ exact (Rabs_triang _ _).
+ rewrite (proj1 (Rplus_ne 1)); trivial.
Qed.
(*********)
Lemma mul_factor_gt_f :
- forall eps l l':R, eps > 0 -> Rmin 1 (eps * mul_factor l l') > 0.
-intros; apply Rmin_Rgt_r; split.
-exact Rlt_0_1.
-exact (mul_factor_gt eps l l' H).
+ forall eps l l':R, eps > 0 -> Rmin 1 (eps * mul_factor l l') > 0.
+ intros; apply Rmin_Rgt_r; split.
+ exact Rlt_0_1.
+ exact (mul_factor_gt eps l l' H).
Qed.
(*******************************)
-(* Metric space *)
+(** * Metric space *)
(*******************************)
(*********)
Record Metric_Space : Type :=
{Base : Type;
- dist : Base -> Base -> R;
- dist_pos : forall x y:Base, dist x y >= 0;
- dist_sym : forall x y:Base, dist x y = dist y x;
- dist_refl : forall x y:Base, dist x y = 0 <-> x = y;
- dist_tri : forall x y z:Base, dist x y <= dist x z + dist z y}.
+ dist : Base -> Base -> R;
+ dist_pos : forall x y:Base, dist x y >= 0;
+ dist_sym : forall x y:Base, dist x y = dist y x;
+ dist_refl : forall x y:Base, dist x y = 0 <-> x = y;
+ dist_tri : forall x y z:Base, dist x y <= dist x z + dist z y}.
(*******************************)
-(* Limit in Metric space *)
+(** ** Limit in Metric space *)
(*******************************)
(*********)
@@ -156,12 +164,12 @@ Definition limit_in (X X':Metric_Space) (f:Base X -> Base X')
(D:Base X -> Prop) (x0:Base X) (l:Base X') :=
forall eps:R,
eps > 0 ->
- exists alp : R,
+ exists alp : R,
alp > 0 /\
(forall x:Base X, D x /\ dist X x x0 < alp -> dist X' (f x) l < eps).
(*******************************)
-(* R is a metric space *)
+(** ** R is a metric space *)
(*******************************)
(*********)
@@ -169,7 +177,7 @@ Definition R_met : Metric_Space :=
Build_Metric_Space R R_dist R_dist_pos R_dist_sym R_dist_refl R_dist_tri.
(*******************************)
-(* Limit 1 arg *)
+(** * Limit 1 arg *)
(*******************************)
(*********)
Definition Dgf (Df Dg:R -> Prop) (f:R -> R) (x:R) := Df x /\ Dg (f x).
@@ -180,145 +188,153 @@ Definition limit1_in (f:R -> R) (D:R -> Prop) (l x0:R) : Prop :=
(*********)
Lemma tech_limit :
- forall (f:R -> R) (D:R -> Prop) (l x0:R),
- D x0 -> limit1_in f D l x0 -> l = f x0.
-intros f D l x0 H H0.
-case (Rabs_pos (f x0 - l)); intros H1.
-absurd (dist R_met (f x0) l < dist R_met (f x0) l).
-apply Rlt_irrefl.
-case (H0 (dist R_met (f x0) l)); auto.
-intros alpha1 [H2 H3]; apply H3; auto; split; auto.
-case (dist_refl R_met x0 x0); intros Hr1 Hr2; rewrite Hr2; auto.
-case (dist_refl R_met (f x0) l); intros Hr1 Hr2; apply sym_eq; auto.
+ forall (f:R -> R) (D:R -> Prop) (l x0:R),
+ D x0 -> limit1_in f D l x0 -> l = f x0.
+Proof.
+ intros f D l x0 H H0.
+ case (Rabs_pos (f x0 - l)); intros H1.
+ absurd (dist R_met (f x0) l < dist R_met (f x0) l).
+ apply Rlt_irrefl.
+ case (H0 (dist R_met (f x0) l)); auto.
+ intros alpha1 [H2 H3]; apply H3; auto; split; auto.
+ case (dist_refl R_met x0 x0); intros Hr1 Hr2; rewrite Hr2; auto.
+ case (dist_refl R_met (f x0) l); intros Hr1 Hr2; apply sym_eq; auto.
Qed.
(*********)
Lemma tech_limit_contr :
- forall (f:R -> R) (D:R -> Prop) (l x0:R),
- D x0 -> l <> f x0 -> ~ limit1_in f D l x0.
-intros; generalize (tech_limit f D l x0); tauto.
+ forall (f:R -> R) (D:R -> Prop) (l x0:R),
+ D x0 -> l <> f x0 -> ~ limit1_in f D l x0.
+Proof.
+ intros; generalize (tech_limit f D l x0); tauto.
Qed.
(*********)
Lemma lim_x : forall (D:R -> Prop) (x0:R), limit1_in (fun x:R => x) D x0 x0.
-unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *; intros;
- split with eps; split; auto; intros; elim H0; intros;
- auto.
+Proof.
+ unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *; intros;
+ split with eps; split; auto; intros; elim H0; intros;
+ auto.
Qed.
(*********)
Lemma limit_plus :
- forall (f g:R -> R) (D:R -> Prop) (l l' x0:R),
- limit1_in f D l x0 ->
- limit1_in g D l' x0 -> limit1_in (fun x:R => f x + g x) D (l + l') x0.
-intros; unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *;
- intros; elim (H (eps * / 2) (eps2_Rgt_R0 eps H1));
- elim (H0 (eps * / 2) (eps2_Rgt_R0 eps H1)); simpl in |- *;
- clear H H0; intros; elim H; elim H0; clear H H0; intros;
- split with (Rmin x1 x); split.
-exact (Rmin_Rgt_r x1 x 0 (conj H H2)).
-intros; elim H4; clear H4; intros;
- cut (R_dist (f x2) l + R_dist (g x2) l' < eps).
- cut (R_dist (f x2 + g x2) (l + l') <= R_dist (f x2) l + R_dist (g x2) l').
-exact (Rle_lt_trans _ _ _).
-exact (R_dist_plus _ _ _ _).
-elim (Rmin_Rgt_l x1 x (R_dist x2 x0) H5); clear H5; intros.
-generalize (H3 x2 (conj H4 H6)); generalize (H0 x2 (conj H4 H5)); intros;
- replace eps with (eps * / 2 + eps * / 2).
-exact (Rplus_lt_compat _ _ _ _ H7 H8).
-exact (eps2 eps).
+ forall (f g:R -> R) (D:R -> Prop) (l l' x0:R),
+ limit1_in f D l x0 ->
+ limit1_in g D l' x0 -> limit1_in (fun x:R => f x + g x) D (l + l') x0.
+Proof.
+ intros; unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *;
+ intros; elim (H (eps * / 2) (eps2_Rgt_R0 eps H1));
+ elim (H0 (eps * / 2) (eps2_Rgt_R0 eps H1)); simpl in |- *;
+ clear H H0; intros; elim H; elim H0; clear H H0; intros;
+ split with (Rmin x1 x); split.
+ exact (Rmin_Rgt_r x1 x 0 (conj H H2)).
+ intros; elim H4; clear H4; intros;
+ cut (R_dist (f x2) l + R_dist (g x2) l' < eps).
+ cut (R_dist (f x2 + g x2) (l + l') <= R_dist (f x2) l + R_dist (g x2) l').
+ exact (Rle_lt_trans _ _ _).
+ exact (R_dist_plus _ _ _ _).
+ elim (Rmin_Rgt_l x1 x (R_dist x2 x0) H5); clear H5; intros.
+ generalize (H3 x2 (conj H4 H6)); generalize (H0 x2 (conj H4 H5)); intros;
+ replace eps with (eps * / 2 + eps * / 2).
+ exact (Rplus_lt_compat _ _ _ _ H7 H8).
+ exact (eps2 eps).
Qed.
(*********)
Lemma limit_Ropp :
- forall (f:R -> R) (D:R -> Prop) (l x0:R),
- limit1_in f D l x0 -> limit1_in (fun x:R => - f x) D (- l) x0.
-unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *; intros;
- elim (H eps H0); clear H; intros; elim H; clear H;
- intros; split with x; split; auto; intros; generalize (H1 x1 H2);
- clear H1; intro; unfold R_dist in |- *; unfold Rminus in |- *;
- rewrite (Ropp_involutive l); rewrite (Rplus_comm (- f x1) l);
- fold (l - f x1) in |- *; fold (R_dist l (f x1)) in |- *;
- rewrite R_dist_sym; assumption.
+ forall (f:R -> R) (D:R -> Prop) (l x0:R),
+ limit1_in f D l x0 -> limit1_in (fun x:R => - f x) D (- l) x0.
+Proof.
+ unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *; intros;
+ elim (H eps H0); clear H; intros; elim H; clear H;
+ intros; split with x; split; auto; intros; generalize (H1 x1 H2);
+ clear H1; intro; unfold R_dist in |- *; unfold Rminus in |- *;
+ rewrite (Ropp_involutive l); rewrite (Rplus_comm (- f x1) l);
+ fold (l - f x1) in |- *; fold (R_dist l (f x1)) in |- *;
+ rewrite R_dist_sym; assumption.
Qed.
(*********)
Lemma limit_minus :
- forall (f g:R -> R) (D:R -> Prop) (l l' x0:R),
- limit1_in f D l x0 ->
- limit1_in g D l' x0 -> limit1_in (fun x:R => f x - g x) D (l - l') x0.
-intros; unfold Rminus in |- *; generalize (limit_Ropp g D l' x0 H0); intro;
- exact (limit_plus f (fun x:R => - g x) D l (- l') x0 H H1).
+ forall (f g:R -> R) (D:R -> Prop) (l l' x0:R),
+ limit1_in f D l x0 ->
+ limit1_in g D l' x0 -> limit1_in (fun x:R => f x - g x) D (l - l') x0.
+Proof.
+ intros; unfold Rminus in |- *; generalize (limit_Ropp g D l' x0 H0); intro;
+ exact (limit_plus f (fun x:R => - g x) D l (- l') x0 H H1).
Qed.
(*********)
Lemma limit_free :
- forall (f:R -> R) (D:R -> Prop) (x x0:R),
- limit1_in (fun h:R => f x) D (f x) x0.
-unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *; intros;
- split with eps; split; auto; intros; elim (R_dist_refl (f x) (f x));
- intros a b; rewrite (b (refl_equal (f x))); unfold Rgt in H;
- assumption.
+ forall (f:R -> R) (D:R -> Prop) (x x0:R),
+ limit1_in (fun h:R => f x) D (f x) x0.
+Proof.
+ unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *; intros;
+ split with eps; split; auto; intros; elim (R_dist_refl (f x) (f x));
+ intros a b; rewrite (b (refl_equal (f x))); unfold Rgt in H;
+ assumption.
Qed.
(*********)
Lemma limit_mul :
- forall (f g:R -> R) (D:R -> Prop) (l l' x0:R),
- limit1_in f D l x0 ->
- limit1_in g D l' x0 -> limit1_in (fun x:R => f x * g x) D (l * l') x0.
-intros; unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *;
- intros;
- elim (H (Rmin 1 (eps * mul_factor l l')) (mul_factor_gt_f eps l l' H1));
- elim (H0 (eps * mul_factor l l') (mul_factor_gt eps l l' H1));
- clear H H0; simpl in |- *; intros; elim H; elim H0;
- clear H H0; intros; split with (Rmin x1 x); split.
-exact (Rmin_Rgt_r x1 x 0 (conj H H2)).
-intros; elim H4; clear H4; intros; unfold R_dist in |- *;
- replace (f x2 * g x2 - l * l') with (f x2 * (g x2 - l') + l' * (f x2 - l)).
-cut (Rabs (f x2 * (g x2 - l')) + Rabs (l' * (f x2 - l)) < eps).
-cut
- (Rabs (f x2 * (g x2 - l') + l' * (f x2 - l)) <=
- Rabs (f x2 * (g x2 - l')) + Rabs (l' * (f x2 - l))).
-exact (Rle_lt_trans _ _ _).
-exact (Rabs_triang _ _).
-rewrite (Rabs_mult (f x2) (g x2 - l')); rewrite (Rabs_mult l' (f x2 - l));
- cut
- ((1 + Rabs l) * (eps * mul_factor l l') + Rabs l' * (eps * mul_factor l l') <=
- eps).
-cut
- (Rabs (f x2) * Rabs (g x2 - l') + Rabs l' * Rabs (f x2 - l) <
- (1 + Rabs l) * (eps * mul_factor l l') + Rabs l' * (eps * mul_factor l l')).
-exact (Rlt_le_trans _ _ _).
-elim (Rmin_Rgt_l x1 x (R_dist x2 x0) H5); clear H5; intros;
- generalize (H0 x2 (conj H4 H5)); intro; generalize (Rmin_Rgt_l _ _ _ H7);
- intro; elim H8; intros; clear H0 H8; apply Rplus_lt_le_compat.
-apply Rmult_ge_0_gt_0_lt_compat.
-apply Rle_ge.
-exact (Rabs_pos (g x2 - l')).
-rewrite (Rplus_comm 1 (Rabs l)); unfold Rgt in |- *; apply Rle_lt_0_plus_1;
- exact (Rabs_pos l).
-unfold R_dist in H9;
- apply (Rplus_lt_reg_r (- Rabs l) (Rabs (f x2)) (1 + Rabs l)).
-rewrite <- (Rplus_assoc (- Rabs l) 1 (Rabs l));
- rewrite (Rplus_comm (- Rabs l) 1);
- rewrite (Rplus_assoc 1 (- Rabs l) (Rabs l)); rewrite (Rplus_opp_l (Rabs l));
- rewrite (proj1 (Rplus_ne 1)); rewrite (Rplus_comm (- Rabs l) (Rabs (f x2)));
- generalize H9; cut (Rabs (f x2) - Rabs l <= Rabs (f x2 - l)).
-exact (Rle_lt_trans _ _ _).
-exact (Rabs_triang_inv _ _).
-generalize (H3 x2 (conj H4 H6)); trivial.
-apply Rmult_le_compat_l.
-exact (Rabs_pos l').
-unfold Rle in |- *; left; assumption.
-rewrite (Rmult_comm (1 + Rabs l) (eps * mul_factor l l'));
- rewrite (Rmult_comm (Rabs l') (eps * mul_factor l l'));
- rewrite <-
- (Rmult_plus_distr_l (eps * mul_factor l l') (1 + Rabs l) (Rabs l'))
- ; rewrite (Rmult_assoc eps (mul_factor l l') (1 + Rabs l + Rabs l'));
- rewrite (Rplus_assoc 1 (Rabs l) (Rabs l')); unfold mul_factor in |- *;
- rewrite (Rinv_l (1 + (Rabs l + Rabs l')) (mul_factor_wd l l'));
- rewrite (proj1 (Rmult_ne eps)); apply Req_le; trivial.
-ring.
+ forall (f g:R -> R) (D:R -> Prop) (l l' x0:R),
+ limit1_in f D l x0 ->
+ limit1_in g D l' x0 -> limit1_in (fun x:R => f x * g x) D (l * l') x0.
+Proof.
+ intros; unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *;
+ intros;
+ elim (H (Rmin 1 (eps * mul_factor l l')) (mul_factor_gt_f eps l l' H1));
+ elim (H0 (eps * mul_factor l l') (mul_factor_gt eps l l' H1));
+ clear H H0; simpl in |- *; intros; elim H; elim H0;
+ clear H H0; intros; split with (Rmin x1 x); split.
+ exact (Rmin_Rgt_r x1 x 0 (conj H H2)).
+ intros; elim H4; clear H4; intros; unfold R_dist in |- *;
+ replace (f x2 * g x2 - l * l') with (f x2 * (g x2 - l') + l' * (f x2 - l)).
+ cut (Rabs (f x2 * (g x2 - l')) + Rabs (l' * (f x2 - l)) < eps).
+ cut
+ (Rabs (f x2 * (g x2 - l') + l' * (f x2 - l)) <=
+ Rabs (f x2 * (g x2 - l')) + Rabs (l' * (f x2 - l))).
+ exact (Rle_lt_trans _ _ _).
+ exact (Rabs_triang _ _).
+ rewrite (Rabs_mult (f x2) (g x2 - l')); rewrite (Rabs_mult l' (f x2 - l));
+ cut
+ ((1 + Rabs l) * (eps * mul_factor l l') + Rabs l' * (eps * mul_factor l l') <=
+ eps).
+ cut
+ (Rabs (f x2) * Rabs (g x2 - l') + Rabs l' * Rabs (f x2 - l) <
+ (1 + Rabs l) * (eps * mul_factor l l') + Rabs l' * (eps * mul_factor l l')).
+ exact (Rlt_le_trans _ _ _).
+ elim (Rmin_Rgt_l x1 x (R_dist x2 x0) H5); clear H5; intros;
+ generalize (H0 x2 (conj H4 H5)); intro; generalize (Rmin_Rgt_l _ _ _ H7);
+ intro; elim H8; intros; clear H0 H8; apply Rplus_lt_le_compat.
+ apply Rmult_ge_0_gt_0_lt_compat.
+ apply Rle_ge.
+ exact (Rabs_pos (g x2 - l')).
+ rewrite (Rplus_comm 1 (Rabs l)); unfold Rgt in |- *; apply Rle_lt_0_plus_1;
+ exact (Rabs_pos l).
+ unfold R_dist in H9;
+ apply (Rplus_lt_reg_r (- Rabs l) (Rabs (f x2)) (1 + Rabs l)).
+ rewrite <- (Rplus_assoc (- Rabs l) 1 (Rabs l));
+ rewrite (Rplus_comm (- Rabs l) 1);
+ rewrite (Rplus_assoc 1 (- Rabs l) (Rabs l)); rewrite (Rplus_opp_l (Rabs l));
+ rewrite (proj1 (Rplus_ne 1)); rewrite (Rplus_comm (- Rabs l) (Rabs (f x2)));
+ generalize H9; cut (Rabs (f x2) - Rabs l <= Rabs (f x2 - l)).
+ exact (Rle_lt_trans _ _ _).
+ exact (Rabs_triang_inv _ _).
+ generalize (H3 x2 (conj H4 H6)); trivial.
+ apply Rmult_le_compat_l.
+ exact (Rabs_pos l').
+ unfold Rle in |- *; left; assumption.
+ rewrite (Rmult_comm (1 + Rabs l) (eps * mul_factor l l'));
+ rewrite (Rmult_comm (Rabs l') (eps * mul_factor l l'));
+ rewrite <-
+ (Rmult_plus_distr_l (eps * mul_factor l l') (1 + Rabs l) (Rabs l'))
+ ; rewrite (Rmult_assoc eps (mul_factor l l') (1 + Rabs l + Rabs l'));
+ rewrite (Rplus_assoc 1 (Rabs l) (Rabs l')); unfold mul_factor in |- *;
+ rewrite (Rinv_l (1 + (Rabs l + Rabs l')) (mul_factor_wd l l'));
+ rewrite (proj1 (Rmult_ne eps)); apply Req_le; trivial.
+ ring.
Qed.
(*********)
@@ -327,231 +343,234 @@ Definition adhDa (D:R -> Prop) (a:R) : Prop :=
(*********)
Lemma single_limit :
- forall (f:R -> R) (D:R -> Prop) (l l' x0:R),
- adhDa D x0 -> limit1_in f D l x0 -> limit1_in f D l' x0 -> l = l'.
-unfold limit1_in in |- *; unfold limit_in in |- *; intros.
-cut (forall eps:R, eps > 0 -> dist R_met l l' < 2 * eps).
-clear H0 H1; unfold dist in |- *; unfold R_met in |- *; unfold R_dist in |- *;
- unfold Rabs in |- *; case (Rcase_abs (l - l')); intros.
-cut (forall eps:R, eps > 0 -> - (l - l') < eps).
-intro; generalize (prop_eps (- (l - l')) H1); intro;
- generalize (Ropp_gt_lt_0_contravar (l - l') r); intro;
- unfold Rgt in H3; generalize (Rgt_not_le (- (l - l')) 0 H3);
- intro; elimtype False; auto.
-intros; cut (eps * / 2 > 0).
-intro; generalize (H0 (eps * / 2) H2); rewrite (Rmult_comm eps (/ 2));
- rewrite <- (Rmult_assoc 2 (/ 2) eps); rewrite (Rinv_r 2).
-elim (Rmult_ne eps); intros a b; rewrite b; clear a b; trivial.
-apply (Rlt_dichotomy_converse 2 0); right; generalize Rlt_0_1; intro;
- unfold Rgt in |- *; generalize (Rplus_lt_compat_l 1 0 1 H3);
- intro; elim (Rplus_ne 1); intros a b; rewrite a in H4;
- clear a b; apply (Rlt_trans 0 1 2 H3 H4).
-unfold Rgt in |- *; unfold Rgt in H1; rewrite (Rmult_comm eps (/ 2));
- rewrite <- (Rmult_0_r (/ 2)); apply (Rmult_lt_compat_l (/ 2) 0 eps);
- auto.
-apply (Rinv_0_lt_compat 2); cut (1 < 2).
-intro; apply (Rlt_trans 0 1 2 Rlt_0_1 H2).
-generalize (Rplus_lt_compat_l 1 0 1 Rlt_0_1); elim (Rplus_ne 1); intros a b;
- rewrite a; clear a b; trivial.
+ forall (f:R -> R) (D:R -> Prop) (l l' x0:R),
+ adhDa D x0 -> limit1_in f D l x0 -> limit1_in f D l' x0 -> l = l'.
+Proof.
+ unfold limit1_in in |- *; unfold limit_in in |- *; intros.
+ cut (forall eps:R, eps > 0 -> dist R_met l l' < 2 * eps).
+ clear H0 H1; unfold dist in |- *; unfold R_met in |- *; unfold R_dist in |- *;
+ unfold Rabs in |- *; case (Rcase_abs (l - l')); intros.
+ cut (forall eps:R, eps > 0 -> - (l - l') < eps).
+ intro; generalize (prop_eps (- (l - l')) H1); intro;
+ generalize (Ropp_gt_lt_0_contravar (l - l') r); intro;
+ unfold Rgt in H3; generalize (Rgt_not_le (- (l - l')) 0 H3);
+ intro; elimtype False; auto.
+ intros; cut (eps * / 2 > 0).
+ intro; generalize (H0 (eps * / 2) H2); rewrite (Rmult_comm eps (/ 2));
+ rewrite <- (Rmult_assoc 2 (/ 2) eps); rewrite (Rinv_r 2).
+ elim (Rmult_ne eps); intros a b; rewrite b; clear a b; trivial.
+ apply (Rlt_dichotomy_converse 2 0); right; generalize Rlt_0_1; intro;
+ unfold Rgt in |- *; generalize (Rplus_lt_compat_l 1 0 1 H3);
+ intro; elim (Rplus_ne 1); intros a b; rewrite a in H4;
+ clear a b; apply (Rlt_trans 0 1 2 H3 H4).
+ unfold Rgt in |- *; unfold Rgt in H1; rewrite (Rmult_comm eps (/ 2));
+ rewrite <- (Rmult_0_r (/ 2)); apply (Rmult_lt_compat_l (/ 2) 0 eps);
+ auto.
+ apply (Rinv_0_lt_compat 2); cut (1 < 2).
+ intro; apply (Rlt_trans 0 1 2 Rlt_0_1 H2).
+ generalize (Rplus_lt_compat_l 1 0 1 Rlt_0_1); elim (Rplus_ne 1); intros a b;
+ rewrite a; clear a b; trivial.
(**)
-cut (forall eps:R, eps > 0 -> l - l' < eps).
-intro; generalize (prop_eps (l - l') H1); intro; elim (Rle_le_eq (l - l') 0);
- intros a b; clear b; apply (Rminus_diag_uniq l l');
- apply a; split.
-assumption.
-apply (Rge_le (l - l') 0 r).
-intros; cut (eps * / 2 > 0).
-intro; generalize (H0 (eps * / 2) H2); rewrite (Rmult_comm eps (/ 2));
- rewrite <- (Rmult_assoc 2 (/ 2) eps); rewrite (Rinv_r 2).
-elim (Rmult_ne eps); intros a b; rewrite b; clear a b; trivial.
-apply (Rlt_dichotomy_converse 2 0); right; generalize Rlt_0_1; intro;
- unfold Rgt in |- *; generalize (Rplus_lt_compat_l 1 0 1 H3);
- intro; elim (Rplus_ne 1); intros a b; rewrite a in H4;
- clear a b; apply (Rlt_trans 0 1 2 H3 H4).
-unfold Rgt in |- *; unfold Rgt in H1; rewrite (Rmult_comm eps (/ 2));
- rewrite <- (Rmult_0_r (/ 2)); apply (Rmult_lt_compat_l (/ 2) 0 eps);
- auto.
-apply (Rinv_0_lt_compat 2); cut (1 < 2).
-intro; apply (Rlt_trans 0 1 2 Rlt_0_1 H2).
-generalize (Rplus_lt_compat_l 1 0 1 Rlt_0_1); elim (Rplus_ne 1); intros a b;
- rewrite a; clear a b; trivial.
+ cut (forall eps:R, eps > 0 -> l - l' < eps).
+ intro; generalize (prop_eps (l - l') H1); intro; elim (Rle_le_eq (l - l') 0);
+ intros a b; clear b; apply (Rminus_diag_uniq l l');
+ apply a; split.
+ assumption.
+ apply (Rge_le (l - l') 0 r).
+ intros; cut (eps * / 2 > 0).
+ intro; generalize (H0 (eps * / 2) H2); rewrite (Rmult_comm eps (/ 2));
+ rewrite <- (Rmult_assoc 2 (/ 2) eps); rewrite (Rinv_r 2).
+ elim (Rmult_ne eps); intros a b; rewrite b; clear a b; trivial.
+ apply (Rlt_dichotomy_converse 2 0); right; generalize Rlt_0_1; intro;
+ unfold Rgt in |- *; generalize (Rplus_lt_compat_l 1 0 1 H3);
+ intro; elim (Rplus_ne 1); intros a b; rewrite a in H4;
+ clear a b; apply (Rlt_trans 0 1 2 H3 H4).
+ unfold Rgt in |- *; unfold Rgt in H1; rewrite (Rmult_comm eps (/ 2));
+ rewrite <- (Rmult_0_r (/ 2)); apply (Rmult_lt_compat_l (/ 2) 0 eps);
+ auto.
+ apply (Rinv_0_lt_compat 2); cut (1 < 2).
+ intro; apply (Rlt_trans 0 1 2 Rlt_0_1 H2).
+ generalize (Rplus_lt_compat_l 1 0 1 Rlt_0_1); elim (Rplus_ne 1); intros a b;
+ rewrite a; clear a b; trivial.
(**)
-intros; unfold adhDa in H; elim (H0 eps H2); intros; elim (H1 eps H2); intros;
- clear H0 H1; elim H3; elim H4; clear H3 H4; intros;
- simpl in |- *; simpl in H1, H4; generalize (Rmin_Rgt x x1 0);
- intro; elim H5; intros; clear H5; elim (H (Rmin x x1) (H7 (conj H3 H0)));
- intros; elim H5; intros; clear H5 H H6 H7;
- generalize (Rmin_Rgt x x1 (R_dist x2 x0)); intro;
- elim H; intros; clear H H6; unfold Rgt in H5; elim (H5 H9);
- intros; clear H5 H9; generalize (H1 x2 (conj H8 H6));
- generalize (H4 x2 (conj H8 H)); clear H8 H H6 H1 H4 H0 H3;
- intros;
- generalize
- (Rplus_lt_compat (R_dist (f x2) l) eps (R_dist (f x2) l') eps H H0);
- unfold R_dist in |- *; intros; rewrite (Rabs_minus_sym (f x2) l) in H1;
- rewrite (Rmult_comm 2 eps); rewrite (Rmult_plus_distr_l eps 1 1);
- elim (Rmult_ne eps); intros a b; rewrite a; clear a b;
- generalize (R_dist_tri l l' (f x2)); unfold R_dist in |- *;
- intros;
- apply
- (Rle_lt_trans (Rabs (l - l')) (Rabs (l - f x2) + Rabs (f x2 - l'))
- (eps + eps) H3 H1).
+ intros; unfold adhDa in H; elim (H0 eps H2); intros; elim (H1 eps H2); intros;
+ clear H0 H1; elim H3; elim H4; clear H3 H4; intros;
+ simpl in |- *; simpl in H1, H4; generalize (Rmin_Rgt x x1 0);
+ intro; elim H5; intros; clear H5; elim (H (Rmin x x1) (H7 (conj H3 H0)));
+ intros; elim H5; intros; clear H5 H H6 H7;
+ generalize (Rmin_Rgt x x1 (R_dist x2 x0)); intro;
+ elim H; intros; clear H H6; unfold Rgt in H5; elim (H5 H9);
+ intros; clear H5 H9; generalize (H1 x2 (conj H8 H6));
+ generalize (H4 x2 (conj H8 H)); clear H8 H H6 H1 H4 H0 H3;
+ intros;
+ generalize
+ (Rplus_lt_compat (R_dist (f x2) l) eps (R_dist (f x2) l') eps H H0);
+ unfold R_dist in |- *; intros; rewrite (Rabs_minus_sym (f x2) l) in H1;
+ rewrite (Rmult_comm 2 eps); rewrite (Rmult_plus_distr_l eps 1 1);
+ elim (Rmult_ne eps); intros a b; rewrite a; clear a b;
+ generalize (R_dist_tri l l' (f x2)); unfold R_dist in |- *;
+ intros;
+ apply
+ (Rle_lt_trans (Rabs (l - l')) (Rabs (l - f x2) + Rabs (f x2 - l'))
+ (eps + eps) H3 H1).
Qed.
(*********)
Lemma limit_comp :
- forall (f g:R -> R) (Df Dg:R -> Prop) (l l' x0:R),
- limit1_in f Df l x0 ->
- limit1_in g Dg l' l -> limit1_in (fun x:R => g (f x)) (Dgf Df Dg f) l' x0.
-unfold limit1_in, limit_in, Dgf in |- *; simpl in |- *.
-intros f g Df Dg l l' x0 Hf Hg eps eps_pos.
-elim (Hg eps eps_pos).
-intros alpg lg.
-elim (Hf alpg).
-2: tauto.
-intros alpf lf.
-exists alpf.
-intuition.
+ forall (f g:R -> R) (Df Dg:R -> Prop) (l l' x0:R),
+ limit1_in f Df l x0 ->
+ limit1_in g Dg l' l -> limit1_in (fun x:R => g (f x)) (Dgf Df Dg f) l' x0.
+Proof.
+ unfold limit1_in, limit_in, Dgf in |- *; simpl in |- *.
+ intros f g Df Dg l l' x0 Hf Hg eps eps_pos.
+ elim (Hg eps eps_pos).
+ intros alpg lg.
+ elim (Hf alpg).
+ 2: tauto.
+ intros alpf lf.
+ exists alpf.
+ intuition.
Qed.
(*********)
Lemma limit_inv :
- forall (f:R -> R) (D:R -> Prop) (l x0:R),
- limit1_in f D l x0 -> l <> 0 -> limit1_in (fun x:R => / f x) D (/ l) x0.
-unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *;
- unfold R_dist in |- *; intros; elim (H (Rabs l / 2)).
-intros delta1 H2; elim (H (eps * (Rsqr l / 2))).
-intros delta2 H3; elim H2; elim H3; intros; exists (Rmin delta1 delta2);
- split.
-unfold Rmin in |- *; case (Rle_dec delta1 delta2); intro; assumption.
-intro; generalize (H5 x); clear H5; intro H5; generalize (H7 x); clear H7;
- intro H7; intro H10; elim H10; intros; cut (D x /\ Rabs (x - x0) < delta1).
-cut (D x /\ Rabs (x - x0) < delta2).
-intros; generalize (H5 H11); clear H5; intro H5; generalize (H7 H12);
- clear H7; intro H7; generalize (Rabs_triang_inv l (f x));
- intro; rewrite Rabs_minus_sym in H7;
- generalize
- (Rle_lt_trans (Rabs l - Rabs (f x)) (Rabs (l - f x)) (Rabs l / 2) H13 H7);
- intro;
- generalize
- (Rplus_lt_compat_l (Rabs (f x) - Rabs l / 2) (Rabs l - Rabs (f x))
- (Rabs l / 2) H14);
- replace (Rabs (f x) - Rabs l / 2 + (Rabs l - Rabs (f x))) with (Rabs l / 2).
-unfold Rminus in |- *; rewrite Rplus_assoc; rewrite Rplus_opp_l;
- rewrite Rplus_0_r; intro; cut (f x <> 0).
-intro; replace (/ f x + - / l) with ((l - f x) * / (l * f x)).
-rewrite Rabs_mult; rewrite Rabs_Rinv.
-cut (/ Rabs (l * f x) < 2 / Rsqr l).
-intro; rewrite Rabs_minus_sym in H5; cut (0 <= / Rabs (l * f x)).
-intro;
- generalize
- (Rmult_le_0_lt_compat (Rabs (l - f x)) (eps * (Rsqr l / 2))
- (/ Rabs (l * f x)) (2 / Rsqr l) (Rabs_pos (l - f x)) H18 H5 H17);
- replace (eps * (Rsqr l / 2) * (2 / Rsqr l)) with eps.
-intro; assumption.
-unfold Rdiv in |- *; unfold Rsqr in |- *; rewrite Rinv_mult_distr.
-repeat rewrite Rmult_assoc.
-rewrite (Rmult_comm l).
-repeat rewrite Rmult_assoc.
-rewrite <- Rinv_l_sym.
-rewrite Rmult_1_r.
-rewrite (Rmult_comm l).
-repeat rewrite Rmult_assoc.
-rewrite <- Rinv_l_sym.
-rewrite Rmult_1_r.
-rewrite <- Rinv_l_sym.
-rewrite Rmult_1_r; reflexivity.
-discrR.
-exact H0.
-exact H0.
-exact H0.
-exact H0.
-left; apply Rinv_0_lt_compat; apply Rabs_pos_lt; apply prod_neq_R0;
- assumption.
-rewrite Rmult_comm; rewrite Rabs_mult; rewrite Rinv_mult_distr.
-rewrite (Rsqr_abs l); unfold Rsqr in |- *; unfold Rdiv in |- *;
- rewrite Rinv_mult_distr.
-repeat rewrite <- Rmult_assoc; apply Rmult_lt_compat_r.
-apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption.
-apply Rmult_lt_reg_l with (Rabs (f x) * Rabs l * / 2).
-repeat apply Rmult_lt_0_compat.
-apply Rabs_pos_lt; assumption.
-apply Rabs_pos_lt; assumption.
-apply Rinv_0_lt_compat; cut (0%nat <> 2%nat);
- [ intro H17; generalize (lt_INR_0 2 (neq_O_lt 2 H17)); unfold INR in |- *;
- intro H18; assumption
- | discriminate ].
-replace (Rabs (f x) * Rabs l * / 2 * / Rabs (f x)) with (Rabs l / 2).
-replace (Rabs (f x) * Rabs l * / 2 * (2 * / Rabs l)) with (Rabs (f x)).
-assumption.
-repeat rewrite Rmult_assoc.
-rewrite (Rmult_comm (Rabs l)).
-repeat rewrite Rmult_assoc.
-rewrite <- Rinv_l_sym.
-rewrite Rmult_1_r.
-rewrite <- Rinv_l_sym.
-rewrite Rmult_1_r; reflexivity.
-discrR.
-apply Rabs_no_R0.
-assumption.
-unfold Rdiv in |- *.
-repeat rewrite Rmult_assoc.
-rewrite (Rmult_comm (Rabs (f x))).
-repeat rewrite Rmult_assoc.
-rewrite <- Rinv_l_sym.
-rewrite Rmult_1_r.
-reflexivity.
-apply Rabs_no_R0; assumption.
-apply Rabs_no_R0; assumption.
-apply Rabs_no_R0; assumption.
-apply Rabs_no_R0; assumption.
-apply Rabs_no_R0; assumption.
-apply prod_neq_R0; assumption.
-rewrite (Rinv_mult_distr _ _ H0 H16).
-unfold Rminus in |- *; rewrite Rmult_plus_distr_r.
-rewrite <- Rmult_assoc.
-rewrite <- Rinv_r_sym.
-rewrite Rmult_1_l.
-rewrite Ropp_mult_distr_l_reverse.
-rewrite (Rmult_comm (f x)).
-rewrite Rmult_assoc.
-rewrite <- Rinv_l_sym.
-rewrite Rmult_1_r.
-reflexivity.
-assumption.
-assumption.
-red in |- *; intro; rewrite H16 in H15; rewrite Rabs_R0 in H15;
- cut (0 < Rabs l / 2).
-intro; elim (Rlt_irrefl 0 (Rlt_trans 0 (Rabs l / 2) 0 H17 H15)).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat.
-apply Rabs_pos_lt; assumption.
-apply Rinv_0_lt_compat; cut (0%nat <> 2%nat);
- [ intro H17; generalize (lt_INR_0 2 (neq_O_lt 2 H17)); unfold INR in |- *;
- intro; assumption
- | discriminate ].
-pattern (Rabs l) at 3 in |- *; rewrite double_var.
-ring.
-split;
- [ assumption
- | apply Rlt_le_trans with (Rmin delta1 delta2);
- [ assumption | apply Rmin_r ] ].
-split;
- [ assumption
- | apply Rlt_le_trans with (Rmin delta1 delta2);
- [ assumption | apply Rmin_l ] ].
-change (0 < eps * (Rsqr l / 2)) in |- *; unfold Rdiv in |- *;
- repeat rewrite Rmult_assoc; repeat apply Rmult_lt_0_compat.
-assumption.
-apply Rsqr_pos_lt; assumption.
-apply Rinv_0_lt_compat; cut (0%nat <> 2%nat);
- [ intro H3; generalize (lt_INR_0 2 (neq_O_lt 2 H3)); unfold INR in |- *;
- intro; assumption
- | discriminate ].
-change (0 < Rabs l / 2) in |- *; unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ apply Rabs_pos_lt; assumption
- | apply Rinv_0_lt_compat; cut (0%nat <> 2%nat);
+ forall (f:R -> R) (D:R -> Prop) (l x0:R),
+ limit1_in f D l x0 -> l <> 0 -> limit1_in (fun x:R => / f x) D (/ l) x0.
+Proof.
+ unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *;
+ unfold R_dist in |- *; intros; elim (H (Rabs l / 2)).
+ intros delta1 H2; elim (H (eps * (Rsqr l / 2))).
+ intros delta2 H3; elim H2; elim H3; intros; exists (Rmin delta1 delta2);
+ split.
+ unfold Rmin in |- *; case (Rle_dec delta1 delta2); intro; assumption.
+ intro; generalize (H5 x); clear H5; intro H5; generalize (H7 x); clear H7;
+ intro H7; intro H10; elim H10; intros; cut (D x /\ Rabs (x - x0) < delta1).
+ cut (D x /\ Rabs (x - x0) < delta2).
+ intros; generalize (H5 H11); clear H5; intro H5; generalize (H7 H12);
+ clear H7; intro H7; generalize (Rabs_triang_inv l (f x));
+ intro; rewrite Rabs_minus_sym in H7;
+ generalize
+ (Rle_lt_trans (Rabs l - Rabs (f x)) (Rabs (l - f x)) (Rabs l / 2) H13 H7);
+ intro;
+ generalize
+ (Rplus_lt_compat_l (Rabs (f x) - Rabs l / 2) (Rabs l - Rabs (f x))
+ (Rabs l / 2) H14);
+ replace (Rabs (f x) - Rabs l / 2 + (Rabs l - Rabs (f x))) with (Rabs l / 2).
+ unfold Rminus in |- *; rewrite Rplus_assoc; rewrite Rplus_opp_l;
+ rewrite Rplus_0_r; intro; cut (f x <> 0).
+ intro; replace (/ f x + - / l) with ((l - f x) * / (l * f x)).
+ rewrite Rabs_mult; rewrite Rabs_Rinv.
+ cut (/ Rabs (l * f x) < 2 / Rsqr l).
+ intro; rewrite Rabs_minus_sym in H5; cut (0 <= / Rabs (l * f x)).
+ intro;
+ generalize
+ (Rmult_le_0_lt_compat (Rabs (l - f x)) (eps * (Rsqr l / 2))
+ (/ Rabs (l * f x)) (2 / Rsqr l) (Rabs_pos (l - f x)) H18 H5 H17);
+ replace (eps * (Rsqr l / 2) * (2 / Rsqr l)) with eps.
+ intro; assumption.
+ unfold Rdiv in |- *; unfold Rsqr in |- *; rewrite Rinv_mult_distr.
+ repeat rewrite Rmult_assoc.
+ rewrite (Rmult_comm l).
+ repeat rewrite Rmult_assoc.
+ rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_r.
+ rewrite (Rmult_comm l).
+ repeat rewrite Rmult_assoc.
+ rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_r.
+ rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_r; reflexivity.
+ discrR.
+ exact H0.
+ exact H0.
+ exact H0.
+ exact H0.
+ left; apply Rinv_0_lt_compat; apply Rabs_pos_lt; apply prod_neq_R0;
+ assumption.
+ rewrite Rmult_comm; rewrite Rabs_mult; rewrite Rinv_mult_distr.
+ rewrite (Rsqr_abs l); unfold Rsqr in |- *; unfold Rdiv in |- *;
+ rewrite Rinv_mult_distr.
+ repeat rewrite <- Rmult_assoc; apply Rmult_lt_compat_r.
+ apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption.
+ apply Rmult_lt_reg_l with (Rabs (f x) * Rabs l * / 2).
+ repeat apply Rmult_lt_0_compat.
+ apply Rabs_pos_lt; assumption.
+ apply Rabs_pos_lt; assumption.
+ apply Rinv_0_lt_compat; cut (0%nat <> 2%nat);
+ [ intro H17; generalize (lt_INR_0 2 (neq_O_lt 2 H17)); unfold INR in |- *;
+ intro H18; assumption
+ | discriminate ].
+ replace (Rabs (f x) * Rabs l * / 2 * / Rabs (f x)) with (Rabs l / 2).
+ replace (Rabs (f x) * Rabs l * / 2 * (2 * / Rabs l)) with (Rabs (f x)).
+ assumption.
+ repeat rewrite Rmult_assoc.
+ rewrite (Rmult_comm (Rabs l)).
+ repeat rewrite Rmult_assoc.
+ rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_r.
+ rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_r; reflexivity.
+ discrR.
+ apply Rabs_no_R0.
+ assumption.
+ unfold Rdiv in |- *.
+ repeat rewrite Rmult_assoc.
+ rewrite (Rmult_comm (Rabs (f x))).
+ repeat rewrite Rmult_assoc.
+ rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_r.
+ reflexivity.
+ apply Rabs_no_R0; assumption.
+ apply Rabs_no_R0; assumption.
+ apply Rabs_no_R0; assumption.
+ apply Rabs_no_R0; assumption.
+ apply Rabs_no_R0; assumption.
+ apply prod_neq_R0; assumption.
+ rewrite (Rinv_mult_distr _ _ H0 H16).
+ unfold Rminus in |- *; rewrite Rmult_plus_distr_r.
+ rewrite <- Rmult_assoc.
+ rewrite <- Rinv_r_sym.
+ rewrite Rmult_1_l.
+ rewrite Ropp_mult_distr_l_reverse.
+ rewrite (Rmult_comm (f x)).
+ rewrite Rmult_assoc.
+ rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_r.
+ reflexivity.
+ assumption.
+ assumption.
+ red in |- *; intro; rewrite H16 in H15; rewrite Rabs_R0 in H15;
+ cut (0 < Rabs l / 2).
+ intro; elim (Rlt_irrefl 0 (Rlt_trans 0 (Rabs l / 2) 0 H17 H15)).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat.
+ apply Rabs_pos_lt; assumption.
+ apply Rinv_0_lt_compat; cut (0%nat <> 2%nat);
+ [ intro H17; generalize (lt_INR_0 2 (neq_O_lt 2 H17)); unfold INR in |- *;
+ intro; assumption
+ | discriminate ].
+ pattern (Rabs l) at 3 in |- *; rewrite double_var.
+ ring.
+ split;
+ [ assumption
+ | apply Rlt_le_trans with (Rmin delta1 delta2);
+ [ assumption | apply Rmin_r ] ].
+ split;
+ [ assumption
+ | apply Rlt_le_trans with (Rmin delta1 delta2);
+ [ assumption | apply Rmin_l ] ].
+ change (0 < eps * (Rsqr l / 2)) in |- *; unfold Rdiv in |- *;
+ repeat rewrite Rmult_assoc; repeat apply Rmult_lt_0_compat.
+ assumption.
+ apply Rsqr_pos_lt; assumption.
+ apply Rinv_0_lt_compat; cut (0%nat <> 2%nat);
[ intro H3; generalize (lt_INR_0 2 (neq_O_lt 2 H3)); unfold INR in |- *;
- intro; assumption
- | discriminate ] ].
+ intro; assumption
+ | discriminate ].
+ change (0 < Rabs l / 2) in |- *; unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ apply Rabs_pos_lt; assumption
+ | apply Rinv_0_lt_compat; cut (0%nat <> 2%nat);
+ [ intro H3; generalize (lt_INR_0 2 (neq_O_lt 2 H3)); unfold INR in |- *;
+ intro; assumption
+ | discriminate ] ].
Qed.