aboutsummaryrefslogtreecommitdiffhomepage
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
parent639af2938c15202b12f709eb84790d0b5c627a9f (diff)
theories/Reals
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@511 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--theories/Reals/R_Ifp.v529
-rw-r--r--theories/Reals/Raxioms.v164
-rw-r--r--theories/Reals/Rbase.v1142
-rw-r--r--theories/Reals/Rbasic_fun.v270
-rw-r--r--theories/Reals/Rderiv.v497
-rw-r--r--theories/Reals/Reals.v11
-rw-r--r--theories/Reals/Rfunctions.v79
-rw-r--r--theories/Reals/Rlimit.v1029
-rw-r--r--theories/Reals/TypeSyntax.v25
9 files changed, 3746 insertions, 0 deletions
diff --git a/theories/Reals/R_Ifp.v b/theories/Reals/R_Ifp.v
new file mode 100644
index 000000000..8d5971a4e
--- /dev/null
+++ b/theories/Reals/R_Ifp.v
@@ -0,0 +1,529 @@
+
+(* $Id$ *)
+
+(*********************************************************)
+(* Complements for the reals.Integer and fractional part *)
+(* *)
+(*********************************************************)
+
+Require Export Rbase.
+Require Omega.
+
+(*********************************************************)
+(* Fractional part *)
+(*********************************************************)
+
+(**********)
+Definition Int_part:R->Z:=[r:R](`(up r)-1`).
+
+(**********)
+Definition frac_part:R->R:=[r:R](Rminus r (IZR (Int_part r))).
+
+(**********)
+Lemma tech_up:(r:R)(z:Z)(Rlt r (IZR z))->(Rle (IZR z) (Rplus r R1))->
+ z=(up r).
+Intros;Generalize (archimed r);Intro;Elim H1;Intros;Clear H1;
+ Unfold Rgt in H2;Unfold Rminus in H3;
+Generalize (Rle_compatibility r (Rplus (IZR (up r))
+ (Ropp r)) R1 H3);Intro;Clear H3;
+ Rewrite (Rplus_sym (IZR (up r)) (Ropp r)) in H1;
+ Rewrite <-(Rplus_assoc r (Ropp r) (IZR (up r))) in H1;
+ Rewrite (Rplus_Ropp_r r) in H1;Elim (Rplus_ne (IZR (up r)));Intros a b;
+ Rewrite b in H1;Clear a b;Apply (single_z_r_R1 r z (up r));Auto with zarith real.
+Save.
+
+(**********)
+Lemma up_tech:(r:R)(z:Z)(Rle (IZR z) r)->(Rlt r (IZR `z+1`))->
+ `z+1`=(up r).
+Intros;Generalize (Rle_compatibility R1 (IZR z) r H);Intro;Clear H;
+ Rewrite (Rplus_sym R1 (IZR z)) in H1;Rewrite (Rplus_sym R1 r) in H1;
+ Cut (R1==(IZR `1`));Auto with zarith real.
+Intro;Generalize H1;Pattern 1 R1;Rewrite H;Intro;Clear H H1;
+ Rewrite <-(plus_IZR z `1`) in H2;Apply (tech_up r `z+1`);Auto with zarith real.
+Save.
+
+(**********)
+Lemma fp_R0:(frac_part R0)==R0.
+Unfold frac_part; Unfold Int_part; Unfold up; Elim (archimed R0);
+ Intros; Unfold Rminus;
+ Elim (Rplus_ne (Ropp (IZR `(up R0)-1`))); Intros a b;
+ Rewrite b;Clear a b;Rewrite <- Z_R_minus;Cut (up R0)=`1`.
+Intro;Rewrite H1;
+ Rewrite (eq_Rminus (IZR `1`) (IZR `1`) (refl_eqT R (IZR `1`)));
+ Apply Ropp_O.
+Elim (archimed R0);Intros;Clear H2;Unfold Rgt in H1;
+ Rewrite (minus_R0 (IZR (up R0))) in H0;
+ Generalize (lt_O_IZR (up R0) H1);Intro;Clear H1;
+ Generalize (le_IZR_R1 (up R0) H0);Intro;Clear H H0;Omega.
+Save.
+
+(**********)
+Lemma for_base_fp:(r:R)(Rgt (Rminus (IZR (up r)) r) R0)/\
+ (Rle (Rminus (IZR (up r)) r) R1).
+Intro; Split;
+ Cut (Rgt (IZR (up r)) r)/\(Rle (Rminus (IZR (up r)) r) R1).
+Intro; Elim H; Intros.
+Apply (Rgt_minus (IZR (up r)) r H0).
+Apply archimed.
+Intro; Elim H; Intros.
+Exact H1.
+Apply archimed.
+Save.
+
+(**********)
+Lemma base_fp:(r:R)(Rge (frac_part r) R0)/\(Rlt (frac_part r) R1).
+Intro; Unfold frac_part; Unfold Int_part; Split.
+ (*sup a O*)
+Cut (Rge (Rminus r (IZR (up r))) (Ropp R1)).
+Rewrite <- Z_R_minus;Simpl;Intro; Unfold Rminus;
+ Rewrite Ropp_distr1;Rewrite <-Rplus_assoc;
+ Fold (Rminus r (IZR (up r)));
+ Fold (Rminus (Rminus r (IZR (up r))) (Ropp R1));
+ Apply Rge_minus;Auto with zarith real.
+Rewrite <- Ropp_distr2;Apply Rle_Ropp;Elim (for_base_fp r); Auto with zarith real.
+ (*inf a 1*)
+Cut (Rlt (Rminus r (IZR (up r))) R0).
+Rewrite <- Z_R_minus; Simpl;Intro; Unfold Rminus;
+ Rewrite Ropp_distr1;Rewrite <-Rplus_assoc;
+ Fold (Rminus r (IZR (up r)));Rewrite Ropp_Ropp;
+ Elim (Rplus_ne R1);Intros a b;Pattern 2 R1;Rewrite <-a;Clear a b;
+ Rewrite (Rplus_sym (Rminus r (IZR (up r))) R1);
+ Apply Rlt_compatibility;Auto with zarith real.
+Elim (for_base_fp r);Intros;Rewrite <-Ropp_O;
+ Rewrite<-Ropp_distr2;Apply Rgt_Ropp;Auto with zarith real.
+Save.
+
+(*********************************************************)
+(* Properties *)
+(*********************************************************)
+
+(**********)
+Lemma base_Int_part:(r:R)(Rle (IZR (Int_part r)) r)/\
+ (Rgt (Rminus (IZR (Int_part r)) r) (Ropp R1)).
+Intro;Unfold Int_part;Elim (archimed r);Intros;Unfold up.
+Split;Rewrite <- (Z_R_minus (up r) `1`);Simpl.
+Generalize (Rle_minus (Rminus (IZR (up r)) r) R1 H0);Intro;
+ Unfold Rminus in H1;
+ Rewrite (Rplus_assoc (IZR (up r)) (Ropp r) (Ropp R1)) in
+ H1;Rewrite (Rplus_sym (Ropp r) (Ropp R1)) in H1;
+ Rewrite <-(Rplus_assoc (IZR (up r)) (Ropp R1) (Ropp r)) in
+ H1;Fold (Rminus (IZR (up r)) R1) in H1;
+ Fold (Rminus (Rminus (IZR (up r)) R1) r) in H1;
+ Apply Rminus_le;Auto with zarith real.
+Generalize (Rgt_plus_plus_r (Ropp R1) (IZR (up r)) r H);Intro;
+ Rewrite (Rplus_sym (Ropp R1) (IZR (up r))) in H1;
+ Generalize (Rgt_plus_plus_r (Ropp r)
+ (Rplus (IZR (up r)) (Ropp R1)) (Rplus (Ropp R1) r) H1);
+ Intro;Clear H H0 H1;
+ Rewrite (Rplus_sym (Ropp r) (Rplus (IZR (up r)) (Ropp R1)))
+ in H2;Fold (Rminus (IZR (up r)) R1) in H2;
+ Fold (Rminus (Rminus (IZR (up r)) R1) r) in H2;
+ Rewrite (Rplus_sym (Ropp r) (Rplus (Ropp R1) r)) in H2;
+ Rewrite (Rplus_assoc (Ropp R1) r (Ropp r)) in H2;
+ Rewrite (Rplus_Ropp_r r) in H2;Elim (Rplus_ne (Ropp R1));Intros a b;
+ Rewrite a in H2;Clear a b;Auto with zarith real.
+Save.
+
+(**********)
+Lemma fp_nat:(r:R)(frac_part r)==R0->(Ex [c:Z](r==(IZR c))).
+Unfold frac_part;Intros;Split with (Int_part r);Apply Rminus_eq; Auto with zarith real.
+Save.
+
+(**********)
+Lemma R0_fp_O:(r:R)~R0==(frac_part r)->~R0==r.
+Red;Intros;Rewrite <- H0 in H;Generalize fp_R0;Intro;Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rminus_Int_part1:(r1,r2:R)(Rge (frac_part r1) (frac_part r2))->
+ (Int_part (Rminus r1 r2))=(Zminus (Int_part r1) (Int_part r2)).
+Intros;Elim (base_fp r1);Elim (base_fp r2);Intros;
+ Generalize (Rle_sym2 R0 (frac_part r2) H0);Intro;Clear H0;
+ Generalize (Rle_Ropp R0 (frac_part r2) H4);Intro;Clear H4;
+ Rewrite (Ropp_O) in H0;
+ Generalize (Rle_sym2 (Ropp (frac_part r2)) R0 H0);Intro;Clear H0;
+ Generalize (Rle_sym2 R0 (frac_part r1) H2);Intro;Clear H2;
+ Generalize (Rlt_Ropp (frac_part r2) R1 H1);Intro;Clear H1;
+ Unfold Rgt in H2;
+ Generalize (sum_inequa_Rle_lt R0 (frac_part r1) R1 (Ropp R1)
+ (Ropp (frac_part r2)) R0 H0 H3 H2 H4);Intro;Elim H1;Intros;
+ Clear H1;Elim (Rplus_ne R1);Intros a b;Rewrite a in H6;Clear a b H5;
+ Generalize (Rge_minus (frac_part r1) (frac_part r2) H);Intro;Clear H;
+ Fold (Rminus (frac_part r1) (frac_part r2)) in H6;
+ Generalize (Rle_sym2 R0 (Rminus (frac_part r1) (frac_part r2)) H1);
+ Intro;Clear H1 H3 H4 H0 H2;Unfold frac_part in H6 H;
+ Unfold Rminus in H6 H;
+ Rewrite (Ropp_distr1 r2 (Ropp (IZR (Int_part r2)))) in H;
+ Rewrite (Ropp_Ropp (IZR (Int_part r2))) in H;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus (Ropp r2) (IZR (Int_part r2)))) in H;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp r2)
+ (IZR (Int_part r2))) in H;
+ Rewrite (Rplus_sym (Ropp (IZR (Int_part r1))) (Ropp r2)) in H;
+ Rewrite (Rplus_assoc (Ropp r2) (Ropp (IZR (Int_part r1)))
+ (IZR (Int_part r2))) in H;
+ Rewrite <-(Rplus_assoc r1 (Ropp r2)
+ (Rplus (Ropp (IZR (Int_part r1))) (IZR (Int_part r2)))) in H;
+ Rewrite (Rplus_sym (Ropp (IZR (Int_part r1))) (IZR (Int_part r2))) in H;
+ Fold (Rminus r1 r2) in H;Fold (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))
+ in H;Generalize (Rle_compatibility
+ (Rminus (IZR (Int_part r1)) (IZR (Int_part r2))) R0
+ (Rplus (Rminus r1 r2) (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))) H);Intro;
+ Clear H;Rewrite (Rplus_sym (Rminus r1 r2)
+ (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))) in H0;
+ Rewrite <-(Rplus_assoc (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Rminus (IZR (Int_part r2)) (IZR (Int_part r1))) (Rminus r1 r2)) in H0;
+ Unfold Rminus in H0;Fold (Rminus r1 r2) in H0;
+ Rewrite (Rplus_assoc (IZR (Int_part r1)) (Ropp (IZR (Int_part r2)))
+ (Rplus (IZR (Int_part r2)) (Ropp (IZR (Int_part r1))))) in H0;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r2))) (IZR (Int_part r2))
+ (Ropp (IZR (Int_part r1)))) in H0;Rewrite (Rplus_Ropp_l (IZR (Int_part r2))) in
+ H0;Elim (Rplus_ne (Ropp (IZR (Int_part r1))));Intros a b;Rewrite b in H0;
+ Clear a b;
+ Elim (Rplus_ne (Rplus (IZR (Int_part r1)) (Ropp (IZR (Int_part r2)))));
+ Intros a b;Rewrite a in H0;Clear a b;Rewrite (Rplus_Ropp_r (IZR (Int_part r1)))
+ in H0;Elim (Rplus_ne (Rminus r1 r2));Intros a b;Rewrite b in H0;
+ Clear a b;Fold (Rminus (IZR (Int_part r1)) (IZR (Int_part r2))) in H0;
+ Rewrite (Ropp_distr1 r2 (Ropp (IZR (Int_part r2)))) in H6;
+ Rewrite (Ropp_Ropp (IZR (Int_part r2))) in H6;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus (Ropp r2) (IZR (Int_part r2)))) in H6;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp r2)
+ (IZR (Int_part r2))) in H6;
+ Rewrite (Rplus_sym (Ropp (IZR (Int_part r1))) (Ropp r2)) in H6;
+ Rewrite (Rplus_assoc (Ropp r2) (Ropp (IZR (Int_part r1)))
+ (IZR (Int_part r2))) in H6;
+ Rewrite <-(Rplus_assoc r1 (Ropp r2)
+ (Rplus (Ropp (IZR (Int_part r1))) (IZR (Int_part r2)))) in H6;
+ Rewrite (Rplus_sym (Ropp (IZR (Int_part r1))) (IZR (Int_part r2))) in H6;
+ Fold (Rminus r1 r2) in H6;Fold (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))
+ in H6;Generalize (Rlt_compatibility
+ (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Rplus (Rminus r1 r2) (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))) R1 H6);
+ Intro;Clear H6;
+ Rewrite (Rplus_sym (Rminus r1 r2)
+ (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))) in H;
+ Rewrite <-(Rplus_assoc (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Rminus (IZR (Int_part r2)) (IZR (Int_part r1))) (Rminus r1 r2)) in H;
+ Rewrite <-(Ropp_distr2 (IZR (Int_part r1)) (IZR (Int_part r2))) in H;
+ Rewrite (Rplus_Ropp_r (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))) in H;
+ Elim (Rplus_ne (Rminus r1 r2));Intros a b;Rewrite b in H;Clear a b;
+ Rewrite (Z_R_minus (Int_part r1) (Int_part r2)) in H0;
+ Rewrite (Z_R_minus (Int_part r1) (Int_part r2)) in H;
+ Cut R1==(IZR `1`);Auto with zarith real.
+Intro;Rewrite H1 in H;Clear H1;
+ Rewrite <-(plus_IZR `(Int_part r1)-(Int_part r2)` `1`) in H;
+ Generalize (up_tech (Rminus r1 r2) `(Int_part r1)-(Int_part r2)`
+ H0 H);Intros;Clear H H0;Unfold 1 Int_part;Omega.
+Save.
+
+(**********)
+Lemma Rminus_Int_part2:(r1,r2:R)(Rlt (frac_part r1) (frac_part r2))->
+ (Int_part (Rminus r1 r2))=(Zminus (Zminus (Int_part r1) (Int_part r2)) `1`).
+Intros;Elim (base_fp r1);Elim (base_fp r2);Intros;
+ Generalize (Rle_sym2 R0 (frac_part r2) H0);Intro;Clear H0;
+ Generalize (Rle_Ropp R0 (frac_part r2) H4);Intro;Clear H4;
+ Rewrite (Ropp_O) in H0;
+ Generalize (Rle_sym2 (Ropp (frac_part r2)) R0 H0);Intro;Clear H0;
+ Generalize (Rle_sym2 R0 (frac_part r1) H2);Intro;Clear H2;
+ Generalize (Rlt_Ropp (frac_part r2) R1 H1);Intro;Clear H1;
+ Unfold Rgt in H2;
+ Generalize (sum_inequa_Rle_lt R0 (frac_part r1) R1 (Ropp R1)
+ (Ropp (frac_part r2)) R0 H0 H3 H2 H4);Intro;Elim H1;Intros;
+ Clear H1;Elim (Rplus_ne (Ropp R1));Intros a b;Rewrite b in H5;
+ Clear a b H6;Generalize (Rlt_minus (frac_part r1) (frac_part r2) H);
+ Intro;Clear H;Fold (Rminus (frac_part r1) (frac_part r2)) in H5;
+ Clear H3 H4 H0 H2;Unfold frac_part in H5 H1;
+ Unfold Rminus in H5 H1;
+ Rewrite (Ropp_distr1 r2 (Ropp (IZR (Int_part r2)))) in H5;
+ Rewrite (Ropp_Ropp (IZR (Int_part r2))) in H5;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus (Ropp r2) (IZR (Int_part r2)))) in H5;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp r2)
+ (IZR (Int_part r2))) in H5;
+ Rewrite (Rplus_sym (Ropp (IZR (Int_part r1))) (Ropp r2)) in H5;
+ Rewrite (Rplus_assoc (Ropp r2) (Ropp (IZR (Int_part r1)))
+ (IZR (Int_part r2))) in H5;
+ Rewrite <-(Rplus_assoc r1 (Ropp r2)
+ (Rplus (Ropp (IZR (Int_part r1))) (IZR (Int_part r2)))) in H5;
+ Rewrite (Rplus_sym (Ropp (IZR (Int_part r1))) (IZR (Int_part r2))) in H5;
+ Fold (Rminus r1 r2) in H5;Fold (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))
+ in H5;Generalize (Rlt_compatibility
+ (Rminus (IZR (Int_part r1)) (IZR (Int_part r2))) (Ropp R1)
+ (Rplus (Rminus r1 r2) (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))) H5);
+ Intro;Clear H5;Rewrite (Rplus_sym (Rminus r1 r2)
+ (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))) in H;
+ Rewrite <-(Rplus_assoc (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Rminus (IZR (Int_part r2)) (IZR (Int_part r1))) (Rminus r1 r2)) in H;
+ Unfold Rminus in H;Fold (Rminus r1 r2) in H;
+ Rewrite (Rplus_assoc (IZR (Int_part r1)) (Ropp (IZR (Int_part r2)))
+ (Rplus (IZR (Int_part r2)) (Ropp (IZR (Int_part r1))))) in H;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r2))) (IZR (Int_part r2))
+ (Ropp (IZR (Int_part r1)))) in H;Rewrite (Rplus_Ropp_l (IZR (Int_part r2))) in
+ H;Elim (Rplus_ne (Ropp (IZR (Int_part r1))));Intros a b;Rewrite b in H;
+ Clear a b;Rewrite (Rplus_Ropp_r (IZR (Int_part r1))) in H;
+ Elim (Rplus_ne (Rminus r1 r2));Intros a b;Rewrite b in H;
+ Clear a b;Fold (Rminus (IZR (Int_part r1)) (IZR (Int_part r2))) in H;
+ Fold (Rminus (Rminus (IZR (Int_part r1)) (IZR (Int_part r2))) R1) in H;
+ Rewrite (Ropp_distr1 r2 (Ropp (IZR (Int_part r2)))) in H1;
+ Rewrite (Ropp_Ropp (IZR (Int_part r2))) in H1;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus (Ropp r2) (IZR (Int_part r2)))) in H1;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp r2)
+ (IZR (Int_part r2))) in H1;
+ Rewrite (Rplus_sym (Ropp (IZR (Int_part r1))) (Ropp r2)) in H1;
+ Rewrite (Rplus_assoc (Ropp r2) (Ropp (IZR (Int_part r1)))
+ (IZR (Int_part r2))) in H1;
+ Rewrite <-(Rplus_assoc r1 (Ropp r2)
+ (Rplus (Ropp (IZR (Int_part r1))) (IZR (Int_part r2)))) in H1;
+ Rewrite (Rplus_sym (Ropp (IZR (Int_part r1))) (IZR (Int_part r2))) in H1;
+ Fold (Rminus r1 r2) in H1;Fold (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))
+ in H1;Generalize (Rlt_compatibility
+ (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Rplus (Rminus r1 r2) (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))) R0 H1);
+ Intro;Clear H1;
+ Rewrite (Rplus_sym (Rminus r1 r2)
+ (Rminus (IZR (Int_part r2)) (IZR (Int_part r1)))) in H0;
+ Rewrite <-(Rplus_assoc (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Rminus (IZR (Int_part r2)) (IZR (Int_part r1))) (Rminus r1 r2)) in H0;
+ Rewrite <-(Ropp_distr2 (IZR (Int_part r1)) (IZR (Int_part r2))) in H0;
+ Rewrite (Rplus_Ropp_r (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))) in H0;
+ Elim (Rplus_ne (Rminus r1 r2));Intros a b;Rewrite b in H0;Clear a b;
+ Rewrite <-(Rplus_Ropp_l R1) in H0;
+ Rewrite <-(Rplus_assoc (Rminus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Ropp R1) R1) in H0;
+ Fold (Rminus (Rminus (IZR (Int_part r1)) (IZR (Int_part r2))) R1) in H0;
+ Rewrite (Z_R_minus (Int_part r1) (Int_part r2)) in H0;
+ Rewrite (Z_R_minus (Int_part r1) (Int_part r2)) in H;
+ Cut R1==(IZR `1`);Auto with zarith real.
+Intro;Rewrite H1 in H;Rewrite H1 in H0;Clear H1;
+ Rewrite (Z_R_minus `(Int_part r1)-(Int_part r2)` `1`) in H;
+ Rewrite (Z_R_minus `(Int_part r1)-(Int_part r2)` `1`) in H0;
+ Rewrite <-(plus_IZR `(Int_part r1)-(Int_part r2)-1` `1`) in H0;
+ Generalize (Rlt_le (IZR `(Int_part r1)-(Int_part r2)-1`) (Rminus r1 r2) H);
+ Intro;Clear H;
+ Generalize (up_tech (Rminus r1 r2) `(Int_part r1)-(Int_part r2)-1`
+ H1 H0);Intros;Clear H0 H1;Unfold 1 Int_part;Omega.
+Save.
+
+(**********)
+Lemma Rminus_fp1:(r1,r2:R)(Rge (frac_part r1) (frac_part r2))->
+ (frac_part (Rminus r1 r2))==(Rminus (frac_part r1) (frac_part r2)).
+Intros;Unfold frac_part;
+ Generalize (Rminus_Int_part1 r1 r2 H);Intro;Rewrite -> H0;
+ Rewrite <- (Z_R_minus (Int_part r1) (Int_part r2));Unfold Rminus;
+ Rewrite -> (Ropp_distr1 (IZR (Int_part r1)) (Ropp (IZR (Int_part r2))));
+ Rewrite -> (Ropp_distr1 r2 (Ropp (IZR (Int_part r2))));
+ Rewrite -> (Ropp_Ropp (IZR (Int_part r2)));
+ Rewrite -> (Rplus_assoc r1 (Ropp r2)
+ (Rplus (Ropp (IZR (Int_part r1))) (IZR (Int_part r2))));
+ Rewrite -> (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus (Ropp r2) (IZR (Int_part r2))));
+ Rewrite <- (Rplus_assoc (Ropp r2) (Ropp (IZR (Int_part r1)))
+ (IZR (Int_part r2)));
+ Rewrite <- (Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp r2)
+ (IZR (Int_part r2)));
+ Rewrite -> (Rplus_sym (Ropp r2) (Ropp (IZR (Int_part r1))));Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rminus_fp2:(r1,r2:R)(Rlt (frac_part r1) (frac_part r2))->
+ (frac_part (Rminus r1 r2))==
+ (Rplus (Rminus (frac_part r1) (frac_part r2)) R1).
+Intros;Unfold frac_part;Generalize (Rminus_Int_part2 r1 r2 H);Intro;
+ Rewrite -> H0;
+ Rewrite <- (Z_R_minus (Zminus (Int_part r1) (Int_part r2)) `1`);
+ Rewrite <- (Z_R_minus (Int_part r1) (Int_part r2));Unfold Rminus;
+ Rewrite -> (Ropp_distr1 (Rplus (IZR (Int_part r1)) (Ropp (IZR (Int_part r2))))
+ (Ropp (IZR `1`)));
+ Rewrite -> (Ropp_distr1 r2 (Ropp (IZR (Int_part r2))));
+ Rewrite -> (Ropp_Ropp (IZR `1`));
+ Rewrite -> (Ropp_Ropp (IZR (Int_part r2)));
+ Rewrite -> (Ropp_distr1 (IZR (Int_part r1)));
+ Rewrite -> (Ropp_Ropp (IZR (Int_part r2)));Simpl;
+ Rewrite <- (Rplus_assoc (Rplus r1 (Ropp r2))
+ (Rplus (Ropp (IZR (Int_part r1))) (IZR (Int_part r2))) R1);
+ Rewrite -> (Rplus_assoc r1 (Ropp r2)
+ (Rplus (Ropp (IZR (Int_part r1))) (IZR (Int_part r2))));
+ Rewrite -> (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus (Ropp r2) (IZR (Int_part r2))));
+ Rewrite <- (Rplus_assoc (Ropp r2) (Ropp (IZR (Int_part r1)))
+ (IZR (Int_part r2)));
+ Rewrite <- (Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp r2)
+ (IZR (Int_part r2)));
+ Rewrite -> (Rplus_sym (Ropp r2) (Ropp (IZR (Int_part r1))));Auto with zarith real.
+Save.
+
+(**********)
+Lemma plus_Int_part1:(r1,r2:R)(Rge (Rplus (frac_part r1) (frac_part r2)) R1)->
+ (Int_part (Rplus r1 r2))=(Zplus (Zplus (Int_part r1) (Int_part r2)) `1`).
+Intros;
+ Generalize (Rle_sym2 R1 (Rplus (frac_part r1) (frac_part r2)) H);
+ Intro;Clear H;Elim (base_fp r1);Elim (base_fp r2);Intros;Clear H H2;
+ Generalize (Rlt_compatibility (frac_part r2) (frac_part r1) R1 H3);
+ Intro;Clear H3;
+ Generalize (Rlt_compatibility R1 (frac_part r2) R1 H1);Intro;Clear H1;
+ Rewrite (Rplus_sym R1 (frac_part r2)) in H2;
+ Generalize (Rlt_trans (Rplus (frac_part r2) (frac_part r1))
+ (Rplus (frac_part r2) R1) (Rplus R1 R1) H H2);Intro;Clear H H2;
+ Rewrite (Rplus_sym (frac_part r2) (frac_part r1)) in H1;
+ Unfold frac_part in H0 H1;Unfold Rminus in H0 H1;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus r2 (Ropp (IZR (Int_part r2))))) in H1;
+ Rewrite (Rplus_sym r2 (Ropp (IZR (Int_part r2)))) in H1;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))
+ r2) in H1;
+ Rewrite (Rplus_sym
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))) r2) in H1;
+ Rewrite <-(Rplus_assoc r1 r2
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2))))) in H1;
+ Rewrite <-(Ropp_distr1 (IZR (Int_part r1)) (IZR (Int_part r2))) in H1;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus r2 (Ropp (IZR (Int_part r2))))) in H0;
+ Rewrite (Rplus_sym r2 (Ropp (IZR (Int_part r2)))) in H0;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))
+ r2) in H0;
+ Rewrite (Rplus_sym
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))) r2) in H0;
+ Rewrite <-(Rplus_assoc r1 r2
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2))))) in H0;
+ Rewrite <-(Ropp_distr1 (IZR (Int_part r1)) (IZR (Int_part r2))) in H0;
+ Generalize (Rle_compatibility (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ R1 (Rplus (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))) H0);Intro;
+ Clear H0;
+ Generalize (Rlt_compatibility (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Rplus (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))) (Rplus R1 R1) H1);
+ Intro;Clear H1;
+ Rewrite (Rplus_sym (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))) in H;
+ Rewrite <-(Rplus_assoc (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))) (Rplus r1 r2)) in H;
+ Rewrite (Rplus_Ropp_r (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))) in H;
+ Elim (Rplus_ne (Rplus r1 r2));Intros a b;Rewrite b in H;Clear a b;
+ Rewrite (Rplus_sym (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))) in H0;
+ Rewrite <-(Rplus_assoc (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))) (Rplus r1 r2)) in H0;
+ Rewrite (Rplus_Ropp_r (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))) in H0;
+ Elim (Rplus_ne (Rplus r1 r2));Intros a b;Rewrite b in H0;Clear a b;
+ Rewrite <-(Rplus_assoc (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))) R1 R1) in
+ H0;Cut R1==(IZR `1`);Auto with zarith real.
+Intro;Rewrite H1 in H0;Rewrite H1 in H;Clear H1;
+ Rewrite <-(plus_IZR (Int_part r1) (Int_part r2)) in H;
+ Rewrite <-(plus_IZR (Int_part r1) (Int_part r2)) in H0;
+ Rewrite <-(plus_IZR `(Int_part r1)+(Int_part r2)` `1`) in H;
+ Rewrite <-(plus_IZR `(Int_part r1)+(Int_part r2)` `1`) in H0;
+ Rewrite <-(plus_IZR `(Int_part r1)+(Int_part r2)+1` `1`) in H0;
+ Generalize (up_tech (Rplus r1 r2) `(Int_part r1)+(Int_part r2)+1` H H0);Intro;
+ Clear H H0;Unfold 1 Int_part;Omega.
+Save.
+
+(**********)
+Lemma plus_Int_part2:(r1,r2:R)(Rlt (Rplus (frac_part r1) (frac_part r2)) R1)->
+ (Int_part (Rplus r1 r2))=(Zplus (Int_part r1) (Int_part r2)).
+Intros;Elim (base_fp r1);Elim (base_fp r2);Intros;Clear H1 H3;
+ Generalize (Rle_sym2 R0 (frac_part r2) H0);Intro;Clear H0;
+ Generalize (Rle_sym2 R0 (frac_part r1) H2);Intro;Clear H2;
+ Generalize (Rle_compatibility (frac_part r1) R0 (frac_part r2) H1);
+ Intro;Clear H1;Elim (Rplus_ne (frac_part r1));Intros a b;
+ Rewrite a in H2;Clear a b;Generalize (Rle_trans R0 (frac_part r1)
+ (Rplus (frac_part r1) (frac_part r2)) H0 H2);Intro;Clear H0 H2;
+ Unfold frac_part in H H1;Unfold Rminus in H H1;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus r2 (Ropp (IZR (Int_part r2))))) in H1;
+ Rewrite (Rplus_sym r2 (Ropp (IZR (Int_part r2)))) in H1;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))
+ r2) in H1;
+ Rewrite (Rplus_sym
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))) r2) in H1;
+ Rewrite <-(Rplus_assoc r1 r2
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2))))) in H1;
+ Rewrite <-(Ropp_distr1 (IZR (Int_part r1)) (IZR (Int_part r2))) in H1;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus r2 (Ropp (IZR (Int_part r2))))) in H;
+ Rewrite (Rplus_sym r2 (Ropp (IZR (Int_part r2)))) in H;
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))
+ r2) in H;
+ Rewrite (Rplus_sym
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))) r2) in H;
+ Rewrite <-(Rplus_assoc r1 r2
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2))))) in H;
+ Rewrite <-(Ropp_distr1 (IZR (Int_part r1)) (IZR (Int_part r2))) in H;
+ Generalize (Rle_compatibility (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ R0 (Rplus (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))) H1);Intro;
+ Clear H1;
+ Generalize (Rlt_compatibility (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Rplus (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))) R1 H);
+ Intro;Clear H;
+ Rewrite (Rplus_sym (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))) in H1;
+ Rewrite <-(Rplus_assoc (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))) (Rplus r1 r2)) in H1;
+ Rewrite (Rplus_Ropp_r (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))) in H1;
+ Elim (Rplus_ne (Rplus r1 r2));Intros a b;Rewrite b in H1;Clear a b;
+ Rewrite (Rplus_sym (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))) in H0;
+ Rewrite <-(Rplus_assoc (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))) (Rplus r1 r2)) in H0;
+ Rewrite (Rplus_Ropp_r (Rplus (IZR (Int_part r1)) (IZR (Int_part r2)))) in H0;
+ Elim (Rplus_ne (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))));Intros a b;
+ Rewrite a in H0;Clear a b;Elim (Rplus_ne (Rplus r1 r2));Intros a b;
+ Rewrite b in H0;Clear a b;Cut R1==(IZR `1`);Auto with zarith real.
+Intro;Rewrite H in H1;Clear H;
+ Rewrite <-(plus_IZR (Int_part r1) (Int_part r2)) in H0;
+ Rewrite <-(plus_IZR (Int_part r1) (Int_part r2)) in H1;
+ Rewrite <-(plus_IZR `(Int_part r1)+(Int_part r2)` `1`) in H1;
+ Generalize (up_tech (Rplus r1 r2) `(Int_part r1)+(Int_part r2)` H0 H1);Intro;
+ Clear H0 H1;Unfold 1 Int_part;Omega.
+Save.
+
+(**********)
+Lemma plus_frac_part1:(r1,r2:R)
+ (Rge (Rplus (frac_part r1) (frac_part r2)) R1)->
+ (frac_part (Rplus r1 r2))==
+ (Rminus (Rplus (frac_part r1) (frac_part r2)) R1).
+Intros;Unfold frac_part;
+ Generalize (plus_Int_part1 r1 r2 H);Intro;Rewrite H0;
+ Rewrite (plus_IZR `(Int_part r1)+(Int_part r2)` `1`);
+ Rewrite (plus_IZR (Int_part r1) (Int_part r2));Simpl;Unfold 3 4 Rminus;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus r2 (Ropp (IZR (Int_part r2)))));
+ Rewrite (Rplus_sym r2 (Ropp (IZR (Int_part r2))));
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))
+ r2);
+ Rewrite (Rplus_sym
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))) r2);
+ Rewrite <-(Rplus_assoc r1 r2
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))));
+ Rewrite <-(Ropp_distr1 (IZR (Int_part r1)) (IZR (Int_part r2)));
+ Unfold Rminus;
+ Rewrite (Rplus_assoc (Rplus r1 r2)
+ (Ropp (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))))
+ (Ropp R1));
+ Rewrite <-(Ropp_distr1 (Rplus (IZR (Int_part r1)) (IZR (Int_part r2))) R1);
+ Trivial with zarith real.
+Save.
+
+(**********)
+Lemma plus_frac_part2:(r1,r2:R)
+ (Rlt (Rplus (frac_part r1) (frac_part r2)) R1)->
+(frac_part (Rplus r1 r2))==(Rplus (frac_part r1) (frac_part r2)).
+Intros;Unfold frac_part;
+ Generalize (plus_Int_part2 r1 r2 H);Intro;Rewrite H0;
+ Rewrite (plus_IZR (Int_part r1) (Int_part r2));Unfold 2 3 Rminus;
+ Rewrite (Rplus_assoc r1 (Ropp (IZR (Int_part r1)))
+ (Rplus r2 (Ropp (IZR (Int_part r2)))));
+ Rewrite (Rplus_sym r2 (Ropp (IZR (Int_part r2))));
+ Rewrite <-(Rplus_assoc (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))
+ r2);
+ Rewrite (Rplus_sym
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))) r2);
+ Rewrite <-(Rplus_assoc r1 r2
+ (Rplus (Ropp (IZR (Int_part r1))) (Ropp (IZR (Int_part r2)))));
+ Rewrite <-(Ropp_distr1 (IZR (Int_part r1)) (IZR (Int_part r2)));Unfold Rminus;
+ Trivial with zarith real.
+Save.
diff --git a/theories/Reals/Raxioms.v b/theories/Reals/Raxioms.v
new file mode 100644
index 000000000..579672866
--- /dev/null
+++ b/theories/Reals/Raxioms.v
@@ -0,0 +1,164 @@
+
+(* $Id$ *)
+
+(*********************************************************)
+(* Axiomatisation of the classical reals *)
+(* *)
+(*********************************************************)
+
+Require Export ZArith.
+Require Export TypeSyntax.
+
+Parameter R:Type.
+Parameter R0:R.
+Parameter R1:R.
+Parameter Rplus:R->R->R.
+Parameter Rmult:R->R->R.
+Parameter Ropp:R->R.
+Parameter Rinv:R->R.
+Parameter Rlt:R->R->Prop.
+Parameter up:R->Z.
+(*********************************************************)
+
+(**********)
+Definition Rgt:R->R->Prop:=[r1,r2:R](Rlt r2 r1).
+
+(**********)
+Definition Rle:R->R->Prop:=[r1,r2:R]((Rlt r1 r2)\/(r1==r2)).
+
+(**********)
+Definition Rge:R->R->Prop:=[r1,r2:R]((Rgt r1 r2)\/(r1==r2)).
+
+(**********)
+Definition Rminus:R->R->R:=[r1,r2:R](Rplus r1 (Ropp r2)).
+
+(*********************************************************)
+(* Field axioms *)
+(*********************************************************)
+(*********************************************************)
+(* Addition *)
+(*********************************************************)
+
+(**********)
+Axiom Rplus_sym:(r1,r2:R)((Rplus r1 r2)==(Rplus r2 r1)).
+
+(**********)
+Axiom Rplus_assoc:(r1,r2,r3:R)
+ ((Rplus (Rplus r1 r2) r3)==(Rplus r1 (Rplus r2 r3))).
+
+(**********)
+Axiom Rplus_Ropp_r:(r:R)((Rplus r (Ropp r))==R0).
+Hints Resolve Rplus_Ropp_r : real v62.
+
+(**********)
+Axiom Rplus_ne:(r:R)(((Rplus r R0)==r)/\((Rplus R0 r)==r)).
+Hints Resolve Rplus_ne : real v62.
+
+(***********************************************************)
+(* Multiplication *)
+(***********************************************************)
+
+(**********)
+Axiom Rmult_sym:(r1,r2:R)((Rmult r1 r2)==(Rmult r2 r1)).
+Hints Resolve Rmult_sym : real v62.
+
+(**********)
+Axiom Rmult_assoc:(r1,r2,r3:R)
+ ((Rmult (Rmult r1 r2) r3)==(Rmult r1 (Rmult r2 r3))).
+Hints Resolve Rmult_assoc : real v62.
+
+(**********)
+Axiom Rinv_l:(r:R)(~(r==R0))->((Rmult (Rinv r) r)==R1).
+
+(**********)
+Axiom Rmult_ne:(r:R)(((Rmult r R1)==r)/\((Rmult R1 r)==r)).
+Hints Resolve Rmult_ne : real v62.
+
+(**********)
+Axiom R1_neq_R0:(~R1==R0).
+
+(*********************************************************)
+(* Distributivity *)
+(*********************************************************)
+
+(**********)
+Axiom Rmult_Rplus_distr:(r1,r2,r3:R)
+ ((Rmult r1 (Rplus r2 r3))==(Rplus (Rmult r1 r2) (Rmult r1 r3))).
+Hints Resolve Rmult_Rplus_distr : real v62.
+
+(*********************************************************)
+(* Order axioms *)
+(*********************************************************)
+(*********************************************************)
+(* Total Order *)
+(*********************************************************)
+
+(**********)
+Axiom total_order_T:(r1,r2:R)(sumorT (sumboolT (Rlt r1 r2) (r1==r2))
+ (Rgt r1 r2)).
+
+(*********************************************************)
+(* Lower *)
+(*********************************************************)
+
+(**********)
+Axiom Rlt_antisym:(r1,r2:R)(Rlt r1 r2) -> ~(Rlt r2 r1).
+
+(**********)
+Axiom Rlt_trans:(r1,r2,r3:R)
+ (Rlt r1 r2)->(Rlt r2 r3)->(Rlt r1 r3).
+
+(**********)
+Axiom Rlt_compatibility:(r,r1,r2:R)(Rlt r1 r2)->
+ (Rlt (Rplus r r1) (Rplus r r2)).
+
+(**********)
+Axiom Rlt_monotony:(r,r1,r2:R)(Rlt R0 r)->(Rlt r1 r2)->
+ (Rlt (Rmult r r1) (Rmult r r2)).
+
+(**********************************************************)
+(* Injection from N to R *)
+(**********************************************************)
+
+(**********)
+Fixpoint INR [n:nat]:R:=(Cases n of
+ O => R0
+ |(S O) => R1
+ |(S n) => (Rplus (INR n) R1)
+ end).
+
+(**********************************************************)
+(* Injection from Z to R *)
+(**********************************************************)
+
+(**********)
+Definition IZR:Z->R:=[z:Z](Cases z of
+ ZERO => R0
+ |(POS n) => (INR (convert n))
+ |(NEG n) => (Ropp (INR (convert n)))
+ end).
+
+(**********************************************************)
+(* R Archimedian *)
+(**********************************************************)
+
+(**********)
+Axiom archimed:(r:R)(Rgt (IZR (up r)) r)/\
+ (Rle (Rminus (IZR (up r)) r) R1).
+
+(**********************************************************)
+(* R Complete *)
+(**********************************************************)
+
+(**********)
+Definition is_upper_bound:=[E:R->Prop][m:R](x:R)(E x)->(Rle x m).
+
+(**********)
+Definition bound:=[E:R->Prop](ExT [m:R](is_upper_bound E m)).
+
+(**********)
+Definition is_lub:=[E:R->Prop][m:R]
+ (is_upper_bound E m)/\(b:R)(is_upper_bound E b)->(Rlt m b).
+
+(**********)
+Axiom complet:(E:R->Prop)((bound E)->(ExT [m:R](is_lub E m))).
diff --git a/theories/Reals/Rbase.v b/theories/Reals/Rbase.v
new file mode 100644
index 000000000..bfbab59bd
--- /dev/null
+++ b/theories/Reals/Rbase.v
@@ -0,0 +1,1142 @@
+
+(* $Id$ *)
+
+(**************************************************************************)
+(* Basic lemmas for the classical reals numbers *)
+(**************************************************************************)
+
+Require Export Raxioms.
+Require Export ZArithRing.
+Require Classical_Prop.
+Require Omega.
+
+(**************************************************************************)
+(* On commence par instancier la tactique Ring sur les réels *)
+(**************************************************************************)
+
+
+Lemma RTheory : (Ring_Theory Rplus Rmult R1 R0 Ropp [x,y:R]false).
+ Split.
+ Exact Rplus_sym.
+ Symmetry; Apply Rplus_assoc.
+ Exact Rmult_sym.
+ Symmetry; Apply Rmult_assoc.
+ Intro; Apply (let (H1,H2)=(Rplus_ne n) in H2).
+ Intro; Apply (let (H1,H2)=(Rmult_ne n) in H2).
+ Exact Rplus_Ropp_r.
+ Intros.
+ Rewrite Rmult_sym.
+ Rewrite (Rmult_sym n p).
+ Rewrite (Rmult_sym m p).
+ Apply Rmult_Rplus_distr.
+ Intros; Contradiction.
+Defined.
+
+Add Abstract Ring R Rplus Rmult R1 R0 Ropp [x,y:R]false RTheory.
+
+(**************************************************************************)
+(* Basic Lemmas *)
+(**************************************************************************)
+
+(**********)
+Lemma Req_EM:(r1,r2:R)(r1==r2)\/(~r1==r2).
+Intros;Apply (classic r1==r2).
+Save.
+Hints Resolve Req_EM : real v62.
+
+(**********)
+Lemma total_order:(r1,r2:R)((Rlt r1 r2)\/(r1==r2)\/(Rgt r1 r2)).
+Intros;Elim (total_order_T r1 r2);Intro;Auto.
+Elim y;Intro;Auto.
+Save.
+
+(**********)
+Lemma not_Req:(r1,r2:R)(~(r1==r2))->((Rlt r1 r2)\/(Rgt r1 r2)).
+Intros; Case (total_order r1 r2); Intros.
+Left; Exact H0.
+Case H0; Intros.
+Absurd r1==r2; Auto with zarith real.
+Right; Exact H1.
+Save.
+
+(**********)
+Lemma imp_not_Req:(r1,r2:R)((Rlt r1 r2)\/(Rgt r1 r2))->(~(r1==r2)).
+Intros; Elim H; Intro; Clear H;Red; Intro;Rewrite H in H0.
+Generalize (Rlt_antisym r2 r2 H0); Intro; Auto with zarith real.
+Unfold Rgt in H0;Generalize (Rlt_antisym r2 r2 H0);Intro; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_antirefl:(r:R)~(Rlt r r).
+ Red; Intros; Apply (Rlt_antisym r r H); Auto with zarith real.
+Save.
+
+(**********)
+Lemma total_order_Rlt:(r1,r2:R)(sumboolT (Rlt r1 r2) ~(Rlt r1 r2)).
+Intros;Elim (total_order_T r1 r2);Intros.
+Elim y;Intro.
+Left;Assumption.
+Right;Rewrite y0;Apply Rlt_antirefl.
+Right;Unfold Rgt in y;Apply Rlt_antisym;Assumption.
+Save.
+
+(**********)
+Lemma total_order_Rle:(r1,r2:R)(sumboolT (Rle r1 r2) ~(Rle r1 r2)).
+Intros;Elim (total_order_T r1 r2);Intros.
+Left;Unfold Rle;Elim y;Intro;Auto.
+Right;Red;Intro;Elim H;Intro.
+Unfold Rgt in y;Generalize (Rlt_antisym r2 r1 y);Auto.
+Generalize (imp_not_Req r1 r2 (or_intror (Rlt r1 r2) (Rgt r1 r2) y));Auto.
+Save.
+
+(**********)
+Lemma total_order_Rgt:(r1,r2:R)(sumboolT (Rgt r1 r2) ~(Rgt r1 r2)).
+Unfold Rgt;Intros;Apply total_order_Rlt.
+Save.
+
+(**********)
+Lemma total_order_Rge:(r1,r2:R)(sumboolT (Rge r1 r2) ~(Rge r1 r2)).
+Unfold Rge;Unfold Rgt;Intros;Elim (total_order_Rle r2 r1);Intro.
+Left;Unfold Rle in y;Elim y;Auto.
+Right;Unfold Rle in y;Red;Intro;Elim H;Intro.
+Elim y;Left;Assumption.
+Elim y;Right;Auto.
+Save.
+
+(*********************************************************)
+(* Field Lemmas *)
+(*********************************************************)
+(*********************************************************)
+(* Addition *)
+(*********************************************************)
+
+(**********)
+Lemma Rplus_Ropp_l:(r:R)((Rplus (Ropp r) r)==R0).
+ Intro; Ring.
+Save.
+
+(**********)
+Lemma Rplus_Ropp:(x,y:R)((Rplus x y)==R0)->(y==(Ropp x)).
+ Intros; Replace y with (Rplus (Rplus (Ropp x) x) y);
+ [ Rewrite -> Rplus_assoc; Rewrite -> H; Ring
+ | Ring ].
+Save.
+
+(* New *)
+Hint eqT_R_congr : real := Resolve (congr_eqT R).
+
+Lemma Rplus_plus_r:(r,r1,r2:R)(r1==r2)->((Rplus r r1)==(Rplus r r2)).
+ Auto with real.
+Save.
+
+(* Old *)
+Hints Resolve Rplus_plus_r : v62.
+
+(**********)
+Lemma r_Rplus_plus:(r,r1,r2:R)((Rplus r r1)==(Rplus r r2))->(r1==r2).
+ Intros;
+ Cut (Rplus (Rplus (Ropp r) r) r1)==(Rplus (Rplus (Ropp r) r) r2).
+ Ring (Rplus (Rplus (Ropp r) r) r1) (Rplus (Rplus (Ropp r) r) r2); Trivial.
+ Repeat Rewrite -> Rplus_assoc; Rewrite <- H; Reflexivity.
+Save.
+
+Hints Resolve r_Rplus_plus : real.
+
+(**********)
+Lemma Rplus_ne_i:(r,b:R)((Rplus r b)==r)->(b==R0).
+ Intros r b; Replace r with (Rplus r R0).
+ Rewrite -> Rplus_assoc; Ring (Rplus R0 b); EAuto with real.
+ Ring.
+Save.
+
+(***********************************************************)
+(* Multiplication *)
+(***********************************************************)
+
+(**********)
+Lemma Rinv_r:(r:R)(~(r==R0))->((Rmult r (Rinv r))==R1).
+ Intros; Rewrite -> Rmult_sym; Apply (Rinv_l r H); Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rmult_Or:(r:R)((Rmult r R0)==R0).
+Intro; Ring.
+Save.
+Hints Resolve Rmult_Or : real v62.
+
+(**********)
+Lemma Rmult_Ol:(r:R)((Rmult R0 r)==R0).
+Intro; Ring.
+Save.
+Hints Resolve Rmult_Ol : real v62.
+
+(**********)
+Lemma Rmult_mult_r:(r,r1,r2:R)(r1==r2)->((Rmult r r1)==(Rmult r r2)).
+ Auto with real.
+Save.
+(* OLD *)
+Hints Resolve Rmult_mult_r : v62.
+
+(**********)
+Lemma r_Rmult_mult:(r,r1,r2:R)((Rmult r r1)==(Rmult r r2))->
+ (~(r==R0))->(r1==r2).
+ Intros;
+ Cut (Rmult (Rmult (Rinv r) r) r1)==(Rmult (Rmult (Rinv r) r) r2).
+ Rewrite -> Rinv_l with r; Ring (Rmult R1 r1) (Rmult R1 r2); Trivial.
+
+ Repeat Rewrite -> Rmult_assoc.
+ Rewrite H; Trivial.
+Save.
+
+(**********)
+Lemma without_div_Od:(r1,r2:R)(Rmult r1 r2)==R0 -> r1==R0 \/ r2==R0.
+ Intros; Cut r1==R0\/~r1==R0.
+ Intros [Hz | Hnotz].
+ Left; Auto.
+ Replace r2 with (Rmult R0 (Rinv r1)); Auto with real.
+ Apply r_Rmult_mult with r1.
+ Rewrite H; Ring.
+ Assumption.
+ Auto with real.
+Save.
+
+(**********)
+Lemma without_div_Oi1:(r1,r2:R) r1==R0 -> (Rmult r1 r2)==R0.
+ Intros; Rewrite -> H; Ring.
+Save.
+
+(**********)
+Lemma without_div_Oi2:(r1,r2:R) r2==R0 -> (Rmult r1 r2)==R0.
+ Intros; Rewrite -> H; Ring.
+Save.
+
+(**********)
+Lemma without_div_Oi:(r1,r2:R) (r1==R0)\/(r2==R0) -> (Rmult r1 r2)==R0.
+ Intros r1 r2 [H | H]; Rewrite H; Ring.
+Save.
+
+(**********)
+Lemma without_div_O_contr:(r1,r2:R)
+ ~(Rmult r1 r2)==R0 -> ~r1==R0 /\ ~r2==R0.
+Intros; Cut (P,Q,R:Prop)(P\/Q->R)->~R->~P/\~Q.
+Intro;Generalize (H0 r1==R0 r2==R0 (Rmult r1 r2)==R0
+ (without_div_Oi r1 r2));Intro;Apply (H1 H).
+Tauto.
+Save.
+
+(***********)
+Definition Rsqr:R->R:=[r:R](Rmult r r).
+
+(***********)
+Lemma Rsqr_O:((Rsqr R0)==R0).
+ Unfold Rsqr; Ring.
+Save.
+
+(***********)
+Lemma Rsqr_r_R0:(r:R)(Rsqr r)==R0->r==R0.
+Unfold Rsqr;Intros;Elim (without_div_Od r r H);Trivial.
+Save.
+
+(*********************************************************)
+(* Opposite *)
+(*********************************************************)
+
+(**********)
+Lemma Ropp_Ropp:(r:R)((Ropp (Ropp r))==r).
+ Intro; Ring.
+Save.
+
+(**********)
+Lemma Ropp_O:((Ropp R0)==R0).
+ Ring.
+Save.
+Hints Resolve Ropp_O : real v62.
+
+(**********)
+Lemma Ropp_distr1:(r1,r2:R)
+ ((Ropp (Rplus r1 r2))==(Rplus (Ropp r1) (Ropp r2))).
+ Intros; Ring.
+Save.
+
+(**********)
+Lemma Ropp_distr2:(r1,r2:R)((Ropp (Rminus r1 r2))==(Rminus r2 r1)).
+ Intros; Ring.
+Save.
+
+(**********)
+Lemma eq_Rminus:(r1,r2:R)(r1==r2)->((Rminus r1 r2)==R0).
+ Intros; Rewrite H; Ring.
+Save.
+
+(**********)
+Lemma Rminus_eq:(r1,r2:R)(Rminus r1 r2)==R0 -> r1==r2.
+ Intros r1 r2; Unfold Rminus; Rewrite -> Rplus_sym; Intro.
+ Rewrite <- (Ropp_Ropp r2); Apply (Rplus_Ropp (Ropp r2) r1 H).
+Save.
+
+(**********)
+Lemma Rminus_eq_contra:(r1,r2:R)~r1==r2->~(Rminus r1 r2)==R0.
+Intros;Cut (P,Q:Prop)(P->Q)->(~Q->~P).
+Intro cla;Apply (cla (Rminus r1 r2)==R0 r1==r2 (Rminus_eq r1 r2));Assumption.
+Tauto.
+Save.
+
+(**********)
+Lemma eq_Ropp:(r1,r2:R)(r1==r2)->((Ropp r1)==(Ropp r2)).
+ Auto with real.
+Save.
+
+(**********)
+Lemma eq_RoppO:(r:R)(r==R0)->((Ropp r)==R0).
+ Intros; Rewrite -> H; Ring.
+Save.
+
+(**********)
+Lemma minus_R0:(r:R)(Rminus r R0)==r.
+Intro;Unfold Rminus;Rewrite (eq_RoppO R0 (refl_eqT R R0));
+ Elim(Rplus_ne r);Intros a b;Rewrite a;Clear a b;Auto with zarith real.
+Save.
+
+(**********)
+Lemma Ropp_mul1:(r1,r2:R)(Rmult (Ropp r1) r2)==(Ropp (Rmult r1 r2)).
+ Intros; Ring.
+Save.
+
+(**********)
+Lemma Ropp_mul2:(r1,r2:R)(Rmult (Ropp r1) (Ropp r2))==(Rmult r1 r2).
+ Intros; Ring.
+Save.
+
+(*********)
+Lemma Ropp_neq:(r:R)~r==R0->~(Ropp r)==R0.
+Intros;Red;Intro;Generalize (Rplus_plus_r r (Ropp r) R0 H0);Intro;
+ Rewrite (Rplus_Ropp_r r) in H1;
+ Rewrite (let (H1,H2)=(Rplus_ne r) in H1) in H1;
+ Generalize (sym_eqT R R0 r H1);Intro;Auto.
+Save.
+
+(*********)
+Lemma Rinv_Rmult:(r1,r2:R)(~r1==R0)->(~r2==R0)->
+ (Rinv (Rmult r1 r2))==(Rmult (Rinv r1) (Rinv r2)).
+Intros;Cut ~(Rmult r1 r2)==R0.
+Intro;Apply (r_Rmult_mult (Rmult r1 r2));Auto.
+Rewrite (Rinv_r (Rmult r1 r2) H1);
+ Rewrite (Rmult_sym (Rinv r1) (Rinv r2));
+ Rewrite (Rmult_assoc r1 r2 (Rmult (Rinv r2) (Rinv r1)));
+ Rewrite <-(Rmult_assoc r2 (Rinv r2) (Rinv r1));
+ Rewrite (Rinv_r r2 H0);
+ Rewrite (let (H1,H2)=(Rmult_ne (Rinv r1)) in H2);
+ Rewrite (Rinv_r r1 H);Trivial.
+Red;Intro;Generalize (without_div_Od r1 r2 H1);Intro;Elim H2;Intro;Auto.
+Save.
+
+(*********)
+Lemma Ropp_Rinv:(r:R)~r==R0->(Ropp (Rinv r))==(Rinv (Ropp r)).
+Intros;Generalize (refl_eqT R R1);Pattern 1 R1;
+ Rewrite <-(Rinv_l r H);Rewrite <-(Rinv_l (Ropp r) (Ropp_neq r H));
+ Intro;Rewrite <-(Ropp_mul2 (Rinv r) r) in H0;
+ Rewrite (Rmult_sym (Ropp (Rinv r)) (Ropp r)) in H0;
+ Rewrite (Rmult_sym (Rinv (Ropp r)) (Ropp r)) in H0;
+ Apply (r_Rmult_mult (Ropp r) (Ropp (Rinv r)) (Rinv (Ropp r))
+ H0 (Ropp_neq r H)).
+Save.
+
+(*********)
+Lemma Rinv_Rmult_simpl:(a,b,c:R)(~a==R0)->
+ (Rmult (Rmult a (Rinv b))(Rmult c (Rinv a)))==
+ (Rmult c (Rinv b)).
+Intros; Rewrite (Rmult_sym (Rmult a (Rinv b)) (Rmult c (Rinv a)));
+ Rewrite (Rmult_assoc c (Rinv a) (Rmult a (Rinv b)));
+ Rewrite <-(Rmult_assoc (Rinv a) a (Rinv b));
+ Rewrite (Rinv_l a H);Rewrite (let (H1,H2)=(Rmult_ne (Rinv b)) in H2);
+ Reflexivity.
+Save.
+
+(*********************************************************)
+(* Order Lemma *)
+(*********************************************************)
+(*********************************************************)
+(* Lower *)
+(*********************************************************)
+
+(**********)
+Lemma not_Rle:(r1,r2:R)~(Rle r1 r2)->(Rgt r1 r2).
+Intros; Unfold Rle in H; Elim (total_order r1 r2); Intro.
+Elim H;Left; Assumption.
+Elim H0; Intro;Auto with zarith real.
+Elim H;Right; Assumption.
+Save.
+
+(**********)
+Lemma Rle_not:(r1,r2:R)(Rlt r2 r1)->~(Rle r1 r2).
+Intros; Red; Intro;Unfold Rle in H0;Elim H0; Intro.
+Generalize (Rlt_antisym r1 r2 H1); Intro; Auto with zarith real.
+Elim (imp_not_Req r2 r1);Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rle_le_eq:(r1,r2:R)(Rle r1 r2)/\(Rle r2 r1)<->(r1==r2).
+Intros; Split; Intro.
+Elim H; Unfold Rle; Intros.
+Elim H0; Elim H1; Intros.
+Absurd (Rlt r2 r1).
+Red; Intro.
+Apply (Rlt_antisym r1 r2 H3 H4).
+Auto with zarith real.
+Auto with zarith real.
+Auto with zarith real.
+Auto with zarith real.
+Rewrite <- H; Split; Unfold Rle; Right; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_le:(r1,r2:R)(Rlt r1 r2)->(Rle r1 r2).
+Intros; Unfold Rle; Left; Auto with zarith real.
+Save.
+
+(**********)
+Lemma eq_Rle:(r1,r2:R)(r1==r2)->(Rle r1 r2).
+Intros; Unfold Rle; Right; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rle_trans:(r1,r2,r3:R)
+ (Rle r1 r2)->(Rle r2 r3)->(Rle r1 r3).
+Intros r1 r2 r3; Unfold Rle; Intros.
+Elim H; Elim H0; Intros.
+Cut (Rlt r1 r3).
+Intro.
+Apply (Rlt_le r1 r3); Auto with zarith real.
+Apply (Rlt_trans r1 r2 r3); Auto with zarith real.
+Rewrite <- H1; Auto with zarith real.
+Rewrite -> H2; Auto with zarith real.
+Rewrite -> H2; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rle_lt_trans:(r1,r2,r3:R)
+ (Rle r1 r2)->(Rlt r2 r3)->(Rlt r1 r3).
+Intros; Unfold Rle in H; Elim H; Intro.
+Apply (Rlt_trans r1 r2 r3 H1 H0).
+Rewrite -> H1; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_le_trans:(r1,r2,r3:R)
+ (Rlt r1 r2)->(Rle r2 r3)->(Rlt r1 r3).
+Intros; Unfold Rle in H0; Elim H0; Intro.
+Apply (Rlt_trans r1 r2 r3 H H1).
+Rewrite <- H1; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_anti_compatibility:
+ (r,r1,r2:R)(Rlt (Rplus r r1) (Rplus r r2))->(Rlt r1 r2).
+Intros;
+ Cut (Rlt (Rplus (Rplus (Ropp r) r) r1)
+ (Rplus (Rplus (Ropp r) r) r2)).
+Rewrite -> Rplus_Ropp_l.
+Elim (Rplus_ne r1); Elim (Rplus_ne r2); Intros; Rewrite <- H3;
+ Rewrite <- H1; Auto with zarith real.
+Rewrite -> Rplus_assoc; Rewrite -> Rplus_assoc;
+ Apply (Rlt_compatibility (Ropp r) (Rplus r r1) (Rplus r r2) H).
+Save.
+
+(**********)
+Lemma Rle_compatibility:(r,r1,r2:R)(Rle r1 r2)->
+ (Rle (Rplus r r1) (Rplus r r2)).
+Unfold Rle; Intros; Elim H; Intro.
+Left; Apply (Rlt_compatibility r r1 r2 H0).
+Right; Rewrite <- H0; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rle_anti_compatibility:
+ (r,r1,r2:R)(Rle (Rplus r r1) (Rplus r r2))->(Rle r1 r2).
+Unfold Rle; Intros; Elim H; Intro.
+Left; Apply (Rlt_anti_compatibility r r1 r2 H0).
+Right; Apply (r_Rplus_plus r r1 r2 H0).
+Save.
+
+(**********)
+Lemma Rgt_Ropp:(r1,r2:R)
+ (Rgt r1 r2)->(Rlt (Ropp r1) (Ropp r2)).
+Intros;Unfold Rgt in H;
+ Generalize (Rlt_compatibility (Ropp r2) r2 r1 H);Intro;
+ Generalize (Rlt_compatibility (Ropp r1) (Rplus (Ropp r2) r2)
+ (Rplus (Ropp r2) r1) H0);
+ Rewrite (Rplus_Ropp_l r2);Rewrite (Rplus_sym (Ropp r2) r1);
+ Rewrite <-(Rplus_assoc (Ropp r1) r1 (Ropp r2));
+ Rewrite (Rplus_Ropp_l r1);Elim (Rplus_ne (Ropp r1));Intros a b;
+ Rewrite a;Clear a b;Elim (Rplus_ne (Ropp r2));Intros a b;
+ Rewrite b;Clear a b;Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_Ropp:(r1,r2:R)
+ (Rlt r1 r2)->(Rgt (Ropp r1) (Ropp r2)).
+Intros; Cut (Rgt r2 r1).
+Intro; Cut (Rlt (Ropp r2) (Ropp r1)); Auto with zarith real.
+Apply (Rgt_Ropp r2 r1 H0).
+Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_anti_monotony:(r,r1,r2:R)(Rlt r R0)->(Rlt r1 r2)->
+ (Rgt (Rmult r r1) (Rmult r r2)).
+Intros;Generalize (Rlt_Ropp r1 r2 H0);Intro;Unfold Rgt;
+ Rewrite <-(Ropp_mul2 r r2);Rewrite <-(Ropp_mul2 r r1);
+ Apply (Rlt_monotony (Ropp r) (Ropp r2) (Ropp r1));Auto with zarith real.
+Apply (Rlt_anti_compatibility r R0 (Ropp r));
+ Elim (Rplus_ne r);Intros a b;Rewrite a;Clear a b;
+ Rewrite (Rplus_Ropp_r r);Assumption.
+Save.
+
+(**********)
+Lemma Rlt_minus:(r1,r2:R)(Rlt r1 r2)->(Rlt (Rminus r1 r2) R0).
+Intros; Cut (Rlt (Rminus r1 r2) (Rminus r2 r2)).
+Rewrite -> (eq_Rminus r2); Auto with zarith real.
+Unfold Rminus; Rewrite -> (Rplus_sym r1 (Ropp r2));
+ Rewrite -> (Rplus_sym r2 (Ropp r2));
+ Apply (Rlt_compatibility (Ropp r2) r1 r2 H).
+Save.
+
+(**********)
+Lemma Rle_minus:(r1,r2:R)(Rle r1 r2)->(Rle (Rminus r1 r2) R0).
+Unfold Rle; Intros; Elim H; Intro.
+Left; Apply (Rlt_minus r1 r2 H0).
+Right; Apply (eq_Rminus r1 r2 H0).
+Save.
+
+(**********)
+Lemma Rminus_lt:(r1,r2:R)(Rlt (Rminus r1 r2) R0)->(Rlt r1 r2).
+Intros;Unfold Rminus in H;
+ Generalize (Rlt_compatibility r2 (Rplus r1 (Ropp r2)) R0 H);
+ Intro;Clear H;
+ Rewrite (Rplus_sym r1 (Ropp r2)) in H0;
+ Rewrite <- (Rplus_assoc r2 (Ropp r2) r1) in H0;
+ Rewrite (Rplus_Ropp_r r2) in H0;Elim (Rplus_ne r1); Elim (Rplus_ne r2);
+ Intros;
+ Rewrite H3 in H0; Rewrite H in H0; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rminus_le:(r1,r2:R)(Rle (Rminus r1 r2) R0)->(Rle r1 r2).
+Unfold Rle;Intros;Elim H; Intro;Clear H.
+Left;Apply Rminus_lt;Auto with zarith real.
+Right;Apply Rminus_eq;Auto with zarith real.
+Save.
+
+(**********)
+Lemma sum_inequa_Rle_lt:(a,x,b,c,y,d:R)(Rle a x)->(Rlt x b)->
+ (Rlt c y)->(Rle y d)->
+ (Rlt (Rplus a c) (Rplus x y))/\(Rlt (Rplus x y) (Rplus b d)).
+Intros;Split.
+Apply (Rlt_le_trans (Rplus a c) (Rplus a y) (Rplus x y)).
+Apply (Rlt_compatibility a c y H1).
+Rewrite (Rplus_sym a y);Rewrite (Rplus_sym x y);
+ Apply (Rle_compatibility y a x H).
+Apply (Rle_lt_trans (Rplus x y) (Rplus d x) (Rplus b d)).
+Rewrite (Rplus_sym d x);Apply (Rle_compatibility x y d H2).
+Rewrite (Rplus_sym b d);Apply (Rlt_compatibility d x b H0).
+Save.
+
+(*********)
+Lemma Rplus_lt:(r1,r2,r3,r4:R)(Rlt r1 r2)->(Rlt r3 r4)->
+ (Rlt (Rplus r1 r3) (Rplus r2 r4)).
+Intros; Generalize (Rlt_compatibility r3 r1 r2 H);
+ Generalize (Rlt_compatibility r2 r3 r4 H0);Intros;
+ Rewrite (Rplus_sym r3 r2) in H2;Rewrite (Rplus_sym r3 r1) in H2;
+ Apply (Rlt_trans (Rplus r1 r3) (Rplus r2 r3) (Rplus r2 r4) H2 H1).
+Save.
+
+(*********)
+Lemma Rmult_lt:(r1,r2,r3,r4:R)(Rgt r3 R0)->(Rgt r2 R0)->
+ (Rlt r1 r2)->(Rlt r3 r4)->(Rlt (Rmult r1 r3) (Rmult r2 r4)).
+Intros;Unfold Rgt in H H0;Generalize (Rlt_monotony r3 r1 r2 H H1);Intro;
+ Generalize (Rlt_monotony r2 r3 r4 H0 H2);Intro;
+ Rewrite (Rmult_sym r3 r1) in H3;Rewrite (Rmult_sym r3 r2) in H3;
+ Apply (Rlt_trans (Rmult r1 r3) (Rmult r2 r3) (Rmult r2 r4) H3 H4).
+Save.
+
+(**********)
+Lemma inser_trans_R:(n,m,p,q:R)(Rle n m)/\(Rlt m p)->
+ (sumboolT ((Rle n m)/\(Rlt m q)) ((Rle q m)/\(Rlt m p))).
+Intros; Cut (sumboolT (Rle q m) (Rlt m q)).
+Intro;Cut (Rle n m);[Intro;Cut (Rlt m p)|Elim H;Auto with zarith real].
+Intro;Elim X;Intro.
+Right; Auto with zarith real.
+Left; Auto with zarith real.
+Elim H;Auto with zarith real.
+Generalize (total_order_Rle q m); Intro; Elim X; Intro.
+Left;Auto with zarith real.
+Right; Generalize (not_Rle q m y); Auto with zarith real.
+Save.
+
+(**********)
+Lemma tech_Rplus:(r,s:R)(Rle R0 r)->(Rlt R0 s)->~(Rplus r s)==R0.
+Red;Intros;Cut (Rlt R0 (Rplus r s)).
+Intro;Elim (imp_not_Req R0 (Rplus r s));Auto with zarith real.
+Clear H1;Generalize (Rlt_compatibility r R0 s H0);Intro;
+ Elim (Rplus_ne r);Intros a b;Rewrite a in H1;Clear a b;
+ Apply (Rle_lt_trans R0 r (Rplus r s) H H1).
+Save.
+
+(***********)
+Lemma pos_Rsqr:(r:R)(Rle R0 (Rsqr r)).
+Intro; Cut (Rlt r R0)\/r==R0\/(Rgt r R0).
+Intro; Elim H; Intro; Unfold Rle.
+Left; Replace R0 with (Rmult r R0).
+Unfold Rsqr; Apply (Rlt_anti_monotony r r R0 H0 H0).
+Auto with zarith real.
+Elim H0; Intro.
+Right; Rewrite -> H1; Apply sym_eqT; Apply Rsqr_O.
+Left; Unfold Rgt in H1; Replace R0 with (Rmult r R0).
+Unfold Rsqr; Apply (Rlt_monotony r R0 r H1 H1).
+Auto with zarith real.
+Apply (total_order r R0).
+Save.
+
+(***********)
+Lemma pos_Rsqr1:(r:R)(~(r==R0))->(Rlt R0 (Rsqr r)).
+Intros; Cut (Rlt r R0)\/(Rgt r R0).
+Intro; Elim H0; Intro.
+Replace R0 with (Rmult r R0); Unfold Rsqr.
+Apply (Rlt_anti_monotony r r R0 H1 H1).
+Auto with zarith real.
+Unfold Rgt in H1; Replace R0 with (Rmult r R0).
+Unfold Rsqr; Apply (Rlt_monotony r R0 r H1 H1).
+Auto with zarith real.
+Apply (not_Req r R0 H).
+Save.
+
+(**********)
+Lemma Rlt_R0_R1:(Rlt R0 R1).
+Cut ~R1==R0->(Rlt R0 (Rsqr R1)).
+Intro; Replace R1 with (Rsqr R1); Cut ~R1==R0; Auto with zarith real.
+Red; Intro; Apply (R1_neq_R0 H0).
+Unfold Rsqr; Elim (Rmult_ne R1); Auto with zarith real.
+Red; Intro; Apply (R1_neq_R0 H0).
+Intro; Apply (pos_Rsqr1 R1 H).
+Save.
+
+(*********)
+Lemma Rlt_Rinv:(r:R)(Rlt R0 r)->(Rlt R0 (Rinv r)).
+Intros; Fold (Rgt (Rinv r) R0); Apply (not_Rle (Rinv r) R0);Red;
+ Intro;Unfold Rle in H0;Elim H0; Intro;Clear H0.
+Generalize (Rlt_monotony r (Rinv r) R0 H H1);Rewrite (Rinv_r r).
+Rewrite (Rmult_Or r);Intro;Generalize (Rle_not R0 R1 H0);
+ Generalize (Rlt_le R0 R1 Rlt_R0_R1);Intros;Auto.
+Apply (sym_not_eqT R R0 r);Apply (imp_not_Req R0 r);Left;Assumption.
+Generalize (Rmult_mult_r r (Rinv r) R0 H1);Rewrite (Rinv_r r).
+Rewrite (Rmult_Or r);Intro;Generalize R1_neq_R0;Auto.
+Apply (sym_not_eqT R R0 r);Apply (imp_not_Req R0 r);Left;Assumption.
+Save.
+
+(*********)
+Lemma Rlt_Rinv2:(r:R)(Rlt r R0)->(Rlt (Rinv r) R0).
+Intros;Fold (Rgt R0 (Rinv r)); Apply (not_Rle R0 (Rinv r));Red;
+ Intro;Unfold Rle in H0;Elim H0; Intro;Clear H0.
+Generalize (Rlt_monotony (Rinv r) r R0 H1 H);Rewrite (Rinv_l r).
+Rewrite (Rmult_Or (Rinv r));Intro;Generalize (Rle_not R0 R1 H0);
+ Generalize (Rlt_le R0 R1 Rlt_R0_R1);Intros;Auto.
+Apply (imp_not_Req r R0);Left;Assumption.
+Generalize (Rmult_mult_r r R0 (Rinv r) H1);Rewrite (Rinv_r r).
+Rewrite (Rmult_Or r);Intro;Generalize R1_neq_R0;Auto.
+Apply (imp_not_Req r R0);Left;Assumption.
+Save.
+
+(*********************************************************)
+(* Greater *)
+(*********************************************************)
+
+(**********)
+Lemma Rge_ge_eq:(r1,r2:R)(Rge r1 r2)->(Rge r2 r1)->r1==r2.
+Unfold Rge; Intros; Elim H; Intro; Auto with zarith real.
+Elim H0; Intro; Auto with zarith real.
+Absurd (Rgt r1 r2); Auto with zarith real.
+Unfold Rgt; Unfold Rgt in H2; Apply Rlt_antisym; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_not_ge:(r1,r2:R)~(Rlt r1 r2)->(Rge r1 r2).
+Intros; Unfold Rge; Elim (total_order r1 r2); Intro.
+ElimType False; Auto with zarith real.
+Elim H0; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rgt_not_le:(r1,r2:R)~(Rgt r1 r2)->(Rle r1 r2).
+Intros; Unfold Rgt in H; Unfold Rle; Elim (total_order r1 r2); Intro.
+Left ; Auto with zarith real.
+Elim H0; Intro; Auto with zarith real.
+Unfold Rgt in H1; ElimType False; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rgt_ge:(r1,r2:R)(Rgt r1 r2)->(Rge r1 r2).
+Intros; Unfold Rge; Left; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_sym:(r1,r2:R)
+ (((Rlt r1 r2)->(Rgt r2 r1))/\((Rgt r2 r1)->(Rlt r1 r2))).
+Intros; Split; Intro; Unfold Rgt; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rle_sym1:(r1,r2:R)(Rle r1 r2)->(Rge r2 r1).
+Intros r1 r2; Unfold Rge; Unfold Rle; Intro; Elim H; Intro.
+Left; Unfold Rgt; Auto with zarith real.
+Right; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rle_sym2:(r1,r2:R)(Rge r2 r1)->(Rle r1 r2).
+Intros r1 r2; Unfold Rge; Unfold Rle; Intro; Elim H; Intro.
+Left; Unfold Rgt in H0; Auto with zarith real.
+Right; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rle_sym:(r1,r2:R)
+ (((Rle r1 r2)->(Rge r2 r1))/\((Rge r2 r1)->(Rle r1 r2))).
+Intros; Split; Intro.
+Apply Rle_sym1; Auto with zarith real.
+Apply Rle_sym2; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rge_gt_trans:(r1,r2,r3:R)
+ (Rge r1 r2)->(Rgt r2 r3)->(Rgt r1 r3).
+Intros r1 r2 r3; Unfold Rgt; Unfold Rge; Intros; Elim H; Intros.
+Unfold Rgt in H1; Apply (Rlt_trans r3 r2 r1 H0 H1).
+Rewrite -> H1; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rgt_ge_trans:(r1,r2,r3:R)
+ (Rgt r1 r2)->(Rge r2 r3)->(Rgt r1 r3).
+Intros r1 r2 r3; Unfold Rgt; Unfold Rge; Intros; Elim H0; Intros.
+Apply (Rlt_trans r3 r2 r1 H1 H).
+Rewrite <- H1; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rgt_trans:(r1,r2,r3:R)
+ (Rgt r1 r2)->(Rgt r2 r3)->(Rgt r1 r3).
+Intros; Cut (Rge r1 r2).
+Intro; Apply (Rge_gt_trans r1 r2 r3 H1 H0).
+Apply (Rgt_ge r1 r2 H).
+Save.
+
+(**********)
+Lemma Rge_trans:(r1,r2,r3:R)
+ (Rge r1 r2)->(Rge r2 r3)->(Rge r1 r3).
+Intros; Cut (Rle r2 r1).
+Cut (Rle r3 r2); Intros.
+Cut (Rle r3 r1).
+Intro; Apply (Rle_sym1 r3 r1 H3).
+Apply (Rle_trans r3 r2 r1 H1 H2).
+Apply (Rle_sym2 r3 r2 H0).
+Apply (Rle_sym2 r2 r1 H).
+Save.
+
+(**********)
+Lemma eq_Rge:(r1,r2:R)(r1==r2)->(Rge r1 r2).
+Intros; Unfold Rge; Right; Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rle_Ropp:(r1,r2:R)
+ (Rle r1 r2)->(Rge (Ropp r1) (Ropp r2)).
+Unfold Rle; Intros; Unfold Rge; Elim H; Intro.
+Left; Apply (Rlt_Ropp r1 r2 H0).
+Right; Apply (eq_Ropp r1 r2 H0).
+Save.
+
+(**********)
+Lemma Rgt_RoppO:(r:R)(Rgt r R0)->(Rlt (Ropp r) R0).
+Intros; Rewrite <- Ropp_O; Apply (Rgt_Ropp r R0); Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_RoppO:(r:R)(Rlt r R0)->(Rgt (Ropp r) R0).
+Intros; Rewrite <- Ropp_O; Apply (Rlt_Ropp r R0); Auto with zarith real.
+Save.
+
+(**********)
+Lemma Rlt_r_plus_R1:(r:R)(Rle R0 r)->(Rlt R0 (Rplus r R1)).
+Unfold Rle; Intros; Elim H; Intro; Clear H.
+Apply (Rlt_anti_compatibility (Ropp r) R0 (Rplus r R1));
+ Elim (Rplus_ne (Ropp r)); Intros; Rewrite H; Clear H H1;
+ Rewrite <- (Rplus_assoc (Ropp r) r R1); Rewrite Rplus_Ropp_l;
+ Elim (Rplus_ne R1); Intros; Rewrite H1; Clear H H1;
+ Fold (Rgt r R0) in H0; Generalize (Rgt_RoppO r H0); Intro;
+ Generalize Rlt_R0_R1; Intro; Apply (Rlt_trans (Ropp r) R0 R1 H H1).
+Rewrite <- H0; Elim (Rplus_ne R1); Intros; Rewrite H1; Clear H H1;
+ Apply Rlt_R0_R1.
+Save.
+
+(**********)
+Lemma tech_Rgt_minus:(r1,r2:R)(Rlt R0 r2)->(Rgt r1 (Rminus r1 r2)).
+Intros;Fold (Rgt r2 R0) in H;Generalize (Rgt_RoppO r2 H); Intro;
+ Generalize (Rlt_compatibility r1 (Ropp r2) R0 H0); Intro;
+ Elim (Rplus_ne r1); Intros a b; Rewrite a in H1; Clear a b;
+ Unfold Rgt;Unfold Rminus;Assumption.
+Save.
+
+(***********)
+Lemma Rgt_plus_plus_r:(r,r1,r2:R)(Rgt r1 r2)->
+ (Rgt (Rplus r r1) (Rplus r r2)).
+Unfold Rgt; Intros; Apply (Rlt_compatibility r r2 r1 H).
+Save.
+
+(***********)
+Lemma Rgt_r_plus_plus:(r,r1,r2:R)(Rgt (Rplus r r1) (Rplus r r2))->
+ (Rgt r1 r2).
+Unfold Rgt; Intros; Apply (Rlt_anti_compatibility r r2 r1 H).
+Save.
+
+(***********)
+Lemma Rge_plus_plus_r:(r,r1,r2:R)(Rge r1 r2)->
+ (Rge (Rplus r r1) (Rplus r r2)).
+Unfold Rge; Intros; Elim H; Intro.
+Left; Apply (Rgt_plus_plus_r r r1 r2 H0).
+Right; Apply (Rplus_plus_r r r1 r2 H0).
+Save.
+
+(***********)
+Lemma Rge_r_plus_plus:(r,r1,r2:R)(Rge (Rplus r r1) (Rplus r r2))->
+ (Rge r1 r2).
+Unfold Rge; Intros; Elim H; Intro.
+Left; Apply (Rgt_r_plus_plus r r1 r2 H0).
+Right; Apply (r_Rplus_plus r r1 r2 H0).
+Save.
+
+(***********)
+Lemma Rgt_minus:(r1,r2:R)(Rgt r1 r2)->(Rgt (Rminus r1 r2) R0).
+Intros; Cut (Rgt (Rminus r1 r2) (Rminus r2 r2)).
+Rewrite -> (eq_Rminus r2 r2); Auto with zarith real.
+Unfold Rminus; Rewrite -> (Rplus_sym r1 (Ropp r2));
+ Rewrite -> (Rplus_sym r2 (Ropp r2));
+ Apply (Rgt_plus_plus_r (Ropp r2) r1 r2 H).
+Save.
+
+(**********)
+Lemma Rge_minus:(r1,r2:R)(Rge r1 r2)->(Rge (Rminus r1 r2) R0).
+Unfold Rge; Intros; Elim H; Intro.
+Left; Apply (Rgt_minus r1 r2 H0).
+Right; Apply (eq_Rminus r1 r2 H0).
+Save.
+
+(*********)
+Lemma minus_Rge:(r1,r2:R)(Rge (Rminus r1 r2) R0)->(Rge r1 r2).
+Intros;Generalize (Rge_plus_plus_r r2 (Rminus r1 r2) R0 H); Intro;
+ Rewrite (Rplus_sym r2 (Rminus r1 r2)) in H0;Unfold Rminus in H0;
+ Rewrite (Rplus_assoc r1 (Ropp r2) r2) in H0;
+ Rewrite (Rplus_Ropp_l r2) in H0;
+ Elim (Rplus_ne r1); Intros a b; Rewrite a in H0; Clear a b;
+ Elim (Rplus_ne r2); Intros a b; Rewrite a in H0; Clear a b;Exact H0.
+Save.
+
+(*********)
+Lemma Rmult_gt:(r1,r2:R)(Rgt r1 R0)->(Rgt r2 R0)->(Rgt (Rmult r1 r2) R0).
+Unfold Rgt;Intros;Generalize (Rlt_monotony r1 R0 r2 H H0);Intro;
+ Rewrite (Rmult_Or r1) in H1;Assumption.
+Save.
+
+(***********)
+Lemma Rplus_eq_R0:(a,b:R)(Rle R0 a)->(Rle R0 b)->(Rplus a b)==R0->
+ (a==R0)/\(b==R0).
+Intros;Generalize (Rle_Ropp R0 b H0);Intro;Rewrite Ropp_O in H2;
+ Generalize (Rle_Ropp R0 a H);Intro;Rewrite Ropp_O in H3;
+ Generalize (Rplus_Ropp a b H1);Intro;Rewrite Rplus_sym in H1;
+ Generalize (Rplus_Ropp b a H1);Intro;Clear H1;Rewrite <- H4 in H3;
+ Rewrite <-H5 in H2;Clear H4 H5; Generalize (Rle_sym1 R0 a H);Clear H;
+ Intro;Generalize (Rle_sym1 R0 b H0);Clear H0;Intro;Split;Apply Rge_ge_eq;
+ Assumption.
+Save.
+
+(***********)
+Lemma Rplus_Rsr_eq_R0:(a,b:R)(Rplus (Rsqr a) (Rsqr b))==R0->
+ (a==R0)/\(b==R0).
+Intros;Elim (Rplus_eq_R0 (Rsqr a) (Rsqr b) (pos_Rsqr a) (pos_Rsqr b) H);
+ Intros;Clear H;Split;Apply Rsqr_r_R0;Assumption.
+Save.
+
+(**********************************************************)
+(* Injection from N to R *)
+(**********************************************************)
+
+(**********)
+Lemma S_INR:(n:nat)(INR (S n))==(Rplus (INR n) R1).
+Intro; Simpl; Case n.
+Simpl; Elim (Rplus_ne R1); Auto with zarith real.
+Auto with zarith real.
+Save.
+
+(**********)
+Lemma S_O_plus_INR:(n:nat)
+ (INR (plus (S O) n))==(Rplus (INR (S O)) (INR n)).
+Intro; Replace (plus (S O) n) with (S (plus O n)).
+Replace (INR (S (plus O n))) with (Rplus (INR (plus O n)) R1).
+Replace (INR (S O)) with (Rplus (INR O) R1).
+Replace (INR (S O)) with (Rplus (INR O) R1); Simpl; Elim (Rplus_ne R1);
+ Intros; Rewrite -> H0; Auto with zarith real; Rewrite -> Rplus_sym;
+ Auto with zarith real.
+Simpl.
+Elim (Rplus_ne R1); Auto with zarith real.
+Apply sym_eqT; Apply (S_INR (plus O n)).
+Auto with zarith real.
+Save.
+
+(**********)
+Lemma plus_INR:(n,m:nat)(INR (plus n m))==(Rplus (INR n) (INR m)).
+Induction n.
+Simpl; Intro; Elim (Rplus_ne (INR m)); Auto with zarith real.
+Intros; Rewrite -> plus_Snm_nSm;
+ Replace (INR (S n0)) with (Rplus (INR n0) R1).
+Rewrite -> Rplus_assoc; Rewrite -> (Rplus_sym R1 (INR m));
+ Replace (Rplus (INR m) R1) with (INR (S m)).
+Apply (H (S m)).
+Apply (S_INR m).
+Apply sym_eqT; Apply (S_INR n0).
+Save.
+
+(**********)
+Lemma minus_INR:(n,m:nat)(le m n)->
+ (INR (minus n m))==(Rminus (INR n) (INR m)).
+Intros;
+ Cut (Rplus (INR m) (INR (minus n m)))
+ ==(Rplus (INR m) (Rminus (INR n) (INR m))).
+Intro;
+ Apply (r_Rplus_plus (INR m) (INR (minus n m))
+ (Rminus (INR n) (INR m)) H0).
+Rewrite <- plus_INR; Rewrite -> le_plus_minus_r.
+Unfold Rminus; Rewrite -> Rplus_sym; Rewrite -> Rplus_assoc;
+ Rewrite -> Rplus_Ropp_l; Elim (Rplus_ne (INR n)); Auto with zarith real.
+Auto with zarith real.
+Save.
+
+(**********)
+Lemma INR_le:(n:nat)(Rle R0 (INR n)).
+Induction n.
+Simpl; Apply (eq_Rle R0 R0 (refl_eqT R R0)).
+Intros;Rewrite (S_INR n0);Apply (Rlt_le R0 (Rplus (INR n0) R1));
+ Apply (Rlt_r_plus_R1 (INR n0) H).
+Save.
+
+(**********)
+Lemma not_INR_O:(n:nat)~(INR n)==R0->~n=O.
+Intros;Cut n=(0)->(INR n)==R0.
+Tauto.
+Intro;Rewrite H0;Auto with zarith real.
+Save.
+
+(**********)
+Lemma not_O_INR:(n:nat)~n=O->~(INR n)==R0.
+Intros;Cut (INR n)==R0->n=O.
+Tauto.
+Elim n;Intros;Auto with zarith real.
+Rewrite (S_INR n0) in H1;Generalize (Rplus_Ropp (INR n0) R1 H1);Intro;
+ Generalize (tech_Rplus (INR n0) R1 (INR_le n0) Rlt_R0_R1);Intro;
+ ElimType False;Auto with zarith real.
+Save.
+
+(**********************************************************)
+(* Injection from Z to R *)
+(**********************************************************)
+
+(**********)
+Definition INZ:=inject_nat.
+
+(**********)
+Lemma INR_IZR_INZ:(n:nat)(INR n)==(IZR (INZ n)).
+Induction n;Auto with zarith real.
+Intros;Rewrite S_INR;Simpl;Rewrite bij1;Rewrite <-S_INR;Auto with zarith real.
+Save.
+
+(**********)
+Lemma plus_IZR:(z,t:Z)(IZR (Zplus z t))==(Rplus (IZR z) (IZR t)).
+Destruct z;
+ [Simpl;Intro; Elim (Rplus_ne (IZR t)); Intros a b; Rewrite b; Auto with zarith real|
+ Destruct t|Destruct t].
+Simpl;Elim (Rplus_ne (INR (convert p))); Intros a b; Rewrite a; Auto with zarith real.
+Simpl;Intro;Rewrite <- (plus_INR (convert p) (convert p0));
+ Rewrite (convert_add p p0);Trivial with zarith real.
+Unfold Zplus;Intro;Simpl;
+ Generalize (refl_equal relation (compare p p0 EGAL));
+ Pattern 2 3 (compare p p0 EGAL);Case (compare p p0 EGAL);Intro.
+Rewrite (compare_convert_EGAL p p0 H);
+ Rewrite (Rplus_Ropp_r (INR (convert p0)));Auto with zarith real.
+Simpl;Rewrite (true_sub_convert p0 p (ZC2 p p0 H));
+ Rewrite (minus_INR (convert p0) (convert p)
+ (lt_le_weak (convert p) (convert p0)
+ (compare_convert_INFERIEUR p p0 H)));
+ Rewrite (Ropp_distr2 (INR (convert p0)) (INR (convert p)));
+ Unfold Rminus;Trivial with zarith real.
+Simpl;Rewrite (true_sub_convert p p0 H);
+ Rewrite (minus_INR (convert p) (convert p0));[Unfold Rminus;Trivial with zarith real|
+ Generalize (compare_convert_SUPERIEUR p p0 H);Intro;Unfold gt in H0;
+ Apply (lt_le_weak (convert p0) (convert p) H0)].
+Simpl;Elim (Rplus_ne (Ropp (INR (convert p)))); Intros a b;
+ Rewrite a; Auto with zarith real.
+Intro;Rewrite (Zplus_sym (NEG p) (POS p0));
+ Rewrite (Rplus_sym (IZR (NEG p)) (IZR (POS p0)));
+ Unfold Zplus;Simpl;
+ Generalize (refl_equal relation (compare p0 p EGAL));
+ Pattern 2 3 (compare p0 p EGAL);Case (compare p0 p EGAL);Intro.
+Rewrite (compare_convert_EGAL p0 p H);
+ Rewrite (Rplus_Ropp_r (INR (convert p)));Auto with zarith real.
+Simpl;Rewrite (true_sub_convert p p0 (ZC2 p0 p H));
+ Rewrite (minus_INR (convert p) (convert p0)
+ (lt_le_weak (convert p0) (convert p)
+ (compare_convert_INFERIEUR p0 p H)));
+ Rewrite (Ropp_distr2 (INR (convert p)) (INR (convert p0)));
+ Unfold Rminus;Trivial with zarith real.
+Simpl;Rewrite (true_sub_convert p0 p H);
+ Rewrite (minus_INR (convert p0) (convert p));[Unfold Rminus;Trivial with zarith real|
+ Generalize (compare_convert_SUPERIEUR p0 p H);Intro;Unfold gt in H0;
+ Apply (lt_le_weak (convert p) (convert p0) H0)].
+Simpl;Intro;
+ Rewrite <-(Ropp_distr1 (INR (convert p)) (INR (convert p0)));
+ Rewrite <- (plus_INR (convert p) (convert p0));
+ Rewrite (convert_add p p0);Trivial with zarith real.
+Save.
+
+(**********)
+Lemma Ropp_Ropp_IZR:(z:Z)(IZR (`-z`))==(Ropp (IZR z)).
+Induction z; Simpl.
+Apply sym_eqT; Apply Ropp_O.
+Trivial with zarith real.
+Intro;Rewrite (Ropp_Ropp (INR (convert p)));Trivial with zarith real.
+Save.
+
+(**********)
+Lemma Z_R_minus:(z1,z2:Z)
+ (Rminus (IZR z1) (IZR z2))==(IZR (Zminus z1 z2)).
+Unfold Rminus; Unfold Zminus; Intros; Apply sym_eqT;
+ Rewrite <-(Ropp_Ropp_IZR z2);Apply plus_IZR.
+Save.
+
+(**********)
+Lemma lt_O_IZR:(z:Z)(Rlt R0 (IZR z))->(Zlt ZERO z).
+Induction z; Simpl; Intros.
+Generalize (Rlt_antirefl R0);Intro;ElimType False;Auto with zarith real.
+Unfold Zlt;Simpl;Trivial with zarith real.
+Absurd (Rlt R0 (Ropp (INR (convert p))));Auto with zarith real.
+Apply (Rlt_antisym (Ropp (INR (convert p))));
+ Apply (Rgt_RoppO (INR (convert p)));Unfold Rgt;
+ Cut (~(INR (convert p))==R0).
+Intro;Generalize (not_INR_O (convert p) H0);Elim (convert p).
+Intro;Absurd O=O;Auto with zarith real.
+Intros;Rewrite (S_INR n);Apply (Rlt_r_plus_R1 (INR n) (INR_le n)).
+Apply (imp_not_Req (INR (convert p)) R0);
+ Fold (Rgt (Ropp (INR (convert p))) R0) in H;
+ Generalize (Rgt_RoppO (Ropp (INR (convert p))) H);Intro;
+ Rewrite (Ropp_Ropp (INR (convert p))) in H0;Left;Assumption.
+Save.
+
+(**********)
+Lemma lt_IZR:(z1,z2:Z)(Rlt (IZR z1) (IZR z2))->(`z1<z2`).
+Intros;Fold (Rgt (IZR z2) (IZR z1)) in H;
+ Generalize (Rgt_minus (IZR z2) (IZR z1) H);Intro;Unfold Rgt in H0;
+ Rewrite (Z_R_minus z2 z1) in H0;
+ Generalize (lt_O_IZR `z2-z1` H0);Intro;Omega.
+Save.
+
+(**********)
+Lemma eq_IZR_R0:(z:Z)(IZR z)==R0->`z=0`.
+Destruct z; Auto with zarith real;
+ [ Simpl; Intros; ElimType False | Simpl; Intros; ElimType False ].
+Absurd (INR (convert p))==R0; Auto with zarith real.
+Apply (not_O_INR (convert p));Red; Intro;Clear H;Unfold convert in H0;
+ Generalize H0; Elim p;Intros.
+Simpl in H1;Absurd (S (positive_to_nat p0 (2)))=(0); Auto with zarith real.
+Simpl in H1;Cut (2)=(plus (1) (1)); Auto with zarith real.
+Intro; Rewrite H2 in H1;Rewrite (ZL2 p0 (1)) in H1;Clear H2;
+ Cut (positive_to_nat p0 (1))=(0);Auto with zarith real.
+Simpl in H1;Absurd (1)=(0); Auto with zarith real.
+Generalize (eq_Ropp (Ropp (INR (convert p))) R0 H);Intro;Clear H;
+ Rewrite (Ropp_Ropp (INR (convert p))) in H0;Rewrite Ropp_O in H0;
+ Absurd (INR (convert p))==R0; Auto with zarith real.
+Apply (not_O_INR (convert p));Red; Intro;Clear H0;
+ Unfold convert in H;Generalize H; Elim p;Intros.
+Simpl in H1;Absurd (S (positive_to_nat p0 (2)))=(0); Auto with zarith real.
+Simpl in H1;Cut (2)=(plus (1) (1)); Auto with zarith real.
+Intro; Rewrite H2 in H1;Rewrite (ZL2 p0 (1)) in H1;Clear H2;
+ Cut (positive_to_nat p0 (1))=(0);Auto with zarith real.
+Simpl in H0;Absurd (1)=(0); Auto with zarith real.
+Save.
+
+(**********)
+Lemma eq_IZR:(z1,z2:Z)(IZR z1)==(IZR z2)->z1=z2.
+Intros;Generalize (eq_Rminus (IZR z1) (IZR z2) H);
+ Rewrite (Z_R_minus z1 z2);Intro;Generalize (eq_IZR_R0 `z1-z2` H0);
+ Intro;Omega.
+Save.
+
+(**********)
+Lemma le_IZR_R1:(z:Z)(Rle (IZR z) R1)->(Zle z `1`).
+Induction z; Intros.
+Omega.
+Unfold Rle in H;Cut `(POS p) < 1`\/`(POS p) = 1`.
+Omega.
+Elim H;Intro.
+Left;Apply (Zlt_O_minus_lt `1` (POS p));Apply (lt_O_IZR `1-(POS p)`);
+ Cut (R1==(IZR `1`));Auto with zarith real.
+Intro;Rewrite H1 in H0;Clear H1;Fold (Rgt (IZR `1`) (IZR (POS p))) in H0;
+ Generalize (Rgt_minus (IZR `1`) (IZR (POS p)) H0);Intro;
+ Unfold Rgt in H1;Rewrite (Z_R_minus `1` (POS p)) in H1;
+ Assumption.
+Right;Cut (R1==(IZR `1`));Auto with zarith real.
+Intro;Rewrite H1 in H0;Clear H1 H;Apply (eq_IZR (POS p) `1` H0).
+Unfold Rle in H;Cut `(NEG p) < 1`\/`(NEG p) = 1`.
+Omega.
+Elim H;Intro.
+Left;Apply (Zlt_O_minus_lt `1` (NEG p));Apply (lt_O_IZR `1-(NEG p)`);
+ Cut (R1==(IZR `1`));Auto with zarith real.
+Intro;Rewrite H1 in H0;Clear H1;Fold (Rgt (IZR `1`) (IZR (NEG p))) in H0;
+ Generalize (Rgt_minus (IZR `1`) (IZR (NEG p)) H0);Intro;
+ Unfold Rgt in H1;Rewrite (Z_R_minus `1` (NEG p)) in H1;
+ Assumption.
+Right;Cut (R1==(IZR `1`));Auto with zarith real.
+Intro;Rewrite H1 in H0;Clear H1 H;Apply (eq_IZR (NEG p) `1` H0).
+Save.
+
+(**********)
+Lemma single_z_r_R1:(r:R)(z,x:Z)(Rlt r (IZR z))->(Rle (IZR z) (Rplus r R1))
+ ->(Rlt r (IZR x))->(Rle (IZR x) (Rplus r R1))->z=x.
+Intros;Generalize (Rlt_Ropp r (IZR x) H1);Intro;
+ Generalize (Rle_Ropp (IZR x) (Rplus r R1) H2);Intro;Clear H1 H2;
+ Unfold Rgt in H3;
+ Generalize (Rle_sym2 (Ropp (Rplus r R1)) (Ropp (IZR x)) H4);
+ Intro;Clear H4;
+ Generalize (sum_inequa_Rle_lt (Ropp (Rplus r R1)) (Ropp (IZR x))
+ (Ropp r) r (IZR z) (Rplus r R1) H1 H3 H H0);Intro;Elim H2;Intros;
+ Clear H2 H H0 H3 H1;Rewrite (Rplus_sym (Ropp (IZR x)) (IZR z)) in
+ H4;Rewrite (Rplus_sym (Ropp (IZR x)) (IZR z)) in H5;
+ Fold (Rminus (IZR z) (IZR x)) in H4;
+ Fold (Rminus (IZR z) (IZR x)) in H5;
+ Rewrite <-(Rplus_assoc (Ropp r) r R1) in H5;
+ Rewrite (Rplus_Ropp_l r) in H5;Rewrite (Ropp_distr1 r R1) in H4;
+ Rewrite (Rplus_sym (Ropp r) (Ropp R1)) in H4;
+ Rewrite (Rplus_assoc (Ropp R1) (Ropp r) r) in H4;
+ Rewrite (Rplus_Ropp_l r) in H4;Elim (Rplus_ne R1);Intros a b;Rewrite b in H5;
+ Clear a b;Elim (Rplus_ne (Ropp R1));Intros a b;Rewrite a in H4;
+ Clear a b;Rewrite (Z_R_minus z x) in H4;Rewrite (Z_R_minus z x) in H5;
+ Cut (R1==(IZR `1`));Auto with zarith real.
+Cut (Ropp R1)==(IZR `-1`);Auto with zarith real.
+Intros;Rewrite H0 in H5;Rewrite H in H4;Clear H H0;
+ Generalize (lt_IZR `-1` `z-x` H4);Intro;
+ Generalize (lt_IZR `z-x` `1` H5);Intro;Clear H4 H5;Omega.
+Save.
+
+(**********)
+Lemma tech_single_z_r_R1:(r:R)(z:Z)(Rlt r (IZR z))->
+ (Rle (IZR z) (Rplus r R1))->
+ (Ex [s:Z] (~s=z/\(Rlt r (IZR s))/\(Rle (IZR s) (Rplus r R1))))->False.
+Intros;Elim H1;Intros;Elim H2;Intros;Elim H4;Intros;Clear H1 H2 H4;
+ Generalize (single_z_r_R1 r z x H H0 H5 H6);Intro;Auto with zarith real.
+Save.
diff --git a/theories/Reals/Rbasic_fun.v b/theories/Reals/Rbasic_fun.v
new file mode 100644
index 000000000..97df55590
--- /dev/null
+++ b/theories/Reals/Rbasic_fun.v
@@ -0,0 +1,270 @@
+
+(* $Id$ *)
+
+(*********************************************************)
+(* Complements for the real numbers *)
+(* *)
+(*********************************************************)
+
+Require Export R_Ifp.
+
+(*******************************)
+(* Rmin *)
+(*******************************)
+
+(*********)
+Definition Rmin :R->R->R:=[x,y:R]
+ Cases (total_order_Rle x y) of
+ (leftT _) => x
+ | (rightT _) => y
+ end.
+
+(*********)
+Lemma Rmin_Rgt:(r1,r2,r:R)(Rgt (Rmin r1 r2) r)<->
+ ((Rgt r1 r)/\(Rgt r2 r)).
+Intros;Split.
+Unfold Rmin;Case (total_order_Rle r1 r2);Intros.
+Split;Auto.
+Unfold Rgt in H;Unfold Rgt;Apply (Rlt_le_trans r r1 r2 H r0).
+Split;Auto.
+Generalize (not_Rle r1 r2 n);Intro;Clear n;
+ Apply (Rgt_trans r1 r2 r H0 H).
+Intro;Elim H;Intros;Clear H;Unfold Rmin;Case (total_order_Rle r1 r2);
+ Intros;Auto.
+Save.
+
+(*******************************)
+(* Rabsolu *)
+(*******************************)
+
+(*********)
+Lemma case_Rabsolu:(r:R)(sumboolT (Rlt r R0) (Rge r R0)).
+Intro;Generalize (total_order_Rle R0 r);Intro;Elim X;Intro;Clear X.
+Right;Apply (Rle_sym1 R0 r y).
+Left;Fold (Rgt R0 r);Apply (not_Rle R0 r y).
+Save.
+
+(*********)
+Definition Rabsolu:R->R:=
+ [r:R](Cases (case_Rabsolu r) of
+ (leftT _) => (Ropp r)
+ |(rightT _) => r
+ end).
+
+(*********)
+Lemma Rabsolu_R0:(Rabsolu R0)==R0.
+Unfold Rabsolu;Case (case_Rabsolu R0);Auto;Intro.
+Generalize (Rlt_antirefl R0);Intro;ElimType False;Auto.
+Save.
+
+(*********)
+Lemma Rabsolu_no_R0:(r:R)~r==R0->~(Rabsolu r)==R0.
+Intros;Unfold Rabsolu;Case (case_Rabsolu r);Intro;Auto.
+Apply Ropp_neq;Auto.
+Save.
+
+(*********)
+Lemma Rabsolu_pos:(x:R)(Rle R0 (Rabsolu x)).
+Intros;Unfold Rabsolu;Case (case_Rabsolu x);Intro.
+Generalize (Rlt_Ropp x R0 r);Intro;Unfold Rgt in H;
+ Rewrite Ropp_O in H;Unfold Rle;Left;Assumption.
+Apply Rle_sym2;Assumption.
+Save.
+
+(*********)
+Lemma Rabsolu_pos_lt:(x:R)(~x==R0)->(Rlt R0 (Rabsolu x)).
+Intros;Generalize (Rabsolu_pos x);Intro;Unfold Rle in H0;
+ Elim H0;Intro;Auto.
+ElimType False;Clear H0;Elim H;Clear H;Generalize H1;
+ Unfold Rabsolu;Case (case_Rabsolu x);Intros;Auto.
+Clear r H1; Generalize (Rplus_plus_r x R0 (Ropp x) H0);
+ Rewrite (let (H1,H2)=(Rplus_ne x) in H1);Rewrite (Rplus_Ropp_r x);Trivial.
+Save.
+
+(*********)
+Lemma Rabsolu_minus_sym:(x,y:R)
+ (Rabsolu (Rminus x y))==(Rabsolu (Rminus y x)).
+Intros;Unfold Rabsolu;Case (case_Rabsolu (Rminus x y));
+ Case (case_Rabsolu (Rminus y x));Intros.
+ Generalize (Rminus_lt y x r);Generalize (Rminus_lt x y r0);Intros;
+ Generalize (Rlt_antisym x y H);Intro;ElimType False;Auto.
+Rewrite (Ropp_distr2 x y);Trivial.
+Rewrite (Ropp_distr2 y x);Trivial.
+Unfold Rge in r r0;Elim r;Elim r0;Intros;Clear r r0.
+Generalize (Rgt_RoppO (Rminus x y) H);Rewrite (Ropp_distr2 x y);
+ Intro;Unfold Rgt in H0;Generalize (Rlt_antisym R0 (Rminus y x) H0);
+ Intro;ElimType False;Auto.
+Rewrite (Rminus_eq x y H);Trivial.
+Rewrite (Rminus_eq y x H0);Trivial.
+Rewrite (Rminus_eq y x H0);Trivial.
+Save.
+
+(*********)
+Lemma Rabsolu_mult:(x,y:R)
+ (Rabsolu (Rmult x y))==(Rmult (Rabsolu x) (Rabsolu y)).
+Intros;Unfold Rabsolu;Case (case_Rabsolu (Rmult x y));
+ Case (case_Rabsolu x);Case (case_Rabsolu y);Intros;Auto.
+Generalize (Rlt_anti_monotony y x R0 r r0);Intro;
+ Rewrite (Rmult_Or y) in H;Generalize (Rlt_antisym (Rmult x y) R0 r1);
+ Intro;Unfold Rgt in H;ElimType False;Rewrite (Rmult_sym y x) in H;
+ Auto.
+Rewrite (Ropp_mul1 x y);Trivial.
+Rewrite (Rmult_sym x (Ropp y));Rewrite (Ropp_mul1 y x);
+ Rewrite (Rmult_sym x y);Trivial.
+Unfold Rge in r r0;Elim r;Elim r0;Clear r r0;Intros;Unfold Rgt in H H0.
+Generalize (Rlt_monotony x R0 y H H0);Intro;Rewrite (Rmult_Or x) in H1;
+ Generalize (Rlt_antisym (Rmult x y) R0 r1);Intro;ElimType False;Auto.
+Rewrite H in r1;Rewrite (Rmult_Ol y) in r1;Generalize (Rlt_antirefl R0);
+ Intro;ElimType False;Auto.
+Rewrite H0 in r1;Rewrite (Rmult_Or x) in r1;Generalize (Rlt_antirefl R0);
+ Intro;ElimType False;Auto.
+Rewrite H0 in r1;Rewrite (Rmult_Or x) in r1;Generalize (Rlt_antirefl R0);
+ Intro;ElimType False;Auto.
+Rewrite (Ropp_mul2 x y);Trivial.
+Unfold Rge in r r1;Elim r;Elim r1;Clear r r1;Intros;Unfold Rgt in H0 H.
+Generalize (Rlt_monotony y x R0 H0 r0);Intro;Rewrite (Rmult_Or y) in H1;
+ Rewrite (Rmult_sym y x) in H1;
+ Generalize (Rlt_antisym (Rmult x y) R0 H1);Intro;ElimType False;Auto.
+Generalize (imp_not_Req x R0 (or_introl (Rlt x R0) (Rgt x R0) r0));
+ Generalize (imp_not_Req y R0 (or_intror (Rlt y R0) (Rgt y R0) H0));Intros;
+ Generalize (without_div_Od x y H);Intro;Elim H3;Intro;ElimType False;
+ Auto.
+Rewrite H0 in H;Rewrite (Rmult_Or x) in H;Unfold Rgt in H;
+ Generalize (Rlt_antirefl R0);Intro;ElimType False;Auto.
+Rewrite H0;Rewrite (Rmult_Or x);Rewrite (Rmult_Or (Ropp x));Trivial.
+Unfold Rge in r0 r1;Elim r0;Elim r1;Clear r0 r1;Intros;Unfold Rgt in H0 H.
+Generalize (Rlt_monotony x y R0 H0 r);Intro;Rewrite (Rmult_Or x) in H1;
+ Generalize (Rlt_antisym (Rmult x y) R0 H1);Intro;ElimType False;Auto.
+Generalize (imp_not_Req y R0 (or_introl (Rlt y R0) (Rgt y R0) r));
+ Generalize (imp_not_Req R0 x (or_introl (Rlt R0 x) (Rgt R0 x) H0));Intros;
+ Generalize (without_div_Od x y H);Intro;Elim H3;Intro;ElimType False;
+ Auto.
+Rewrite H0 in H;Rewrite (Rmult_Ol y) in H;Unfold Rgt in H;
+ Generalize (Rlt_antirefl R0);Intro;ElimType False;Auto.
+Rewrite H0;Rewrite (Rmult_Ol y);Rewrite (Rmult_Ol (Ropp y));Trivial.
+Save.
+
+(*********)
+Lemma Rabsolu_Rinv:(r:R)(~r==R0)->(Rabsolu (Rinv r))==
+ (Rinv (Rabsolu r)).
+Intro;Unfold Rabsolu;Case (case_Rabsolu r);
+ Case (case_Rabsolu (Rinv r));Auto;Intros.
+Apply Ropp_Rinv;Auto.
+Generalize (Rlt_Rinv2 r r1);Intro;Unfold Rge in r0;Elim r0;Intros.
+Unfold Rgt in H1;Generalize (Rlt_antisym R0 (Rinv r) H1);Intro;
+ ElimType False;Auto.
+Generalize
+ (imp_not_Req (Rinv r) R0
+ (or_introl (Rlt (Rinv r) R0) (Rgt (Rinv r) R0) H0));Intro;
+ ElimType False;Auto.
+Unfold Rge in r1;Elim r1;Clear r1;Intro.
+Unfold Rgt in H0;Generalize (Rlt_antisym R0 (Rinv r)
+ (Rlt_Rinv r H0));Intro;ElimType False;Auto.
+ElimType False;Auto.
+Save.
+
+(*********)
+Lemma Rabsolu_triang:(a,b:R)(Rle (Rabsolu (Rplus a b))
+ (Rplus (Rabsolu a) (Rabsolu b))).
+Intros a b;Unfold Rabsolu;Case (case_Rabsolu (Rplus a b));
+ Case (case_Rabsolu a);Case (case_Rabsolu b);Intros.
+Apply (eq_Rle (Ropp (Rplus a b)) (Rplus (Ropp a) (Ropp b)));
+ Rewrite (Ropp_distr1 a b);Reflexivity.
+(**)
+Rewrite (Ropp_distr1 a b);
+ Apply (Rle_compatibility (Ropp a) (Ropp b) b);
+ Unfold Rle;Unfold Rge in r;Elim r;Intro.
+Left;Unfold Rgt in H;Generalize (Rlt_compatibility (Ropp b) R0 b H);
+ Intro;Elim (Rplus_ne (Ropp b));Intros v w;Rewrite v in H0;Clear v w;
+ Rewrite (Rplus_Ropp_l b) in H0;Apply (Rlt_trans (Ropp b) R0 b H0 H).
+Right;Rewrite H;Apply Ropp_O.
+(**)
+Rewrite (Ropp_distr1 a b);
+ Rewrite (Rplus_sym (Ropp a) (Ropp b));
+ Rewrite (Rplus_sym a (Ropp b));
+ Apply (Rle_compatibility (Ropp b) (Ropp a) a);
+ Unfold Rle;Unfold Rge in r0;Elim r0;Intro.
+Left;Unfold Rgt in H;Generalize (Rlt_compatibility (Ropp a) R0 a H);
+ Intro;Elim (Rplus_ne (Ropp a));Intros v w;Rewrite v in H0;Clear v w;
+ Rewrite (Rplus_Ropp_l a) in H0;Apply (Rlt_trans (Ropp a) R0 a H0 H).
+Right;Rewrite H;Apply Ropp_O.
+(**)
+ElimType False;Generalize (Rge_plus_plus_r a b R0 r);Intro;
+ Elim (Rplus_ne a);Intros v w;Rewrite v in H;Clear v w;
+ Generalize (Rge_trans (Rplus a b) a R0 H r0);Intro;Clear H;
+ Unfold Rge in H0;Elim H0;Intro;Clear H0.
+Unfold Rgt in H;Generalize (Rlt_antisym (Rplus a b) R0 r1);Intro;Auto.
+Absurd (Rplus a b)==R0;Auto.
+Apply (imp_not_Req (Rplus a b) R0);Left;Assumption.
+(**)
+ElimType False;Generalize (Rlt_compatibility a b R0 r);Intro;
+ Elim (Rplus_ne a);Intros v w;Rewrite v in H;Clear v w;
+ Generalize (Rlt_trans (Rplus a b) a R0 H r0);Intro;Clear H;
+ Unfold Rge in r1;Elim r1;Clear r1;Intro.
+Unfold Rgt in H;
+ Generalize (Rlt_trans (Rplus a b) R0 (Rplus a b) H0 H);Intro;
+ Apply (Rlt_antirefl (Rplus a b));Assumption.
+Rewrite H in H0;Apply (Rlt_antirefl R0);Assumption.
+(**)
+Rewrite (Rplus_sym a b);Rewrite (Rplus_sym (Ropp a) b);
+ Apply (Rle_compatibility b a (Ropp a));
+ Apply (Rminus_le a (Ropp a));Unfold Rminus;Rewrite (Ropp_Ropp a);
+ Generalize (Rlt_compatibility a a R0 r0);Clear r r1;Intro;
+ Elim (Rplus_ne a);Intros v w;Rewrite v in H;Clear v w;
+ Generalize (Rlt_trans (Rplus a a) a R0 H r0);Intro;
+ Apply (Rlt_le (Rplus a a) R0 H0).
+(**)
+Apply (Rle_compatibility a b (Ropp b));
+ Apply (Rminus_le b (Ropp b));Unfold Rminus;Rewrite (Ropp_Ropp b);
+ Generalize (Rlt_compatibility b b R0 r);Clear r0 r1;Intro;
+ Elim (Rplus_ne b);Intros v w;Rewrite v in H;Clear v w;
+ Generalize (Rlt_trans (Rplus b b) b R0 H r);Intro;
+ Apply (Rlt_le (Rplus b b) R0 H0).
+(**)
+Unfold Rle;Right;Reflexivity.
+Save.
+
+(*********)
+Lemma Rabsolu_triang_inv:(a,b:R)(Rle (Rminus (Rabsolu a) (Rabsolu b))
+ (Rabsolu (Rminus a b))).
+Intros;Unfold Rabsolu;Case (case_Rabsolu a);Case (case_Rabsolu b);
+ Case (case_Rabsolu (Rminus a b));Intros.
+Unfold Rle;Right;Rewrite (Ropp_distr2 a b);Unfold Rminus;
+ Rewrite Ropp_Ropp;Apply Rplus_sym.
+Unfold 1 Rminus;Rewrite Ropp_Ropp;Rewrite Rplus_sym;
+ Fold (Rminus b a);Generalize (minus_Rge a b r);Intro;
+ Generalize (Rle_sym2 b a H);Intro;Generalize (Rle_minus b a H0);
+ Intro;Generalize (Rle_sym2 R0 (Rminus a b) r);Intro;
+ Apply (Rle_trans (Rminus b a) R0 (Rminus a b) H1 H2).
+Rewrite (Ropp_distr2 a b);Unfold Rminus;
+ Rewrite (Rplus_sym b (Ropp a));Apply Rle_compatibility;
+ Unfold Rge in r0;Elim r0;Intros.
+Unfold Rle;Left;Generalize (Rgt_RoppO b H);Intro;Unfold Rgt in H;
+ Apply (Rlt_trans (Ropp b) R0 b H0 H).
+Unfold Rle;Right;Rewrite H;Apply Ropp_O.
+Generalize (minus_Rge a b r);Intro;
+ Generalize (Rge_trans a b R0 H r0);Intro;
+ Generalize (Rlt_antisym a R0 r1);Intro;
+ Unfold Rge in H0;Elim H0;Intro.
+Unfold Rgt in H2;ElimType False;Auto.
+Rewrite H2 in r1;Generalize (Rlt_antirefl R0);Intro;ElimType False;
+ Auto.
+Generalize (Rminus_lt a b r);Intro;Generalize (Rlt_trans a b R0 H r0);
+ Intro;Unfold Rge in r1;Elim r1;Intro.
+Generalize (Rlt_antisym a R0 H0);Intro;Unfold Rgt in H1;ElimType False;
+ Auto.
+Rewrite H1 in H0;Generalize (Rlt_antirefl R0);Intro;ElimType False;
+ Auto.
+Unfold Rminus;Apply Rle_compatibility;Rewrite Ropp_Ropp;
+ Generalize (Rlt_compatibility (Ropp b) b R0 r0);Intro;
+ Rewrite Rplus_Ropp_l in H;
+ Rewrite (let (H1,H2)=(Rplus_ne (Ropp b)) in H1) in H;
+ Generalize (Rlt_trans b R0 (Ropp b) r0 H);Intro;
+ Apply Rlt_le;Assumption.
+Generalize (Rlt_compatibility (Ropp (Rminus a b)) (Rminus a b) R0 r);
+Intro; Rewrite Rplus_Ropp_l in H;
+ Rewrite (let (H1,H2)=(Rplus_ne (Ropp (Rminus a b))) in H1) in H;
+ Generalize (Rlt_trans (Rminus a b) R0 (Ropp (Rminus a b)) r H);Intro;
+ Apply Rlt_le;Assumption.
+Unfold Rle;Right;Trivial.
+Save.
diff --git a/theories/Reals/Rderiv.v b/theories/Reals/Rderiv.v
new file mode 100644
index 000000000..d36ca5897
--- /dev/null
+++ b/theories/Reals/Rderiv.v
@@ -0,0 +1,497 @@
+
+(* $Id$ *)
+
+(*********************************************************)
+(* Definition of the derivative,continuity *)
+(* *)
+(*********************************************************)
+Require Export Rfunctions.
+Require Classical_Pred_Type.
+Require Omega.
+
+(*********)
+Definition D_x:(R->Prop)->R->R->Prop:=[D:R->Prop][y:R][x:R]
+ (D x)/\(~y==x).
+
+(*********)
+Definition continue_in:(R->R)->(R->Prop)->R->Prop:=
+ [f:R->R; D:R->Prop; x0:R](limit1_in f (D_x D x0) (f x0) x0).
+
+(*********)
+Definition D_in:(R->R)->(R->R)->(R->Prop)->R->Prop:=
+ [f:R->R; d:R->R; D:R->Prop; x0:R](limit1_in
+ [x:R] (Rmult (Rminus (f x) (f x0)) (Rinv (Rminus x x0)))
+ (D_x D x0) (d x0) x0).
+
+(*********)
+Lemma cont_deriv:(f,d:R->R;D:R->Prop;x0:R)
+ (D_in f d D x0)->(continue_in f D x0).
+Unfold continue_in;Unfold D_in;Unfold limit1_in;Unfold limit_in;Simpl;
+ Intros;Cut (Rgt (Rminus eps (Rabsolu (d x0))) R0)\/
+ ~(Rgt (Rminus eps (Rabsolu (d x0))) R0).
+Intro;Elim H1;Clear H1;Intro.
+Elim (H (Rminus eps (Rabsolu (d x0))) H1);Clear H;Intros;Elim H;Clear H;
+ Intros;Split with (Rmin R1 x);Split.
+Generalize Rlt_R0_R1;Intro Hyp;Fold (Rgt R1 R0) in Hyp;
+ Elim (Rmin_Rgt R1 x R0);Intros a b;
+ Apply (b (conj (Rgt R1 R0) (Rgt x R0) (Hyp) H)).
+Intros; Elim H3;Clear H3;Intros;
+ Generalize (let (H1,H2)=(Rmin_Rgt R1 x (R_dist x1 x0)) in H1);
+ Unfold Rgt;Intro;Elim (H5 H4);Clear H5;Intros;
+ Generalize (H2 x1 (conj (D_x D x0 x1) (Rlt (R_dist x1 x0) x) H3 H6));
+ Clear H2;Intro;Unfold D_x in H3;Elim H3;Intros;
+ Generalize (sym_not_eqT R x0 x1 H8);Clear H8;Intro H8;
+ Generalize (Rminus_eq_contra x1 x0 H8);Clear H7 H8;
+ Intro;Generalize H2;Pattern 1 (d x0);
+ Rewrite <-(let (H1,H2)=(Rmult_ne (d x0)) in H2);
+ Rewrite <-(Rinv_l (Rminus x1 x0) H7); Unfold R_dist;Unfold 1 Rminus;
+ Rewrite (Rmult_sym (Rminus (f x1) (f x0)) (Rinv (Rminus x1 x0)));
+ Rewrite (Rmult_sym (Rmult (Rinv (Rminus x1 x0)) (Rminus x1 x0)) (d x0));
+ Rewrite <-(Ropp_mul1 (d x0) (Rmult (Rinv (Rminus x1 x0)) (Rminus x1 x0)));
+ Rewrite (Rmult_sym (Ropp (d x0))
+ (Rmult (Rinv (Rminus x1 x0)) (Rminus x1 x0)));
+ Rewrite (Rmult_assoc (Rinv (Rminus x1 x0)) (Rminus x1 x0) (Ropp (d x0)));
+ Rewrite <-(Rmult_Rplus_distr (Rinv (Rminus x1 x0)) (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0))));
+ Rewrite (Rabsolu_mult (Rinv (Rminus x1 x0))
+ (Rplus (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0)))));
+ Clear H2;Intro;Generalize (Rlt_monotony (Rabsolu (Rminus x1 x0))
+ (Rmult (Rabsolu (Rinv (Rminus x1 x0)))
+ (Rabsolu
+ (Rplus (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0))))))
+ (Rminus eps (Rabsolu (d x0)))
+ (Rabsolu_pos_lt (Rminus x1 x0) H7) H2);
+ Rewrite <-(Rmult_assoc (Rabsolu (Rminus x1 x0))
+ (Rabsolu (Rinv (Rminus x1 x0)))
+ (Rabsolu
+ (Rplus (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0))))));
+ Rewrite (Rabsolu_Rinv (Rminus x1 x0) H7);
+ Rewrite (Rinv_r (Rabsolu (Rminus x1 x0))
+ (Rabsolu_no_R0 (Rminus x1 x0) H7));
+ Rewrite (let (H1,H2)=(Rmult_ne (Rabsolu
+ (Rplus (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0)))))) in H2);
+ Unfold 4 Rminus;
+ Rewrite (Rmult_Rplus_distr (Rabsolu (Rminus x1 x0)) eps
+ (Ropp (Rabsolu (d x0))));
+ Rewrite (Rmult_sym (Rabsolu (Rminus x1 x0)) (Ropp (Rabsolu (d x0))));
+ Rewrite (Ropp_mul1 (Rabsolu (d x0)) (Rabsolu (Rminus x1 x0)));
+ Rewrite <-(Rabsolu_mult (d x0) (Rminus x1 x0));
+ Generalize (Rabsolu_triang_inv (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (d x0)));Intro;
+ Rewrite (Rmult_sym (Rminus x1 x0) (Ropp (d x0)));
+ Rewrite (Ropp_mul1 (d x0) (Rminus x1 x0));
+ Fold (Rminus (Rminus (f x1) (f x0)) (Rmult (d x0) (Rminus x1 x0)));
+ Rewrite (Rmult_sym (Rminus x1 x0) (d x0)) in H8;
+ Clear H2;Intro;Generalize (Rle_lt_trans
+ (Rminus (Rabsolu (Rminus (f x1) (f x0)))
+ (Rabsolu (Rmult (d x0) (Rminus x1 x0))))
+ (Rabsolu
+ (Rminus (Rminus (f x1) (f x0)) (Rmult (d x0) (Rminus x1 x0))))
+ (Rplus (Rmult (Rabsolu (Rminus x1 x0)) eps)
+ (Ropp (Rabsolu (Rmult (d x0) (Rminus x1 x0))))) H8 H2);
+ Unfold 1 Rminus;
+ Rewrite (Rplus_sym (Rabsolu (Rminus (f x1) (f x0)))
+ (Ropp (Rabsolu (Rmult (d x0) (Rminus x1 x0)))));
+ Rewrite (Rplus_sym (Rmult (Rabsolu (Rminus x1 x0)) eps)
+ (Ropp (Rabsolu (Rmult (d x0) (Rminus x1 x0)))));
+ Clear H8 H2;Intro;Generalize (Rlt_anti_compatibility
+ (Ropp (Rabsolu (Rmult (d x0) (Rminus x1 x0))))
+ (Rabsolu (Rminus (f x1) (f x0)))
+ (Rmult (Rabsolu (Rminus x1 x0)) eps) H2);
+ Clear H2;Intro;Unfold Rgt in H0;Unfold R_dist in H5;
+ Generalize (Rlt_monotony eps (Rabsolu (Rminus x1 x0)) R1 H0 H5);
+ Rewrite (let (H1,H2)=(Rmult_ne eps) in H1);
+ Rewrite (Rmult_sym eps (Rabsolu (Rminus x1 x0)));
+ Intro;Apply (Rlt_trans (Rabsolu (Rminus (f x1) (f x0)))
+ (Rmult (Rabsolu (Rminus x1 x0)) eps)
+ eps H2 H8).
+(**)
+Elim (H eps H0);Clear H;Intros;Elim H;Clear H;Intros;
+ Split with (Rmin (Rmin (Rinv (Rplus R1 R1)) x)
+ (Rmult eps (Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0))))));
+ Split.
+Cut (Rgt (Rmin (Rinv (Rplus R1 R1)) x) R0).
+Cut (Rgt (Rmult eps (Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0))))) R0).
+Intros;Elim (Rmin_Rgt (Rmin (Rinv (Rplus R1 R1)) x)
+ (Rmult eps (Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0))))) R0);
+ Intros a b;
+ Apply (b (conj (Rgt (Rmin (Rinv (Rplus R1 R1)) x) R0)
+ (Rgt (Rmult eps (Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0))))) R0)
+ H4 H3)).
+Generalize (Rgt_not_le (Rminus eps (Rabsolu (d x0))) R0 H1);Intro;
+ Generalize (Rminus_le eps (Rabsolu (d x0)) H3);Intro;Generalize H0;
+ Intro;Unfold Rgt in H5;Generalize (Rlt_le_trans R0 eps (Rabsolu (d x0))
+ H5 H4);Intro;
+ Fold (Rgt (Rabsolu (d x0)) R0) in H6;Cut ~(Rplus R1 R1)==R0.
+Intro;Generalize (Rabsolu_pos_lt (Rplus R1 R1) H7);Intro;
+ Fold (Rgt (Rabsolu (Rplus R1 R1)) R0) in H8;
+ Generalize (Rmult_gt (Rabsolu (Rplus R1 R1)) (Rabsolu (d x0)) H8 H6);
+ Intro;Unfold Rgt in H9;
+ Rewrite <-(Rabsolu_mult (Rplus R1 R1) (d x0)) in H9;
+ Generalize (Rlt_Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0))) H9);Intro;
+ Fold (Rgt (Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0)))) R0) in H10;
+ Apply (Rmult_gt eps (Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0)))) H0 H10).
+Apply (imp_not_Req (Rplus R1 R1) R0).
+Right;Unfold Rgt;Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H7);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H8;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H7 H8).
+Elim (Rmin_Rgt (Rinv (Rplus R1 R1)) x R0);Intros a b;
+ Cut (Rlt R0 (Rplus R1 R1)).
+Intro;Generalize (Rlt_Rinv (Rplus R1 R1) H3);Intro;
+ Fold (Rgt (Rinv (Rplus R1 R1)) R0) in H4;
+ Apply (b (conj (Rgt (Rinv (Rplus R1 R1)) R0) (Rgt x R0) H4 H)).
+Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H3);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H4;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H3 H4).
+Intros;Elim H3;Clear H3;Intros;
+ Generalize (let (H1,H2)=(Rmin_Rgt (Rmin (Rinv (Rplus R1 R1)) x)
+ (Rmult eps (Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0)))))
+ (R_dist x1 x0)) in H1);Unfold Rgt;Intro;Elim (H5 H4);Clear H5;
+ Intros;
+ Generalize (let (H1,H2)=(Rmin_Rgt (Rinv (Rplus R1 R1)) x
+ (R_dist x1 x0)) in H1);Unfold Rgt;Intro;Elim (H7 H5);Clear H7;
+ Intros;Clear H4 H5;
+ Generalize (H2 x1 (conj (D_x D x0 x1) (Rlt (R_dist x1 x0) x) H3 H8));
+ Clear H2;Intro;Unfold D_x in H3;Elim H3;Intros;
+ Generalize (sym_not_eqT R x0 x1 H5);Clear H5;Intro H5;
+ Generalize (Rminus_eq_contra x1 x0 H5);
+ Intro;Generalize H2;Pattern 1 (d x0);
+ Rewrite <-(let (H1,H2)=(Rmult_ne (d x0)) in H2);
+ Rewrite <-(Rinv_l (Rminus x1 x0) H9); Unfold R_dist;Unfold 1 Rminus;
+ Rewrite (Rmult_sym (Rminus (f x1) (f x0)) (Rinv (Rminus x1 x0)));
+ Rewrite (Rmult_sym (Rmult (Rinv (Rminus x1 x0)) (Rminus x1 x0)) (d x0));
+ Rewrite <-(Ropp_mul1 (d x0) (Rmult (Rinv (Rminus x1 x0)) (Rminus x1 x0)));
+ Rewrite (Rmult_sym (Ropp (d x0))
+ (Rmult (Rinv (Rminus x1 x0)) (Rminus x1 x0)));
+ Rewrite (Rmult_assoc (Rinv (Rminus x1 x0)) (Rminus x1 x0) (Ropp (d x0)));
+ Rewrite <-(Rmult_Rplus_distr (Rinv (Rminus x1 x0)) (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0))));
+ Rewrite (Rabsolu_mult (Rinv (Rminus x1 x0))
+ (Rplus (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0)))));
+ Clear H2;Intro;Generalize (Rlt_monotony (Rabsolu (Rminus x1 x0))
+ (Rmult (Rabsolu (Rinv (Rminus x1 x0)))
+ (Rabsolu
+ (Rplus (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0)))))) eps
+ (Rabsolu_pos_lt (Rminus x1 x0) H9) H2);
+ Rewrite <-(Rmult_assoc (Rabsolu (Rminus x1 x0))
+ (Rabsolu (Rinv (Rminus x1 x0)))
+ (Rabsolu
+ (Rplus (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0))))));
+ Rewrite (Rabsolu_Rinv (Rminus x1 x0) H9);
+ Rewrite (Rinv_r (Rabsolu (Rminus x1 x0))
+ (Rabsolu_no_R0 (Rminus x1 x0) H9));
+ Rewrite (let (H1,H2)=(Rmult_ne (Rabsolu
+ (Rplus (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (Ropp (d x0)))))) in H2);
+ Generalize (Rabsolu_triang_inv (Rminus (f x1) (f x0))
+ (Rmult (Rminus x1 x0) (d x0)));Intro;
+ Rewrite (Rmult_sym (Rminus x1 x0) (Ropp (d x0)));
+ Rewrite (Ropp_mul1 (d x0) (Rminus x1 x0));
+ Fold (Rminus (Rminus (f x1) (f x0)) (Rmult (d x0) (Rminus x1 x0)));
+ Rewrite (Rmult_sym (Rminus x1 x0) (d x0)) in H10;
+ Clear H2;Intro;Generalize (Rle_lt_trans
+ (Rminus (Rabsolu (Rminus (f x1) (f x0)))
+ (Rabsolu (Rmult (d x0) (Rminus x1 x0))))
+ (Rabsolu
+ (Rminus (Rminus (f x1) (f x0)) (Rmult (d x0) (Rminus x1 x0))))
+ (Rmult (Rabsolu (Rminus x1 x0)) eps) H10 H2);
+ Clear H2;Intro;
+ Generalize (Rlt_compatibility (Rabsolu (Rmult (d x0) (Rminus x1 x0)))
+ (Rminus (Rabsolu (Rminus (f x1) (f x0)))
+ (Rabsolu (Rmult (d x0) (Rminus x1 x0))))
+ (Rmult (Rabsolu (Rminus x1 x0)) eps) H2);
+ Unfold 2 Rminus;Rewrite (Rplus_sym (Rabsolu (Rminus (f x1) (f x0)))
+ (Ropp (Rabsolu (Rmult (d x0) (Rminus x1 x0)))));
+ Rewrite <-(Rplus_assoc (Rabsolu (Rmult (d x0) (Rminus x1 x0)))
+ (Ropp (Rabsolu (Rmult (d x0) (Rminus x1 x0))))
+ (Rabsolu (Rminus (f x1) (f x0))));
+ Rewrite (Rplus_Ropp_r (Rabsolu (Rmult (d x0) (Rminus x1 x0))));
+ Rewrite (let (H1,H2)=(Rplus_ne (Rabsolu (Rminus (f x1) (f x0)))) in H2);
+ Clear H2;Intro;Cut (Rlt (Rplus (Rabsolu (Rmult (d x0) (Rminus x1 x0)))
+ (Rmult (Rabsolu (Rminus x1 x0)) eps)) eps).
+Intro;Apply (Rlt_trans (Rabsolu (Rminus (f x1) (f x0)))
+ (Rplus (Rabsolu (Rmult (d x0) (Rminus x1 x0)))
+ (Rmult (Rabsolu (Rminus x1 x0)) eps)) eps H2 H11).
+Clear H2 H5 H3 H10;Cut (Rlt R0 (Rabsolu (d x0))).
+Intro;Unfold Rgt in H0;Generalize (Rlt_monotony eps (R_dist x1 x0)
+ (Rinv (Rplus R1 R1)) H0 H7);Clear H7;Intro;
+ Generalize (Rlt_monotony (Rabsolu (d x0)) (R_dist x1 x0)
+ (Rmult eps (Rinv (Rabsolu (Rmult (Rplus R1 R1) (d x0))))) H2 H6);
+ Clear H6;Intro;Rewrite (Rmult_sym eps (R_dist x1 x0)) in H3;
+ Unfold R_dist in H3 H5;
+ Rewrite <-(Rabsolu_mult (d x0) (Rminus x1 x0)) in H5;
+ Rewrite (Rabsolu_mult (Rplus R1 R1) (d x0)) in H5;
+ Cut ~(Rabsolu (Rplus R1 R1))==R0.
+Intro;Fold (Rgt (Rabsolu (d x0)) R0) in H2;
+ Rewrite (Rinv_Rmult (Rabsolu (Rplus R1 R1)) (Rabsolu (d x0))
+ H6 (imp_not_Req (Rabsolu (d x0)) R0
+ (or_intror (Rlt (Rabsolu (d x0)) R0) (Rgt (Rabsolu (d x0)) R0) H2)))
+ in H5;
+ Rewrite (Rmult_sym (Rabsolu (d x0)) (Rmult eps
+ (Rmult (Rinv (Rabsolu (Rplus R1 R1)))
+ (Rinv (Rabsolu (d x0)))))) in H5;
+ Rewrite <-(Rmult_assoc eps (Rinv (Rabsolu (Rplus R1 R1)))
+ (Rinv (Rabsolu (d x0)))) in H5;
+ Rewrite (Rmult_assoc (Rmult eps (Rinv (Rabsolu (Rplus R1 R1))))
+ (Rinv (Rabsolu (d x0))) (Rabsolu (d x0))) in H5;
+ Rewrite (Rinv_l (Rabsolu (d x0)) (imp_not_Req (Rabsolu (d x0)) R0
+ (or_intror (Rlt (Rabsolu (d x0)) R0) (Rgt (Rabsolu (d x0)) R0) H2)))
+ in H5;
+ Rewrite (let (H1,H2)=(Rmult_ne (Rmult eps (Rinv (Rabsolu (Rplus R1 R1)))))
+ in H1) in H5;Cut (Rabsolu (Rplus R1 R1))==(Rplus R1 R1).
+Intro;Rewrite H7 in H5;
+ Generalize (Rplus_lt (Rabsolu (Rmult (d x0) (Rminus x1 x0)))
+ (Rmult eps (Rinv (Rplus R1 R1)))
+ (Rmult (Rabsolu (Rminus x1 x0)) eps)
+ (Rmult eps (Rinv (Rplus R1 R1))) H5 H3);Intro;
+ Rewrite eps2 in H10;Assumption.
+Unfold Rabsolu;Case (case_Rabsolu (Rplus R1 R1));Auto.
+ Intro;Cut (Rlt R0 (Rplus R1 R1)).
+Intro;Generalize (Rlt_antisym R0 (Rplus R1 R1) H7);Intro;ElimType False;
+ Auto.
+Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H7);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H10;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H7 H10).
+Cut ~(Rplus R1 R1)==R0.
+Intro;Red;Intro;Apply (Rabsolu_no_R0 (Rplus R1 R1) H6);Auto.
+Apply (imp_not_Req (Rplus R1 R1) R0).
+Right;Unfold Rgt;Generalize Rlt_R0_R1;Intro;
+ Generalize (Rlt_compatibility R1 R0 R1 H6);Intro;
+ Rewrite (let (H1,H2)=(Rplus_ne R1) in H1) in H7;
+ Apply (Rlt_trans R0 R1 (Rplus R1 R1) H6 H7).
+Generalize (Rgt_not_le (Rminus eps (Rabsolu (d x0))) R0 H1);Intro;
+ Generalize (Rminus_le eps (Rabsolu (d x0)) H2);Intro;
+ Unfold Rgt in H0;Apply (Rlt_le_trans R0 eps (Rabsolu (d x0)) H0 H3).
+Apply classic.
+Save.
+
+(*********)
+Lemma Dconst:(D:R->Prop)(y:R)(x0:R)(D_in [x:R]y [x:R]R0 D x0).
+Unfold D_in;Intros;Unfold limit1_in;Unfold limit_in;Intros;Simpl;
+ Split with eps;Split;Auto.
+Intros;Rewrite (eq_Rminus y y (refl_eqT R y));
+ Rewrite Rmult_Ol;Unfold R_dist;
+ Rewrite (eq_Rminus R0 R0 (refl_eqT R R0));Unfold Rabsolu;
+ Case (case_Rabsolu R0);Intro.
+Absurd (Rlt R0 R0);Auto.
+Red;Intro;Apply (Rlt_antirefl R0 H1).
+Unfold Rgt in H0;Assumption.
+Save.
+
+(*********)
+Lemma Dx:(D:R->Prop)(x0:R)(D_in [x:R]x [x:R]R1 D x0).
+Unfold D_in;Intros;Unfold limit1_in;Unfold limit_in;Intros;Simpl;
+ Split with eps;Split;Auto.
+Intros;Elim H0;Clear H0;Intros;Unfold D_x in H0;
+ Elim H0;Intros;
+ Rewrite (Rinv_r (Rminus x x0) (Rminus_eq_contra x x0
+ (sym_not_eqT R x0 x H3)));
+ Unfold R_dist;
+ Rewrite (eq_Rminus R1 R1 (refl_eqT R R1));Unfold Rabsolu;
+ Case (case_Rabsolu R0);Intro.
+Absurd (Rlt R0 R0);Auto.
+Red;Intro;Apply (Rlt_antirefl R0 r).
+Unfold Rgt in H;Assumption.
+Save.
+
+(*********)
+Lemma Dadd:(D:R->Prop)(df,dg:R->R)(f,g:R->R)(x0:R)
+ (D_in f df D x0)->(D_in g dg D x0)->
+ (D_in [x:R](Rplus (f x) (g x)) [x:R](Rplus (df x) (dg x)) D x0).
+Unfold D_in;Intros;Generalize (limit_plus
+ [x:R](Rmult (Rminus (f x) (f x0)) (Rinv (Rminus x x0)))
+ [x:R](Rmult (Rminus (g x) (g x0)) (Rinv (Rminus x x0)))
+ (D_x D x0) (df x0) (dg x0) x0 H H0);Clear H H0;
+ 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;
+ Rewrite (Rmult_sym (Rminus (f x1) (f x0)) (Rinv (Rminus x1 x0))) in H1;
+ Rewrite (Rmult_sym (Rminus (g x1) (g x0)) (Rinv (Rminus x1 x0))) in H1;
+ Rewrite <-(Rmult_Rplus_distr (Rinv (Rminus x1 x0))
+ (Rminus (f x1) (f x0))
+ (Rminus (g x1) (g x0))) in H1;
+ Rewrite (Rmult_sym (Rinv (Rminus x1 x0))
+ (Rplus (Rminus (f x1) (f x0)) (Rminus (g x1) (g x0)))) in H1;
+ Cut (Rplus (Rminus (f x1) (f x0)) (Rminus (g x1) (g x0)))==
+ (Rminus (Rplus (f x1) (g x1)) (Rplus (f x0) (g x0))).
+Intro;Rewrite H3 in H1;Assumption.
+Ring.
+Save.
+
+(*********)
+Lemma Dmult:(D:R->Prop)(df,dg:R->R)(f,g:R->R)(x0:R)
+ (D_in f df D x0)->(D_in g dg D x0)->
+ (D_in [x:R](Rmult (f x) (g x))
+ [x:R](Rplus (Rmult (df x) (g x)) (Rmult (f x) (dg x))) D x0).
+Intros;Unfold D_in;Generalize H H0;Intros;Unfold D_in in H H0;
+ Generalize (cont_deriv f df D x0 H1);Unfold continue_in;Intro;
+ Generalize (limit_mul
+ [x:R](Rmult (Rminus (g x) (g x0)) (Rinv (Rminus x x0)))
+ [x:R](f x) (D_x D x0) (dg x0) (f x0) x0 H0 H3);Intro;
+ Cut (limit1_in [x:R](g x0) (D_x D x0) (g x0) x0).
+Intro;Generalize (limit_mul
+ [x:R](Rmult (Rminus (f x) (f x0)) (Rinv (Rminus x x0)))
+ [_:R](g x0) (D_x D x0) (df x0) (g x0) x0 H H5);Clear H H0 H1 H2 H3 H5;
+ Intro;Generalize (limit_plus
+ [x:R](Rmult (Rmult (Rminus (f x) (f x0)) (Rinv (Rminus x x0))) (g x0))
+ [x:R](Rmult (Rmult (Rminus (g x) (g x0)) (Rinv (Rminus x x0)))
+ (f x)) (D_x D x0) (Rmult (df x0) (g x0))
+ (Rmult (dg x0) (f x0)) x0 H H4);
+ Clear H4 H;Intro;Unfold limit1_in in H;Unfold limit_in in H;
+ Simpl in H;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;
+ Rewrite (Rmult_sym (Rminus (f x1) (f x0)) (Rinv (Rminus x1 x0))) in H1;
+ Rewrite (Rmult_sym (Rminus (g x1) (g x0)) (Rinv (Rminus x1 x0))) in H1;
+ Rewrite (Rmult_assoc (Rinv (Rminus x1 x0)) (Rminus (f x1) (f x0))
+ (g x0)) in H1;
+ Rewrite (Rmult_assoc (Rinv (Rminus x1 x0)) (Rminus (g x1) (g x0))
+ (f x1)) in H1;
+ Rewrite <-(Rmult_Rplus_distr (Rinv (Rminus x1 x0))
+ (Rmult (Rminus (f x1) (f x0)) (g x0))
+ (Rmult (Rminus (g x1) (g x0)) (f x1))) in H1;
+ Rewrite (Rmult_sym (Rinv (Rminus x1 x0))
+ (Rplus (Rmult (Rminus (f x1) (f x0)) (g x0))
+ (Rmult (Rminus (g x1) (g x0)) (f x1)))) in H1;
+ Rewrite (Rmult_sym (dg x0) (f x0)) in H1;
+ Cut (Rplus (Rmult (Rminus (f x1) (f x0)) (g x0))
+ (Rmult (Rminus (g x1) (g x0)) (f x1)))==
+ (Rminus (Rmult (f x1) (g x1)) (Rmult (f x0) (g x0))).
+Intro;Rewrite H3 in H1;Assumption.
+Ring.
+Unfold limit1_in;Unfold limit_in;Simpl;Intros;
+ Split with eps;Split;Auto;Intros;Elim (R_dist_refl (g x0) (g x0));
+ Intros a b;Rewrite (b (refl_eqT R (g x0)));Unfold Rgt in H;Assumption.
+Save.
+
+(*********)
+Lemma Dmult_const:(D:R->Prop)(f,df:R->R)(x0:R)(a:R)(D_in f df D x0)->
+ (D_in [x:R](Rmult a (f x)) ([x:R](Rmult a (df x))) D x0).
+Intros;Generalize (Dmult D [_:R]R0 df [_:R]a f x0 (Dconst D a x0) H);
+ Unfold D_in;Intros;
+ Rewrite (Rmult_Ol (f x0)) in H0;
+ Rewrite (let (H1,H2)=(Rplus_ne (Rmult a (df x0))) in H2) in H0;
+ Assumption.
+Save.
+
+(*********)
+Lemma Dopp:(D:R->Prop)(f,df:R->R)(x0:R)(D_in f df D x0)->
+ (D_in [x:R](Ropp (f x)) ([x:R](Ropp (df x))) D x0).
+Intros;Generalize (Dmult_const D f df x0 (Ropp R1) H); Unfold D_in;
+ Unfold limit1_in;Unfold limit_in;Intros;
+ Generalize (H0 eps H1);Clear H0;Intro;Elim H0;Clear H0;Intros;
+ Elim H0;Clear H0;Simpl;Intros;Split with x;Split;Auto.
+Intros;Generalize (H2 x1 H3);Clear H2;Intro;Rewrite Ropp_mul1 in H2;
+ Rewrite Ropp_mul1 in H2;Rewrite Ropp_mul1 in H2;
+ Rewrite (let (H1,H2)=(Rmult_ne (f x1)) in H2) in H2;
+ Rewrite (let (H1,H2)=(Rmult_ne (f x0)) in H2) in H2;
+ Rewrite (let (H1,H2)=(Rmult_ne (df x0)) in H2) in H2;Assumption.
+Save.
+
+(*********)
+Lemma Dx_pow_n:(n:nat)(D:R->Prop)(x0:R)
+ (D_in [x:R](pow x n)
+ [x:R](Rmult (INR n) (pow x (minus n (1)))) D x0).
+Induction n;Intros.
+Simpl; Rewrite Rmult_Ol; Apply Dconst.
+Intros;Cut n0=(minus (S n0) (1));
+ [ Intro a; Rewrite <- a;Clear a | Simpl; Apply minus_n_O ].
+Generalize (Dmult D [_:R]R1
+ [x:R](Rmult (INR n0) (pow x (minus n0 (1)))) [x:R]x [x:R](pow x n0)
+ x0 (Dx D x0) (H D x0));Unfold D_in;Unfold limit1_in;Unfold limit_in;
+ Simpl;Intros;
+ Elim (H0 eps H1);Clear H0;Intros;Elim H0;Clear H0;Intros;
+ Split with x;Split;Auto.
+Intros;Generalize (H2 x1 H3);Clear H2 H3;Intro;
+ Rewrite (let (H1,H2)=(Rmult_ne (pow x0 n0)) in H2) in H2;
+ Rewrite (tech_pow_Rmult x1 n0) in H2;
+ Rewrite (tech_pow_Rmult x0 n0) in H2;
+ Rewrite (Rmult_sym (INR n0) (pow x0 (minus n0 (1)))) in H2;
+ Rewrite <-(Rmult_assoc x0 (pow x0 (minus n0 (1))) (INR n0)) in H2;
+ Rewrite (tech_pow_Rmult x0 (minus n0 (1))) in H2;
+ Elim (classic (n0=O));Intro cond.
+Rewrite cond in H2;Rewrite cond;Simpl in H2;Simpl;
+ Cut (Rplus R1 (Rmult (Rmult x0 R1) R0))==(Rmult R1 R1);
+ [Intro A; Rewrite A in H2; Assumption|Ring].
+Cut ~(n0=O)->(S (minus n0 (1)))=n0;[Intro|Omega];
+ Rewrite (H3 cond) in H2; Rewrite (Rmult_sym (pow x0 n0) (INR n0)) in H2;
+ Rewrite (tech_pow_Rplus x0 n0 n0) in H2; Assumption.
+Save.
+
+(*********)
+Lemma Dcomp:(Df,Dg:R->Prop)(df,dg:R->R)(f,g:R->R)(x0:R)
+ (D_in f df Df x0)->(D_in g dg Dg (f x0))->
+ (D_in [x:R](g (f x)) [x:R](Rmult (df x) (dg (f x)))
+ (Dgf Df Dg f) x0).
+Intros Df Dg df dg f g x0 H H0;Generalize H H0;Unfold D_in;Intros;
+Generalize (limit_comp f [x:R](Rmult (Rminus (g x) (g (f x0)))
+ (Rinv (Rminus x (f x0)))) (D_x Df x0)
+ (D_x Dg (f x0))
+ (f x0) (dg (f x0)) x0);Intro;
+ Generalize (cont_deriv f df Df x0 H);Intro;Unfold continue_in in H4;
+ Generalize (H3 H4 H2);Clear H3;Intro;
+ Generalize (limit_mul [x:R](Rmult (Rminus (g (f x)) (g (f x0)))
+ (Rinv (Rminus (f x) (f x0))))
+ [x:R](Rmult (Rminus (f x) (f x0))
+ (Rinv (Rminus x x0)))
+ (Dgf (D_x Df x0) (D_x Dg (f x0)) f)
+ (dg (f x0)) (df x0) x0 H3);Intro;
+ Cut (limit1_in
+ [x:R](Rmult (Rminus (f x) (f x0)) (Rinv (Rminus x x0)))
+ (Dgf (D_x Df x0) (D_x Dg (f x0)) f) (df x0) x0).
+Intro;Generalize (H5 H6);Clear H5;Intro;
+ Generalize (limit_mul
+ [x:R](Rmult (Rminus (f x) (f x0)) (Rinv (Rminus x x0)))
+ [x:R](dg (f x0))
+ (D_x Df x0) (df x0) (dg (f x0)) x0 H1
+ (limit_free [x:R](dg (f x0)) (D_x Df x0) x0 x0));
+ Intro;
+ Unfold limit1_in;Unfold limit_in;Simpl;Unfold limit1_in in H5 H7;
+ Unfold limit_in in H5 H7;Simpl in H5 H7;Intros;Elim (H5 eps H8);
+ Elim (H7 eps H8);Clear H5 H7;Intros;Elim H5;Elim H7;Clear H5 H7;
+ Intros;Split with (Rmin x x1);Split.
+Elim (Rmin_Rgt x x1 R0);Intros a b;
+ Apply (b (conj (Rgt x R0) (Rgt x1 R0) H9 H5));Clear a b.
+Intros;Elim H11;Clear H11;Intros;Elim (Rmin_Rgt x x1 (R_dist x2 x0));
+ Intros a b;Clear b;Unfold Rgt in a;Elim (a H12);Clear H5 a;Intros;
+ Unfold D_x Dgf in H11 H7 H10;Clear H12;
+ Elim (classic (f x2)==(f x0));Intro.
+Elim H11;Clear H11;Intros;Elim H11;Clear H11;Intros;
+ Generalize (H10 x2 (conj (Df x2)/\~x0==x2 (Rlt (R_dist x2 x0) x)
+ (conj (Df x2) ~x0==x2 H11 H14) H5));Intro;
+ Rewrite (eq_Rminus (f x2) (f x0) H12) in H16;
+ Rewrite (Rmult_Ol (Rinv (Rminus x2 x0))) in H16;
+ Rewrite (Rmult_Ol (dg (f x0))) in H16;
+ Rewrite H12;
+ Rewrite (eq_Rminus (g (f x0)) (g (f x0)) (refl_eqT R (g (f x0))));
+ Rewrite (Rmult_Ol (Rinv (Rminus x2 x0)));Assumption.
+Clear H10 H5;Elim H11;Clear H11;Intros;Elim H5;Clear H5;Intros;
+Cut (((Df x2)/\~x0==x2)/\(Dg (f x2))/\~(f x0)==(f x2))
+ /\(Rlt (R_dist x2 x0) x1);Auto;Intro;
+ Generalize (H7 x2 H14);Intro;
+ Generalize (Rminus_eq_contra (f x2) (f x0) H12);Intro;
+ Rewrite (Rmult_assoc (Rminus (g (f x2)) (g (f x0)))
+ (Rinv (Rminus (f x2) (f x0)))
+ (Rmult (Rminus (f x2) (f x0)) (Rinv (Rminus x2 x0)))) in H15;
+ Rewrite <-(Rmult_assoc (Rinv (Rminus (f x2) (f x0)))
+ (Rminus (f x2) (f x0)) (Rinv (Rminus x2 x0))) in H15;
+ Rewrite (Rinv_l (Rminus (f x2) (f x0)) H16) in H15;
+ Rewrite (let (H1,H2)=(Rmult_ne (Rinv (Rminus x2 x0))) in H2) in H15;
+ Rewrite (Rmult_sym (df x0) (dg (f x0)));Assumption.
+Clear H5 H3 H4 H2;Unfold limit1_in;Unfold limit_in;Simpl;
+ Unfold limit1_in in H1;Unfold limit_in in H1;Simpl in H1;Intros;
+ Elim (H1 eps H2);Clear H1;Intros;Elim H1;Clear H1;Intros;
+ Split with x;Split;Auto;Intros;Unfold D_x Dgf in H4 H3;
+ Elim H4;Clear H4;Intros;Elim H4;Clear H4;Intros;
+ Exact (H3 x1 (conj (Df x1)/\~x0==x1 (Rlt (R_dist x1 x0) x) H4 H5)).
+Save.
diff --git a/theories/Reals/Reals.v b/theories/Reals/Reals.v
new file mode 100644
index 000000000..c9ee14137
--- /dev/null
+++ b/theories/Reals/Reals.v
@@ -0,0 +1,11 @@
+
+(* $Id$ *)
+
+Require Export TypeSyntax.
+Require Export Raxioms.
+Require Export Rbase.
+Require Export R_Ifp.
+Require Export Rbasic_fun.
+Require Export Rlimit.
+Require Export Rfunctions.
+Require Export Rderiv.
diff --git a/theories/Reals/Rfunctions.v b/theories/Reals/Rfunctions.v
new file mode 100644
index 000000000..987a6ea63
--- /dev/null
+++ b/theories/Reals/Rfunctions.v
@@ -0,0 +1,79 @@
+
+(* $Id$ *)
+
+(*********************************************************)
+(* Definition of the some functions *)
+(* *)
+(*********************************************************)
+
+Require Export Rlimit.
+
+(*******************************)
+(* Factorial *)
+(*******************************)
+(*********)
+Fixpoint fact [n:nat]:nat:=
+ Cases n of
+ O => (S O)
+ |(S n) => (mult (S n) (fact n))
+ end.
+
+(*******************************)
+(* Power *)
+(*******************************)
+(*********)
+Fixpoint pow [r:R;n:nat]:R:=
+ Cases n of
+ O => R1
+ |(S n) => (Rmult r (pow r n))
+ end.
+
+(*********)
+Lemma tech_pow_Rmult:(x:R)(n:nat)(Rmult x (pow x n))==(pow x (S n)).
+Induction n; Simpl; Trivial.
+Save.
+
+(*********)
+Lemma tech_pow_Rplus:(x:R)(a,n:nat)
+ (Rplus (pow x a) (Rmult (INR n) (pow x a)))==
+ (Rmult (INR (S n)) (pow x a)).
+Intros; Pattern 1 (pow x a);
+ Rewrite <-(let (H1,H2)=(Rmult_ne (pow x a)) in H1);
+ Rewrite (Rmult_sym (INR n) (pow x a));
+ Rewrite <- (Rmult_Rplus_distr (pow x a) R1 (INR n));
+ Rewrite (Rplus_sym R1 (INR n)); Rewrite <-(S_INR n);
+ Apply Rmult_sym.
+Save.
+
+(*******************************)
+(* Sum of n first naturals *)
+(*******************************)
+(*********)
+Fixpoint sum_nat_aux [s,n:nat]:nat:=
+ Cases n of
+ O => s
+ |(S n') => (sum_nat_aux (plus s n) n')
+ end.
+
+(*********)
+Definition sum_nat:=(sum_nat_aux O).
+
+(*******************************)
+(* Sum *)
+(*******************************)
+(*********)
+Fixpoint sum_aux [s:R;f:nat->R;N:nat]:R:=
+ Cases N of
+ O => (Rplus s (f O))
+ |(S i) => (sum_aux (Rplus s (f N)) f i)
+ end.
+
+(*********)
+Definition sum_f:=(sum_aux R0).
+
+(*******************************)
+(* Infinit Sum *)
+(*******************************)
+(*********)
+Definition infinit_sum:(nat->R)->R->Prop:=[s:nat->R;l:R]
+ (eps:R)(Ex[N:nat](n:nat)(ge n N)/\(Rlt (R_dist (sum_f s n) l) eps)).
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.
diff --git a/theories/Reals/TypeSyntax.v b/theories/Reals/TypeSyntax.v
new file mode 100644
index 000000000..9b68928ba
--- /dev/null
+++ b/theories/Reals/TypeSyntax.v
@@ -0,0 +1,25 @@
+
+(* $Id$ *)
+
+(*********************************************************)
+(* Or and Exist in Type *)
+(* *)
+(*********************************************************)
+
+(**********)
+Inductive sumboolT [A,B:Prop]:Type:=
+ leftT : A->(sumboolT A B)
+ |rightT: B->(sumboolT A B).
+
+(**********)
+Inductive sumorT [A:Type;B:Prop]:Type:=
+ inleftT : A->(sumorT A B)
+ |inrightT: B->(sumorT A B).
+
+(**********)
+Inductive sigT [A:Set;P:A->Prop]:Type:=
+ existT: (x:A)(P x)->(sigT A P).
+
+(**********)
+Inductive sigTT [A:Type;P:A->Prop]:Type:=
+ existTT: (x:A)(P x)->(sigTT A P).