summaryrefslogtreecommitdiff
path: root/theories/Reals/RiemannInt.v
diff options
context:
space:
mode:
Diffstat (limited to 'theories/Reals/RiemannInt.v')
-rw-r--r--theories/Reals/RiemannInt.v6054
1 files changed, 3054 insertions, 3000 deletions
diff --git a/theories/Reals/RiemannInt.v b/theories/Reals/RiemannInt.v
index 79cb7797..1cba821e 100644
--- a/theories/Reals/RiemannInt.v
+++ b/theories/Reals/RiemannInt.v
@@ -5,8 +5,8 @@
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(************************************************************************)
-
-(*i $Id: RiemannInt.v 7223 2005-07-13 23:43:54Z herbelin $ i*)
+
+(*i $Id: RiemannInt.v 9245 2006-10-17 12:53:34Z notin $ i*)
Require Import Rfunctions.
Require Import SeqSeries.
@@ -20,3244 +20,3298 @@ Require Import Max. Open Local Scope R_scope.
Set Implicit Arguments.
(********************************************)
-(* Riemann's Integral *)
+(** Riemann's Integral *)
(********************************************)
Definition Riemann_integrable (f:R -> R) (a b:R) : Type :=
forall eps:posreal,
sigT
- (fun phi:StepFun a b =>
- sigT
- (fun psi:StepFun a b =>
- (forall t:R,
- Rmin a b <= t <= Rmax a b -> Rabs (f t - phi t) <= psi t) /\
- Rabs (RiemannInt_SF psi) < eps)).
+ (fun phi:StepFun a b =>
+ sigT
+ (fun psi:StepFun a b =>
+ (forall t:R,
+ Rmin a b <= t <= Rmax a b -> Rabs (f t - phi t) <= psi t) /\
+ Rabs (RiemannInt_SF psi) < eps)).
Definition phi_sequence (un:nat -> posreal) (f:R -> R)
(a b:R) (pr:Riemann_integrable f a b) (n:nat) :=
projT1 (pr (un n)).
Lemma phi_sequence_prop :
- forall (un:nat -> posreal) (f:R -> R) (a b:R) (pr:Riemann_integrable f a b)
- (N:nat),
- sigT
- (fun psi:StepFun a b =>
- (forall t:R,
- Rmin a b <= t <= Rmax a b ->
- Rabs (f t - phi_sequence un pr N t) <= psi t) /\
- Rabs (RiemannInt_SF psi) < un N).
-intros; apply (projT2 (pr (un N))).
+ forall (un:nat -> posreal) (f:R -> R) (a b:R) (pr:Riemann_integrable f a b)
+ (N:nat),
+ sigT
+ (fun psi:StepFun a b =>
+ (forall t:R,
+ Rmin a b <= t <= Rmax a b ->
+ Rabs (f t - phi_sequence un pr N t) <= psi t) /\
+ Rabs (RiemannInt_SF psi) < un N).
+Proof.
+ intros; apply (projT2 (pr (un N))).
Qed.
Lemma RiemannInt_P1 :
- forall (f:R -> R) (a b:R),
- Riemann_integrable f a b -> Riemann_integrable f b a.
-unfold Riemann_integrable in |- *; intros; elim (X eps); clear X; intros;
- elim p; clear p; intros; apply existT with (mkStepFun (StepFun_P6 (pre x)));
- apply existT with (mkStepFun (StepFun_P6 (pre x0)));
- elim p; clear p; intros; split.
-intros; apply (H t); elim H1; clear H1; intros; split;
- [ apply Rle_trans with (Rmin b a); try assumption; right;
- unfold Rmin in |- *
- | apply Rle_trans with (Rmax b a); try assumption; right;
- unfold Rmax in |- * ];
- (case (Rle_dec a b); case (Rle_dec b a); intros;
- try reflexivity || apply Rle_antisym;
- [ assumption | assumption | auto with real | auto with real ]).
-generalize H0; unfold RiemannInt_SF in |- *; case (Rle_dec a b);
- case (Rle_dec b a); intros;
- (replace
- (Int_SF (subdivision_val (mkStepFun (StepFun_P6 (pre x0))))
- (subdivision (mkStepFun (StepFun_P6 (pre x0))))) with
- (Int_SF (subdivision_val x0) (subdivision x0));
- [ idtac
- | apply StepFun_P17 with (fe x0) a b;
- [ apply StepFun_P1
- | apply StepFun_P2;
- apply (StepFun_P1 (mkStepFun (StepFun_P6 (pre x0)))) ] ]).
-apply H1.
-rewrite Rabs_Ropp; apply H1.
-rewrite Rabs_Ropp in H1; apply H1.
-apply H1.
+ forall (f:R -> R) (a b:R),
+ Riemann_integrable f a b -> Riemann_integrable f b a.
+Proof.
+ unfold Riemann_integrable in |- *; intros; elim (X eps); clear X; intros;
+ elim p; clear p; intros; apply existT with (mkStepFun (StepFun_P6 (pre x)));
+ apply existT with (mkStepFun (StepFun_P6 (pre x0)));
+ elim p; clear p; intros; split.
+ intros; apply (H t); elim H1; clear H1; intros; split;
+ [ apply Rle_trans with (Rmin b a); try assumption; right;
+ unfold Rmin in |- *
+ | apply Rle_trans with (Rmax b a); try assumption; right;
+ unfold Rmax in |- * ];
+ (case (Rle_dec a b); case (Rle_dec b a); intros;
+ try reflexivity || apply Rle_antisym;
+ [ assumption | assumption | auto with real | auto with real ]).
+ generalize H0; unfold RiemannInt_SF in |- *; case (Rle_dec a b);
+ case (Rle_dec b a); intros;
+ (replace
+ (Int_SF (subdivision_val (mkStepFun (StepFun_P6 (pre x0))))
+ (subdivision (mkStepFun (StepFun_P6 (pre x0))))) with
+ (Int_SF (subdivision_val x0) (subdivision x0));
+ [ idtac
+ | apply StepFun_P17 with (fe x0) a b;
+ [ apply StepFun_P1
+ | apply StepFun_P2;
+ apply (StepFun_P1 (mkStepFun (StepFun_P6 (pre x0)))) ] ]).
+ apply H1.
+ rewrite Rabs_Ropp; apply H1.
+ rewrite Rabs_Ropp in H1; apply H1.
+ apply H1.
Qed.
Lemma RiemannInt_P2 :
- forall (f:R -> R) (a b:R) (un:nat -> posreal) (vn wn:nat -> StepFun a b),
- Un_cv un 0 ->
- a <= b ->
- (forall n:nat,
+ forall (f:R -> R) (a b:R) (un:nat -> posreal) (vn wn:nat -> StepFun a b),
+ Un_cv un 0 ->
+ a <= b ->
+ (forall n:nat,
(forall t:R, Rmin a b <= t <= Rmax a b -> Rabs (f t - vn n t) <= wn n t) /\
Rabs (RiemannInt_SF (wn n)) < un n) ->
- sigT (fun l:R => Un_cv (fun N:nat => RiemannInt_SF (vn N)) l).
-intros; apply R_complete; unfold Un_cv in H; unfold Cauchy_crit in |- *;
- intros; assert (H3 : 0 < eps / 2).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H _ H3); intros N0 H4; exists N0; intros; unfold R_dist in |- *;
- unfold R_dist in H4; elim (H1 n); elim (H1 m); intros;
- replace (RiemannInt_SF (vn n) - RiemannInt_SF (vn m)) with
- (RiemannInt_SF (vn n) + -1 * RiemannInt_SF (vn m));
- [ idtac | ring ]; rewrite <- StepFun_P30;
- apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (vn n) (vn m)))))).
-apply StepFun_P34; assumption.
-apply Rle_lt_trans with
- (RiemannInt_SF (mkStepFun (StepFun_P28 1 (wn n) (wn m)))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *;
- apply Rle_trans with (Rabs (vn n x - f x) + Rabs (f x - vn m x)).
-replace (vn n x + -1 * vn m x) with (vn n x - f x + (f x - vn m x));
- [ apply Rabs_triang | ring ].
-assert (H12 : Rmin a b = a).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-assert (H13 : Rmax a b = b).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-rewrite <- H12 in H11; pattern b at 2 in H11; rewrite <- H13 in H11;
- rewrite Rmult_1_l; apply Rplus_le_compat.
-rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H9.
-elim H11; intros; split; left; assumption.
-apply H7.
-elim H11; intros; split; left; assumption.
-rewrite StepFun_P30; rewrite Rmult_1_l; apply Rlt_trans with (un n + un m).
-apply Rle_lt_trans with
- (Rabs (RiemannInt_SF (wn n)) + Rabs (RiemannInt_SF (wn m))).
-apply Rplus_le_compat; apply RRle_abs.
-apply Rplus_lt_compat; assumption.
-apply Rle_lt_trans with (Rabs (un n) + Rabs (un m)).
-apply Rplus_le_compat; apply RRle_abs.
-replace (pos (un n)) with (un n - 0); [ idtac | ring ];
- replace (pos (un m)) with (un m - 0); [ idtac | ring ];
- rewrite (double_var eps); apply Rplus_lt_compat; apply H4;
- assumption.
+ sigT (fun l:R => Un_cv (fun N:nat => RiemannInt_SF (vn N)) l).
+Proof.
+ intros; apply R_complete; unfold Un_cv in H; unfold Cauchy_crit in |- *;
+ intros; assert (H3 : 0 < eps / 2).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H _ H3); intros N0 H4; exists N0; intros; unfold R_dist in |- *;
+ unfold R_dist in H4; elim (H1 n); elim (H1 m); intros;
+ replace (RiemannInt_SF (vn n) - RiemannInt_SF (vn m)) with
+ (RiemannInt_SF (vn n) + -1 * RiemannInt_SF (vn m));
+ [ idtac | ring ]; rewrite <- StepFun_P30;
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (vn n) (vn m)))))).
+ apply StepFun_P34; assumption.
+ apply Rle_lt_trans with
+ (RiemannInt_SF (mkStepFun (StepFun_P28 1 (wn n) (wn m)))).
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *;
+ apply Rle_trans with (Rabs (vn n x - f x) + Rabs (f x - vn m x)).
+ replace (vn n x + -1 * vn m x) with (vn n x - f x + (f x - vn m x));
+ [ apply Rabs_triang | ring ].
+ assert (H12 : Rmin a b = a).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ assert (H13 : Rmax a b = b).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ rewrite <- H12 in H11; pattern b at 2 in H11; rewrite <- H13 in H11;
+ rewrite Rmult_1_l; apply Rplus_le_compat.
+ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H9.
+ elim H11; intros; split; left; assumption.
+ apply H7.
+ elim H11; intros; split; left; assumption.
+ rewrite StepFun_P30; rewrite Rmult_1_l; apply Rlt_trans with (un n + un m).
+ apply Rle_lt_trans with
+ (Rabs (RiemannInt_SF (wn n)) + Rabs (RiemannInt_SF (wn m))).
+ apply Rplus_le_compat; apply RRle_abs.
+ apply Rplus_lt_compat; assumption.
+ apply Rle_lt_trans with (Rabs (un n) + Rabs (un m)).
+ apply Rplus_le_compat; apply RRle_abs.
+ replace (pos (un n)) with (un n - 0); [ idtac | ring ];
+ replace (pos (un m)) with (un m - 0); [ idtac | ring ];
+ rewrite (double_var eps); apply Rplus_lt_compat; apply H4;
+ assumption.
Qed.
Lemma RiemannInt_P3 :
- forall (f:R -> R) (a b:R) (un:nat -> posreal) (vn wn:nat -> StepFun a b),
- Un_cv un 0 ->
- (forall n:nat,
+ forall (f:R -> R) (a b:R) (un:nat -> posreal) (vn wn:nat -> StepFun a b),
+ Un_cv un 0 ->
+ (forall n:nat,
(forall t:R, Rmin a b <= t <= Rmax a b -> Rabs (f t - vn n t) <= wn n t) /\
Rabs (RiemannInt_SF (wn n)) < un n) ->
- sigT (fun l:R => Un_cv (fun N:nat => RiemannInt_SF (vn N)) l).
-intros; case (Rle_dec a b); intro.
-apply RiemannInt_P2 with f un wn; assumption.
-assert (H1 : b <= a); auto with real.
-set (vn' := fun n:nat => mkStepFun (StepFun_P6 (pre (vn n))));
- set (wn' := fun n:nat => mkStepFun (StepFun_P6 (pre (wn n))));
- assert
- (H2 :
- forall n:nat,
- (forall t:R,
- Rmin b a <= t <= Rmax b a -> Rabs (f t - vn' n t) <= wn' n t) /\
- Rabs (RiemannInt_SF (wn' n)) < un n).
-intro; elim (H0 n0); intros; split.
-intros; apply (H2 t); elim H4; clear H4; intros; split;
- [ apply Rle_trans with (Rmin b a); try assumption; right;
- unfold Rmin in |- *
- | apply Rle_trans with (Rmax b a); try assumption; right;
- unfold Rmax in |- * ];
- (case (Rle_dec a b); case (Rle_dec b a); intros;
- try reflexivity || apply Rle_antisym;
- [ assumption | assumption | auto with real | auto with real ]).
-generalize H3; unfold RiemannInt_SF in |- *; case (Rle_dec a b);
- case (Rle_dec b a); unfold wn' in |- *; intros;
- (replace
- (Int_SF (subdivision_val (mkStepFun (StepFun_P6 (pre (wn n0)))))
- (subdivision (mkStepFun (StepFun_P6 (pre (wn n0)))))) with
- (Int_SF (subdivision_val (wn n0)) (subdivision (wn n0)));
- [ idtac
- | apply StepFun_P17 with (fe (wn n0)) a b;
- [ apply StepFun_P1
- | apply StepFun_P2;
- apply (StepFun_P1 (mkStepFun (StepFun_P6 (pre (wn n0))))) ] ]).
-apply H4.
-rewrite Rabs_Ropp; apply H4.
-rewrite Rabs_Ropp in H4; apply H4.
-apply H4.
-assert (H3 := RiemannInt_P2 _ _ _ _ H H1 H2); elim H3; intros;
- apply existT with (- x); unfold Un_cv in |- *; unfold Un_cv in p;
- intros; elim (p _ H4); intros; exists x0; intros;
- generalize (H5 _ H6); unfold R_dist, RiemannInt_SF in |- *;
- case (Rle_dec b a); case (Rle_dec a b); intros.
-elim n; assumption.
-unfold vn' in H7;
- replace (Int_SF (subdivision_val (vn n0)) (subdivision (vn n0))) with
- (Int_SF (subdivision_val (mkStepFun (StepFun_P6 (pre (vn n0)))))
- (subdivision (mkStepFun (StepFun_P6 (pre (vn n0))))));
- [ unfold Rminus in |- *; rewrite Ropp_involutive; rewrite <- Rabs_Ropp;
- rewrite Ropp_plus_distr; rewrite Ropp_involutive;
- apply H7
- | symmetry in |- *; apply StepFun_P17 with (fe (vn n0)) a b;
- [ apply StepFun_P1
- | apply StepFun_P2;
- apply (StepFun_P1 (mkStepFun (StepFun_P6 (pre (vn n0))))) ] ].
-elim n1; assumption.
-elim n2; assumption.
+ sigT (fun l:R => Un_cv (fun N:nat => RiemannInt_SF (vn N)) l).
+Proof.
+ intros; case (Rle_dec a b); intro.
+ apply RiemannInt_P2 with f un wn; assumption.
+ assert (H1 : b <= a); auto with real.
+ set (vn' := fun n:nat => mkStepFun (StepFun_P6 (pre (vn n))));
+ set (wn' := fun n:nat => mkStepFun (StepFun_P6 (pre (wn n))));
+ assert
+ (H2 :
+ forall n:nat,
+ (forall t:R,
+ Rmin b a <= t <= Rmax b a -> Rabs (f t - vn' n t) <= wn' n t) /\
+ Rabs (RiemannInt_SF (wn' n)) < un n).
+ intro; elim (H0 n0); intros; split.
+ intros; apply (H2 t); elim H4; clear H4; intros; split;
+ [ apply Rle_trans with (Rmin b a); try assumption; right;
+ unfold Rmin in |- *
+ | apply Rle_trans with (Rmax b a); try assumption; right;
+ unfold Rmax in |- * ];
+ (case (Rle_dec a b); case (Rle_dec b a); intros;
+ try reflexivity || apply Rle_antisym;
+ [ assumption | assumption | auto with real | auto with real ]).
+ generalize H3; unfold RiemannInt_SF in |- *; case (Rle_dec a b);
+ case (Rle_dec b a); unfold wn' in |- *; intros;
+ (replace
+ (Int_SF (subdivision_val (mkStepFun (StepFun_P6 (pre (wn n0)))))
+ (subdivision (mkStepFun (StepFun_P6 (pre (wn n0)))))) with
+ (Int_SF (subdivision_val (wn n0)) (subdivision (wn n0)));
+ [ idtac
+ | apply StepFun_P17 with (fe (wn n0)) a b;
+ [ apply StepFun_P1
+ | apply StepFun_P2;
+ apply (StepFun_P1 (mkStepFun (StepFun_P6 (pre (wn n0))))) ] ]).
+ apply H4.
+ rewrite Rabs_Ropp; apply H4.
+ rewrite Rabs_Ropp in H4; apply H4.
+ apply H4.
+ assert (H3 := RiemannInt_P2 _ _ _ _ H H1 H2); elim H3; intros;
+ apply existT with (- x); unfold Un_cv in |- *; unfold Un_cv in p;
+ intros; elim (p _ H4); intros; exists x0; intros;
+ generalize (H5 _ H6); unfold R_dist, RiemannInt_SF in |- *;
+ case (Rle_dec b a); case (Rle_dec a b); intros.
+ elim n; assumption.
+ unfold vn' in H7;
+ replace (Int_SF (subdivision_val (vn n0)) (subdivision (vn n0))) with
+ (Int_SF (subdivision_val (mkStepFun (StepFun_P6 (pre (vn n0)))))
+ (subdivision (mkStepFun (StepFun_P6 (pre (vn n0))))));
+ [ unfold Rminus in |- *; rewrite Ropp_involutive; rewrite <- Rabs_Ropp;
+ rewrite Ropp_plus_distr; rewrite Ropp_involutive;
+ apply H7
+ | symmetry in |- *; apply StepFun_P17 with (fe (vn n0)) a b;
+ [ apply StepFun_P1
+ | apply StepFun_P2;
+ apply (StepFun_P1 (mkStepFun (StepFun_P6 (pre (vn n0))))) ] ].
+ elim n1; assumption.
+ elim n2; assumption.
Qed.
Lemma RiemannInt_exists :
- forall (f:R -> R) (a b:R) (pr:Riemann_integrable f a b)
- (un:nat -> posreal),
- Un_cv un 0 ->
- sigT
- (fun l:R => Un_cv (fun N:nat => RiemannInt_SF (phi_sequence un pr N)) l).
-intros f; intros;
- apply RiemannInt_P3 with
- f un (fun n:nat => projT1 (phi_sequence_prop un pr n));
- [ apply H | intro; apply (projT2 (phi_sequence_prop un pr n)) ].
+ forall (f:R -> R) (a b:R) (pr:Riemann_integrable f a b)
+ (un:nat -> posreal),
+ Un_cv un 0 ->
+ sigT
+ (fun l:R => Un_cv (fun N:nat => RiemannInt_SF (phi_sequence un pr N)) l).
+Proof.
+ intros f; intros;
+ apply RiemannInt_P3 with
+ f un (fun n:nat => projT1 (phi_sequence_prop un pr n));
+ [ apply H | intro; apply (projT2 (phi_sequence_prop un pr n)) ].
Qed.
Lemma RiemannInt_P4 :
- forall (f:R -> R) (a b l:R) (pr1 pr2:Riemann_integrable f a b)
- (un vn:nat -> posreal),
- Un_cv un 0 ->
- Un_cv vn 0 ->
- Un_cv (fun N:nat => RiemannInt_SF (phi_sequence un pr1 N)) l ->
- Un_cv (fun N:nat => RiemannInt_SF (phi_sequence vn pr2 N)) l.
-unfold Un_cv in |- *; unfold R_dist in |- *; intros f; intros;
- assert (H3 : 0 < eps / 3).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H _ H3); clear H; intros N0 H; elim (H0 _ H3); clear H0; intros N1 H0;
- elim (H1 _ H3); clear H1; intros N2 H1; set (N := max (max N0 N1) N2);
- exists N; intros;
- apply Rle_lt_trans with
- (Rabs
- (RiemannInt_SF (phi_sequence vn pr2 n) -
- RiemannInt_SF (phi_sequence un pr1 n)) +
- Rabs (RiemannInt_SF (phi_sequence un pr1 n) - l)).
-replace (RiemannInt_SF (phi_sequence vn pr2 n) - l) with
- (RiemannInt_SF (phi_sequence vn pr2 n) -
- RiemannInt_SF (phi_sequence un pr1 n) +
- (RiemannInt_SF (phi_sequence un pr1 n) - l)); [ apply Rabs_triang | ring ].
-replace eps with (2 * (eps / 3) + eps / 3).
-apply Rplus_lt_compat.
-elim (phi_sequence_prop vn pr2 n); intros psi_vn H5;
- elim (phi_sequence_prop un pr1 n); intros psi_un H6;
- replace
+ forall (f:R -> R) (a b l:R) (pr1 pr2:Riemann_integrable f a b)
+ (un vn:nat -> posreal),
+ Un_cv un 0 ->
+ Un_cv vn 0 ->
+ Un_cv (fun N:nat => RiemannInt_SF (phi_sequence un pr1 N)) l ->
+ Un_cv (fun N:nat => RiemannInt_SF (phi_sequence vn pr2 N)) l.
+Proof.
+ unfold Un_cv in |- *; unfold R_dist in |- *; intros f; intros;
+ assert (H3 : 0 < eps / 3).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H _ H3); clear H; intros N0 H; elim (H0 _ H3); clear H0; intros N1 H0;
+ elim (H1 _ H3); clear H1; intros N2 H1; set (N := max (max N0 N1) N2);
+ exists N; intros;
+ apply Rle_lt_trans with
+ (Rabs
+ (RiemannInt_SF (phi_sequence vn pr2 n) -
+ RiemannInt_SF (phi_sequence un pr1 n)) +
+ Rabs (RiemannInt_SF (phi_sequence un pr1 n) - l)).
+ replace (RiemannInt_SF (phi_sequence vn pr2 n) - l) with
(RiemannInt_SF (phi_sequence vn pr2 n) -
- RiemannInt_SF (phi_sequence un pr1 n)) with
- (RiemannInt_SF (phi_sequence vn pr2 n) +
- -1 * RiemannInt_SF (phi_sequence un pr1 n)); [ idtac | ring ];
- rewrite <- StepFun_P30.
-case (Rle_dec a b); intro.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P32
+ RiemannInt_SF (phi_sequence un pr1 n) +
+ (RiemannInt_SF (phi_sequence un pr1 n) - l)); [ apply Rabs_triang | ring ].
+ replace eps with (2 * (eps / 3) + eps / 3).
+ apply Rplus_lt_compat.
+ elim (phi_sequence_prop vn pr2 n); intros psi_vn H5;
+ elim (phi_sequence_prop un pr1 n); intros psi_un H6;
+ replace
+ (RiemannInt_SF (phi_sequence vn pr2 n) -
+ RiemannInt_SF (phi_sequence un pr1 n)) with
+ (RiemannInt_SF (phi_sequence vn pr2 n) +
+ -1 * RiemannInt_SF (phi_sequence un pr1 n)); [ idtac | ring ];
+ rewrite <- StepFun_P30.
+ case (Rle_dec a b); intro.
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32
(mkStepFun
- (StepFun_P28 (-1) (phi_sequence vn pr2 n)
- (phi_sequence un pr1 n)))))).
-apply StepFun_P34; assumption.
-apply Rle_lt_trans with
- (RiemannInt_SF (mkStepFun (StepFun_P28 1 psi_un psi_vn))).
-apply StepFun_P37; try assumption; intros; simpl in |- *; rewrite Rmult_1_l;
- apply Rle_trans with
- (Rabs (phi_sequence vn pr2 n x - f x) +
- Rabs (f x - phi_sequence un pr1 n x)).
-replace (phi_sequence vn pr2 n x + -1 * phi_sequence un pr1 n x) with
- (phi_sequence vn pr2 n x - f x + (f x - phi_sequence un pr1 n x));
- [ apply Rabs_triang | ring ].
-assert (H10 : Rmin a b = a).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-assert (H11 : Rmax a b = b).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-rewrite (Rplus_comm (psi_un x)); apply Rplus_le_compat.
-rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; elim H5; intros; apply H8.
-rewrite H10; rewrite H11; elim H7; intros; split; left; assumption.
-elim H6; intros; apply H8.
-rewrite H10; rewrite H11; elim H7; intros; split; left; assumption.
-rewrite StepFun_P30; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat.
-apply Rlt_trans with (pos (un n)).
-elim H6; intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF psi_un)).
-apply RRle_abs.
-assumption.
-replace (pos (un n)) with (Rabs (un n - 0));
- [ apply H; unfold ge in |- *; apply le_trans with N; try assumption;
+ (StepFun_P28 (-1) (phi_sequence vn pr2 n)
+ (phi_sequence un pr1 n)))))).
+ apply StepFun_P34; assumption.
+ apply Rle_lt_trans with
+ (RiemannInt_SF (mkStepFun (StepFun_P28 1 psi_un psi_vn))).
+ apply StepFun_P37; try assumption; intros; simpl in |- *; rewrite Rmult_1_l;
+ apply Rle_trans with
+ (Rabs (phi_sequence vn pr2 n x - f x) +
+ Rabs (f x - phi_sequence un pr1 n x)).
+ replace (phi_sequence vn pr2 n x + -1 * phi_sequence un pr1 n x) with
+ (phi_sequence vn pr2 n x - f x + (f x - phi_sequence un pr1 n x));
+ [ apply Rabs_triang | ring ].
+ assert (H10 : Rmin a b = a).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ assert (H11 : Rmax a b = b).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ rewrite (Rplus_comm (psi_un x)); apply Rplus_le_compat.
+ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; elim H5; intros; apply H8.
+ rewrite H10; rewrite H11; elim H7; intros; split; left; assumption.
+ elim H6; intros; apply H8.
+ rewrite H10; rewrite H11; elim H7; intros; split; left; assumption.
+ rewrite StepFun_P30; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat.
+ apply Rlt_trans with (pos (un n)).
+ elim H6; intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF psi_un)).
+ apply RRle_abs.
+ assumption.
+ replace (pos (un n)) with (Rabs (un n - 0));
+ [ apply H; unfold ge in |- *; apply le_trans with N; try assumption;
unfold N in |- *; apply le_trans with (max N0 N1);
- apply le_max_l
- | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
- apply Rle_ge; left; apply (cond_pos (un n)) ].
-apply Rlt_trans with (pos (vn n)).
-elim H5; intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF psi_vn)).
-apply RRle_abs; assumption.
-assumption.
-replace (pos (vn n)) with (Rabs (vn n - 0));
- [ apply H0; unfold ge in |- *; apply le_trans with N; try assumption;
+ apply le_max_l
+ | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
+ apply Rle_ge; left; apply (cond_pos (un n)) ].
+ apply Rlt_trans with (pos (vn n)).
+ elim H5; intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF psi_vn)).
+ apply RRle_abs; assumption.
+ assumption.
+ replace (pos (vn n)) with (Rabs (vn n - 0));
+ [ apply H0; unfold ge in |- *; apply le_trans with N; try assumption;
unfold N in |- *; apply le_trans with (max N0 N1);
- [ apply le_max_r | apply le_max_l ]
- | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
- apply Rle_ge; left; apply (cond_pos (vn n)) ].
-rewrite StepFun_P39; rewrite Rabs_Ropp;
- apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P32
- (mkStepFun
+ [ apply le_max_r | apply le_max_l ]
+ | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
+ apply Rle_ge; left; apply (cond_pos (vn n)) ].
+ rewrite StepFun_P39; rewrite Rabs_Ropp;
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32
+ (mkStepFun
(StepFun_P6
- (pre
- (mkStepFun
- (StepFun_P28 (-1) (phi_sequence vn pr2 n)
- (phi_sequence un pr1 n))))))))).
-apply StepFun_P34; try auto with real.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun (StepFun_P6 (pre (mkStepFun (StepFun_P28 1 psi_vn psi_un)))))).
-apply StepFun_P37.
-auto with real.
-intros; simpl in |- *; rewrite Rmult_1_l;
- apply Rle_trans with
- (Rabs (phi_sequence vn pr2 n x - f x) +
- Rabs (f x - phi_sequence un pr1 n x)).
-replace (phi_sequence vn pr2 n x + -1 * phi_sequence un pr1 n x) with
- (phi_sequence vn pr2 n x - f x + (f x - phi_sequence un pr1 n x));
- [ apply Rabs_triang | ring ].
-assert (H10 : Rmin a b = b).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ elim n0; assumption | reflexivity ].
-assert (H11 : Rmax a b = a).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ elim n0; assumption | reflexivity ].
-apply Rplus_le_compat.
-rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; elim H5; intros; apply H8.
-rewrite H10; rewrite H11; elim H7; intros; split; left; assumption.
-elim H6; intros; apply H8.
-rewrite H10; rewrite H11; elim H7; intros; split; left; assumption.
-rewrite <-
- (Ropp_involutive
+ (pre
+ (mkStepFun
+ (StepFun_P28 (-1) (phi_sequence vn pr2 n)
+ (phi_sequence un pr1 n))))))))).
+ apply StepFun_P34; try auto with real.
+ apply Rle_lt_trans with
(RiemannInt_SF
- (mkStepFun
+ (mkStepFun (StepFun_P6 (pre (mkStepFun (StepFun_P28 1 psi_vn psi_un)))))).
+ apply StepFun_P37.
+ auto with real.
+ intros; simpl in |- *; rewrite Rmult_1_l;
+ apply Rle_trans with
+ (Rabs (phi_sequence vn pr2 n x - f x) +
+ Rabs (f x - phi_sequence un pr1 n x)).
+ replace (phi_sequence vn pr2 n x + -1 * phi_sequence un pr1 n x) with
+ (phi_sequence vn pr2 n x - f x + (f x - phi_sequence un pr1 n x));
+ [ apply Rabs_triang | ring ].
+ assert (H10 : Rmin a b = b).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ elim n0; assumption | reflexivity ].
+ assert (H11 : Rmax a b = a).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ elim n0; assumption | reflexivity ].
+ apply Rplus_le_compat.
+ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; elim H5; intros; apply H8.
+ rewrite H10; rewrite H11; elim H7; intros; split; left; assumption.
+ elim H6; intros; apply H8.
+ rewrite H10; rewrite H11; elim H7; intros; split; left; assumption.
+ rewrite <-
+ (Ropp_involutive
+ (RiemannInt_SF
+ (mkStepFun
(StepFun_P6 (pre (mkStepFun (StepFun_P28 1 psi_vn psi_un)))))))
- ; rewrite <- StepFun_P39; rewrite StepFun_P30; rewrite Rmult_1_l;
- rewrite double; rewrite Ropp_plus_distr; apply Rplus_lt_compat.
-apply Rlt_trans with (pos (vn n)).
-elim H5; intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF psi_vn)).
-rewrite <- Rabs_Ropp; apply RRle_abs.
-assumption.
-replace (pos (vn n)) with (Rabs (vn n - 0));
- [ apply H0; unfold ge in |- *; apply le_trans with N; try assumption;
+ ; rewrite <- StepFun_P39; rewrite StepFun_P30; rewrite Rmult_1_l;
+ rewrite double; rewrite Ropp_plus_distr; apply Rplus_lt_compat.
+ apply Rlt_trans with (pos (vn n)).
+ elim H5; intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF psi_vn)).
+ rewrite <- Rabs_Ropp; apply RRle_abs.
+ assumption.
+ replace (pos (vn n)) with (Rabs (vn n - 0));
+ [ apply H0; unfold ge in |- *; apply le_trans with N; try assumption;
unfold N in |- *; apply le_trans with (max N0 N1);
- [ apply le_max_r | apply le_max_l ]
- | unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
- rewrite Rplus_0_r; apply Rabs_right; apply Rle_ge;
- left; apply (cond_pos (vn n)) ].
-apply Rlt_trans with (pos (un n)).
-elim H6; intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF psi_un)).
-rewrite <- Rabs_Ropp; apply RRle_abs; assumption.
-assumption.
-replace (pos (un n)) with (Rabs (un n - 0));
- [ apply H; unfold ge in |- *; apply le_trans with N; try assumption;
+ [ apply le_max_r | apply le_max_l ]
+ | unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
+ rewrite Rplus_0_r; apply Rabs_right; apply Rle_ge;
+ left; apply (cond_pos (vn n)) ].
+ apply Rlt_trans with (pos (un n)).
+ elim H6; intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF psi_un)).
+ rewrite <- Rabs_Ropp; apply RRle_abs; assumption.
+ assumption.
+ replace (pos (un n)) with (Rabs (un n - 0));
+ [ apply H; unfold ge in |- *; apply le_trans with N; try assumption;
unfold N in |- *; apply le_trans with (max N0 N1);
- apply le_max_l
- | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
- apply Rle_ge; left; apply (cond_pos (un n)) ].
-apply H1; unfold ge in |- *; apply le_trans with N; try assumption;
- unfold N in |- *; apply le_max_r.
-apply Rmult_eq_reg_l with 3;
- [ unfold Rdiv in |- *; rewrite Rmult_plus_distr_l;
- do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | discrR ]
- | discrR ].
+ apply le_max_l
+ | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
+ apply Rle_ge; left; apply (cond_pos (un n)) ].
+ apply H1; unfold ge in |- *; apply le_trans with N; try assumption;
+ unfold N in |- *; apply le_max_r.
+ apply Rmult_eq_reg_l with 3;
+ [ unfold Rdiv in |- *; rewrite Rmult_plus_distr_l;
+ do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | discrR ]
+ | discrR ].
Qed.
Lemma RinvN_pos : forall n:nat, 0 < / (INR n + 1).
-intro; apply Rinv_0_lt_compat; apply Rplus_le_lt_0_compat;
- [ apply pos_INR | apply Rlt_0_1 ].
+Proof.
+ intro; apply Rinv_0_lt_compat; apply Rplus_le_lt_0_compat;
+ [ apply pos_INR | apply Rlt_0_1 ].
Qed.
Definition RinvN (N:nat) : posreal := mkposreal _ (RinvN_pos N).
-
+
Lemma RinvN_cv : Un_cv RinvN 0.
-unfold Un_cv in |- *; intros; assert (H0 := archimed (/ eps)); elim H0;
- clear H0; intros; assert (H2 : (0 <= up (/ eps))%Z).
-apply le_IZR; left; apply Rlt_trans with (/ eps);
- [ apply Rinv_0_lt_compat; assumption | assumption ].
-elim (IZN _ H2); intros; exists x; intros; unfold R_dist in |- *;
- simpl in |- *; unfold Rminus in |- *; rewrite Ropp_0;
- rewrite Rplus_0_r; assert (H5 : 0 < INR n + 1).
-apply Rplus_le_lt_0_compat; [ apply pos_INR | apply Rlt_0_1 ].
-rewrite Rabs_right;
- [ idtac
- | left; change (0 < / (INR n + 1)) in |- *; apply Rinv_0_lt_compat;
- assumption ]; apply Rle_lt_trans with (/ (INR x + 1)).
-apply Rle_Rinv.
-apply Rplus_le_lt_0_compat; [ apply pos_INR | apply Rlt_0_1 ].
-assumption.
-do 2 rewrite <- (Rplus_comm 1); apply Rplus_le_compat_l; apply le_INR;
- apply H4.
-rewrite <- (Rinv_involutive eps).
-apply Rinv_lt_contravar.
-apply Rmult_lt_0_compat.
-apply Rinv_0_lt_compat; assumption.
-apply Rplus_le_lt_0_compat; [ apply pos_INR | apply Rlt_0_1 ].
-apply Rlt_trans with (INR x);
- [ rewrite INR_IZR_INZ; rewrite <- H3; apply H0
- | pattern (INR x) at 1 in |- *; rewrite <- Rplus_0_r;
- apply Rplus_lt_compat_l; apply Rlt_0_1 ].
-red in |- *; intro; rewrite H6 in H; elim (Rlt_irrefl _ H).
+Proof.
+ unfold Un_cv in |- *; intros; assert (H0 := archimed (/ eps)); elim H0;
+ clear H0; intros; assert (H2 : (0 <= up (/ eps))%Z).
+ apply le_IZR; left; apply Rlt_trans with (/ eps);
+ [ apply Rinv_0_lt_compat; assumption | assumption ].
+ elim (IZN _ H2); intros; exists x; intros; unfold R_dist in |- *;
+ simpl in |- *; unfold Rminus in |- *; rewrite Ropp_0;
+ rewrite Rplus_0_r; assert (H5 : 0 < INR n + 1).
+ apply Rplus_le_lt_0_compat; [ apply pos_INR | apply Rlt_0_1 ].
+ rewrite Rabs_right;
+ [ idtac
+ | left; change (0 < / (INR n + 1)) in |- *; apply Rinv_0_lt_compat;
+ assumption ]; apply Rle_lt_trans with (/ (INR x + 1)).
+ apply Rle_Rinv.
+ apply Rplus_le_lt_0_compat; [ apply pos_INR | apply Rlt_0_1 ].
+ assumption.
+ do 2 rewrite <- (Rplus_comm 1); apply Rplus_le_compat_l; apply le_INR;
+ apply H4.
+ rewrite <- (Rinv_involutive eps).
+ apply Rinv_lt_contravar.
+ apply Rmult_lt_0_compat.
+ apply Rinv_0_lt_compat; assumption.
+ apply Rplus_le_lt_0_compat; [ apply pos_INR | apply Rlt_0_1 ].
+ apply Rlt_trans with (INR x);
+ [ rewrite INR_IZR_INZ; rewrite <- H3; apply H0
+ | pattern (INR x) at 1 in |- *; rewrite <- Rplus_0_r;
+ apply Rplus_lt_compat_l; apply Rlt_0_1 ].
+ red in |- *; intro; rewrite H6 in H; elim (Rlt_irrefl _ H).
Qed.
(**********)
Definition RiemannInt (f:R -> R) (a b:R) (pr:Riemann_integrable f a b) : R :=
match RiemannInt_exists pr RinvN RinvN_cv with
- | existT a' b' => a'
+ | existT a' b' => a'
end.
Lemma RiemannInt_P5 :
- forall (f:R -> R) (a b:R) (pr1 pr2:Riemann_integrable f a b),
- RiemannInt pr1 = RiemannInt pr2.
-intros; unfold RiemannInt in |- *;
- case (RiemannInt_exists pr1 RinvN RinvN_cv);
- case (RiemannInt_exists pr2 RinvN RinvN_cv); intros;
- eapply UL_sequence;
- [ apply u0
- | apply RiemannInt_P4 with pr2 RinvN; apply RinvN_cv || assumption ].
+ forall (f:R -> R) (a b:R) (pr1 pr2:Riemann_integrable f a b),
+ RiemannInt pr1 = RiemannInt pr2.
+Proof.
+ intros; unfold RiemannInt in |- *;
+ case (RiemannInt_exists pr1 RinvN RinvN_cv);
+ case (RiemannInt_exists pr2 RinvN RinvN_cv); intros;
+ eapply UL_sequence;
+ [ apply u0
+ | apply RiemannInt_P4 with pr2 RinvN; apply RinvN_cv || assumption ].
Qed.
-(**************************************)
-(* C°([a,b]) is included in L1([a,b]) *)
-(**************************************)
+(***************************************)
+(** C°([a,b]) is included in L1([a,b]) *)
+(***************************************)
Lemma maxN :
- forall (a b:R) (del:posreal),
- a < b ->
- sigT (fun n:nat => a + INR n * del < b /\ b <= a + INR (S n) * del).
-intros; set (I := fun n:nat => a + INR n * del < b);
- assert (H0 : exists n : nat, I n).
-exists 0%nat; unfold I in |- *; rewrite Rmult_0_l; rewrite Rplus_0_r;
- assumption.
-cut (Nbound I).
-intro; assert (H2 := Nzorn H0 H1); elim H2; intros; exists x; elim p; intros;
- split.
-apply H3.
-case (total_order_T (a + INR (S x) * del) b); intro.
-elim s; intro.
-assert (H5 := H4 (S x) a0); elim (le_Sn_n _ H5).
-right; symmetry in |- *; assumption.
-left; apply r.
-assert (H1 : 0 <= (b - a) / del).
-unfold Rdiv in |- *; apply Rmult_le_pos;
- [ apply Rge_le; apply Rge_minus; apply Rle_ge; left; apply H
- | left; apply Rinv_0_lt_compat; apply (cond_pos del) ].
-elim (archimed ((b - a) / del)); intros;
- assert (H4 : (0 <= up ((b - a) / del))%Z).
-apply le_IZR; simpl in |- *; left; apply Rle_lt_trans with ((b - a) / del);
- assumption.
-assert (H5 := IZN _ H4); elim H5; clear H5; intros N H5;
- unfold Nbound in |- *; exists N; intros; unfold I in H6;
- apply INR_le; rewrite H5 in H2; rewrite <- INR_IZR_INZ in H2;
- left; apply Rle_lt_trans with ((b - a) / del); try assumption;
- apply Rmult_le_reg_l with (pos del);
- [ apply (cond_pos del)
- | unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ del));
- rewrite <- Rmult_assoc; rewrite <- Rinv_r_sym;
- [ rewrite Rmult_1_l; rewrite Rmult_comm; apply Rplus_le_reg_l with a;
- replace (a + (b - a)) with b; [ left; assumption | ring ]
- | assert (H7 := cond_pos del); red in |- *; intro; rewrite H8 in H7;
- elim (Rlt_irrefl _ H7) ] ].
+ forall (a b:R) (del:posreal),
+ a < b ->
+ sigT (fun n:nat => a + INR n * del < b /\ b <= a + INR (S n) * del).
+Proof.
+ intros; set (I := fun n:nat => a + INR n * del < b);
+ assert (H0 : exists n : nat, I n).
+ exists 0%nat; unfold I in |- *; rewrite Rmult_0_l; rewrite Rplus_0_r;
+ assumption.
+ cut (Nbound I).
+ intro; assert (H2 := Nzorn H0 H1); elim H2; intros; exists x; elim p; intros;
+ split.
+ apply H3.
+ case (total_order_T (a + INR (S x) * del) b); intro.
+ elim s; intro.
+ assert (H5 := H4 (S x) a0); elim (le_Sn_n _ H5).
+ right; symmetry in |- *; assumption.
+ left; apply r.
+ assert (H1 : 0 <= (b - a) / del).
+ unfold Rdiv in |- *; apply Rmult_le_pos;
+ [ apply Rge_le; apply Rge_minus; apply Rle_ge; left; apply H
+ | left; apply Rinv_0_lt_compat; apply (cond_pos del) ].
+ elim (archimed ((b - a) / del)); intros;
+ assert (H4 : (0 <= up ((b - a) / del))%Z).
+ apply le_IZR; simpl in |- *; left; apply Rle_lt_trans with ((b - a) / del);
+ assumption.
+ assert (H5 := IZN _ H4); elim H5; clear H5; intros N H5;
+ unfold Nbound in |- *; exists N; intros; unfold I in H6;
+ apply INR_le; rewrite H5 in H2; rewrite <- INR_IZR_INZ in H2;
+ left; apply Rle_lt_trans with ((b - a) / del); try assumption;
+ apply Rmult_le_reg_l with (pos del);
+ [ apply (cond_pos del)
+ | unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ del));
+ rewrite <- Rmult_assoc; rewrite <- Rinv_r_sym;
+ [ rewrite Rmult_1_l; rewrite Rmult_comm; apply Rplus_le_reg_l with a;
+ replace (a + (b - a)) with b; [ left; assumption | ring ]
+ | assert (H7 := cond_pos del); red in |- *; intro; rewrite H8 in H7;
+ elim (Rlt_irrefl _ H7) ] ].
Qed.
Fixpoint SubEquiN (N:nat) (x y:R) (del:posreal) {struct N} : Rlist :=
match N with
- | O => cons y nil
- | S p => cons x (SubEquiN p (x + del) y del)
+ | O => cons y nil
+ | S p => cons x (SubEquiN p (x + del) y del)
end.
Definition max_N (a b:R) (del:posreal) (h:a < b) : nat :=
match maxN del h with
- | existT N H0 => N
+ | existT N H0 => N
end.
Definition SubEqui (a b:R) (del:posreal) (h:a < b) : Rlist :=
SubEquiN (S (max_N del h)) a b del.
Lemma Heine_cor1 :
- forall (f:R -> R) (a b:R),
- a < b ->
- (forall x:R, a <= x <= b -> continuity_pt f x) ->
- forall eps:posreal,
- sigT
- (fun delta:posreal =>
- delta <= b - a /\
+ forall (f:R -> R) (a b:R),
+ a < b ->
+ (forall x:R, a <= x <= b -> continuity_pt f x) ->
+ forall eps:posreal,
+ sigT
+ (fun delta:posreal =>
+ delta <= b - a /\
+ (forall x y:R,
+ a <= x <= b ->
+ a <= y <= b -> Rabs (x - y) < delta -> Rabs (f x - f y) < eps)).
+Proof.
+ intro f; intros;
+ set
+ (E :=
+ fun l:R =>
+ 0 < l <= b - a /\
(forall x y:R,
- a <= x <= b ->
- a <= y <= b -> Rabs (x - y) < delta -> Rabs (f x - f y) < eps)).
-intro f; intros;
- set
- (E :=
- fun l:R =>
- 0 < l <= b - a /\
- (forall x y:R,
- a <= x <= b ->
- a <= y <= b -> Rabs (x - y) < l -> Rabs (f x - f y) < eps));
- assert (H1 : bound E).
-unfold bound in |- *; exists (b - a); unfold is_upper_bound in |- *; intros;
- unfold E in H1; elim H1; clear H1; intros H1 _; elim H1;
- intros; assumption.
-assert (H2 : exists x : R, E x).
-assert (H2 := Heine f (fun x:R => a <= x <= b) (compact_P3 a b) H0 eps);
- elim H2; intros; exists (Rmin x (b - a)); unfold E in |- *;
- split;
- [ split;
- [ unfold Rmin in |- *; case (Rle_dec x (b - a)); intro;
- [ apply (cond_pos x) | apply Rlt_Rminus; assumption ]
- | apply Rmin_r ]
- | intros; apply H3; try assumption; apply Rlt_le_trans with (Rmin x (b - a));
- [ assumption | apply Rmin_l ] ].
-assert (H3 := completeness E H1 H2); elim H3; intros; cut (0 < x <= b - a).
-intro; elim H4; clear H4; intros; apply existT with (mkposreal _ H4); split.
-apply H5.
-unfold is_lub in p; elim p; intros; unfold is_upper_bound in H6;
- set (D := Rabs (x0 - y)); elim (classic (exists y : R, D < y /\ E y));
- intro.
-elim H11; intros; elim H12; clear H12; intros; unfold E in H13; elim H13;
- intros; apply H15; assumption.
-assert (H12 := not_ex_all_not _ (fun y:R => D < y /\ E y) H11);
- assert (H13 : is_upper_bound E D).
-unfold is_upper_bound in |- *; intros; assert (H14 := H12 x1);
- elim (not_and_or (D < x1) (E x1) H14); intro.
-case (Rle_dec x1 D); intro.
-assumption.
-elim H15; auto with real.
-elim H15; assumption.
-assert (H14 := H7 _ H13); elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H14 H10)).
-unfold is_lub in p; unfold is_upper_bound in p; elim p; clear p; intros;
- split.
-elim H2; intros; assert (H7 := H4 _ H6); unfold E in H6; elim H6; clear H6;
- intros H6 _; elim H6; intros; apply Rlt_le_trans with x0;
- assumption.
-apply H5; intros; unfold E in H6; elim H6; clear H6; intros H6 _; elim H6;
- intros; assumption.
+ a <= x <= b ->
+ a <= y <= b -> Rabs (x - y) < l -> Rabs (f x - f y) < eps));
+ assert (H1 : bound E).
+ unfold bound in |- *; exists (b - a); unfold is_upper_bound in |- *; intros;
+ unfold E in H1; elim H1; clear H1; intros H1 _; elim H1;
+ intros; assumption.
+ assert (H2 : exists x : R, E x).
+ assert (H2 := Heine f (fun x:R => a <= x <= b) (compact_P3 a b) H0 eps);
+ elim H2; intros; exists (Rmin x (b - a)); unfold E in |- *;
+ split;
+ [ split;
+ [ unfold Rmin in |- *; case (Rle_dec x (b - a)); intro;
+ [ apply (cond_pos x) | apply Rlt_Rminus; assumption ]
+ | apply Rmin_r ]
+ | intros; apply H3; try assumption; apply Rlt_le_trans with (Rmin x (b - a));
+ [ assumption | apply Rmin_l ] ].
+ assert (H3 := completeness E H1 H2); elim H3; intros; cut (0 < x <= b - a).
+ intro; elim H4; clear H4; intros; apply existT with (mkposreal _ H4); split.
+ apply H5.
+ unfold is_lub in p; elim p; intros; unfold is_upper_bound in H6;
+ set (D := Rabs (x0 - y)); elim (classic (exists y : R, D < y /\ E y));
+ intro.
+ elim H11; intros; elim H12; clear H12; intros; unfold E in H13; elim H13;
+ intros; apply H15; assumption.
+ assert (H12 := not_ex_all_not _ (fun y:R => D < y /\ E y) H11);
+ assert (H13 : is_upper_bound E D).
+ unfold is_upper_bound in |- *; intros; assert (H14 := H12 x1);
+ elim (not_and_or (D < x1) (E x1) H14); intro.
+ case (Rle_dec x1 D); intro.
+ assumption.
+ elim H15; auto with real.
+ elim H15; assumption.
+ assert (H14 := H7 _ H13); elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H14 H10)).
+ unfold is_lub in p; unfold is_upper_bound in p; elim p; clear p; intros;
+ split.
+ elim H2; intros; assert (H7 := H4 _ H6); unfold E in H6; elim H6; clear H6;
+ intros H6 _; elim H6; intros; apply Rlt_le_trans with x0;
+ assumption.
+ apply H5; intros; unfold E in H6; elim H6; clear H6; intros H6 _; elim H6;
+ intros; assumption.
Qed.
Lemma Heine_cor2 :
- forall (f:R -> R) (a b:R),
- (forall x:R, a <= x <= b -> continuity_pt f x) ->
- forall eps:posreal,
- sigT
- (fun delta:posreal =>
- forall x y:R,
- a <= x <= b ->
- a <= y <= b -> Rabs (x - y) < delta -> Rabs (f x - f y) < eps).
-intro f; intros; case (total_order_T a b); intro.
-elim s; intro.
-assert (H0 := Heine_cor1 a0 H eps); elim H0; intros; apply existT with x;
- elim p; intros; apply H2; assumption.
-apply existT with (mkposreal _ Rlt_0_1); intros; assert (H3 : x = y);
- [ elim H0; elim H1; intros; rewrite b0 in H3; rewrite b0 in H5;
- apply Rle_antisym; apply Rle_trans with b; assumption
- | rewrite H3; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
- apply (cond_pos eps) ].
-apply existT with (mkposreal _ Rlt_0_1); intros; elim H0; intros;
- elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ (Rle_trans _ _ _ H3 H4) r)).
+ forall (f:R -> R) (a b:R),
+ (forall x:R, a <= x <= b -> continuity_pt f x) ->
+ forall eps:posreal,
+ sigT
+ (fun delta:posreal =>
+ forall x y:R,
+ a <= x <= b ->
+ a <= y <= b -> Rabs (x - y) < delta -> Rabs (f x - f y) < eps).
+Proof.
+ intro f; intros; case (total_order_T a b); intro.
+ elim s; intro.
+ assert (H0 := Heine_cor1 a0 H eps); elim H0; intros; apply existT with x;
+ elim p; intros; apply H2; assumption.
+ apply existT with (mkposreal _ Rlt_0_1); intros; assert (H3 : x = y);
+ [ elim H0; elim H1; intros; rewrite b0 in H3; rewrite b0 in H5;
+ apply Rle_antisym; apply Rle_trans with b; assumption
+ | rewrite H3; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
+ apply (cond_pos eps) ].
+ apply existT with (mkposreal _ Rlt_0_1); intros; elim H0; intros;
+ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ (Rle_trans _ _ _ H3 H4) r)).
Qed.
Lemma SubEqui_P1 :
- forall (a b:R) (del:posreal) (h:a < b), pos_Rl (SubEqui del h) 0 = a.
-intros; unfold SubEqui in |- *; case (maxN del h); intros; reflexivity.
+ forall (a b:R) (del:posreal) (h:a < b), pos_Rl (SubEqui del h) 0 = a.
+Proof.
+ intros; unfold SubEqui in |- *; case (maxN del h); intros; reflexivity.
Qed.
Lemma SubEqui_P2 :
- forall (a b:R) (del:posreal) (h:a < b),
- pos_Rl (SubEqui del h) (pred (Rlength (SubEqui del h))) = b.
-intros; unfold SubEqui in |- *; case (maxN del h); intros; clear a0;
- cut
- (forall (x:nat) (a:R) (del:posreal),
- pos_Rl (SubEquiN (S x) a b del)
- (pred (Rlength (SubEquiN (S x) a b del))) = b);
- [ intro; apply H
- | simple induction x0;
- [ intros; reflexivity
- | intros;
- change
- (pos_Rl (SubEquiN (S n) (a0 + del0) b del0)
- (pred (Rlength (SubEquiN (S n) (a0 + del0) b del0))) = b)
- in |- *; apply H ] ].
+ forall (a b:R) (del:posreal) (h:a < b),
+ pos_Rl (SubEqui del h) (pred (Rlength (SubEqui del h))) = b.
+Proof.
+ intros; unfold SubEqui in |- *; case (maxN del h); intros; clear a0;
+ cut
+ (forall (x:nat) (a:R) (del:posreal),
+ pos_Rl (SubEquiN (S x) a b del)
+ (pred (Rlength (SubEquiN (S x) a b del))) = b);
+ [ intro; apply H
+ | simple induction x0;
+ [ intros; reflexivity
+ | intros;
+ change
+ (pos_Rl (SubEquiN (S n) (a0 + del0) b del0)
+ (pred (Rlength (SubEquiN (S n) (a0 + del0) b del0))) = b)
+ in |- *; apply H ] ].
Qed.
Lemma SubEqui_P3 :
- forall (N:nat) (a b:R) (del:posreal), Rlength (SubEquiN N a b del) = S N.
-simple induction N; intros;
- [ reflexivity | simpl in |- *; rewrite H; reflexivity ].
+ forall (N:nat) (a b:R) (del:posreal), Rlength (SubEquiN N a b del) = S N.
+Proof.
+ simple induction N; intros;
+ [ reflexivity | simpl in |- *; rewrite H; reflexivity ].
Qed.
Lemma SubEqui_P4 :
- forall (N:nat) (a b:R) (del:posreal) (i:nat),
- (i < S N)%nat -> pos_Rl (SubEquiN (S N) a b del) i = a + INR i * del.
-simple induction N;
- [ intros; inversion H; [ simpl in |- *; ring | elim (le_Sn_O _ H1) ]
- | intros; induction i as [| i Hreci];
- [ simpl in |- *; ring
- | change
- (pos_Rl (SubEquiN (S n) (a + del) b del) i = a + INR (S i) * del)
- in |- *; rewrite H; [ rewrite S_INR; ring | apply lt_S_n; apply H0 ] ] ].
+ forall (N:nat) (a b:R) (del:posreal) (i:nat),
+ (i < S N)%nat -> pos_Rl (SubEquiN (S N) a b del) i = a + INR i * del.
+Proof.
+ simple induction N;
+ [ intros; inversion H; [ simpl in |- *; ring | elim (le_Sn_O _ H1) ]
+ | intros; induction i as [| i Hreci];
+ [ simpl in |- *; ring
+ | change
+ (pos_Rl (SubEquiN (S n) (a + del) b del) i = a + INR (S i) * del)
+ in |- *; rewrite H; [ rewrite S_INR; ring | apply lt_S_n; apply H0 ] ] ].
Qed.
Lemma SubEqui_P5 :
- forall (a b:R) (del:posreal) (h:a < b),
- Rlength (SubEqui del h) = S (S (max_N del h)).
-intros; unfold SubEqui in |- *; apply SubEqui_P3.
+ forall (a b:R) (del:posreal) (h:a < b),
+ Rlength (SubEqui del h) = S (S (max_N del h)).
+Proof.
+ intros; unfold SubEqui in |- *; apply SubEqui_P3.
Qed.
Lemma SubEqui_P6 :
- forall (a b:R) (del:posreal) (h:a < b) (i:nat),
- (i < S (max_N del h))%nat -> pos_Rl (SubEqui del h) i = a + INR i * del.
-intros; unfold SubEqui in |- *; apply SubEqui_P4; assumption.
+ forall (a b:R) (del:posreal) (h:a < b) (i:nat),
+ (i < S (max_N del h))%nat -> pos_Rl (SubEqui del h) i = a + INR i * del.
+Proof.
+ intros; unfold SubEqui in |- *; apply SubEqui_P4; assumption.
Qed.
Lemma SubEqui_P7 :
- forall (a b:R) (del:posreal) (h:a < b), ordered_Rlist (SubEqui del h).
-intros; unfold ordered_Rlist in |- *; intros; rewrite SubEqui_P5 in H;
- simpl in H; inversion H.
-rewrite (SubEqui_P6 del h (i:=(max_N del h))).
-replace (S (max_N del h)) with (pred (Rlength (SubEqui del h))).
-rewrite SubEqui_P2; unfold max_N in |- *; case (maxN del h); intros; left;
- elim a0; intros; assumption.
-rewrite SubEqui_P5; reflexivity.
-apply lt_n_Sn.
-repeat rewrite SubEqui_P6.
-3: assumption.
-2: apply le_lt_n_Sm; assumption.
-apply Rplus_le_compat_l; rewrite S_INR; rewrite Rmult_plus_distr_r;
- pattern (INR i * del) at 1 in |- *; rewrite <- Rplus_0_r;
- apply Rplus_le_compat_l; rewrite Rmult_1_l; left;
- apply (cond_pos del).
+ forall (a b:R) (del:posreal) (h:a < b), ordered_Rlist (SubEqui del h).
+Proof.
+ intros; unfold ordered_Rlist in |- *; intros; rewrite SubEqui_P5 in H;
+ simpl in H; inversion H.
+ rewrite (SubEqui_P6 del h (i:=(max_N del h))).
+ replace (S (max_N del h)) with (pred (Rlength (SubEqui del h))).
+ rewrite SubEqui_P2; unfold max_N in |- *; case (maxN del h); intros; left;
+ elim a0; intros; assumption.
+ rewrite SubEqui_P5; reflexivity.
+ apply lt_n_Sn.
+ repeat rewrite SubEqui_P6.
+ 3: assumption.
+ 2: apply le_lt_n_Sm; assumption.
+ apply Rplus_le_compat_l; rewrite S_INR; rewrite Rmult_plus_distr_r;
+ pattern (INR i * del) at 1 in |- *; rewrite <- Rplus_0_r;
+ apply Rplus_le_compat_l; rewrite Rmult_1_l; left;
+ apply (cond_pos del).
Qed.
Lemma SubEqui_P8 :
- forall (a b:R) (del:posreal) (h:a < b) (i:nat),
- (i < Rlength (SubEqui del h))%nat -> a <= pos_Rl (SubEqui del h) i <= b.
-intros; split.
-pattern a at 1 in |- *; rewrite <- (SubEqui_P1 del h); apply RList_P5.
-apply SubEqui_P7.
-elim (RList_P3 (SubEqui del h) (pos_Rl (SubEqui del h) i)); intros; apply H1;
- exists i; split; [ reflexivity | assumption ].
-pattern b at 2 in |- *; rewrite <- (SubEqui_P2 del h); apply RList_P7;
- [ apply SubEqui_P7
- | elim (RList_P3 (SubEqui del h) (pos_Rl (SubEqui del h) i)); intros;
- apply H1; exists i; split; [ reflexivity | assumption ] ].
+ forall (a b:R) (del:posreal) (h:a < b) (i:nat),
+ (i < Rlength (SubEqui del h))%nat -> a <= pos_Rl (SubEqui del h) i <= b.
+Proof.
+ intros; split.
+ pattern a at 1 in |- *; rewrite <- (SubEqui_P1 del h); apply RList_P5.
+ apply SubEqui_P7.
+ elim (RList_P3 (SubEqui del h) (pos_Rl (SubEqui del h) i)); intros; apply H1;
+ exists i; split; [ reflexivity | assumption ].
+ pattern b at 2 in |- *; rewrite <- (SubEqui_P2 del h); apply RList_P7;
+ [ apply SubEqui_P7
+ | elim (RList_P3 (SubEqui del h) (pos_Rl (SubEqui del h) i)); intros;
+ apply H1; exists i; split; [ reflexivity | assumption ] ].
Qed.
Lemma SubEqui_P9 :
- forall (a b:R) (del:posreal) (f:R -> R) (h:a < b),
- sigT
- (fun g:StepFun a b =>
- g b = f b /\
- (forall i:nat,
- (i < pred (Rlength (SubEqui del h)))%nat ->
- constant_D_eq g
- (co_interval (pos_Rl (SubEqui del h) i)
- (pos_Rl (SubEqui del h) (S i)))
- (f (pos_Rl (SubEqui del h) i)))).
-intros; apply StepFun_P38;
- [ apply SubEqui_P7 | apply SubEqui_P1 | apply SubEqui_P2 ].
+ forall (a b:R) (del:posreal) (f:R -> R) (h:a < b),
+ sigT
+ (fun g:StepFun a b =>
+ g b = f b /\
+ (forall i:nat,
+ (i < pred (Rlength (SubEqui del h)))%nat ->
+ constant_D_eq g
+ (co_interval (pos_Rl (SubEqui del h) i)
+ (pos_Rl (SubEqui del h) (S i)))
+ (f (pos_Rl (SubEqui del h) i)))).
+Proof.
+ intros; apply StepFun_P38;
+ [ apply SubEqui_P7 | apply SubEqui_P1 | apply SubEqui_P2 ].
Qed.
Lemma RiemannInt_P6 :
- forall (f:R -> R) (a b:R),
- a < b ->
- (forall x:R, a <= x <= b -> continuity_pt f x) -> Riemann_integrable f a b.
-intros; unfold Riemann_integrable in |- *; intro;
- assert (H1 : 0 < eps / (2 * (b - a))).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ apply (cond_pos eps)
- | apply Rinv_0_lt_compat; apply Rmult_lt_0_compat;
- [ prove_sup0 | apply Rlt_Rminus; assumption ] ].
-assert (H2 : Rmin a b = a).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; left; assumption ].
-assert (H3 : Rmax a b = b).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; left; assumption ].
-elim (Heine_cor2 H0 (mkposreal _ H1)); intros del H4;
- elim (SubEqui_P9 del f H); intros phi [H5 H6]; split with phi;
- split with (mkStepFun (StepFun_P4 a b (eps / (2 * (b - a)))));
- split.
-2: rewrite StepFun_P18; unfold Rdiv in |- *; rewrite Rinv_mult_distr.
-2: do 2 rewrite Rmult_assoc; rewrite <- Rinv_l_sym.
-2: rewrite Rmult_1_r; rewrite Rabs_right.
-2: apply Rmult_lt_reg_l with 2.
-2: prove_sup0.
-2: rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
+ forall (f:R -> R) (a b:R),
+ a < b ->
+ (forall x:R, a <= x <= b -> continuity_pt f x) -> Riemann_integrable f a b.
+Proof.
+ intros; unfold Riemann_integrable in |- *; intro;
+ assert (H1 : 0 < eps / (2 * (b - a))).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ apply (cond_pos eps)
+ | apply Rinv_0_lt_compat; apply Rmult_lt_0_compat;
+ [ prove_sup0 | apply Rlt_Rminus; assumption ] ].
+ assert (H2 : Rmin a b = a).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; left; assumption ].
+ assert (H3 : Rmax a b = b).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; left; assumption ].
+ elim (Heine_cor2 H0 (mkposreal _ H1)); intros del H4;
+ elim (SubEqui_P9 del f H); intros phi [H5 H6]; split with phi;
+ split with (mkStepFun (StepFun_P4 a b (eps / (2 * (b - a)))));
+ split.
+ 2: rewrite StepFun_P18; unfold Rdiv in |- *; rewrite Rinv_mult_distr.
+ 2: do 2 rewrite Rmult_assoc; rewrite <- Rinv_l_sym.
+ 2: rewrite Rmult_1_r; rewrite Rabs_right.
+ 2: apply Rmult_lt_reg_l with 2.
+ 2: prove_sup0.
+ 2: rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
rewrite <- Rinv_r_sym.
-2: rewrite Rmult_1_l; pattern (pos eps) at 1 in |- *; rewrite <- Rplus_0_r;
+ 2: rewrite Rmult_1_l; pattern (pos eps) at 1 in |- *; rewrite <- Rplus_0_r;
rewrite double; apply Rplus_lt_compat_l; apply (cond_pos eps).
-2: discrR.
-2: apply Rle_ge; left; apply Rmult_lt_0_compat.
-2: apply (cond_pos eps).
-2: apply Rinv_0_lt_compat; prove_sup0.
-2: apply Rminus_eq_contra; red in |- *; intro; clear H6; rewrite H7 in H;
+ 2: discrR.
+ 2: apply Rle_ge; left; apply Rmult_lt_0_compat.
+ 2: apply (cond_pos eps).
+ 2: apply Rinv_0_lt_compat; prove_sup0.
+ 2: apply Rminus_eq_contra; red in |- *; intro; clear H6; rewrite H7 in H;
elim (Rlt_irrefl _ H).
-2: discrR.
-2: apply Rminus_eq_contra; red in |- *; intro; clear H6; rewrite H7 in H;
+ 2: discrR.
+ 2: apply Rminus_eq_contra; red in |- *; intro; clear H6; rewrite H7 in H;
elim (Rlt_irrefl _ H).
-intros; rewrite H2 in H7; rewrite H3 in H7; simpl in |- *;
- unfold fct_cte in |- *;
- cut
- (forall t:R,
- a <= t <= b ->
- t = b \/
- (exists i : nat,
- (i < pred (Rlength (SubEqui del H)))%nat /\
- co_interval (pos_Rl (SubEqui del H) i) (pos_Rl (SubEqui del H) (S i))
- t)).
-intro; elim (H8 _ H7); intro.
-rewrite H9; rewrite H5; unfold Rminus in |- *; rewrite Rplus_opp_r;
- rewrite Rabs_R0; left; assumption.
-elim H9; clear H9; intros I [H9 H10]; assert (H11 := H6 I H9 t H10);
- rewrite H11; left; apply H4.
-assumption.
-apply SubEqui_P8; apply lt_trans with (pred (Rlength (SubEqui del H))).
-assumption.
-apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H9;
- elim (lt_n_O _ H9).
-unfold co_interval in H10; elim H10; clear H10; intros; rewrite Rabs_right.
-rewrite SubEqui_P5 in H9; simpl in H9; inversion H9.
-apply Rplus_lt_reg_r with (pos_Rl (SubEqui del H) (max_N del H)).
-replace
- (pos_Rl (SubEqui del H) (max_N del H) +
- (t - pos_Rl (SubEqui del H) (max_N del H))) with t;
- [ idtac | ring ]; apply Rlt_le_trans with b.
-rewrite H14 in H12;
- assert (H13 : S (max_N del H) = pred (Rlength (SubEqui del H))).
-rewrite SubEqui_P5; reflexivity.
-rewrite H13 in H12; rewrite SubEqui_P2 in H12; apply H12.
-rewrite SubEqui_P6.
-2: apply lt_n_Sn.
-unfold max_N in |- *; case (maxN del H); intros; elim a0; clear a0;
- intros _ H13; replace (a + INR x * del + del) with (a + INR (S x) * del);
- [ assumption | rewrite S_INR; ring ].
-apply Rplus_lt_reg_r with (pos_Rl (SubEqui del H) I);
- replace (pos_Rl (SubEqui del H) I + (t - pos_Rl (SubEqui del H) I)) with t;
- [ idtac | ring ];
- replace (pos_Rl (SubEqui del H) I + del) with (pos_Rl (SubEqui del H) (S I)).
-assumption.
-repeat rewrite SubEqui_P6.
-rewrite S_INR; ring.
-assumption.
-apply le_lt_n_Sm; assumption.
-apply Rge_minus; apply Rle_ge; assumption.
-intros; clear H0 H1 H4 phi H5 H6 t H7; case (Req_dec t0 b); intro.
-left; assumption.
-right; set (I := fun j:nat => a + INR j * del <= t0);
- assert (H1 : exists n : nat, I n).
-exists 0%nat; unfold I in |- *; rewrite Rmult_0_l; rewrite Rplus_0_r; elim H8;
- intros; assumption.
-assert (H4 : Nbound I).
-unfold Nbound in |- *; exists (S (max_N del H)); intros; unfold max_N in |- *;
- case (maxN del H); intros; elim a0; clear a0; intros _ H5;
- apply INR_le; apply Rmult_le_reg_l with (pos del).
-apply (cond_pos del).
-apply Rplus_le_reg_l with a; do 2 rewrite (Rmult_comm del);
- apply Rle_trans with t0; unfold I in H4; try assumption;
- apply Rle_trans with b; try assumption; elim H8; intros;
- assumption.
-elim (Nzorn H1 H4); intros N [H5 H6]; assert (H7 : (N < S (max_N del H))%nat).
-unfold max_N in |- *; case (maxN del H); intros; apply INR_lt;
- apply Rmult_lt_reg_l with (pos del).
-apply (cond_pos del).
-apply Rplus_lt_reg_r with a; do 2 rewrite (Rmult_comm del);
- apply Rle_lt_trans with t0; unfold I in H5; try assumption;
- elim a0; intros; apply Rlt_le_trans with b; try assumption;
- elim H8; intros.
-elim H11; intro.
-assumption.
-elim H0; assumption.
-exists N; split.
-rewrite SubEqui_P5; simpl in |- *; assumption.
-unfold co_interval in |- *; split.
-rewrite SubEqui_P6.
-apply H5.
-assumption.
-inversion H7.
-replace (S (max_N del H)) with (pred (Rlength (SubEqui del H))).
-rewrite (SubEqui_P2 del H); elim H8; intros.
-elim H11; intro.
-assumption.
-elim H0; assumption.
-rewrite SubEqui_P5; reflexivity.
-rewrite SubEqui_P6.
-case (Rle_dec (a + INR (S N) * del) t0); intro.
-assert (H11 := H6 (S N) r); elim (le_Sn_n _ H11).
-auto with real.
-apply le_lt_n_Sm; assumption.
+ intros; rewrite H2 in H7; rewrite H3 in H7; simpl in |- *;
+ unfold fct_cte in |- *;
+ cut
+ (forall t:R,
+ a <= t <= b ->
+ t = b \/
+ (exists i : nat,
+ (i < pred (Rlength (SubEqui del H)))%nat /\
+ co_interval (pos_Rl (SubEqui del H) i) (pos_Rl (SubEqui del H) (S i))
+ t)).
+ intro; elim (H8 _ H7); intro.
+ rewrite H9; rewrite H5; unfold Rminus in |- *; rewrite Rplus_opp_r;
+ rewrite Rabs_R0; left; assumption.
+ elim H9; clear H9; intros I [H9 H10]; assert (H11 := H6 I H9 t H10);
+ rewrite H11; left; apply H4.
+ assumption.
+ apply SubEqui_P8; apply lt_trans with (pred (Rlength (SubEqui del H))).
+ assumption.
+ apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H9;
+ elim (lt_n_O _ H9).
+ unfold co_interval in H10; elim H10; clear H10; intros; rewrite Rabs_right.
+ rewrite SubEqui_P5 in H9; simpl in H9; inversion H9.
+ apply Rplus_lt_reg_r with (pos_Rl (SubEqui del H) (max_N del H)).
+ replace
+ (pos_Rl (SubEqui del H) (max_N del H) +
+ (t - pos_Rl (SubEqui del H) (max_N del H))) with t;
+ [ idtac | ring ]; apply Rlt_le_trans with b.
+ rewrite H14 in H12;
+ assert (H13 : S (max_N del H) = pred (Rlength (SubEqui del H))).
+ rewrite SubEqui_P5; reflexivity.
+ rewrite H13 in H12; rewrite SubEqui_P2 in H12; apply H12.
+ rewrite SubEqui_P6.
+ 2: apply lt_n_Sn.
+ unfold max_N in |- *; case (maxN del H); intros; elim a0; clear a0;
+ intros _ H13; replace (a + INR x * del + del) with (a + INR (S x) * del);
+ [ assumption | rewrite S_INR; ring ].
+ apply Rplus_lt_reg_r with (pos_Rl (SubEqui del H) I);
+ replace (pos_Rl (SubEqui del H) I + (t - pos_Rl (SubEqui del H) I)) with t;
+ [ idtac | ring ];
+ replace (pos_Rl (SubEqui del H) I + del) with (pos_Rl (SubEqui del H) (S I)).
+ assumption.
+ repeat rewrite SubEqui_P6.
+ rewrite S_INR; ring.
+ assumption.
+ apply le_lt_n_Sm; assumption.
+ apply Rge_minus; apply Rle_ge; assumption.
+ intros; clear H0 H1 H4 phi H5 H6 t H7; case (Req_dec t0 b); intro.
+ left; assumption.
+ right; set (I := fun j:nat => a + INR j * del <= t0);
+ assert (H1 : exists n : nat, I n).
+ exists 0%nat; unfold I in |- *; rewrite Rmult_0_l; rewrite Rplus_0_r; elim H8;
+ intros; assumption.
+ assert (H4 : Nbound I).
+ unfold Nbound in |- *; exists (S (max_N del H)); intros; unfold max_N in |- *;
+ case (maxN del H); intros; elim a0; clear a0; intros _ H5;
+ apply INR_le; apply Rmult_le_reg_l with (pos del).
+ apply (cond_pos del).
+ apply Rplus_le_reg_l with a; do 2 rewrite (Rmult_comm del);
+ apply Rle_trans with t0; unfold I in H4; try assumption;
+ apply Rle_trans with b; try assumption; elim H8; intros;
+ assumption.
+ elim (Nzorn H1 H4); intros N [H5 H6]; assert (H7 : (N < S (max_N del H))%nat).
+ unfold max_N in |- *; case (maxN del H); intros; apply INR_lt;
+ apply Rmult_lt_reg_l with (pos del).
+ apply (cond_pos del).
+ apply Rplus_lt_reg_r with a; do 2 rewrite (Rmult_comm del);
+ apply Rle_lt_trans with t0; unfold I in H5; try assumption;
+ elim a0; intros; apply Rlt_le_trans with b; try assumption;
+ elim H8; intros.
+ elim H11; intro.
+ assumption.
+ elim H0; assumption.
+ exists N; split.
+ rewrite SubEqui_P5; simpl in |- *; assumption.
+ unfold co_interval in |- *; split.
+ rewrite SubEqui_P6.
+ apply H5.
+ assumption.
+ inversion H7.
+ replace (S (max_N del H)) with (pred (Rlength (SubEqui del H))).
+ rewrite (SubEqui_P2 del H); elim H8; intros.
+ elim H11; intro.
+ assumption.
+ elim H0; assumption.
+ rewrite SubEqui_P5; reflexivity.
+ rewrite SubEqui_P6.
+ case (Rle_dec (a + INR (S N) * del) t0); intro.
+ assert (H11 := H6 (S N) r); elim (le_Sn_n _ H11).
+ auto with real.
+ apply le_lt_n_Sm; assumption.
Qed.
Lemma RiemannInt_P7 : forall (f:R -> R) (a:R), Riemann_integrable f a a.
-unfold Riemann_integrable in |- *; intro f; intros;
- split with (mkStepFun (StepFun_P4 a a (f a)));
- split with (mkStepFun (StepFun_P4 a a 0)); split.
-intros; simpl in |- *; unfold fct_cte in |- *; replace t with a.
-unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; right;
- reflexivity.
-generalize H; unfold Rmin, Rmax in |- *; case (Rle_dec a a); intros; elim H0;
- intros; apply Rle_antisym; assumption.
-rewrite StepFun_P18; rewrite Rmult_0_l; rewrite Rabs_R0; apply (cond_pos eps).
+Proof.
+ unfold Riemann_integrable in |- *; intro f; intros;
+ split with (mkStepFun (StepFun_P4 a a (f a)));
+ split with (mkStepFun (StepFun_P4 a a 0)); split.
+ intros; simpl in |- *; unfold fct_cte in |- *; replace t with a.
+ unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; right;
+ reflexivity.
+ generalize H; unfold Rmin, Rmax in |- *; case (Rle_dec a a); intros; elim H0;
+ intros; apply Rle_antisym; assumption.
+ rewrite StepFun_P18; rewrite Rmult_0_l; rewrite Rabs_R0; apply (cond_pos eps).
Qed.
Lemma continuity_implies_RiemannInt :
- forall (f:R -> R) (a b:R),
- a <= b ->
- (forall x:R, a <= x <= b -> continuity_pt f x) -> Riemann_integrable f a b.
-intros; case (total_order_T a b); intro;
- [ elim s; intro;
- [ apply RiemannInt_P6; assumption | rewrite b0; apply RiemannInt_P7 ]
- | elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)) ].
+ forall (f:R -> R) (a b:R),
+ a <= b ->
+ (forall x:R, a <= x <= b -> continuity_pt f x) -> Riemann_integrable f a b.
+Proof.
+ intros; case (total_order_T a b); intro;
+ [ elim s; intro;
+ [ apply RiemannInt_P6; assumption | rewrite b0; apply RiemannInt_P7 ]
+ | elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)) ].
Qed.
Lemma RiemannInt_P8 :
- forall (f:R -> R) (a b:R) (pr1:Riemann_integrable f a b)
- (pr2:Riemann_integrable f b a), RiemannInt pr1 = - RiemannInt pr2.
-intro f; intros; eapply UL_sequence.
-unfold RiemannInt in |- *; case (RiemannInt_exists pr1 RinvN RinvN_cv);
- intros; apply u.
-unfold RiemannInt in |- *; case (RiemannInt_exists pr2 RinvN RinvN_cv);
- intros;
- cut
- (exists psi1 : nat -> StepFun a b,
- (forall n:nat,
+ forall (f:R -> R) (a b:R) (pr1:Riemann_integrable f a b)
+ (pr2:Riemann_integrable f b a), RiemannInt pr1 = - RiemannInt pr2.
+Proof.
+ intro f; intros; eapply UL_sequence.
+ unfold RiemannInt in |- *; case (RiemannInt_exists pr1 RinvN RinvN_cv);
+ intros; apply u.
+ unfold RiemannInt in |- *; case (RiemannInt_exists pr2 RinvN RinvN_cv);
+ intros;
+ cut
+ (exists psi1 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (f t - phi_sequence RinvN pr1 n t) <= psi1 n t) /\
+ Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
+ cut
+ (exists psi2 : nat -> StepFun b a,
+ (forall n:nat,
(forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (f t - phi_sequence RinvN pr1 n t) <= psi1 n t) /\
- Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
-cut
- (exists psi2 : nat -> StepFun b a,
- (forall n:nat,
- (forall t:R,
Rmin a b <= t /\ t <= Rmax a b ->
Rabs (f t - phi_sequence RinvN pr2 n t) <= psi2 n t) /\
- Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
-intros; elim H; clear H; intros psi2 H; elim H0; clear H0; intros psi1 H0;
- assert (H1 := RinvN_cv); unfold Un_cv in |- *; intros;
- assert (H3 : 0 < eps / 3).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-unfold Un_cv in H1; elim (H1 _ H3); clear H1; intros N0 H1;
- unfold R_dist in H1; simpl in H1;
- assert (H4 : forall n:nat, (n >= N0)%nat -> RinvN n < eps / 3).
-intros; assert (H5 := H1 _ H4);
- replace (pos (RinvN n)) with (Rabs (/ (INR n + 1) - 0));
- [ assumption
- | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
- left; apply (cond_pos (RinvN n)) ].
-clear H1; unfold Un_cv in u; elim (u _ H3); clear u; intros N1 H1;
- exists (max N0 N1); intros; unfold R_dist in |- *;
- apply Rle_lt_trans with
- (Rabs
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- RiemannInt_SF (phi_sequence RinvN pr2 n)) +
- Rabs (RiemannInt_SF (phi_sequence RinvN pr2 n) - x)).
-rewrite <- (Rabs_Ropp (RiemannInt_SF (phi_sequence RinvN pr2 n) - x));
- replace (RiemannInt_SF (phi_sequence RinvN pr1 n) - - x) with
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- RiemannInt_SF (phi_sequence RinvN pr2 n) +
- - (RiemannInt_SF (phi_sequence RinvN pr2 n) - x));
- [ apply Rabs_triang | ring ].
-replace eps with (2 * (eps / 3) + eps / 3).
-apply Rplus_lt_compat.
-rewrite (StepFun_P39 (phi_sequence RinvN pr2 n));
- replace
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- - RiemannInt_SF (mkStepFun (StepFun_P6 (pre (phi_sequence RinvN pr2 n)))))
- with
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- -1 *
- RiemannInt_SF (mkStepFun (StepFun_P6 (pre (phi_sequence RinvN pr2 n)))));
- [ idtac | ring ]; rewrite <- StepFun_P30.
-case (Rle_dec a b); intro.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P32
- (mkStepFun
- (StepFun_P28 (-1) (phi_sequence RinvN pr1 n)
- (mkStepFun (StepFun_P6 (pre (phi_sequence RinvN pr2 n))))))))).
-apply StepFun_P34; assumption.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P28 1 (psi1 n) (mkStepFun (StepFun_P6 (pre (psi2 n))))))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *; rewrite Rmult_1_l;
- apply Rle_trans with
- (Rabs (phi_sequence RinvN pr1 n x0 - f x0) +
- Rabs (f x0 - phi_sequence RinvN pr2 n x0)).
-replace (phi_sequence RinvN pr1 n x0 + -1 * phi_sequence RinvN pr2 n x0) with
- (phi_sequence RinvN pr1 n x0 - f x0 + (f x0 - phi_sequence RinvN pr2 n x0));
- [ apply Rabs_triang | ring ].
-assert (H7 : Rmin a b = a).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-assert (H8 : Rmax a b = b).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-apply Rplus_le_compat.
-elim (H0 n); intros; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H9;
- rewrite H7; rewrite H8.
-elim H6; intros; split; left; assumption.
-elim (H n); intros; apply H9; rewrite H7; rewrite H8.
-elim H6; intros; split; left; assumption.
-rewrite StepFun_P30; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat.
-elim (H0 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n)));
- [ apply RRle_abs
- | apply Rlt_trans with (pos (RinvN n));
- [ assumption
- | apply H4; unfold ge in |- *; apply le_trans with (max N0 N1);
- [ apply le_max_l | assumption ] ] ].
-elim (H n); intros;
- rewrite <-
- (Ropp_involutive (RiemannInt_SF (mkStepFun (StepFun_P6 (pre (psi2 n))))))
- ; rewrite <- StepFun_P39;
- apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n)));
- [ rewrite <- Rabs_Ropp; apply RRle_abs
- | apply Rlt_trans with (pos (RinvN n));
+ Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
+ intros; elim H; clear H; intros psi2 H; elim H0; clear H0; intros psi1 H0;
+ assert (H1 := RinvN_cv); unfold Un_cv in |- *; intros;
+ assert (H3 : 0 < eps / 3).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ unfold Un_cv in H1; elim (H1 _ H3); clear H1; intros N0 H1;
+ unfold R_dist in H1; simpl in H1;
+ assert (H4 : forall n:nat, (n >= N0)%nat -> RinvN n < eps / 3).
+ intros; assert (H5 := H1 _ H4);
+ replace (pos (RinvN n)) with (Rabs (/ (INR n + 1) - 0));
[ assumption
- | apply H4; unfold ge in |- *; apply le_trans with (max N0 N1);
- [ apply le_max_l | assumption ] ] ].
-assert (Hyp : b <= a).
-auto with real.
-rewrite StepFun_P39; rewrite Rabs_Ropp;
- apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
+ | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
+ left; apply (cond_pos (RinvN n)) ].
+ clear H1; unfold Un_cv in u; elim (u _ H3); clear u; intros N1 H1;
+ exists (max N0 N1); intros; unfold R_dist in |- *;
+ apply Rle_lt_trans with
+ (Rabs
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ RiemannInt_SF (phi_sequence RinvN pr2 n)) +
+ Rabs (RiemannInt_SF (phi_sequence RinvN pr2 n) - x)).
+ rewrite <- (Rabs_Ropp (RiemannInt_SF (phi_sequence RinvN pr2 n) - x));
+ replace (RiemannInt_SF (phi_sequence RinvN pr1 n) - - x) with
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ RiemannInt_SF (phi_sequence RinvN pr2 n) +
+ - (RiemannInt_SF (phi_sequence RinvN pr2 n) - x));
+ [ apply Rabs_triang | ring ].
+ replace eps with (2 * (eps / 3) + eps / 3).
+ apply Rplus_lt_compat.
+ rewrite (StepFun_P39 (phi_sequence RinvN pr2 n));
+ replace
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ - RiemannInt_SF (mkStepFun (StepFun_P6 (pre (phi_sequence RinvN pr2 n)))))
+ with
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ -1 *
+ RiemannInt_SF (mkStepFun (StepFun_P6 (pre (phi_sequence RinvN pr2 n)))));
+ [ idtac | ring ]; rewrite <- StepFun_P30.
+ case (Rle_dec a b); intro.
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
(StepFun_P32
- (mkStepFun
+ (mkStepFun
+ (StepFun_P28 (-1) (phi_sequence RinvN pr1 n)
+ (mkStepFun (StepFun_P6 (pre (phi_sequence RinvN pr2 n))))))))).
+ apply StepFun_P34; assumption.
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P28 1 (psi1 n) (mkStepFun (StepFun_P6 (pre (psi2 n))))))).
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *; rewrite Rmult_1_l;
+ apply Rle_trans with
+ (Rabs (phi_sequence RinvN pr1 n x0 - f x0) +
+ Rabs (f x0 - phi_sequence RinvN pr2 n x0)).
+ replace (phi_sequence RinvN pr1 n x0 + -1 * phi_sequence RinvN pr2 n x0) with
+ (phi_sequence RinvN pr1 n x0 - f x0 + (f x0 - phi_sequence RinvN pr2 n x0));
+ [ apply Rabs_triang | ring ].
+ assert (H7 : Rmin a b = a).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ assert (H8 : Rmax a b = b).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ apply Rplus_le_compat.
+ elim (H0 n); intros; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H9;
+ rewrite H7; rewrite H8.
+ elim H6; intros; split; left; assumption.
+ elim (H n); intros; apply H9; rewrite H7; rewrite H8.
+ elim H6; intros; split; left; assumption.
+ rewrite StepFun_P30; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat.
+ elim (H0 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n)));
+ [ apply RRle_abs
+ | apply Rlt_trans with (pos (RinvN n));
+ [ assumption
+ | apply H4; unfold ge in |- *; apply le_trans with (max N0 N1);
+ [ apply le_max_l | assumption ] ] ].
+ elim (H n); intros;
+ rewrite <-
+ (Ropp_involutive (RiemannInt_SF (mkStepFun (StepFun_P6 (pre (psi2 n))))))
+ ; rewrite <- StepFun_P39;
+ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n)));
+ [ rewrite <- Rabs_Ropp; apply RRle_abs
+ | apply Rlt_trans with (pos (RinvN n));
+ [ assumption
+ | apply H4; unfold ge in |- *; apply le_trans with (max N0 N1);
+ [ apply le_max_l | assumption ] ] ].
+ assert (Hyp : b <= a).
+ auto with real.
+ rewrite StepFun_P39; rewrite Rabs_Ropp;
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32
+ (mkStepFun
(StepFun_P6
- (StepFun_P28 (-1) (phi_sequence RinvN pr1 n)
- (mkStepFun (StepFun_P6 (pre (phi_sequence RinvN pr2 n)))))))))).
-apply StepFun_P34; assumption.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P28 1 (mkStepFun (StepFun_P6 (pre (psi1 n)))) (psi2 n)))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *; rewrite Rmult_1_l;
- apply Rle_trans with
- (Rabs (phi_sequence RinvN pr1 n x0 - f x0) +
- Rabs (f x0 - phi_sequence RinvN pr2 n x0)).
-replace (phi_sequence RinvN pr1 n x0 + -1 * phi_sequence RinvN pr2 n x0) with
- (phi_sequence RinvN pr1 n x0 - f x0 + (f x0 - phi_sequence RinvN pr2 n x0));
- [ apply Rabs_triang | ring ].
-assert (H7 : Rmin a b = b).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ elim n0; assumption | reflexivity ].
-assert (H8 : Rmax a b = a).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ elim n0; assumption | reflexivity ].
-apply Rplus_le_compat.
-elim (H0 n); intros; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H9;
- rewrite H7; rewrite H8.
-elim H6; intros; split; left; assumption.
-elim (H n); intros; apply H9; rewrite H7; rewrite H8; elim H6; intros; split;
- left; assumption.
-rewrite StepFun_P30; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat.
-elim (H0 n); intros;
- rewrite <-
- (Ropp_involutive (RiemannInt_SF (mkStepFun (StepFun_P6 (pre (psi1 n))))))
- ; rewrite <- StepFun_P39;
- apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n)));
- [ rewrite <- Rabs_Ropp; apply RRle_abs
- | apply Rlt_trans with (pos (RinvN n));
- [ assumption
- | apply H4; unfold ge in |- *; apply le_trans with (max N0 N1);
- [ apply le_max_l | assumption ] ] ].
-elim (H n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n)));
- [ apply RRle_abs
- | apply Rlt_trans with (pos (RinvN n));
- [ assumption
- | apply H4; unfold ge in |- *; apply le_trans with (max N0 N1);
- [ apply le_max_l | assumption ] ] ].
-unfold R_dist in H1; apply H1; unfold ge in |- *;
- apply le_trans with (max N0 N1); [ apply le_max_r | assumption ].
-apply Rmult_eq_reg_l with 3;
- [ unfold Rdiv in |- *; rewrite Rmult_plus_distr_l;
- do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | discrR ]
- | discrR ].
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
- rewrite Rmin_comm; rewrite RmaxSym;
- apply (projT2 (phi_sequence_prop RinvN pr2 n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr1 n)).
+ (StepFun_P28 (-1) (phi_sequence RinvN pr1 n)
+ (mkStepFun (StepFun_P6 (pre (phi_sequence RinvN pr2 n)))))))))).
+ apply StepFun_P34; assumption.
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P28 1 (mkStepFun (StepFun_P6 (pre (psi1 n)))) (psi2 n)))).
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *; rewrite Rmult_1_l;
+ apply Rle_trans with
+ (Rabs (phi_sequence RinvN pr1 n x0 - f x0) +
+ Rabs (f x0 - phi_sequence RinvN pr2 n x0)).
+ replace (phi_sequence RinvN pr1 n x0 + -1 * phi_sequence RinvN pr2 n x0) with
+ (phi_sequence RinvN pr1 n x0 - f x0 + (f x0 - phi_sequence RinvN pr2 n x0));
+ [ apply Rabs_triang | ring ].
+ assert (H7 : Rmin a b = b).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ elim n0; assumption | reflexivity ].
+ assert (H8 : Rmax a b = a).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ elim n0; assumption | reflexivity ].
+ apply Rplus_le_compat.
+ elim (H0 n); intros; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H9;
+ rewrite H7; rewrite H8.
+ elim H6; intros; split; left; assumption.
+ elim (H n); intros; apply H9; rewrite H7; rewrite H8; elim H6; intros; split;
+ left; assumption.
+ rewrite StepFun_P30; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat.
+ elim (H0 n); intros;
+ rewrite <-
+ (Ropp_involutive (RiemannInt_SF (mkStepFun (StepFun_P6 (pre (psi1 n))))))
+ ; rewrite <- StepFun_P39;
+ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n)));
+ [ rewrite <- Rabs_Ropp; apply RRle_abs
+ | apply Rlt_trans with (pos (RinvN n));
+ [ assumption
+ | apply H4; unfold ge in |- *; apply le_trans with (max N0 N1);
+ [ apply le_max_l | assumption ] ] ].
+ elim (H n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n)));
+ [ apply RRle_abs
+ | apply Rlt_trans with (pos (RinvN n));
+ [ assumption
+ | apply H4; unfold ge in |- *; apply le_trans with (max N0 N1);
+ [ apply le_max_l | assumption ] ] ].
+ unfold R_dist in H1; apply H1; unfold ge in |- *;
+ apply le_trans with (max N0 N1); [ apply le_max_r | assumption ].
+ apply Rmult_eq_reg_l with 3;
+ [ unfold Rdiv in |- *; rewrite Rmult_plus_distr_l;
+ do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | discrR ]
+ | discrR ].
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
+ rewrite Rmin_comm; rewrite RmaxSym;
+ apply (projT2 (phi_sequence_prop RinvN pr2 n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr1 n)).
Qed.
Lemma RiemannInt_P9 :
- forall (f:R -> R) (a:R) (pr:Riemann_integrable f a a), RiemannInt pr = 0.
-intros; assert (H := RiemannInt_P8 pr pr); apply Rmult_eq_reg_l with 2;
- [ rewrite Rmult_0_r; rewrite double; pattern (RiemannInt pr) at 2 in |- *;
- rewrite H; apply Rplus_opp_r
- | discrR ].
+ forall (f:R -> R) (a:R) (pr:Riemann_integrable f a a), RiemannInt pr = 0.
+Proof.
+ intros; assert (H := RiemannInt_P8 pr pr); apply Rmult_eq_reg_l with 2;
+ [ rewrite Rmult_0_r; rewrite double; pattern (RiemannInt pr) at 2 in |- *;
+ rewrite H; apply Rplus_opp_r
+ | discrR ].
Qed.
Lemma Req_EM_T : forall r1 r2:R, {r1 = r2} + {r1 <> r2}.
-intros; elim (total_order_T r1 r2); intros;
- [ elim a; intro;
- [ right; red in |- *; intro; rewrite H in a0; elim (Rlt_irrefl r2 a0)
- | left; assumption ]
- | right; red in |- *; intro; rewrite H in b; elim (Rlt_irrefl r2 b) ].
+Proof.
+ intros; elim (total_order_T r1 r2); intros;
+ [ elim a; intro;
+ [ right; red in |- *; intro; rewrite H in a0; elim (Rlt_irrefl r2 a0)
+ | left; assumption ]
+ | right; red in |- *; intro; rewrite H in b; elim (Rlt_irrefl r2 b) ].
Qed.
(* L1([a,b]) is a vectorial space *)
Lemma RiemannInt_P10 :
- forall (f g:R -> R) (a b l:R),
- Riemann_integrable f a b ->
- Riemann_integrable g a b ->
- Riemann_integrable (fun x:R => f x + l * g x) a b.
-unfold Riemann_integrable in |- *; intros f g; intros; case (Req_EM_T l 0);
- intro.
-elim (X eps); intros; split with x; elim p; intros; split with x0; elim p0;
- intros; split; try assumption; rewrite e; intros;
- rewrite Rmult_0_l; rewrite Rplus_0_r; apply H; assumption.
-assert (H : 0 < eps / 2).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ apply (cond_pos eps) | apply Rinv_0_lt_compat; prove_sup0 ].
-assert (H0 : 0 < eps / (2 * Rabs l)).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ apply (cond_pos eps)
- | apply Rinv_0_lt_compat; apply Rmult_lt_0_compat;
- [ prove_sup0 | apply Rabs_pos_lt; assumption ] ].
-elim (X (mkposreal _ H)); intros; elim (X0 (mkposreal _ H0)); intros;
- split with (mkStepFun (StepFun_P28 l x x0)); elim p0;
- elim p; intros; split with (mkStepFun (StepFun_P28 (Rabs l) x1 x2));
- elim p1; elim p2; clear p1 p2 p0 p X X0; intros; split.
-intros; simpl in |- *;
- apply Rle_trans with (Rabs (f t - x t) + Rabs (l * (g t - x0 t))).
-replace (f t + l * g t - (x t + l * x0 t)) with
- (f t - x t + l * (g t - x0 t)); [ apply Rabs_triang | ring ].
-apply Rplus_le_compat;
- [ apply H3; assumption
- | rewrite Rabs_mult; apply Rmult_le_compat_l;
- [ apply Rabs_pos | apply H1; assumption ] ].
-rewrite StepFun_P30;
- apply Rle_lt_trans with
- (Rabs (RiemannInt_SF x1) + Rabs (Rabs l * RiemannInt_SF x2)).
-apply Rabs_triang.
-rewrite (double_var eps); apply Rplus_lt_compat.
-apply H4.
-rewrite Rabs_mult; rewrite Rabs_Rabsolu; apply Rmult_lt_reg_l with (/ Rabs l).
-apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption.
-rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym;
- [ rewrite Rmult_1_l;
- replace (/ Rabs l * (eps / 2)) with (eps / (2 * Rabs l));
- [ apply H2
- | unfold Rdiv in |- *; rewrite Rinv_mult_distr;
- [ ring | discrR | apply Rabs_no_R0; assumption ] ]
- | apply Rabs_no_R0; assumption ].
+ forall (f g:R -> R) (a b l:R),
+ Riemann_integrable f a b ->
+ Riemann_integrable g a b ->
+ Riemann_integrable (fun x:R => f x + l * g x) a b.
+Proof.
+ unfold Riemann_integrable in |- *; intros f g; intros; case (Req_EM_T l 0);
+ intro.
+ elim (X eps); intros; split with x; elim p; intros; split with x0; elim p0;
+ intros; split; try assumption; rewrite e; intros;
+ rewrite Rmult_0_l; rewrite Rplus_0_r; apply H; assumption.
+ assert (H : 0 < eps / 2).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ apply (cond_pos eps) | apply Rinv_0_lt_compat; prove_sup0 ].
+ assert (H0 : 0 < eps / (2 * Rabs l)).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ apply (cond_pos eps)
+ | apply Rinv_0_lt_compat; apply Rmult_lt_0_compat;
+ [ prove_sup0 | apply Rabs_pos_lt; assumption ] ].
+ elim (X (mkposreal _ H)); intros; elim (X0 (mkposreal _ H0)); intros;
+ split with (mkStepFun (StepFun_P28 l x x0)); elim p0;
+ elim p; intros; split with (mkStepFun (StepFun_P28 (Rabs l) x1 x2));
+ elim p1; elim p2; clear p1 p2 p0 p X X0; intros; split.
+ intros; simpl in |- *;
+ apply Rle_trans with (Rabs (f t - x t) + Rabs (l * (g t - x0 t))).
+ replace (f t + l * g t - (x t + l * x0 t)) with
+ (f t - x t + l * (g t - x0 t)); [ apply Rabs_triang | ring ].
+ apply Rplus_le_compat;
+ [ apply H3; assumption
+ | rewrite Rabs_mult; apply Rmult_le_compat_l;
+ [ apply Rabs_pos | apply H1; assumption ] ].
+ rewrite StepFun_P30;
+ apply Rle_lt_trans with
+ (Rabs (RiemannInt_SF x1) + Rabs (Rabs l * RiemannInt_SF x2)).
+ apply Rabs_triang.
+ rewrite (double_var eps); apply Rplus_lt_compat.
+ apply H4.
+ rewrite Rabs_mult; rewrite Rabs_Rabsolu; apply Rmult_lt_reg_l with (/ Rabs l).
+ apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption.
+ rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym;
+ [ rewrite Rmult_1_l;
+ replace (/ Rabs l * (eps / 2)) with (eps / (2 * Rabs l));
+ [ apply H2
+ | unfold Rdiv in |- *; rewrite Rinv_mult_distr;
+ [ ring | discrR | apply Rabs_no_R0; assumption ] ]
+ | apply Rabs_no_R0; assumption ].
Qed.
Lemma RiemannInt_P11 :
- forall (f:R -> R) (a b l:R) (un:nat -> posreal)
- (phi1 phi2 psi1 psi2:nat -> StepFun a b),
- Un_cv un 0 ->
- (forall n:nat,
+ forall (f:R -> R) (a b l:R) (un:nat -> posreal)
+ (phi1 phi2 psi1 psi2:nat -> StepFun a b),
+ Un_cv un 0 ->
+ (forall n:nat,
(forall t:R,
- Rmin a b <= t <= Rmax a b -> Rabs (f t - phi1 n t) <= psi1 n t) /\
+ Rmin a b <= t <= Rmax a b -> Rabs (f t - phi1 n t) <= psi1 n t) /\
Rabs (RiemannInt_SF (psi1 n)) < un n) ->
- (forall n:nat,
+ (forall n:nat,
(forall t:R,
- Rmin a b <= t <= Rmax a b -> Rabs (f t - phi2 n t) <= psi2 n t) /\
+ Rmin a b <= t <= Rmax a b -> Rabs (f t - phi2 n t) <= psi2 n t) /\
Rabs (RiemannInt_SF (psi2 n)) < un n) ->
- Un_cv (fun N:nat => RiemannInt_SF (phi1 N)) l ->
- Un_cv (fun N:nat => RiemannInt_SF (phi2 N)) l.
-unfold Un_cv in |- *; intro f; intros; intros.
-case (Rle_dec a b); intro Hyp.
-assert (H4 : 0 < eps / 3).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H _ H4); clear H; intros N0 H.
-elim (H2 _ H4); clear H2; intros N1 H2.
-set (N := max N0 N1); exists N; intros; unfold R_dist in |- *.
-apply Rle_lt_trans with
- (Rabs (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n)) +
- Rabs (RiemannInt_SF (phi1 n) - l)).
-replace (RiemannInt_SF (phi2 n) - l) with
- (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n) +
- (RiemannInt_SF (phi1 n) - l)); [ apply Rabs_triang | ring ].
-replace eps with (2 * (eps / 3) + eps / 3).
-apply Rplus_lt_compat.
-replace (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n)) with
- (RiemannInt_SF (phi2 n) + -1 * RiemannInt_SF (phi1 n));
- [ idtac | ring ].
-rewrite <- StepFun_P30.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (phi2 n) (phi1 n)))))).
-apply StepFun_P34; assumption.
-apply Rle_lt_trans with
- (RiemannInt_SF (mkStepFun (StepFun_P28 1 (psi1 n) (psi2 n)))).
-apply StepFun_P37; try assumption; intros; simpl in |- *; rewrite Rmult_1_l.
-apply Rle_trans with (Rabs (phi2 n x - f x) + Rabs (f x - phi1 n x)).
-replace (phi2 n x + -1 * phi1 n x) with (phi2 n x - f x + (f x - phi1 n x));
- [ apply Rabs_triang | ring ].
-rewrite (Rplus_comm (psi1 n x)); apply Rplus_le_compat.
-rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; elim (H1 n); intros; apply H7.
-assert (H10 : Rmin a b = a).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-assert (H11 : Rmax a b = b).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-rewrite H10; rewrite H11; elim H6; intros; split; left; assumption.
-elim (H0 n); intros; apply H7; assert (H10 : Rmin a b = a).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-assert (H11 : Rmax a b = b).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-rewrite H10; rewrite H11; elim H6; intros; split; left; assumption.
-rewrite StepFun_P30; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat.
-apply Rlt_trans with (pos (un n)).
-elim (H0 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n))).
-apply RRle_abs.
-assumption.
-replace (pos (un n)) with (R_dist (un n) 0).
-apply H; unfold ge in |- *; apply le_trans with N; try assumption.
-unfold N in |- *; apply le_max_l.
-unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
- rewrite Rplus_0_r; apply Rabs_right.
-apply Rle_ge; left; apply (cond_pos (un n)).
-apply Rlt_trans with (pos (un n)).
-elim (H1 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n))).
-apply RRle_abs; assumption.
-assumption.
-replace (pos (un n)) with (R_dist (un n) 0).
-apply H; unfold ge in |- *; apply le_trans with N; try assumption;
- unfold N in |- *; apply le_max_l.
-unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
- rewrite Rplus_0_r; apply Rabs_right; apply Rle_ge;
- left; apply (cond_pos (un n)).
-unfold R_dist in H2; apply H2; unfold ge in |- *; apply le_trans with N;
- try assumption; unfold N in |- *; apply le_max_r.
-apply Rmult_eq_reg_l with 3;
- [ unfold Rdiv in |- *; rewrite Rmult_plus_distr_l;
- do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | discrR ]
- | discrR ].
-assert (H4 : 0 < eps / 3).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H _ H4); clear H; intros N0 H.
-elim (H2 _ H4); clear H2; intros N1 H2.
-set (N := max N0 N1); exists N; intros; unfold R_dist in |- *.
-apply Rle_lt_trans with
- (Rabs (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n)) +
- Rabs (RiemannInt_SF (phi1 n) - l)).
-replace (RiemannInt_SF (phi2 n) - l) with
- (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n) +
- (RiemannInt_SF (phi1 n) - l)); [ apply Rabs_triang | ring ].
-assert (Hyp_b : b <= a).
-auto with real.
-replace eps with (2 * (eps / 3) + eps / 3).
-apply Rplus_lt_compat.
-replace (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n)) with
- (RiemannInt_SF (phi2 n) + -1 * RiemannInt_SF (phi1 n));
- [ idtac | ring ].
-rewrite <- StepFun_P30.
-rewrite StepFun_P39.
-rewrite Rabs_Ropp.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P32
+ Un_cv (fun N:nat => RiemannInt_SF (phi1 N)) l ->
+ Un_cv (fun N:nat => RiemannInt_SF (phi2 N)) l.
+Proof.
+ unfold Un_cv in |- *; intro f; intros; intros.
+ case (Rle_dec a b); intro Hyp.
+ assert (H4 : 0 < eps / 3).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H _ H4); clear H; intros N0 H.
+ elim (H2 _ H4); clear H2; intros N1 H2.
+ set (N := max N0 N1); exists N; intros; unfold R_dist in |- *.
+ apply Rle_lt_trans with
+ (Rabs (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n)) +
+ Rabs (RiemannInt_SF (phi1 n) - l)).
+ replace (RiemannInt_SF (phi2 n) - l) with
+ (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n) +
+ (RiemannInt_SF (phi1 n) - l)); [ apply Rabs_triang | ring ].
+ replace eps with (2 * (eps / 3) + eps / 3).
+ apply Rplus_lt_compat.
+ replace (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n)) with
+ (RiemannInt_SF (phi2 n) + -1 * RiemannInt_SF (phi1 n));
+ [ idtac | ring ].
+ rewrite <- StepFun_P30.
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (phi2 n) (phi1 n)))))).
+ apply StepFun_P34; assumption.
+ apply Rle_lt_trans with
+ (RiemannInt_SF (mkStepFun (StepFun_P28 1 (psi1 n) (psi2 n)))).
+ apply StepFun_P37; try assumption; intros; simpl in |- *; rewrite Rmult_1_l.
+ apply Rle_trans with (Rabs (phi2 n x - f x) + Rabs (f x - phi1 n x)).
+ replace (phi2 n x + -1 * phi1 n x) with (phi2 n x - f x + (f x - phi1 n x));
+ [ apply Rabs_triang | ring ].
+ rewrite (Rplus_comm (psi1 n x)); apply Rplus_le_compat.
+ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; elim (H1 n); intros; apply H7.
+ assert (H10 : Rmin a b = a).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ assert (H11 : Rmax a b = b).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ rewrite H10; rewrite H11; elim H6; intros; split; left; assumption.
+ elim (H0 n); intros; apply H7; assert (H10 : Rmin a b = a).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ assert (H11 : Rmax a b = b).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ rewrite H10; rewrite H11; elim H6; intros; split; left; assumption.
+ rewrite StepFun_P30; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat.
+ apply Rlt_trans with (pos (un n)).
+ elim (H0 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n))).
+ apply RRle_abs.
+ assumption.
+ replace (pos (un n)) with (R_dist (un n) 0).
+ apply H; unfold ge in |- *; apply le_trans with N; try assumption.
+ unfold N in |- *; apply le_max_l.
+ unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
+ rewrite Rplus_0_r; apply Rabs_right.
+ apply Rle_ge; left; apply (cond_pos (un n)).
+ apply Rlt_trans with (pos (un n)).
+ elim (H1 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n))).
+ apply RRle_abs; assumption.
+ assumption.
+ replace (pos (un n)) with (R_dist (un n) 0).
+ apply H; unfold ge in |- *; apply le_trans with N; try assumption;
+ unfold N in |- *; apply le_max_l.
+ unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
+ rewrite Rplus_0_r; apply Rabs_right; apply Rle_ge;
+ left; apply (cond_pos (un n)).
+ unfold R_dist in H2; apply H2; unfold ge in |- *; apply le_trans with N;
+ try assumption; unfold N in |- *; apply le_max_r.
+ apply Rmult_eq_reg_l with 3;
+ [ unfold Rdiv in |- *; rewrite Rmult_plus_distr_l;
+ do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | discrR ]
+ | discrR ].
+ assert (H4 : 0 < eps / 3).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H _ H4); clear H; intros N0 H.
+ elim (H2 _ H4); clear H2; intros N1 H2.
+ set (N := max N0 N1); exists N; intros; unfold R_dist in |- *.
+ apply Rle_lt_trans with
+ (Rabs (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n)) +
+ Rabs (RiemannInt_SF (phi1 n) - l)).
+ replace (RiemannInt_SF (phi2 n) - l) with
+ (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n) +
+ (RiemannInt_SF (phi1 n) - l)); [ apply Rabs_triang | ring ].
+ assert (Hyp_b : b <= a).
+ auto with real.
+ replace eps with (2 * (eps / 3) + eps / 3).
+ apply Rplus_lt_compat.
+ replace (RiemannInt_SF (phi2 n) - RiemannInt_SF (phi1 n)) with
+ (RiemannInt_SF (phi2 n) + -1 * RiemannInt_SF (phi1 n));
+ [ idtac | ring ].
+ rewrite <- StepFun_P30.
+ rewrite StepFun_P39.
+ rewrite Rabs_Ropp.
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32
(mkStepFun
- (StepFun_P6
- (pre (mkStepFun (StepFun_P28 (-1) (phi2 n) (phi1 n))))))))).
-apply StepFun_P34; try assumption.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P6 (pre (mkStepFun (StepFun_P28 1 (psi1 n) (psi2 n))))))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *; rewrite Rmult_1_l.
-apply Rle_trans with (Rabs (phi2 n x - f x) + Rabs (f x - phi1 n x)).
-replace (phi2 n x + -1 * phi1 n x) with (phi2 n x - f x + (f x - phi1 n x));
- [ apply Rabs_triang | ring ].
-rewrite (Rplus_comm (psi1 n x)); apply Rplus_le_compat.
-rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; elim (H1 n); intros; apply H7.
-assert (H10 : Rmin a b = b).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ elim Hyp; assumption | reflexivity ].
-assert (H11 : Rmax a b = a).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ elim Hyp; assumption | reflexivity ].
-rewrite H10; rewrite H11; elim H6; intros; split; left; assumption.
-elim (H0 n); intros; apply H7; assert (H10 : Rmin a b = b).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ elim Hyp; assumption | reflexivity ].
-assert (H11 : Rmax a b = a).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ elim Hyp; assumption | reflexivity ].
-rewrite H10; rewrite H11; elim H6; intros; split; left; assumption.
-rewrite <-
- (Ropp_involutive
+ (StepFun_P6
+ (pre (mkStepFun (StepFun_P28 (-1) (phi2 n) (phi1 n))))))))).
+ apply StepFun_P34; try assumption.
+ apply Rle_lt_trans with
(RiemannInt_SF
- (mkStepFun
+ (mkStepFun
+ (StepFun_P6 (pre (mkStepFun (StepFun_P28 1 (psi1 n) (psi2 n))))))).
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *; rewrite Rmult_1_l.
+ apply Rle_trans with (Rabs (phi2 n x - f x) + Rabs (f x - phi1 n x)).
+ replace (phi2 n x + -1 * phi1 n x) with (phi2 n x - f x + (f x - phi1 n x));
+ [ apply Rabs_triang | ring ].
+ rewrite (Rplus_comm (psi1 n x)); apply Rplus_le_compat.
+ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; elim (H1 n); intros; apply H7.
+ assert (H10 : Rmin a b = b).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ elim Hyp; assumption | reflexivity ].
+ assert (H11 : Rmax a b = a).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ elim Hyp; assumption | reflexivity ].
+ rewrite H10; rewrite H11; elim H6; intros; split; left; assumption.
+ elim (H0 n); intros; apply H7; assert (H10 : Rmin a b = b).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ elim Hyp; assumption | reflexivity ].
+ assert (H11 : Rmax a b = a).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ elim Hyp; assumption | reflexivity ].
+ rewrite H10; rewrite H11; elim H6; intros; split; left; assumption.
+ rewrite <-
+ (Ropp_involutive
+ (RiemannInt_SF
+ (mkStepFun
(StepFun_P6 (pre (mkStepFun (StepFun_P28 1 (psi1 n) (psi2 n))))))))
- .
-rewrite <- StepFun_P39.
-rewrite StepFun_P30.
-rewrite Rmult_1_l; rewrite double.
-rewrite Ropp_plus_distr; apply Rplus_lt_compat.
-apply Rlt_trans with (pos (un n)).
-elim (H0 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n))).
-rewrite <- Rabs_Ropp; apply RRle_abs.
-assumption.
-replace (pos (un n)) with (R_dist (un n) 0).
-apply H; unfold ge in |- *; apply le_trans with N; try assumption.
-unfold N in |- *; apply le_max_l.
-unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
- rewrite Rplus_0_r; apply Rabs_right.
-apply Rle_ge; left; apply (cond_pos (un n)).
-apply Rlt_trans with (pos (un n)).
-elim (H1 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n))).
-rewrite <- Rabs_Ropp; apply RRle_abs; assumption.
-assumption.
-replace (pos (un n)) with (R_dist (un n) 0).
-apply H; unfold ge in |- *; apply le_trans with N; try assumption;
- unfold N in |- *; apply le_max_l.
-unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
- rewrite Rplus_0_r; apply Rabs_right; apply Rle_ge;
- left; apply (cond_pos (un n)).
-unfold R_dist in H2; apply H2; unfold ge in |- *; apply le_trans with N;
- try assumption; unfold N in |- *; apply le_max_r.
-apply Rmult_eq_reg_l with 3;
- [ unfold Rdiv in |- *; rewrite Rmult_plus_distr_l;
- do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | discrR ]
- | discrR ].
+ .
+ rewrite <- StepFun_P39.
+ rewrite StepFun_P30.
+ rewrite Rmult_1_l; rewrite double.
+ rewrite Ropp_plus_distr; apply Rplus_lt_compat.
+ apply Rlt_trans with (pos (un n)).
+ elim (H0 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n))).
+ rewrite <- Rabs_Ropp; apply RRle_abs.
+ assumption.
+ replace (pos (un n)) with (R_dist (un n) 0).
+ apply H; unfold ge in |- *; apply le_trans with N; try assumption.
+ unfold N in |- *; apply le_max_l.
+ unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
+ rewrite Rplus_0_r; apply Rabs_right.
+ apply Rle_ge; left; apply (cond_pos (un n)).
+ apply Rlt_trans with (pos (un n)).
+ elim (H1 n); intros; apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n))).
+ rewrite <- Rabs_Ropp; apply RRle_abs; assumption.
+ assumption.
+ replace (pos (un n)) with (R_dist (un n) 0).
+ apply H; unfold ge in |- *; apply le_trans with N; try assumption;
+ unfold N in |- *; apply le_max_l.
+ unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
+ rewrite Rplus_0_r; apply Rabs_right; apply Rle_ge;
+ left; apply (cond_pos (un n)).
+ unfold R_dist in H2; apply H2; unfold ge in |- *; apply le_trans with N;
+ try assumption; unfold N in |- *; apply le_max_r.
+ apply Rmult_eq_reg_l with 3;
+ [ unfold Rdiv in |- *; rewrite Rmult_plus_distr_l;
+ do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | discrR ]
+ | discrR ].
Qed.
Lemma RiemannInt_P12 :
- forall (f g:R -> R) (a b l:R) (pr1:Riemann_integrable f a b)
- (pr2:Riemann_integrable g a b)
- (pr3:Riemann_integrable (fun x:R => f x + l * g x) a b),
- a <= b -> RiemannInt pr3 = RiemannInt pr1 + l * RiemannInt pr2.
-intro f; intros; case (Req_dec l 0); intro.
-pattern l at 2 in |- *; rewrite H0; rewrite Rmult_0_l; rewrite Rplus_0_r;
- unfold RiemannInt in |- *; case (RiemannInt_exists pr3 RinvN RinvN_cv);
- case (RiemannInt_exists pr1 RinvN RinvN_cv); intros;
- eapply UL_sequence;
- [ apply u0
- | set (psi1 := fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n));
- set (psi2 := fun n:nat => projT1 (phi_sequence_prop RinvN pr3 n));
- apply RiemannInt_P11 with f RinvN (phi_sequence RinvN pr1) psi1 psi2;
- [ apply RinvN_cv
- | intro; apply (projT2 (phi_sequence_prop RinvN pr1 n))
- | intro;
- assert
- (H1 :
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (f t + l * g t - phi_sequence RinvN pr3 n t) <= psi2 n t) /\
- Rabs (RiemannInt_SF (psi2 n)) < RinvN n);
- [ apply (projT2 (phi_sequence_prop RinvN pr3 n))
- | elim H1; intros; split; try assumption; intros;
- replace (f t) with (f t + l * g t);
- [ apply H2; assumption | rewrite H0; ring ] ]
- | assumption ] ].
-eapply UL_sequence.
-unfold RiemannInt in |- *; case (RiemannInt_exists pr3 RinvN RinvN_cv);
- intros; apply u.
-unfold Un_cv in |- *; intros; unfold RiemannInt in |- *;
- case (RiemannInt_exists pr1 RinvN RinvN_cv);
- case (RiemannInt_exists pr2 RinvN RinvN_cv); unfold Un_cv in |- *;
- intros; assert (H2 : 0 < eps / 5).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (u0 _ H2); clear u0; intros N0 H3; assert (H4 := RinvN_cv);
- unfold Un_cv in H4; elim (H4 _ H2); clear H4 H2; intros N1 H4;
- assert (H5 : 0 < eps / (5 * Rabs l)).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption
- | apply Rinv_0_lt_compat; apply Rmult_lt_0_compat;
- [ prove_sup0 | apply Rabs_pos_lt; assumption ] ].
-elim (u _ H5); clear u; intros N2 H6; assert (H7 := RinvN_cv);
- unfold Un_cv in H7; elim (H7 _ H5); clear H7 H5; intros N3 H5;
- unfold R_dist in H3, H4, H5, H6; set (N := max (max N0 N1) (max N2 N3)).
-assert (H7 : forall n:nat, (n >= N1)%nat -> RinvN n < eps / 5).
-intros; replace (pos (RinvN n)) with (Rabs (RinvN n - 0));
- [ unfold RinvN in |- *; apply H4; assumption
- | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
- left; apply (cond_pos (RinvN n)) ].
-clear H4; assert (H4 := H7); clear H7;
- assert (H7 : forall n:nat, (n >= N3)%nat -> RinvN n < eps / (5 * Rabs l)).
-intros; replace (pos (RinvN n)) with (Rabs (RinvN n - 0));
- [ unfold RinvN in |- *; apply H5; assumption
- | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
- left; apply (cond_pos (RinvN n)) ].
-clear H5; assert (H5 := H7); clear H7; exists N; intros;
- unfold R_dist in |- *.
-apply Rle_lt_trans with
- (Rabs
- (RiemannInt_SF (phi_sequence RinvN pr3 n) -
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- l * RiemannInt_SF (phi_sequence RinvN pr2 n))) +
- Rabs (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0) +
- Rabs l * Rabs (RiemannInt_SF (phi_sequence RinvN pr2 n) - x)).
-apply Rle_trans with
- (Rabs
- (RiemannInt_SF (phi_sequence RinvN pr3 n) -
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- l * RiemannInt_SF (phi_sequence RinvN pr2 n))) +
- Rabs
- (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0 +
- l * (RiemannInt_SF (phi_sequence RinvN pr2 n) - x))).
-replace (RiemannInt_SF (phi_sequence RinvN pr3 n) - (x0 + l * x)) with
- (RiemannInt_SF (phi_sequence RinvN pr3 n) -
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- l * RiemannInt_SF (phi_sequence RinvN pr2 n)) +
- (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0 +
- l * (RiemannInt_SF (phi_sequence RinvN pr2 n) - x)));
- [ apply Rabs_triang | ring ].
-rewrite Rplus_assoc; apply Rplus_le_compat_l; rewrite <- Rabs_mult;
- replace
- (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0 +
- l * (RiemannInt_SF (phi_sequence RinvN pr2 n) - x)) with
- (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0 +
- l * (RiemannInt_SF (phi_sequence RinvN pr2 n) - x));
- [ apply Rabs_triang | ring ].
-replace eps with (3 * (eps / 5) + eps / 5 + eps / 5).
-repeat apply Rplus_lt_compat.
-assert
- (H7 :
- exists psi1 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (f t - phi_sequence RinvN pr1 n t) <= psi1 n t) /\
- Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr1 n0)).
-assert
- (H8 :
- exists psi2 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (g t - phi_sequence RinvN pr2 n t) <= psi2 n t) /\
- Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr2 n0)).
-assert
- (H9 :
- exists psi3 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (f t + l * g t - phi_sequence RinvN pr3 n t) <= psi3 n t) /\
- Rabs (RiemannInt_SF (psi3 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr3 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr3 n0)).
-elim H7; clear H7; intros psi1 H7; elim H8; clear H8; intros psi2 H8; elim H9;
- clear H9; intros psi3 H9;
- replace
+ forall (f g:R -> R) (a b l:R) (pr1:Riemann_integrable f a b)
+ (pr2:Riemann_integrable g a b)
+ (pr3:Riemann_integrable (fun x:R => f x + l * g x) a b),
+ a <= b -> RiemannInt pr3 = RiemannInt pr1 + l * RiemannInt pr2.
+Proof.
+ intro f; intros; case (Req_dec l 0); intro.
+ pattern l at 2 in |- *; rewrite H0; rewrite Rmult_0_l; rewrite Rplus_0_r;
+ unfold RiemannInt in |- *; case (RiemannInt_exists pr3 RinvN RinvN_cv);
+ case (RiemannInt_exists pr1 RinvN RinvN_cv); intros;
+ eapply UL_sequence;
+ [ apply u0
+ | set (psi1 := fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n));
+ set (psi2 := fun n:nat => projT1 (phi_sequence_prop RinvN pr3 n));
+ apply RiemannInt_P11 with f RinvN (phi_sequence RinvN pr1) psi1 psi2;
+ [ apply RinvN_cv
+ | intro; apply (projT2 (phi_sequence_prop RinvN pr1 n))
+ | intro;
+ assert
+ (H1 :
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (f t + l * g t - phi_sequence RinvN pr3 n t) <= psi2 n t) /\
+ Rabs (RiemannInt_SF (psi2 n)) < RinvN n);
+ [ apply (projT2 (phi_sequence_prop RinvN pr3 n))
+ | elim H1; intros; split; try assumption; intros;
+ replace (f t) with (f t + l * g t);
+ [ apply H2; assumption | rewrite H0; ring ] ]
+ | assumption ] ].
+ eapply UL_sequence.
+ unfold RiemannInt in |- *; case (RiemannInt_exists pr3 RinvN RinvN_cv);
+ intros; apply u.
+ unfold Un_cv in |- *; intros; unfold RiemannInt in |- *;
+ case (RiemannInt_exists pr1 RinvN RinvN_cv);
+ case (RiemannInt_exists pr2 RinvN RinvN_cv); unfold Un_cv in |- *;
+ intros; assert (H2 : 0 < eps / 5).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (u0 _ H2); clear u0; intros N0 H3; assert (H4 := RinvN_cv);
+ unfold Un_cv in H4; elim (H4 _ H2); clear H4 H2; intros N1 H4;
+ assert (H5 : 0 < eps / (5 * Rabs l)).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption
+ | apply Rinv_0_lt_compat; apply Rmult_lt_0_compat;
+ [ prove_sup0 | apply Rabs_pos_lt; assumption ] ].
+ elim (u _ H5); clear u; intros N2 H6; assert (H7 := RinvN_cv);
+ unfold Un_cv in H7; elim (H7 _ H5); clear H7 H5; intros N3 H5;
+ unfold R_dist in H3, H4, H5, H6; set (N := max (max N0 N1) (max N2 N3)).
+ assert (H7 : forall n:nat, (n >= N1)%nat -> RinvN n < eps / 5).
+ intros; replace (pos (RinvN n)) with (Rabs (RinvN n - 0));
+ [ unfold RinvN in |- *; apply H4; assumption
+ | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
+ left; apply (cond_pos (RinvN n)) ].
+ clear H4; assert (H4 := H7); clear H7;
+ assert (H7 : forall n:nat, (n >= N3)%nat -> RinvN n < eps / (5 * Rabs l)).
+ intros; replace (pos (RinvN n)) with (Rabs (RinvN n - 0));
+ [ unfold RinvN in |- *; apply H5; assumption
+ | unfold Rminus in |- *; rewrite Ropp_0; rewrite Rplus_0_r; apply Rabs_right;
+ left; apply (cond_pos (RinvN n)) ].
+ clear H5; assert (H5 := H7); clear H7; exists N; intros;
+ unfold R_dist in |- *.
+ apply Rle_lt_trans with
+ (Rabs
+ (RiemannInt_SF (phi_sequence RinvN pr3 n) -
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ l * RiemannInt_SF (phi_sequence RinvN pr2 n))) +
+ Rabs (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0) +
+ Rabs l * Rabs (RiemannInt_SF (phi_sequence RinvN pr2 n) - x)).
+ apply Rle_trans with
+ (Rabs
+ (RiemannInt_SF (phi_sequence RinvN pr3 n) -
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ l * RiemannInt_SF (phi_sequence RinvN pr2 n))) +
+ Rabs
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0 +
+ l * (RiemannInt_SF (phi_sequence RinvN pr2 n) - x))).
+ replace (RiemannInt_SF (phi_sequence RinvN pr3 n) - (x0 + l * x)) with
(RiemannInt_SF (phi_sequence RinvN pr3 n) -
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- l * RiemannInt_SF (phi_sequence RinvN pr2 n))) with
- (RiemannInt_SF (phi_sequence RinvN pr3 n) +
- -1 *
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- l * RiemannInt_SF (phi_sequence RinvN pr2 n)));
- [ idtac | ring ]; do 2 rewrite <- StepFun_P30; assert (H10 : Rmin a b = a).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-assert (H11 : Rmax a b = b).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-rewrite H10 in H7; rewrite H10 in H8; rewrite H10 in H9; rewrite H11 in H7;
- rewrite H11 in H8; rewrite H11 in H9;
- apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P32
- (mkStepFun
- (StepFun_P28 (-1) (phi_sequence RinvN pr3 n)
- (mkStepFun
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ l * RiemannInt_SF (phi_sequence RinvN pr2 n)) +
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0 +
+ l * (RiemannInt_SF (phi_sequence RinvN pr2 n) - x)));
+ [ apply Rabs_triang | ring ].
+ rewrite Rplus_assoc; apply Rplus_le_compat_l; rewrite <- Rabs_mult;
+ replace
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0 +
+ l * (RiemannInt_SF (phi_sequence RinvN pr2 n) - x)) with
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) - x0 +
+ l * (RiemannInt_SF (phi_sequence RinvN pr2 n) - x));
+ [ apply Rabs_triang | ring ].
+ replace eps with (3 * (eps / 5) + eps / 5 + eps / 5).
+ repeat apply Rplus_lt_compat.
+ assert
+ (H7 :
+ exists psi1 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (f t - phi_sequence RinvN pr1 n t) <= psi1 n t) /\
+ Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr1 n0)).
+ assert
+ (H8 :
+ exists psi2 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (g t - phi_sequence RinvN pr2 n t) <= psi2 n t) /\
+ Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr2 n0)).
+ assert
+ (H9 :
+ exists psi3 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (f t + l * g t - phi_sequence RinvN pr3 n t) <= psi3 n t) /\
+ Rabs (RiemannInt_SF (psi3 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr3 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr3 n0)).
+ elim H7; clear H7; intros psi1 H7; elim H8; clear H8; intros psi2 H8; elim H9;
+ clear H9; intros psi3 H9;
+ replace
+ (RiemannInt_SF (phi_sequence RinvN pr3 n) -
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ l * RiemannInt_SF (phi_sequence RinvN pr2 n))) with
+ (RiemannInt_SF (phi_sequence RinvN pr3 n) +
+ -1 *
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ l * RiemannInt_SF (phi_sequence RinvN pr2 n)));
+ [ idtac | ring ]; do 2 rewrite <- StepFun_P30; assert (H10 : Rmin a b = a).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ assert (H11 : Rmax a b = b).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ rewrite H10 in H7; rewrite H10 in H8; rewrite H10 in H9; rewrite H11 in H7;
+ rewrite H11 in H8; rewrite H11 in H9;
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32
+ (mkStepFun
+ (StepFun_P28 (-1) (phi_sequence RinvN pr3 n)
+ (mkStepFun
(StepFun_P28 l (phi_sequence RinvN pr1 n)
- (phi_sequence RinvN pr2 n)))))))).
-apply StepFun_P34; assumption.
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P28 1 (psi3 n)
+ (phi_sequence RinvN pr2 n)))))))).
+ apply StepFun_P34; assumption.
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P28 1 (psi3 n)
(mkStepFun (StepFun_P28 (Rabs l) (psi1 n) (psi2 n)))))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *; rewrite Rmult_1_l.
-apply Rle_trans with
- (Rabs (phi_sequence RinvN pr3 n x1 - (f x1 + l * g x1)) +
- Rabs
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *; rewrite Rmult_1_l.
+ apply Rle_trans with
+ (Rabs (phi_sequence RinvN pr3 n x1 - (f x1 + l * g x1)) +
+ Rabs
+ (f x1 + l * g x1 +
+ -1 * (phi_sequence RinvN pr1 n x1 + l * phi_sequence RinvN pr2 n x1))).
+ replace
+ (phi_sequence RinvN pr3 n x1 +
+ -1 * (phi_sequence RinvN pr1 n x1 + l * phi_sequence RinvN pr2 n x1)) with
+ (phi_sequence RinvN pr3 n x1 - (f x1 + l * g x1) +
(f x1 + l * g x1 +
- -1 * (phi_sequence RinvN pr1 n x1 + l * phi_sequence RinvN pr2 n x1))).
-replace
- (phi_sequence RinvN pr3 n x1 +
- -1 * (phi_sequence RinvN pr1 n x1 + l * phi_sequence RinvN pr2 n x1)) with
- (phi_sequence RinvN pr3 n x1 - (f x1 + l * g x1) +
- (f x1 + l * g x1 +
- -1 * (phi_sequence RinvN pr1 n x1 + l * phi_sequence RinvN pr2 n x1)));
- [ apply Rabs_triang | ring ].
-rewrite Rplus_assoc; apply Rplus_le_compat.
-elim (H9 n); intros; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr;
- apply H13.
-elim H12; intros; split; left; assumption.
-apply Rle_trans with
- (Rabs (f x1 - phi_sequence RinvN pr1 n x1) +
- Rabs l * Rabs (g x1 - phi_sequence RinvN pr2 n x1)).
-rewrite <- Rabs_mult;
- replace
- (f x1 +
- (l * g x1 +
- -1 * (phi_sequence RinvN pr1 n x1 + l * phi_sequence RinvN pr2 n x1)))
- with
- (f x1 - phi_sequence RinvN pr1 n x1 +
- l * (g x1 - phi_sequence RinvN pr2 n x1)); [ apply Rabs_triang | ring ].
-apply Rplus_le_compat.
-elim (H7 n); intros; apply H13.
-elim H12; intros; split; left; assumption.
-apply Rmult_le_compat_l;
- [ apply Rabs_pos
- | elim (H8 n); intros; apply H13; elim H12; intros; split; left; assumption ].
-do 2 rewrite StepFun_P30; rewrite Rmult_1_l;
- replace (3 * (eps / 5)) with (eps / 5 + (eps / 5 + eps / 5));
- [ repeat apply Rplus_lt_compat | ring ].
-apply Rlt_trans with (pos (RinvN n));
- [ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi3 n)));
- [ apply RRle_abs | elim (H9 n); intros; assumption ]
- | apply H4; unfold ge in |- *; apply le_trans with N;
- [ apply le_trans with (max N0 N1);
- [ apply le_max_r | unfold N in |- *; apply le_max_l ]
- | assumption ] ].
-apply Rlt_trans with (pos (RinvN n));
- [ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n)));
- [ apply RRle_abs | elim (H7 n); intros; assumption ]
- | apply H4; unfold ge in |- *; apply le_trans with N;
- [ apply le_trans with (max N0 N1);
- [ apply le_max_r | unfold N in |- *; apply le_max_l ]
- | assumption ] ].
-apply Rmult_lt_reg_l with (/ Rabs l).
-apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption.
-rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym.
-rewrite Rmult_1_l; replace (/ Rabs l * (eps / 5)) with (eps / (5 * Rabs l)).
-apply Rlt_trans with (pos (RinvN n));
- [ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n)));
- [ apply RRle_abs | elim (H8 n); intros; assumption ]
- | apply H5; unfold ge in |- *; apply le_trans with N;
- [ apply le_trans with (max N2 N3);
- [ apply le_max_r | unfold N in |- *; apply le_max_r ]
- | assumption ] ].
-unfold Rdiv in |- *; rewrite Rinv_mult_distr;
- [ ring | discrR | apply Rabs_no_R0; assumption ].
-apply Rabs_no_R0; assumption.
-apply H3; unfold ge in |- *; apply le_trans with (max N0 N1);
- [ apply le_max_l
- | apply le_trans with N; [ unfold N in |- *; apply le_max_l | assumption ] ].
-apply Rmult_lt_reg_l with (/ Rabs l).
-apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption.
-rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym.
-rewrite Rmult_1_l; replace (/ Rabs l * (eps / 5)) with (eps / (5 * Rabs l)).
-apply H6; unfold ge in |- *; apply le_trans with (max N2 N3);
- [ apply le_max_l
- | apply le_trans with N; [ unfold N in |- *; apply le_max_r | assumption ] ].
-unfold Rdiv in |- *; rewrite Rinv_mult_distr;
- [ ring | discrR | apply Rabs_no_R0; assumption ].
-apply Rabs_no_R0; assumption.
-apply Rmult_eq_reg_l with 5;
- [ unfold Rdiv in |- *; do 2 rewrite Rmult_plus_distr_l;
- do 3 rewrite (Rmult_comm 5); repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | discrR ]
- | discrR ].
+ -1 * (phi_sequence RinvN pr1 n x1 + l * phi_sequence RinvN pr2 n x1)));
+ [ apply Rabs_triang | ring ].
+ rewrite Rplus_assoc; apply Rplus_le_compat.
+ elim (H9 n); intros; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr;
+ apply H13.
+ elim H12; intros; split; left; assumption.
+ apply Rle_trans with
+ (Rabs (f x1 - phi_sequence RinvN pr1 n x1) +
+ Rabs l * Rabs (g x1 - phi_sequence RinvN pr2 n x1)).
+ rewrite <- Rabs_mult;
+ replace
+ (f x1 +
+ (l * g x1 +
+ -1 * (phi_sequence RinvN pr1 n x1 + l * phi_sequence RinvN pr2 n x1)))
+ with
+ (f x1 - phi_sequence RinvN pr1 n x1 +
+ l * (g x1 - phi_sequence RinvN pr2 n x1)); [ apply Rabs_triang | ring ].
+ apply Rplus_le_compat.
+ elim (H7 n); intros; apply H13.
+ elim H12; intros; split; left; assumption.
+ apply Rmult_le_compat_l;
+ [ apply Rabs_pos
+ | elim (H8 n); intros; apply H13; elim H12; intros; split; left; assumption ].
+ do 2 rewrite StepFun_P30; rewrite Rmult_1_l;
+ replace (3 * (eps / 5)) with (eps / 5 + (eps / 5 + eps / 5));
+ [ repeat apply Rplus_lt_compat | ring ].
+ apply Rlt_trans with (pos (RinvN n));
+ [ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi3 n)));
+ [ apply RRle_abs | elim (H9 n); intros; assumption ]
+ | apply H4; unfold ge in |- *; apply le_trans with N;
+ [ apply le_trans with (max N0 N1);
+ [ apply le_max_r | unfold N in |- *; apply le_max_l ]
+ | assumption ] ].
+ apply Rlt_trans with (pos (RinvN n));
+ [ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n)));
+ [ apply RRle_abs | elim (H7 n); intros; assumption ]
+ | apply H4; unfold ge in |- *; apply le_trans with N;
+ [ apply le_trans with (max N0 N1);
+ [ apply le_max_r | unfold N in |- *; apply le_max_l ]
+ | assumption ] ].
+ apply Rmult_lt_reg_l with (/ Rabs l).
+ apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption.
+ rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_l; replace (/ Rabs l * (eps / 5)) with (eps / (5 * Rabs l)).
+ apply Rlt_trans with (pos (RinvN n));
+ [ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n)));
+ [ apply RRle_abs | elim (H8 n); intros; assumption ]
+ | apply H5; unfold ge in |- *; apply le_trans with N;
+ [ apply le_trans with (max N2 N3);
+ [ apply le_max_r | unfold N in |- *; apply le_max_r ]
+ | assumption ] ].
+ unfold Rdiv in |- *; rewrite Rinv_mult_distr;
+ [ ring | discrR | apply Rabs_no_R0; assumption ].
+ apply Rabs_no_R0; assumption.
+ apply H3; unfold ge in |- *; apply le_trans with (max N0 N1);
+ [ apply le_max_l
+ | apply le_trans with N; [ unfold N in |- *; apply le_max_l | assumption ] ].
+ apply Rmult_lt_reg_l with (/ Rabs l).
+ apply Rinv_0_lt_compat; apply Rabs_pos_lt; assumption.
+ rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_l; replace (/ Rabs l * (eps / 5)) with (eps / (5 * Rabs l)).
+ apply H6; unfold ge in |- *; apply le_trans with (max N2 N3);
+ [ apply le_max_l
+ | apply le_trans with N; [ unfold N in |- *; apply le_max_r | assumption ] ].
+ unfold Rdiv in |- *; rewrite Rinv_mult_distr;
+ [ ring | discrR | apply Rabs_no_R0; assumption ].
+ apply Rabs_no_R0; assumption.
+ apply Rmult_eq_reg_l with 5;
+ [ unfold Rdiv in |- *; do 2 rewrite Rmult_plus_distr_l;
+ do 3 rewrite (Rmult_comm 5); repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | discrR ]
+ | discrR ].
Qed.
Lemma RiemannInt_P13 :
- forall (f g:R -> R) (a b l:R) (pr1:Riemann_integrable f a b)
- (pr2:Riemann_integrable g a b)
- (pr3:Riemann_integrable (fun x:R => f x + l * g x) a b),
- RiemannInt pr3 = RiemannInt pr1 + l * RiemannInt pr2.
-intros; case (Rle_dec a b); intro;
- [ apply RiemannInt_P12; assumption
- | assert (H : b <= a);
- [ auto with real
- | replace (RiemannInt pr3) with (- RiemannInt (RiemannInt_P1 pr3));
- [ idtac | symmetry in |- *; apply RiemannInt_P8 ];
- replace (RiemannInt pr2) with (- RiemannInt (RiemannInt_P1 pr2));
- [ idtac | symmetry in |- *; apply RiemannInt_P8 ];
- replace (RiemannInt pr1) with (- RiemannInt (RiemannInt_P1 pr1));
- [ idtac | symmetry in |- *; apply RiemannInt_P8 ];
- rewrite
- (RiemannInt_P12 (RiemannInt_P1 pr1) (RiemannInt_P1 pr2)
- (RiemannInt_P1 pr3) H); ring ] ].
+ forall (f g:R -> R) (a b l:R) (pr1:Riemann_integrable f a b)
+ (pr2:Riemann_integrable g a b)
+ (pr3:Riemann_integrable (fun x:R => f x + l * g x) a b),
+ RiemannInt pr3 = RiemannInt pr1 + l * RiemannInt pr2.
+Proof.
+ intros; case (Rle_dec a b); intro;
+ [ apply RiemannInt_P12; assumption
+ | assert (H : b <= a);
+ [ auto with real
+ | replace (RiemannInt pr3) with (- RiemannInt (RiemannInt_P1 pr3));
+ [ idtac | symmetry in |- *; apply RiemannInt_P8 ];
+ replace (RiemannInt pr2) with (- RiemannInt (RiemannInt_P1 pr2));
+ [ idtac | symmetry in |- *; apply RiemannInt_P8 ];
+ replace (RiemannInt pr1) with (- RiemannInt (RiemannInt_P1 pr1));
+ [ idtac | symmetry in |- *; apply RiemannInt_P8 ];
+ rewrite
+ (RiemannInt_P12 (RiemannInt_P1 pr1) (RiemannInt_P1 pr2)
+ (RiemannInt_P1 pr3) H); ring ] ].
Qed.
Lemma RiemannInt_P14 : forall a b c:R, Riemann_integrable (fct_cte c) a b.
-unfold Riemann_integrable in |- *; intros;
- split with (mkStepFun (StepFun_P4 a b c));
- split with (mkStepFun (StepFun_P4 a b 0)); split;
- [ intros; simpl in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r;
- rewrite Rabs_R0; unfold fct_cte in |- *; right;
- reflexivity
- | rewrite StepFun_P18; rewrite Rmult_0_l; rewrite Rabs_R0;
- apply (cond_pos eps) ].
+Proof.
+ unfold Riemann_integrable in |- *; intros;
+ split with (mkStepFun (StepFun_P4 a b c));
+ split with (mkStepFun (StepFun_P4 a b 0)); split;
+ [ intros; simpl in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r;
+ rewrite Rabs_R0; unfold fct_cte in |- *; right;
+ reflexivity
+ | rewrite StepFun_P18; rewrite Rmult_0_l; rewrite Rabs_R0;
+ apply (cond_pos eps) ].
Qed.
Lemma RiemannInt_P15 :
- forall (a b c:R) (pr:Riemann_integrable (fct_cte c) a b),
- RiemannInt pr = c * (b - a).
-intros; unfold RiemannInt in |- *; case (RiemannInt_exists pr RinvN RinvN_cv);
- intros; eapply UL_sequence.
-apply u.
-set (phi1 := fun N:nat => phi_sequence RinvN pr N);
- change (Un_cv (fun N:nat => RiemannInt_SF (phi1 N)) (c * (b - a))) in |- *;
- set (f := fct_cte c);
- assert
- (H1 :
- exists psi1 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (f t - phi_sequence RinvN pr n t) <= psi1 n t) /\
- Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr n)).
-elim H1; clear H1; intros psi1 H1;
- set (phi2 := fun n:nat => mkStepFun (StepFun_P4 a b c));
- set (psi2 := fun n:nat => mkStepFun (StepFun_P4 a b 0));
- apply RiemannInt_P11 with f RinvN phi2 psi2 psi1;
- try assumption.
-apply RinvN_cv.
-intro; split.
-intros; unfold f in |- *; simpl in |- *; unfold Rminus in |- *;
- rewrite Rplus_opp_r; rewrite Rabs_R0; unfold fct_cte in |- *;
- right; reflexivity.
-unfold psi2 in |- *; rewrite StepFun_P18; rewrite Rmult_0_l; rewrite Rabs_R0;
- apply (cond_pos (RinvN n)).
-unfold Un_cv in |- *; intros; split with 0%nat; intros; unfold R_dist in |- *;
- unfold phi2 in |- *; rewrite StepFun_P18; unfold Rminus in |- *;
- rewrite Rplus_opp_r; rewrite Rabs_R0; apply H.
+ forall (a b c:R) (pr:Riemann_integrable (fct_cte c) a b),
+ RiemannInt pr = c * (b - a).
+Proof.
+ intros; unfold RiemannInt in |- *; case (RiemannInt_exists pr RinvN RinvN_cv);
+ intros; eapply UL_sequence.
+ apply u.
+ set (phi1 := fun N:nat => phi_sequence RinvN pr N);
+ change (Un_cv (fun N:nat => RiemannInt_SF (phi1 N)) (c * (b - a))) in |- *;
+ set (f := fct_cte c);
+ assert
+ (H1 :
+ exists psi1 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (f t - phi_sequence RinvN pr n t) <= psi1 n t) /\
+ Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr n)).
+ elim H1; clear H1; intros psi1 H1;
+ set (phi2 := fun n:nat => mkStepFun (StepFun_P4 a b c));
+ set (psi2 := fun n:nat => mkStepFun (StepFun_P4 a b 0));
+ apply RiemannInt_P11 with f RinvN phi2 psi2 psi1;
+ try assumption.
+ apply RinvN_cv.
+ intro; split.
+ intros; unfold f in |- *; simpl in |- *; unfold Rminus in |- *;
+ rewrite Rplus_opp_r; rewrite Rabs_R0; unfold fct_cte in |- *;
+ right; reflexivity.
+ unfold psi2 in |- *; rewrite StepFun_P18; rewrite Rmult_0_l; rewrite Rabs_R0;
+ apply (cond_pos (RinvN n)).
+ unfold Un_cv in |- *; intros; split with 0%nat; intros; unfold R_dist in |- *;
+ unfold phi2 in |- *; rewrite StepFun_P18; unfold Rminus in |- *;
+ rewrite Rplus_opp_r; rewrite Rabs_R0; apply H.
Qed.
Lemma RiemannInt_P16 :
- forall (f:R -> R) (a b:R),
- Riemann_integrable f a b -> Riemann_integrable (fun x:R => Rabs (f x)) a b.
-unfold Riemann_integrable in |- *; intro f; intros; elim (X eps); clear X;
- intros phi [psi [H H0]]; split with (mkStepFun (StepFun_P32 phi));
- split with psi; split; try assumption; intros; simpl in |- *;
- apply Rle_trans with (Rabs (f t - phi t));
- [ apply Rabs_triang_inv2 | apply H; assumption ].
+ forall (f:R -> R) (a b:R),
+ Riemann_integrable f a b -> Riemann_integrable (fun x:R => Rabs (f x)) a b.
+Proof.
+ unfold Riemann_integrable in |- *; intro f; intros; elim (X eps); clear X;
+ intros phi [psi [H H0]]; split with (mkStepFun (StepFun_P32 phi));
+ split with psi; split; try assumption; intros; simpl in |- *;
+ apply Rle_trans with (Rabs (f t - phi t));
+ [ apply Rabs_triang_inv2 | apply H; assumption ].
Qed.
Lemma Rle_cv_lim :
- forall (Un Vn:nat -> R) (l1 l2:R),
- (forall n:nat, Un n <= Vn n) -> Un_cv Un l1 -> Un_cv Vn l2 -> l1 <= l2.
-intros; case (Rle_dec l1 l2); intro.
-assumption.
-assert (H2 : l2 < l1).
-auto with real.
-clear n; assert (H3 : 0 < (l1 - l2) / 2).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ apply Rlt_Rminus; assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H1 _ H3); elim (H0 _ H3); clear H0 H1; unfold R_dist in |- *; intros;
- set (N := max x x0); cut (Vn N < Un N).
-intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ (H N) H4)).
-apply Rlt_trans with ((l1 + l2) / 2).
-apply Rplus_lt_reg_r with (- l2);
- replace (- l2 + (l1 + l2) / 2) with ((l1 - l2) / 2).
-rewrite Rplus_comm; apply Rle_lt_trans with (Rabs (Vn N - l2)).
-apply RRle_abs.
-apply H1; unfold ge in |- *; unfold N in |- *; apply le_max_r.
-apply Rmult_eq_reg_l with 2;
- [ unfold Rdiv in |- *; do 2 rewrite (Rmult_comm 2);
- rewrite (Rmult_plus_distr_r (- l2) ((l1 + l2) * / 2) 2);
- repeat rewrite Rmult_assoc; rewrite <- Rinv_l_sym;
- [ ring | discrR ]
- | discrR ].
-apply Ropp_lt_cancel; apply Rplus_lt_reg_r with l1;
- replace (l1 + - ((l1 + l2) / 2)) with ((l1 - l2) / 2).
-apply Rle_lt_trans with (Rabs (Un N - l1)).
-rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply RRle_abs.
-apply H0; unfold ge in |- *; unfold N in |- *; apply le_max_l.
-apply Rmult_eq_reg_l with 2;
- [ unfold Rdiv in |- *; do 2 rewrite (Rmult_comm 2);
- rewrite (Rmult_plus_distr_r l1 (- ((l1 + l2) * / 2)) 2);
- rewrite <- Ropp_mult_distr_l_reverse; repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | discrR ]
- | discrR ].
+ forall (Un Vn:nat -> R) (l1 l2:R),
+ (forall n:nat, Un n <= Vn n) -> Un_cv Un l1 -> Un_cv Vn l2 -> l1 <= l2.
+Proof.
+ intros; case (Rle_dec l1 l2); intro.
+ assumption.
+ assert (H2 : l2 < l1).
+ auto with real.
+ clear n; assert (H3 : 0 < (l1 - l2) / 2).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ apply Rlt_Rminus; assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H1 _ H3); elim (H0 _ H3); clear H0 H1; unfold R_dist in |- *; intros;
+ set (N := max x x0); cut (Vn N < Un N).
+ intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ (H N) H4)).
+ apply Rlt_trans with ((l1 + l2) / 2).
+ apply Rplus_lt_reg_r with (- l2);
+ replace (- l2 + (l1 + l2) / 2) with ((l1 - l2) / 2).
+ rewrite Rplus_comm; apply Rle_lt_trans with (Rabs (Vn N - l2)).
+ apply RRle_abs.
+ apply H1; unfold ge in |- *; unfold N in |- *; apply le_max_r.
+ apply Rmult_eq_reg_l with 2;
+ [ unfold Rdiv in |- *; do 2 rewrite (Rmult_comm 2);
+ rewrite (Rmult_plus_distr_r (- l2) ((l1 + l2) * / 2) 2);
+ repeat rewrite Rmult_assoc; rewrite <- Rinv_l_sym;
+ [ ring | discrR ]
+ | discrR ].
+ apply Ropp_lt_cancel; apply Rplus_lt_reg_r with l1;
+ replace (l1 + - ((l1 + l2) / 2)) with ((l1 - l2) / 2).
+ apply Rle_lt_trans with (Rabs (Un N - l1)).
+ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply RRle_abs.
+ apply H0; unfold ge in |- *; unfold N in |- *; apply le_max_l.
+ apply Rmult_eq_reg_l with 2;
+ [ unfold Rdiv in |- *; do 2 rewrite (Rmult_comm 2);
+ rewrite (Rmult_plus_distr_r l1 (- ((l1 + l2) * / 2)) 2);
+ rewrite <- Ropp_mult_distr_l_reverse; repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | discrR ]
+ | discrR ].
Qed.
Lemma RiemannInt_P17 :
- forall (f:R -> R) (a b:R) (pr1:Riemann_integrable f a b)
- (pr2:Riemann_integrable (fun x:R => Rabs (f x)) a b),
- a <= b -> Rabs (RiemannInt pr1) <= RiemannInt pr2.
-intro f; intros; unfold RiemannInt in |- *;
- case (RiemannInt_exists pr1 RinvN RinvN_cv);
- case (RiemannInt_exists pr2 RinvN RinvN_cv); intros;
- set (phi1 := phi_sequence RinvN pr1) in u0;
- set (phi2 := fun N:nat => mkStepFun (StepFun_P32 (phi1 N)));
- apply Rle_cv_lim with
- (fun N:nat => Rabs (RiemannInt_SF (phi1 N)))
- (fun N:nat => RiemannInt_SF (phi2 N)).
-intro; unfold phi2 in |- *; apply StepFun_P34; assumption.
- apply (continuity_seq Rabs (fun N:nat => RiemannInt_SF (phi1 N)) x0);
- try assumption.
-apply Rcontinuity_abs.
-set (phi3 := phi_sequence RinvN pr2);
- assert
- (H0 :
- exists psi3 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (Rabs (f t) - phi3 n t) <= psi3 n t) /\
- Rabs (RiemannInt_SF (psi3 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr2 n)).
-assert
- (H1 :
- exists psi2 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (Rabs (f t) - phi2 n t) <= psi2 n t) /\
- Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
-assert
- (H1 :
- exists psi2 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b -> Rabs (f t - phi1 n t) <= psi2 n t) /\
- Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr1 n)).
-elim H1; clear H1; intros psi2 H1; split with psi2; intros; elim (H1 n);
- clear H1; intros; split; try assumption.
-intros; unfold phi2 in |- *; simpl in |- *;
- apply Rle_trans with (Rabs (f t - phi1 n t)).
-apply Rabs_triang_inv2.
-apply H1; assumption.
-elim H0; clear H0; intros psi3 H0; elim H1; clear H1; intros psi2 H1;
- apply RiemannInt_P11 with (fun x:R => Rabs (f x)) RinvN phi3 psi3 psi2;
- try assumption; apply RinvN_cv.
+ forall (f:R -> R) (a b:R) (pr1:Riemann_integrable f a b)
+ (pr2:Riemann_integrable (fun x:R => Rabs (f x)) a b),
+ a <= b -> Rabs (RiemannInt pr1) <= RiemannInt pr2.
+Proof.
+ intro f; intros; unfold RiemannInt in |- *;
+ case (RiemannInt_exists pr1 RinvN RinvN_cv);
+ case (RiemannInt_exists pr2 RinvN RinvN_cv); intros;
+ set (phi1 := phi_sequence RinvN pr1) in u0;
+ set (phi2 := fun N:nat => mkStepFun (StepFun_P32 (phi1 N)));
+ apply Rle_cv_lim with
+ (fun N:nat => Rabs (RiemannInt_SF (phi1 N)))
+ (fun N:nat => RiemannInt_SF (phi2 N)).
+ intro; unfold phi2 in |- *; apply StepFun_P34; assumption.
+ apply (continuity_seq Rabs (fun N:nat => RiemannInt_SF (phi1 N)) x0);
+ try assumption.
+ apply Rcontinuity_abs.
+ set (phi3 := phi_sequence RinvN pr2);
+ assert
+ (H0 :
+ exists psi3 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (Rabs (f t) - phi3 n t) <= psi3 n t) /\
+ Rabs (RiemannInt_SF (psi3 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr2 n)).
+ assert
+ (H1 :
+ exists psi2 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (Rabs (f t) - phi2 n t) <= psi2 n t) /\
+ Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
+ assert
+ (H1 :
+ exists psi2 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b -> Rabs (f t - phi1 n t) <= psi2 n t) /\
+ Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr1 n)).
+ elim H1; clear H1; intros psi2 H1; split with psi2; intros; elim (H1 n);
+ clear H1; intros; split; try assumption.
+ intros; unfold phi2 in |- *; simpl in |- *;
+ apply Rle_trans with (Rabs (f t - phi1 n t)).
+ apply Rabs_triang_inv2.
+ apply H1; assumption.
+ elim H0; clear H0; intros psi3 H0; elim H1; clear H1; intros psi2 H1;
+ apply RiemannInt_P11 with (fun x:R => Rabs (f x)) RinvN phi3 psi3 psi2;
+ try assumption; apply RinvN_cv.
Qed.
Lemma RiemannInt_P18 :
- forall (f g:R -> R) (a b:R) (pr1:Riemann_integrable f a b)
- (pr2:Riemann_integrable g a b),
- a <= b ->
- (forall x:R, a < x < b -> f x = g x) -> RiemannInt pr1 = RiemannInt pr2.
-intro f; intros; unfold RiemannInt in |- *;
- case (RiemannInt_exists pr1 RinvN RinvN_cv);
- case (RiemannInt_exists pr2 RinvN RinvN_cv); intros;
- eapply UL_sequence.
-apply u0.
-set (phi1 := fun N:nat => phi_sequence RinvN pr1 N);
- change (Un_cv (fun N:nat => RiemannInt_SF (phi1 N)) x) in |- *;
- assert
- (H1 :
- exists psi1 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (f t - phi1 n t) <= psi1 n t) /\
- Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr1 n)).
-elim H1; clear H1; intros psi1 H1;
- set (phi2 := fun N:nat => phi_sequence RinvN pr2 N).
-set
- (phi2_aux :=
- fun (N:nat) (x:R) =>
- match Req_EM_T x a with
- | left _ => f a
- | right _ =>
- match Req_EM_T x b with
- | left _ => f b
- | right _ => phi2 N x
- end
- end).
-cut (forall N:nat, IsStepFun (phi2_aux N) a b).
-intro; set (phi2_m := fun N:nat => mkStepFun (X N)).
-assert
- (H2 :
- exists psi2 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b -> Rabs (g t - phi2 n t) <= psi2 n t) /\
- Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr2 n)).
-elim H2; clear H2; intros psi2 H2;
- apply RiemannInt_P11 with f RinvN phi2_m psi2 psi1;
- try assumption.
-apply RinvN_cv.
-intro; elim (H2 n); intros; split; try assumption.
-intros; unfold phi2_m in |- *; simpl in |- *; unfold phi2_aux in |- *;
- case (Req_EM_T t a); case (Req_EM_T t b); intros.
-rewrite e0; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
- apply Rle_trans with (Rabs (g t - phi2 n t)).
-apply Rabs_pos.
-pattern a at 3 in |- *; rewrite <- e0; apply H3; assumption.
-rewrite e; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
- apply Rle_trans with (Rabs (g t - phi2 n t)).
-apply Rabs_pos.
-pattern a at 3 in |- *; rewrite <- e; apply H3; assumption.
-rewrite e; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
- apply Rle_trans with (Rabs (g t - phi2 n t)).
-apply Rabs_pos.
-pattern b at 3 in |- *; rewrite <- e; apply H3; assumption.
-replace (f t) with (g t).
-apply H3; assumption.
-symmetry in |- *; apply H0; elim H5; clear H5; intros.
-assert (H7 : Rmin a b = a).
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n2; assumption ].
-assert (H8 : Rmax a b = b).
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n2; assumption ].
-rewrite H7 in H5; rewrite H8 in H6; split.
-elim H5; intro; [ assumption | elim n1; symmetry in |- *; assumption ].
-elim H6; intro; [ assumption | elim n0; assumption ].
-cut (forall N:nat, RiemannInt_SF (phi2_m N) = RiemannInt_SF (phi2 N)).
-intro; unfold Un_cv in |- *; intros; elim (u _ H4); intros; exists x1; intros;
- rewrite (H3 n); apply H5; assumption.
-intro; apply Rle_antisym.
-apply StepFun_P37; try assumption.
-intros; unfold phi2_m in |- *; simpl in |- *; unfold phi2_aux in |- *;
- case (Req_EM_T x1 a); case (Req_EM_T x1 b); intros.
-elim H3; intros; rewrite e0 in H4; elim (Rlt_irrefl _ H4).
-elim H3; intros; rewrite e in H4; elim (Rlt_irrefl _ H4).
-elim H3; intros; rewrite e in H5; elim (Rlt_irrefl _ H5).
-right; reflexivity.
-apply StepFun_P37; try assumption.
-intros; unfold phi2_m in |- *; simpl in |- *; unfold phi2_aux in |- *;
- case (Req_EM_T x1 a); case (Req_EM_T x1 b); intros.
-elim H3; intros; rewrite e0 in H4; elim (Rlt_irrefl _ H4).
-elim H3; intros; rewrite e in H4; elim (Rlt_irrefl _ H4).
-elim H3; intros; rewrite e in H5; elim (Rlt_irrefl _ H5).
-right; reflexivity.
-intro; assert (H2 := pre (phi2 N)); unfold IsStepFun in H2;
- unfold is_subdivision in H2; elim H2; clear H2; intros l [lf H2];
- split with l; split with lf; unfold adapted_couple in H2;
- decompose [and] H2; clear H2; unfold adapted_couple in |- *;
- repeat split; try assumption.
-intros; assert (H9 := H8 i H2); unfold constant_D_eq, open_interval in H9;
- unfold constant_D_eq, open_interval in |- *; intros;
- rewrite <- (H9 x1 H7); assert (H10 : a <= pos_Rl l i).
-replace a with (Rmin a b).
-rewrite <- H5; elim (RList_P6 l); intros; apply H10.
-assumption.
-apply le_O_n.
-apply lt_trans with (pred (Rlength l)); [ assumption | apply lt_pred_n_n ].
-apply neq_O_lt; intro; rewrite <- H12 in H6; discriminate.
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; assumption ].
-assert (H11 : pos_Rl l (S i) <= b).
-replace b with (Rmax a b).
-rewrite <- H4; elim (RList_P6 l); intros; apply H11.
-assumption.
-apply lt_le_S; assumption.
-apply lt_pred_n_n; apply neq_O_lt; intro; rewrite <- H13 in H6; discriminate.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; assumption ].
-elim H7; clear H7; intros; unfold phi2_aux in |- *; case (Req_EM_T x1 a);
- case (Req_EM_T x1 b); intros.
-rewrite e in H12; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H11 H12)).
-rewrite e in H7; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H10 H7)).
-rewrite e in H12; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H11 H12)).
-reflexivity.
+ forall (f g:R -> R) (a b:R) (pr1:Riemann_integrable f a b)
+ (pr2:Riemann_integrable g a b),
+ a <= b ->
+ (forall x:R, a < x < b -> f x = g x) -> RiemannInt pr1 = RiemannInt pr2.
+Proof.
+ intro f; intros; unfold RiemannInt in |- *;
+ case (RiemannInt_exists pr1 RinvN RinvN_cv);
+ case (RiemannInt_exists pr2 RinvN RinvN_cv); intros;
+ eapply UL_sequence.
+ apply u0.
+ set (phi1 := fun N:nat => phi_sequence RinvN pr1 N);
+ change (Un_cv (fun N:nat => RiemannInt_SF (phi1 N)) x) in |- *;
+ assert
+ (H1 :
+ exists psi1 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (f t - phi1 n t) <= psi1 n t) /\
+ Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr1 n)).
+ elim H1; clear H1; intros psi1 H1;
+ set (phi2 := fun N:nat => phi_sequence RinvN pr2 N).
+ set
+ (phi2_aux :=
+ fun (N:nat) (x:R) =>
+ match Req_EM_T x a with
+ | left _ => f a
+ | right _ =>
+ match Req_EM_T x b with
+ | left _ => f b
+ | right _ => phi2 N x
+ end
+ end).
+ cut (forall N:nat, IsStepFun (phi2_aux N) a b).
+ intro; set (phi2_m := fun N:nat => mkStepFun (X N)).
+ assert
+ (H2 :
+ exists psi2 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b -> Rabs (g t - phi2 n t) <= psi2 n t) /\
+ Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr2 n)).
+ elim H2; clear H2; intros psi2 H2;
+ apply RiemannInt_P11 with f RinvN phi2_m psi2 psi1;
+ try assumption.
+ apply RinvN_cv.
+ intro; elim (H2 n); intros; split; try assumption.
+ intros; unfold phi2_m in |- *; simpl in |- *; unfold phi2_aux in |- *;
+ case (Req_EM_T t a); case (Req_EM_T t b); intros.
+ rewrite e0; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
+ apply Rle_trans with (Rabs (g t - phi2 n t)).
+ apply Rabs_pos.
+ pattern a at 3 in |- *; rewrite <- e0; apply H3; assumption.
+ rewrite e; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
+ apply Rle_trans with (Rabs (g t - phi2 n t)).
+ apply Rabs_pos.
+ pattern a at 3 in |- *; rewrite <- e; apply H3; assumption.
+ rewrite e; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
+ apply Rle_trans with (Rabs (g t - phi2 n t)).
+ apply Rabs_pos.
+ pattern b at 3 in |- *; rewrite <- e; apply H3; assumption.
+ replace (f t) with (g t).
+ apply H3; assumption.
+ symmetry in |- *; apply H0; elim H5; clear H5; intros.
+ assert (H7 : Rmin a b = a).
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n2; assumption ].
+ assert (H8 : Rmax a b = b).
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n2; assumption ].
+ rewrite H7 in H5; rewrite H8 in H6; split.
+ elim H5; intro; [ assumption | elim n1; symmetry in |- *; assumption ].
+ elim H6; intro; [ assumption | elim n0; assumption ].
+ cut (forall N:nat, RiemannInt_SF (phi2_m N) = RiemannInt_SF (phi2 N)).
+ intro; unfold Un_cv in |- *; intros; elim (u _ H4); intros; exists x1; intros;
+ rewrite (H3 n); apply H5; assumption.
+ intro; apply Rle_antisym.
+ apply StepFun_P37; try assumption.
+ intros; unfold phi2_m in |- *; simpl in |- *; unfold phi2_aux in |- *;
+ case (Req_EM_T x1 a); case (Req_EM_T x1 b); intros.
+ elim H3; intros; rewrite e0 in H4; elim (Rlt_irrefl _ H4).
+ elim H3; intros; rewrite e in H4; elim (Rlt_irrefl _ H4).
+ elim H3; intros; rewrite e in H5; elim (Rlt_irrefl _ H5).
+ right; reflexivity.
+ apply StepFun_P37; try assumption.
+ intros; unfold phi2_m in |- *; simpl in |- *; unfold phi2_aux in |- *;
+ case (Req_EM_T x1 a); case (Req_EM_T x1 b); intros.
+ elim H3; intros; rewrite e0 in H4; elim (Rlt_irrefl _ H4).
+ elim H3; intros; rewrite e in H4; elim (Rlt_irrefl _ H4).
+ elim H3; intros; rewrite e in H5; elim (Rlt_irrefl _ H5).
+ right; reflexivity.
+ intro; assert (H2 := pre (phi2 N)); unfold IsStepFun in H2;
+ unfold is_subdivision in H2; elim H2; clear H2; intros l [lf H2];
+ split with l; split with lf; unfold adapted_couple in H2;
+ decompose [and] H2; clear H2; unfold adapted_couple in |- *;
+ repeat split; try assumption.
+ intros; assert (H9 := H8 i H2); unfold constant_D_eq, open_interval in H9;
+ unfold constant_D_eq, open_interval in |- *; intros;
+ rewrite <- (H9 x1 H7); assert (H10 : a <= pos_Rl l i).
+ replace a with (Rmin a b).
+ rewrite <- H5; elim (RList_P6 l); intros; apply H10.
+ assumption.
+ apply le_O_n.
+ apply lt_trans with (pred (Rlength l)); [ assumption | apply lt_pred_n_n ].
+ apply neq_O_lt; intro; rewrite <- H12 in H6; discriminate.
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; assumption ].
+ assert (H11 : pos_Rl l (S i) <= b).
+ replace b with (Rmax a b).
+ rewrite <- H4; elim (RList_P6 l); intros; apply H11.
+ assumption.
+ apply lt_le_S; assumption.
+ apply lt_pred_n_n; apply neq_O_lt; intro; rewrite <- H13 in H6; discriminate.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; assumption ].
+ elim H7; clear H7; intros; unfold phi2_aux in |- *; case (Req_EM_T x1 a);
+ case (Req_EM_T x1 b); intros.
+ rewrite e in H12; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H11 H12)).
+ rewrite e in H7; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H10 H7)).
+ rewrite e in H12; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H11 H12)).
+ reflexivity.
Qed.
Lemma RiemannInt_P19 :
- forall (f g:R -> R) (a b:R) (pr1:Riemann_integrable f a b)
- (pr2:Riemann_integrable g a b),
- a <= b ->
- (forall x:R, a < x < b -> f x <= g x) -> RiemannInt pr1 <= RiemannInt pr2.
-intro f; intros; apply Rplus_le_reg_l with (- RiemannInt pr1);
- rewrite Rplus_opp_l; rewrite Rplus_comm;
- apply Rle_trans with (Rabs (RiemannInt (RiemannInt_P10 (-1) pr2 pr1))).
-apply Rabs_pos.
-replace (RiemannInt pr2 + - RiemannInt pr1) with
- (RiemannInt (RiemannInt_P16 (RiemannInt_P10 (-1) pr2 pr1))).
-apply
- (RiemannInt_P17 (RiemannInt_P10 (-1) pr2 pr1)
- (RiemannInt_P16 (RiemannInt_P10 (-1) pr2 pr1)));
- assumption.
-replace (RiemannInt pr2 + - RiemannInt pr1) with
- (RiemannInt (RiemannInt_P10 (-1) pr2 pr1)).
-apply RiemannInt_P18; try assumption.
-intros; apply Rabs_right.
-apply Rle_ge; apply Rplus_le_reg_l with (f x); rewrite Rplus_0_r;
- replace (f x + (g x + -1 * f x)) with (g x); [ apply H0; assumption | ring ].
-rewrite (RiemannInt_P12 pr2 pr1 (RiemannInt_P10 (-1) pr2 pr1));
- [ ring | assumption ].
+ forall (f g:R -> R) (a b:R) (pr1:Riemann_integrable f a b)
+ (pr2:Riemann_integrable g a b),
+ a <= b ->
+ (forall x:R, a < x < b -> f x <= g x) -> RiemannInt pr1 <= RiemannInt pr2.
+Proof.
+ intro f; intros; apply Rplus_le_reg_l with (- RiemannInt pr1);
+ rewrite Rplus_opp_l; rewrite Rplus_comm;
+ apply Rle_trans with (Rabs (RiemannInt (RiemannInt_P10 (-1) pr2 pr1))).
+ apply Rabs_pos.
+ replace (RiemannInt pr2 + - RiemannInt pr1) with
+ (RiemannInt (RiemannInt_P16 (RiemannInt_P10 (-1) pr2 pr1))).
+ apply
+ (RiemannInt_P17 (RiemannInt_P10 (-1) pr2 pr1)
+ (RiemannInt_P16 (RiemannInt_P10 (-1) pr2 pr1)));
+ assumption.
+ replace (RiemannInt pr2 + - RiemannInt pr1) with
+ (RiemannInt (RiemannInt_P10 (-1) pr2 pr1)).
+ apply RiemannInt_P18; try assumption.
+ intros; apply Rabs_right.
+ apply Rle_ge; apply Rplus_le_reg_l with (f x); rewrite Rplus_0_r;
+ replace (f x + (g x + -1 * f x)) with (g x); [ apply H0; assumption | ring ].
+ rewrite (RiemannInt_P12 pr2 pr1 (RiemannInt_P10 (-1) pr2 pr1));
+ [ ring | assumption ].
Qed.
Lemma FTC_P1 :
- forall (f:R -> R) (a b:R),
- a <= b ->
- (forall x:R, a <= x <= b -> continuity_pt f x) ->
- forall x:R, a <= x -> x <= b -> Riemann_integrable f a x.
-intros; apply continuity_implies_RiemannInt;
- [ assumption
- | intros; apply H0; elim H3; intros; split;
- assumption || apply Rle_trans with x; assumption ].
+ forall (f:R -> R) (a b:R),
+ a <= b ->
+ (forall x:R, a <= x <= b -> continuity_pt f x) ->
+ forall x:R, a <= x -> x <= b -> Riemann_integrable f a x.
+Proof.
+ intros; apply continuity_implies_RiemannInt;
+ [ assumption
+ | intros; apply H0; elim H3; intros; split;
+ assumption || apply Rle_trans with x; assumption ].
Qed.
Definition primitive (f:R -> R) (a b:R) (h:a <= b)
(pr:forall x:R, a <= x -> x <= b -> Riemann_integrable f a x)
(x:R) : R :=
match Rle_dec a x with
- | left r =>
+ | left r =>
match Rle_dec x b with
- | left r0 => RiemannInt (pr x r r0)
- | right _ => f b * (x - b) + RiemannInt (pr b h (Rle_refl b))
+ | left r0 => RiemannInt (pr x r r0)
+ | right _ => f b * (x - b) + RiemannInt (pr b h (Rle_refl b))
end
- | right _ => f a * (x - a)
+ | right _ => f a * (x - a)
end.
Lemma RiemannInt_P20 :
- forall (f:R -> R) (a b:R) (h:a <= b)
- (pr:forall x:R, a <= x -> x <= b -> Riemann_integrable f a x)
- (pr0:Riemann_integrable f a b),
- RiemannInt pr0 = primitive h pr b - primitive h pr a.
-intros; replace (primitive h pr a) with 0.
-replace (RiemannInt pr0) with (primitive h pr b).
-ring.
-unfold primitive in |- *; case (Rle_dec a b); case (Rle_dec b b); intros;
- [ apply RiemannInt_P5
- | elim n; right; reflexivity
- | elim n; assumption
- | elim n0; assumption ].
-symmetry in |- *; unfold primitive in |- *; case (Rle_dec a a);
- case (Rle_dec a b); intros;
- [ apply RiemannInt_P9
- | elim n; assumption
- | elim n; right; reflexivity
- | elim n0; right; reflexivity ].
+ forall (f:R -> R) (a b:R) (h:a <= b)
+ (pr:forall x:R, a <= x -> x <= b -> Riemann_integrable f a x)
+ (pr0:Riemann_integrable f a b),
+ RiemannInt pr0 = primitive h pr b - primitive h pr a.
+Proof.
+ intros; replace (primitive h pr a) with 0.
+ replace (RiemannInt pr0) with (primitive h pr b).
+ ring.
+ unfold primitive in |- *; case (Rle_dec a b); case (Rle_dec b b); intros;
+ [ apply RiemannInt_P5
+ | elim n; right; reflexivity
+ | elim n; assumption
+ | elim n0; assumption ].
+ symmetry in |- *; unfold primitive in |- *; case (Rle_dec a a);
+ case (Rle_dec a b); intros;
+ [ apply RiemannInt_P9
+ | elim n; assumption
+ | elim n; right; reflexivity
+ | elim n0; right; reflexivity ].
Qed.
Lemma RiemannInt_P21 :
- forall (f:R -> R) (a b c:R),
- a <= b ->
- b <= c ->
- Riemann_integrable f a b ->
- Riemann_integrable f b c -> Riemann_integrable f a c.
-unfold Riemann_integrable in |- *; intros f a b c Hyp1 Hyp2 X X0 eps.
-assert (H : 0 < eps / 2).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ apply (cond_pos eps) | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (X (mkposreal _ H)); clear X; intros phi1 [psi1 H1];
- elim (X0 (mkposreal _ H)); clear X0; intros phi2 [psi2 H2].
-set
- (phi3 :=
- fun x:R =>
- match Rle_dec a x with
- | left _ =>
- match Rle_dec x b with
- | left _ => phi1 x
- | right _ => phi2 x
- end
- | right _ => 0
- end).
-set
- (psi3 :=
- fun x:R =>
- match Rle_dec a x with
- | left _ =>
- match Rle_dec x b with
- | left _ => psi1 x
- | right _ => psi2 x
- end
- | right _ => 0
- end).
-cut (IsStepFun phi3 a c).
-intro; cut (IsStepFun psi3 a b).
-intro; cut (IsStepFun psi3 b c).
-intro; cut (IsStepFun psi3 a c).
-intro; split with (mkStepFun X); split with (mkStepFun X2); simpl in |- *;
- split.
-intros; unfold phi3, psi3 in |- *; case (Rle_dec t b); case (Rle_dec a t);
- intros.
-elim H1; intros; apply H3.
-replace (Rmin a b) with a.
-replace (Rmax a b) with b.
-split; assumption.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; assumption ].
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; assumption ].
-elim n; replace a with (Rmin a c).
-elim H0; intros; assumption.
-unfold Rmin in |- *; case (Rle_dec a c); intro;
- [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
-elim H2; intros; apply H3.
-replace (Rmax b c) with (Rmax a c).
-elim H0; intros; split; try assumption.
-replace (Rmin b c) with b.
-auto with real.
-unfold Rmin in |- *; case (Rle_dec b c); intro;
- [ reflexivity | elim n0; assumption ].
-unfold Rmax in |- *; case (Rle_dec a c); case (Rle_dec b c); intros;
- try (elim n0; assumption || elim n0; apply Rle_trans with b; assumption).
-reflexivity.
-elim n; replace a with (Rmin a c).
-elim H0; intros; assumption.
-unfold Rmin in |- *; case (Rle_dec a c); intro;
- [ reflexivity | elim n1; apply Rle_trans with b; assumption ].
-rewrite <- (StepFun_P43 X0 X1 X2).
-apply Rle_lt_trans with
- (Rabs (RiemannInt_SF (mkStepFun X0)) + Rabs (RiemannInt_SF (mkStepFun X1))).
-apply Rabs_triang.
-rewrite (double_var eps);
- replace (RiemannInt_SF (mkStepFun X0)) with (RiemannInt_SF psi1).
-replace (RiemannInt_SF (mkStepFun X1)) with (RiemannInt_SF psi2).
-apply Rplus_lt_compat.
-elim H1; intros; assumption.
-elim H2; intros; assumption.
-apply Rle_antisym.
-apply StepFun_P37; try assumption.
-simpl in |- *; intros; unfold psi3 in |- *; elim H0; clear H0; intros;
- case (Rle_dec a x); case (Rle_dec x b); intros;
- [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H0))
- | right; reflexivity
- | elim n; apply Rle_trans with b; [ assumption | left; assumption ]
- | elim n0; apply Rle_trans with b; [ assumption | left; assumption ] ].
-apply StepFun_P37; try assumption.
-simpl in |- *; intros; unfold psi3 in |- *; elim H0; clear H0; intros;
- case (Rle_dec a x); case (Rle_dec x b); intros;
- [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H0))
- | right; reflexivity
- | elim n; apply Rle_trans with b; [ assumption | left; assumption ]
- | elim n0; apply Rle_trans with b; [ assumption | left; assumption ] ].
-apply Rle_antisym.
-apply StepFun_P37; try assumption.
-simpl in |- *; intros; unfold psi3 in |- *; elim H0; clear H0; intros;
- case (Rle_dec a x); case (Rle_dec x b); intros;
- [ right; reflexivity
- | elim n; left; assumption
- | elim n; left; assumption
- | elim n0; left; assumption ].
-apply StepFun_P37; try assumption.
-simpl in |- *; intros; unfold psi3 in |- *; elim H0; clear H0; intros;
- case (Rle_dec a x); case (Rle_dec x b); intros;
- [ right; reflexivity
- | elim n; left; assumption
- | elim n; left; assumption
- | elim n0; left; assumption ].
-apply StepFun_P46 with b; assumption.
-assert (H3 := pre psi2); unfold IsStepFun in H3; unfold is_subdivision in H3;
- elim H3; clear H3; intros l1 [lf1 H3]; split with l1;
- split with lf1; unfold adapted_couple in H3; decompose [and] H3;
- clear H3; unfold adapted_couple in |- *; repeat split;
- try assumption.
-intros; assert (H9 := H8 i H3); unfold constant_D_eq, open_interval in |- *;
- unfold constant_D_eq, open_interval in H9; intros;
- rewrite <- (H9 x H7); unfold psi3 in |- *; assert (H10 : b < x).
-apply Rle_lt_trans with (pos_Rl l1 i).
-replace b with (Rmin b c).
-rewrite <- H5; elim (RList_P6 l1); intros; apply H10; try assumption.
-apply le_O_n.
-apply lt_trans with (pred (Rlength l1)); try assumption; apply lt_pred_n_n;
- apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H6;
- discriminate.
-unfold Rmin in |- *; case (Rle_dec b c); intro;
- [ reflexivity | elim n; assumption ].
-elim H7; intros; assumption.
-case (Rle_dec a x); case (Rle_dec x b); intros;
- [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H10))
- | reflexivity
- | elim n; apply Rle_trans with b; [ assumption | left; assumption ]
- | elim n0; apply Rle_trans with b; [ assumption | left; assumption ] ].
-assert (H3 := pre psi1); unfold IsStepFun in H3; unfold is_subdivision in H3;
- elim H3; clear H3; intros l1 [lf1 H3]; split with l1;
- split with lf1; unfold adapted_couple in H3; decompose [and] H3;
- clear H3; unfold adapted_couple in |- *; repeat split;
- try assumption.
-intros; assert (H9 := H8 i H3); unfold constant_D_eq, open_interval in |- *;
- unfold constant_D_eq, open_interval in H9; intros;
- rewrite <- (H9 x H7); unfold psi3 in |- *; assert (H10 : x <= b).
-apply Rle_trans with (pos_Rl l1 (S i)).
-elim H7; intros; left; assumption.
-replace b with (Rmax a b).
-rewrite <- H4; elim (RList_P6 l1); intros; apply H10; try assumption.
-apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H6;
- discriminate.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; assumption ].
-assert (H11 : a <= x).
-apply Rle_trans with (pos_Rl l1 i).
-replace a with (Rmin a b).
-rewrite <- H5; elim (RList_P6 l1); intros; apply H11; try assumption.
-apply le_O_n.
-apply lt_trans with (pred (Rlength l1)); try assumption; apply lt_pred_n_n;
- apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H6;
- discriminate.
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; assumption ].
-left; elim H7; intros; assumption.
-case (Rle_dec a x); case (Rle_dec x b); intros; reflexivity || elim n;
- assumption.
-apply StepFun_P46 with b.
-assert (H3 := pre phi1); unfold IsStepFun in H3; unfold is_subdivision in H3;
- elim H3; clear H3; intros l1 [lf1 H3]; split with l1;
- split with lf1; unfold adapted_couple in H3; decompose [and] H3;
- clear H3; unfold adapted_couple in |- *; repeat split;
- try assumption.
-intros; assert (H9 := H8 i H3); unfold constant_D_eq, open_interval in |- *;
- unfold constant_D_eq, open_interval in H9; intros;
- rewrite <- (H9 x H7); unfold psi3 in |- *; assert (H10 : x <= b).
-apply Rle_trans with (pos_Rl l1 (S i)).
-elim H7; intros; left; assumption.
-replace b with (Rmax a b).
-rewrite <- H4; elim (RList_P6 l1); intros; apply H10; try assumption.
-apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H6;
- discriminate.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; assumption ].
-assert (H11 : a <= x).
-apply Rle_trans with (pos_Rl l1 i).
-replace a with (Rmin a b).
-rewrite <- H5; elim (RList_P6 l1); intros; apply H11; try assumption.
-apply le_O_n.
-apply lt_trans with (pred (Rlength l1)); try assumption; apply lt_pred_n_n;
- apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H6;
- discriminate.
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; assumption ].
-left; elim H7; intros; assumption.
-unfold phi3 in |- *; case (Rle_dec a x); case (Rle_dec x b); intros;
- reflexivity || elim n; assumption.
-assert (H3 := pre phi2); unfold IsStepFun in H3; unfold is_subdivision in H3;
- elim H3; clear H3; intros l1 [lf1 H3]; split with l1;
- split with lf1; unfold adapted_couple in H3; decompose [and] H3;
- clear H3; unfold adapted_couple in |- *; repeat split;
- try assumption.
-intros; assert (H9 := H8 i H3); unfold constant_D_eq, open_interval in |- *;
- unfold constant_D_eq, open_interval in H9; intros;
- rewrite <- (H9 x H7); unfold psi3 in |- *; assert (H10 : b < x).
-apply Rle_lt_trans with (pos_Rl l1 i).
-replace b with (Rmin b c).
-rewrite <- H5; elim (RList_P6 l1); intros; apply H10; try assumption.
-apply le_O_n.
-apply lt_trans with (pred (Rlength l1)); try assumption; apply lt_pred_n_n;
- apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H6;
- discriminate.
-unfold Rmin in |- *; case (Rle_dec b c); intro;
- [ reflexivity | elim n; assumption ].
-elim H7; intros; assumption.
-unfold phi3 in |- *; case (Rle_dec a x); case (Rle_dec x b); intros;
- [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H10))
- | reflexivity
- | elim n; apply Rle_trans with b; [ assumption | left; assumption ]
- | elim n0; apply Rle_trans with b; [ assumption | left; assumption ] ].
+ forall (f:R -> R) (a b c:R),
+ a <= b ->
+ b <= c ->
+ Riemann_integrable f a b ->
+ Riemann_integrable f b c -> Riemann_integrable f a c.
+Proof.
+ unfold Riemann_integrable in |- *; intros f a b c Hyp1 Hyp2 X X0 eps.
+ assert (H : 0 < eps / 2).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ apply (cond_pos eps) | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (X (mkposreal _ H)); clear X; intros phi1 [psi1 H1];
+ elim (X0 (mkposreal _ H)); clear X0; intros phi2 [psi2 H2].
+ set
+ (phi3 :=
+ fun x:R =>
+ match Rle_dec a x with
+ | left _ =>
+ match Rle_dec x b with
+ | left _ => phi1 x
+ | right _ => phi2 x
+ end
+ | right _ => 0
+ end).
+ set
+ (psi3 :=
+ fun x:R =>
+ match Rle_dec a x with
+ | left _ =>
+ match Rle_dec x b with
+ | left _ => psi1 x
+ | right _ => psi2 x
+ end
+ | right _ => 0
+ end).
+ cut (IsStepFun phi3 a c).
+ intro; cut (IsStepFun psi3 a b).
+ intro; cut (IsStepFun psi3 b c).
+ intro; cut (IsStepFun psi3 a c).
+ intro; split with (mkStepFun X); split with (mkStepFun X2); simpl in |- *;
+ split.
+ intros; unfold phi3, psi3 in |- *; case (Rle_dec t b); case (Rle_dec a t);
+ intros.
+ elim H1; intros; apply H3.
+ replace (Rmin a b) with a.
+ replace (Rmax a b) with b.
+ split; assumption.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; assumption ].
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; assumption ].
+ elim n; replace a with (Rmin a c).
+ elim H0; intros; assumption.
+ unfold Rmin in |- *; case (Rle_dec a c); intro;
+ [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
+ elim H2; intros; apply H3.
+ replace (Rmax b c) with (Rmax a c).
+ elim H0; intros; split; try assumption.
+ replace (Rmin b c) with b.
+ auto with real.
+ unfold Rmin in |- *; case (Rle_dec b c); intro;
+ [ reflexivity | elim n0; assumption ].
+ unfold Rmax in |- *; case (Rle_dec a c); case (Rle_dec b c); intros;
+ try (elim n0; assumption || elim n0; apply Rle_trans with b; assumption).
+ reflexivity.
+ elim n; replace a with (Rmin a c).
+ elim H0; intros; assumption.
+ unfold Rmin in |- *; case (Rle_dec a c); intro;
+ [ reflexivity | elim n1; apply Rle_trans with b; assumption ].
+ rewrite <- (StepFun_P43 X0 X1 X2).
+ apply Rle_lt_trans with
+ (Rabs (RiemannInt_SF (mkStepFun X0)) + Rabs (RiemannInt_SF (mkStepFun X1))).
+ apply Rabs_triang.
+ rewrite (double_var eps);
+ replace (RiemannInt_SF (mkStepFun X0)) with (RiemannInt_SF psi1).
+ replace (RiemannInt_SF (mkStepFun X1)) with (RiemannInt_SF psi2).
+ apply Rplus_lt_compat.
+ elim H1; intros; assumption.
+ elim H2; intros; assumption.
+ apply Rle_antisym.
+ apply StepFun_P37; try assumption.
+ simpl in |- *; intros; unfold psi3 in |- *; elim H0; clear H0; intros;
+ case (Rle_dec a x); case (Rle_dec x b); intros;
+ [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H0))
+ | right; reflexivity
+ | elim n; apply Rle_trans with b; [ assumption | left; assumption ]
+ | elim n0; apply Rle_trans with b; [ assumption | left; assumption ] ].
+ apply StepFun_P37; try assumption.
+ simpl in |- *; intros; unfold psi3 in |- *; elim H0; clear H0; intros;
+ case (Rle_dec a x); case (Rle_dec x b); intros;
+ [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H0))
+ | right; reflexivity
+ | elim n; apply Rle_trans with b; [ assumption | left; assumption ]
+ | elim n0; apply Rle_trans with b; [ assumption | left; assumption ] ].
+ apply Rle_antisym.
+ apply StepFun_P37; try assumption.
+ simpl in |- *; intros; unfold psi3 in |- *; elim H0; clear H0; intros;
+ case (Rle_dec a x); case (Rle_dec x b); intros;
+ [ right; reflexivity
+ | elim n; left; assumption
+ | elim n; left; assumption
+ | elim n0; left; assumption ].
+ apply StepFun_P37; try assumption.
+ simpl in |- *; intros; unfold psi3 in |- *; elim H0; clear H0; intros;
+ case (Rle_dec a x); case (Rle_dec x b); intros;
+ [ right; reflexivity
+ | elim n; left; assumption
+ | elim n; left; assumption
+ | elim n0; left; assumption ].
+ apply StepFun_P46 with b; assumption.
+ assert (H3 := pre psi2); unfold IsStepFun in H3; unfold is_subdivision in H3;
+ elim H3; clear H3; intros l1 [lf1 H3]; split with l1;
+ split with lf1; unfold adapted_couple in H3; decompose [and] H3;
+ clear H3; unfold adapted_couple in |- *; repeat split;
+ try assumption.
+ intros; assert (H9 := H8 i H3); unfold constant_D_eq, open_interval in |- *;
+ unfold constant_D_eq, open_interval in H9; intros;
+ rewrite <- (H9 x H7); unfold psi3 in |- *; assert (H10 : b < x).
+ apply Rle_lt_trans with (pos_Rl l1 i).
+ replace b with (Rmin b c).
+ rewrite <- H5; elim (RList_P6 l1); intros; apply H10; try assumption.
+ apply le_O_n.
+ apply lt_trans with (pred (Rlength l1)); try assumption; apply lt_pred_n_n;
+ apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H6;
+ discriminate.
+ unfold Rmin in |- *; case (Rle_dec b c); intro;
+ [ reflexivity | elim n; assumption ].
+ elim H7; intros; assumption.
+ case (Rle_dec a x); case (Rle_dec x b); intros;
+ [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H10))
+ | reflexivity
+ | elim n; apply Rle_trans with b; [ assumption | left; assumption ]
+ | elim n0; apply Rle_trans with b; [ assumption | left; assumption ] ].
+ assert (H3 := pre psi1); unfold IsStepFun in H3; unfold is_subdivision in H3;
+ elim H3; clear H3; intros l1 [lf1 H3]; split with l1;
+ split with lf1; unfold adapted_couple in H3; decompose [and] H3;
+ clear H3; unfold adapted_couple in |- *; repeat split;
+ try assumption.
+ intros; assert (H9 := H8 i H3); unfold constant_D_eq, open_interval in |- *;
+ unfold constant_D_eq, open_interval in H9; intros;
+ rewrite <- (H9 x H7); unfold psi3 in |- *; assert (H10 : x <= b).
+ apply Rle_trans with (pos_Rl l1 (S i)).
+ elim H7; intros; left; assumption.
+ replace b with (Rmax a b).
+ rewrite <- H4; elim (RList_P6 l1); intros; apply H10; try assumption.
+ apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H6;
+ discriminate.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; assumption ].
+ assert (H11 : a <= x).
+ apply Rle_trans with (pos_Rl l1 i).
+ replace a with (Rmin a b).
+ rewrite <- H5; elim (RList_P6 l1); intros; apply H11; try assumption.
+ apply le_O_n.
+ apply lt_trans with (pred (Rlength l1)); try assumption; apply lt_pred_n_n;
+ apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H6;
+ discriminate.
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; assumption ].
+ left; elim H7; intros; assumption.
+ case (Rle_dec a x); case (Rle_dec x b); intros; reflexivity || elim n;
+ assumption.
+ apply StepFun_P46 with b.
+ assert (H3 := pre phi1); unfold IsStepFun in H3; unfold is_subdivision in H3;
+ elim H3; clear H3; intros l1 [lf1 H3]; split with l1;
+ split with lf1; unfold adapted_couple in H3; decompose [and] H3;
+ clear H3; unfold adapted_couple in |- *; repeat split;
+ try assumption.
+ intros; assert (H9 := H8 i H3); unfold constant_D_eq, open_interval in |- *;
+ unfold constant_D_eq, open_interval in H9; intros;
+ rewrite <- (H9 x H7); unfold psi3 in |- *; assert (H10 : x <= b).
+ apply Rle_trans with (pos_Rl l1 (S i)).
+ elim H7; intros; left; assumption.
+ replace b with (Rmax a b).
+ rewrite <- H4; elim (RList_P6 l1); intros; apply H10; try assumption.
+ apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H6;
+ discriminate.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; assumption ].
+ assert (H11 : a <= x).
+ apply Rle_trans with (pos_Rl l1 i).
+ replace a with (Rmin a b).
+ rewrite <- H5; elim (RList_P6 l1); intros; apply H11; try assumption.
+ apply le_O_n.
+ apply lt_trans with (pred (Rlength l1)); try assumption; apply lt_pred_n_n;
+ apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H6;
+ discriminate.
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; assumption ].
+ left; elim H7; intros; assumption.
+ unfold phi3 in |- *; case (Rle_dec a x); case (Rle_dec x b); intros;
+ reflexivity || elim n; assumption.
+ assert (H3 := pre phi2); unfold IsStepFun in H3; unfold is_subdivision in H3;
+ elim H3; clear H3; intros l1 [lf1 H3]; split with l1;
+ split with lf1; unfold adapted_couple in H3; decompose [and] H3;
+ clear H3; unfold adapted_couple in |- *; repeat split;
+ try assumption.
+ intros; assert (H9 := H8 i H3); unfold constant_D_eq, open_interval in |- *;
+ unfold constant_D_eq, open_interval in H9; intros;
+ rewrite <- (H9 x H7); unfold psi3 in |- *; assert (H10 : b < x).
+ apply Rle_lt_trans with (pos_Rl l1 i).
+ replace b with (Rmin b c).
+ rewrite <- H5; elim (RList_P6 l1); intros; apply H10; try assumption.
+ apply le_O_n.
+ apply lt_trans with (pred (Rlength l1)); try assumption; apply lt_pred_n_n;
+ apply neq_O_lt; red in |- *; intro; rewrite <- H12 in H6;
+ discriminate.
+ unfold Rmin in |- *; case (Rle_dec b c); intro;
+ [ reflexivity | elim n; assumption ].
+ elim H7; intros; assumption.
+ unfold phi3 in |- *; case (Rle_dec a x); case (Rle_dec x b); intros;
+ [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H10))
+ | reflexivity
+ | elim n; apply Rle_trans with b; [ assumption | left; assumption ]
+ | elim n0; apply Rle_trans with b; [ assumption | left; assumption ] ].
Qed.
Lemma RiemannInt_P22 :
- forall (f:R -> R) (a b c:R),
- Riemann_integrable f a b -> a <= c <= b -> Riemann_integrable f a c.
-unfold Riemann_integrable in |- *; intros; elim (X eps); clear X;
- intros phi [psi H0]; elim H; elim H0; clear H H0;
- intros; assert (H3 : IsStepFun phi a c).
-apply StepFun_P44 with b.
-apply (pre phi).
-split; assumption.
-assert (H4 : IsStepFun psi a c).
-apply StepFun_P44 with b.
-apply (pre psi).
-split; assumption.
-split with (mkStepFun H3); split with (mkStepFun H4); split.
-simpl in |- *; intros; apply H.
-replace (Rmin a b) with (Rmin a c).
-elim H5; intros; split; try assumption.
-apply Rle_trans with (Rmax a c); try assumption.
-replace (Rmax a b) with b.
-replace (Rmax a c) with c.
-assumption.
-unfold Rmax in |- *; case (Rle_dec a c); intro;
- [ reflexivity | elim n; assumption ].
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-unfold Rmin in |- *; case (Rle_dec a c); case (Rle_dec a b); intros;
- [ reflexivity
- | elim n; apply Rle_trans with c; assumption
- | elim n; assumption
- | elim n0; assumption ].
-rewrite Rabs_right.
-assert (H5 : IsStepFun psi c b).
-apply StepFun_P46 with a.
-apply StepFun_P6; assumption.
-apply (pre psi).
-replace (RiemannInt_SF (mkStepFun H4)) with
- (RiemannInt_SF psi - RiemannInt_SF (mkStepFun H5)).
-apply Rle_lt_trans with (RiemannInt_SF psi).
-unfold Rminus in |- *; pattern (RiemannInt_SF psi) at 2 in |- *;
- rewrite <- Rplus_0_r; apply Rplus_le_compat_l; rewrite <- Ropp_0;
- apply Ropp_ge_le_contravar; apply Rle_ge;
- replace 0 with (RiemannInt_SF (mkStepFun (StepFun_P4 c b 0))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *; unfold fct_cte in |- *;
- apply Rle_trans with (Rabs (f x - phi x)).
-apply Rabs_pos.
-apply H.
-replace (Rmin a b) with a.
-replace (Rmax a b) with b.
-elim H6; intros; split; left.
-apply Rle_lt_trans with c; assumption.
-assumption.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-rewrite StepFun_P18; ring.
-apply Rle_lt_trans with (Rabs (RiemannInt_SF psi)).
-apply RRle_abs.
-assumption.
-assert (H6 : IsStepFun psi a b).
-apply (pre psi).
-replace (RiemannInt_SF psi) with (RiemannInt_SF (mkStepFun H6)).
-rewrite <- (StepFun_P43 H4 H5 H6); ring.
-unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro.
-eapply StepFun_P17.
-apply StepFun_P1.
-simpl in |- *; apply StepFun_P1.
-apply Ropp_eq_compat; eapply StepFun_P17.
-apply StepFun_P1.
-simpl in |- *; apply StepFun_P1.
-apply Rle_ge; replace 0 with (RiemannInt_SF (mkStepFun (StepFun_P4 a c 0))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *; unfold fct_cte in |- *;
- apply Rle_trans with (Rabs (f x - phi x)).
-apply Rabs_pos.
-apply H.
-replace (Rmin a b) with a.
-replace (Rmax a b) with b.
-elim H5; intros; split; left.
-assumption.
-apply Rlt_le_trans with c; assumption.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-rewrite StepFun_P18; ring.
+ forall (f:R -> R) (a b c:R),
+ Riemann_integrable f a b -> a <= c <= b -> Riemann_integrable f a c.
+Proof.
+ unfold Riemann_integrable in |- *; intros; elim (X eps); clear X;
+ intros phi [psi H0]; elim H; elim H0; clear H H0;
+ intros; assert (H3 : IsStepFun phi a c).
+ apply StepFun_P44 with b.
+ apply (pre phi).
+ split; assumption.
+ assert (H4 : IsStepFun psi a c).
+ apply StepFun_P44 with b.
+ apply (pre psi).
+ split; assumption.
+ split with (mkStepFun H3); split with (mkStepFun H4); split.
+ simpl in |- *; intros; apply H.
+ replace (Rmin a b) with (Rmin a c).
+ elim H5; intros; split; try assumption.
+ apply Rle_trans with (Rmax a c); try assumption.
+ replace (Rmax a b) with b.
+ replace (Rmax a c) with c.
+ assumption.
+ unfold Rmax in |- *; case (Rle_dec a c); intro;
+ [ reflexivity | elim n; assumption ].
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ unfold Rmin in |- *; case (Rle_dec a c); case (Rle_dec a b); intros;
+ [ reflexivity
+ | elim n; apply Rle_trans with c; assumption
+ | elim n; assumption
+ | elim n0; assumption ].
+ rewrite Rabs_right.
+ assert (H5 : IsStepFun psi c b).
+ apply StepFun_P46 with a.
+ apply StepFun_P6; assumption.
+ apply (pre psi).
+ replace (RiemannInt_SF (mkStepFun H4)) with
+ (RiemannInt_SF psi - RiemannInt_SF (mkStepFun H5)).
+ apply Rle_lt_trans with (RiemannInt_SF psi).
+ unfold Rminus in |- *; pattern (RiemannInt_SF psi) at 2 in |- *;
+ rewrite <- Rplus_0_r; apply Rplus_le_compat_l; rewrite <- Ropp_0;
+ apply Ropp_ge_le_contravar; apply Rle_ge;
+ replace 0 with (RiemannInt_SF (mkStepFun (StepFun_P4 c b 0))).
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *; unfold fct_cte in |- *;
+ apply Rle_trans with (Rabs (f x - phi x)).
+ apply Rabs_pos.
+ apply H.
+ replace (Rmin a b) with a.
+ replace (Rmax a b) with b.
+ elim H6; intros; split; left.
+ apply Rle_lt_trans with c; assumption.
+ assumption.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ rewrite StepFun_P18; ring.
+ apply Rle_lt_trans with (Rabs (RiemannInt_SF psi)).
+ apply RRle_abs.
+ assumption.
+ assert (H6 : IsStepFun psi a b).
+ apply (pre psi).
+ replace (RiemannInt_SF psi) with (RiemannInt_SF (mkStepFun H6)).
+ rewrite <- (StepFun_P43 H4 H5 H6); ring.
+ unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro.
+ eapply StepFun_P17.
+ apply StepFun_P1.
+ simpl in |- *; apply StepFun_P1.
+ apply Ropp_eq_compat; eapply StepFun_P17.
+ apply StepFun_P1.
+ simpl in |- *; apply StepFun_P1.
+ apply Rle_ge; replace 0 with (RiemannInt_SF (mkStepFun (StepFun_P4 a c 0))).
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *; unfold fct_cte in |- *;
+ apply Rle_trans with (Rabs (f x - phi x)).
+ apply Rabs_pos.
+ apply H.
+ replace (Rmin a b) with a.
+ replace (Rmax a b) with b.
+ elim H5; intros; split; left.
+ assumption.
+ apply Rlt_le_trans with c; assumption.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ rewrite StepFun_P18; ring.
Qed.
Lemma RiemannInt_P23 :
- forall (f:R -> R) (a b c:R),
- Riemann_integrable f a b -> a <= c <= b -> Riemann_integrable f c b.
-unfold Riemann_integrable in |- *; intros; elim (X eps); clear X;
- intros phi [psi H0]; elim H; elim H0; clear H H0;
- intros; assert (H3 : IsStepFun phi c b).
-apply StepFun_P45 with a.
-apply (pre phi).
-split; assumption.
-assert (H4 : IsStepFun psi c b).
-apply StepFun_P45 with a.
-apply (pre psi).
-split; assumption.
-split with (mkStepFun H3); split with (mkStepFun H4); split.
-simpl in |- *; intros; apply H.
-replace (Rmax a b) with (Rmax c b).
-elim H5; intros; split; try assumption.
-apply Rle_trans with (Rmin c b); try assumption.
-replace (Rmin a b) with a.
-replace (Rmin c b) with c.
-assumption.
-unfold Rmin in |- *; case (Rle_dec c b); intro;
- [ reflexivity | elim n; assumption ].
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-unfold Rmax in |- *; case (Rle_dec c b); case (Rle_dec a b); intros;
- [ reflexivity
- | elim n; apply Rle_trans with c; assumption
- | elim n; assumption
- | elim n0; assumption ].
-rewrite Rabs_right.
-assert (H5 : IsStepFun psi a c).
-apply StepFun_P46 with b.
-apply (pre psi).
-apply StepFun_P6; assumption.
-replace (RiemannInt_SF (mkStepFun H4)) with
- (RiemannInt_SF psi - RiemannInt_SF (mkStepFun H5)).
-apply Rle_lt_trans with (RiemannInt_SF psi).
-unfold Rminus in |- *; pattern (RiemannInt_SF psi) at 2 in |- *;
- rewrite <- Rplus_0_r; apply Rplus_le_compat_l; rewrite <- Ropp_0;
- apply Ropp_ge_le_contravar; apply Rle_ge;
- replace 0 with (RiemannInt_SF (mkStepFun (StepFun_P4 a c 0))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *; unfold fct_cte in |- *;
- apply Rle_trans with (Rabs (f x - phi x)).
-apply Rabs_pos.
-apply H.
-replace (Rmin a b) with a.
-replace (Rmax a b) with b.
-elim H6; intros; split; left.
-assumption.
-apply Rlt_le_trans with c; assumption.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-rewrite StepFun_P18; ring.
-apply Rle_lt_trans with (Rabs (RiemannInt_SF psi)).
-apply RRle_abs.
-assumption.
-assert (H6 : IsStepFun psi a b).
-apply (pre psi).
-replace (RiemannInt_SF psi) with (RiemannInt_SF (mkStepFun H6)).
-rewrite <- (StepFun_P43 H5 H4 H6); ring.
-unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro.
-eapply StepFun_P17.
-apply StepFun_P1.
-simpl in |- *; apply StepFun_P1.
-apply Ropp_eq_compat; eapply StepFun_P17.
-apply StepFun_P1.
-simpl in |- *; apply StepFun_P1.
-apply Rle_ge; replace 0 with (RiemannInt_SF (mkStepFun (StepFun_P4 c b 0))).
-apply StepFun_P37; try assumption.
-intros; simpl in |- *; unfold fct_cte in |- *;
- apply Rle_trans with (Rabs (f x - phi x)).
-apply Rabs_pos.
-apply H.
-replace (Rmin a b) with a.
-replace (Rmax a b) with b.
-elim H5; intros; split; left.
-apply Rle_lt_trans with c; assumption.
-assumption.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n; apply Rle_trans with c; assumption ].
-rewrite StepFun_P18; ring.
+ forall (f:R -> R) (a b c:R),
+ Riemann_integrable f a b -> a <= c <= b -> Riemann_integrable f c b.
+Proof.
+ unfold Riemann_integrable in |- *; intros; elim (X eps); clear X;
+ intros phi [psi H0]; elim H; elim H0; clear H H0;
+ intros; assert (H3 : IsStepFun phi c b).
+ apply StepFun_P45 with a.
+ apply (pre phi).
+ split; assumption.
+ assert (H4 : IsStepFun psi c b).
+ apply StepFun_P45 with a.
+ apply (pre psi).
+ split; assumption.
+ split with (mkStepFun H3); split with (mkStepFun H4); split.
+ simpl in |- *; intros; apply H.
+ replace (Rmax a b) with (Rmax c b).
+ elim H5; intros; split; try assumption.
+ apply Rle_trans with (Rmin c b); try assumption.
+ replace (Rmin a b) with a.
+ replace (Rmin c b) with c.
+ assumption.
+ unfold Rmin in |- *; case (Rle_dec c b); intro;
+ [ reflexivity | elim n; assumption ].
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ unfold Rmax in |- *; case (Rle_dec c b); case (Rle_dec a b); intros;
+ [ reflexivity
+ | elim n; apply Rle_trans with c; assumption
+ | elim n; assumption
+ | elim n0; assumption ].
+ rewrite Rabs_right.
+ assert (H5 : IsStepFun psi a c).
+ apply StepFun_P46 with b.
+ apply (pre psi).
+ apply StepFun_P6; assumption.
+ replace (RiemannInt_SF (mkStepFun H4)) with
+ (RiemannInt_SF psi - RiemannInt_SF (mkStepFun H5)).
+ apply Rle_lt_trans with (RiemannInt_SF psi).
+ unfold Rminus in |- *; pattern (RiemannInt_SF psi) at 2 in |- *;
+ rewrite <- Rplus_0_r; apply Rplus_le_compat_l; rewrite <- Ropp_0;
+ apply Ropp_ge_le_contravar; apply Rle_ge;
+ replace 0 with (RiemannInt_SF (mkStepFun (StepFun_P4 a c 0))).
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *; unfold fct_cte in |- *;
+ apply Rle_trans with (Rabs (f x - phi x)).
+ apply Rabs_pos.
+ apply H.
+ replace (Rmin a b) with a.
+ replace (Rmax a b) with b.
+ elim H6; intros; split; left.
+ assumption.
+ apply Rlt_le_trans with c; assumption.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ rewrite StepFun_P18; ring.
+ apply Rle_lt_trans with (Rabs (RiemannInt_SF psi)).
+ apply RRle_abs.
+ assumption.
+ assert (H6 : IsStepFun psi a b).
+ apply (pre psi).
+ replace (RiemannInt_SF psi) with (RiemannInt_SF (mkStepFun H6)).
+ rewrite <- (StepFun_P43 H5 H4 H6); ring.
+ unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro.
+ eapply StepFun_P17.
+ apply StepFun_P1.
+ simpl in |- *; apply StepFun_P1.
+ apply Ropp_eq_compat; eapply StepFun_P17.
+ apply StepFun_P1.
+ simpl in |- *; apply StepFun_P1.
+ apply Rle_ge; replace 0 with (RiemannInt_SF (mkStepFun (StepFun_P4 c b 0))).
+ apply StepFun_P37; try assumption.
+ intros; simpl in |- *; unfold fct_cte in |- *;
+ apply Rle_trans with (Rabs (f x - phi x)).
+ apply Rabs_pos.
+ apply H.
+ replace (Rmin a b) with a.
+ replace (Rmax a b) with b.
+ elim H5; intros; split; left.
+ apply Rle_lt_trans with c; assumption.
+ assumption.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n; apply Rle_trans with c; assumption ].
+ rewrite StepFun_P18; ring.
Qed.
Lemma RiemannInt_P24 :
- forall (f:R -> R) (a b c:R),
- Riemann_integrable f a b ->
- Riemann_integrable f b c -> Riemann_integrable f a c.
-intros; case (Rle_dec a b); case (Rle_dec b c); intros.
-apply RiemannInt_P21 with b; assumption.
-case (Rle_dec a c); intro.
-apply RiemannInt_P22 with b; try assumption.
-split; [ assumption | auto with real ].
-apply RiemannInt_P1; apply RiemannInt_P22 with b.
-apply RiemannInt_P1; assumption.
-split; auto with real.
-case (Rle_dec a c); intro.
-apply RiemannInt_P23 with b; try assumption.
-split; auto with real.
-apply RiemannInt_P1; apply RiemannInt_P23 with b.
-apply RiemannInt_P1; assumption.
-split; [ assumption | auto with real ].
-apply RiemannInt_P1; apply RiemannInt_P21 with b;
- auto with real || apply RiemannInt_P1; assumption.
+ forall (f:R -> R) (a b c:R),
+ Riemann_integrable f a b ->
+ Riemann_integrable f b c -> Riemann_integrable f a c.
+Proof.
+ intros; case (Rle_dec a b); case (Rle_dec b c); intros.
+ apply RiemannInt_P21 with b; assumption.
+ case (Rle_dec a c); intro.
+ apply RiemannInt_P22 with b; try assumption.
+ split; [ assumption | auto with real ].
+ apply RiemannInt_P1; apply RiemannInt_P22 with b.
+ apply RiemannInt_P1; assumption.
+ split; auto with real.
+ case (Rle_dec a c); intro.
+ apply RiemannInt_P23 with b; try assumption.
+ split; auto with real.
+ apply RiemannInt_P1; apply RiemannInt_P23 with b.
+ apply RiemannInt_P1; assumption.
+ split; [ assumption | auto with real ].
+ apply RiemannInt_P1; apply RiemannInt_P21 with b;
+ auto with real || apply RiemannInt_P1; assumption.
Qed.
Lemma RiemannInt_P25 :
- forall (f:R -> R) (a b c:R) (pr1:Riemann_integrable f a b)
- (pr2:Riemann_integrable f b c) (pr3:Riemann_integrable f a c),
- a <= b -> b <= c -> RiemannInt pr1 + RiemannInt pr2 = RiemannInt pr3.
-intros f a b c pr1 pr2 pr3 Hyp1 Hyp2; unfold RiemannInt in |- *;
- case (RiemannInt_exists pr1 RinvN RinvN_cv);
- case (RiemannInt_exists pr2 RinvN RinvN_cv);
- case (RiemannInt_exists pr3 RinvN RinvN_cv); intros;
- symmetry in |- *; eapply UL_sequence.
-apply u.
-unfold Un_cv in |- *; intros; assert (H0 : 0 < eps / 3).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (u1 _ H0); clear u1; intros N1 H1; elim (u0 _ H0); clear u0;
- intros N2 H2;
- cut
- (Un_cv
- (fun n:nat =>
- RiemannInt_SF (phi_sequence RinvN pr3 n) -
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- RiemannInt_SF (phi_sequence RinvN pr2 n))) 0).
-intro; elim (H3 _ H0); clear H3; intros N3 H3;
- set (N0 := max (max N1 N2) N3); exists N0; intros;
- unfold R_dist in |- *;
- apply Rle_lt_trans with
- (Rabs
- (RiemannInt_SF (phi_sequence RinvN pr3 n) -
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- RiemannInt_SF (phi_sequence RinvN pr2 n))) +
- Rabs
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- RiemannInt_SF (phi_sequence RinvN pr2 n) - (x1 + x0))).
-replace (RiemannInt_SF (phi_sequence RinvN pr3 n) - (x1 + x0)) with
- (RiemannInt_SF (phi_sequence RinvN pr3 n) -
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- RiemannInt_SF (phi_sequence RinvN pr2 n)) +
+ forall (f:R -> R) (a b c:R) (pr1:Riemann_integrable f a b)
+ (pr2:Riemann_integrable f b c) (pr3:Riemann_integrable f a c),
+ a <= b -> b <= c -> RiemannInt pr1 + RiemannInt pr2 = RiemannInt pr3.
+Proof.
+ intros f a b c pr1 pr2 pr3 Hyp1 Hyp2; unfold RiemannInt in |- *;
+ case (RiemannInt_exists pr1 RinvN RinvN_cv);
+ case (RiemannInt_exists pr2 RinvN RinvN_cv);
+ case (RiemannInt_exists pr3 RinvN RinvN_cv); intros;
+ symmetry in |- *; eapply UL_sequence.
+ apply u.
+ unfold Un_cv in |- *; intros; assert (H0 : 0 < eps / 3).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (u1 _ H0); clear u1; intros N1 H1; elim (u0 _ H0); clear u0;
+ intros N2 H2;
+ cut
+ (Un_cv
+ (fun n:nat =>
+ RiemannInt_SF (phi_sequence RinvN pr3 n) -
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ RiemannInt_SF (phi_sequence RinvN pr2 n))) 0).
+ intro; elim (H3 _ H0); clear H3; intros N3 H3;
+ set (N0 := max (max N1 N2) N3); exists N0; intros;
+ unfold R_dist in |- *;
+ apply Rle_lt_trans with
+ (Rabs
+ (RiemannInt_SF (phi_sequence RinvN pr3 n) -
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ RiemannInt_SF (phi_sequence RinvN pr2 n))) +
+ Rabs
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ RiemannInt_SF (phi_sequence RinvN pr2 n) - (x1 + x0))).
+ replace (RiemannInt_SF (phi_sequence RinvN pr3 n) - (x1 + x0)) with
+ (RiemannInt_SF (phi_sequence RinvN pr3 n) -
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ RiemannInt_SF (phi_sequence RinvN pr2 n)) +
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) +
+ RiemannInt_SF (phi_sequence RinvN pr2 n) - (x1 + x0)));
+ [ apply Rabs_triang | ring ].
+ replace eps with (eps / 3 + eps / 3 + eps / 3).
+ rewrite Rplus_assoc; apply Rplus_lt_compat.
+ unfold R_dist in H3; cut (n >= N3)%nat.
+ intro; assert (H6 := H3 _ H5); unfold Rminus in H6; rewrite Ropp_0 in H6;
+ rewrite Rplus_0_r in H6; apply H6.
+ unfold ge in |- *; apply le_trans with N0;
+ [ unfold N0 in |- *; apply le_max_r | assumption ].
+ apply Rle_lt_trans with
+ (Rabs (RiemannInt_SF (phi_sequence RinvN pr1 n) - x1) +
+ Rabs (RiemannInt_SF (phi_sequence RinvN pr2 n) - x0)).
+ replace
(RiemannInt_SF (phi_sequence RinvN pr1 n) +
- RiemannInt_SF (phi_sequence RinvN pr2 n) - (x1 + x0)));
- [ apply Rabs_triang | ring ].
-replace eps with (eps / 3 + eps / 3 + eps / 3).
-rewrite Rplus_assoc; apply Rplus_lt_compat.
-unfold R_dist in H3; cut (n >= N3)%nat.
-intro; assert (H6 := H3 _ H5); unfold Rminus in H6; rewrite Ropp_0 in H6;
- rewrite Rplus_0_r in H6; apply H6.
-unfold ge in |- *; apply le_trans with N0;
- [ unfold N0 in |- *; apply le_max_r | assumption ].
-apply Rle_lt_trans with
- (Rabs (RiemannInt_SF (phi_sequence RinvN pr1 n) - x1) +
- Rabs (RiemannInt_SF (phi_sequence RinvN pr2 n) - x0)).
-replace
- (RiemannInt_SF (phi_sequence RinvN pr1 n) +
- RiemannInt_SF (phi_sequence RinvN pr2 n) - (x1 + x0)) with
- (RiemannInt_SF (phi_sequence RinvN pr1 n) - x1 +
- (RiemannInt_SF (phi_sequence RinvN pr2 n) - x0));
- [ apply Rabs_triang | ring ].
-apply Rplus_lt_compat.
-unfold R_dist in H1; apply H1.
-unfold ge in |- *; apply le_trans with N0;
- [ apply le_trans with (max N1 N2);
- [ apply le_max_l | unfold N0 in |- *; apply le_max_l ]
- | assumption ].
-unfold R_dist in H2; apply H2.
-unfold ge in |- *; apply le_trans with N0;
- [ apply le_trans with (max N1 N2);
- [ apply le_max_r | unfold N0 in |- *; apply le_max_l ]
- | assumption ].
-apply Rmult_eq_reg_l with 3;
- [ unfold Rdiv in |- *; repeat rewrite Rmult_plus_distr_l;
- do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | discrR ]
- | discrR ].
-clear x u x0 x1 eps H H0 N1 H1 N2 H2;
- assert
- (H1 :
- exists psi1 : nat -> StepFun a b,
- (forall n:nat,
- (forall t:R,
- Rmin a b <= t /\ t <= Rmax a b ->
- Rabs (f t - phi_sequence RinvN pr1 n t) <= psi1 n t) /\
- Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr1 n)).
-assert
- (H2 :
- exists psi2 : nat -> StepFun b c,
- (forall n:nat,
- (forall t:R,
- Rmin b c <= t /\ t <= Rmax b c ->
- Rabs (f t - phi_sequence RinvN pr2 n t) <= psi2 n t) /\
- Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr2 n)).
-assert
- (H3 :
- exists psi3 : nat -> StepFun a c,
- (forall n:nat,
- (forall t:R,
- Rmin a c <= t /\ t <= Rmax a c ->
- Rabs (f t - phi_sequence RinvN pr3 n t) <= psi3 n t) /\
- Rabs (RiemannInt_SF (psi3 n)) < RinvN n)).
-split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr3 n)); intro;
- apply (projT2 (phi_sequence_prop RinvN pr3 n)).
-elim H1; clear H1; intros psi1 H1; elim H2; clear H2; intros psi2 H2; elim H3;
- clear H3; intros psi3 H3; assert (H := RinvN_cv);
- unfold Un_cv in |- *; intros; assert (H4 : 0 < eps / 3).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H _ H4); clear H; intros N0 H;
- assert (H5 : forall n:nat, (n >= N0)%nat -> RinvN n < eps / 3).
-intros;
- replace (pos (RinvN n)) with
- (R_dist (mkposreal (/ (INR n + 1)) (RinvN_pos n)) 0).
-apply H; assumption.
-unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
- rewrite Rplus_0_r; apply Rabs_right; apply Rle_ge;
- left; apply (cond_pos (RinvN n)).
-exists N0; intros; elim (H1 n); elim (H2 n); elim (H3 n); clear H1 H2 H3;
- intros; unfold R_dist in |- *; unfold Rminus in |- *;
- rewrite Ropp_0; rewrite Rplus_0_r;
- set (phi1 := phi_sequence RinvN pr1 n) in H8 |- *;
- set (phi2 := phi_sequence RinvN pr2 n) in H3 |- *;
- set (phi3 := phi_sequence RinvN pr3 n) in H1 |- *;
- assert (H10 : IsStepFun phi3 a b).
-apply StepFun_P44 with c.
-apply (pre phi3).
-split; assumption.
-assert (H11 : IsStepFun (psi3 n) a b).
-apply StepFun_P44 with c.
-apply (pre (psi3 n)).
-split; assumption.
-assert (H12 : IsStepFun phi3 b c).
-apply StepFun_P45 with a.
-apply (pre phi3).
-split; assumption.
-assert (H13 : IsStepFun (psi3 n) b c).
-apply StepFun_P45 with a.
-apply (pre (psi3 n)).
-split; assumption.
-replace (RiemannInt_SF phi3) with
- (RiemannInt_SF (mkStepFun H10) + RiemannInt_SF (mkStepFun H12)).
-apply Rle_lt_trans with
- (Rabs (RiemannInt_SF (mkStepFun H10) - RiemannInt_SF phi1) +
- Rabs (RiemannInt_SF (mkStepFun H12) - RiemannInt_SF phi2)).
-replace
- (RiemannInt_SF (mkStepFun H10) + RiemannInt_SF (mkStepFun H12) +
- - (RiemannInt_SF phi1 + RiemannInt_SF phi2)) with
- (RiemannInt_SF (mkStepFun H10) - RiemannInt_SF phi1 +
- (RiemannInt_SF (mkStepFun H12) - RiemannInt_SF phi2));
- [ apply Rabs_triang | ring ].
-replace (RiemannInt_SF (mkStepFun H10) - RiemannInt_SF phi1) with
- (RiemannInt_SF (mkStepFun (StepFun_P28 (-1) (mkStepFun H10) phi1))).
-replace (RiemannInt_SF (mkStepFun H12) - RiemannInt_SF phi2) with
- (RiemannInt_SF (mkStepFun (StepFun_P28 (-1) (mkStepFun H12) phi2))).
-apply Rle_lt_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H10) phi1)))) +
- RiemannInt_SF
- (mkStepFun
- (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H12) phi2))))).
-apply Rle_trans with
- (Rabs (RiemannInt_SF (mkStepFun (StepFun_P28 (-1) (mkStepFun H10) phi1))) +
- RiemannInt_SF
- (mkStepFun
- (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H12) phi2))))).
-apply Rplus_le_compat_l.
-apply StepFun_P34; try assumption.
-do 2
- rewrite <-
- (Rplus_comm
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H12) phi2))))))
- ; apply Rplus_le_compat_l; apply StepFun_P34; try assumption.
-apply Rle_lt_trans with
- (RiemannInt_SF (mkStepFun (StepFun_P28 1 (mkStepFun H11) (psi1 n))) +
- RiemannInt_SF (mkStepFun (StepFun_P28 1 (mkStepFun H13) (psi2 n)))).
-apply Rle_trans with
- (RiemannInt_SF
- (mkStepFun
- (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H10) phi1)))) +
- RiemannInt_SF (mkStepFun (StepFun_P28 1 (mkStepFun H13) (psi2 n)))).
-apply Rplus_le_compat_l; apply StepFun_P37; try assumption.
-intros; simpl in |- *; rewrite Rmult_1_l;
- apply Rle_trans with (Rabs (f x - phi3 x) + Rabs (f x - phi2 x)).
-rewrite <- (Rabs_Ropp (f x - phi3 x)); rewrite Ropp_minus_distr;
- replace (phi3 x + -1 * phi2 x) with (phi3 x - f x + (f x - phi2 x));
- [ apply Rabs_triang | ring ].
-apply Rplus_le_compat.
-apply H1.
-elim H14; intros; split.
-replace (Rmin a c) with a.
-apply Rle_trans with b; try assumption.
-left; assumption.
-unfold Rmin in |- *; case (Rle_dec a c); intro;
- [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
-replace (Rmax a c) with c.
-left; assumption.
-unfold Rmax in |- *; case (Rle_dec a c); intro;
- [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
-apply H3.
-elim H14; intros; split.
-replace (Rmin b c) with b.
-left; assumption.
-unfold Rmin in |- *; case (Rle_dec b c); intro;
- [ reflexivity | elim n0; assumption ].
-replace (Rmax b c) with c.
-left; assumption.
-unfold Rmax in |- *; case (Rle_dec b c); intro;
- [ reflexivity | elim n0; assumption ].
-do 2
- rewrite <-
- (Rplus_comm
- (RiemannInt_SF (mkStepFun (StepFun_P28 1 (mkStepFun H13) (psi2 n)))))
- ; apply Rplus_le_compat_l; apply StepFun_P37; try assumption.
-intros; simpl in |- *; rewrite Rmult_1_l;
- apply Rle_trans with (Rabs (f x - phi3 x) + Rabs (f x - phi1 x)).
-rewrite <- (Rabs_Ropp (f x - phi3 x)); rewrite Ropp_minus_distr;
- replace (phi3 x + -1 * phi1 x) with (phi3 x - f x + (f x - phi1 x));
- [ apply Rabs_triang | ring ].
-apply Rplus_le_compat.
-apply H1.
-elim H14; intros; split.
-replace (Rmin a c) with a.
-left; assumption.
-unfold Rmin in |- *; case (Rle_dec a c); intro;
- [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
-replace (Rmax a c) with c.
-apply Rle_trans with b.
-left; assumption.
-assumption.
-unfold Rmax in |- *; case (Rle_dec a c); intro;
- [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
-apply H8.
-elim H14; intros; split.
-replace (Rmin a b) with a.
-left; assumption.
-unfold Rmin in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-replace (Rmax a b) with b.
-left; assumption.
-unfold Rmax in |- *; case (Rle_dec a b); intro;
- [ reflexivity | elim n0; assumption ].
-do 2 rewrite StepFun_P30.
-do 2 rewrite Rmult_1_l;
- replace
- (RiemannInt_SF (mkStepFun H11) + RiemannInt_SF (psi1 n) +
- (RiemannInt_SF (mkStepFun H13) + RiemannInt_SF (psi2 n))) with
- (RiemannInt_SF (psi3 n) + RiemannInt_SF (psi1 n) + RiemannInt_SF (psi2 n)).
-replace eps with (eps / 3 + eps / 3 + eps / 3).
-repeat rewrite Rplus_assoc; repeat apply Rplus_lt_compat.
-apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi3 n))).
-apply RRle_abs.
-apply Rlt_trans with (pos (RinvN n)).
-assumption.
-apply H5; assumption.
-apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n))).
-apply RRle_abs.
-apply Rlt_trans with (pos (RinvN n)).
-assumption.
-apply H5; assumption.
-apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n))).
-apply RRle_abs.
-apply Rlt_trans with (pos (RinvN n)).
-assumption.
-apply H5; assumption.
-apply Rmult_eq_reg_l with 3;
- [ unfold Rdiv in |- *; repeat rewrite Rmult_plus_distr_l;
- do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | discrR ]
- | discrR ].
-replace (RiemannInt_SF (psi3 n)) with
- (RiemannInt_SF (mkStepFun (pre (psi3 n)))).
-rewrite <- (StepFun_P43 H11 H13 (pre (psi3 n))); ring.
-reflexivity.
-rewrite StepFun_P30; ring.
-rewrite StepFun_P30; ring.
-apply (StepFun_P43 H10 H12 (pre phi3)).
+ RiemannInt_SF (phi_sequence RinvN pr2 n) - (x1 + x0)) with
+ (RiemannInt_SF (phi_sequence RinvN pr1 n) - x1 +
+ (RiemannInt_SF (phi_sequence RinvN pr2 n) - x0));
+ [ apply Rabs_triang | ring ].
+ apply Rplus_lt_compat.
+ unfold R_dist in H1; apply H1.
+ unfold ge in |- *; apply le_trans with N0;
+ [ apply le_trans with (max N1 N2);
+ [ apply le_max_l | unfold N0 in |- *; apply le_max_l ]
+ | assumption ].
+ unfold R_dist in H2; apply H2.
+ unfold ge in |- *; apply le_trans with N0;
+ [ apply le_trans with (max N1 N2);
+ [ apply le_max_r | unfold N0 in |- *; apply le_max_l ]
+ | assumption ].
+ apply Rmult_eq_reg_l with 3;
+ [ unfold Rdiv in |- *; repeat rewrite Rmult_plus_distr_l;
+ do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | discrR ]
+ | discrR ].
+ clear x u x0 x1 eps H H0 N1 H1 N2 H2;
+ assert
+ (H1 :
+ exists psi1 : nat -> StepFun a b,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a b <= t /\ t <= Rmax a b ->
+ Rabs (f t - phi_sequence RinvN pr1 n t) <= psi1 n t) /\
+ Rabs (RiemannInt_SF (psi1 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr1 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr1 n)).
+ assert
+ (H2 :
+ exists psi2 : nat -> StepFun b c,
+ (forall n:nat,
+ (forall t:R,
+ Rmin b c <= t /\ t <= Rmax b c ->
+ Rabs (f t - phi_sequence RinvN pr2 n t) <= psi2 n t) /\
+ Rabs (RiemannInt_SF (psi2 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr2 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr2 n)).
+ assert
+ (H3 :
+ exists psi3 : nat -> StepFun a c,
+ (forall n:nat,
+ (forall t:R,
+ Rmin a c <= t /\ t <= Rmax a c ->
+ Rabs (f t - phi_sequence RinvN pr3 n t) <= psi3 n t) /\
+ Rabs (RiemannInt_SF (psi3 n)) < RinvN n)).
+ split with (fun n:nat => projT1 (phi_sequence_prop RinvN pr3 n)); intro;
+ apply (projT2 (phi_sequence_prop RinvN pr3 n)).
+ elim H1; clear H1; intros psi1 H1; elim H2; clear H2; intros psi2 H2; elim H3;
+ clear H3; intros psi3 H3; assert (H := RinvN_cv);
+ unfold Un_cv in |- *; intros; assert (H4 : 0 < eps / 3).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H _ H4); clear H; intros N0 H;
+ assert (H5 : forall n:nat, (n >= N0)%nat -> RinvN n < eps / 3).
+ intros;
+ replace (pos (RinvN n)) with
+ (R_dist (mkposreal (/ (INR n + 1)) (RinvN_pos n)) 0).
+ apply H; assumption.
+ unfold R_dist in |- *; unfold Rminus in |- *; rewrite Ropp_0;
+ rewrite Rplus_0_r; apply Rabs_right; apply Rle_ge;
+ left; apply (cond_pos (RinvN n)).
+ exists N0; intros; elim (H1 n); elim (H2 n); elim (H3 n); clear H1 H2 H3;
+ intros; unfold R_dist in |- *; unfold Rminus in |- *;
+ rewrite Ropp_0; rewrite Rplus_0_r;
+ set (phi1 := phi_sequence RinvN pr1 n) in H8 |- *;
+ set (phi2 := phi_sequence RinvN pr2 n) in H3 |- *;
+ set (phi3 := phi_sequence RinvN pr3 n) in H1 |- *;
+ assert (H10 : IsStepFun phi3 a b).
+ apply StepFun_P44 with c.
+ apply (pre phi3).
+ split; assumption.
+ assert (H11 : IsStepFun (psi3 n) a b).
+ apply StepFun_P44 with c.
+ apply (pre (psi3 n)).
+ split; assumption.
+ assert (H12 : IsStepFun phi3 b c).
+ apply StepFun_P45 with a.
+ apply (pre phi3).
+ split; assumption.
+ assert (H13 : IsStepFun (psi3 n) b c).
+ apply StepFun_P45 with a.
+ apply (pre (psi3 n)).
+ split; assumption.
+ replace (RiemannInt_SF phi3) with
+ (RiemannInt_SF (mkStepFun H10) + RiemannInt_SF (mkStepFun H12)).
+ apply Rle_lt_trans with
+ (Rabs (RiemannInt_SF (mkStepFun H10) - RiemannInt_SF phi1) +
+ Rabs (RiemannInt_SF (mkStepFun H12) - RiemannInt_SF phi2)).
+ replace
+ (RiemannInt_SF (mkStepFun H10) + RiemannInt_SF (mkStepFun H12) +
+ - (RiemannInt_SF phi1 + RiemannInt_SF phi2)) with
+ (RiemannInt_SF (mkStepFun H10) - RiemannInt_SF phi1 +
+ (RiemannInt_SF (mkStepFun H12) - RiemannInt_SF phi2));
+ [ apply Rabs_triang | ring ].
+ replace (RiemannInt_SF (mkStepFun H10) - RiemannInt_SF phi1) with
+ (RiemannInt_SF (mkStepFun (StepFun_P28 (-1) (mkStepFun H10) phi1))).
+ replace (RiemannInt_SF (mkStepFun H12) - RiemannInt_SF phi2) with
+ (RiemannInt_SF (mkStepFun (StepFun_P28 (-1) (mkStepFun H12) phi2))).
+ apply Rle_lt_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H10) phi1)))) +
+ RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H12) phi2))))).
+ apply Rle_trans with
+ (Rabs (RiemannInt_SF (mkStepFun (StepFun_P28 (-1) (mkStepFun H10) phi1))) +
+ RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H12) phi2))))).
+ apply Rplus_le_compat_l.
+ apply StepFun_P34; try assumption.
+ do 2
+ rewrite <-
+ (Rplus_comm
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H12) phi2))))))
+ ; apply Rplus_le_compat_l; apply StepFun_P34; try assumption.
+ apply Rle_lt_trans with
+ (RiemannInt_SF (mkStepFun (StepFun_P28 1 (mkStepFun H11) (psi1 n))) +
+ RiemannInt_SF (mkStepFun (StepFun_P28 1 (mkStepFun H13) (psi2 n)))).
+ apply Rle_trans with
+ (RiemannInt_SF
+ (mkStepFun
+ (StepFun_P32 (mkStepFun (StepFun_P28 (-1) (mkStepFun H10) phi1)))) +
+ RiemannInt_SF (mkStepFun (StepFun_P28 1 (mkStepFun H13) (psi2 n)))).
+ apply Rplus_le_compat_l; apply StepFun_P37; try assumption.
+ intros; simpl in |- *; rewrite Rmult_1_l;
+ apply Rle_trans with (Rabs (f x - phi3 x) + Rabs (f x - phi2 x)).
+ rewrite <- (Rabs_Ropp (f x - phi3 x)); rewrite Ropp_minus_distr;
+ replace (phi3 x + -1 * phi2 x) with (phi3 x - f x + (f x - phi2 x));
+ [ apply Rabs_triang | ring ].
+ apply Rplus_le_compat.
+ apply H1.
+ elim H14; intros; split.
+ replace (Rmin a c) with a.
+ apply Rle_trans with b; try assumption.
+ left; assumption.
+ unfold Rmin in |- *; case (Rle_dec a c); intro;
+ [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
+ replace (Rmax a c) with c.
+ left; assumption.
+ unfold Rmax in |- *; case (Rle_dec a c); intro;
+ [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
+ apply H3.
+ elim H14; intros; split.
+ replace (Rmin b c) with b.
+ left; assumption.
+ unfold Rmin in |- *; case (Rle_dec b c); intro;
+ [ reflexivity | elim n0; assumption ].
+ replace (Rmax b c) with c.
+ left; assumption.
+ unfold Rmax in |- *; case (Rle_dec b c); intro;
+ [ reflexivity | elim n0; assumption ].
+ do 2
+ rewrite <-
+ (Rplus_comm
+ (RiemannInt_SF (mkStepFun (StepFun_P28 1 (mkStepFun H13) (psi2 n)))))
+ ; apply Rplus_le_compat_l; apply StepFun_P37; try assumption.
+ intros; simpl in |- *; rewrite Rmult_1_l;
+ apply Rle_trans with (Rabs (f x - phi3 x) + Rabs (f x - phi1 x)).
+ rewrite <- (Rabs_Ropp (f x - phi3 x)); rewrite Ropp_minus_distr;
+ replace (phi3 x + -1 * phi1 x) with (phi3 x - f x + (f x - phi1 x));
+ [ apply Rabs_triang | ring ].
+ apply Rplus_le_compat.
+ apply H1.
+ elim H14; intros; split.
+ replace (Rmin a c) with a.
+ left; assumption.
+ unfold Rmin in |- *; case (Rle_dec a c); intro;
+ [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
+ replace (Rmax a c) with c.
+ apply Rle_trans with b.
+ left; assumption.
+ assumption.
+ unfold Rmax in |- *; case (Rle_dec a c); intro;
+ [ reflexivity | elim n0; apply Rle_trans with b; assumption ].
+ apply H8.
+ elim H14; intros; split.
+ replace (Rmin a b) with a.
+ left; assumption.
+ unfold Rmin in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ replace (Rmax a b) with b.
+ left; assumption.
+ unfold Rmax in |- *; case (Rle_dec a b); intro;
+ [ reflexivity | elim n0; assumption ].
+ do 2 rewrite StepFun_P30.
+ do 2 rewrite Rmult_1_l;
+ replace
+ (RiemannInt_SF (mkStepFun H11) + RiemannInt_SF (psi1 n) +
+ (RiemannInt_SF (mkStepFun H13) + RiemannInt_SF (psi2 n))) with
+ (RiemannInt_SF (psi3 n) + RiemannInt_SF (psi1 n) + RiemannInt_SF (psi2 n)).
+ replace eps with (eps / 3 + eps / 3 + eps / 3).
+ repeat rewrite Rplus_assoc; repeat apply Rplus_lt_compat.
+ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi3 n))).
+ apply RRle_abs.
+ apply Rlt_trans with (pos (RinvN n)).
+ assumption.
+ apply H5; assumption.
+ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi1 n))).
+ apply RRle_abs.
+ apply Rlt_trans with (pos (RinvN n)).
+ assumption.
+ apply H5; assumption.
+ apply Rle_lt_trans with (Rabs (RiemannInt_SF (psi2 n))).
+ apply RRle_abs.
+ apply Rlt_trans with (pos (RinvN n)).
+ assumption.
+ apply H5; assumption.
+ apply Rmult_eq_reg_l with 3;
+ [ unfold Rdiv in |- *; repeat rewrite Rmult_plus_distr_l;
+ do 2 rewrite (Rmult_comm 3); repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | discrR ]
+ | discrR ].
+ replace (RiemannInt_SF (psi3 n)) with
+ (RiemannInt_SF (mkStepFun (pre (psi3 n)))).
+ rewrite <- (StepFun_P43 H11 H13 (pre (psi3 n))); ring.
+ reflexivity.
+ rewrite StepFun_P30; ring.
+ rewrite StepFun_P30; ring.
+ apply (StepFun_P43 H10 H12 (pre phi3)).
Qed.
Lemma RiemannInt_P26 :
- forall (f:R -> R) (a b c:R) (pr1:Riemann_integrable f a b)
- (pr2:Riemann_integrable f b c) (pr3:Riemann_integrable f a c),
- RiemannInt pr1 + RiemannInt pr2 = RiemannInt pr3.
-intros; case (Rle_dec a b); case (Rle_dec b c); intros.
-apply RiemannInt_P25; assumption.
-case (Rle_dec a c); intro.
-assert (H : c <= b).
-auto with real.
-rewrite <- (RiemannInt_P25 pr3 (RiemannInt_P1 pr2) pr1 r0 H);
- rewrite (RiemannInt_P8 pr2 (RiemannInt_P1 pr2)); ring.
-assert (H : c <= a).
-auto with real.
-rewrite (RiemannInt_P8 pr2 (RiemannInt_P1 pr2));
- rewrite <- (RiemannInt_P25 (RiemannInt_P1 pr3) pr1 (RiemannInt_P1 pr2) H r);
- rewrite (RiemannInt_P8 pr3 (RiemannInt_P1 pr3)); ring.
-assert (H : b <= a).
-auto with real.
-case (Rle_dec a c); intro.
-rewrite <- (RiemannInt_P25 (RiemannInt_P1 pr1) pr3 pr2 H r0);
- rewrite (RiemannInt_P8 pr1 (RiemannInt_P1 pr1)); ring.
-assert (H0 : c <= a).
-auto with real.
-rewrite (RiemannInt_P8 pr1 (RiemannInt_P1 pr1));
- rewrite <- (RiemannInt_P25 pr2 (RiemannInt_P1 pr3) (RiemannInt_P1 pr1) r H0);
- rewrite (RiemannInt_P8 pr3 (RiemannInt_P1 pr3)); ring.
-rewrite (RiemannInt_P8 pr1 (RiemannInt_P1 pr1));
- rewrite (RiemannInt_P8 pr2 (RiemannInt_P1 pr2));
- rewrite (RiemannInt_P8 pr3 (RiemannInt_P1 pr3));
- rewrite <-
- (RiemannInt_P25 (RiemannInt_P1 pr2) (RiemannInt_P1 pr1) (RiemannInt_P1 pr3))
- ; [ ring | auto with real | auto with real ].
+ forall (f:R -> R) (a b c:R) (pr1:Riemann_integrable f a b)
+ (pr2:Riemann_integrable f b c) (pr3:Riemann_integrable f a c),
+ RiemannInt pr1 + RiemannInt pr2 = RiemannInt pr3.
+Proof.
+ intros; case (Rle_dec a b); case (Rle_dec b c); intros.
+ apply RiemannInt_P25; assumption.
+ case (Rle_dec a c); intro.
+ assert (H : c <= b).
+ auto with real.
+ rewrite <- (RiemannInt_P25 pr3 (RiemannInt_P1 pr2) pr1 r0 H);
+ rewrite (RiemannInt_P8 pr2 (RiemannInt_P1 pr2)); ring.
+ assert (H : c <= a).
+ auto with real.
+ rewrite (RiemannInt_P8 pr2 (RiemannInt_P1 pr2));
+ rewrite <- (RiemannInt_P25 (RiemannInt_P1 pr3) pr1 (RiemannInt_P1 pr2) H r);
+ rewrite (RiemannInt_P8 pr3 (RiemannInt_P1 pr3)); ring.
+ assert (H : b <= a).
+ auto with real.
+ case (Rle_dec a c); intro.
+ rewrite <- (RiemannInt_P25 (RiemannInt_P1 pr1) pr3 pr2 H r0);
+ rewrite (RiemannInt_P8 pr1 (RiemannInt_P1 pr1)); ring.
+ assert (H0 : c <= a).
+ auto with real.
+ rewrite (RiemannInt_P8 pr1 (RiemannInt_P1 pr1));
+ rewrite <- (RiemannInt_P25 pr2 (RiemannInt_P1 pr3) (RiemannInt_P1 pr1) r H0);
+ rewrite (RiemannInt_P8 pr3 (RiemannInt_P1 pr3)); ring.
+ rewrite (RiemannInt_P8 pr1 (RiemannInt_P1 pr1));
+ rewrite (RiemannInt_P8 pr2 (RiemannInt_P1 pr2));
+ rewrite (RiemannInt_P8 pr3 (RiemannInt_P1 pr3));
+ rewrite <-
+ (RiemannInt_P25 (RiemannInt_P1 pr2) (RiemannInt_P1 pr1) (RiemannInt_P1 pr3))
+ ; [ ring | auto with real | auto with real ].
Qed.
Lemma RiemannInt_P27 :
- forall (f:R -> R) (a b x:R) (h:a <= b)
- (C0:forall x:R, a <= x <= b -> continuity_pt f x),
- a < x < b -> derivable_pt_lim (primitive h (FTC_P1 h C0)) x (f x).
-intro f; intros; elim H; clear H; intros; assert (H1 : continuity_pt f x).
-apply C0; split; left; assumption.
-unfold derivable_pt_lim in |- *; intros; assert (Hyp : 0 < eps / 2).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H1 _ Hyp); unfold dist, D_x, no_cond in |- *; simpl in |- *;
- unfold R_dist in |- *; intros; set (del := Rmin x0 (Rmin (b - x) (x - a)));
- assert (H4 : 0 < del).
-unfold del in |- *; unfold Rmin in |- *; case (Rle_dec (b - x) (x - a));
- intro.
-case (Rle_dec x0 (b - x)); intro;
- [ elim H3; intros; assumption | apply Rlt_Rminus; assumption ].
-case (Rle_dec x0 (x - a)); intro;
- [ elim H3; intros; assumption | apply Rlt_Rminus; assumption ].
-split with (mkposreal _ H4); intros;
- assert (H7 : Riemann_integrable f x (x + h0)).
-case (Rle_dec x (x + h0)); intro.
-apply continuity_implies_RiemannInt; try assumption.
-intros; apply C0; elim H7; intros; split.
-apply Rle_trans with x; [ left; assumption | assumption ].
-apply Rle_trans with (x + h0).
-assumption.
-left; apply Rlt_le_trans with (x + del).
-apply Rplus_lt_compat_l; apply Rle_lt_trans with (Rabs h0);
- [ apply RRle_abs | apply H6 ].
-unfold del in |- *; apply Rle_trans with (x + Rmin (b - x) (x - a)).
-apply Rplus_le_compat_l; apply Rmin_r.
-pattern b at 2 in |- *; replace b with (x + (b - x));
- [ apply Rplus_le_compat_l; apply Rmin_l | ring ].
-apply RiemannInt_P1; apply continuity_implies_RiemannInt; auto with real.
-intros; apply C0; elim H7; intros; split.
-apply Rle_trans with (x + h0).
-left; apply Rle_lt_trans with (x - del).
-unfold del in |- *; apply Rle_trans with (x - Rmin (b - x) (x - a)).
-pattern a at 1 in |- *; replace a with (x + (a - x)); [ idtac | ring ].
-unfold Rminus in |- *; apply Rplus_le_compat_l; apply Ropp_le_cancel.
-rewrite Ropp_involutive; rewrite Ropp_plus_distr; rewrite Ropp_involutive;
- rewrite (Rplus_comm x); apply Rmin_r.
-unfold Rminus in |- *; apply Rplus_le_compat_l; apply Ropp_le_cancel.
-do 2 rewrite Ropp_involutive; apply Rmin_r.
-unfold Rminus in |- *; apply Rplus_lt_compat_l; apply Ropp_lt_cancel.
-rewrite Ropp_involutive; apply Rle_lt_trans with (Rabs h0);
- [ rewrite <- Rabs_Ropp; apply RRle_abs | apply H6 ].
-assumption.
-apply Rle_trans with x; [ assumption | left; assumption ].
-replace (primitive h (FTC_P1 h C0) (x + h0) - primitive h (FTC_P1 h C0) x)
- with (RiemannInt H7).
-replace (f x) with (RiemannInt (RiemannInt_P14 x (x + h0) (f x)) / h0).
-replace
- (RiemannInt H7 / h0 - RiemannInt (RiemannInt_P14 x (x + h0) (f x)) / h0)
- with ((RiemannInt H7 - RiemannInt (RiemannInt_P14 x (x + h0) (f x))) / h0).
-replace (RiemannInt H7 - RiemannInt (RiemannInt_P14 x (x + h0) (f x))) with
- (RiemannInt (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))).
-unfold Rdiv in |- *; rewrite Rabs_mult; case (Rle_dec x (x + h0)); intro.
-apply Rle_lt_trans with
- (RiemannInt
- (RiemannInt_P16
- (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))) *
- Rabs (/ h0)).
-do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
-apply Rabs_pos.
-apply
- (RiemannInt_P17 (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))
- (RiemannInt_P16
- (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))));
- assumption.
-apply Rle_lt_trans with
- (RiemannInt (RiemannInt_P14 x (x + h0) (eps / 2)) * Rabs (/ h0)).
-do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
-apply Rabs_pos.
-apply RiemannInt_P19; try assumption.
-intros; replace (f x1 + -1 * fct_cte (f x) x1) with (f x1 - f x).
-unfold fct_cte in |- *; case (Req_dec x x1); intro.
-rewrite H9; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; left;
- assumption.
-elim H3; intros; left; apply H11.
-repeat split.
-assumption.
-rewrite Rabs_right.
-apply Rplus_lt_reg_r with x; replace (x + (x1 - x)) with x1; [ idtac | ring ].
-apply Rlt_le_trans with (x + h0).
-elim H8; intros; assumption.
-apply Rplus_le_compat_l; apply Rle_trans with del.
-left; apply Rle_lt_trans with (Rabs h0); [ apply RRle_abs | assumption ].
-unfold del in |- *; apply Rmin_l.
-apply Rge_minus; apply Rle_ge; left; elim H8; intros; assumption.
-unfold fct_cte in |- *; ring.
-rewrite RiemannInt_P15.
-rewrite Rmult_assoc; replace ((x + h0 - x) * Rabs (/ h0)) with 1.
-rewrite Rmult_1_r; unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2;
- [ prove_sup0
- | rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
- rewrite <- Rinv_r_sym;
- [ rewrite Rmult_1_l; pattern eps at 1 in |- *; rewrite <- Rplus_0_r;
- rewrite double; apply Rplus_lt_compat_l; assumption
- | discrR ] ].
-rewrite Rabs_right.
-replace (x + h0 - x) with h0; [ idtac | ring ].
-apply Rinv_r_sym.
-assumption.
-apply Rle_ge; left; apply Rinv_0_lt_compat.
-elim r; intro.
-apply Rplus_lt_reg_r with x; rewrite Rplus_0_r; assumption.
-elim H5; symmetry in |- *; apply Rplus_eq_reg_l with x; rewrite Rplus_0_r;
- assumption.
-apply Rle_lt_trans with
- (RiemannInt
- (RiemannInt_P16
- (RiemannInt_P1
+ forall (f:R -> R) (a b x:R) (h:a <= b)
+ (C0:forall x:R, a <= x <= b -> continuity_pt f x),
+ a < x < b -> derivable_pt_lim (primitive h (FTC_P1 h C0)) x (f x).
+Proof.
+ intro f; intros; elim H; clear H; intros; assert (H1 : continuity_pt f x).
+ apply C0; split; left; assumption.
+ unfold derivable_pt_lim in |- *; intros; assert (Hyp : 0 < eps / 2).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H1 _ Hyp); unfold dist, D_x, no_cond in |- *; simpl in |- *;
+ unfold R_dist in |- *; intros; set (del := Rmin x0 (Rmin (b - x) (x - a)));
+ assert (H4 : 0 < del).
+ unfold del in |- *; unfold Rmin in |- *; case (Rle_dec (b - x) (x - a));
+ intro.
+ case (Rle_dec x0 (b - x)); intro;
+ [ elim H3; intros; assumption | apply Rlt_Rminus; assumption ].
+ case (Rle_dec x0 (x - a)); intro;
+ [ elim H3; intros; assumption | apply Rlt_Rminus; assumption ].
+ split with (mkposreal _ H4); intros;
+ assert (H7 : Riemann_integrable f x (x + h0)).
+ case (Rle_dec x (x + h0)); intro.
+ apply continuity_implies_RiemannInt; try assumption.
+ intros; apply C0; elim H7; intros; split.
+ apply Rle_trans with x; [ left; assumption | assumption ].
+ apply Rle_trans with (x + h0).
+ assumption.
+ left; apply Rlt_le_trans with (x + del).
+ apply Rplus_lt_compat_l; apply Rle_lt_trans with (Rabs h0);
+ [ apply RRle_abs | apply H6 ].
+ unfold del in |- *; apply Rle_trans with (x + Rmin (b - x) (x - a)).
+ apply Rplus_le_compat_l; apply Rmin_r.
+ pattern b at 2 in |- *; replace b with (x + (b - x));
+ [ apply Rplus_le_compat_l; apply Rmin_l | ring ].
+ apply RiemannInt_P1; apply continuity_implies_RiemannInt; auto with real.
+ intros; apply C0; elim H7; intros; split.
+ apply Rle_trans with (x + h0).
+ left; apply Rle_lt_trans with (x - del).
+ unfold del in |- *; apply Rle_trans with (x - Rmin (b - x) (x - a)).
+ pattern a at 1 in |- *; replace a with (x + (a - x)); [ idtac | ring ].
+ unfold Rminus in |- *; apply Rplus_le_compat_l; apply Ropp_le_cancel.
+ rewrite Ropp_involutive; rewrite Ropp_plus_distr; rewrite Ropp_involutive;
+ rewrite (Rplus_comm x); apply Rmin_r.
+ unfold Rminus in |- *; apply Rplus_le_compat_l; apply Ropp_le_cancel.
+ do 2 rewrite Ropp_involutive; apply Rmin_r.
+ unfold Rminus in |- *; apply Rplus_lt_compat_l; apply Ropp_lt_cancel.
+ rewrite Ropp_involutive; apply Rle_lt_trans with (Rabs h0);
+ [ rewrite <- Rabs_Ropp; apply RRle_abs | apply H6 ].
+ assumption.
+ apply Rle_trans with x; [ assumption | left; assumption ].
+ replace (primitive h (FTC_P1 h C0) (x + h0) - primitive h (FTC_P1 h C0) x)
+ with (RiemannInt H7).
+ replace (f x) with (RiemannInt (RiemannInt_P14 x (x + h0) (f x)) / h0).
+ replace
+ (RiemannInt H7 / h0 - RiemannInt (RiemannInt_P14 x (x + h0) (f x)) / h0)
+ with ((RiemannInt H7 - RiemannInt (RiemannInt_P14 x (x + h0) (f x))) / h0).
+ replace (RiemannInt H7 - RiemannInt (RiemannInt_P14 x (x + h0) (f x))) with
+ (RiemannInt (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))).
+ unfold Rdiv in |- *; rewrite Rabs_mult; case (Rle_dec x (x + h0)); intro.
+ apply Rle_lt_trans with
+ (RiemannInt
+ (RiemannInt_P16
+ (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))) *
+ Rabs (/ h0)).
+ do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ apply
+ (RiemannInt_P17 (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))
+ (RiemannInt_P16
+ (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))));
+ assumption.
+ apply Rle_lt_trans with
+ (RiemannInt (RiemannInt_P14 x (x + h0) (eps / 2)) * Rabs (/ h0)).
+ do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ apply RiemannInt_P19; try assumption.
+ intros; replace (f x1 + -1 * fct_cte (f x) x1) with (f x1 - f x).
+ unfold fct_cte in |- *; case (Req_dec x x1); intro.
+ rewrite H9; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; left;
+ assumption.
+ elim H3; intros; left; apply H11.
+ repeat split.
+ assumption.
+ rewrite Rabs_right.
+ apply Rplus_lt_reg_r with x; replace (x + (x1 - x)) with x1; [ idtac | ring ].
+ apply Rlt_le_trans with (x + h0).
+ elim H8; intros; assumption.
+ apply Rplus_le_compat_l; apply Rle_trans with del.
+ left; apply Rle_lt_trans with (Rabs h0); [ apply RRle_abs | assumption ].
+ unfold del in |- *; apply Rmin_l.
+ apply Rge_minus; apply Rle_ge; left; elim H8; intros; assumption.
+ unfold fct_cte in |- *; ring.
+ rewrite RiemannInt_P15.
+ rewrite Rmult_assoc; replace ((x + h0 - x) * Rabs (/ h0)) with 1.
+ rewrite Rmult_1_r; unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2;
+ [ prove_sup0
+ | rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
+ rewrite <- Rinv_r_sym;
+ [ rewrite Rmult_1_l; pattern eps at 1 in |- *; rewrite <- Rplus_0_r;
+ rewrite double; apply Rplus_lt_compat_l; assumption
+ | discrR ] ].
+ rewrite Rabs_right.
+ replace (x + h0 - x) with h0; [ idtac | ring ].
+ apply Rinv_r_sym.
+ assumption.
+ apply Rle_ge; left; apply Rinv_0_lt_compat.
+ elim r; intro.
+ apply Rplus_lt_reg_r with x; rewrite Rplus_0_r; assumption.
+ elim H5; symmetry in |- *; apply Rplus_eq_reg_l with x; rewrite Rplus_0_r;
+ assumption.
+ apply Rle_lt_trans with
+ (RiemannInt
+ (RiemannInt_P16
+ (RiemannInt_P1
(RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x))))) *
- Rabs (/ h0)).
-do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
-apply Rabs_pos.
-replace
- (RiemannInt (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))) with
- (-
- RiemannInt
+ Rabs (/ h0)).
+ do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ replace
+ (RiemannInt (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x)))) with
+ (-
+ RiemannInt
(RiemannInt_P1 (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x))))).
-rewrite Rabs_Ropp;
- apply
- (RiemannInt_P17
- (RiemannInt_P1
- (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x))))
- (RiemannInt_P16
+ rewrite Rabs_Ropp;
+ apply
+ (RiemannInt_P17
(RiemannInt_P1
- (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x))))));
- auto with real.
-symmetry in |- *; apply RiemannInt_P8.
-apply Rle_lt_trans with
- (RiemannInt (RiemannInt_P14 (x + h0) x (eps / 2)) * Rabs (/ h0)).
-do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
-apply Rabs_pos.
-apply RiemannInt_P19.
-auto with real.
-intros; replace (f x1 + -1 * fct_cte (f x) x1) with (f x1 - f x).
-unfold fct_cte in |- *; case (Req_dec x x1); intro.
-rewrite H9; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; left;
- assumption.
-elim H3; intros; left; apply H11.
-repeat split.
-assumption.
-rewrite Rabs_left.
-apply Rplus_lt_reg_r with (x1 - x0); replace (x1 - x0 + x0) with x1;
- [ idtac | ring ].
-replace (x1 - x0 + - (x1 - x)) with (x - x0); [ idtac | ring ].
-apply Rle_lt_trans with (x + h0).
-unfold Rminus in |- *; apply Rplus_le_compat_l; apply Ropp_le_cancel.
-rewrite Ropp_involutive; apply Rle_trans with (Rabs h0).
-rewrite <- Rabs_Ropp; apply RRle_abs.
-apply Rle_trans with del;
- [ left; assumption | unfold del in |- *; apply Rmin_l ].
-elim H8; intros; assumption.
-apply Rplus_lt_reg_r with x; rewrite Rplus_0_r;
- replace (x + (x1 - x)) with x1; [ elim H8; intros; assumption | ring ].
-unfold fct_cte in |- *; ring.
-rewrite RiemannInt_P15.
-rewrite Rmult_assoc; replace ((x - (x + h0)) * Rabs (/ h0)) with 1.
-rewrite Rmult_1_r; unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2;
- [ prove_sup0
- | rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
- rewrite <- Rinv_r_sym;
- [ rewrite Rmult_1_l; pattern eps at 1 in |- *; rewrite <- Rplus_0_r;
- rewrite double; apply Rplus_lt_compat_l; assumption
- | discrR ] ].
-rewrite Rabs_left.
-replace (x - (x + h0)) with (- h0); [ idtac | ring ].
-rewrite Ropp_mult_distr_l_reverse; rewrite Ropp_mult_distr_r_reverse;
- rewrite Ropp_involutive; apply Rinv_r_sym.
-assumption.
-apply Rinv_lt_0_compat.
-assert (H8 : x + h0 < x).
-auto with real.
-apply Rplus_lt_reg_r with x; rewrite Rplus_0_r; assumption.
-rewrite
- (RiemannInt_P13 H7 (RiemannInt_P14 x (x + h0) (f x))
- (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x))))
- .
-ring.
-unfold Rdiv, Rminus in |- *; rewrite Rmult_plus_distr_r; ring.
-rewrite RiemannInt_P15; apply Rmult_eq_reg_l with h0;
- [ unfold Rdiv in |- *; rewrite (Rmult_comm h0); repeat rewrite Rmult_assoc;
- rewrite <- Rinv_l_sym; [ ring | assumption ]
- | assumption ].
-cut (a <= x + h0).
-cut (x + h0 <= b).
-intros; unfold primitive in |- *.
-case (Rle_dec a (x + h0)); case (Rle_dec (x + h0) b); case (Rle_dec a x);
- case (Rle_dec x b); intros; try (elim n; assumption || left; assumption).
-rewrite <- (RiemannInt_P26 (FTC_P1 h C0 r0 r) H7 (FTC_P1 h C0 r2 r1)); ring.
-apply Rplus_le_reg_l with (- x); replace (- x + (x + h0)) with h0;
- [ idtac | ring ].
-rewrite Rplus_comm; apply Rle_trans with (Rabs h0).
-apply RRle_abs.
-apply Rle_trans with del;
- [ left; assumption
- | unfold del in |- *; apply Rle_trans with (Rmin (b - x) (x - a));
- [ apply Rmin_r | apply Rmin_l ] ].
-apply Ropp_le_cancel; apply Rplus_le_reg_l with x;
- replace (x + - (x + h0)) with (- h0); [ idtac | ring ].
-apply Rle_trans with (Rabs h0);
- [ rewrite <- Rabs_Ropp; apply RRle_abs
- | apply Rle_trans with del;
+ (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x))))
+ (RiemannInt_P16
+ (RiemannInt_P1
+ (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x))))));
+ auto with real.
+ symmetry in |- *; apply RiemannInt_P8.
+ apply Rle_lt_trans with
+ (RiemannInt (RiemannInt_P14 (x + h0) x (eps / 2)) * Rabs (/ h0)).
+ do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ apply RiemannInt_P19.
+ auto with real.
+ intros; replace (f x1 + -1 * fct_cte (f x) x1) with (f x1 - f x).
+ unfold fct_cte in |- *; case (Req_dec x x1); intro.
+ rewrite H9; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; left;
+ assumption.
+ elim H3; intros; left; apply H11.
+ repeat split.
+ assumption.
+ rewrite Rabs_left.
+ apply Rplus_lt_reg_r with (x1 - x0); replace (x1 - x0 + x0) with x1;
+ [ idtac | ring ].
+ replace (x1 - x0 + - (x1 - x)) with (x - x0); [ idtac | ring ].
+ apply Rle_lt_trans with (x + h0).
+ unfold Rminus in |- *; apply Rplus_le_compat_l; apply Ropp_le_cancel.
+ rewrite Ropp_involutive; apply Rle_trans with (Rabs h0).
+ rewrite <- Rabs_Ropp; apply RRle_abs.
+ apply Rle_trans with del;
+ [ left; assumption | unfold del in |- *; apply Rmin_l ].
+ elim H8; intros; assumption.
+ apply Rplus_lt_reg_r with x; rewrite Rplus_0_r;
+ replace (x + (x1 - x)) with x1; [ elim H8; intros; assumption | ring ].
+ unfold fct_cte in |- *; ring.
+ rewrite RiemannInt_P15.
+ rewrite Rmult_assoc; replace ((x - (x + h0)) * Rabs (/ h0)) with 1.
+ rewrite Rmult_1_r; unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2;
+ [ prove_sup0
+ | rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
+ rewrite <- Rinv_r_sym;
+ [ rewrite Rmult_1_l; pattern eps at 1 in |- *; rewrite <- Rplus_0_r;
+ rewrite double; apply Rplus_lt_compat_l; assumption
+ | discrR ] ].
+ rewrite Rabs_left.
+ replace (x - (x + h0)) with (- h0); [ idtac | ring ].
+ rewrite Ropp_mult_distr_l_reverse; rewrite Ropp_mult_distr_r_reverse;
+ rewrite Ropp_involutive; apply Rinv_r_sym.
+ assumption.
+ apply Rinv_lt_0_compat.
+ assert (H8 : x + h0 < x).
+ auto with real.
+ apply Rplus_lt_reg_r with x; rewrite Rplus_0_r; assumption.
+ rewrite
+ (RiemannInt_P13 H7 (RiemannInt_P14 x (x + h0) (f x))
+ (RiemannInt_P10 (-1) H7 (RiemannInt_P14 x (x + h0) (f x))))
+ .
+ ring.
+ unfold Rdiv, Rminus in |- *; rewrite Rmult_plus_distr_r; ring.
+ rewrite RiemannInt_P15; apply Rmult_eq_reg_l with h0;
+ [ unfold Rdiv in |- *; rewrite (Rmult_comm h0); repeat rewrite Rmult_assoc;
+ rewrite <- Rinv_l_sym; [ ring | assumption ]
+ | assumption ].
+ cut (a <= x + h0).
+ cut (x + h0 <= b).
+ intros; unfold primitive in |- *.
+ case (Rle_dec a (x + h0)); case (Rle_dec (x + h0) b); case (Rle_dec a x);
+ case (Rle_dec x b); intros; try (elim n; assumption || left; assumption).
+ rewrite <- (RiemannInt_P26 (FTC_P1 h C0 r0 r) H7 (FTC_P1 h C0 r2 r1)); ring.
+ apply Rplus_le_reg_l with (- x); replace (- x + (x + h0)) with h0;
+ [ idtac | ring ].
+ rewrite Rplus_comm; apply Rle_trans with (Rabs h0).
+ apply RRle_abs.
+ apply Rle_trans with del;
[ left; assumption
- | unfold del in |- *; apply Rle_trans with (Rmin (b - x) (x - a));
- apply Rmin_r ] ].
+ | unfold del in |- *; apply Rle_trans with (Rmin (b - x) (x - a));
+ [ apply Rmin_r | apply Rmin_l ] ].
+ apply Ropp_le_cancel; apply Rplus_le_reg_l with x;
+ replace (x + - (x + h0)) with (- h0); [ idtac | ring ].
+ apply Rle_trans with (Rabs h0);
+ [ rewrite <- Rabs_Ropp; apply RRle_abs
+ | apply Rle_trans with del;
+ [ left; assumption
+ | unfold del in |- *; apply Rle_trans with (Rmin (b - x) (x - a));
+ apply Rmin_r ] ].
Qed.
Lemma RiemannInt_P28 :
- forall (f:R -> R) (a b x:R) (h:a <= b)
- (C0:forall x:R, a <= x <= b -> continuity_pt f x),
- a <= x <= b -> derivable_pt_lim (primitive h (FTC_P1 h C0)) x (f x).
-intro f; intros; elim h; intro.
-elim H; clear H; intros; elim H; intro.
-elim H1; intro.
-apply RiemannInt_P27; split; assumption.
-set
- (f_b := fun x:R => f b * (x - b) + RiemannInt (FTC_P1 h C0 h (Rle_refl b)));
- rewrite H3.
-assert (H4 : derivable_pt_lim f_b b (f b)).
-unfold f_b in |- *; pattern (f b) at 2 in |- *; replace (f b) with (f b + 0).
-change
- (derivable_pt_lim
- ((fct_cte (f b) * (id - fct_cte b))%F +
- fct_cte (RiemannInt (FTC_P1 h C0 h (Rle_refl b)))) b (
- f b + 0)) in |- *.
-apply derivable_pt_lim_plus.
-pattern (f b) at 2 in |- *;
- replace (f b) with (0 * (id - fct_cte b)%F b + fct_cte (f b) b * 1).
-apply derivable_pt_lim_mult.
-apply derivable_pt_lim_const.
-replace 1 with (1 - 0); [ idtac | ring ].
-apply derivable_pt_lim_minus.
-apply derivable_pt_lim_id.
-apply derivable_pt_lim_const.
-unfold fct_cte in |- *; ring.
-apply derivable_pt_lim_const.
-ring.
-unfold derivable_pt_lim in |- *; intros; elim (H4 _ H5); intros;
- assert (H7 : continuity_pt f b).
-apply C0; split; [ left; assumption | right; reflexivity ].
-assert (H8 : 0 < eps / 2).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H7 _ H8); unfold D_x, no_cond, dist in |- *; simpl in |- *;
- unfold R_dist in |- *; intros; set (del := Rmin x0 (Rmin x1 (b - a)));
- assert (H10 : 0 < del).
-unfold del in |- *; unfold Rmin in |- *; case (Rle_dec x1 (b - a)); intros.
-case (Rle_dec x0 x1); intro;
- [ apply (cond_pos x0) | elim H9; intros; assumption ].
-case (Rle_dec x0 (b - a)); intro;
- [ apply (cond_pos x0) | apply Rlt_Rminus; assumption ].
-split with (mkposreal _ H10); intros; case (Rcase_abs h0); intro.
-assert (H14 : b + h0 < b).
-pattern b at 2 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l;
- assumption.
-assert (H13 : Riemann_integrable f (b + h0) b).
-apply continuity_implies_RiemannInt.
-left; assumption.
-intros; apply C0; elim H13; intros; split; try assumption.
-apply Rle_trans with (b + h0); try assumption.
-apply Rplus_le_reg_l with (- a - h0).
-replace (- a - h0 + a) with (- h0); [ idtac | ring ].
-replace (- a - h0 + (b + h0)) with (b - a); [ idtac | ring ].
-apply Rle_trans with del.
-apply Rle_trans with (Rabs h0).
-rewrite <- Rabs_Ropp; apply RRle_abs.
-left; assumption.
-unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a)); apply Rmin_r.
-replace (primitive h (FTC_P1 h C0) (b + h0) - primitive h (FTC_P1 h C0) b)
- with (- RiemannInt H13).
-replace (f b) with (- RiemannInt (RiemannInt_P14 (b + h0) b (f b)) / h0).
-rewrite <- Rabs_Ropp; unfold Rminus in |- *; unfold Rdiv in |- *;
- rewrite Ropp_mult_distr_l_reverse; rewrite Ropp_plus_distr;
- repeat rewrite Ropp_involutive;
- replace
- (RiemannInt H13 * / h0 +
- - RiemannInt (RiemannInt_P14 (b + h0) b (f b)) * / h0) with
- ((RiemannInt H13 - RiemannInt (RiemannInt_P14 (b + h0) b (f b))) / h0).
-replace (RiemannInt H13 - RiemannInt (RiemannInt_P14 (b + h0) b (f b))) with
- (RiemannInt (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b)))).
-unfold Rdiv in |- *; rewrite Rabs_mult;
- apply Rle_lt_trans with
- (RiemannInt
- (RiemannInt_P16
- (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b)))) *
- Rabs (/ h0)).
-do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
-apply Rabs_pos.
-apply
- (RiemannInt_P17 (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b)))
- (RiemannInt_P16
- (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b)))));
- left; assumption.
-apply Rle_lt_trans with
- (RiemannInt (RiemannInt_P14 (b + h0) b (eps / 2)) * Rabs (/ h0)).
-do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
-apply Rabs_pos.
-apply RiemannInt_P19.
-left; assumption.
-intros; replace (f x2 + -1 * fct_cte (f b) x2) with (f x2 - f b).
-unfold fct_cte in |- *; case (Req_dec b x2); intro.
-rewrite H16; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
- left; assumption.
-elim H9; intros; left; apply H18.
-repeat split.
-assumption.
-rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; rewrite Rabs_right.
-apply Rplus_lt_reg_r with (x2 - x1);
- replace (x2 - x1 + (b - x2)) with (b - x1); [ idtac | ring ].
-replace (x2 - x1 + x1) with x2; [ idtac | ring ].
-apply Rlt_le_trans with (b + h0).
-2: elim H15; intros; left; assumption.
-unfold Rminus in |- *; apply Rplus_lt_compat_l; apply Ropp_lt_cancel;
- rewrite Ropp_involutive; apply Rle_lt_trans with (Rabs h0).
-rewrite <- Rabs_Ropp; apply RRle_abs.
-apply Rlt_le_trans with del;
- [ assumption
- | unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a));
- [ apply Rmin_r | apply Rmin_l ] ].
-apply Rle_ge; left; apply Rlt_Rminus; elim H15; intros; assumption.
-unfold fct_cte in |- *; ring.
-rewrite RiemannInt_P15.
-rewrite Rmult_assoc; replace ((b - (b + h0)) * Rabs (/ h0)) with 1.
-rewrite Rmult_1_r; unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2;
- [ prove_sup0
- | rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
- rewrite <- Rinv_r_sym;
- [ rewrite Rmult_1_l; pattern eps at 1 in |- *; rewrite <- Rplus_0_r;
- rewrite double; apply Rplus_lt_compat_l; assumption
- | discrR ] ].
-rewrite Rabs_left.
-apply Rmult_eq_reg_l with h0;
- [ do 2 rewrite (Rmult_comm h0); rewrite Rmult_assoc;
- rewrite Ropp_mult_distr_l_reverse; rewrite <- Rinv_l_sym;
- [ ring | assumption ]
- | assumption ].
-apply Rinv_lt_0_compat; assumption.
-rewrite
- (RiemannInt_P13 H13 (RiemannInt_P14 (b + h0) b (f b))
- (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b))))
- ; ring.
-unfold Rdiv, Rminus in |- *; rewrite Rmult_plus_distr_r; ring.
-rewrite RiemannInt_P15.
-rewrite <- Ropp_mult_distr_l_reverse; apply Rmult_eq_reg_l with h0;
- [ repeat rewrite (Rmult_comm h0); unfold Rdiv in |- *;
- repeat rewrite Rmult_assoc; rewrite <- Rinv_l_sym;
- [ ring | assumption ]
- | assumption ].
-cut (a <= b + h0).
-cut (b + h0 <= b).
-intros; unfold primitive in |- *; case (Rle_dec a (b + h0));
- case (Rle_dec (b + h0) b); case (Rle_dec a b); case (Rle_dec b b);
- intros; try (elim n; right; reflexivity) || (elim n; left; assumption).
-rewrite <- (RiemannInt_P26 (FTC_P1 h C0 r3 r2) H13 (FTC_P1 h C0 r1 r0)); ring.
-elim n; assumption.
-left; assumption.
-apply Rplus_le_reg_l with (- a - h0).
-replace (- a - h0 + a) with (- h0); [ idtac | ring ].
-replace (- a - h0 + (b + h0)) with (b - a); [ idtac | ring ].
-apply Rle_trans with del.
-apply Rle_trans with (Rabs h0).
-rewrite <- Rabs_Ropp; apply RRle_abs.
-left; assumption.
-unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a)); apply Rmin_r.
-cut (primitive h (FTC_P1 h C0) b = f_b b).
-intro; cut (primitive h (FTC_P1 h C0) (b + h0) = f_b (b + h0)).
-intro; rewrite H13; rewrite H14; apply H6.
-assumption.
-apply Rlt_le_trans with del;
- [ assumption | unfold del in |- *; apply Rmin_l ].
-assert (H14 : b < b + h0).
-pattern b at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l.
-assert (H14 := Rge_le _ _ r); elim H14; intro.
-assumption.
-elim H11; symmetry in |- *; assumption.
-unfold primitive in |- *; case (Rle_dec a (b + h0));
- case (Rle_dec (b + h0) b); intros;
- [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 H14))
- | unfold f_b in |- *; reflexivity
- | elim n; left; apply Rlt_trans with b; assumption
- | elim n0; left; apply Rlt_trans with b; assumption ].
-unfold f_b in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r;
- rewrite Rmult_0_r; rewrite Rplus_0_l; unfold primitive in |- *;
- case (Rle_dec a b); case (Rle_dec b b); intros;
- [ apply RiemannInt_P5
- | elim n; right; reflexivity
- | elim n; left; assumption
- | elim n; right; reflexivity ].
+ forall (f:R -> R) (a b x:R) (h:a <= b)
+ (C0:forall x:R, a <= x <= b -> continuity_pt f x),
+ a <= x <= b -> derivable_pt_lim (primitive h (FTC_P1 h C0)) x (f x).
+Proof.
+ intro f; intros; elim h; intro.
+ elim H; clear H; intros; elim H; intro.
+ elim H1; intro.
+ apply RiemannInt_P27; split; assumption.
+ set
+ (f_b := fun x:R => f b * (x - b) + RiemannInt (FTC_P1 h C0 h (Rle_refl b)));
+ rewrite H3.
+ assert (H4 : derivable_pt_lim f_b b (f b)).
+ unfold f_b in |- *; pattern (f b) at 2 in |- *; replace (f b) with (f b + 0).
+ change
+ (derivable_pt_lim
+ ((fct_cte (f b) * (id - fct_cte b))%F +
+ fct_cte (RiemannInt (FTC_P1 h C0 h (Rle_refl b)))) b (
+ f b + 0)) in |- *.
+ apply derivable_pt_lim_plus.
+ pattern (f b) at 2 in |- *;
+ replace (f b) with (0 * (id - fct_cte b)%F b + fct_cte (f b) b * 1).
+ apply derivable_pt_lim_mult.
+ apply derivable_pt_lim_const.
+ replace 1 with (1 - 0); [ idtac | ring ].
+ apply derivable_pt_lim_minus.
+ apply derivable_pt_lim_id.
+ apply derivable_pt_lim_const.
+ unfold fct_cte in |- *; ring.
+ apply derivable_pt_lim_const.
+ ring.
+ unfold derivable_pt_lim in |- *; intros; elim (H4 _ H5); intros;
+ assert (H7 : continuity_pt f b).
+ apply C0; split; [ left; assumption | right; reflexivity ].
+ assert (H8 : 0 < eps / 2).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H7 _ H8); unfold D_x, no_cond, dist in |- *; simpl in |- *;
+ unfold R_dist in |- *; intros; set (del := Rmin x0 (Rmin x1 (b - a)));
+ assert (H10 : 0 < del).
+ unfold del in |- *; unfold Rmin in |- *; case (Rle_dec x1 (b - a)); intros.
+ case (Rle_dec x0 x1); intro;
+ [ apply (cond_pos x0) | elim H9; intros; assumption ].
+ case (Rle_dec x0 (b - a)); intro;
+ [ apply (cond_pos x0) | apply Rlt_Rminus; assumption ].
+ split with (mkposreal _ H10); intros; case (Rcase_abs h0); intro.
+ assert (H14 : b + h0 < b).
+ pattern b at 2 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l;
+ assumption.
+ assert (H13 : Riemann_integrable f (b + h0) b).
+ apply continuity_implies_RiemannInt.
+ left; assumption.
+ intros; apply C0; elim H13; intros; split; try assumption.
+ apply Rle_trans with (b + h0); try assumption.
+ apply Rplus_le_reg_l with (- a - h0).
+ replace (- a - h0 + a) with (- h0); [ idtac | ring ].
+ replace (- a - h0 + (b + h0)) with (b - a); [ idtac | ring ].
+ apply Rle_trans with del.
+ apply Rle_trans with (Rabs h0).
+ rewrite <- Rabs_Ropp; apply RRle_abs.
+ left; assumption.
+ unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a)); apply Rmin_r.
+ replace (primitive h (FTC_P1 h C0) (b + h0) - primitive h (FTC_P1 h C0) b)
+ with (- RiemannInt H13).
+ replace (f b) with (- RiemannInt (RiemannInt_P14 (b + h0) b (f b)) / h0).
+ rewrite <- Rabs_Ropp; unfold Rminus in |- *; unfold Rdiv in |- *;
+ rewrite Ropp_mult_distr_l_reverse; rewrite Ropp_plus_distr;
+ repeat rewrite Ropp_involutive;
+ replace
+ (RiemannInt H13 * / h0 +
+ - RiemannInt (RiemannInt_P14 (b + h0) b (f b)) * / h0) with
+ ((RiemannInt H13 - RiemannInt (RiemannInt_P14 (b + h0) b (f b))) / h0).
+ replace (RiemannInt H13 - RiemannInt (RiemannInt_P14 (b + h0) b (f b))) with
+ (RiemannInt (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b)))).
+ unfold Rdiv in |- *; rewrite Rabs_mult;
+ apply Rle_lt_trans with
+ (RiemannInt
+ (RiemannInt_P16
+ (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b)))) *
+ Rabs (/ h0)).
+ do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ apply
+ (RiemannInt_P17 (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b)))
+ (RiemannInt_P16
+ (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b)))));
+ left; assumption.
+ apply Rle_lt_trans with
+ (RiemannInt (RiemannInt_P14 (b + h0) b (eps / 2)) * Rabs (/ h0)).
+ do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ apply RiemannInt_P19.
+ left; assumption.
+ intros; replace (f x2 + -1 * fct_cte (f b) x2) with (f x2 - f b).
+ unfold fct_cte in |- *; case (Req_dec b x2); intro.
+ rewrite H16; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
+ left; assumption.
+ elim H9; intros; left; apply H18.
+ repeat split.
+ assumption.
+ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; rewrite Rabs_right.
+ apply Rplus_lt_reg_r with (x2 - x1);
+ replace (x2 - x1 + (b - x2)) with (b - x1); [ idtac | ring ].
+ replace (x2 - x1 + x1) with x2; [ idtac | ring ].
+ apply Rlt_le_trans with (b + h0).
+ 2: elim H15; intros; left; assumption.
+ unfold Rminus in |- *; apply Rplus_lt_compat_l; apply Ropp_lt_cancel;
+ rewrite Ropp_involutive; apply Rle_lt_trans with (Rabs h0).
+ rewrite <- Rabs_Ropp; apply RRle_abs.
+ apply Rlt_le_trans with del;
+ [ assumption
+ | unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a));
+ [ apply Rmin_r | apply Rmin_l ] ].
+ apply Rle_ge; left; apply Rlt_Rminus; elim H15; intros; assumption.
+ unfold fct_cte in |- *; ring.
+ rewrite RiemannInt_P15.
+ rewrite Rmult_assoc; replace ((b - (b + h0)) * Rabs (/ h0)) with 1.
+ rewrite Rmult_1_r; unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2;
+ [ prove_sup0
+ | rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
+ rewrite <- Rinv_r_sym;
+ [ rewrite Rmult_1_l; pattern eps at 1 in |- *; rewrite <- Rplus_0_r;
+ rewrite double; apply Rplus_lt_compat_l; assumption
+ | discrR ] ].
+ rewrite Rabs_left.
+ apply Rmult_eq_reg_l with h0;
+ [ do 2 rewrite (Rmult_comm h0); rewrite Rmult_assoc;
+ rewrite Ropp_mult_distr_l_reverse; rewrite <- Rinv_l_sym;
+ [ ring | assumption ]
+ | assumption ].
+ apply Rinv_lt_0_compat; assumption.
+ rewrite
+ (RiemannInt_P13 H13 (RiemannInt_P14 (b + h0) b (f b))
+ (RiemannInt_P10 (-1) H13 (RiemannInt_P14 (b + h0) b (f b))))
+ ; ring.
+ unfold Rdiv, Rminus in |- *; rewrite Rmult_plus_distr_r; ring.
+ rewrite RiemannInt_P15.
+ rewrite <- Ropp_mult_distr_l_reverse; apply Rmult_eq_reg_l with h0;
+ [ repeat rewrite (Rmult_comm h0); unfold Rdiv in |- *;
+ repeat rewrite Rmult_assoc; rewrite <- Rinv_l_sym;
+ [ ring | assumption ]
+ | assumption ].
+ cut (a <= b + h0).
+ cut (b + h0 <= b).
+ intros; unfold primitive in |- *; case (Rle_dec a (b + h0));
+ case (Rle_dec (b + h0) b); case (Rle_dec a b); case (Rle_dec b b);
+ intros; try (elim n; right; reflexivity) || (elim n; left; assumption).
+ rewrite <- (RiemannInt_P26 (FTC_P1 h C0 r3 r2) H13 (FTC_P1 h C0 r1 r0)); ring.
+ elim n; assumption.
+ left; assumption.
+ apply Rplus_le_reg_l with (- a - h0).
+ replace (- a - h0 + a) with (- h0); [ idtac | ring ].
+ replace (- a - h0 + (b + h0)) with (b - a); [ idtac | ring ].
+ apply Rle_trans with del.
+ apply Rle_trans with (Rabs h0).
+ rewrite <- Rabs_Ropp; apply RRle_abs.
+ left; assumption.
+ unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a)); apply Rmin_r.
+ cut (primitive h (FTC_P1 h C0) b = f_b b).
+ intro; cut (primitive h (FTC_P1 h C0) (b + h0) = f_b (b + h0)).
+ intro; rewrite H13; rewrite H14; apply H6.
+ assumption.
+ apply Rlt_le_trans with del;
+ [ assumption | unfold del in |- *; apply Rmin_l ].
+ assert (H14 : b < b + h0).
+ pattern b at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l.
+ assert (H14 := Rge_le _ _ r); elim H14; intro.
+ assumption.
+ elim H11; symmetry in |- *; assumption.
+ unfold primitive in |- *; case (Rle_dec a (b + h0));
+ case (Rle_dec (b + h0) b); intros;
+ [ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 H14))
+ | unfold f_b in |- *; reflexivity
+ | elim n; left; apply Rlt_trans with b; assumption
+ | elim n0; left; apply Rlt_trans with b; assumption ].
+ unfold f_b in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r;
+ rewrite Rmult_0_r; rewrite Rplus_0_l; unfold primitive in |- *;
+ case (Rle_dec a b); case (Rle_dec b b); intros;
+ [ apply RiemannInt_P5
+ | elim n; right; reflexivity
+ | elim n; left; assumption
+ | elim n; right; reflexivity ].
(*****)
-set (f_a := fun x:R => f a * (x - a)); rewrite <- H2;
- assert (H3 : derivable_pt_lim f_a a (f a)).
-unfold f_a in |- *;
- change (derivable_pt_lim (fct_cte (f a) * (id - fct_cte a)%F) a (f a))
- in |- *; pattern (f a) at 2 in |- *;
- replace (f a) with (0 * (id - fct_cte a)%F a + fct_cte (f a) a * 1).
-apply derivable_pt_lim_mult.
-apply derivable_pt_lim_const.
-replace 1 with (1 - 0); [ idtac | ring ].
-apply derivable_pt_lim_minus.
-apply derivable_pt_lim_id.
-apply derivable_pt_lim_const.
-unfold fct_cte in |- *; ring.
-unfold derivable_pt_lim in |- *; intros; elim (H3 _ H4); intros.
-assert (H6 : continuity_pt f a).
-apply C0; split; [ right; reflexivity | left; assumption ].
-assert (H7 : 0 < eps / 2).
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
-elim (H6 _ H7); unfold D_x, no_cond, dist in |- *; simpl in |- *;
- unfold R_dist in |- *; intros.
-set (del := Rmin x0 (Rmin x1 (b - a))).
-assert (H9 : 0 < del).
-unfold del in |- *; unfold Rmin in |- *.
-case (Rle_dec x1 (b - a)); intros.
-case (Rle_dec x0 x1); intro.
-apply (cond_pos x0).
-elim H8; intros; assumption.
-case (Rle_dec x0 (b - a)); intro.
-apply (cond_pos x0).
-apply Rlt_Rminus; assumption.
-split with (mkposreal _ H9).
-intros; case (Rcase_abs h0); intro.
-assert (H12 : a + h0 < a).
-pattern a at 2 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l;
- assumption.
-unfold primitive in |- *.
-case (Rle_dec a (a + h0)); case (Rle_dec (a + h0) b); case (Rle_dec a a);
- case (Rle_dec a b); intros;
- try (elim n; left; assumption) || (elim n; right; reflexivity).
-elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r3 H12)).
-elim n; left; apply Rlt_trans with a; assumption.
-rewrite RiemannInt_P9; replace 0 with (f_a a).
-replace (f a * (a + h0 - a)) with (f_a (a + h0)).
-apply H5; try assumption.
-apply Rlt_le_trans with del;
- [ assumption | unfold del in |- *; apply Rmin_l ].
-unfold f_a in |- *; ring.
-unfold f_a in |- *; ring.
-elim n; left; apply Rlt_trans with a; assumption.
-assert (H12 : a < a + h0).
-pattern a at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l.
-assert (H12 := Rge_le _ _ r); elim H12; intro.
-assumption.
-elim H10; symmetry in |- *; assumption.
-assert (H13 : Riemann_integrable f a (a + h0)).
-apply continuity_implies_RiemannInt.
-left; assumption.
-intros; apply C0; elim H13; intros; split; try assumption.
-apply Rle_trans with (a + h0); try assumption.
-apply Rplus_le_reg_l with (- b - h0).
-replace (- b - h0 + b) with (- h0); [ idtac | ring ].
-replace (- b - h0 + (a + h0)) with (a - b); [ idtac | ring ].
-apply Ropp_le_cancel; rewrite Ropp_involutive; rewrite Ropp_minus_distr;
- apply Rle_trans with del.
-apply Rle_trans with (Rabs h0); [ apply RRle_abs | left; assumption ].
-unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a)); apply Rmin_r.
-replace (primitive h (FTC_P1 h C0) (a + h0) - primitive h (FTC_P1 h C0) a)
- with (RiemannInt H13).
-replace (f a) with (RiemannInt (RiemannInt_P14 a (a + h0) (f a)) / h0).
-replace
- (RiemannInt H13 / h0 - RiemannInt (RiemannInt_P14 a (a + h0) (f a)) / h0)
- with ((RiemannInt H13 - RiemannInt (RiemannInt_P14 a (a + h0) (f a))) / h0).
-replace (RiemannInt H13 - RiemannInt (RiemannInt_P14 a (a + h0) (f a))) with
- (RiemannInt (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a)))).
-unfold Rdiv in |- *; rewrite Rabs_mult;
- apply Rle_lt_trans with
- (RiemannInt
- (RiemannInt_P16
- (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a)))) *
- Rabs (/ h0)).
-do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
-apply Rabs_pos.
-apply
- (RiemannInt_P17 (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a)))
- (RiemannInt_P16
- (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a)))));
- left; assumption.
-apply Rle_lt_trans with
- (RiemannInt (RiemannInt_P14 a (a + h0) (eps / 2)) * Rabs (/ h0)).
-do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
-apply Rabs_pos.
-apply RiemannInt_P19.
-left; assumption.
-intros; replace (f x2 + -1 * fct_cte (f a) x2) with (f x2 - f a).
-unfold fct_cte in |- *; case (Req_dec a x2); intro.
-rewrite H15; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
- left; assumption.
-elim H8; intros; left; apply H17; repeat split.
-assumption.
-rewrite Rabs_right.
-apply Rplus_lt_reg_r with a; replace (a + (x2 - a)) with x2; [ idtac | ring ].
-apply Rlt_le_trans with (a + h0).
-elim H14; intros; assumption.
-apply Rplus_le_compat_l; left; apply Rle_lt_trans with (Rabs h0).
-apply RRle_abs.
-apply Rlt_le_trans with del;
- [ assumption
- | unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a));
- [ apply Rmin_r | apply Rmin_l ] ].
-apply Rle_ge; left; apply Rlt_Rminus; elim H14; intros; assumption.
-unfold fct_cte in |- *; ring.
-rewrite RiemannInt_P15.
-rewrite Rmult_assoc; replace ((a + h0 - a) * Rabs (/ h0)) with 1.
-rewrite Rmult_1_r; unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2;
- [ prove_sup0
- | rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
- rewrite <- Rinv_r_sym;
- [ rewrite Rmult_1_l; pattern eps at 1 in |- *; rewrite <- Rplus_0_r;
- rewrite double; apply Rplus_lt_compat_l; assumption
- | discrR ] ].
-rewrite Rabs_right.
-rewrite Rplus_comm; unfold Rminus in |- *; rewrite Rplus_assoc;
- rewrite Rplus_opp_r; rewrite Rplus_0_r; rewrite <- Rinv_r_sym;
- [ reflexivity | assumption ].
-apply Rle_ge; left; apply Rinv_0_lt_compat; assert (H14 := Rge_le _ _ r);
- elim H14; intro.
-assumption.
-elim H10; symmetry in |- *; assumption.
-rewrite
- (RiemannInt_P13 H13 (RiemannInt_P14 a (a + h0) (f a))
- (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a))))
- ; ring.
-unfold Rdiv, Rminus in |- *; rewrite Rmult_plus_distr_r; ring.
-rewrite RiemannInt_P15.
-rewrite Rplus_comm; unfold Rminus in |- *; rewrite Rplus_assoc;
- rewrite Rplus_opp_r; rewrite Rplus_0_r; unfold Rdiv in |- *;
- rewrite Rmult_assoc; rewrite <- Rinv_r_sym; [ ring | assumption ].
-cut (a <= a + h0).
-cut (a + h0 <= b).
-intros; unfold primitive in |- *; case (Rle_dec a (a + h0));
- case (Rle_dec (a + h0) b); case (Rle_dec a a); case (Rle_dec a b);
- intros; try (elim n; right; reflexivity) || (elim n; left; assumption).
-rewrite RiemannInt_P9; unfold Rminus in |- *; rewrite Ropp_0;
- rewrite Rplus_0_r; apply RiemannInt_P5.
-elim n; assumption.
-elim n; assumption.
-2: left; assumption.
-apply Rplus_le_reg_l with (- a); replace (- a + (a + h0)) with h0;
- [ idtac | ring ].
-rewrite Rplus_comm; apply Rle_trans with del;
- [ apply Rle_trans with (Rabs h0); [ apply RRle_abs | left; assumption ]
- | unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a)); apply Rmin_r ].
+ set (f_a := fun x:R => f a * (x - a)); rewrite <- H2;
+ assert (H3 : derivable_pt_lim f_a a (f a)).
+ unfold f_a in |- *;
+ change (derivable_pt_lim (fct_cte (f a) * (id - fct_cte a)%F) a (f a))
+ in |- *; pattern (f a) at 2 in |- *;
+ replace (f a) with (0 * (id - fct_cte a)%F a + fct_cte (f a) a * 1).
+ apply derivable_pt_lim_mult.
+ apply derivable_pt_lim_const.
+ replace 1 with (1 - 0); [ idtac | ring ].
+ apply derivable_pt_lim_minus.
+ apply derivable_pt_lim_id.
+ apply derivable_pt_lim_const.
+ unfold fct_cte in |- *; ring.
+ unfold derivable_pt_lim in |- *; intros; elim (H3 _ H4); intros.
+ assert (H6 : continuity_pt f a).
+ apply C0; split; [ right; reflexivity | left; assumption ].
+ assert (H7 : 0 < eps / 2).
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; prove_sup0 ].
+ elim (H6 _ H7); unfold D_x, no_cond, dist in |- *; simpl in |- *;
+ unfold R_dist in |- *; intros.
+ set (del := Rmin x0 (Rmin x1 (b - a))).
+ assert (H9 : 0 < del).
+ unfold del in |- *; unfold Rmin in |- *.
+ case (Rle_dec x1 (b - a)); intros.
+ case (Rle_dec x0 x1); intro.
+ apply (cond_pos x0).
+ elim H8; intros; assumption.
+ case (Rle_dec x0 (b - a)); intro.
+ apply (cond_pos x0).
+ apply Rlt_Rminus; assumption.
+ split with (mkposreal _ H9).
+ intros; case (Rcase_abs h0); intro.
+ assert (H12 : a + h0 < a).
+ pattern a at 2 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l;
+ assumption.
+ unfold primitive in |- *.
+ case (Rle_dec a (a + h0)); case (Rle_dec (a + h0) b); case (Rle_dec a a);
+ case (Rle_dec a b); intros;
+ try (elim n; left; assumption) || (elim n; right; reflexivity).
+ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r3 H12)).
+ elim n; left; apply Rlt_trans with a; assumption.
+ rewrite RiemannInt_P9; replace 0 with (f_a a).
+ replace (f a * (a + h0 - a)) with (f_a (a + h0)).
+ apply H5; try assumption.
+ apply Rlt_le_trans with del;
+ [ assumption | unfold del in |- *; apply Rmin_l ].
+ unfold f_a in |- *; ring.
+ unfold f_a in |- *; ring.
+ elim n; left; apply Rlt_trans with a; assumption.
+ assert (H12 : a < a + h0).
+ pattern a at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l.
+ assert (H12 := Rge_le _ _ r); elim H12; intro.
+ assumption.
+ elim H10; symmetry in |- *; assumption.
+ assert (H13 : Riemann_integrable f a (a + h0)).
+ apply continuity_implies_RiemannInt.
+ left; assumption.
+ intros; apply C0; elim H13; intros; split; try assumption.
+ apply Rle_trans with (a + h0); try assumption.
+ apply Rplus_le_reg_l with (- b - h0).
+ replace (- b - h0 + b) with (- h0); [ idtac | ring ].
+ replace (- b - h0 + (a + h0)) with (a - b); [ idtac | ring ].
+ apply Ropp_le_cancel; rewrite Ropp_involutive; rewrite Ropp_minus_distr;
+ apply Rle_trans with del.
+ apply Rle_trans with (Rabs h0); [ apply RRle_abs | left; assumption ].
+ unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a)); apply Rmin_r.
+ replace (primitive h (FTC_P1 h C0) (a + h0) - primitive h (FTC_P1 h C0) a)
+ with (RiemannInt H13).
+ replace (f a) with (RiemannInt (RiemannInt_P14 a (a + h0) (f a)) / h0).
+ replace
+ (RiemannInt H13 / h0 - RiemannInt (RiemannInt_P14 a (a + h0) (f a)) / h0)
+ with ((RiemannInt H13 - RiemannInt (RiemannInt_P14 a (a + h0) (f a))) / h0).
+ replace (RiemannInt H13 - RiemannInt (RiemannInt_P14 a (a + h0) (f a))) with
+ (RiemannInt (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a)))).
+ unfold Rdiv in |- *; rewrite Rabs_mult;
+ apply Rle_lt_trans with
+ (RiemannInt
+ (RiemannInt_P16
+ (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a)))) *
+ Rabs (/ h0)).
+ do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ apply
+ (RiemannInt_P17 (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a)))
+ (RiemannInt_P16
+ (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a)))));
+ left; assumption.
+ apply Rle_lt_trans with
+ (RiemannInt (RiemannInt_P14 a (a + h0) (eps / 2)) * Rabs (/ h0)).
+ do 2 rewrite <- (Rmult_comm (Rabs (/ h0))); apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ apply RiemannInt_P19.
+ left; assumption.
+ intros; replace (f x2 + -1 * fct_cte (f a) x2) with (f x2 - f a).
+ unfold fct_cte in |- *; case (Req_dec a x2); intro.
+ rewrite H15; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
+ left; assumption.
+ elim H8; intros; left; apply H17; repeat split.
+ assumption.
+ rewrite Rabs_right.
+ apply Rplus_lt_reg_r with a; replace (a + (x2 - a)) with x2; [ idtac | ring ].
+ apply Rlt_le_trans with (a + h0).
+ elim H14; intros; assumption.
+ apply Rplus_le_compat_l; left; apply Rle_lt_trans with (Rabs h0).
+ apply RRle_abs.
+ apply Rlt_le_trans with del;
+ [ assumption
+ | unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a));
+ [ apply Rmin_r | apply Rmin_l ] ].
+ apply Rle_ge; left; apply Rlt_Rminus; elim H14; intros; assumption.
+ unfold fct_cte in |- *; ring.
+ rewrite RiemannInt_P15.
+ rewrite Rmult_assoc; replace ((a + h0 - a) * Rabs (/ h0)) with 1.
+ rewrite Rmult_1_r; unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2;
+ [ prove_sup0
+ | rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc;
+ rewrite <- Rinv_r_sym;
+ [ rewrite Rmult_1_l; pattern eps at 1 in |- *; rewrite <- Rplus_0_r;
+ rewrite double; apply Rplus_lt_compat_l; assumption
+ | discrR ] ].
+ rewrite Rabs_right.
+ rewrite Rplus_comm; unfold Rminus in |- *; rewrite Rplus_assoc;
+ rewrite Rplus_opp_r; rewrite Rplus_0_r; rewrite <- Rinv_r_sym;
+ [ reflexivity | assumption ].
+ apply Rle_ge; left; apply Rinv_0_lt_compat; assert (H14 := Rge_le _ _ r);
+ elim H14; intro.
+ assumption.
+ elim H10; symmetry in |- *; assumption.
+ rewrite
+ (RiemannInt_P13 H13 (RiemannInt_P14 a (a + h0) (f a))
+ (RiemannInt_P10 (-1) H13 (RiemannInt_P14 a (a + h0) (f a))))
+ ; ring.
+ unfold Rdiv, Rminus in |- *; rewrite Rmult_plus_distr_r; ring.
+ rewrite RiemannInt_P15.
+ rewrite Rplus_comm; unfold Rminus in |- *; rewrite Rplus_assoc;
+ rewrite Rplus_opp_r; rewrite Rplus_0_r; unfold Rdiv in |- *;
+ rewrite Rmult_assoc; rewrite <- Rinv_r_sym; [ ring | assumption ].
+ cut (a <= a + h0).
+ cut (a + h0 <= b).
+ intros; unfold primitive in |- *; case (Rle_dec a (a + h0));
+ case (Rle_dec (a + h0) b); case (Rle_dec a a); case (Rle_dec a b);
+ intros; try (elim n; right; reflexivity) || (elim n; left; assumption).
+ rewrite RiemannInt_P9; unfold Rminus in |- *; rewrite Ropp_0;
+ rewrite Rplus_0_r; apply RiemannInt_P5.
+ elim n; assumption.
+ elim n; assumption.
+ 2: left; assumption.
+ apply Rplus_le_reg_l with (- a); replace (- a + (a + h0)) with h0;
+ [ idtac | ring ].
+ rewrite Rplus_comm; apply Rle_trans with del;
+ [ apply Rle_trans with (Rabs h0); [ apply RRle_abs | left; assumption ]
+ | unfold del in |- *; apply Rle_trans with (Rmin x1 (b - a)); apply Rmin_r ].
(*****)
-assert (H1 : x = a).
-rewrite <- H0 in H; elim H; intros; apply Rle_antisym; assumption.
-set (f_a := fun x:R => f a * (x - a)).
-assert (H2 : derivable_pt_lim f_a a (f a)).
-unfold f_a in |- *;
- change (derivable_pt_lim (fct_cte (f a) * (id - fct_cte a)%F) a (f a))
- in |- *; pattern (f a) at 2 in |- *;
- replace (f a) with (0 * (id - fct_cte a)%F a + fct_cte (f a) a * 1).
-apply derivable_pt_lim_mult.
-apply derivable_pt_lim_const.
-replace 1 with (1 - 0); [ idtac | ring ].
-apply derivable_pt_lim_minus.
-apply derivable_pt_lim_id.
-apply derivable_pt_lim_const.
-unfold fct_cte in |- *; ring.
-set
- (f_b := fun x:R => f b * (x - b) + RiemannInt (FTC_P1 h C0 h (Rle_refl b))).
-assert (H3 : derivable_pt_lim f_b b (f b)).
-unfold f_b in |- *; pattern (f b) at 2 in |- *; replace (f b) with (f b + 0).
-change
- (derivable_pt_lim
- ((fct_cte (f b) * (id - fct_cte b))%F +
- fct_cte (RiemannInt (FTC_P1 h C0 h (Rle_refl b)))) b (
- f b + 0)) in |- *.
-apply derivable_pt_lim_plus.
-pattern (f b) at 2 in |- *;
- replace (f b) with (0 * (id - fct_cte b)%F b + fct_cte (f b) b * 1).
-apply derivable_pt_lim_mult.
-apply derivable_pt_lim_const.
-replace 1 with (1 - 0); [ idtac | ring ].
-apply derivable_pt_lim_minus.
-apply derivable_pt_lim_id.
-apply derivable_pt_lim_const.
-unfold fct_cte in |- *; ring.
-apply derivable_pt_lim_const.
-ring.
-unfold derivable_pt_lim in |- *; intros; elim (H2 _ H4); intros;
- elim (H3 _ H4); intros; set (del := Rmin x0 x1).
-assert (H7 : 0 < del).
-unfold del in |- *; unfold Rmin in |- *; case (Rle_dec x0 x1); intro.
-apply (cond_pos x0).
-apply (cond_pos x1).
-split with (mkposreal _ H7); intros; case (Rcase_abs h0); intro.
-assert (H10 : a + h0 < a).
-pattern a at 2 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l;
- assumption.
-rewrite H1; unfold primitive in |- *; case (Rle_dec a (a + h0));
- case (Rle_dec (a + h0) b); case (Rle_dec a a); case (Rle_dec a b);
- intros; try (elim n; right; assumption || reflexivity).
-elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r3 H10)).
-elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r2 H10)).
-rewrite RiemannInt_P9; replace 0 with (f_a a).
-replace (f a * (a + h0 - a)) with (f_a (a + h0)).
-apply H5; try assumption.
-apply Rlt_le_trans with del; try assumption.
-unfold del in |- *; apply Rmin_l.
-unfold f_a in |- *; ring.
-unfold f_a in |- *; ring.
-elim n; rewrite <- H0; left; assumption.
-assert (H10 : a < a + h0).
-pattern a at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l.
-assert (H10 := Rge_le _ _ r); elim H10; intro.
-assumption.
-elim H8; symmetry in |- *; assumption.
-rewrite H0 in H1; rewrite H1; unfold primitive in |- *;
- case (Rle_dec a (b + h0)); case (Rle_dec (b + h0) b);
- case (Rle_dec a b); case (Rle_dec b b); intros;
- try (elim n; right; assumption || reflexivity).
-rewrite H0 in H10; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r2 H10)).
-repeat rewrite RiemannInt_P9.
-replace (RiemannInt (FTC_P1 h C0 r1 r0)) with (f_b b).
-fold (f_b (b + h0)) in |- *.
-apply H6; try assumption.
-apply Rlt_le_trans with del; try assumption.
-unfold del in |- *; apply Rmin_r.
-unfold f_b in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r;
- rewrite Rmult_0_r; rewrite Rplus_0_l; apply RiemannInt_P5.
-elim n; rewrite <- H0; left; assumption.
-elim n0; rewrite <- H0; left; assumption.
+ assert (H1 : x = a).
+ rewrite <- H0 in H; elim H; intros; apply Rle_antisym; assumption.
+ set (f_a := fun x:R => f a * (x - a)).
+ assert (H2 : derivable_pt_lim f_a a (f a)).
+ unfold f_a in |- *;
+ change (derivable_pt_lim (fct_cte (f a) * (id - fct_cte a)%F) a (f a))
+ in |- *; pattern (f a) at 2 in |- *;
+ replace (f a) with (0 * (id - fct_cte a)%F a + fct_cte (f a) a * 1).
+ apply derivable_pt_lim_mult.
+ apply derivable_pt_lim_const.
+ replace 1 with (1 - 0); [ idtac | ring ].
+ apply derivable_pt_lim_minus.
+ apply derivable_pt_lim_id.
+ apply derivable_pt_lim_const.
+ unfold fct_cte in |- *; ring.
+ set
+ (f_b := fun x:R => f b * (x - b) + RiemannInt (FTC_P1 h C0 h (Rle_refl b))).
+ assert (H3 : derivable_pt_lim f_b b (f b)).
+ unfold f_b in |- *; pattern (f b) at 2 in |- *; replace (f b) with (f b + 0).
+ change
+ (derivable_pt_lim
+ ((fct_cte (f b) * (id - fct_cte b))%F +
+ fct_cte (RiemannInt (FTC_P1 h C0 h (Rle_refl b)))) b (
+ f b + 0)) in |- *.
+ apply derivable_pt_lim_plus.
+ pattern (f b) at 2 in |- *;
+ replace (f b) with (0 * (id - fct_cte b)%F b + fct_cte (f b) b * 1).
+ apply derivable_pt_lim_mult.
+ apply derivable_pt_lim_const.
+ replace 1 with (1 - 0); [ idtac | ring ].
+ apply derivable_pt_lim_minus.
+ apply derivable_pt_lim_id.
+ apply derivable_pt_lim_const.
+ unfold fct_cte in |- *; ring.
+ apply derivable_pt_lim_const.
+ ring.
+ unfold derivable_pt_lim in |- *; intros; elim (H2 _ H4); intros;
+ elim (H3 _ H4); intros; set (del := Rmin x0 x1).
+ assert (H7 : 0 < del).
+ unfold del in |- *; unfold Rmin in |- *; case (Rle_dec x0 x1); intro.
+ apply (cond_pos x0).
+ apply (cond_pos x1).
+ split with (mkposreal _ H7); intros; case (Rcase_abs h0); intro.
+ assert (H10 : a + h0 < a).
+ pattern a at 2 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l;
+ assumption.
+ rewrite H1; unfold primitive in |- *; case (Rle_dec a (a + h0));
+ case (Rle_dec (a + h0) b); case (Rle_dec a a); case (Rle_dec a b);
+ intros; try (elim n; right; assumption || reflexivity).
+ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r3 H10)).
+ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r2 H10)).
+ rewrite RiemannInt_P9; replace 0 with (f_a a).
+ replace (f a * (a + h0 - a)) with (f_a (a + h0)).
+ apply H5; try assumption.
+ apply Rlt_le_trans with del; try assumption.
+ unfold del in |- *; apply Rmin_l.
+ unfold f_a in |- *; ring.
+ unfold f_a in |- *; ring.
+ elim n; rewrite <- H0; left; assumption.
+ assert (H10 : a < a + h0).
+ pattern a at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l.
+ assert (H10 := Rge_le _ _ r); elim H10; intro.
+ assumption.
+ elim H8; symmetry in |- *; assumption.
+ rewrite H0 in H1; rewrite H1; unfold primitive in |- *;
+ case (Rle_dec a (b + h0)); case (Rle_dec (b + h0) b);
+ case (Rle_dec a b); case (Rle_dec b b); intros;
+ try (elim n; right; assumption || reflexivity).
+ rewrite H0 in H10; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r2 H10)).
+ repeat rewrite RiemannInt_P9.
+ replace (RiemannInt (FTC_P1 h C0 r1 r0)) with (f_b b).
+ fold (f_b (b + h0)) in |- *.
+ apply H6; try assumption.
+ apply Rlt_le_trans with del; try assumption.
+ unfold del in |- *; apply Rmin_r.
+ unfold f_b in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r;
+ rewrite Rmult_0_r; rewrite Rplus_0_l; apply RiemannInt_P5.
+ elim n; rewrite <- H0; left; assumption.
+ elim n0; rewrite <- H0; left; assumption.
Qed.
Lemma RiemannInt_P29 :
- forall (f:R -> R) a b (h:a <= b)
- (C0:forall x:R, a <= x <= b -> continuity_pt f x),
- antiderivative f (primitive h (FTC_P1 h C0)) a b.
-intro f; intros; unfold antiderivative in |- *; split; try assumption; intros;
- assert (H0 := RiemannInt_P28 h C0 H);
- assert (H1 : derivable_pt (primitive h (FTC_P1 h C0)) x);
- [ unfold derivable_pt in |- *; split with (f x); apply H0
- | split with H1; symmetry in |- *; apply derive_pt_eq_0; apply H0 ].
+ forall (f:R -> R) a b (h:a <= b)
+ (C0:forall x:R, a <= x <= b -> continuity_pt f x),
+ antiderivative f (primitive h (FTC_P1 h C0)) a b.
+Proof.
+ intro f; intros; unfold antiderivative in |- *; split; try assumption; intros;
+ assert (H0 := RiemannInt_P28 h C0 H);
+ assert (H1 : derivable_pt (primitive h (FTC_P1 h C0)) x);
+ [ unfold derivable_pt in |- *; split with (f x); apply H0
+ | split with H1; symmetry in |- *; apply derive_pt_eq_0; apply H0 ].
Qed.
Lemma RiemannInt_P30 :
- forall (f:R -> R) (a b:R),
- a <= b ->
- (forall x:R, a <= x <= b -> continuity_pt f x) ->
- sigT (fun g:R -> R => antiderivative f g a b).
-intros; split with (primitive H (FTC_P1 H H0)); apply RiemannInt_P29.
+ forall (f:R -> R) (a b:R),
+ a <= b ->
+ (forall x:R, a <= x <= b -> continuity_pt f x) ->
+ sigT (fun g:R -> R => antiderivative f g a b).
+Proof.
+ intros; split with (primitive H (FTC_P1 H H0)); apply RiemannInt_P29.
Qed.
Record C1_fun : Type := mkC1
{c1 :> R -> R; diff0 : derivable c1; cont1 : continuity (derive c1 diff0)}.
Lemma RiemannInt_P31 :
- forall (f:C1_fun) (a b:R),
- a <= b -> antiderivative (derive f (diff0 f)) f a b.
-intro f; intros; unfold antiderivative in |- *; split; try assumption; intros;
- split with (diff0 f x); reflexivity.
+ forall (f:C1_fun) (a b:R),
+ a <= b -> antiderivative (derive f (diff0 f)) f a b.
+Proof.
+ intro f; intros; unfold antiderivative in |- *; split; try assumption; intros;
+ split with (diff0 f x); reflexivity.
Qed.
Lemma RiemannInt_P32 :
- forall (f:C1_fun) (a b:R), Riemann_integrable (derive f (diff0 f)) a b.
-intro f; intros; case (Rle_dec a b); intro;
- [ apply continuity_implies_RiemannInt; try assumption; intros;
- apply (cont1 f)
- | assert (H : b <= a);
- [ auto with real
- | apply RiemannInt_P1; apply continuity_implies_RiemannInt;
- try assumption; intros; apply (cont1 f) ] ].
+ forall (f:C1_fun) (a b:R), Riemann_integrable (derive f (diff0 f)) a b.
+Proof.
+ intro f; intros; case (Rle_dec a b); intro;
+ [ apply continuity_implies_RiemannInt; try assumption; intros;
+ apply (cont1 f)
+ | assert (H : b <= a);
+ [ auto with real
+ | apply RiemannInt_P1; apply continuity_implies_RiemannInt;
+ try assumption; intros; apply (cont1 f) ] ].
Qed.
Lemma RiemannInt_P33 :
- forall (f:C1_fun) (a b:R) (pr:Riemann_integrable (derive f (diff0 f)) a b),
- a <= b -> RiemannInt pr = f b - f a.
-intro f; intros;
- assert
- (H0 : forall x:R, a <= x <= b -> continuity_pt (derive f (diff0 f)) x).
-intros; apply (cont1 f).
-rewrite (RiemannInt_P20 H (FTC_P1 H H0) pr);
- assert (H1 := RiemannInt_P29 H H0); assert (H2 := RiemannInt_P31 f H);
- elim (antiderivative_Ucte (derive f (diff0 f)) _ _ _ _ H1 H2);
- intros C H3; repeat rewrite H3;
- [ ring
- | split; [ right; reflexivity | assumption ]
- | split; [ assumption | right; reflexivity ] ].
+ forall (f:C1_fun) (a b:R) (pr:Riemann_integrable (derive f (diff0 f)) a b),
+ a <= b -> RiemannInt pr = f b - f a.
+Proof.
+ intro f; intros;
+ assert
+ (H0 : forall x:R, a <= x <= b -> continuity_pt (derive f (diff0 f)) x).
+ intros; apply (cont1 f).
+ rewrite (RiemannInt_P20 H (FTC_P1 H H0) pr);
+ assert (H1 := RiemannInt_P29 H H0); assert (H2 := RiemannInt_P31 f H);
+ elim (antiderivative_Ucte (derive f (diff0 f)) _ _ _ _ H1 H2);
+ intros C H3; repeat rewrite H3;
+ [ ring
+ | split; [ right; reflexivity | assumption ]
+ | split; [ assumption | right; reflexivity ] ].
Qed.
Lemma FTC_Riemann :
- forall (f:C1_fun) (a b:R) (pr:Riemann_integrable (derive f (diff0 f)) a b),
- RiemannInt pr = f b - f a.
-intro f; intros; case (Rle_dec a b); intro;
- [ apply RiemannInt_P33; assumption
- | assert (H : b <= a);
- [ auto with real
- | assert (H0 := RiemannInt_P1 pr); rewrite (RiemannInt_P8 pr H0);
- rewrite (RiemannInt_P33 _ H0 H); ring ] ].
+ forall (f:C1_fun) (a b:R) (pr:Riemann_integrable (derive f (diff0 f)) a b),
+ RiemannInt pr = f b - f a.
+Proof.
+ intro f; intros; case (Rle_dec a b); intro;
+ [ apply RiemannInt_P33; assumption
+ | assert (H : b <= a);
+ [ auto with real
+ | assert (H0 := RiemannInt_P1 pr); rewrite (RiemannInt_P8 pr H0);
+ rewrite (RiemannInt_P33 _ H0 H); ring ] ].
Qed.