1
<html xmlns="http://www.w3.org/1999/xhtml">
3
<meta http-equiv="Content-Type" content="text/html; charset="><link rel="stylesheet" href="style.css" type="text/css"><title>Coq.Reals.Rderiv</title>
8
<h1>Library Coq.Reals.Rderiv</h1>
13
<table width="100%"><tr class="doc"><td>
14
Definition of the derivative,continuity
17
<code class="keyword">Require</code> <code class="keyword">Import</code> Rbase.<br/>
18
<code class="keyword">Require</code> <code class="keyword">Import</code> Rfunctions.<br/>
19
<code class="keyword">Require</code> <code class="keyword">Import</code> Rlimit.<br/>
20
<code class="keyword">Require</code> <code class="keyword">Import</code> Fourier.<br/>
21
<code class="keyword">Require</code> <code class="keyword">Import</code> Classical_Prop.<br/>
22
<code class="keyword">Require</code> <code class="keyword">Import</code> Classical_Pred_Type.<br/>
23
<code class="keyword">Require</code> <code class="keyword">Import</code> Omega. Open <code class="keyword">Local</code> Scope R_scope.<br/>
26
<code class="keyword">Definition</code> <a name="D_x"></a>D_x (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (y x:<a href="Coq.Reals.Rdefinitions.html#R">R</a>) : Prop := D x /\ y <> x.<br/>
29
<code class="keyword">Definition</code> <a name="continue_in"></a>continue_in (f:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>) : Prop :=<br/>
30
<a href="Coq.Reals.Rlimit.html#limit1_in">limit1_in</a> f (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> D x0) (f x0) x0.<br/>
33
<code class="keyword">Definition</code> <a name="D_in"></a>D_in (f d:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>) : Prop :=<br/>
34
<a href="Coq.Reals.Rlimit.html#limit1_in">limit1_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (f x - f x0) / (x - x0)) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> D x0) (d x0) x0.<br/>
37
<code class="keyword">Lemma</code> <a name="cont_deriv"></a>cont_deriv :<br/>
38
forall (f d:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
39
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> f d D x0 -> <a href="Coq.Reals.Rderiv.html#continue_in">continue_in</a> f D x0.<br/>
40
unfold continue_in in |- *; unfold D_in in |- *; unfold limit1_in in |- *;<br/>
41
unfold limit_in in |- *; unfold Rdiv in |- *; simpl in |- *; <br/>
42
intros; elim (H eps H0); clear H; intros; elim H; <br/>
43
clear H; intros; elim (<a href="Coq.Reals.RIneq.html#Req_dec">Req_dec</a> (d x0) 0); intro.<br/>
44
split with (<a href="Coq.Reals.Rbasic_fun.html#Rmin">Rmin</a> 1 x); split.<br/>
45
elim (<a href="Coq.Reals.Rbasic_fun.html#Rmin_Rgt">Rmin_Rgt</a> 1 x 0); intros a b; apply (b (<a href="Coq.Init.Logic.html#conj">conj</a> <a href="Coq.Reals.RIneq.html#Rlt_0_1">Rlt_0_1</a> H)).<br/>
46
intros; elim H3; clear H3; intros;<br/>
47
generalize (let (H1, H2) := <a href="Coq.Reals.Rbasic_fun.html#Rmin_Rgt">Rmin_Rgt</a> 1 x (<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> x1 x0) in H1);<br/>
48
unfold Rgt in |- *; intro; elim (H5 H4); clear H5; <br/>
49
intros; generalize (H1 x1 (<a href="Coq.Init.Logic.html#conj">conj</a> H3 H6)); clear H1; <br/>
50
intro; unfold D_x in H3; elim H3; intros.<br/>
51
rewrite H2 in H1; unfold R_dist in |- *; unfold R_dist in H1;<br/>
52
cut (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0) < eps * <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0)).<br/>
53
intro; unfold R_dist in H5;<br/>
54
generalize (<a href="Coq.Reals.Raxioms.html#Rmult_lt_compat_l">Rmult_lt_compat_l</a> eps (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0)) 1 H0 H5);<br/>
55
rewrite <a href="Coq.Reals.RIneq.html#Rmult_1_r">Rmult_1_r</a>; intro; apply <a href="Coq.Reals.Raxioms.html#Rlt_trans">Rlt_trans</a> with (r2:= eps * <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0));<br/>
56
assumption.<br/>
57
rewrite (<a href="Coq.Reals.RIneq.html#Rminus_0_r">Rminus_0_r</a> ((f x1 - f x0) * / (x1 - x0))) in H1;<br/>
58
rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_mult">Rabs_mult</a> in H1; cut (x1 - x0 <> 0).<br/>
59
intro; rewrite (<a href="Coq.Reals.Rbasic_fun.html#Rabs_Rinv">Rabs_Rinv</a> (x1 - x0) H9) in H1;<br/>
61
(<a href="Coq.Reals.Raxioms.html#Rmult_lt_compat_l">Rmult_lt_compat_l</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0)) (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0) * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0))<br/>
62
eps (<a href="Coq.Reals.Rbasic_fun.html#Rabs_pos_lt">Rabs_pos_lt</a> (x1 - x0) H9) H1); intro; rewrite <a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> in H10;<br/>
63
rewrite <a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> in H10; rewrite <a href="Coq.Reals.Raxioms.html#Rinv_l">Rinv_l</a> in H10.<br/>
64
rewrite <a href="Coq.Reals.RIneq.html#Rmult_1_r">Rmult_1_r</a> in H10; rewrite <a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a>; assumption.<br/>
65
apply <a href="Coq.Reals.Rbasic_fun.html#Rabs_no_R0">Rabs_no_R0</a>; auto.<br/>
66
apply <a href="Coq.Reals.RIneq.html#Rminus_eq_contra">Rminus_eq_contra</a>; auto.<br/>
67
split with (<a href="Coq.Reals.Rbasic_fun.html#Rmin">Rmin</a> (<a href="Coq.Reals.Rbasic_fun.html#Rmin">Rmin</a> (/ 2) x) (eps * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (2 * d x0))); split.<br/>
68
cut (<a href="Coq.Reals.Rbasic_fun.html#Rmin">Rmin</a> (/ 2) x > 0).<br/>
69
cut (eps * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (2 * d x0) > 0).<br/>
70
intros; elim (<a href="Coq.Reals.Rbasic_fun.html#Rmin_Rgt">Rmin_Rgt</a> (<a href="Coq.Reals.Rbasic_fun.html#Rmin">Rmin</a> (/ 2) x) (eps * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (2 * d x0)) 0);<br/>
71
intros a b; apply (b (<a href="Coq.Init.Logic.html#conj">conj</a> H4 H3)).<br/>
72
apply <a href="Coq.Reals.RIneq.html#Rmult_gt_0_compat">Rmult_gt_0_compat</a>; auto.<br/>
73
unfold Rgt in |- *; apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>; apply <a href="Coq.Reals.Rbasic_fun.html#Rabs_pos_lt">Rabs_pos_lt</a>;<br/>
74
apply <a href="Coq.Reals.RIneq.html#Rmult_integral_contrapositive">Rmult_integral_contrapositive</a>; split.<br/>
77
elim (<a href="Coq.Reals.Rbasic_fun.html#Rmin_Rgt">Rmin_Rgt</a> (/ 2) x 0); intros a b; cut (0 < 2).<br/>
78
intro; generalize (<a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a> 2 H3); intro; fold (/ 2 > 0) in H4;<br/>
79
apply (b (<a href="Coq.Init.Logic.html#conj">conj</a> H4 H)).<br/>
81
intros; elim H3; clear H3; intros;<br/>
83
(let (H1, H2) :=<br/>
84
<a href="Coq.Reals.Rbasic_fun.html#Rmin_Rgt">Rmin_Rgt</a> (<a href="Coq.Reals.Rbasic_fun.html#Rmin">Rmin</a> (/ 2) x) (eps * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (2 * d x0)) (<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> x1 x0) in<br/>
85
H1); unfold Rgt in |- *; intro; elim (H5 H4); clear H5; <br/>
86
intros; generalize (let (H1, H2) := <a href="Coq.Reals.Rbasic_fun.html#Rmin_Rgt">Rmin_Rgt</a> (/ 2) x (<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> x1 x0) in H1);<br/>
87
unfold Rgt in |- *; intro; elim (H7 H5); clear H7; <br/>
88
intros; clear H4 H5; generalize (H1 x1 (<a href="Coq.Init.Logic.html#conj">conj</a> H3 H8)); <br/>
89
clear H1; intro; unfold D_x in H3; elim H3; intros;<br/>
90
generalize (<a href="Coq.Init.Logic.html#sym_not_eq">sym_not_eq</a> H5); clear H5; intro H5;<br/>
91
generalize (<a href="Coq.Reals.RIneq.html#Rminus_eq_contra">Rminus_eq_contra</a> x1 x0 H5); intro; generalize H1;<br/>
92
pattern (d x0) at 1 in |- *;<br/>
93
rewrite <- (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rmult_ne">Rmult_ne</a> (d x0) in H2);<br/>
94
rewrite <- (<a href="Coq.Reals.Raxioms.html#Rinv_l">Rinv_l</a> (x1 - x0) H9); unfold R_dist in |- *;<br/>
95
unfold Rminus at 1 in |- *; rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (f x1 - f x0) (/ (x1 - x0)));<br/>
96
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (/ (x1 - x0) * (x1 - x0)) (d x0));<br/>
97
rewrite <- (<a href="Coq.Reals.RIneq.html#Ropp_mult_distr_l_reverse">Ropp_mult_distr_l_reverse</a> (d x0) (/ (x1 - x0) * (x1 - x0)));<br/>
98
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (- d x0) (/ (x1 - x0) * (x1 - x0)));<br/>
99
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> (/ (x1 - x0)) (x1 - x0) (- d x0));<br/>
100
rewrite <-<br/>
101
(<a href="Coq.Reals.Raxioms.html#Rmult_plus_distr_l">Rmult_plus_distr_l</a> (/ (x1 - x0)) (f x1 - f x0) ((x1 - x0) * - d x0))<br/>
102
; rewrite (<a href="Coq.Reals.Rbasic_fun.html#Rabs_mult">Rabs_mult</a> (/ (x1 - x0)) (f x1 - f x0 + (x1 - x0) * - d x0));<br/>
103
clear H1; intro;<br/>
104
generalize<br/>
105
(<a href="Coq.Reals.Raxioms.html#Rmult_lt_compat_l">Rmult_lt_compat_l</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0))<br/>
106
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (/ (x1 - x0)) * <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0 + (x1 - x0) * - d x0)) eps<br/>
107
(<a href="Coq.Reals.Rbasic_fun.html#Rabs_pos_lt">Rabs_pos_lt</a> (x1 - x0) H9) H1);<br/>
108
rewrite <-<br/>
109
(<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0)) (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (/ (x1 - x0)))<br/>
110
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0 + (x1 - x0) * - d x0)));<br/>
111
rewrite (<a href="Coq.Reals.Rbasic_fun.html#Rabs_Rinv">Rabs_Rinv</a> (x1 - x0) H9);<br/>
112
rewrite (<a href="Coq.Reals.RIneq.html#Rinv_r">Rinv_r</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0)) (<a href="Coq.Reals.Rbasic_fun.html#Rabs_no_R0">Rabs_no_R0</a> (x1 - x0) H9));<br/>
114
(let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rmult_ne">Rmult_ne</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0 + (x1 - x0) * - d x0)) in H2)<br/>
115
; generalize (<a href="Coq.Reals.Rbasic_fun.html#Rabs_triang_inv">Rabs_triang_inv</a> (f x1 - f x0) ((x1 - x0) * d x0)); <br/>
116
intro; rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (x1 - x0) (- d x0));<br/>
117
rewrite (<a href="Coq.Reals.RIneq.html#Ropp_mult_distr_l_reverse">Ropp_mult_distr_l_reverse</a> (d x0) (x1 - x0));<br/>
118
fold (f x1 - f x0 - d x0 * (x1 - x0)) in |- *;<br/>
119
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (x1 - x0) (d x0)) in H10; clear H1; <br/>
121
generalize<br/>
122
(<a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0) - <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0)))<br/>
123
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0 - d x0 * (x1 - x0))) (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0) * eps) H10 H1);<br/>
124
clear H1; intro;<br/>
125
generalize<br/>
126
(<a href="Coq.Reals.Raxioms.html#Rplus_lt_compat_l">Rplus_lt_compat_l</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0)))<br/>
127
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0) - <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0))) (<br/>
128
<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0) * eps) H1); unfold Rminus at 2 in |- *;<br/>
129
rewrite (<a href="Coq.Reals.Raxioms.html#Rplus_comm">Rplus_comm</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0)) (- <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0))));<br/>
130
rewrite <-<br/>
131
(<a href="Coq.Reals.Raxioms.html#Rplus_assoc">Rplus_assoc</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0))) (- <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0)))<br/>
132
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0))); rewrite (<a href="Coq.Reals.Raxioms.html#Rplus_opp_r">Rplus_opp_r</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0))));<br/>
133
rewrite (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rplus_ne">Rplus_ne</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0)) in H2); <br/>
134
clear H1; intro; cut (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0)) + <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0) * eps < eps).<br/>
137
(<a href="Coq.Reals.Raxioms.html#Rlt_trans">Rlt_trans</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (f x1 - f x0))<br/>
138
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0)) + <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0) * eps) eps H1 H11). <br/>
139
clear H1 H5 H3 H10; generalize (<a href="Coq.Reals.Rbasic_fun.html#Rabs_pos_lt">Rabs_pos_lt</a> (d x0) H2); intro;<br/>
140
unfold Rgt in H0;<br/>
141
generalize (<a href="Coq.Reals.Raxioms.html#Rmult_lt_compat_l">Rmult_lt_compat_l</a> eps (<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> x1 x0) (/ 2) H0 H7); <br/>
142
clear H7; intro;<br/>
143
generalize<br/>
144
(<a href="Coq.Reals.Raxioms.html#Rmult_lt_compat_l">Rmult_lt_compat_l</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0)) (<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> x1 x0) (<br/>
145
eps * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (2 * d x0)) H1 H6); clear H6; intro;<br/>
146
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> eps (<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> x1 x0)) in H3; unfold R_dist in H3, H5;<br/>
147
rewrite <- (<a href="Coq.Reals.Rbasic_fun.html#Rabs_mult">Rabs_mult</a> (d x0) (x1 - x0)) in H5;<br/>
148
rewrite (<a href="Coq.Reals.Rbasic_fun.html#Rabs_mult">Rabs_mult</a> 2 (d x0)) in H5; cut (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> 2 <> 0).<br/>
149
intro; fold (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0) > 0) in H1;<br/>
151
(<a href="Coq.Reals.RIneq.html#Rinv_mult_distr">Rinv_mult_distr</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> 2) (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0)) H6<br/>
152
(<a href="Coq.Reals.RIneq.html#Rlt_dichotomy_converse">Rlt_dichotomy_converse</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0)) 0 (<a href="Coq.Init.Logic.html#or_intror">or_intror</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0) < 0) H1)))<br/>
153
in H5;<br/>
154
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0)) (eps * (/ <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> 2 * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0)))) in H5;<br/>
155
rewrite <- (<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> eps (/ <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> 2) (/ <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0))) in H5;<br/>
156
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> (eps * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> 2) (/ <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0)) (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0))) in H5;<br/>
158
(<a href="Coq.Reals.Raxioms.html#Rinv_l">Rinv_l</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0))<br/>
159
(<a href="Coq.Reals.RIneq.html#Rlt_dichotomy_converse">Rlt_dichotomy_converse</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0)) 0 (<a href="Coq.Init.Logic.html#or_intror">or_intror</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0) < 0) H1)))<br/>
160
in H5; rewrite (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rmult_ne">Rmult_ne</a> (eps * / <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> 2) in H1) in H5;<br/>
161
cut (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> 2 = 2).<br/>
162
intro; rewrite H7 in H5;<br/>
163
generalize<br/>
164
(<a href="Coq.Reals.RIneq.html#Rplus_lt_compat">Rplus_lt_compat</a> (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (d x0 * (x1 - x0))) (eps * / 2)<br/>
165
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (x1 - x0) * eps) (eps * / 2) H5 H3); intro; <br/>
166
rewrite <a href="Coq.Reals.Rlimit.html#eps2">eps2</a> in H10; assumption.<br/>
167
unfold Rabs in |- *; case (<a href="Coq.Reals.Rbasic_fun.html#Rcase_abs">Rcase_abs</a> 2); auto.<br/>
168
intro; cut (0 < 2).<br/>
169
intro; generalize (<a href="Coq.Reals.Raxioms.html#Rlt_asym">Rlt_asym</a> 0 2 H7); intro; elimtype <a href="Coq.Init.Logic.html#False">False</a>; auto.<br/>
171
apply <a href="Coq.Reals.Rbasic_fun.html#Rabs_no_R0">Rabs_no_R0</a>.<br/>
173
<code class="keyword">Qed</code>.<br/>
176
<code class="keyword">Lemma</code> <a name="Dconst"></a>Dconst :<br/>
177
forall (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (y x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>), <a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => y) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => 0) D x0.<br/>
178
unfold D_in in |- *; intros; unfold limit1_in in |- *;<br/>
179
unfold limit_in in |- *; unfold Rdiv in |- *; intros; <br/>
180
simpl in |- *; split with eps; split; auto.<br/>
181
intros; rewrite (<a href="Coq.Reals.RIneq.html#Rminus_diag_eq">Rminus_diag_eq</a> y y (<a href="Coq.Init.Logic.html#refl_equal">refl_equal</a> y)); rewrite <a href="Coq.Reals.RIneq.html#Rmult_0_l">Rmult_0_l</a>;<br/>
182
unfold R_dist in |- *; rewrite (<a href="Coq.Reals.RIneq.html#Rminus_diag_eq">Rminus_diag_eq</a> 0 0 (<a href="Coq.Init.Logic.html#refl_equal">refl_equal</a> 0));<br/>
183
unfold Rabs in |- *; case (<a href="Coq.Reals.Rbasic_fun.html#Rcase_abs">Rcase_abs</a> 0); intro.<br/>
184
absurd (0 < 0); auto.<br/>
185
red in |- *; intro; apply (<a href="Coq.Reals.RIneq.html#Rlt_irrefl">Rlt_irrefl</a> 0 H1).<br/>
186
unfold Rgt in H0; assumption.<br/>
187
<code class="keyword">Qed</code>.<br/>
190
<code class="keyword">Lemma</code> <a name="Dx"></a>Dx :<br/>
191
forall (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>), <a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => x) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => 1) D x0.<br/>
192
unfold D_in in |- *; unfold Rdiv in |- *; intros; unfold limit1_in in |- *;<br/>
193
unfold limit_in in |- *; intros; simpl in |- *; split with eps; <br/>
194
split; auto.<br/>
195
intros; elim H0; clear H0; intros; unfold D_x in H0; elim H0; intros;<br/>
196
rewrite (<a href="Coq.Reals.RIneq.html#Rinv_r">Rinv_r</a> (x - x0) (<a href="Coq.Reals.RIneq.html#Rminus_eq_contra">Rminus_eq_contra</a> x x0 (<a href="Coq.Init.Logic.html#sym_not_eq">sym_not_eq</a> H3)));<br/>
197
unfold R_dist in |- *; rewrite (<a href="Coq.Reals.RIneq.html#Rminus_diag_eq">Rminus_diag_eq</a> 1 1 (<a href="Coq.Init.Logic.html#refl_equal">refl_equal</a> 1));<br/>
198
unfold Rabs in |- *; case (<a href="Coq.Reals.Rbasic_fun.html#Rcase_abs">Rcase_abs</a> 0); intro.<br/>
199
absurd (0 < 0); auto.<br/>
200
red in |- *; intro; apply (<a href="Coq.Reals.RIneq.html#Rlt_irrefl">Rlt_irrefl</a> 0 r).<br/>
201
unfold Rgt in H; assumption.<br/>
202
<code class="keyword">Qed</code>. <br/>
205
<code class="keyword">Lemma</code> <a name="Dadd"></a>Dadd :<br/>
206
forall (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (df dg f g:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
207
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> f df D x0 -><br/>
208
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> g dg D x0 -><br/>
209
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => f x + g x) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => df x + dg x) D x0.<br/>
210
unfold D_in in |- *; intros;<br/>
211
generalize<br/>
212
(<a href="Coq.Reals.Rlimit.html#limit_plus">limit_plus</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (f x - f x0) * / (x - x0))<br/>
213
(fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (g x - g x0) * / (x - x0)) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> D x0) (<br/>
214
df x0) (dg x0) x0 H H0); clear H H0; unfold limit1_in in |- *;<br/>
215
unfold limit_in in |- *; simpl in |- *; intros; elim (H eps H0); <br/>
216
clear H; intros; elim H; clear H; intros; split with x; <br/>
217
split; auto; intros; generalize (H1 x1 H2); clear H1; <br/>
218
intro; rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (f x1 - f x0) (/ (x1 - x0))) in H1;<br/>
219
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (g x1 - g x0) (/ (x1 - x0))) in H1;<br/>
220
rewrite <- (<a href="Coq.Reals.Raxioms.html#Rmult_plus_distr_l">Rmult_plus_distr_l</a> (/ (x1 - x0)) (f x1 - f x0) (g x1 - g x0))<br/>
221
in H1;<br/>
222
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (/ (x1 - x0)) (f x1 - f x0 + (g x1 - g x0))) in H1;<br/>
223
cut (f x1 - f x0 + (g x1 - g x0) = f x1 + g x1 - (f x0 + g x0)).<br/>
224
intro; rewrite H3 in H1; assumption.<br/>
226
<code class="keyword">Qed</code>.<br/>
229
<code class="keyword">Lemma</code> <a name="Dmult"></a>Dmult :<br/>
230
forall (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (df dg f g:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
231
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> f df D x0 -><br/>
232
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> g dg D x0 -><br/>
233
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => f x * g x) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => df x * g x + f x * dg x) D x0.<br/>
234
intros; unfold D_in in |- *; generalize H H0; intros; unfold D_in in H, H0;<br/>
235
generalize (<a href="Coq.Reals.Rderiv.html#cont_deriv">cont_deriv</a> f df D x0 H1); unfold continue_in in |- *; <br/>
237
generalize<br/>
238
(<a href="Coq.Reals.Rlimit.html#limit_mul">limit_mul</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (g x - g x0) * / (x - x0)) (<br/>
239
fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => f x) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> D x0) (dg x0) (f x0) x0 H0 H3); <br/>
240
intro; cut (<a href="Coq.Reals.Rlimit.html#limit1_in">limit1_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => g x0) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> D x0) (g x0) x0).<br/>
242
generalize<br/>
243
(<a href="Coq.Reals.Rlimit.html#limit_mul">limit_mul</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (f x - f x0) * / (x - x0)) (<br/>
244
fun _:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => g x0) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> D x0) (df x0) (g x0) x0 H H5);<br/>
245
clear H H0 H1 H2 H3 H5; intro;<br/>
246
generalize<br/>
247
(<a href="Coq.Reals.Rlimit.html#limit_plus">limit_plus</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (f x - f x0) * / (x - x0) * g x0)<br/>
248
(fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (g x - g x0) * / (x - x0) * f x) (<br/>
249
<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> D x0) (df x0 * g x0) (dg x0 * f x0) x0 H H4); <br/>
250
clear H4 H; intro; unfold limit1_in in H; unfold limit_in in H; <br/>
251
simpl in H; unfold limit1_in in |- *; unfold limit_in in |- *; <br/>
252
simpl in |- *; intros; elim (H eps H0); clear H; intros; <br/>
253
elim H; clear H; intros; split with x; split; auto; <br/>
254
intros; generalize (H1 x1 H2); clear H1; intro;<br/>
255
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (f x1 - f x0) (/ (x1 - x0))) in H1;<br/>
256
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (g x1 - g x0) (/ (x1 - x0))) in H1;<br/>
257
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> (/ (x1 - x0)) (f x1 - f x0) (g x0)) in H1;<br/>
258
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> (/ (x1 - x0)) (g x1 - g x0) (f x1)) in H1;<br/>
259
rewrite <-<br/>
260
(<a href="Coq.Reals.Raxioms.html#Rmult_plus_distr_l">Rmult_plus_distr_l</a> (/ (x1 - x0)) ((f x1 - f x0) * g x0)<br/>
261
((g x1 - g x0) * f x1)) in H1;<br/>
263
(<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (/ (x1 - x0)) ((f x1 - f x0) * g x0 + (g x1 - g x0) * f x1))<br/>
264
in H1; rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (dg x0) (f x0)) in H1;<br/>
266
((f x1 - f x0) * g x0 + (g x1 - g x0) * f x1 = f x1 * g x1 - f x0 * g x0).<br/>
267
intro; rewrite H3 in H1; assumption.<br/>
269
unfold limit1_in in |- *; unfold limit_in in |- *; simpl in |- *; intros;<br/>
270
split with eps; split; auto; intros; elim (<a href="Coq.Reals.Rfunctions.html#R_dist_refl">R_dist_refl</a> (g x0) (g x0));<br/>
271
intros a b; rewrite (b (<a href="Coq.Init.Logic.html#refl_equal">refl_equal</a> (g x0))); unfold Rgt in H; <br/>
272
assumption.<br/>
273
<code class="keyword">Qed</code>.<br/>
276
<code class="keyword">Lemma</code> <a name="Dmult_const"></a>Dmult_const :<br/>
277
forall (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (f df:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (x0 a:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
278
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> f df D x0 -> <a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => a * f x) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => a * df x) D x0.<br/>
280
generalize (<a href="Coq.Reals.Rderiv.html#Dmult">Dmult</a> D (fun _:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => 0) df (fun _:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => a) f x0 (<a href="Coq.Reals.Rderiv.html#Dconst">Dconst</a> D a x0) H);<br/>
281
unfold D_in in |- *; intros; rewrite (<a href="Coq.Reals.RIneq.html#Rmult_0_l">Rmult_0_l</a> (f x0)) in H0;<br/>
282
rewrite (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rplus_ne">Rplus_ne</a> (a * df x0) in H2) in H0; <br/>
283
assumption.<br/>
284
<code class="keyword">Qed</code>.<br/>
287
<code class="keyword">Lemma</code> <a name="Dopp"></a>Dopp :<br/>
288
forall (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (f df:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
289
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> f df D x0 -> <a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => - f x) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => - df x) D x0.<br/>
290
intros; generalize (<a href="Coq.Reals.Rderiv.html#Dmult_const">Dmult_const</a> D f df x0 (-1) H); unfold D_in in |- *;<br/>
291
unfold limit1_in in |- *; unfold limit_in in |- *; <br/>
292
intros; generalize (H0 eps H1); clear H0; intro; elim H0; <br/>
293
clear H0; intros; elim H0; clear H0; simpl in |- *; <br/>
294
intros; split with x; split; auto.<br/>
295
intros; generalize (H2 x1 H3); clear H2; intro;<br/>
296
rewrite <a href="Coq.Reals.RIneq.html#Ropp_mult_distr_l_reverse">Ropp_mult_distr_l_reverse</a> in H2;<br/>
297
rewrite <a href="Coq.Reals.RIneq.html#Ropp_mult_distr_l_reverse">Ropp_mult_distr_l_reverse</a> in H2;<br/>
298
rewrite <a href="Coq.Reals.RIneq.html#Ropp_mult_distr_l_reverse">Ropp_mult_distr_l_reverse</a> in H2;<br/>
299
rewrite (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rmult_ne">Rmult_ne</a> (f x1) in H2) in H2;<br/>
300
rewrite (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rmult_ne">Rmult_ne</a> (f x0) in H2) in H2;<br/>
301
rewrite (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rmult_ne">Rmult_ne</a> (df x0) in H2) in H2; <br/>
302
assumption.<br/>
303
<code class="keyword">Qed</code>.<br/>
306
<code class="keyword">Lemma</code> <a name="Dminus"></a>Dminus :<br/>
307
forall (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (df dg f g:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
308
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> f df D x0 -><br/>
309
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> g dg D x0 -><br/>
310
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => f x - g x) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => df x - dg x) D x0.<br/>
311
unfold Rminus in |- *; intros; generalize (<a href="Coq.Reals.Rderiv.html#Dopp">Dopp</a> D g dg x0 H0); intro;<br/>
312
apply (<a href="Coq.Reals.Rderiv.html#Dadd">Dadd</a> D df (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => - dg x) f (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => - g x) x0); <br/>
313
assumption. <br/>
314
<code class="keyword">Qed</code>.<br/>
317
<code class="keyword">Lemma</code> <a name="Dx_pow_n"></a>Dx_pow_n :<br/>
318
forall (n:<a href="Coq.Init.Datatypes.html#nat">nat</a>) (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
319
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => x ^ n) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => <a href="Coq.Reals.Raxioms.html#INR">INR</a> n * x ^ (n - 1)) D x0.<br/>
320
simple induction n; intros.<br/>
321
simpl in |- *; rewrite <a href="Coq.Reals.RIneq.html#Rmult_0_l">Rmult_0_l</a>; apply <a href="Coq.Reals.Rderiv.html#Dconst">Dconst</a>.<br/>
322
intros; cut (n0 = (<a href="Coq.Init.Datatypes.html#S">S</a> n0 - 1)%nat);<br/>
323
[ intro a; rewrite <- a; clear a | simpl in |- *; apply minus_n_O ].<br/>
325
(<a href="Coq.Reals.Rderiv.html#Dmult">Dmult</a> D (fun _:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => 1) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => <a href="Coq.Reals.Raxioms.html#INR">INR</a> n0 * x ^ (n0 - 1)) (<br/>
326
fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => x) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => x ^ n0) x0 (<a href="Coq.Reals.Rderiv.html#Dx">Dx</a> D x0) (<br/>
327
H D x0)); unfold D_in in |- *; unfold limit1_in in |- *;<br/>
328
unfold limit_in in |- *; simpl in |- *; intros; elim (H0 eps H1); <br/>
329
clear H0; intros; elim H0; clear H0; intros; split with x; <br/>
330
split; auto.<br/>
331
intros; generalize (H2 x1 H3); clear H2 H3; intro;<br/>
332
rewrite (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rmult_ne">Rmult_ne</a> (x0 ^ n0) in H2) in H2;<br/>
333
rewrite (<a href="Coq.Reals.Rfunctions.html#tech_pow_Rmult">tech_pow_Rmult</a> x1 n0) in H2; rewrite (<a href="Coq.Reals.Rfunctions.html#tech_pow_Rmult">tech_pow_Rmult</a> x0 n0) in H2;<br/>
334
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (<a href="Coq.Reals.Raxioms.html#INR">INR</a> n0) (x0 ^ (n0 - 1))) in H2;<br/>
335
rewrite <- (<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> x0 (x0 ^ (n0 - 1)) (<a href="Coq.Reals.Raxioms.html#INR">INR</a> n0)) in H2;<br/>
336
rewrite (<a href="Coq.Reals.Rfunctions.html#tech_pow_Rmult">tech_pow_Rmult</a> x0 (n0 - 1)) in H2; elim (<a href="Coq.Logic.Classical_Prop.html#classic">classic</a> (n0 = 0%nat));<br/>
337
intro cond.<br/>
338
rewrite cond in H2; rewrite cond; simpl in H2; simpl in |- *;<br/>
339
cut (1 + x0 * 1 * 0 = 1 * 1);<br/>
340
[ intro A; rewrite A in H2; assumption | ring ].<br/>
341
cut (n0 <> 0%nat -> <a href="Coq.Init.Datatypes.html#S">S</a> (n0 - 1) = n0); [ intro | omega ];<br/>
342
rewrite (H3 cond) in H2; rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (x0 ^ n0) (<a href="Coq.Reals.Raxioms.html#INR">INR</a> n0)) in H2;<br/>
343
rewrite (<a href="Coq.Reals.Rfunctions.html#tech_pow_Rplus">tech_pow_Rplus</a> x0 n0 n0) in H2; assumption.<br/>
344
<code class="keyword">Qed</code>.<br/>
347
<code class="keyword">Lemma</code> <a name="Dcomp"></a>Dcomp :<br/>
348
forall (Df Dg:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (df dg f g:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
349
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> f df Df x0 -><br/>
350
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> g dg Dg (f x0) -><br/>
351
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => g (f x)) (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => df x * dg (f x)) (<a href="Coq.Reals.Rlimit.html#Dgf">Dgf</a> Df Dg f) x0.<br/>
352
intros Df Dg df dg f g x0 H H0; generalize H H0; unfold D_in in |- *;<br/>
353
unfold Rdiv in |- *; intros;<br/>
354
generalize<br/>
355
(<a href="Coq.Reals.Rlimit.html#limit_comp">limit_comp</a> f (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (g x - g (f x0)) * / (x - f x0)) (<br/>
356
<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> Df x0) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> Dg (f x0)) (f x0) (dg (f x0)) x0); <br/>
357
intro; generalize (<a href="Coq.Reals.Rderiv.html#cont_deriv">cont_deriv</a> f df Df x0 H); intro; <br/>
358
unfold continue_in in H4; generalize (H3 H4 H2); clear H3; <br/>
360
generalize<br/>
361
(<a href="Coq.Reals.Rlimit.html#limit_mul">limit_mul</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (g (f x) - g (f x0)) * / (f x - f x0))<br/>
362
(fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (f x - f x0) * / (x - x0))<br/>
363
(<a href="Coq.Reals.Rlimit.html#Dgf">Dgf</a> (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> Df x0) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> Dg (f x0)) f) (dg (f x0)) (<br/>
364
df x0) x0 H3); intro;<br/>
366
(<a href="Coq.Reals.Rlimit.html#limit1_in">limit1_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (f x - f x0) * / (x - x0))<br/>
367
(<a href="Coq.Reals.Rlimit.html#Dgf">Dgf</a> (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> Df x0) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> Dg (f x0)) f) (df x0) x0).<br/>
368
intro; generalize (H5 H6); clear H5; intro;<br/>
369
generalize<br/>
370
(<a href="Coq.Reals.Rlimit.html#limit_mul">limit_mul</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => (f x - f x0) * / (x - x0)) (<br/>
371
fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => dg (f x0)) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> Df x0) (df x0) (dg (f x0)) x0 H1<br/>
372
(<a href="Coq.Reals.Rlimit.html#limit_free">limit_free</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => dg (f x0)) (<a href="Coq.Reals.Rderiv.html#D_x">D_x</a> Df x0) x0 x0)); <br/>
373
intro; unfold limit1_in in |- *; unfold limit_in in |- *; <br/>
374
simpl in |- *; unfold limit1_in in H5, H7; unfold limit_in in H5, H7;<br/>
375
simpl in H5, H7; intros; elim (H5 eps H8); elim (H7 eps H8); <br/>
376
clear H5 H7; intros; elim H5; elim H7; clear H5 H7; <br/>
377
intros; split with (<a href="Coq.Reals.Rbasic_fun.html#Rmin">Rmin</a> x x1); split.<br/>
378
elim (<a href="Coq.Reals.Rbasic_fun.html#Rmin_Rgt">Rmin_Rgt</a> x x1 0); intros a b; apply (b (<a href="Coq.Init.Logic.html#conj">conj</a> H9 H5)); clear a b.<br/>
379
intros; elim H11; clear H11; intros; elim (<a href="Coq.Reals.Rbasic_fun.html#Rmin_Rgt">Rmin_Rgt</a> x x1 (<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> x2 x0));<br/>
380
intros a b; clear b; unfold Rgt in a; elim (a H12); <br/>
381
clear H5 a; intros; unfold D_x, Dgf in H11, H7, H10; <br/>
382
clear H12; elim (<a href="Coq.Logic.Classical_Prop.html#classic">classic</a> (f x2 = f x0)); intro.<br/>
383
elim H11; clear H11; intros; elim H11; clear H11; intros;<br/>
384
generalize (H10 x2 (<a href="Coq.Init.Logic.html#conj">conj</a> (<a href="Coq.Init.Logic.html#conj">conj</a> H11 H14) H5)); intro;<br/>
385
rewrite (<a href="Coq.Reals.RIneq.html#Rminus_diag_eq">Rminus_diag_eq</a> (f x2) (f x0) H12) in H16;<br/>
386
rewrite (<a href="Coq.Reals.RIneq.html#Rmult_0_l">Rmult_0_l</a> (/ (x2 - x0))) in H16;<br/>
387
rewrite (<a href="Coq.Reals.RIneq.html#Rmult_0_l">Rmult_0_l</a> (dg (f x0))) in H16; rewrite H12;<br/>
388
rewrite (<a href="Coq.Reals.RIneq.html#Rminus_diag_eq">Rminus_diag_eq</a> (g (f x0)) (g (f x0)) (<a href="Coq.Init.Logic.html#refl_equal">refl_equal</a> (g (f x0))));<br/>
389
rewrite (<a href="Coq.Reals.RIneq.html#Rmult_0_l">Rmult_0_l</a> (/ (x2 - x0))); assumption.<br/>
390
clear H10 H5; elim H11; clear H11; intros; elim H5; clear H5; intros;<br/>
392
(((Df x2 /\ x0 <> x2) /\ Dg (f x2) /\ f x0 <> f x2) /\ <a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> x2 x0 < x1);<br/>
393
auto; intro; generalize (H7 x2 H14); intro;<br/>
394
generalize (<a href="Coq.Reals.RIneq.html#Rminus_eq_contra">Rminus_eq_contra</a> (f x2) (f x0) H12); intro;<br/>
396
(<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> (g (f x2) - g (f x0)) (/ (f x2 - f x0))<br/>
397
((f x2 - f x0) * / (x2 - x0))) in H15;<br/>
398
rewrite <- (<a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a> (/ (f x2 - f x0)) (f x2 - f x0) (/ (x2 - x0)))<br/>
399
in H15; rewrite (<a href="Coq.Reals.Raxioms.html#Rinv_l">Rinv_l</a> (f x2 - f x0) H16) in H15;<br/>
400
rewrite (let (H1, H2) := <a href="Coq.Reals.RIneq.html#Rmult_ne">Rmult_ne</a> (/ (x2 - x0)) in H2) in H15;<br/>
401
rewrite (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (df x0) (dg (f x0))); assumption.<br/>
402
clear H5 H3 H4 H2; unfold limit1_in in |- *; unfold limit_in in |- *;<br/>
403
simpl in |- *; unfold limit1_in in H1; unfold limit_in in H1; <br/>
404
simpl in H1; intros; elim (H1 eps H2); clear H1; intros; <br/>
405
elim H1; clear H1; intros; split with x; split; auto; <br/>
406
intros; unfold D_x, Dgf in H4, H3; elim H4; clear H4; <br/>
407
intros; elim H4; clear H4; intros; exact (H3 x1 (<a href="Coq.Init.Logic.html#conj">conj</a> H4 H5)).<br/>
408
<code class="keyword">Qed</code>. <br/>
411
<code class="keyword">Lemma</code> <a name="D_pow_n"></a>D_pow_n :<br/>
412
forall (n:<a href="Coq.Init.Datatypes.html#nat">nat</a>) (D:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> Prop) (x0:<a href="Coq.Reals.Rdefinitions.html#R">R</a>) (expr dexpr:<a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
413
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> expr dexpr D x0 -><br/>
414
<a href="Coq.Reals.Rderiv.html#D_in">D_in</a> (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => expr x ^ n)<br/>
415
(fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => <a href="Coq.Reals.Raxioms.html#INR">INR</a> n * expr x ^ (n - 1) * dexpr x) (<br/>
416
<a href="Coq.Reals.Rlimit.html#Dgf">Dgf</a> D D expr) x0.<br/>
417
intros n D x0 expr dexpr H;<br/>
418
generalize<br/>
419
(<a href="Coq.Reals.Rderiv.html#Dcomp">Dcomp</a> D D dexpr (fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => <a href="Coq.Reals.Raxioms.html#INR">INR</a> n * x ^ (n - 1)) expr (<br/>
420
fun x:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => x ^ n) x0 H (<a href="Coq.Reals.Rderiv.html#Dx_pow_n">Dx_pow_n</a> n D (expr x0))); <br/>
421
intro; unfold D_in in |- *; unfold limit1_in in |- *;<br/>
422
unfold limit_in in |- *; simpl in |- *; intros; unfold D_in in H0;<br/>
423
unfold limit1_in in H0; unfold limit_in in H0; simpl in H0; <br/>
424
elim (H0 eps H1); clear H0; intros; elim H0; clear H0; <br/>
425
intros; split with x; split; intros; auto.<br/>
427
(dexpr x0 * (<a href="Coq.Reals.Raxioms.html#INR">INR</a> n * expr x0 ^ (n - 1)) =<br/>
428
<a href="Coq.Reals.Raxioms.html#INR">INR</a> n * expr x0 ^ (n - 1) * dexpr x0);<br/>
429
[ intro Rew; rewrite <- Rew; exact (H2 x1 H3) | ring ].<br/>
430
<code class="keyword">Qed</code>.<br/>
432
<hr/><a href="index.html">Index</a><hr/><font size="-1">This page has been generated by <a href="http://www.lri.fr/~filliatr/coqdoc/">coqdoc</a></font>
b'\\ No newline at end of file'