1
(************************************************************************)
2
(* v * The Coq Proof Assistant / The Coq Development Team *)
3
(* <O___,, * CNRS-Ecole Polytechnique-INRIA Futurs-Universite Paris Sud *)
4
(* \VV/ **************************************************************)
5
(* // * This file is distributed under the terms of the *)
6
(* * GNU Lesser General Public License Version 2.1 *)
7
(************************************************************************)
9
(*i $Id: PSeries_reg.v 10710 2008-03-23 09:24:09Z herbelin $ i*)
12
Require Import Rfunctions.
13
Require Import SeqSeries.
14
Require Import Ranalysis1.
17
Open Local Scope R_scope.
19
Definition Boule (x:R) (r:posreal) (y:R) : Prop := Rabs (y - x) < r.
21
(** Uniform convergence *)
22
Definition CVU (fn:nat -> R -> R) (f:R -> R) (x:R)
27
(forall (n:nat) (y:R),
28
(N <= n)%nat -> Boule x r y -> Rabs (f y - fn n y) < eps).
30
(** Normal convergence *)
31
Definition CVN_r (fn:nat -> R -> R) (r:posreal) : Type :=
34
Un_cv (fun n:nat => sum_f_R0 (fun k:nat => Rabs (An k)) n) l /\
35
(forall (n:nat) (y:R), Boule 0 r y -> Rabs (fn n y) <= An n) } }.
37
Definition CVN_R (fn:nat -> R -> R) : Type := forall r:posreal, CVN_r fn r.
39
Definition SFL (fn:nat -> R -> R)
40
(cv:forall x:R, { l:R | Un_cv (fun N:nat => SP fn N x) l })
41
(y:R) : R := let (a,_) := cv y in a.
43
(** In a complete space, normal convergence implies uniform convergence *)
45
forall (fn:nat -> R -> R)
46
(cv:forall x:R, {l:R | Un_cv (fun N:nat => SP fn N x) l })
47
(r:posreal), CVN_r fn r -> CVU (fun n:nat => SP fn n) (SFL fn cv) 0 r.
49
intros; unfold CVU in |- *; intros.
54
cut (Un_cv (fun n:nat => sum_f_R0 (fun k:nat => Rabs (An k)) n - s) 0).
55
intro; unfold Un_cv in H3.
56
elim (H3 eps H); intros N0 H4.
58
apply Rle_lt_trans with (Rabs (sum_f_R0 (fun k:nat => Rabs (An k)) n - s)).
59
rewrite <- (Rabs_Ropp (sum_f_R0 (fun k:nat => Rabs (An k)) n - s));
60
rewrite Ropp_minus_distr';
61
rewrite (Rabs_right (s - sum_f_R0 (fun k:nat => Rabs (An k)) n)).
63
unfold SFL in |- *; case (cv y); intro.
66
intro; elim H0; intros.
67
rewrite (Rabs_right (An n0)).
69
apply Rle_ge; apply Rle_trans with (Rabs (fn n0 y)).
73
apply Rplus_le_reg_l with (sum_f_R0 (fun k:nat => Rabs (An k)) n).
74
rewrite Rplus_0_r; unfold Rminus in |- *; rewrite (Rplus_comm s);
75
rewrite <- Rplus_assoc; rewrite Rplus_opp_r; rewrite Rplus_0_l;
78
intro; apply Rabs_pos.
79
unfold R_dist in H4; unfold Rminus in H4; rewrite Ropp_0 in H4.
80
assert (H7 := H4 n H5).
81
rewrite Rplus_0_r in H7; apply H7.
82
unfold Un_cv in H1; unfold Un_cv in |- *; intros.
83
elim (H1 _ H3); intros.
85
unfold R_dist in |- *; unfold R_dist in H4.
86
rewrite Rminus_0_r; apply H4; assumption.
89
(** Each limit of a sequence of functions which converges uniformly is continue *)
90
Lemma CVU_continuity :
91
forall (fn:nat -> R -> R) (f:R -> R) (x:R) (r:posreal),
93
(forall (n:nat) (y:R), Boule x r y -> continuity_pt (fn n) y) ->
94
forall y:R, Boule x r y -> continuity_pt f y.
96
intros; unfold continuity_pt in |- *; unfold continue_in in |- *;
97
unfold limit1_in in |- *; unfold limit_in in |- *;
98
simpl in |- *; unfold R_dist in |- *; intros.
102
| unfold Rdiv in |- *; apply Rmult_lt_0_compat;
103
[ assumption | apply Rinv_0_lt_compat; prove_sup0 ] ].
104
elim (H _ H3); intros N0 H4.
105
assert (H5 := H0 N0 y H1).
106
cut (exists del : posreal, (forall h:R, Rabs h < del -> Boule x r (y + h))).
108
elim H6; intros del1 H7.
109
unfold continuity_pt in H5; unfold continue_in in H5; unfold limit1_in in H5;
110
unfold limit_in in H5; simpl in H5; unfold R_dist in H5.
111
elim (H5 _ H3); intros del2 H8.
112
set (del := Rmin del1 del2).
115
unfold del in |- *; unfold Rmin in |- *; case (Rle_dec del1 del2); intro.
116
apply (cond_pos del1).
117
elim H8; intros; assumption.
119
apply Rle_lt_trans with (Rabs (f x0 - fn N0 x0) + Rabs (fn N0 x0 - f y)).
120
replace (f x0 - f y) with (f x0 - fn N0 x0 + (fn N0 x0 - f y));
121
[ apply Rabs_triang | ring ].
122
apply Rle_lt_trans with
123
(Rabs (f x0 - fn N0 x0) + Rabs (fn N0 x0 - fn N0 y) + Rabs (fn N0 y - f y)).
124
rewrite Rplus_assoc; apply Rplus_le_compat_l.
125
replace (fn N0 x0 - f y) with (fn N0 x0 - fn N0 y + (fn N0 y - f y));
126
[ apply Rabs_triang | ring ].
127
replace eps with (eps / 3 + eps / 3 + eps / 3).
128
repeat apply Rplus_lt_compat.
131
replace x0 with (y + (x0 - y)); [ idtac | ring ]; apply H7.
133
apply Rlt_le_trans with del.
135
unfold del in |- *; apply Rmin_l.
139
elim H9; intros; assumption.
140
elim H9; intros; apply Rlt_le_trans with del.
142
unfold del in |- *; apply Rmin_r.
143
rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr'; apply H4.
146
apply Rmult_eq_reg_l with 3.
147
do 2 rewrite Rmult_plus_distr_l; unfold Rdiv in |- *; rewrite <- Rmult_assoc;
148
rewrite Rinv_r_simpl_m.
152
cut (0 < r - Rabs (x - y)).
153
intro; exists (mkposreal _ H6).
154
simpl in |- *; intros.
155
unfold Boule in |- *; replace (y + h - x) with (h + (y - x));
156
[ idtac | ring ]; apply Rle_lt_trans with (Rabs h + Rabs (y - x)).
158
apply Rplus_lt_reg_r with (- Rabs (x - y)).
159
rewrite <- (Rabs_Ropp (y - x)); rewrite Ropp_minus_distr'.
160
replace (- Rabs (x - y) + r) with (r - Rabs (x - y)).
161
replace (- Rabs (x - y) + (Rabs h + Rabs (x - y))) with (Rabs h).
165
unfold Boule in H1; rewrite <- (Rabs_Ropp (x - y)); rewrite Ropp_minus_distr';
166
apply Rplus_lt_reg_r with (Rabs (y - x)).
167
rewrite Rplus_0_r; replace (Rabs (y - x) + (r - Rabs (y - x))) with (pos r);
172
Lemma continuity_pt_finite_SF :
173
forall (fn:nat -> R -> R) (N:nat) (x:R),
174
(forall n:nat, (n <= N)%nat -> continuity_pt (fn n) x) ->
175
continuity_pt (fun y:R => sum_f_R0 (fun k:nat => fn k y) N) x.
177
intros; induction N as [| N HrecN].
178
simpl in |- *; apply (H 0%nat); apply le_n.
180
replace (fun y:R => sum_f_R0 (fun k:nat => fn k y) N + fn (S N) y) with
181
((fun y:R => sum_f_R0 (fun k:nat => fn k y) N) + (fun y:R => fn (S N) y))%F;
182
[ idtac | reflexivity ].
183
apply continuity_pt_plus.
186
apply le_trans with N; [ assumption | apply le_n_Sn ].
187
apply (H (S N)); apply le_n.
190
(** Continuity and normal convergence *)
191
Lemma SFL_continuity_pt :
192
forall (fn:nat -> R -> R)
193
(cv:forall x:R, { l:R | Un_cv (fun N:nat => SP fn N x) l })
196
(forall (n:nat) (y:R), Boule 0 r y -> continuity_pt (fn n) y) ->
197
forall y:R, Boule 0 r y -> continuity_pt (SFL fn cv) y.
199
intros; eapply CVU_continuity.
202
intros; unfold SP in |- *; apply continuity_pt_finite_SF.
208
Lemma SFL_continuity :
209
forall (fn:nat -> R -> R)
210
(cv:forall x:R, { l:R | Un_cv (fun N:nat => SP fn N x) l }),
211
CVN_R fn -> (forall n:nat, continuity (fn n)) -> continuity (SFL fn cv).
213
intros; unfold continuity in |- *; intro.
214
cut (0 < Rabs x + 1);
215
[ intro | apply Rplus_le_lt_0_compat; [ apply Rabs_pos | apply Rlt_0_1 ] ].
216
cut (Boule 0 (mkposreal _ H0) x).
217
intro; eapply SFL_continuity_pt with (mkposreal _ H0).
219
intros; apply (H n y).
221
unfold Boule in |- *; simpl in |- *; rewrite Rminus_0_r;
222
pattern (Rabs x) at 1 in |- *; rewrite <- Rplus_0_r;
223
apply Rplus_lt_compat_l; apply Rlt_0_1.
226
(** As R is complete, normal convergence implies that (fn) is simply-uniformly convergent *)
228
forall fn:nat -> R -> R,
229
CVN_R fn -> forall x:R, { l:R | Un_cv (fun N:nat => SP fn N x) l }.
231
intros; apply R_complete.
232
unfold SP in |- *; set (An := fun N:nat => fn N x).
233
change (Cauchy_crit_series An) in |- *.
235
unfold Cauchy_crit_series in |- *; apply CV_Cauchy.
236
unfold CVN_R in X; cut (0 < Rabs x + 1).
237
intro; assert (H0 := X (mkposreal _ H)).
238
unfold CVN_r in H0; elim H0; intros Bn H1.
239
elim H1; intros l H2.
241
apply Rseries_CV_comp with Bn.
244
unfold An in |- *; apply H4; unfold Boule in |- *; simpl in |- *;
246
pattern (Rabs x) at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l;
249
cut (forall n:nat, 0 <= Bn n).
250
intro; unfold Un_cv in H3; unfold Un_cv in |- *; intros.
251
elim (H3 _ H6); intros.
253
replace (sum_f_R0 Bn n) with (sum_f_R0 (fun k:nat => Rabs (Bn k)) n).
254
apply H7; assumption.
255
apply sum_eq; intros; apply Rabs_right; apply Rle_ge; apply H5.
256
intro; apply Rle_trans with (Rabs (An n)).
258
unfold An in |- *; apply H4; unfold Boule in |- *; simpl in |- *;
259
rewrite Rminus_0_r; pattern (Rabs x) at 1 in |- *;
260
rewrite <- Rplus_0_r; apply Rplus_lt_compat_l; apply Rlt_0_1.
261
apply Rplus_le_lt_0_compat; [ apply Rabs_pos | apply Rlt_0_1 ].