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: Rsigma.v 9454 2006-12-15 15:30:59Z bgregoir $ i*)
12
Require Import Rfunctions.
13
Require Import Rseries.
14
Require Import PartSum.
15
Open Local Scope R_scope.
17
Set Implicit Arguments.
21
Variable f : nat -> R.
23
Definition sigma (low high:nat) : R :=
24
sum_f_R0 (fun k:nat => f (low + k)) (high - low).
27
forall low high k:nat,
29
(k < high)%nat -> sigma low high = sigma low k + sigma (S k) high.
31
intros; induction k as [| k Hreck].
33
intro; rewrite H1; unfold sigma in |- *; rewrite <- minus_n_n;
34
rewrite <- minus_n_O; simpl in |- *; replace (high - 1)%nat with (pred high).
35
apply (decomp_sum (fun k:nat => f k)).
38
inversion H; reflexivity.
39
cut ((low <= k)%nat \/ low = S k).
40
intro; elim H1; intro.
41
replace (sigma low (S k)) with (sigma low k + f (S k)).
43
replace (f (S k) + sigma (S (S k)) high) with (sigma (S k) high).
46
apply lt_trans with (S k); [ apply lt_n_Sn | assumption ].
47
unfold sigma in |- *; replace (high - S (S k))%nat with (pred (high - S k)).
48
pattern (S k) at 3 in |- *; replace (S k) with (S k + 0)%nat;
50
replace (sum_f_R0 (fun k0:nat => f (S (S k) + k0)) (pred (high - S k))) with
51
(sum_f_R0 (fun k0:nat => f (S k + S k0)) (pred (high - S k))).
52
apply (decomp_sum (fun i:nat => f (S k + i))).
53
apply lt_minus_O_lt; assumption.
54
apply sum_eq; intros; replace (S k + S i)%nat with (S (S k) + i)%nat.
57
replace (high - S (S k))%nat with (high - S k - 1)%nat.
60
unfold sigma in |- *; replace (S k - low)%nat with (S (k - low)).
61
pattern (S k) at 1 in |- *; replace (S k) with (low + S (k - low))%nat.
62
symmetry in |- *; apply (tech5 (fun i:nat => f (low + i))).
65
rewrite <- H2; unfold sigma in |- *; rewrite <- minus_n_n; simpl in |- *;
66
replace (high - S low)%nat with (pred (high - low)).
67
replace (sum_f_R0 (fun k0:nat => f (S (low + k0))) (pred (high - low))) with
68
(sum_f_R0 (fun k0:nat => f (low + S k0)) (pred (high - low))).
69
apply (decomp_sum (fun k0:nat => f (low + k0))).
71
apply le_lt_trans with (S k); [ rewrite H2; apply le_n | assumption ].
72
apply sum_eq; intros; replace (S (low + i)) with (low + S i)%nat.
76
inversion H; [ right; reflexivity | left; assumption ].
80
forall low high k:nat,
82
(k < high)%nat -> sigma low high - sigma low k = sigma (S k) high.
84
intros low high k H1 H2; symmetry in |- *; rewrite (sigma_split H1 H2); ring.
87
Theorem sigma_diff_neg :
88
forall low high k:nat,
90
(k < high)%nat -> sigma low k - sigma low high = - sigma (S k) high.
92
intros low high k H1 H2; rewrite (sigma_split H1 H2); ring.
97
(low < high)%nat -> sigma low high = f low + sigma (S low) high.
99
intros low high H1; generalize (lt_le_S low high H1); intro H2;
100
generalize (lt_le_weak low high H1); intro H3;
101
replace (f low) with (sigma low low).
105
unfold sigma in |- *; rewrite <- minus_n_n.
107
replace (low + 0)%nat with low; [ reflexivity | ring ].
112
(low < high)%nat -> sigma low high = f high + sigma low (pred high).
114
intros low high H1; generalize (lt_le_S low high H1); intro H2;
115
generalize (lt_le_weak low high H1); intro H3;
116
replace (f high) with (sigma high high).
117
rewrite Rplus_comm; cut (high = S (pred high)).
118
intro; pattern high at 3 in |- *; rewrite H.
120
apply le_S_n; rewrite <- H; apply lt_le_S; assumption.
121
apply lt_pred_n_n; apply le_lt_trans with low; [ apply le_O_n | assumption ].
122
apply S_pred with 0%nat; apply le_lt_trans with low;
123
[ apply le_O_n | assumption ].
124
unfold sigma in |- *; rewrite <- minus_n_n; simpl in |- *;
125
replace (high + 0)%nat with high; [ reflexivity | ring ].
128
Theorem sigma_eq_arg : forall low:nat, sigma low low = f low.
130
intro; unfold sigma in |- *; rewrite <- minus_n_n.
131
simpl in |- *; replace (low + 0)%nat with low; [ reflexivity | ring ].