summaryrefslogtreecommitdiff
path: root/theories7/Reals/Rtrigo_fun.v
blob: bc72c0e1c4be28a871cca50fcfbc750b5d002ae4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
(************************************************************************)
(*  v      *   The Coq Proof Assistant  /  The Coq Development Team     *)
(* <O___,, * CNRS-Ecole Polytechnique-INRIA Futurs-Universite Paris Sud *)
(*   \VV/  **************************************************************)
(*    //   *      This file is distributed under the terms of the       *)
(*         *       GNU Lesser General Public License Version 2.1        *)
(************************************************************************)

(*i $Id: Rtrigo_fun.v,v 1.1.2.1 2004/07/16 19:31:36 herbelin Exp $ i*)

Require Rbase.
Require Rfunctions.
Require SeqSeries.
V7only [ Import nat_scope. Import Z_scope. Import R_scope. ].
Open Local Scope R_scope.

(*****************************************************************)
(*           To define transcendental functions                  *)
(*                                                               *)
(*****************************************************************)
(*****************************************************************)
(*           For exponential function                            *)
(*                                                               *)
(*****************************************************************)

(*********)
Lemma Alembert_exp:(Un_cv
   [n:nat](Rabsolu (Rmult (Rinv (INR (fact (S n)))) 
         (Rinv (Rinv (INR (fact n)))))) R0).
Unfold Un_cv;Intros;Elim (total_order_Rgt eps R1);Intro.
Split with O;Intros;Rewrite (simpl_fact n);Unfold R_dist;
 Rewrite (minus_R0 (Rabsolu (Rinv (INR (S n)))));
 Rewrite (Rabsolu_Rabsolu (Rinv (INR (S n))));
 Cut (Rgt (Rinv (INR (S n))) R0).
Intro; Rewrite (Rabsolu_pos_eq (Rinv (INR (S n)))).
Cut (Rlt (Rminus (Rinv eps) R1) R0).
Intro;Generalize (Rlt_le_trans (Rminus (Rinv eps) R1) R0 (INR n) H2 
   (pos_INR n));Clear H2;Intro;
 Unfold Rminus in H2;Generalize (Rlt_compatibility R1 
       (Rplus (Rinv eps) (Ropp R1)) (INR n) H2);
 Replace (Rplus R1 (Rplus (Rinv eps) (Ropp R1))) with (Rinv eps);
 [Clear H2;Intro|Ring].
Rewrite (Rplus_sym R1 (INR n)) in H2;Rewrite <-(S_INR n) in H2;
 Generalize (Rmult_gt (Rinv (INR (S n))) eps H1 H);Intro;
 Unfold Rgt in H3;
 Generalize (Rlt_monotony (Rmult (Rinv (INR (S n))) eps) (Rinv eps)
     (INR (S n)) H3 H2);Intro;
 Rewrite (Rmult_assoc (Rinv (INR (S n))) eps (Rinv eps)) in H4;
 Rewrite (Rinv_r eps (imp_not_Req eps R0 
      (or_intror (Rlt eps R0) (Rgt eps R0) H))) 
  in H4;Rewrite (let (H1,H2)=(Rmult_ne (Rinv (INR (S n)))) in H1) 
  in H4;Rewrite (Rmult_sym (Rinv (INR (S n)))) in H4;
 Rewrite (Rmult_assoc eps (Rinv (INR (S n))) (INR (S n))) in H4;
 Rewrite (Rinv_l (INR (S n)) (not_O_INR (S n) 
      (sym_not_equal nat O (S n) (O_S n)))) in H4;
 Rewrite (let (H1,H2)=(Rmult_ne eps) in H1) in H4;Assumption.
Apply Rlt_minus;Unfold Rgt in a;Rewrite <- Rinv_R1;
 Apply (Rinv_lt R1 eps);Auto;
 Rewrite (let (H1,H2)=(Rmult_ne eps) in H2);Unfold Rgt in H;Assumption.
Unfold Rgt in H1;Apply Rlt_le;Assumption.
Unfold Rgt;Apply Rlt_Rinv; Apply lt_INR_0;Apply lt_O_Sn.
(**)
Cut `0<=(up (Rminus (Rinv eps) R1))`.
Intro;Elim (IZN (up (Rminus (Rinv eps) R1)) H0);Intros;
 Split with x;Intros;Rewrite (simpl_fact n);Unfold R_dist;
 Rewrite (minus_R0 (Rabsolu (Rinv (INR (S n)))));
 Rewrite (Rabsolu_Rabsolu (Rinv (INR (S n))));
 Cut (Rgt (Rinv (INR (S n))) R0).
Intro; Rewrite (Rabsolu_pos_eq (Rinv (INR (S n)))).
Cut (Rlt (Rminus (Rinv eps) R1) (INR x)).
Intro;Generalize (Rlt_le_trans (Rminus (Rinv eps) R1) (INR x) (INR n) 
      H4 (le_INR x n ([n,m:nat; H:(ge m n)]H x n H2)));  
 Clear H4;Intro;Unfold Rminus in H4;Generalize (Rlt_compatibility R1 
       (Rplus (Rinv eps) (Ropp R1)) (INR n) H4);
 Replace (Rplus R1 (Rplus (Rinv eps) (Ropp R1))) with (Rinv eps);
 [Clear H4;Intro|Ring].
Rewrite (Rplus_sym R1 (INR n)) in H4;Rewrite <-(S_INR n) in H4;
 Generalize (Rmult_gt (Rinv (INR (S n))) eps H3 H);Intro;
 Unfold Rgt in H5;
 Generalize (Rlt_monotony (Rmult (Rinv (INR (S n))) eps) (Rinv eps)
     (INR (S n)) H5 H4);Intro;
 Rewrite (Rmult_assoc (Rinv (INR (S n))) eps (Rinv eps)) in H6;
 Rewrite (Rinv_r eps (imp_not_Req eps R0 
      (or_intror (Rlt eps R0) (Rgt eps R0) H))) 
  in H6;Rewrite (let (H1,H2)=(Rmult_ne (Rinv (INR (S n)))) in H1) 
  in H6;Rewrite (Rmult_sym (Rinv (INR (S n)))) in H6;
 Rewrite (Rmult_assoc eps (Rinv (INR (S n))) (INR (S n))) in H6;
 Rewrite (Rinv_l (INR (S n)) (not_O_INR (S n) 
      (sym_not_equal nat O (S n) (O_S n)))) in H6;
 Rewrite (let (H1,H2)=(Rmult_ne eps) in H1) in H6;Assumption.
Cut (IZR (up (Rminus (Rinv eps) R1)))==(IZR (INZ x));
 [Intro|Rewrite H1;Trivial].
Elim (archimed (Rminus (Rinv eps) R1));Intros;Clear H6;
 Unfold Rgt in H5;Rewrite H4 in H5;Rewrite INR_IZR_INZ;Assumption.
Unfold Rgt in H1;Apply Rlt_le;Assumption.
Unfold Rgt;Apply Rlt_Rinv; Apply lt_INR_0;Apply lt_O_Sn.
Apply (le_O_IZR (up (Rminus (Rinv eps) R1))); 
 Apply (Rle_trans R0 (Rminus (Rinv eps) R1) 
  (IZR (up (Rminus (Rinv eps) R1)))).
Generalize (Rgt_not_le eps R1 b);Clear b;Unfold Rle;Intro;Elim H0;
 Clear H0;Intro.
Left;Unfold Rgt in H;
 Generalize (Rlt_monotony (Rinv eps) eps R1 (Rlt_Rinv eps H) H0);
 Rewrite (Rinv_l eps (sym_not_eqT R R0 eps
    (imp_not_Req R0 eps (or_introl (Rlt R0 eps) (Rgt R0 eps) H))));
 Rewrite (let (H1,H2)=(Rmult_ne (Rinv eps)) in H1);Intro;
 Fold (Rgt (Rminus (Rinv eps) R1) R0);Apply Rgt_minus;Unfold Rgt;
 Assumption.
Right;Rewrite H0;Rewrite Rinv_R1;Apply sym_eqT;Apply eq_Rminus;Auto.
Elim (archimed (Rminus (Rinv eps) R1));Intros;Clear H1;
 Unfold Rgt in H0;Apply Rlt_le;Assumption.
Qed.