aboutsummaryrefslogtreecommitdiffhomepage
path: root/theories/Reals/Rlimit.v
diff options
context:
space:
mode:
authorGravatar filliatr <filliatr@85f007b7-540e-0410-9357-904b9bb8a0f7>2000-06-21 01:12:37 +0000
committerGravatar filliatr <filliatr@85f007b7-540e-0410-9357-904b9bb8a0f7>2000-06-21 01:12:37 +0000
commit9c7a98513f351348a836ae2a54490733d2368ccc (patch)
treeb740c87c09f2152fd59c074b60a5edd9f7310ccb /theories/Reals/Rlimit.v
parent639af2938c15202b12f709eb84790d0b5c627a9f (diff)
theories/Reals
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@511 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'theories/Reals/Rlimit.v')
-rw-r--r--theories/Reals/Rlimit.v1029
1 files changed, 1029 insertions, 0 deletions
diff --git a/theories/Reals/Rlimit.v b/theories/Reals/Rlimit.v
new file mode 100644
index 000000000..56a7c709d
--- /dev/null
+++ b/theories/Reals/Rlimit.v
@@ -0,0 +1,1029 @@
+
+(* $Id$ *)
+
+(*********************************************************)
+(* Definition of the limit *)
+(* *)
+(*********************************************************)
+
+Require Export Rbasic_fun.
+Require Export Classical_Prop.
+
+(*******************************)
+(* Calculus *)
+(*******************************)
+(*********)
+Lemma eps2_Rgt_R0:(eps:R)(Rgt eps R0)->
+ (Rgt (Rmult eps (Rinv (Rplus R1 R1))) R0).
+Intros;Generalize (Rlt_compatibility R1 R0 R1 Rlt_R0_R1);Intro;
+ Elim (Rplus_ne R1);Intros a b;Rewrite a in H0;Clear a b;
+ Generalize (Rlt_Rinv (Rplus R1 R1)
+ (Rlt_trans R0 R1 (Rplus R1 R1) Rlt_R0_R1 H0));Intro;
+ Unfold Rgt in H;
+ Generalize (Rlt_monotony (Rinv (Rplus R1 R1)) R0 eps H1 H);Intro;
+ Rewrite (Rmult_Or (Rinv (Rplus R1 R1))) in H2;
+ Rewrite (Rmult_sym (Rinv (Rplus R1 R1)) eps) in H2;
+ Unfold Rgt;Assumption.
+Save.
+
+(*********)
+Lemma eps2:(eps:R)(Rplus (Rmult eps (Rinv (Rplus R1 R1)))
+ (Rmult eps (Rinv (Rplus R1 R1))))==eps.
+Intro;Rewrite<-(Rmult_Rplus_distr eps (Rinv (Rplus R1 R1)) (Rinv (Rplus R1 R1)));
+ Elim (Rmult_ne eps);Intros a b;Pattern 2 eps;Rewrite <- a;Clear a b;
+ Apply Rmult_mult_r;Clear eps;Cut ~(Rplus R1 R1)==R0.
+Intro;Apply (r_Rmult_mult (Rplus R1 R1)
+ (Rplus (Rinv (Rplus R1 R1)) (Rinv (Rplus R1 R1))) R1);Auto;
+Rewrite (Rmult_Rplus_distr (Rplus R1 R1) (Rinv (Rplus R1 R1))
+ (Rinv (Rplus R1 R1)));
+ Rewrite (Rinv_r (Rplus R1 R1) H);Elim (Rmult_ne (Rplus R1 R1));Intros a b;
+ Rewrite a;Clear a b;Reflexivity.
+Red;Intro;Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H0);Intro;Elim (Rplus_ne R1);
+ Intros a b;Rewrite a in H1;Clear a b;
+ Generalize (Rlt_trans R0 R1 (Rplus R1 R1) H0 H1);Intro;
+ Elim (imp_not_Req R0 (Rplus R1 R1));Auto;Left;Assumption.
+Save.
+
+(*********)
+Lemma eps4:(eps:R)
+ (Rplus (Rmult eps (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1) )))
+ (Rmult eps (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1) ))))==
+ (Rmult eps (Rinv (Rplus R1 R1))).
+Intro;Rewrite<-(Rmult_Rplus_distr eps (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))));
+ Apply Rmult_mult_r;Clear eps;
+ Rewrite <-(let (H1,H2)=
+ (Rmult_ne (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))) in H1);
+ Rewrite <-(Rmult_Rplus_distr (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))) R1 R1);
+ Cut ~(Rplus R1 R1)==R0.
+Intro;Apply (r_Rmult_mult (Rplus R1 R1)
+ (Rmult (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))) (Rplus R1 R1))
+ (Rinv (Rplus R1 R1)));Auto.
+Rewrite (Rmult_sym (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rplus R1 R1));
+ Rewrite <-(Rmult_assoc (Rplus R1 R1) (Rplus R1 R1)
+ (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))));
+ Rewrite (Rinv_r (Rplus R1 R1) H);Rewrite (Rmult_Rplus_distr (Rplus R1 R1) R1 R1);
+ Rewrite (let (H1,H2)=(Rmult_ne (Rplus R1 R1)) in H1);
+ Apply (Rinv_r (Rplus (Rplus R1 R1) (Rplus R1 R1))).
+Apply (imp_not_Req (Rplus (Rplus R1 R1) (Rplus R1 R1)) R0);Right;Unfold Rgt;
+ Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H0);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H1;
+ Generalize (Rlt_trans R0 R1 (Rplus R1 R1) H0 H1);Intro;
+ Clear H0 H1;
+ Generalize (Rlt_compatibility (Rplus R1 R1) R0 (Rplus R1 R1) H2);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne (Rplus R1 R1)) in H1) in H0;
+ Apply (Rlt_trans R0 (Rplus R1 R1) (Rplus (Rplus R1 R1) (Rplus R1 R1))
+ H2 H0).
+Apply (imp_not_Req (Rplus R1 R1) R0);Right;Unfold Rgt;Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H0;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H H0).
+Save.
+
+(*********)
+Lemma Rlt_eps2_eps:(eps:R)(Rgt eps R0)->
+ (Rlt (Rmult eps (Rinv (Rplus R1 R1))) eps).
+Intros;Unfold Rgt in H;Elim (Rmult_ne eps);Intros a b;Pattern 2 eps;
+ Rewrite <- a;Clear a b;
+ Apply (Rlt_monotony eps (Rinv (Rplus R1 R1)) R1 H);
+ Apply (Rlt_anti_compatibility (Rinv (Rplus R1 R1)) (Rinv (Rplus R1 R1))
+ R1);Elim (Rmult_ne (Rinv (Rplus R1 R1)));Intros a b;
+ Pattern 1 2 (Rinv (Rplus R1 R1));Rewrite <-b;Clear a b;
+ Rewrite (eps2 R1);Elim (Rplus_ne R1);Intros a b;Pattern 1 R1;
+ Rewrite <-a;Clear a b;Rewrite (Rplus_sym (Rinv (Rplus R1 R1)) R1);
+ Apply (Rlt_compatibility R1 R0 (Rinv (Rplus R1 R1))
+ (Rlt_Rinv (Rplus R1 R1) (Rlt_r_plus_R1 R1 (Rlt_le R0 R1 Rlt_R0_R1)))).
+Save.
+
+(*********)
+Lemma Rlt_eps4_eps:(eps:R)(Rgt eps R0)->
+ (Rlt (Rmult eps (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))) eps).
+Intros;Pattern 2 eps;Rewrite <-(let (H1,H2)=(Rmult_ne eps) in H1);
+ Unfold Rgt in H;Apply Rlt_monotony;Auto.
+ Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H0);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H1;
+ Generalize (Rlt_compatibility R1 R1 (Rplus R1 R1) H1);Intro;
+ Generalize (Rlt_compatibility (Rplus R1 R1) R1 (Rplus R1 R1) H1);Intro;
+ Generalize (Rlt_trans R1 (Rplus R1 R1) (Rplus R1 (Rplus R1 R1))
+ H1 H2);Intro;
+ Rewrite (Rplus_sym (Rplus R1 R1) R1) in H3;
+ Generalize (Rlt_trans R1 (Rplus R1 (Rplus R1 R1))
+ (Rplus (Rplus R1 R1) (Rplus R1 R1)) H4 H3);Clear H H0 H1 H2 H3 H4;
+ Intro;Rewrite <-(let (H1,H2)=(Rmult_ne
+ (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))) in H1);Pattern 6 R1;
+ Rewrite <-(Rinv_l (Rplus (Rplus R1 R1) (Rplus R1 R1))).
+ Apply (Rlt_monotony (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ R1 (Rplus (Rplus R1 R1) (Rplus R1 R1)));Auto.
+Apply (Rlt_Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)));
+ Apply (Rlt_trans R0 R1 (Rplus (Rplus R1 R1) (Rplus R1 R1)) Rlt_R0_R1 H).
+Apply (imp_not_Req (Rplus (Rplus R1 R1) (Rplus R1 R1)) R0);Right;Unfold Rgt;
+ Apply (Rlt_trans R0 R1 (Rplus (Rplus R1 R1) (Rplus R1 R1)) Rlt_R0_R1 H).
+Save.
+
+(*********)
+Lemma prop_eps:(r:R)((eps:R)(Rgt eps R0)->(Rlt r eps))->(Rle r R0).
+Intros;Elim (total_order r R0); Intro.
+Apply Rlt_le; Assumption.
+Elim H0; Intro.
+Apply eq_Rle; Assumption.
+Clear H0;Generalize (H r H1); Intro;Generalize (Rlt_antirefl r);
+ Intro;ElimType False; Auto.
+Save.
+
+(*******************************)
+(* Metric space *)
+(*******************************)
+
+(*********)
+Record Metric_Space:Type:= {
+ Base:Type;
+ dist:Base->Base->R;
+ dist_pos:(x,y:Base)(Rge (dist x y) R0);
+ dist_sym:(x,y:Base)(dist x y)==(dist y x);
+ dist_refl:(x,y:Base)((dist x y)==R0<->x==y);
+ dist_tri:(x,y,z:Base)(Rle (dist x y)
+ (Rplus (dist x z) (dist z y))) }.
+
+(*******************************)
+(* Limit in Metric space *)
+(*******************************)
+
+(*********)
+Definition limit_in:=
+ [X:Metric_Space; X':Metric_Space; f:(Base X)->(Base X');
+ D:(Base X)->Prop; x0:(Base X); l:(Base X')]
+ (eps:R)(Rgt eps R0)->
+ (EXT alp:R | (Rgt alp R0)/\(x:(Base X))(D x)/\
+ (Rlt (dist X x x0) alp)->
+ (Rlt (dist X' (f x) l) eps)).
+
+(*******************************)
+(* Distance in R *)
+(*******************************)
+
+(*********)
+Definition R_dist:R->R->R:=[x,y:R](Rabsolu (Rminus x y)).
+
+(*********)
+Lemma R_dist_pos:(x,y:R)(Rge (R_dist x y) R0).
+Intros;Unfold R_dist;Unfold Rabsolu;Case (case_Rabsolu (Rminus x y));Intro l.
+Unfold Rge;Left;Apply (Rlt_RoppO (Rminus x y) l).
+Trivial.
+Save.
+
+(*********)
+Lemma R_dist_sym:(x,y:R)(R_dist x y)==(R_dist y x).
+Intros; Unfold R_dist; Unfold Rabsolu;
+ Case (case_Rabsolu (Rminus x y)); Case (case_Rabsolu (Rminus y x));
+ Intros l l0.
+Generalize (Rlt_RoppO (Rminus y x) l); Intro;
+ Rewrite (Ropp_distr2 y x) in H;
+ Generalize (Rlt_antisym (Rminus x y) R0 l0); Intro;Unfold Rgt in H;
+ ElimType False; Auto.
+Apply (Ropp_distr2 x y).
+Apply sym_eqT;Apply (Ropp_distr2 y x).
+Generalize (minus_Rge y x l); Intro;
+ Generalize (minus_Rge x y l0); Intro;
+ Generalize (Rge_ge_eq x y H0 H); Intro;Rewrite H1;Trivial.
+Save.
+
+(*********)
+Lemma R_dist_refl:(x,y:R)((R_dist x y)==R0<->x==y).
+Intros;Unfold R_dist; Unfold Rabsolu;
+ Case (case_Rabsolu (Rminus x y));Intro;Split;Intro.
+Rewrite (Ropp_distr2 x y) in H;Apply sym_eqT;
+ Apply (Rminus_eq y x H).
+Rewrite (Ropp_distr2 x y);Generalize (sym_eqT R x y H);Intro;
+ Apply (eq_Rminus y x H0).
+Apply (Rminus_eq x y H).
+Apply (eq_Rminus x y H).
+Save.
+
+(***********)
+Lemma R_dist_tri:(x,y,z:R)(Rle (R_dist x y)
+ (Rplus (R_dist x z) (R_dist z y))).
+Intros;Unfold R_dist; Unfold Rabsolu;
+ Case (case_Rabsolu (Rminus x y)); Case (case_Rabsolu (Rminus x z));
+ Case (case_Rabsolu (Rminus z y));Intros.
+Rewrite (Ropp_distr2 x y); Rewrite (Ropp_distr2 x z);
+ Rewrite (Ropp_distr2 z y);Unfold Rminus;
+ Rewrite (Rplus_sym y (Ropp z));
+ Rewrite (Rplus_sym z (Ropp x));
+ Rewrite (Rplus_assoc (Ropp x) z (Rplus (Ropp z) y));
+ Rewrite <-(Rplus_assoc z (Ropp z) y);Rewrite (Rplus_Ropp_r z);
+ Elim (Rplus_ne y);Intros a b;Rewrite b;Clear a b;
+ Rewrite (Rplus_sym y (Ropp x));
+ Apply (eq_Rle (Rplus (Ropp x) y) (Rplus (Ropp x) y)
+ (refl_eqT R (Rplus (Ropp x) y))).
+Rewrite (Ropp_distr2 x y);Rewrite (Ropp_distr2 x z);Unfold Rminus;
+ Rewrite (Rplus_sym y (Ropp x));
+ Rewrite (Rplus_sym z (Ropp x));
+ Rewrite (Rplus_assoc (Ropp x) z (Rplus z (Ropp y)));
+ Apply (Rle_compatibility (Ropp x) y
+ (Rplus z (Rplus z (Ropp y))));
+ Rewrite (Rplus_sym z (Rplus z (Ropp y)));
+ Apply (Rle_anti_compatibility (Ropp y) y
+ (Rplus (Rplus z (Ropp y)) z));Rewrite (Rplus_Ropp_l y);
+ Rewrite (Rplus_sym (Ropp y) (Rplus (Rplus z (Ropp y)) z));
+ Rewrite (Rplus_assoc (Rplus z (Ropp y)) z (Ropp y));
+ Fold (Rminus z y);Generalize (Rle_sym2 R0 (Rminus z y) r);Intro;
+ Generalize (Rle_compatibility (Rminus z y) R0 (Rminus z y) H);Intro;
+ Elim (Rplus_ne (Rminus z y)); Intros a b; Rewrite a in H0; Clear a b;
+ Apply (Rle_trans R0 (Rminus z y) (Rplus (Rminus z y) (Rminus z y))
+ H H0).
+Rewrite (Ropp_distr2 x y);Rewrite (Ropp_distr2 z y);Unfold Rminus;
+ Rewrite (Rplus_sym y (Ropp z));
+ Rewrite <- (Rplus_assoc (Rplus x (Ropp z)) (Ropp z) y);
+ Rewrite (Rplus_sym (Rplus (Rplus x (Ropp z)) (Ropp z)) y);
+ Apply (Rle_compatibility y (Ropp x)
+ (Rplus (Rplus x (Ropp z)) (Ropp z)));
+ Apply (Rle_anti_compatibility x (Ropp x)
+ (Rplus (Rplus x (Ropp z)) (Ropp z)));Rewrite (Rplus_Ropp_r x);
+ Rewrite (Rplus_sym x (Rplus (Rplus x (Ropp z)) (Ropp z)));
+ Rewrite (Rplus_assoc (Rplus x (Ropp z)) (Ropp z) x);
+ Rewrite (Rplus_sym (Ropp z) x);Fold (Rminus x z);
+ Generalize (Rle_sym2 R0 (Rminus x z) r0);Intro;
+ Generalize (Rle_compatibility (Rminus x z) R0 (Rminus x z) H);Intro;
+ Elim (Rplus_ne (Rminus x z));Intros a b;Rewrite a in H0;Clear a b;
+ Apply (Rle_trans R0 (Rminus x z) (Rplus (Rminus x z) (Rminus x z))
+ H H0).
+Unfold 2 3 Rminus;
+ Rewrite <-(Rplus_assoc (Rplus x (Ropp z)) z (Ropp y));
+ Rewrite (Rplus_assoc x (Ropp z) z);Rewrite (Rplus_Ropp_l z);
+ Elim (Rplus_ne x);Intros a b;Rewrite a;Clear a b; Fold (Rminus x y);
+ Apply (Rle_anti_compatibility (Rminus x y) (Ropp (Rminus x y))
+ (Rminus x y));Rewrite (Rplus_Ropp_r (Rminus x y));
+ Generalize (Rle_sym2 R0 (Rminus x z) r0);Intro;
+ Generalize (Rle_sym2 R0 (Rminus z y) r);Intro;
+ Generalize (Rle_compatibility (Rminus z y) R0 (Rminus x z) H);Intro;
+ Elim (Rplus_ne (Rminus z y));Intros a b;Rewrite a in H1;Clear a b;
+ Unfold 2 3 Rminus in H1;
+ Rewrite (Rplus_assoc z (Ropp y) (Rplus x (Ropp z))) in H1;
+ Rewrite (Rplus_sym z (Rplus (Ropp y) (Rplus x (Ropp z))))
+ in H1;
+ Rewrite <-(Rplus_assoc (Ropp y) x (Ropp z)) in H1;
+ Rewrite (Rplus_assoc (Rplus (Ropp y) x) (Ropp z) z) in H1;
+ Rewrite (Rplus_Ropp_l z) in H1;
+ Elim (Rplus_ne (Rplus (Ropp y) x));Intros a b;Rewrite a in H1;
+ Clear a b;Rewrite (Rplus_sym (Ropp y) x) in H1;
+ Fold (Rminus x y) in H1;
+ Generalize (Rle_trans R0 (Rminus z y) (Rminus x y) H0 H1);Intro;
+ Generalize (Rle_compatibility (Rminus x y) R0 (Rminus x y) H2);
+ Intro;Elim (Rplus_ne (Rminus x y));Intros a b;Rewrite a in H3;
+ Clear a b;
+ Apply (Rle_trans R0 (Rminus x y) (Rplus (Rminus x y) (Rminus x y))
+ H2 H3).
+Generalize (Rminus_lt z y r);Intro;Generalize (Rminus_lt x z r0);
+ Intro;Generalize (Rlt_trans x z y H0 H);Intro;
+ Generalize (Rlt_minus x y H1);Intro;
+ Generalize (Rle_not R0 (Rminus x y) H2);Intro;
+ Generalize (Rle_sym2 R0 (Rminus x y) r1);Intro;
+ ElimType False;Auto.
+Rewrite (Ropp_distr2 x z);Unfold Rminus;
+ Rewrite (Rplus_sym x (Ropp y));
+ Rewrite <-(Rplus_assoc (Rplus z (Ropp x)) z (Ropp y));
+ Rewrite (Rplus_sym (Rplus (Rplus z (Ropp x)) z) (Ropp y));
+ Apply (Rle_compatibility (Ropp y) x
+ (Rplus (Rplus z (Ropp x)) z));
+ Apply (Rle_anti_compatibility (Ropp x) x
+ (Rplus (Rplus z (Ropp x)) z));
+ Rewrite (Rplus_Ropp_l x);
+ Rewrite (Rplus_sym (Ropp x) (Rplus (Rplus z (Ropp x)) z));
+ Rewrite (Rplus_assoc (Rplus z (Ropp x)) z (Ropp x));
+ Fold (Rminus z x);Generalize (Rminus_lt x z r0);Intro;
+ Generalize (Rlt_RoppO (Rminus x z) r0);Intro;
+ Rewrite (Ropp_distr2 x z) in H0;
+ Generalize (Rgt_ge (Rminus z x) R0 H0);Intro;
+ Generalize (Rle_sym2 R0 (Rminus z x) H1);Intro;
+ Generalize (Rle_compatibility (Rminus z x) R0 (Rminus z x) H2);
+ Intro;Elim (Rplus_ne (Rminus z x)); Intros a b; Rewrite a in H3;
+ Clear a b;
+ Apply (Rle_trans R0 (Rminus z x) (Rplus (Rminus z x) (Rminus z x))
+ H2 H3).
+Rewrite (Ropp_distr2 z y);Unfold Rminus;
+ Rewrite (Rplus_assoc x (Ropp z) (Rplus y (Ropp z)));
+ Apply (Rle_compatibility x (Ropp y)
+ (Rplus (Ropp z) (Rplus y (Ropp z))));
+ Apply (Rle_anti_compatibility y (Ropp y)
+ (Rplus (Ropp z) (Rplus y (Ropp z))));
+ Rewrite (Rplus_Ropp_r y);
+ Rewrite <-(Rplus_assoc y (Ropp z) (Rplus y (Ropp z)));
+ Fold (Rminus y z);Generalize (Rlt_Ropp (Rminus z y) R0 r);Intro;
+ Rewrite Ropp_O in H;Rewrite (Ropp_distr2 z y) in H;
+ Generalize (Rgt_ge (Rminus y z) R0 H);Intro;
+ Generalize (Rle_sym2 R0 (Rminus y z) H0);Intro;
+ Generalize (Rle_compatibility (Rminus y z) R0 (Rminus y z) H1);
+ Intro;Elim (Rplus_ne (Rminus y z)); Intros a b; Rewrite a in H2;
+ Clear a b;
+ Apply (Rle_trans R0 (Rminus y z) (Rplus (Rminus y z) (Rminus y z))
+ H1 H2).
+Unfold 2 3 Rminus;
+ Rewrite (Rplus_assoc x (Ropp z) (Rplus z (Ropp y)));
+ Rewrite <-(Rplus_assoc (Ropp z) z (Ropp y));
+ Rewrite (Rplus_Ropp_l z);Elim (Rplus_ne (Ropp y));Intros a b;Rewrite b;
+ Clear a b;Fold (Rminus x y);
+ Apply (eq_Rle (Rminus x y) (Rminus x y) (refl_eqT R (Rminus x y))).
+Save.
+
+(*******************************)
+(* R is a metric space *)
+(*******************************)
+
+(*********)
+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 *)
+(*******************************)
+(*********)
+Definition Dgf:=[Df,Dg:R->Prop][f:R->R][x:R](Df x)/\(Dg (f x)).
+
+(*********)
+Definition limit1_in:(R->R)->(R->Prop)->R->R->Prop:=
+ [f:R->R; D:R->Prop; l:R; x0:R](limit_in R_met R_met f D x0 l).
+
+(*********)
+Lemma tech_limit:(f:R->R)(D:R->Prop)(l:R)(x0:R)(D x0)->
+ (limit1_in f D l x0)->l==(f x0).
+Unfold limit1_in;Unfold limit_in;Simpl;Intros;Apply NNPP;Red;Intro;
+ Generalize (R_dist_pos (f x0) l);Intro;Unfold Rge in H2;Elim H2;Intro;
+ Clear H2.
+Elim (H0 (R_dist (f x0) l) H3);Intros;Elim H2;Clear H2 H0;
+ Intros;Generalize (H2 x0);Clear H2;Intro;Elim (R_dist_refl x0 x0);
+ Intros a b;Clear a;Rewrite (b (refl_eqT R x0)) in H2;Clear b;
+ Unfold Rgt in H0;Generalize (H2 (conj (D x0) (Rlt R0 x) H H0));Intro;
+ Clear H2;Generalize (Rlt_antirefl (R_dist (f x0) l));Intro;Auto.
+Elim (R_dist_refl (f x0) l);Intros a b;Clear b;Generalize (a H3);Intro;
+Generalize (sym_eqT R (f x0) l H2);Intro;Auto.
+Save.
+
+(*********)
+Lemma tech_limit_contr:(f:R->R)(D:R->Prop)(l:R)(x0:R)(D x0)->~l==(f x0)
+ ->~(limit1_in f D l x0).
+Intros;Generalize (tech_limit f D l x0);Tauto.
+Save.
+
+(*********)
+Lemma lim_x:(D:R->Prop)(x0:R)(limit1_in [x:R]x D x0 x0).
+Unfold limit1_in; Unfold limit_in; Simpl; Intros;Split with eps;
+ Split; Auto;Intros;Elim H0; Intros; Auto.
+Save.
+
+(*********)
+Lemma limit_plus:(f,g:R->R)(D:R->Prop)(l,l':R)(x0:R)
+ (limit1_in f D l x0)->(limit1_in g D l' x0)->
+ (limit1_in [x:R](Rplus (f x) (g x)) D (Rplus l l') x0).
+Unfold limit1_in;Unfold limit_in;Simpl;Intros;
+ Elim (H (Rmult eps (Rinv (Rplus R1 R1))) (eps2_Rgt_R0 eps H1));
+ Elim (H0 (Rmult eps (Rinv (Rplus R1 R1))) (eps2_Rgt_R0 eps H1));
+ Clear H H0;Intros;Elim H;Elim H0;Clear H H0;Intros;
+ Split with (Rmin x1 x);Split.
+Elim (Rmin_Rgt x1 x R0);Intros a b;
+ Apply (b (conj (Rgt x1 R0) (Rgt x R0) H H2));Clear a b.
+Intros;Elim H4;Clear H4;Intros;Elim (Rmin_Rgt x1 x (R_dist x2 x0));
+ Intros a b;Clear b;Unfold Rgt in a;Elim (a H5);Clear H5 a;Intros;
+ Generalize (H0 x2 (conj (D x2) (Rlt (R_dist x2 x0) x1) H4 H5));
+ Generalize (H3 x2 (conj (D x2) (Rlt (R_dist x2 x0) x) H4 H6));
+ Clear H0 H3 H5 H6;Intros;
+ Generalize (Rplus_lt (R_dist (f x2) l)
+ (Rmult eps (Rinv (Rplus R1 R1)))
+ (R_dist (g x2) l')
+ (Rmult eps (Rinv (Rplus R1 R1))) H3 H0);
+ Clear H0 H3 H4;Intro;Rewrite (eps2 eps) in H0;Unfold R_dist;
+ Unfold Rminus;Rewrite (Rplus_sym l l');Rewrite (Ropp_distr1 l' l);
+ Rewrite <-(Rplus_assoc (Rplus (f x2) (g x2)) (Ropp l') (Ropp l));
+ Rewrite (Rplus_assoc (f x2) (g x2) (Ropp l'));
+ Rewrite (Rplus_sym (Rplus (f x2) (Rplus (g x2) (Ropp l')))
+ (Ropp l));
+ Rewrite <-(Rplus_assoc (Ropp l) (f x2) (Rplus (g x2) (Ropp l')));
+ Rewrite (Rplus_sym (Ropp l) (f x2));
+ Fold (Rminus (f x2) l);Fold (Rminus (g x2) l');Unfold R_dist in H0;
+ Apply (Rle_lt_trans
+ (Rabsolu (Rplus (Rminus (f x2) l) (Rminus (g x2) l')))
+ (Rplus (Rabsolu (Rminus (f x2) l)) (Rabsolu (Rminus (g x2) l')))
+ eps
+ (Rabsolu_triang (Rminus (f x2) l) (Rminus (g x2) l')) H0).
+Save.
+
+(*********)
+Lemma limit_Ropp:(f:R->R)(D:R->Prop)(l:R)(x0:R)
+ (limit1_in f D l x0)->(limit1_in [x:R](Ropp (f x)) D (Ropp l) x0).
+Unfold limit1_in;Unfold limit_in;Simpl;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;Unfold Rminus;
+ Rewrite (Ropp_Ropp l);Rewrite (Rplus_sym (Ropp (f x1)) l);
+ Fold (Rminus l (f x1));Fold (R_dist l (f x1));Rewrite R_dist_sym;
+ Assumption.
+Save.
+
+(*********)
+Lemma limit_minus:(f,g:R->R)(D:R->Prop)(l,l':R)(x0:R)
+ (limit1_in f D l x0)->(limit1_in g D l' x0)->
+ (limit1_in [x:R](Rminus (f x) (g x)) D (Rminus l l') x0).
+Intros;Unfold Rminus;Generalize (limit_Ropp g D l' x0 H0);Intro;
+ Exact (limit_plus f [x:R](Ropp (g x)) D l (Ropp l') x0 H H1).
+Save.
+
+(*********)
+Lemma limit_free:(f:R->R)(D:R->Prop)(x:R)(x0:R)
+ (limit1_in [h:R](f x) D (f x) x0).
+Unfold limit1_in;Unfold limit_in;Simpl;Intros;Split with eps;Split;
+ Auto;Intros;Elim (R_dist_refl (f x) (f x));Intros a b;
+ Rewrite (b (refl_eqT R (f x)));Unfold Rgt in H;Assumption.
+Save.
+
+(*********)
+Lemma limit_mul:(f,g:R->R)(D:R->Prop)(l,l':R)(x0:R)
+ (limit1_in f D l x0)->(limit1_in g D l' x0)->
+ (limit1_in [x:R](Rmult (f x) (g x)) D (Rmult l l') x0).
+Unfold limit1_in;Unfold limit_in;Simpl;Intros;
+ Elim (Req_EM l R0);Elim (Req_EM l' R0);Intros.
+(**)
+Rewrite H2;Rewrite H3;Rewrite H2 in H0;Rewrite H3 in H;
+ Rewrite (Rmult_Or R0);Unfold R_dist;Unfold R_dist in H H0;
+ Elim (H eps H1);Clear H;Unfold 1 Rgt in H0;Elim (H0 R1 Rlt_R0_R1);
+ Clear H0;Intros;Elim H;Elim H0;Clear H H0;Intros;
+ Split with (Rmin x1 x);Split.
+Elim (Rmin_Rgt x1 x R0);Intros a b;
+ Apply (b (conj (Rgt x1 R0) (Rgt x R0) H H4));Clear a b.
+Intros;Elim H6;Clear H6;Intros;Elim (Rmin_Rgt x1 x (R_dist x2 x0));
+ Intros a b;Clear b;Unfold Rgt in a;Elim (a H7);Clear H7 a;Intros;
+ Unfold R_dist in H7 H8;
+ Generalize (H0 x2 (conj (D x2)
+ (Rlt (Rabsolu (Rminus x2 x0)) x1) H6 H7));
+ Generalize (H5 x2 (conj (D x2)
+ (Rlt (Rabsolu (Rminus x2 x0)) x) H6 H8));Intros;
+ Clear H0 H5 H7 H8;Rewrite (minus_R0 (g x2)) in H9;
+ Rewrite (minus_R0 (f x2)) in H10;
+ Rewrite (minus_R0 (Rmult (f x2) (g x2)));
+ Generalize Rlt_R0_R1;Intro;Fold (Rgt R1 R0) in H0;
+ Rewrite (Rabsolu_mult (f x2) (g x2));
+ Rewrite <-(let (H1,H2)=(Rmult_ne eps) in H1);
+ Generalize (Rabsolu_pos (g x2));Unfold Rle;Intro;Elim H5;Clear H5;
+ Intro.
+Apply (Rmult_lt (Rabsolu (f x2)) eps (Rabsolu (g x2)) R1 H5 H1 H10 H9).
+Rewrite <-H5;Rewrite (Rmult_Or (Rabsolu (f x2)));
+ Rewrite (let (H1,H2)=(Rmult_ne eps) in H1);Unfold Rgt in H1;Assumption.
+(**)
+Rewrite H3;Rewrite H3 in H;Rewrite (Rmult_Ol l');
+ Elim (H0 (Rmult eps (Rinv (Rplus R1 R1))) (eps2_Rgt_R0 eps H1));Intros;
+ Elim H4;Clear H4;Intros;
+ Generalize Rlt_R0_R1;Fold (Rgt R1 R0);Intro;Elim (H R1 H6);Intros;
+ Elim H7;Clear H7;Intros;
+ Cut (Rgt (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l')))) R0).
+Intro;Elim (H (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l')))) H9);
+ Intros;Elim H10;Clear H10;Intros;Split with (Rmin (Rmin x x1) x2);
+ Split.
+Elim (Rmin_Rgt (Rmin x x1) x2 R0);Intros;Elim (Rmin_Rgt x x1 R0);Intros;
+ Generalize (H15 (conj (Rgt x R0) (Rgt x1 R0) H4 H7));Clear H14 H15;
+ Intro;Clear H12;
+ Apply (H13 (conj (Rgt (Rmin x x1) R0) (Rgt x2 R0) H14 H10)).
+Intros;Elim H12;Clear H12;Intros;
+ Elim (Rmin_Rgt (Rmin x x1) x2 (R_dist x3 x0));Intros;Clear H15;
+ Unfold 1 Rgt in H14;Elim (H14 H13);Clear H14;Intros;Unfold Rgt in H15;
+ Clear H13;Elim (Rmin_Rgt x x1 (R_dist x3 x0));Intros;
+ Elim (H13 H14);Clear H14 H13 H16;Intros;Unfold Rgt in H13 H14;
+ Generalize (H5 x3 (conj (D x3) (Rlt (R_dist x3 x0) x) H12 H13));
+ Generalize (H8 x3 (conj (D x3) (Rlt (R_dist x3 x0) x1) H12 H14));
+ Generalize (H11 x3 (conj (D x3) (Rlt (R_dist x3 x0) x2) H12 H15));
+ Clear H5 H8 H11 H15 H13 H14 H12;Intros;Unfold R_dist in H5 H8 H11;
+ Unfold R_dist;Rewrite (minus_R0 (Rmult (f x3) (g x3)));
+ Rewrite (minus_R0 (f x3)) in H5;Rewrite (minus_R0 (f x3)) in H8;
+ Rewrite <-(let (H1,H2)=(Rplus_ne (Rmult (f x3) (g x3))) in H1);
+ Rewrite <-(Rplus_Ropp_l (Rmult (f x3) l'));Rewrite (Rmult_sym (f x3) l');
+ Rewrite <-(Ropp_mul1 l' (f x3));
+ Rewrite (Rmult_sym (Ropp l') (f x3));
+ Rewrite <-(Rplus_assoc (Rmult (f x3) (g x3))
+ (Rmult (f x3) (Ropp l')) (Rmult l' (f x3)));
+ Rewrite <-(Rmult_Rplus_distr (f x3) (g x3) (Ropp l'));Fold (Rminus (g x3) l');
+ Generalize (Rabsolu_triang (Rmult (f x3) (Rminus (g x3) l'))
+ (Rmult l' (f x3)));Intro;
+ Apply (Rle_lt_trans
+ (Rabsolu (Rplus (Rmult (f x3) (Rminus (g x3) l')) (Rmult l' (f x3))))
+ (Rplus (Rabsolu (Rmult (f x3) (Rminus (g x3) l')))
+ (Rabsolu (Rmult l' (f x3)))) eps H12);Clear H12;
+ Rewrite (Rabsolu_mult (f x3) (Rminus (g x3) l'));
+ Rewrite (Rabsolu_mult l' (f x3));
+ Elim (Req_EM (f x3) R0);Intros.
+Rewrite H12;Rewrite Rabsolu_R0;
+ Rewrite (Rmult_Ol (Rabsolu (Rminus (g x3) l')));
+ Rewrite (Rmult_Or (Rabsolu l'));
+ Rewrite (let (H1,H2)=(Rplus_ne R0) in H1);
+ Unfold Rgt in H1;Assumption.
+Generalize (Rabsolu_pos_lt (f x3) H12);Intro;
+ Fold (Rgt (Rabsolu (f x3)) R0) in H13;
+ Generalize (Rmult_lt (Rabsolu (Rminus (g x3) l'))
+ (Rmult eps (Rinv (Rplus R1 R1)))
+ (Rabsolu (f x3)) R1 H13 (eps2_Rgt_R0 eps H1)
+ H11 H8);Intro;
+ Generalize (Rlt_monotony (Rabsolu l') (Rabsolu (f x3))
+ (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l'))))
+ (Rabsolu_pos_lt l' H2) H5);Clear H5 H8 H11 H12 H13;Intro;
+ Rewrite (Rmult_sym (Rabsolu (Rminus (g x3) l')) (Rabsolu (f x3)))
+ in H14;Generalize (Rplus_lt
+ (Rmult (Rabsolu (f x3)) (Rabsolu (Rminus (g x3) l')))
+ (Rmult (Rmult eps (Rinv (Rplus R1 R1))) R1)
+ (Rmult (Rabsolu l') (Rabsolu (f x3)))
+ (Rmult (Rabsolu l')
+ (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l'))))) H14 H5);
+ Clear H5 H14;Intro;
+ Cut eps==(Rplus (Rmult (Rmult eps (Rinv (Rplus R1 R1))) R1)
+ (Rmult (Rabsolu l')
+ (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l')))))).
+Intro;Rewrite <-H8 in H5;Assumption.
+Rewrite (let (H1,H2)=
+ (Rmult_ne (Rmult eps (Rinv (Rplus R1 R1)))) in H1);
+ Cut ~(Rabsolu l')==R0.
+Intro;Rewrite (Rinv_Rmult (Rplus R1 R1) (Rabsolu l'));Auto.
+Rewrite (Rmult_sym (Rabsolu l')
+ (Rmult eps (Rmult (Rinv (Rplus R1 R1)) (Rinv (Rabsolu l')))));
+ Rewrite (Rmult_assoc eps
+ (Rmult (Rinv (Rplus R1 R1)) (Rinv (Rabsolu l')))
+ (Rabsolu l'));
+ Rewrite (Rmult_assoc (Rinv (Rplus R1 R1)) (Rinv (Rabsolu l'))
+ (Rabsolu l'));
+ Rewrite (Rinv_l (Rabsolu l') H8);
+ Rewrite (let (H1,H2)=
+ (Rmult_ne (Rinv (Rplus R1 R1))) in H1);
+ Apply sym_eqT;Apply eps2.
+Apply (imp_not_Req (Rplus R1 R1) R0);Right;Unfold Rgt;Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H11);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H12;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H11 H12).
+Generalize (Rabsolu_pos_lt l' H2);Intro;
+ Apply (imp_not_Req (Rabsolu l') R0);Auto.
+Unfold Rgt;Unfold Rgt in H1;
+ Rewrite <-(Rmult_Or (Rinv (Rmult (Rplus R1 R1) (Rabsolu l'))));
+ Rewrite (Rmult_sym eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l'))));
+ Apply (Rlt_monotony (Rinv (Rmult (Rplus R1 R1) (Rabsolu l'))) R0 eps);
+ Auto.
+Apply (Rlt_Rinv (Rmult (Rplus R1 R1) (Rabsolu l')));
+ Generalize (Rabsolu_pos_lt l' H2);
+ Clear H H0 H3 H4 H5 H7 H8 f g D l x0 x x1;Intro;
+ Rewrite <-(Rmult_Or (Rplus R1 R1));
+ Apply (Rlt_monotony (Rplus R1 R1) R0 (Rabsolu l'));Auto.
+Unfold Rgt in H6;Generalize (Rlt_compatibility R1 R0 R1 H6);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H0;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H6 H0).
+(**)
+Rewrite H2;Rewrite H2 in H0;Rewrite (Rmult_Or l);
+ Elim (H (Rmult eps (Rinv (Rplus R1 R1))) (eps2_Rgt_R0 eps H1));Intros;
+ Elim H4;Clear H4;Intros;
+ Generalize Rlt_R0_R1;Fold (Rgt R1 R0);Intro;Elim (H0 R1 H6);Intros;
+ Elim H7;Clear H7;Intros;
+ Cut (Rgt (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l)))) R0).
+Intro;Elim (H0 (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l)))) H9);
+ Intros;Elim H10;Clear H10;Intros;Split with (Rmin (Rmin x x1) x2);
+ Split.
+Elim (Rmin_Rgt (Rmin x x1) x2 R0);Intros;Elim (Rmin_Rgt x x1 R0);Intros;
+ Generalize (H15 (conj (Rgt x R0) (Rgt x1 R0) H4 H7));Clear H14 H15;
+ Intro;Clear H12;
+ Apply (H13 (conj (Rgt (Rmin x x1) R0) (Rgt x2 R0) H14 H10)).
+Intros;Elim H12;Clear H12;Intros;
+ Elim (Rmin_Rgt (Rmin x x1) x2 (R_dist x3 x0));Intros;Clear H15;
+ Unfold 1 Rgt in H14;Elim (H14 H13);Clear H14;Intros;Unfold Rgt in H15;
+ Clear H13;Elim (Rmin_Rgt x x1 (R_dist x3 x0));Intros;
+ Elim (H13 H14);Clear H14 H13 H16;Intros;Unfold Rgt in H13 H14;
+ Generalize (H5 x3 (conj (D x3) (Rlt (R_dist x3 x0) x) H12 H13));
+ Generalize (H8 x3 (conj (D x3) (Rlt (R_dist x3 x0) x1) H12 H14));
+ Generalize (H11 x3 (conj (D x3) (Rlt (R_dist x3 x0) x2) H12 H15));
+ Clear H5 H8 H11 H15 H13 H14 H12;Intros;Unfold R_dist in H5 H8 H11;
+ Unfold R_dist;Rewrite (minus_R0 (Rmult (f x3) (g x3)));
+ Rewrite (minus_R0 (g x3)) in H8;Rewrite (minus_R0 (g x3)) in H5;
+ Rewrite <-(let (H1,H2)=(Rplus_ne (Rmult (f x3) (g x3))) in H1);
+ Rewrite <-(Rplus_Ropp_l (Rmult (g x3) l));Rewrite (Rmult_sym (g x3) l);
+ Rewrite <-(Ropp_mul1 l (g x3));
+ Rewrite (Rmult_sym (Ropp l) (g x3));
+ Rewrite <-(Rplus_assoc (Rmult (f x3) (g x3))
+ (Rmult (g x3) (Ropp l)) (Rmult l (g x3)));
+ Rewrite (Rmult_sym (f x3) (g x3));
+ Rewrite <-(Rmult_Rplus_distr (g x3) (f x3) (Ropp l));Fold (Rminus (f x3) l);
+ Generalize (Rabsolu_triang (Rmult (g x3) (Rminus (f x3) l))
+ (Rmult l (g x3)));Intro;
+ Apply (Rle_lt_trans
+ (Rabsolu (Rplus (Rmult (g x3) (Rminus (f x3) l)) (Rmult l (g x3))))
+ (Rplus (Rabsolu (Rmult (g x3) (Rminus (f x3) l)))
+ (Rabsolu (Rmult l (g x3)))) eps H12);Clear H12;
+ Rewrite (Rabsolu_mult (g x3) (Rminus (f x3) l));
+ Rewrite (Rabsolu_mult l (g x3));
+ Elim (Req_EM (g x3) R0);Intros.
+Rewrite H12;Rewrite Rabsolu_R0;
+ Rewrite (Rmult_Ol (Rabsolu (Rminus (f x3) l)));
+ Rewrite (Rmult_Or (Rabsolu l));
+ Rewrite (let (H1,H2)=(Rplus_ne R0) in H1);
+ Unfold Rgt in H1;Assumption.
+Generalize (Rabsolu_pos_lt (g x3) H12);Intro;
+ Fold (Rgt (Rabsolu (g x3)) R0) in H13;
+ Generalize (Rmult_lt (Rabsolu (Rminus (f x3) l))
+ (Rmult eps (Rinv (Rplus R1 R1)))
+ (Rabsolu (g x3)) R1 H13 (eps2_Rgt_R0 eps H1)
+ H11 H8);Intro;
+ Generalize (Rlt_monotony (Rabsolu l) (Rabsolu (g x3))
+ (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l))))
+ (Rabsolu_pos_lt l H3) H5);Clear H5 H8 H11 H12 H13;Intro;
+ Rewrite (Rmult_sym (Rabsolu (Rminus (f x3) l)) (Rabsolu (g x3)))
+ in H14;Generalize (Rplus_lt
+ (Rmult (Rabsolu (g x3)) (Rabsolu (Rminus (f x3) l)))
+ (Rmult (Rmult eps (Rinv (Rplus R1 R1))) R1)
+ (Rmult (Rabsolu l) (Rabsolu (g x3)))
+ (Rmult (Rabsolu l)
+ (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l))))) H14 H5);
+ Clear H5 H14;Intro;
+ Cut eps==(Rplus (Rmult (Rmult eps (Rinv (Rplus R1 R1))) R1)
+ (Rmult (Rabsolu l)
+ (Rmult eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l)))))).
+Intro;Rewrite <-H8 in H5;Assumption.
+Rewrite (let (H1,H2)=
+ (Rmult_ne (Rmult eps (Rinv (Rplus R1 R1)))) in H1);
+ Cut ~(Rabsolu l)==R0.
+Intro;Rewrite (Rinv_Rmult (Rplus R1 R1) (Rabsolu l));Auto.
+Rewrite (Rmult_sym (Rabsolu l)
+ (Rmult eps (Rmult (Rinv (Rplus R1 R1)) (Rinv (Rabsolu l)))));
+ Rewrite (Rmult_assoc eps
+ (Rmult (Rinv (Rplus R1 R1)) (Rinv (Rabsolu l)))
+ (Rabsolu l));
+ Rewrite (Rmult_assoc (Rinv (Rplus R1 R1)) (Rinv (Rabsolu l))
+ (Rabsolu l));
+ Rewrite (Rinv_l (Rabsolu l) H8);
+ Rewrite (let (H1,H2)=
+ (Rmult_ne (Rinv (Rplus R1 R1))) in H1);
+ Apply sym_eqT;Apply eps2.
+Apply (imp_not_Req (Rplus R1 R1) R0);Right;Unfold Rgt;Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H11);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H12;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H11 H12).
+Generalize (Rabsolu_pos_lt l H3);Intro;
+ Apply (imp_not_Req (Rabsolu l) R0);Auto.
+Unfold Rgt;Unfold Rgt in H1;
+ Rewrite <-(Rmult_Or (Rinv (Rmult (Rplus R1 R1) (Rabsolu l))));
+ Rewrite (Rmult_sym eps (Rinv (Rmult (Rplus R1 R1) (Rabsolu l))));
+ Apply (Rlt_monotony (Rinv (Rmult (Rplus R1 R1) (Rabsolu l))) R0 eps);
+ Auto.
+Apply (Rlt_Rinv (Rmult (Rplus R1 R1) (Rabsolu l)));
+ Generalize (Rabsolu_pos_lt l H3);
+ Clear H H0 H2 H4 H5 H7 H8 f g D l' x0 x x1;Intro;
+ Rewrite <-(Rmult_Or (Rplus R1 R1));
+ Apply (Rlt_monotony (Rplus R1 R1) R0 (Rabsolu l));Auto.
+Unfold Rgt in H6;Generalize (Rlt_compatibility R1 R0 R1 H6);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H0;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H6 H0).
+(**)
+Cut ~(Rplus (Rplus R1 R1) (Rplus R1 R1))==R0.
+Cut ~(Rabsolu l)==R0.
+Cut ~(Rabsolu l')==R0.
+Intros tl' tl add4;
+ Elim (H (Rmult eps (Rinv (Rplus R1 R1))) (eps2_Rgt_R0 eps H1));
+ Intros;Elim H4;Clear H4;Intros;
+ Generalize Rlt_R0_R1;Fold (Rgt R1 R0);Intro;Elim (H0 R1 H6);Intros;
+ Elim H7;Clear H7;Intros;
+ Cut (Rgt (Rmult eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l)))) R0).
+Cut (Rgt (Rmult eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l')))) R0).
+Intros;Elim (H0 (Rmult eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l)))) H10);
+ Intros;Elim H11;Clear H11;Intros;
+ Elim (H (Rmult eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l')))) H9);
+ Intros;Elim H13;Clear H13;Intros;
+ Split with (Rmin (Rmin x x1) (Rmin x2 x3));Split.
+Elim (Rmin_Rgt (Rmin x x1) (Rmin x2 x3) R0);Intros;
+ Elim (Rmin_Rgt x x1 R0);Elim (Rmin_Rgt x2 x3 R0);Intros;
+ Apply (H16 (conj (Rgt (Rmin x x1) R0) (Rgt (Rmin x2 x3) R0)
+ (H20 (conj (Rgt x R0) (Rgt x1 R0) H4 H7))
+ (H18 (conj (Rgt x2 R0) (Rgt x3 R0) H11 H13)))).
+Intros;Elim H15;Clear H15;Intros;
+ Elim (Rmin_Rgt (Rmin x x1) (Rmin x2 x3) (R_dist x4 x0));Intros;
+ Clear H18;Unfold 1 Rgt in H17;Elim (H17 H16);Clear H17 H16;Intros;
+ Elim (Rmin_Rgt x x1 (R_dist x4 x0));
+ Elim (Rmin_Rgt x2 x3 (R_dist x4 x0));Intros;
+ Unfold 1 Rgt in H17;Unfold 1 Rgt in H20;Elim (H18 H17);Elim (H20 H16);
+ Clear H16 H17 H18 H19 H20 H21;Intros;Unfold Rgt in H16 H17 H18 H19;
+ Generalize (H5 x4 (conj (D x4) (Rlt (R_dist x4 x0) x) H15 H16));
+ Generalize (H8 x4 (conj (D x4) (Rlt (R_dist x4 x0) x1) H15 H17));
+ Generalize (H12 x4 (conj (D x4) (Rlt (R_dist x4 x0) x2) H15 H18));
+ Generalize (H14 x4 (conj (D x4) (Rlt (R_dist x4 x0) x3) H15 H19));
+ Clear H H0 H5 H8 H12 H14 H16 H17 H18 H19;Intros;
+ Unfold R_dist in H H0 H5 H8;Unfold R_dist;
+ Rewrite <-(let (H1,H2)=(Rplus_ne (Rmult (f x4) (g x4))) in H1);
+ Rewrite <-(Rplus_Ropp_l (Rmult (g x4) l));Rewrite (Rmult_sym (g x4) l);
+ Rewrite <-(Ropp_mul1 l (g x4));
+ Rewrite (Rmult_sym (Ropp l) (g x4));
+ Rewrite <-(Rplus_assoc (Rmult (f x4) (g x4))
+ (Rmult (g x4) (Ropp l)) (Rmult l (g x4)));
+ Rewrite (Rmult_sym (f x4) (g x4));
+ Rewrite <-(Rmult_Rplus_distr (g x4) (f x4) (Ropp l));Fold (Rminus (f x4) l);
+ Unfold 1 Rminus;Rewrite (Rmult_sym l l');Rewrite <-(Ropp_mul1 l' l);
+ Rewrite (Rmult_sym (Ropp l') l);
+ Rewrite (Rplus_assoc (Rmult (g x4) (Rminus (f x4) l))
+ (Rmult l (g x4)) (Rmult l (Ropp l')));
+ Rewrite <-(Rmult_Rplus_distr l (g x4) (Ropp l'));
+ Fold (Rminus (g x4) l');
+ Generalize (Rabsolu_triang (Rmult (g x4) (Rminus (f x4) l))
+ (Rmult l (Rminus (g x4) l')));Intro;
+ Apply (Rle_lt_trans
+ (Rabsolu (Rplus (Rmult (g x4) (Rminus (f x4) l))
+ (Rmult l (Rminus (g x4) l'))))
+ (Rplus (Rabsolu (Rmult (g x4) (Rminus (f x4) l)))
+ (Rabsolu (Rmult l (Rminus (g x4) l')))) eps H12);Clear H12;
+ Generalize (Rlt_monotony (Rabsolu l) (Rabsolu (Rminus (g x4) l'))
+ (Rmult eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l))))
+ (Rabsolu_pos_lt l H3) H0);Intro;
+ Generalize (Rlt_monotony (Rabsolu l') (Rabsolu (Rminus (f x4) l))
+ (Rmult eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l'))))
+ (Rabsolu_pos_lt l' H2) H);Intro;
+ Elim (Req_EM (f x4) l);Intros.
+Rewrite H16;Rewrite (eq_Rminus l l (refl_eqT R l));
+ Rewrite (Rmult_Or (g x4));Rewrite Rabsolu_R0;
+ Rewrite (let (H1,H2)=(Rplus_ne (Rabsolu (Rmult l (Rminus (g x4) l'))))
+ in H2);Rewrite (Rabsolu_mult l (Rminus (g x4) l'));
+ Apply (Rlt_trans (Rmult (Rabsolu l) (Rabsolu (Rminus (g x4) l')))
+ (Rmult (Rabsolu l)
+ (Rmult eps
+ (Rinv
+ (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l)))))
+ eps H12);
+ Rewrite (Rmult_sym eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l))));
+ Rewrite <-(Rmult_assoc (Rabsolu l)
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l))) eps);
+ Rewrite (Rinv_Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l) add4
+ tl);
+ Rewrite (Rmult_sym (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rinv (Rabsolu l)));
+ Rewrite <-(Rmult_assoc (Rabsolu l) (Rinv (Rabsolu l))
+ (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))));
+ Rewrite (Rinv_r (Rabsolu l) tl);
+ Rewrite (let (H1,H2)=(Rmult_ne (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))))
+ in H2);Rewrite (Rmult_sym (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ eps);Apply (Rlt_eps4_eps eps H1).
+Generalize Rlt_R0_R1;Fold (Rgt R1 R0);Intro;
+ Cut (Rgt (Rabsolu (Rminus (f x4) l)) R0).
+Intro;
+ Generalize (Rmult_lt (Rabsolu (Rminus (g x4) l')) R1
+ (Rabsolu (Rminus (f x4) l))
+ (Rmult eps (Rinv (Rplus R1 R1)))
+ H18 H17 H5 H8);Intro;
+ Rewrite (let (H1,H2)=(Rmult_ne (Rmult eps (Rinv (Rplus R1 R1)))) in H2)
+ in H19;Generalize (Rplus_lt (Rmult (Rabsolu (Rminus (g x4) l'))
+ (Rabsolu (Rminus (f x4) l)))
+ (Rmult eps (Rinv (Rplus R1 R1)))
+ (Rmult (Rabsolu l') (Rabsolu (Rminus (f x4) l)))
+ (Rmult (Rabsolu l')
+ (Rmult eps (Rinv
+ (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l')))))
+ H19 H14);Intro;
+ Generalize (Rplus_lt (Rmult (Rabsolu l) (Rabsolu (Rminus (g x4) l')))
+ (Rmult (Rabsolu l)
+ (Rmult eps
+ (Rinv
+ (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l)))))
+ (Rplus
+ (Rmult (Rabsolu (Rminus (g x4) l'))
+ (Rabsolu (Rminus (f x4) l)))
+ (Rmult (Rabsolu l') (Rabsolu (Rminus (f x4) l))))
+ (Rplus (Rmult eps (Rinv (Rplus R1 R1)))
+ (Rmult (Rabsolu l')
+ (Rmult eps
+ (Rinv
+ (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l'))))))
+ H12 H20);
+ Clear H5 H8 H12 H14 H19 H20 H H0 H9 H10;Replace (Rplus
+ (Rmult (Rabsolu l)
+ (Rmult eps
+ (Rinv
+ (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l)))))
+ (Rplus (Rmult eps (Rinv (Rplus R1 R1)))
+ (Rmult (Rabsolu l')
+ (Rmult eps
+ (Rinv
+ (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1))
+ (Rabsolu l'))))))) with eps.
+Intro;Rewrite (Rplus_sym (Rabsolu (Rmult (g x4) (Rminus (f x4) l)))
+ (Rabsolu (Rmult l (Rminus (g x4) l'))));
+ Pattern 2 (g x4);
+ Rewrite <-(let (H1,H2)=(Rplus_ne (g x4)) in H1);
+ Rewrite <-(Rplus_Ropp_r l');Rewrite <-(Rplus_assoc (g x4) l' (Ropp l'));
+ Rewrite (Rmult_sym (Rplus (Rplus (g x4) l') (Ropp l'))
+ (Rminus (f x4) l));
+ Rewrite (Rabsolu_mult (Rminus (f x4) l)
+ (Rplus (Rplus (g x4) l') (Ropp l')));
+ Rewrite (Rmult_sym (Rabsolu (Rminus (g x4) l'))
+ (Rabsolu (Rminus (f x4) l))) in H;
+ Rewrite (Rmult_sym (Rabsolu l')
+ (Rabsolu (Rminus (f x4) l))) in H;
+ Rewrite <-(Rmult_Rplus_distr (Rabsolu (Rminus (f x4) l))
+ (Rabsolu (Rminus (g x4) l'))
+ (Rabsolu l')) in H;
+ Rewrite <-(Rabsolu_mult l (Rminus (g x4) l')) in H;
+ Rewrite (Rplus_assoc (g x4) l' (Ropp l'));
+ Rewrite (Rplus_sym l' (Ropp l'));
+ Rewrite <-(Rplus_assoc (g x4) (Ropp l') l');
+ Fold (Rminus (g x4) l');
+ Generalize (Rabsolu_triang (Rminus (g x4) l') l');Intro;
+ Unfold Rle in H0;Elim H0;Clear H0;Intro.
+Unfold Rgt in H18.
+ Generalize (Rlt_monotony (Rabsolu (Rminus (f x4) l))
+ (Rabsolu (Rplus (Rminus (g x4) l') l'))
+ (Rplus (Rabsolu (Rminus (g x4) l')) (Rabsolu l'))
+ H18 H0);Intro;
+ Generalize (Rlt_compatibility (Rabsolu (Rmult l (Rminus (g x4) l')))
+ (Rmult (Rabsolu (Rminus (f x4) l))
+ (Rabsolu (Rplus (Rminus (g x4) l') l')))
+ (Rmult (Rabsolu (Rminus (f x4) l))
+ (Rplus (Rabsolu (Rminus (g x4) l')) (Rabsolu l')))
+ H5);Clear H0 H5;Intro;
+ Apply (Rlt_trans (Rplus (Rabsolu (Rmult l (Rminus (g x4) l')))
+ (Rmult (Rabsolu (Rminus (f x4) l))
+ (Rabsolu (Rplus (Rminus (g x4) l') l'))))
+ (Rplus (Rabsolu (Rmult l (Rminus (g x4) l')))
+ (Rmult (Rabsolu (Rminus (f x4) l))
+ (Rplus (Rabsolu (Rminus (g x4) l')) (Rabsolu l'))))
+ eps H0 H).
+Rewrite H0;Assumption.
+Rewrite (Rinv_Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1))
+ (Rabsolu l) add4 tl);
+ Rewrite (Rinv_Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1))
+ (Rabsolu l') add4 tl');
+ Rewrite (Rmult_sym eps (Rmult (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rinv (Rabsolu l))));
+ Rewrite (Rmult_sym eps (Rmult (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rinv (Rabsolu l'))));
+ Rewrite (Rmult_sym (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rinv (Rabsolu l)));
+ Rewrite (Rmult_sym (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rinv (Rabsolu l')));
+ Rewrite (Rmult_assoc (Rinv (Rabsolu l))
+ (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))) eps);
+ Rewrite (Rmult_assoc (Rinv (Rabsolu l'))
+ (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))) eps);
+ Rewrite <-(Rmult_assoc (Rabsolu l) (Rinv (Rabsolu l))
+ (Rmult (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))) eps));
+ Rewrite <-(Rmult_assoc (Rabsolu l') (Rinv (Rabsolu l'))
+ (Rmult (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))) eps));
+ Rewrite (Rinv_r (Rabsolu l) tl);Rewrite (Rinv_r (Rabsolu l') tl');
+ Rewrite (let (H1,H2)=(Rmult_ne
+ (Rmult (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))) eps)) in H2);
+ Rewrite (Rmult_sym (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))) eps);
+ Rewrite (Rplus_sym (Rmult eps (Rinv (Rplus R1 R1)))
+ (Rmult eps (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))));
+ Rewrite <- (Rplus_assoc
+ (Rmult eps (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))))
+ (Rmult eps (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))))
+ (Rmult eps (Rinv (Rplus R1 R1))));
+ Rewrite eps4;Rewrite eps2;Trivial.
+Unfold Rgt;Apply (Rabsolu_pos_lt (Rminus (f x4) l));Red;Intro;Elim H16;
+ Apply (Rminus_eq (f x4) l H18).
+Apply (Rmult_gt eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l'))) H1);
+ Rewrite (Rinv_Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l')
+ add4 tl');
+ Apply (Rmult_gt (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rinv (Rabsolu l'))).
+Unfold Rgt;Apply (Rlt_Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))).
+Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H9);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H10;
+ Generalize (Rlt_trans R0 R1 (Rplus R1 R1) H9 H10);Intro;
+ Clear H9 H10;
+ Generalize (Rlt_compatibility (Rplus R1 R1) R0 (Rplus R1 R1) H11);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne (Rplus R1 R1)) in H1) in H9;
+ Apply (Rlt_trans R0 (Rplus R1 R1) (Rplus (Rplus R1 R1) (Rplus R1 R1))
+ H11 H9).
+Unfold Rgt;Apply (Rlt_Rinv (Rabsolu l') (Rabsolu_pos_lt l' H2)).
+Apply (Rmult_gt eps
+ (Rinv (Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l))) H1);
+ Rewrite (Rinv_Rmult (Rplus (Rplus R1 R1) (Rplus R1 R1)) (Rabsolu l)
+ add4 tl);
+ Apply (Rmult_gt (Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1)))
+ (Rinv (Rabsolu l))).
+Unfold Rgt;Apply (Rlt_Rinv (Rplus (Rplus R1 R1) (Rplus R1 R1))).
+Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H9);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H10;
+ Generalize (Rlt_trans R0 R1 (Rplus R1 R1) H9 H10);Intro;
+ Clear H9 H10;
+ Generalize (Rlt_compatibility (Rplus R1 R1) R0 (Rplus R1 R1) H11);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne (Rplus R1 R1)) in H1) in H9;
+ Apply (Rlt_trans R0 (Rplus R1 R1) (Rplus (Rplus R1 R1) (Rplus R1 R1))
+ H11 H9).
+Unfold Rgt;Apply (Rlt_Rinv (Rabsolu l) (Rabsolu_pos_lt l H3)).
+Generalize (Rabsolu_pos_lt l' H2);Intro;
+ Apply (imp_not_Req (Rabsolu l') R0);Auto.
+Generalize (Rabsolu_pos_lt l H3);Intro;
+ Apply (imp_not_Req (Rabsolu l) R0);Auto.
+Apply (imp_not_Req (Rplus (Rplus R1 R1) (Rplus R1 R1)) R0);Right;Unfold Rgt;
+ Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H4);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H5;
+ Generalize (Rlt_trans R0 R1 (Rplus R1 R1) H4 H5);Intro;
+ Clear H4 H5;
+ Generalize (Rlt_compatibility (Rplus R1 R1) R0 (Rplus R1 R1) H6);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne (Rplus R1 R1)) in H1) in H4;
+ Apply (Rlt_trans R0 (Rplus R1 R1) (Rplus (Rplus R1 R1) (Rplus R1 R1))
+ H6 H4).
+Save.
+
+(*********)
+Definition adhDa:(R->Prop)->R->Prop:=[D:R->Prop][a:R]
+ (alp:R)(Rgt alp R0)->(EXT x:R | (D x)/\(Rlt (R_dist x a) alp)).
+
+(*********)
+Lemma single_limit:(f:R->R)(D:R->Prop)(l:R)(l':R)(x0:R)
+ (adhDa D x0)->(limit1_in f D l x0)->(limit1_in f D l' x0)->l==l'.
+Unfold limit1_in; Unfold limit_in; Intros.
+Cut (eps:R)(Rgt eps R0)->(Rlt (dist R_met l l')
+ (Rmult (Rplus R1 R1) eps)).
+Clear H0 H1;Unfold dist; Unfold R_met; Unfold R_dist;
+ Unfold Rabsolu;Case (case_Rabsolu (Rminus l l')); Intros.
+Cut (eps:R)(Rgt eps R0)->(Rlt (Ropp (Rminus l l')) eps).
+Intro;Generalize (prop_eps (Ropp (Rminus l l')) H1);Intro;
+ Generalize (Rlt_RoppO (Rminus l l') r); Intro;Unfold Rgt in H3;
+ Generalize (Rle_not (Ropp (Rminus l l')) R0 H3); Intro;
+ ElimType False; Auto.
+Intros;Cut (Rgt (Rmult eps (Rinv (Rplus R1 R1))) R0).
+Intro;Generalize (H0 (Rmult eps (Rinv (Rplus R1 R1))) H2);
+ Rewrite (Rmult_sym eps (Rinv (Rplus R1 R1)));
+ Rewrite <- (Rmult_assoc (Rplus R1 R1) (Rinv (Rplus R1 R1)) eps);
+ Rewrite (Rinv_r (Rplus R1 R1)).
+Elim (Rmult_ne eps);Intros a b;Rewrite b;Clear a b;Trivial.
+Apply (imp_not_Req (Rplus R1 R1) R0);Right;Generalize Rlt_R0_R1;Intro;
+ Unfold Rgt;Generalize (Rlt_compatibility R1 R0 R1 H3);Intro;
+ Elim (Rplus_ne R1);Intros a b;Rewrite a in H4;Clear a b;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H3 H4).
+Unfold Rgt;Unfold Rgt in H1;
+ Rewrite (Rmult_sym eps(Rinv (Rplus R1 R1)));
+ Rewrite <-(Rmult_Or (Rinv (Rplus R1 R1)));
+ Apply (Rlt_monotony (Rinv (Rplus R1 R1)) R0 eps);Auto.
+Apply (Rlt_Rinv (Rplus R1 R1));Cut (Rlt R1 (Rplus R1 R1)).
+Intro;Apply (Rlt_trans R0 R1 (Rplus R1 R1) Rlt_R0_R1 H2).
+Generalize (Rlt_compatibility R1 R0 R1 Rlt_R0_R1);Elim (Rplus_ne R1);
+ Intros a b;Rewrite a;Clear a b;Trivial.
+(**)
+Cut (eps:R)(Rgt eps R0)->(Rlt (Rminus l l') eps).
+Intro;Generalize (prop_eps (Rminus l l') H1);Intro;
+ Elim (Rle_le_eq (Rminus l l') R0);Intros a b;Clear b;
+ Apply (Rminus_eq l l');Apply a;Split.
+Assumption.
+Apply (Rle_sym2 R0 (Rminus l l') r).
+Intros;Cut (Rgt (Rmult eps (Rinv (Rplus R1 R1))) R0).
+Intro;Generalize (H0 (Rmult eps (Rinv (Rplus R1 R1))) H2);
+ Rewrite (Rmult_sym eps (Rinv (Rplus R1 R1)));
+ Rewrite <- (Rmult_assoc (Rplus R1 R1) (Rinv (Rplus R1 R1)) eps);
+ Rewrite (Rinv_r (Rplus R1 R1)).
+Elim (Rmult_ne eps);Intros a b;Rewrite b;Clear a b;Trivial.
+Apply (imp_not_Req (Rplus R1 R1) R0);Right;Generalize Rlt_R0_R1;Intro;
+ Unfold Rgt;Generalize (Rlt_compatibility R1 R0 R1 H3);Intro;
+ Elim (Rplus_ne R1);Intros a b;Rewrite a in H4;Clear a b;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H3 H4).
+Unfold Rgt;Unfold Rgt in H1;
+ Rewrite (Rmult_sym eps(Rinv (Rplus R1 R1)));
+ Rewrite <-(Rmult_Or (Rinv (Rplus R1 R1)));
+ Apply (Rlt_monotony (Rinv (Rplus R1 R1)) R0 eps);Auto.
+Apply (Rlt_Rinv (Rplus R1 R1));Cut (Rlt R1 (Rplus R1 R1)).
+Intro;Apply (Rlt_trans R0 R1 (Rplus R1 R1) Rlt_R0_R1 H2).
+Generalize (Rlt_compatibility R1 R0 R1 Rlt_R0_R1);Elim (Rplus_ne R1);
+ 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;Simpl in H1 H4;Generalize (Rmin_Rgt x x1 R0);Intro;Elim H5;
+ Intros;Clear H5;
+ Elim (H (Rmin x x1) (H7 (conj (Rgt x R0) (Rgt x1 R0) 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 (D x2) (Rlt (R_dist x2 x0) x1) H8 H6));
+ Generalize (H4 x2 (conj (D x2) (Rlt (R_dist x2 x0) x) H8 H));
+ Clear H8 H H6 H1 H4 H0 H3;Intros;
+ Generalize (Rplus_lt (R_dist (f x2) l) eps (R_dist (f x2) l') eps
+ H H0); Unfold R_dist;Intros;
+ Rewrite (Rabsolu_minus_sym (f x2) l) in H1;
+ Rewrite (Rmult_sym (Rplus R1 R1) eps);Rewrite (Rmult_Rplus_distr eps R1 R1);
+ Elim (Rmult_ne eps);Intros a b;Rewrite a;Clear a b;
+ Generalize (R_dist_tri l l' (f x2));Unfold R_dist;Intros;
+ Apply (Rle_lt_trans (Rabsolu (Rminus l l'))
+ (Rplus (Rabsolu (Rminus l (f x2))) (Rabsolu (Rminus (f x2) l')))
+ (Rplus eps eps) H3 H1).
+Save.
+
+(*********)
+Lemma limit_comp:(f,g:R->R)(Df,Dg:R->Prop)(l,l':R)(x0:R)
+ (limit1_in f Df l x0)->(limit1_in g Dg l' l)->
+ (limit1_in [x:R](g (f x)) (Dgf Df Dg f) l' x0).
+Unfold limit1_in;Unfold limit_in;Simpl;Intros;
+ Elim (H0 eps H1);Clear H0;Intros;Elim H0;Clear H0;Intros;
+ Elim (H x H0);Clear H;Intros;Elim H;Clear H;Intros;
+ Split with x1;Split;Auto;Intros;
+ Elim H4;Clear H4;Intros;Unfold Dgf in H4;Elim H4;Clear H4;Intros;
+ Generalize (H3 x2 (conj (Df x2) (Rlt (R_dist x2 x0) x1) H4 H5));
+ Intro;Exact (H2 (f x2) (conj (Dg (f x2)) (Rlt (R_dist (f x2) l) x)
+ H6 H7)).
+Save.