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.SeqSeries</title>
8
<h1>Library Coq.Reals.SeqSeries</h1>
12
<code class="keyword">Require</code> <code class="keyword">Import</code> Rbase.<br/>
13
<code class="keyword">Require</code> <code class="keyword">Import</code> Rfunctions.<br/>
14
<code class="keyword">Require</code> <code class="keyword">Import</code> Max.<br/>
15
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.Rseries.html">Rseries</a>.<br/>
16
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.SeqProp.html">SeqProp</a>.<br/>
17
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.Rcomplete.html">Rcomplete</a>.<br/>
18
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.PartSum.html">PartSum</a>.<br/>
19
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.AltSeries.html">AltSeries</a>.<br/>
20
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.Binomial.html">Binomial</a>.<br/>
21
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.Rsigma.html">Rsigma</a>.<br/>
22
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.Rprod.html">Rprod</a>.<br/>
23
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.Cauchy_prod.html">Cauchy_prod</a>.<br/>
24
<code class="keyword">Require</code> <code class="keyword">Export</code> <a href="Coq.Reals.Alembert.html">Alembert</a>.<br/>
25
Open <code class="keyword">Local</code> Scope R_scope.<br/>
28
<code class="keyword">Lemma</code> <a name="sum_maj1"></a>sum_maj1 :<br/>
29
forall (fn:<a href="Coq.Init.Datatypes.html#nat">nat</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (An:<a href="Coq.Init.Datatypes.html#nat">nat</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (x l1 l2:<a href="Coq.Reals.Rdefinitions.html#R">R</a>) <br/>
30
(N:<a href="Coq.Init.Datatypes.html#nat">nat</a>),<br/>
31
<a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> (fun n:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.PartSum.html#SP">SP</a> fn n x) l1 -><br/>
32
<a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> (fun n:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n) l2 -><br/>
33
(forall n:<a href="Coq.Init.Datatypes.html#nat">nat</a>, <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (fn n x) <= An n) -><br/>
34
<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (l1 - <a href="Coq.Reals.PartSum.html#SP">SP</a> fn N x) <= l2 - <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N.<br/>
37
(<a href="Coq.Init.Specif.html#sigT">sigT</a><br/>
38
(fun l:<a href="Coq.Reals.Rdefinitions.html#R">R</a> =><br/>
39
<a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> (fun n:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (<a href="Coq.Init.Datatypes.html#S">S</a> <a href="Coq.NArith.BinNat.html#N">N</a> + l)%nat x) n) l)).<br/>
42
(<a href="Coq.Init.Specif.html#sigT">sigT</a><br/>
43
(fun l:<a href="Coq.Reals.Rdefinitions.html#R">R</a> =><br/>
44
<a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> (fun n:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat) n) l)).<br/>
45
intro; elim X; intros l1N H2.<br/>
46
elim X0; intros l2N H3.<br/>
47
cut (l1 - <a href="Coq.Reals.PartSum.html#SP">SP</a> fn N x = l1N).<br/>
48
intro; cut (l2 - <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N = l2N).<br/>
49
intro; rewrite H4; rewrite H5.<br/>
50
apply <a href="Coq.Reals.PartSum.html#sum_cv_maj">sum_cv_maj</a> with<br/>
51
(fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat) (fun (l:<a href="Coq.Init.Datatypes.html#nat">nat</a>) (x:<a href="Coq.Reals.Rdefinitions.html#R">R</a>) => fn (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat x) x.<br/>
52
unfold SP in |- *; apply H2.<br/>
54
intros; apply H1.<br/>
55
symmetry in |- *; eapply <a href="Coq.Reals.SeqProp.html#UL_sequence">UL_sequence</a>.<br/>
57
unfold Un_cv in H0; unfold Un_cv in |- *; intros; elim (H0 eps H5);<br/>
58
intros N0 H6.<br/>
59
unfold R_dist in H6; exists N0; intros.<br/>
60
unfold R_dist in |- *;<br/>
61
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat) n - (l2 - <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N))<br/>
62
with (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N + <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat) n - l2);<br/>
63
[ idtac | ring ].<br/>
64
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N + <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat) n) with<br/>
65
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))).<br/>
66
apply H6; unfold ge in |- *; apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with n.<br/>
68
apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with (N + n)%nat.<br/>
69
apply <a href="Coq.Arith.Plus.html#le_plus_r">le_plus_r</a>.<br/>
70
apply <a href="Coq.Arith.Le.html#le_n_Sn">le_n_Sn</a>.<br/>
71
cut (0 <= N)%nat.<br/>
72
cut (N < <a href="Coq.Init.Datatypes.html#S">S</a> (N + n))%nat.<br/>
73
intros; assert (H10:= <a href="Coq.Reals.Rsigma.html#sigma_split">sigma_split</a> An H9 H8).<br/>
74
unfold sigma in H10.<br/>
75
do 2 rewrite <- <a href="Coq.Arith.Minus.html#minus_n_O">minus_n_O</a> in H10.<br/>
76
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))) with<br/>
77
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (0 + k)%nat) (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))).<br/>
78
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N) with (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (0 + k)%nat) N).<br/>
79
cut ((<a href="Coq.Init.Datatypes.html#S">S</a> (N + n) - <a href="Coq.Init.Datatypes.html#S">S</a> N)%nat = n).<br/>
80
intro; rewrite H11 in H10.<br/>
82
apply <a href="Coq.Reals.RIneq.html#INR_eq">INR_eq</a>; rewrite <a href="Coq.Reals.RIneq.html#minus_INR">minus_INR</a>.<br/>
83
do 2 rewrite <a href="Coq.Reals.RIneq.html#S_INR">S_INR</a>; rewrite <a href="Coq.Reals.RIneq.html#plus_INR">plus_INR</a>; ring.<br/>
84
apply <a href="Coq.Arith.Le.html#le_n_S">le_n_S</a>; apply <a href="Coq.Arith.Plus.html#le_plus_l">le_plus_l</a>.<br/>
85
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros.<br/>
87
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros.<br/>
89
apply <a href="Coq.Arith.Lt.html#le_lt_n_Sm">le_lt_n_Sm</a>; apply <a href="Coq.Arith.Plus.html#le_plus_l">le_plus_l</a>.<br/>
90
apply <a href="Coq.Arith.Le.html#le_O_n">le_O_n</a>.<br/>
91
symmetry in |- *; eapply <a href="Coq.Reals.SeqProp.html#UL_sequence">UL_sequence</a>.<br/>
93
unfold Un_cv in H; unfold Un_cv in |- *; intros.<br/>
94
elim (H eps H4); intros N0 H5.<br/>
95
unfold R_dist in H5; exists N0; intros.<br/>
96
unfold R_dist, SP in |- *;<br/>
98
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat x) n -<br/>
99
(l1 - <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) N)) with<br/>
100
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) N +<br/>
101
<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat x) n - l1); <br/>
102
[ idtac | ring ].<br/>
104
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) N +<br/>
105
<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat x) n) with<br/>
106
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))).<br/>
107
unfold SP in H5; apply H5; unfold ge in |- *; apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with n.<br/>
109
apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with (N + n)%nat.<br/>
110
apply <a href="Coq.Arith.Plus.html#le_plus_r">le_plus_r</a>.<br/>
111
apply <a href="Coq.Arith.Le.html#le_n_Sn">le_n_Sn</a>.<br/>
112
cut (0 <= N)%nat.<br/>
113
cut (N < <a href="Coq.Init.Datatypes.html#S">S</a> (N + n))%nat.<br/>
114
intros; assert (H9:= <a href="Coq.Reals.Rsigma.html#sigma_split">sigma_split</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) H8 H7).<br/>
115
unfold sigma in H9.<br/>
116
do 2 rewrite <- <a href="Coq.Arith.Minus.html#minus_n_O">minus_n_O</a> in H9.<br/>
117
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))) with<br/>
118
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (0 + k)%nat x) (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))).<br/>
119
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) N) with<br/>
120
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (0 + k)%nat x) N).<br/>
121
cut ((<a href="Coq.Init.Datatypes.html#S">S</a> (N + n) - <a href="Coq.Init.Datatypes.html#S">S</a> N)%nat = n).<br/>
122
intro; rewrite H10 in H9.<br/>
124
apply <a href="Coq.Reals.RIneq.html#INR_eq">INR_eq</a>; rewrite <a href="Coq.Reals.RIneq.html#minus_INR">minus_INR</a>.<br/>
125
do 2 rewrite <a href="Coq.Reals.RIneq.html#S_INR">S_INR</a>; rewrite <a href="Coq.Reals.RIneq.html#plus_INR">plus_INR</a>; ring.<br/>
126
apply <a href="Coq.Arith.Le.html#le_n_S">le_n_S</a>; apply <a href="Coq.Arith.Plus.html#le_plus_l">le_plus_l</a>.<br/>
127
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros.<br/>
129
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros.<br/>
131
apply <a href="Coq.Arith.Lt.html#le_lt_n_Sm">le_lt_n_Sm</a>.<br/>
132
apply <a href="Coq.Arith.Plus.html#le_plus_l">le_plus_l</a>.<br/>
133
apply <a href="Coq.Arith.Le.html#le_O_n">le_O_n</a>.<br/>
134
apply <a href="Coq.Init.Specif.html#existT">existT</a> with (l2 - <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N).<br/>
135
unfold Un_cv in H0; unfold Un_cv in |- *; intros.<br/>
136
elim (H0 eps H2); intros N0 H3.<br/>
137
unfold R_dist in H3; exists N0; intros.<br/>
138
unfold R_dist in |- *;<br/>
139
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat) n - (l2 - <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N))<br/>
140
with (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N + <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat) n - l2);<br/>
141
[ idtac | ring ].<br/>
142
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N + <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat) n) with<br/>
143
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))).<br/>
144
apply H3; unfold ge in |- *; apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with n.<br/>
146
apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with (N + n)%nat.<br/>
147
apply <a href="Coq.Arith.Plus.html#le_plus_r">le_plus_r</a>.<br/>
148
apply <a href="Coq.Arith.Le.html#le_n_Sn">le_n_Sn</a>.<br/>
149
cut (0 <= N)%nat.<br/>
150
cut (N < <a href="Coq.Init.Datatypes.html#S">S</a> (N + n))%nat.<br/>
151
intros; assert (H7:= <a href="Coq.Reals.Rsigma.html#sigma_split">sigma_split</a> An H6 H5).<br/>
152
unfold sigma in H7.<br/>
153
do 2 rewrite <- <a href="Coq.Arith.Minus.html#minus_n_O">minus_n_O</a> in H7.<br/>
154
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))) with<br/>
155
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (0 + k)%nat) (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))).<br/>
156
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N) with (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (0 + k)%nat) N).<br/>
157
cut ((<a href="Coq.Init.Datatypes.html#S">S</a> (N + n) - <a href="Coq.Init.Datatypes.html#S">S</a> N)%nat = n).<br/>
158
intro; rewrite H8 in H7.<br/>
160
apply <a href="Coq.Reals.RIneq.html#INR_eq">INR_eq</a>; rewrite <a href="Coq.Reals.RIneq.html#minus_INR">minus_INR</a>.<br/>
161
do 2 rewrite <a href="Coq.Reals.RIneq.html#S_INR">S_INR</a>; rewrite <a href="Coq.Reals.RIneq.html#plus_INR">plus_INR</a>; ring.<br/>
162
apply <a href="Coq.Arith.Le.html#le_n_S">le_n_S</a>; apply <a href="Coq.Arith.Plus.html#le_plus_l">le_plus_l</a>.<br/>
163
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros.<br/>
165
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros.<br/>
167
apply <a href="Coq.Arith.Lt.html#le_lt_n_Sm">le_lt_n_Sm</a>.<br/>
168
apply <a href="Coq.Arith.Plus.html#le_plus_l">le_plus_l</a>.<br/>
169
apply <a href="Coq.Arith.Le.html#le_O_n">le_O_n</a>.<br/>
170
apply <a href="Coq.Init.Specif.html#existT">existT</a> with (l1 - <a href="Coq.Reals.PartSum.html#SP">SP</a> fn N x).<br/>
171
unfold Un_cv in H; unfold Un_cv in |- *; intros.<br/>
172
elim (H eps H2); intros N0 H3.<br/>
173
unfold R_dist in H3; exists N0; intros.<br/>
174
unfold R_dist, SP in |- *.<br/>
176
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat x) n -<br/>
177
(l1 - <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) N)) with<br/>
178
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) N +<br/>
179
<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat x) n - l1); <br/>
180
[ idtac | ring ].<br/>
182
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) N +<br/>
183
<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun l:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (<a href="Coq.Init.Datatypes.html#S">S</a> N + l)%nat x) n) with<br/>
184
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))).<br/>
185
unfold SP in H3; apply H3.<br/>
186
unfold ge in |- *; apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with n.<br/>
188
apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with (N + n)%nat.<br/>
189
apply <a href="Coq.Arith.Plus.html#le_plus_r">le_plus_r</a>.<br/>
190
apply <a href="Coq.Arith.Le.html#le_n_Sn">le_n_Sn</a>.<br/>
191
cut (0 <= N)%nat.<br/>
192
cut (N < <a href="Coq.Init.Datatypes.html#S">S</a> (N + n))%nat.<br/>
193
intros; assert (H7:= <a href="Coq.Reals.Rsigma.html#sigma_split">sigma_split</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) H6 H5).<br/>
194
unfold sigma in H7.<br/>
195
do 2 rewrite <- <a href="Coq.Arith.Minus.html#minus_n_O">minus_n_O</a> in H7.<br/>
196
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))) with<br/>
197
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (0 + k)%nat x) (<a href="Coq.Init.Datatypes.html#S">S</a> (N + n))).<br/>
198
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn k x) N) with<br/>
199
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => fn (0 + k)%nat x) N).<br/>
200
cut ((<a href="Coq.Init.Datatypes.html#S">S</a> (N + n) - <a href="Coq.Init.Datatypes.html#S">S</a> N)%nat = n).<br/>
201
intro; rewrite H8 in H7.<br/>
203
apply <a href="Coq.Reals.RIneq.html#INR_eq">INR_eq</a>; rewrite <a href="Coq.Reals.RIneq.html#minus_INR">minus_INR</a>.<br/>
204
do 2 rewrite <a href="Coq.Reals.RIneq.html#S_INR">S_INR</a>; rewrite <a href="Coq.Reals.RIneq.html#plus_INR">plus_INR</a>; ring.<br/>
205
apply <a href="Coq.Arith.Le.html#le_n_S">le_n_S</a>; apply <a href="Coq.Arith.Plus.html#le_plus_l">le_plus_l</a>.<br/>
206
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros.<br/>
208
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros.<br/>
210
apply <a href="Coq.Arith.Lt.html#le_lt_n_Sm">le_lt_n_Sm</a>.<br/>
211
apply <a href="Coq.Arith.Plus.html#le_plus_l">le_plus_l</a>.<br/>
212
apply <a href="Coq.Arith.Le.html#le_O_n">le_O_n</a>.<br/>
213
<code class="keyword">Qed</code>.<br/>
216
<code class="keyword">Lemma</code> <a name="Rseries_CV_comp"></a>Rseries_CV_comp :<br/>
217
forall An Bn:<a href="Coq.Init.Datatypes.html#nat">nat</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>,<br/>
218
(forall n:<a href="Coq.Init.Datatypes.html#nat">nat</a>, 0 <= An n <= Bn n) -><br/>
219
<a href="Coq.Init.Specif.html#sigT">sigT</a> (fun l:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => <a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> (fun N:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> Bn N) l) -><br/>
220
<a href="Coq.Init.Specif.html#sigT">sigT</a> (fun l:<a href="Coq.Reals.Rdefinitions.html#R">R</a> => <a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> (fun N:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An N) l).<br/>
221
intros; apply <a href="Coq.Reals.PartSum.html#cv_cauchy_2">cv_cauchy_2</a>.<br/>
222
assert (H0:= <a href="Coq.Reals.PartSum.html#cv_cauchy_1">cv_cauchy_1</a> _ X).<br/>
223
unfold Cauchy_crit_series in |- *; unfold Cauchy_crit in |- *.<br/>
224
intros; elim (H0 eps H1); intros.<br/>
225
exists x; intros.<br/>
227
(<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n) (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An m) <=<br/>
228
<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> Bn n) (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> Bn m)).<br/>
229
intro; apply <a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> with (<a href="Coq.Reals.Rfunctions.html#R_dist">R_dist</a> (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> Bn n) (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> Bn m)).<br/>
231
apply H2; assumption.<br/>
232
assert (H5:= <a href="Coq.Arith.Compare_dec.html#lt_eq_lt_dec">lt_eq_lt_dec</a> n m).<br/>
235
rewrite (<a href="Coq.Reals.PartSum.html#tech2">tech2</a> An n m); [ idtac | assumption ].<br/>
236
rewrite (<a href="Coq.Reals.PartSum.html#tech2">tech2</a> Bn n m); [ idtac | assumption ].<br/>
237
unfold R_dist in |- *; unfold Rminus in |- *; do 2 rewrite <a href="Coq.Reals.RIneq.html#Ropp_plus_distr">Ropp_plus_distr</a>;<br/>
238
do 2 rewrite <- <a href="Coq.Reals.Raxioms.html#Rplus_assoc">Rplus_assoc</a>; do 2 rewrite <a href="Coq.Reals.Raxioms.html#Rplus_opp_r">Rplus_opp_r</a>;<br/>
239
do 2 rewrite <a href="Coq.Reals.Raxioms.html#Rplus_0_l">Rplus_0_l</a>; do 2 rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_Ropp">Rabs_Ropp</a>; repeat rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_right">Rabs_right</a>.<br/>
240
apply <a href="Coq.Reals.PartSum.html#sum_Rle">sum_Rle</a>; intros.<br/>
241
elim (H (<a href="Coq.Init.Datatypes.html#S">S</a> n + n0)%nat); intros.<br/>
243
apply <a href="Coq.Reals.RIneq.html#Rle_ge">Rle_ge</a>; apply <a href="Coq.Reals.PartSum.html#cond_pos_sum">cond_pos_sum</a>; intro.<br/>
244
elim (H (<a href="Coq.Init.Datatypes.html#S">S</a> n + n0)%nat); intros.<br/>
245
apply <a href="Coq.Reals.RIneq.html#Rle_trans">Rle_trans</a> with (An (<a href="Coq.Init.Datatypes.html#S">S</a> n + n0)%nat); assumption.<br/>
246
apply <a href="Coq.Reals.RIneq.html#Rle_ge">Rle_ge</a>; apply <a href="Coq.Reals.PartSum.html#cond_pos_sum">cond_pos_sum</a>; intro.<br/>
247
elim (H (<a href="Coq.Init.Datatypes.html#S">S</a> n + n0)%nat); intros; assumption.<br/>
248
rewrite b; unfold R_dist in |- *; unfold Rminus in |- *;<br/>
249
do 2 rewrite <a href="Coq.Reals.Raxioms.html#Rplus_opp_r">Rplus_opp_r</a>; rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_R0">Rabs_R0</a>; right; <br/>
250
reflexivity.<br/>
251
rewrite (<a href="Coq.Reals.PartSum.html#tech2">tech2</a> An m n); [ idtac | assumption ].<br/>
252
rewrite (<a href="Coq.Reals.PartSum.html#tech2">tech2</a> Bn m n); [ idtac | assumption ].<br/>
253
unfold R_dist in |- *; unfold Rminus in |- *; do 2 rewrite <a href="Coq.Reals.Raxioms.html#Rplus_assoc">Rplus_assoc</a>;<br/>
254
rewrite (<a href="Coq.Reals.Raxioms.html#Rplus_comm">Rplus_comm</a> (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An m)); rewrite (<a href="Coq.Reals.Raxioms.html#Rplus_comm">Rplus_comm</a> (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> Bn m));<br/>
255
do 2 rewrite <a href="Coq.Reals.Raxioms.html#Rplus_assoc">Rplus_assoc</a>; do 2 rewrite <a href="Coq.Reals.RIneq.html#Rplus_opp_l">Rplus_opp_l</a>; <br/>
256
do 2 rewrite <a href="Coq.Reals.RIneq.html#Rplus_0_r">Rplus_0_r</a>; repeat rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_right">Rabs_right</a>.<br/>
257
apply <a href="Coq.Reals.PartSum.html#sum_Rle">sum_Rle</a>; intros.<br/>
258
elim (H (<a href="Coq.Init.Datatypes.html#S">S</a> m + n0)%nat); intros; apply H8.<br/>
259
apply <a href="Coq.Reals.RIneq.html#Rle_ge">Rle_ge</a>; apply <a href="Coq.Reals.PartSum.html#cond_pos_sum">cond_pos_sum</a>; intro.<br/>
260
elim (H (<a href="Coq.Init.Datatypes.html#S">S</a> m + n0)%nat); intros.<br/>
261
apply <a href="Coq.Reals.RIneq.html#Rle_trans">Rle_trans</a> with (An (<a href="Coq.Init.Datatypes.html#S">S</a> m + n0)%nat); assumption.<br/>
262
apply <a href="Coq.Reals.RIneq.html#Rle_ge">Rle_ge</a>.<br/>
263
apply <a href="Coq.Reals.PartSum.html#cond_pos_sum">cond_pos_sum</a>; intro.<br/>
264
elim (H (<a href="Coq.Init.Datatypes.html#S">S</a> m + n0)%nat); intros; assumption.<br/>
265
<code class="keyword">Qed</code>.<br/>
268
<code class="keyword">Lemma</code> <a name="Cesaro"></a>Cesaro :<br/>
269
forall (An Bn:<a href="Coq.Init.Datatypes.html#nat">nat</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (l:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
270
<a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> Bn l -><br/>
271
(forall n:<a href="Coq.Init.Datatypes.html#nat">nat</a>, 0 < An n) -><br/>
272
<a href="Coq.Reals.SeqProp.html#cv_infty">cv_infty</a> (fun n:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n) -><br/>
273
<a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> (fun n:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * Bn k) n / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)<br/>
274
l.<br/>
275
<code class="keyword">Proof</code> with trivial.<br/>
276
unfold Un_cv in |- *; intros; assert (H3 : forall n:<a href="Coq.Init.Datatypes.html#nat">nat</a>, 0 < <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)...<br/>
277
intro; apply <a href="Coq.Reals.PartSum.html#tech1">tech1</a>...<br/>
278
assert (H4 : forall n:<a href="Coq.Init.Datatypes.html#nat">nat</a>, <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n <> 0)...<br/>
279
intro; red in |- *; intro; assert (H5:= H3 n); rewrite H4 in H5;<br/>
280
elim (<a href="Coq.Reals.RIneq.html#Rlt_irrefl">Rlt_irrefl</a> _ H5)...<br/>
281
assert (H5:= <a href="Coq.Reals.SeqProp.html#cv_infty_cv_R0">cv_infty_cv_R0</a> _ H4 H1); assert (H6 : 0 < eps / 2)...<br/>
282
unfold Rdiv in |- *; apply <a href="Coq.Reals.RIneq.html#Rmult_lt_0_compat">Rmult_lt_0_compat</a>...<br/>
283
apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>; prove_sup...<br/>
284
elim (H _ H6); clear H; intros N1 H;<br/>
285
set (C:= <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * (Bn k - l)) N1));<br/>
287
(H7 :<br/>
288
exists N : <a href="Coq.Init.Datatypes.html#nat">nat</a>,<br/>
289
(forall n:<a href="Coq.Init.Datatypes.html#nat">nat</a>, (N <= n)%nat -> C / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n < eps / 2))...<br/>
290
case (<a href="Coq.Reals.RIneq.html#Req_dec">Req_dec</a> C 0); intro...<br/>
291
exists 0%nat; intros...<br/>
292
rewrite H7; unfold Rdiv in |- *; rewrite <a href="Coq.Reals.RIneq.html#Rmult_0_l">Rmult_0_l</a>; apply <a href="Coq.Reals.RIneq.html#Rmult_lt_0_compat">Rmult_lt_0_compat</a>...<br/>
293
apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>; prove_sup...<br/>
294
assert (H8 : 0 < eps / (2 * <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> C))...<br/>
295
unfold Rdiv in |- *; apply <a href="Coq.Reals.RIneq.html#Rmult_lt_0_compat">Rmult_lt_0_compat</a>...<br/>
296
apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>; apply <a href="Coq.Reals.RIneq.html#Rmult_lt_0_compat">Rmult_lt_0_compat</a>...<br/>
298
apply <a href="Coq.Reals.Rbasic_fun.html#Rabs_pos_lt">Rabs_pos_lt</a>...<br/>
299
elim (H5 _ H8); intros; exists x; intros; assert (H11:= H9 _ H10);<br/>
300
unfold R_dist in H11; unfold Rminus in H11; rewrite <a href="Coq.Reals.RIneq.html#Ropp_0">Ropp_0</a> in H11;<br/>
301
rewrite <a href="Coq.Reals.RIneq.html#Rplus_0_r">Rplus_0_r</a> in H11...<br/>
302
apply <a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> with (<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (C / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n))...<br/>
303
apply <a href="Coq.Reals.Rbasic_fun.html#RRle_abs">RRle_abs</a>...<br/>
304
unfold Rdiv in |- *; rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_mult">Rabs_mult</a>; apply <a href="Coq.Reals.RIneq.html#Rmult_lt_reg_l">Rmult_lt_reg_l</a> with (/ <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> C)...<br/>
305
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/>
306
rewrite <- <a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a>; rewrite <- <a href="Coq.Reals.RIneq.html#Rinv_l_sym">Rinv_l_sym</a>...<br/>
307
rewrite <a href="Coq.Reals.Raxioms.html#Rmult_1_l">Rmult_1_l</a>; replace (/ <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> C * (eps * / 2)) with (eps / (2 * <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> C))...<br/>
308
unfold Rdiv in |- *; rewrite <a href="Coq.Reals.RIneq.html#Rinv_mult_distr">Rinv_mult_distr</a>...<br/>
311
apply <a href="Coq.Reals.Rbasic_fun.html#Rabs_no_R0">Rabs_no_R0</a>...<br/>
312
apply <a href="Coq.Reals.Rbasic_fun.html#Rabs_no_R0">Rabs_no_R0</a>...<br/>
313
elim H7; clear H7; intros N2 H7; set (N:= <a href="Coq.Arith.Max.html#max">max</a> N1 N2); exists (<a href="Coq.Init.Datatypes.html#S">S</a> N); intros;<br/>
314
unfold R_dist in |- *;<br/>
315
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * Bn k) n / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n - l) with<br/>
316
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * (Bn k - l)) n / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)...<br/>
317
assert (H9 : (N1 < n)%nat)...<br/>
318
apply <a href="Coq.Arith.Lt.html#lt_le_trans">lt_le_trans</a> with (<a href="Coq.Init.Datatypes.html#S">S</a> N)...<br/>
319
apply <a href="Coq.Arith.Lt.html#le_lt_n_Sm">le_lt_n_Sm</a>; unfold N in |- *; apply <a href="Coq.Arith.Max.html#le_max_l">le_max_l</a>...<br/>
320
rewrite (<a href="Coq.Reals.PartSum.html#tech2">tech2</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * (Bn k - l)) _ _ H9); unfold Rdiv in |- *;<br/>
321
rewrite <a href="Coq.Reals.RIneq.html#Rmult_plus_distr_r">Rmult_plus_distr_r</a>;<br/>
322
apply <a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> with<br/>
323
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * (Bn k - l)) N1 / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n) +<br/>
324
<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a><br/>
325
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun i:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat * (Bn (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat - l))<br/>
326
(n - <a href="Coq.Init.Datatypes.html#S">S</a> N1) / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n))...<br/>
327
apply <a href="Coq.Reals.Rbasic_fun.html#Rabs_triang">Rabs_triang</a>...<br/>
328
rewrite (<a href="Coq.Reals.RIneq.html#double_var">double_var</a> eps); apply <a href="Coq.Reals.RIneq.html#Rplus_lt_compat">Rplus_lt_compat</a>...<br/>
329
unfold Rdiv in |- *; rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_mult">Rabs_mult</a>; fold C in |- *; rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_right">Rabs_right</a>...<br/>
330
apply (H7 n); apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with (<a href="Coq.Init.Datatypes.html#S">S</a> N)...<br/>
331
apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with N; [ unfold N in |- *; apply le_max_r | apply le_n_Sn ]...<br/>
332
apply <a href="Coq.Reals.RIneq.html#Rle_ge">Rle_ge</a>; left; apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>...<br/>
335
unfold R_dist in H; unfold Rdiv in |- *; rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_mult">Rabs_mult</a>;<br/>
336
rewrite (<a href="Coq.Reals.Rbasic_fun.html#Rabs_right">Rabs_right</a> (/ <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n))...<br/>
337
apply <a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> with<br/>
338
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun i:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a> (An (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat * (Bn (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat - l)))<br/>
339
(n - <a href="Coq.Init.Datatypes.html#S">S</a> N1) * / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)...<br/>
340
do 2 rewrite <- (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (/ <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)); apply <a href="Coq.Reals.RIneq.html#Rmult_le_compat_l">Rmult_le_compat_l</a>...<br/>
341
left; apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>...<br/>
343
(<a href="Coq.Reals.PartSum.html#Rsum_abs">Rsum_abs</a> (fun i:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat * (Bn (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat - l))<br/>
344
(n - <a href="Coq.Init.Datatypes.html#S">S</a> N1))...<br/>
345
apply <a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> with<br/>
346
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun i:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat * (eps / 2)) (n - <a href="Coq.Init.Datatypes.html#S">S</a> N1) *<br/>
347
/ <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)...<br/>
348
do 2 rewrite <- (<a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a> (/ <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)); apply <a href="Coq.Reals.RIneq.html#Rmult_le_compat_l">Rmult_le_compat_l</a>...<br/>
349
left; apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>...<br/>
350
apply <a href="Coq.Reals.PartSum.html#sum_Rle">sum_Rle</a>; intros; rewrite <a href="Coq.Reals.Rbasic_fun.html#Rabs_mult">Rabs_mult</a>;<br/>
351
pattern (An (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + n0)%nat) at 2 in |- *;<br/>
352
rewrite <- (<a href="Coq.Reals.Rbasic_fun.html#Rabs_right">Rabs_right</a> (An (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + n0)%nat))...<br/>
353
apply <a href="Coq.Reals.RIneq.html#Rmult_le_compat_l">Rmult_le_compat_l</a>...<br/>
354
apply <a href="Coq.Reals.Rbasic_fun.html#Rabs_pos">Rabs_pos</a>...<br/>
355
left; apply H; unfold ge in |- *; apply <a href="Coq.Arith.Le.html#le_trans">le_trans</a> with (<a href="Coq.Init.Datatypes.html#S">S</a> N1);<br/>
356
[ apply le_n_Sn | apply le_plus_l ]...<br/>
357
apply <a href="Coq.Reals.RIneq.html#Rle_ge">Rle_ge</a>; left...<br/>
358
rewrite <- (<a href="Coq.Reals.PartSum.html#scal_sum">scal_sum</a> (fun i:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat) (n - <a href="Coq.Init.Datatypes.html#S">S</a> N1) (eps / 2));<br/>
359
unfold Rdiv in |- *; repeat rewrite <a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a>; apply <a href="Coq.Reals.Raxioms.html#Rmult_lt_compat_l">Rmult_lt_compat_l</a>...<br/>
360
pattern (/ 2) at 2 in |- *; rewrite <- <a href="Coq.Reals.RIneq.html#Rmult_1_r">Rmult_1_r</a>; apply <a href="Coq.Reals.Raxioms.html#Rmult_lt_compat_l">Rmult_lt_compat_l</a>...<br/>
361
apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>; prove_sup...<br/>
362
rewrite <a href="Coq.Reals.Raxioms.html#Rmult_comm">Rmult_comm</a>; apply <a href="Coq.Reals.RIneq.html#Rmult_lt_reg_l">Rmult_lt_reg_l</a> with (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)...<br/>
363
rewrite <- <a href="Coq.Reals.Raxioms.html#Rmult_assoc">Rmult_assoc</a>; rewrite <- <a href="Coq.Reals.RIneq.html#Rinv_r_sym">Rinv_r_sym</a>...<br/>
364
rewrite <a href="Coq.Reals.Raxioms.html#Rmult_1_l">Rmult_1_l</a>; rewrite <a href="Coq.Reals.RIneq.html#Rmult_1_r">Rmult_1_r</a>; rewrite (<a href="Coq.Reals.PartSum.html#tech2">tech2</a> An N1 n)...<br/>
365
rewrite <a href="Coq.Reals.Raxioms.html#Rplus_comm">Rplus_comm</a>;<br/>
366
pattern (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun i:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An (<a href="Coq.Init.Datatypes.html#S">S</a> N1 + i)%nat) (n - <a href="Coq.Init.Datatypes.html#S">S</a> N1)) at 1 in |- *;<br/>
367
rewrite <- <a href="Coq.Reals.RIneq.html#Rplus_0_r">Rplus_0_r</a>; apply <a href="Coq.Reals.Raxioms.html#Rplus_lt_compat_l">Rplus_lt_compat_l</a>...<br/>
368
apply <a href="Coq.Reals.RIneq.html#Rle_ge">Rle_ge</a>; left; apply <a href="Coq.Reals.RIneq.html#Rinv_0_lt_compat">Rinv_0_lt_compat</a>...<br/>
369
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * (Bn k - l)) n) with<br/>
370
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * Bn k) n +<br/>
371
<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * - l) n)...<br/>
372
rewrite <- (<a href="Coq.Reals.PartSum.html#scal_sum">scal_sum</a> An n (- l)); field...<br/>
373
rewrite <- <a href="Coq.Reals.PartSum.html#plus_sum">plus_sum</a>; apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros; ring...<br/>
374
<code class="keyword">Qed</code>.<br/>
377
<code class="keyword">Lemma</code> <a name="Cesaro_1"></a>Cesaro_1 :<br/>
378
forall (An:<a href="Coq.Init.Datatypes.html#nat">nat</a> -> <a href="Coq.Reals.Rdefinitions.html#R">R</a>) (l:<a href="Coq.Reals.Rdefinitions.html#R">R</a>),<br/>
379
<a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> An l -> <a href="Coq.Reals.Rseries.html#Un_cv">Un_cv</a> (fun n:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An (<a href="Coq.Init.Peano.html#pred">pred</a> n) / <a href="Coq.Reals.Raxioms.html#INR">INR</a> n) l.<br/>
380
<code class="keyword">Proof</code> with trivial.<br/>
381
intros Bn l H; set (An:= fun _:<a href="Coq.Init.Datatypes.html#nat">nat</a> => 1)...<br/>
382
assert (H0 : forall n:<a href="Coq.Init.Datatypes.html#nat">nat</a>, 0 < An n)...<br/>
383
intro; unfold An in |- *; apply <a href="Coq.Reals.RIneq.html#Rlt_0_1">Rlt_0_1</a>...<br/>
384
assert (H1 : forall n:<a href="Coq.Init.Datatypes.html#nat">nat</a>, 0 < <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n)...<br/>
385
intro; apply <a href="Coq.Reals.PartSum.html#tech1">tech1</a>...<br/>
386
assert (H2 : <a href="Coq.Reals.SeqProp.html#cv_infty">cv_infty</a> (fun n:<a href="Coq.Init.Datatypes.html#nat">nat</a> => <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An n))...<br/>
387
unfold cv_infty in |- *; intro; case (<a href="Coq.Reals.RIneq.html#Rle_dec">Rle_dec</a> M 0); intro...<br/>
388
exists 0%nat; intros; apply <a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> with 0...<br/>
389
assert (H2 : 0 < M)...<br/>
390
auto with real...<br/>
391
clear n; set (m:= <a href="Coq.Reals.Rdefinitions.html#up">up</a> M); elim (<a href="Coq.Reals.Raxioms.html#archimed">archimed</a> M); intros;<br/>
392
assert (H5 : (0 <= m)%Z)...<br/>
393
apply <a href="Coq.Reals.RIneq.html#le_IZR">le_IZR</a>; unfold m in |- *; simpl in |- *; left; apply <a href="Coq.Reals.Raxioms.html#Rlt_trans">Rlt_trans</a> with M...<br/>
394
elim (<a href="Coq.Reals.RIneq.html#IZN">IZN</a> _ H5); intros; exists x; intros; unfold An in |- *; rewrite <a href="Coq.Reals.PartSum.html#sum_cte">sum_cte</a>;<br/>
395
rewrite <a href="Coq.Reals.Raxioms.html#Rmult_1_l">Rmult_1_l</a>; apply <a href="Coq.Reals.Raxioms.html#Rlt_trans">Rlt_trans</a> with (<a href="Coq.Reals.Raxioms.html#IZR">IZR</a> (<a href="Coq.Reals.Rdefinitions.html#up">up</a> M))...<br/>
396
apply <a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> with (<a href="Coq.Reals.Raxioms.html#INR">INR</a> x)...<br/>
397
rewrite <a href="Coq.Reals.RIneq.html#INR_IZR_INZ">INR_IZR_INZ</a>; fold m in |- *; rewrite <- H6; right...<br/>
398
apply <a href="Coq.Reals.RIneq.html#lt_INR">lt_INR</a>; apply <a href="Coq.Arith.Lt.html#le_lt_n_Sm">le_lt_n_Sm</a>...<br/>
399
assert (H3:= <a href="Coq.Reals.SeqSeries.html#Cesaro">Cesaro</a> _ _ _ H H0 H2)...<br/>
400
unfold Un_cv in |- *; unfold Un_cv in H3; intros; elim (H3 _ H4); intros;<br/>
401
exists (<a href="Coq.Init.Datatypes.html#S">S</a> x); intros; unfold R_dist in |- *; unfold R_dist in H5;<br/>
402
apply <a href="Coq.Reals.RIneq.html#Rle_lt_trans">Rle_lt_trans</a> with<br/>
403
(<a href="Coq.Reals.Rbasic_fun.html#Rabs">Rabs</a><br/>
404
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * Bn k) (<a href="Coq.Init.Peano.html#pred">pred</a> n) / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An (<a href="Coq.Init.Peano.html#pred">pred</a> n) - l))...<br/>
406
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> Bn (<a href="Coq.Init.Peano.html#pred">pred</a> n) / <a href="Coq.Reals.Raxioms.html#INR">INR</a> n - l) with<br/>
407
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => An k * Bn k) (<a href="Coq.Init.Peano.html#pred">pred</a> n) / <a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> An (<a href="Coq.Init.Peano.html#pred">pred</a> n) - l)...<br/>
408
unfold Rminus in |- *; do 2 rewrite <- (<a href="Coq.Reals.Raxioms.html#Rplus_comm">Rplus_comm</a> (- l));<br/>
409
apply <a href="Coq.Reals.RIneq.html#Rplus_eq_compat_l">Rplus_eq_compat_l</a>...<br/>
410
unfold An in |- *;<br/>
411
replace (<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> (fun k:<a href="Coq.Init.Datatypes.html#nat">nat</a> => 1 * Bn k) (<a href="Coq.Init.Peano.html#pred">pred</a> n)) with<br/>
412
(<a href="Coq.Reals.Rfunctions.html#sum_f_R0">sum_f_R0</a> Bn (<a href="Coq.Init.Peano.html#pred">pred</a> n))...<br/>
413
rewrite <a href="Coq.Reals.PartSum.html#sum_cte">sum_cte</a>; rewrite <a href="Coq.Reals.Raxioms.html#Rmult_1_l">Rmult_1_l</a>; replace (<a href="Coq.Init.Datatypes.html#S">S</a> (<a href="Coq.Init.Peano.html#pred">pred</a> n)) with n...<br/>
414
apply <a href="Coq.Arith.Lt.html#S_pred">S_pred</a> with 0%nat; apply <a href="Coq.Arith.Lt.html#lt_le_trans">lt_le_trans</a> with (<a href="Coq.Init.Datatypes.html#S">S</a> x)...<br/>
415
apply <a href="Coq.Arith.Lt.html#lt_O_Sn">lt_O_Sn</a>...<br/>
416
apply <a href="Coq.Reals.PartSum.html#sum_eq">sum_eq</a>; intros; ring...<br/>
417
apply H5; unfold ge in |- *; apply <a href="Coq.Arith.Le.html#le_S_n">le_S_n</a>; replace (<a href="Coq.Init.Datatypes.html#S">S</a> (<a href="Coq.Init.Peano.html#pred">pred</a> n)) with n...<br/>
418
apply <a href="Coq.Arith.Lt.html#S_pred">S_pred</a> with 0%nat; apply <a href="Coq.Arith.Lt.html#lt_le_trans">lt_le_trans</a> with (<a href="Coq.Init.Datatypes.html#S">S</a> x)...<br/>
419
apply <a href="Coq.Arith.Lt.html#lt_O_Sn">lt_O_Sn</a>...<br/>
420
<code class="keyword">Qed</code>.<br/>
422
<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'