diff options
author | Samuel Mimram <smimram@debian.org> | 2006-11-21 21:38:49 +0000 |
---|---|---|
committer | Samuel Mimram <smimram@debian.org> | 2006-11-21 21:38:49 +0000 |
commit | 208a0f7bfa5249f9795e6e225f309cbe715c0fad (patch) | |
tree | 591e9e512063e34099782e2518573f15ffeac003 /theories/Reals/MVT.v | |
parent | de0085539583f59dc7c4bf4e272e18711d565466 (diff) |
Imported Upstream version 8.1~gammaupstream/8.1.gamma
Diffstat (limited to 'theories/Reals/MVT.v')
-rw-r--r-- | theories/Reals/MVT.v | 1210 |
1 files changed, 616 insertions, 594 deletions
diff --git a/theories/Reals/MVT.v b/theories/Reals/MVT.v index 241313a0..8bb9298a 100644 --- a/theories/Reals/MVT.v +++ b/theories/Reals/MVT.v @@ -5,8 +5,8 @@ (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (************************************************************************) - -(*i $Id: MVT.v 8670 2006-03-28 22:16:14Z herbelin $ i*) + +(*i $Id: MVT.v 9245 2006-10-17 12:53:34Z notin $ i*) Require Import Rbase. Require Import Rfunctions. @@ -15,685 +15,707 @@ Require Import Rtopology. Open Local Scope R_scope. (* The Mean Value Theorem *) Theorem MVT : - forall (f g:R -> R) (a b:R) (pr1:forall c:R, a < c < b -> derivable_pt f c) - (pr2:forall c:R, a < c < b -> derivable_pt g c), - a < b -> - (forall c:R, a <= c <= b -> continuity_pt f c) -> - (forall c:R, a <= c <= b -> continuity_pt g c) -> + forall (f g:R -> R) (a b:R) (pr1:forall c:R, a < c < b -> derivable_pt f c) + (pr2:forall c:R, a < c < b -> derivable_pt g c), + a < b -> + (forall c:R, a <= c <= b -> continuity_pt f c) -> + (forall c:R, a <= c <= b -> continuity_pt g c) -> exists c : R, - (exists P : a < c < b, + (exists P : a < c < b, (g b - g a) * derive_pt f c (pr1 c P) = (f b - f a) * derive_pt g c (pr2 c P)). -intros; assert (H2 := Rlt_le _ _ H). -set (h := fun y:R => (g b - g a) * f y - (f b - f a) * g y). -cut (forall c:R, a < c < b -> derivable_pt h c). -intro X; cut (forall c:R, a <= c <= b -> continuity_pt h c). -intro; assert (H4 := continuity_ab_maj h a b H2 H3). -assert (H5 := continuity_ab_min h a b H2 H3). -elim H4; intros Mx H6. -elim H5; intros mx H7. -cut (h a = h b). -intro; set (M := h Mx); set (m := h mx). -cut - (forall (c:R) (P:a < c < b), - derive_pt h c (X c P) = - (g b - g a) * derive_pt f c (pr1 c P) - - (f b - f a) * derive_pt g c (pr2 c P)). -intro; case (Req_dec (h a) M); intro. -case (Req_dec (h a) m); intro. -cut (forall c:R, a <= c <= b -> h c = M). -intro; cut (a < (a + b) / 2 < b). +Proof. + intros; assert (H2 := Rlt_le _ _ H). + set (h := fun y:R => (g b - g a) * f y - (f b - f a) * g y). + cut (forall c:R, a < c < b -> derivable_pt h c). + intro X; cut (forall c:R, a <= c <= b -> continuity_pt h c). + intro; assert (H4 := continuity_ab_maj h a b H2 H3). + assert (H5 := continuity_ab_min h a b H2 H3). + elim H4; intros Mx H6. + elim H5; intros mx H7. + cut (h a = h b). + intro; set (M := h Mx); set (m := h mx). + cut + (forall (c:R) (P:a < c < b), + derive_pt h c (X c P) = + (g b - g a) * derive_pt f c (pr1 c P) - + (f b - f a) * derive_pt g c (pr2 c P)). + intro; case (Req_dec (h a) M); intro. + case (Req_dec (h a) m); intro. + cut (forall c:R, a <= c <= b -> h c = M). + intro; cut (a < (a + b) / 2 < b). (*** h constant ***) -intro; exists ((a + b) / 2). -exists H13. -apply Rminus_diag_uniq; rewrite <- H9; apply deriv_constant2 with a b. -elim H13; intros; assumption. -elim H13; intros; assumption. -intros; rewrite (H12 ((a + b) / 2)). -apply H12; split; left; assumption. -elim H13; intros; split; left; assumption. -split. -apply Rmult_lt_reg_l with 2. -prove_sup0. -unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; - rewrite <- Rinv_r_sym. -rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat_l; apply H. -discrR. -apply Rmult_lt_reg_l with 2. -prove_sup0. -unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; - rewrite <- Rinv_r_sym. -rewrite Rmult_1_l; rewrite Rplus_comm; rewrite double; - apply Rplus_lt_compat_l; apply H. -discrR. -intros; elim H6; intros H13 _. -elim H7; intros H14 _. -apply Rle_antisym. -apply H13; apply H12. -rewrite H10 in H11; rewrite H11; apply H14; apply H12. -cut (a < mx < b). + intro; exists ((a + b) / 2). + exists H13. + apply Rminus_diag_uniq; rewrite <- H9; apply deriv_constant2 with a b. + elim H13; intros; assumption. + elim H13; intros; assumption. + intros; rewrite (H12 ((a + b) / 2)). + apply H12; split; left; assumption. + elim H13; intros; split; left; assumption. + split. + apply Rmult_lt_reg_l with 2. + prove_sup0. + unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; + rewrite <- Rinv_r_sym. + rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat_l; apply H. + discrR. + apply Rmult_lt_reg_l with 2. + prove_sup0. + unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; + rewrite <- Rinv_r_sym. + rewrite Rmult_1_l; rewrite Rplus_comm; rewrite double; + apply Rplus_lt_compat_l; apply H. + discrR. + intros; elim H6; intros H13 _. + elim H7; intros H14 _. + apply Rle_antisym. + apply H13; apply H12. + rewrite H10 in H11; rewrite H11; apply H14; apply H12. + cut (a < mx < b). (*** h admet un minimum global sur [a,b] ***) -intro; exists mx. -exists H12. -apply Rminus_diag_uniq; rewrite <- H9; apply deriv_minimum with a b. -elim H12; intros; assumption. -elim H12; intros; assumption. -intros; elim H7; intros. -apply H15; split; left; assumption. -elim H7; intros _ H12; elim H12; intros; split. -inversion H13. -apply H15. -rewrite H15 in H11; elim H11; reflexivity. -inversion H14. -apply H15. -rewrite H8 in H11; rewrite <- H15 in H11; elim H11; reflexivity. -cut (a < Mx < b). + intro; exists mx. + exists H12. + apply Rminus_diag_uniq; rewrite <- H9; apply deriv_minimum with a b. + elim H12; intros; assumption. + elim H12; intros; assumption. + intros; elim H7; intros. + apply H15; split; left; assumption. + elim H7; intros _ H12; elim H12; intros; split. + inversion H13. + apply H15. + rewrite H15 in H11; elim H11; reflexivity. + inversion H14. + apply H15. + rewrite H8 in H11; rewrite <- H15 in H11; elim H11; reflexivity. + cut (a < Mx < b). (*** h admet un maximum global sur [a,b] ***) -intro; exists Mx. -exists H11. -apply Rminus_diag_uniq; rewrite <- H9; apply deriv_maximum with a b. -elim H11; intros; assumption. -elim H11; intros; assumption. -intros; elim H6; intros; apply H14. -split; left; assumption. -elim H6; intros _ H11; elim H11; intros; split. -inversion H12. -apply H14. -rewrite H14 in H10; elim H10; reflexivity. -inversion H13. -apply H14. -rewrite H8 in H10; rewrite <- H14 in H10; elim H10; reflexivity. -intros; unfold h in |- *; - replace - (derive_pt (fun y:R => (g b - g a) * f y - (f b - f a) * g y) c (X c P)) - with - (derive_pt ((fct_cte (g b - g a) * f)%F - (fct_cte (f b - f a) * g)%F) c - (derivable_pt_minus _ _ _ - (derivable_pt_mult _ _ _ (derivable_pt_const (g b - g a) c) (pr1 c P)) - (derivable_pt_mult _ _ _ (derivable_pt_const (f b - f a) c) (pr2 c P)))); - [ idtac | apply pr_nu ]. -rewrite derive_pt_minus; do 2 rewrite derive_pt_mult; - do 2 rewrite derive_pt_const; do 2 rewrite Rmult_0_l; - do 2 rewrite Rplus_0_l; reflexivity. -unfold h in |- *; ring. -intros; unfold h in |- *; - change - (continuity_pt ((fct_cte (g b - g a) * f)%F - (fct_cte (f b - f a) * g)%F) - c) in |- *. -apply continuity_pt_minus; apply continuity_pt_mult. -apply derivable_continuous_pt; apply derivable_const. -apply H0; apply H3. -apply derivable_continuous_pt; apply derivable_const. -apply H1; apply H3. -intros; - change - (derivable_pt ((fct_cte (g b - g a) * f)%F - (fct_cte (f b - f a) * g)%F) - c) in |- *. -apply derivable_pt_minus; apply derivable_pt_mult. -apply derivable_pt_const. -apply (pr1 _ H3). -apply derivable_pt_const. -apply (pr2 _ H3). + intro; exists Mx. + exists H11. + apply Rminus_diag_uniq; rewrite <- H9; apply deriv_maximum with a b. + elim H11; intros; assumption. + elim H11; intros; assumption. + intros; elim H6; intros; apply H14. + split; left; assumption. + elim H6; intros _ H11; elim H11; intros; split. + inversion H12. + apply H14. + rewrite H14 in H10; elim H10; reflexivity. + inversion H13. + apply H14. + rewrite H8 in H10; rewrite <- H14 in H10; elim H10; reflexivity. + intros; unfold h in |- *; + replace + (derive_pt (fun y:R => (g b - g a) * f y - (f b - f a) * g y) c (X c P)) + with + (derive_pt ((fct_cte (g b - g a) * f)%F - (fct_cte (f b - f a) * g)%F) c + (derivable_pt_minus _ _ _ + (derivable_pt_mult _ _ _ (derivable_pt_const (g b - g a) c) (pr1 c P)) + (derivable_pt_mult _ _ _ (derivable_pt_const (f b - f a) c) (pr2 c P)))); + [ idtac | apply pr_nu ]. + rewrite derive_pt_minus; do 2 rewrite derive_pt_mult; + do 2 rewrite derive_pt_const; do 2 rewrite Rmult_0_l; + do 2 rewrite Rplus_0_l; reflexivity. + unfold h in |- *; ring. + intros; unfold h in |- *; + change + (continuity_pt ((fct_cte (g b - g a) * f)%F - (fct_cte (f b - f a) * g)%F) + c) in |- *. + apply continuity_pt_minus; apply continuity_pt_mult. + apply derivable_continuous_pt; apply derivable_const. + apply H0; apply H3. + apply derivable_continuous_pt; apply derivable_const. + apply H1; apply H3. + intros; + change + (derivable_pt ((fct_cte (g b - g a) * f)%F - (fct_cte (f b - f a) * g)%F) + c) in |- *. + apply derivable_pt_minus; apply derivable_pt_mult. + apply derivable_pt_const. + apply (pr1 _ H3). + apply derivable_pt_const. + apply (pr2 _ H3). Qed. (* Corollaries ... *) Lemma MVT_cor1 : - forall (f:R -> R) (a b:R) (pr:derivable f), - a < b -> + forall (f:R -> R) (a b:R) (pr:derivable f), + a < b -> exists c : R, f b - f a = derive_pt f c (pr c) * (b - a) /\ a < c < b. -intros f a b pr H; cut (forall c:R, a < c < b -> derivable_pt f c); - [ intro X | intros; apply pr ]. -cut (forall c:R, a < c < b -> derivable_pt id c); - [ intro X0 | intros; apply derivable_pt_id ]. -cut (forall c:R, a <= c <= b -> continuity_pt f c); - [ intro | intros; apply derivable_continuous_pt; apply pr ]. -cut (forall c:R, a <= c <= b -> continuity_pt id c); - [ intro | intros; apply derivable_continuous_pt; apply derivable_id ]. -assert (H2 := MVT f id a b X X0 H H0 H1). -elim H2; intros c H3; elim H3; intros. -exists c; split. -cut (derive_pt id c (X0 c x) = derive_pt id c (derivable_pt_id c)); - [ intro | apply pr_nu ]. -rewrite H5 in H4; rewrite (derive_pt_id c) in H4; rewrite Rmult_1_r in H4; - rewrite <- H4; replace (derive_pt f c (X c x)) with (derive_pt f c (pr c)); - [ idtac | apply pr_nu ]; apply Rmult_comm. -apply x. +Proof. + intros f a b pr H; cut (forall c:R, a < c < b -> derivable_pt f c); + [ intro X | intros; apply pr ]. + cut (forall c:R, a < c < b -> derivable_pt id c); + [ intro X0 | intros; apply derivable_pt_id ]. + cut (forall c:R, a <= c <= b -> continuity_pt f c); + [ intro | intros; apply derivable_continuous_pt; apply pr ]. + cut (forall c:R, a <= c <= b -> continuity_pt id c); + [ intro | intros; apply derivable_continuous_pt; apply derivable_id ]. + assert (H2 := MVT f id a b X X0 H H0 H1). + elim H2; intros c H3; elim H3; intros. + exists c; split. + cut (derive_pt id c (X0 c x) = derive_pt id c (derivable_pt_id c)); + [ intro | apply pr_nu ]. + rewrite H5 in H4; rewrite (derive_pt_id c) in H4; rewrite Rmult_1_r in H4; + rewrite <- H4; replace (derive_pt f c (X c x)) with (derive_pt f c (pr c)); + [ idtac | apply pr_nu ]; apply Rmult_comm. + apply x. Qed. Theorem MVT_cor2 : - forall (f f':R -> R) (a b:R), - a < b -> - (forall c:R, a <= c <= b -> derivable_pt_lim f c (f' c)) -> + forall (f f':R -> R) (a b:R), + a < b -> + (forall c:R, a <= c <= b -> derivable_pt_lim f c (f' c)) -> exists c : R, f b - f a = f' c * (b - a) /\ a < c < b. -intros f f' a b H H0; cut (forall c:R, a <= c <= b -> derivable_pt f c). -intro X; cut (forall c:R, a < c < b -> derivable_pt f c). -intro X0; cut (forall c:R, a <= c <= b -> continuity_pt f c). -intro; cut (forall c:R, a <= c <= b -> derivable_pt id c). -intro X1; cut (forall c:R, a < c < b -> derivable_pt id c). -intro X2; cut (forall c:R, a <= c <= b -> continuity_pt id c). -intro; elim (MVT f id a b X0 X2 H H1 H2); intros; elim H3; clear H3; intros; - exists x; split. -cut (derive_pt id x (X2 x x0) = 1). -cut (derive_pt f x (X0 x x0) = f' x). -intros; rewrite H4 in H3; rewrite H5 in H3; unfold id in H3; - rewrite Rmult_1_r in H3; rewrite Rmult_comm; symmetry in |- *; - assumption. -apply derive_pt_eq_0; apply H0; elim x0; intros; split; left; assumption. -apply derive_pt_eq_0; apply derivable_pt_lim_id. -assumption. -intros; apply derivable_continuous_pt; apply X1; assumption. -intros; apply derivable_pt_id. -intros; apply derivable_pt_id. -intros; apply derivable_continuous_pt; apply X; assumption. -intros; elim H1; intros; apply X; split; left; assumption. -intros; unfold derivable_pt in |- *; apply existT with (f' c); apply H0; - apply H1. +Proof. + intros f f' a b H H0; cut (forall c:R, a <= c <= b -> derivable_pt f c). + intro X; cut (forall c:R, a < c < b -> derivable_pt f c). + intro X0; cut (forall c:R, a <= c <= b -> continuity_pt f c). + intro; cut (forall c:R, a <= c <= b -> derivable_pt id c). + intro X1; cut (forall c:R, a < c < b -> derivable_pt id c). + intro X2; cut (forall c:R, a <= c <= b -> continuity_pt id c). + intro; elim (MVT f id a b X0 X2 H H1 H2); intros; elim H3; clear H3; intros; + exists x; split. + cut (derive_pt id x (X2 x x0) = 1). + cut (derive_pt f x (X0 x x0) = f' x). + intros; rewrite H4 in H3; rewrite H5 in H3; unfold id in H3; + rewrite Rmult_1_r in H3; rewrite Rmult_comm; symmetry in |- *; + assumption. + apply derive_pt_eq_0; apply H0; elim x0; intros; split; left; assumption. + apply derive_pt_eq_0; apply derivable_pt_lim_id. + assumption. + intros; apply derivable_continuous_pt; apply X1; assumption. + intros; apply derivable_pt_id. + intros; apply derivable_pt_id. + intros; apply derivable_continuous_pt; apply X; assumption. + intros; elim H1; intros; apply X; split; left; assumption. + intros; unfold derivable_pt in |- *; apply existT with (f' c); apply H0; + apply H1. Qed. Lemma MVT_cor3 : - forall (f f':R -> R) (a b:R), - a < b -> - (forall x:R, a <= x -> x <= b -> derivable_pt_lim f x (f' x)) -> + forall (f f':R -> R) (a b:R), + a < b -> + (forall x:R, a <= x -> x <= b -> derivable_pt_lim f x (f' x)) -> exists c : R, a <= c /\ c <= b /\ f b = f a + f' c * (b - a). -intros f f' a b H H0; - assert (H1 : exists c : R, f b - f a = f' c * (b - a) /\ a < c < b); - [ apply MVT_cor2; [ apply H | intros; elim H1; intros; apply (H0 _ H2 H3) ] - | elim H1; intros; exists x; elim H2; intros; elim H4; intros; split; - [ left; assumption | split; [ left; assumption | rewrite <- H3; ring ] ] ]. +Proof. + intros f f' a b H H0; + assert (H1 : exists c : R, f b - f a = f' c * (b - a) /\ a < c < b); + [ apply MVT_cor2; [ apply H | intros; elim H1; intros; apply (H0 _ H2 H3) ] + | elim H1; intros; exists x; elim H2; intros; elim H4; intros; split; + [ left; assumption | split; [ left; assumption | rewrite <- H3; ring ] ] ]. Qed. Lemma Rolle : - forall (f:R -> R) (a b:R) (pr:forall x:R, a < x < b -> derivable_pt f x), - (forall x:R, a <= x <= b -> continuity_pt f x) -> - a < b -> - f a = f b -> + forall (f:R -> R) (a b:R) (pr:forall x:R, a < x < b -> derivable_pt f x), + (forall x:R, a <= x <= b -> continuity_pt f x) -> + a < b -> + f a = f b -> exists c : R, (exists P : a < c < b, derive_pt f c (pr c P) = 0). -intros; assert (H2 : forall x:R, a < x < b -> derivable_pt id x). -intros; apply derivable_pt_id. -assert (H3 := MVT f id a b pr H2 H0 H); - assert (H4 : forall x:R, a <= x <= b -> continuity_pt id x). -intros; apply derivable_continuous; apply derivable_id. -elim (H3 H4); intros; elim H5; intros; exists x; exists x0; rewrite H1 in H6; - unfold id in H6; unfold Rminus in H6; rewrite Rplus_opp_r in H6; - rewrite Rmult_0_l in H6; apply Rmult_eq_reg_l with (b - a); - [ rewrite Rmult_0_r; apply H6 - | apply Rminus_eq_contra; red in |- *; intro; rewrite H7 in H0; - elim (Rlt_irrefl _ H0) ]. +Proof. + intros; assert (H2 : forall x:R, a < x < b -> derivable_pt id x). + intros; apply derivable_pt_id. + assert (H3 := MVT f id a b pr H2 H0 H); + assert (H4 : forall x:R, a <= x <= b -> continuity_pt id x). + intros; apply derivable_continuous; apply derivable_id. + elim (H3 H4); intros; elim H5; intros; exists x; exists x0; rewrite H1 in H6; + unfold id in H6; unfold Rminus in H6; rewrite Rplus_opp_r in H6; + rewrite Rmult_0_l in H6; apply Rmult_eq_reg_l with (b - a); + [ rewrite Rmult_0_r; apply H6 + | apply Rminus_eq_contra; red in |- *; intro; rewrite H7 in H0; + elim (Rlt_irrefl _ H0) ]. Qed. (**********) Lemma nonneg_derivative_1 : - forall (f:R -> R) (pr:derivable f), - (forall x:R, 0 <= derive_pt f x (pr x)) -> increasing f. -intros. -unfold increasing in |- *. -intros. -case (total_order_T x y); intro. -elim s; intro. -apply Rplus_le_reg_l with (- f x). -rewrite Rplus_opp_l; rewrite Rplus_comm. -assert (H1 := MVT_cor1 f _ _ pr a). -elim H1; intros. -elim H2; intros. -unfold Rminus in H3. -rewrite H3. -apply Rmult_le_pos. -apply H. -apply Rplus_le_reg_l with x. -rewrite Rplus_0_r; replace (x + (y + - x)) with y; [ assumption | ring ]. -rewrite b; right; reflexivity. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 r)). + forall (f:R -> R) (pr:derivable f), + (forall x:R, 0 <= derive_pt f x (pr x)) -> increasing f. +Proof. + intros. + unfold increasing in |- *. + intros. + case (total_order_T x y); intro. + elim s; intro. + apply Rplus_le_reg_l with (- f x). + rewrite Rplus_opp_l; rewrite Rplus_comm. + assert (H1 := MVT_cor1 f _ _ pr a). + elim H1; intros. + elim H2; intros. + unfold Rminus in H3. + rewrite H3. + apply Rmult_le_pos. + apply H. + apply Rplus_le_reg_l with x. + rewrite Rplus_0_r; replace (x + (y + - x)) with y; [ assumption | ring ]. + rewrite b; right; reflexivity. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 r)). Qed. - + (**********) Lemma nonpos_derivative_0 : - forall (f:R -> R) (pr:derivable f), - decreasing f -> forall x:R, derive_pt f x (pr x) <= 0. -intros f pr H x; assert (H0 := H); unfold decreasing in H0; - generalize (derivable_derive f x (pr x)); intro; elim H1; - intros l H2. -rewrite H2; case (Rtotal_order l 0); intro. -left; assumption. -elim H3; intro. -right; assumption. -generalize (derive_pt_eq_1 f x l (pr x) H2); intros; cut (0 < l / 2). -intro; elim (H5 (l / 2) H6); intros delta H7; - cut (delta / 2 <> 0 /\ 0 < delta / 2 /\ Rabs (delta / 2) < delta). -intro; decompose [and] H8; intros; generalize (H7 (delta / 2) H9 H12); - cut ((f (x + delta / 2) - f x) / (delta / 2) <= 0). -intro; cut (0 < - ((f (x + delta / 2) - f x) / (delta / 2) - l)). -intro; unfold Rabs in |- *; - case (Rcase_abs ((f (x + delta / 2) - f x) / (delta / 2) - l)). -intros; - generalize - (Rplus_lt_compat_r (- l) (- ((f (x + delta / 2) - f x) / (delta / 2) - l)) - (l / 2) H14); unfold Rminus in |- *. -replace (l / 2 + - l) with (- (l / 2)). -replace (- ((f (x + delta / 2) + - f x) / (delta / 2) + - l) + - l) with - (- ((f (x + delta / 2) + - f x) / (delta / 2))). -intro. -generalize - (Ropp_lt_gt_contravar (- ((f (x + delta / 2) + - f x) / (delta / 2))) - (- (l / 2)) H15). -repeat rewrite Ropp_involutive. -intro. -generalize - (Rlt_trans 0 (l / 2) ((f (x + delta / 2) - f x) / (delta / 2)) H6 H16); - intro. -elim - (Rlt_irrefl 0 - (Rlt_le_trans 0 ((f (x + delta / 2) - f x) / (delta / 2)) 0 H17 H10)). -ring. -pattern l at 3 in |- *; rewrite double_var. -ring. -intros. -generalize - (Ropp_ge_le_contravar ((f (x + delta / 2) - f x) / (delta / 2) - l) 0 r). -rewrite Ropp_0. -intro. -elim - (Rlt_irrefl 0 - (Rlt_le_trans 0 (- ((f (x + delta / 2) - f x) / (delta / 2) - l)) 0 H13 - H15)). -replace (- ((f (x + delta / 2) - f x) / (delta / 2) - l)) with - ((f x - f (x + delta / 2)) / (delta / 2) + l). -unfold Rminus in |- *. -apply Rplus_le_lt_0_compat. -unfold Rdiv in |- *; apply Rmult_le_pos. -cut (x <= x + delta * / 2). -intro; generalize (H0 x (x + delta * / 2) H13); intro; - generalize - (Rplus_le_compat_l (- f (x + delta / 2)) (f (x + delta / 2)) (f x) H14); - rewrite Rplus_opp_l; rewrite Rplus_comm; intro; assumption. -pattern x at 1 in |- *; rewrite <- (Rplus_0_r x); apply Rplus_le_compat_l; - left; assumption. -left; apply Rinv_0_lt_compat; assumption. -assumption. -rewrite Ropp_minus_distr. -unfold Rminus in |- *. -rewrite (Rplus_comm l). -unfold Rdiv in |- *. -rewrite <- Ropp_mult_distr_l_reverse. -rewrite Ropp_plus_distr. -rewrite Ropp_involutive. -rewrite (Rplus_comm (f x)). -reflexivity. -replace ((f (x + delta / 2) - f x) / (delta / 2)) with - (- ((f x - f (x + delta / 2)) / (delta / 2))). -rewrite <- Ropp_0. -apply Ropp_ge_le_contravar. -apply Rle_ge. -unfold Rdiv in |- *; apply Rmult_le_pos. -cut (x <= x + delta * / 2). -intro; generalize (H0 x (x + delta * / 2) H10); intro. -generalize - (Rplus_le_compat_l (- f (x + delta / 2)) (f (x + delta / 2)) (f x) H13); - rewrite Rplus_opp_l; rewrite Rplus_comm; intro; assumption. -pattern x at 1 in |- *; rewrite <- (Rplus_0_r x); apply Rplus_le_compat_l; - left; assumption. -left; apply Rinv_0_lt_compat; assumption. -unfold Rdiv in |- *; rewrite <- Ropp_mult_distr_l_reverse. -rewrite Ropp_minus_distr. -reflexivity. -split. -unfold Rdiv in |- *; apply prod_neq_R0. -generalize (cond_pos delta); intro; red in |- *; intro H9; rewrite H9 in H8; - elim (Rlt_irrefl 0 H8). -apply Rinv_neq_0_compat; discrR. -split. -unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ apply (cond_pos delta) | apply Rinv_0_lt_compat; prove_sup0 ]. -rewrite Rabs_right. -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; rewrite double; pattern (pos delta) at 1 in |- *; - rewrite <- Rplus_0_r. -apply Rplus_lt_compat_l; apply (cond_pos delta). -discrR. -apply Rle_ge; unfold Rdiv in |- *; left; apply Rmult_lt_0_compat. -apply (cond_pos delta). -apply Rinv_0_lt_compat; prove_sup0. -unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ apply H4 | apply Rinv_0_lt_compat; prove_sup0 ]. + forall (f:R -> R) (pr:derivable f), + decreasing f -> forall x:R, derive_pt f x (pr x) <= 0. +Proof. + intros f pr H x; assert (H0 := H); unfold decreasing in H0; + generalize (derivable_derive f x (pr x)); intro; elim H1; + intros l H2. + rewrite H2; case (Rtotal_order l 0); intro. + left; assumption. + elim H3; intro. + right; assumption. + generalize (derive_pt_eq_1 f x l (pr x) H2); intros; cut (0 < l / 2). + intro; elim (H5 (l / 2) H6); intros delta H7; + cut (delta / 2 <> 0 /\ 0 < delta / 2 /\ Rabs (delta / 2) < delta). + intro; decompose [and] H8; intros; generalize (H7 (delta / 2) H9 H12); + cut ((f (x + delta / 2) - f x) / (delta / 2) <= 0). + intro; cut (0 < - ((f (x + delta / 2) - f x) / (delta / 2) - l)). + intro; unfold Rabs in |- *; + case (Rcase_abs ((f (x + delta / 2) - f x) / (delta / 2) - l)). + intros; + generalize + (Rplus_lt_compat_r (- l) (- ((f (x + delta / 2) - f x) / (delta / 2) - l)) + (l / 2) H14); unfold Rminus in |- *. + replace (l / 2 + - l) with (- (l / 2)). + replace (- ((f (x + delta / 2) + - f x) / (delta / 2) + - l) + - l) with + (- ((f (x + delta / 2) + - f x) / (delta / 2))). + intro. + generalize + (Ropp_lt_gt_contravar (- ((f (x + delta / 2) + - f x) / (delta / 2))) + (- (l / 2)) H15). + repeat rewrite Ropp_involutive. + intro. + generalize + (Rlt_trans 0 (l / 2) ((f (x + delta / 2) - f x) / (delta / 2)) H6 H16); + intro. + elim + (Rlt_irrefl 0 + (Rlt_le_trans 0 ((f (x + delta / 2) - f x) / (delta / 2)) 0 H17 H10)). + ring. + pattern l at 3 in |- *; rewrite double_var. + ring. + intros. + generalize + (Ropp_ge_le_contravar ((f (x + delta / 2) - f x) / (delta / 2) - l) 0 r). + rewrite Ropp_0. + intro. + elim + (Rlt_irrefl 0 + (Rlt_le_trans 0 (- ((f (x + delta / 2) - f x) / (delta / 2) - l)) 0 H13 + H15)). + replace (- ((f (x + delta / 2) - f x) / (delta / 2) - l)) with + ((f x - f (x + delta / 2)) / (delta / 2) + l). + unfold Rminus in |- *. + apply Rplus_le_lt_0_compat. + unfold Rdiv in |- *; apply Rmult_le_pos. + cut (x <= x + delta * / 2). + intro; generalize (H0 x (x + delta * / 2) H13); intro; + generalize + (Rplus_le_compat_l (- f (x + delta / 2)) (f (x + delta / 2)) (f x) H14); + rewrite Rplus_opp_l; rewrite Rplus_comm; intro; assumption. + pattern x at 1 in |- *; rewrite <- (Rplus_0_r x); apply Rplus_le_compat_l; + left; assumption. + left; apply Rinv_0_lt_compat; assumption. + assumption. + rewrite Ropp_minus_distr. + unfold Rminus in |- *. + rewrite (Rplus_comm l). + unfold Rdiv in |- *. + rewrite <- Ropp_mult_distr_l_reverse. + rewrite Ropp_plus_distr. + rewrite Ropp_involutive. + rewrite (Rplus_comm (f x)). + reflexivity. + replace ((f (x + delta / 2) - f x) / (delta / 2)) with + (- ((f x - f (x + delta / 2)) / (delta / 2))). + rewrite <- Ropp_0. + apply Ropp_ge_le_contravar. + apply Rle_ge. + unfold Rdiv in |- *; apply Rmult_le_pos. + cut (x <= x + delta * / 2). + intro; generalize (H0 x (x + delta * / 2) H10); intro. + generalize + (Rplus_le_compat_l (- f (x + delta / 2)) (f (x + delta / 2)) (f x) H13); + rewrite Rplus_opp_l; rewrite Rplus_comm; intro; assumption. + pattern x at 1 in |- *; rewrite <- (Rplus_0_r x); apply Rplus_le_compat_l; + left; assumption. + left; apply Rinv_0_lt_compat; assumption. + unfold Rdiv in |- *; rewrite <- Ropp_mult_distr_l_reverse. + rewrite Ropp_minus_distr. + reflexivity. + split. + unfold Rdiv in |- *; apply prod_neq_R0. + generalize (cond_pos delta); intro; red in |- *; intro H9; rewrite H9 in H8; + elim (Rlt_irrefl 0 H8). + apply Rinv_neq_0_compat; discrR. + split. + unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ apply (cond_pos delta) | apply Rinv_0_lt_compat; prove_sup0 ]. + rewrite Rabs_right. + 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; rewrite double; pattern (pos delta) at 1 in |- *; + rewrite <- Rplus_0_r. + apply Rplus_lt_compat_l; apply (cond_pos delta). + discrR. + apply Rle_ge; unfold Rdiv in |- *; left; apply Rmult_lt_0_compat. + apply (cond_pos delta). + apply Rinv_0_lt_compat; prove_sup0. + unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ apply H4 | apply Rinv_0_lt_compat; prove_sup0 ]. Qed. (**********) Lemma increasing_decreasing_opp : - forall f:R -> R, increasing f -> decreasing (- f)%F. -unfold increasing, decreasing, opp_fct in |- *; intros; generalize (H x y H0); - intro; apply Ropp_ge_le_contravar; apply Rle_ge; assumption. + forall f:R -> R, increasing f -> decreasing (- f)%F. +Proof. + unfold increasing, decreasing, opp_fct in |- *; intros; generalize (H x y H0); + intro; apply Ropp_ge_le_contravar; apply Rle_ge; assumption. Qed. (**********) Lemma nonpos_derivative_1 : - forall (f:R -> R) (pr:derivable f), - (forall x:R, derive_pt f x (pr x) <= 0) -> decreasing f. -intros. -cut (forall h:R, - - f h = f h). -intro. -generalize (increasing_decreasing_opp (- f)%F). -unfold decreasing in |- *. -unfold opp_fct in |- *. -intros. -rewrite <- (H0 x); rewrite <- (H0 y). -apply H1. -cut (forall x:R, 0 <= derive_pt (- f) x (derivable_opp f pr x)). -intros. -replace (fun x:R => - f x) with (- f)%F; [ idtac | reflexivity ]. -apply (nonneg_derivative_1 (- f)%F (derivable_opp f pr) H3). -intro. -assert (H3 := derive_pt_opp f x0 (pr x0)). -cut - (derive_pt (- f) x0 (derivable_pt_opp f x0 (pr x0)) = - derive_pt (- f) x0 (derivable_opp f pr x0)). -intro. -rewrite <- H4. -rewrite H3. -rewrite <- Ropp_0; apply Ropp_ge_le_contravar; apply Rle_ge; apply (H x0). -apply pr_nu. -assumption. -intro; ring. + forall (f:R -> R) (pr:derivable f), + (forall x:R, derive_pt f x (pr x) <= 0) -> decreasing f. +Proof. + intros. + cut (forall h:R, - - f h = f h). + intro. + generalize (increasing_decreasing_opp (- f)%F). + unfold decreasing in |- *. + unfold opp_fct in |- *. + intros. + rewrite <- (H0 x); rewrite <- (H0 y). + apply H1. + cut (forall x:R, 0 <= derive_pt (- f) x (derivable_opp f pr x)). + intros. + replace (fun x:R => - f x) with (- f)%F; [ idtac | reflexivity ]. + apply (nonneg_derivative_1 (- f)%F (derivable_opp f pr) H3). + intro. + assert (H3 := derive_pt_opp f x0 (pr x0)). + cut + (derive_pt (- f) x0 (derivable_pt_opp f x0 (pr x0)) = + derive_pt (- f) x0 (derivable_opp f pr x0)). + intro. + rewrite <- H4. + rewrite H3. + rewrite <- Ropp_0; apply Ropp_ge_le_contravar; apply Rle_ge; apply (H x0). + apply pr_nu. + assumption. + intro; ring. Qed. - + (**********) Lemma positive_derivative : - forall (f:R -> R) (pr:derivable f), - (forall x:R, 0 < derive_pt f x (pr x)) -> strict_increasing f. -intros. -unfold strict_increasing in |- *. -intros. -apply Rplus_lt_reg_r with (- f x). -rewrite Rplus_opp_l; rewrite Rplus_comm. -assert (H1 := MVT_cor1 f _ _ pr H0). -elim H1; intros. -elim H2; intros. -unfold Rminus in H3. -rewrite H3. -apply Rmult_lt_0_compat. -apply H. -apply Rplus_lt_reg_r with x. -rewrite Rplus_0_r; replace (x + (y + - x)) with y; [ assumption | ring ]. + forall (f:R -> R) (pr:derivable f), + (forall x:R, 0 < derive_pt f x (pr x)) -> strict_increasing f. +Proof. + intros. + unfold strict_increasing in |- *. + intros. + apply Rplus_lt_reg_r with (- f x). + rewrite Rplus_opp_l; rewrite Rplus_comm. + assert (H1 := MVT_cor1 f _ _ pr H0). + elim H1; intros. + elim H2; intros. + unfold Rminus in H3. + rewrite H3. + apply Rmult_lt_0_compat. + apply H. + apply Rplus_lt_reg_r with x. + rewrite Rplus_0_r; replace (x + (y + - x)) with y; [ assumption | ring ]. Qed. (**********) Lemma strictincreasing_strictdecreasing_opp : - forall f:R -> R, strict_increasing f -> strict_decreasing (- f)%F. -unfold strict_increasing, strict_decreasing, opp_fct in |- *; intros; - generalize (H x y H0); intro; apply Ropp_lt_gt_contravar; - assumption. + forall f:R -> R, strict_increasing f -> strict_decreasing (- f)%F. +Proof. + unfold strict_increasing, strict_decreasing, opp_fct in |- *; intros; + generalize (H x y H0); intro; apply Ropp_lt_gt_contravar; + assumption. Qed. - + (**********) Lemma negative_derivative : - forall (f:R -> R) (pr:derivable f), - (forall x:R, derive_pt f x (pr x) < 0) -> strict_decreasing f. -intros. -cut (forall h:R, - - f h = f h). -intros. -generalize (strictincreasing_strictdecreasing_opp (- f)%F). -unfold strict_decreasing, opp_fct in |- *. -intros. -rewrite <- (H0 x). -rewrite <- (H0 y). -apply H1; [ idtac | assumption ]. -cut (forall x:R, 0 < derive_pt (- f) x (derivable_opp f pr x)). -intros; eapply positive_derivative; apply H3. -intro. -assert (H3 := derive_pt_opp f x0 (pr x0)). -cut - (derive_pt (- f) x0 (derivable_pt_opp f x0 (pr x0)) = - derive_pt (- f) x0 (derivable_opp f pr x0)). -intro. -rewrite <- H4; rewrite H3. -rewrite <- Ropp_0; apply Ropp_lt_gt_contravar; apply (H x0). -apply pr_nu. -intro; ring. + forall (f:R -> R) (pr:derivable f), + (forall x:R, derive_pt f x (pr x) < 0) -> strict_decreasing f. +Proof. + intros. + cut (forall h:R, - - f h = f h). + intros. + generalize (strictincreasing_strictdecreasing_opp (- f)%F). + unfold strict_decreasing, opp_fct in |- *. + intros. + rewrite <- (H0 x). + rewrite <- (H0 y). + apply H1; [ idtac | assumption ]. + cut (forall x:R, 0 < derive_pt (- f) x (derivable_opp f pr x)). + intros; eapply positive_derivative; apply H3. + intro. + assert (H3 := derive_pt_opp f x0 (pr x0)). + cut + (derive_pt (- f) x0 (derivable_pt_opp f x0 (pr x0)) = + derive_pt (- f) x0 (derivable_opp f pr x0)). + intro. + rewrite <- H4; rewrite H3. + rewrite <- Ropp_0; apply Ropp_lt_gt_contravar; apply (H x0). + apply pr_nu. + intro; ring. Qed. - + (**********) Lemma null_derivative_0 : - forall (f:R -> R) (pr:derivable f), - constant f -> forall x:R, derive_pt f x (pr x) = 0. -intros. -unfold constant in H. -apply derive_pt_eq_0. -intros; exists (mkposreal 1 Rlt_0_1); simpl in |- *; intros. -rewrite (H x (x + h)); unfold Rminus in |- *; unfold Rdiv in |- *; - rewrite Rplus_opp_r; rewrite Rmult_0_l; rewrite Rplus_opp_r; - rewrite Rabs_R0; assumption. + forall (f:R -> R) (pr:derivable f), + constant f -> forall x:R, derive_pt f x (pr x) = 0. +Proof. + intros. + unfold constant in H. + apply derive_pt_eq_0. + intros; exists (mkposreal 1 Rlt_0_1); simpl in |- *; intros. + rewrite (H x (x + h)); unfold Rminus in |- *; unfold Rdiv in |- *; + rewrite Rplus_opp_r; rewrite Rmult_0_l; rewrite Rplus_opp_r; + rewrite Rabs_R0; assumption. Qed. (**********) Lemma increasing_decreasing : - forall f:R -> R, increasing f -> decreasing f -> constant f. -unfold increasing, decreasing, constant in |- *; intros; - case (Rtotal_order x y); intro. -generalize (Rlt_le x y H1); intro; - apply (Rle_antisym (f x) (f y) (H x y H2) (H0 x y H2)). -elim H1; intro. -rewrite H2; reflexivity. -generalize (Rlt_le y x H2); intro; symmetry in |- *; - apply (Rle_antisym (f y) (f x) (H y x H3) (H0 y x H3)). + forall f:R -> R, increasing f -> decreasing f -> constant f. +Proof. + unfold increasing, decreasing, constant in |- *; intros; + case (Rtotal_order x y); intro. + generalize (Rlt_le x y H1); intro; + apply (Rle_antisym (f x) (f y) (H x y H2) (H0 x y H2)). + elim H1; intro. + rewrite H2; reflexivity. + generalize (Rlt_le y x H2); intro; symmetry in |- *; + apply (Rle_antisym (f y) (f x) (H y x H3) (H0 y x H3)). Qed. (**********) Lemma null_derivative_1 : - forall (f:R -> R) (pr:derivable f), - (forall x:R, derive_pt f x (pr x) = 0) -> constant f. -intros. -cut (forall x:R, derive_pt f x (pr x) <= 0). -cut (forall x:R, 0 <= derive_pt f x (pr x)). -intros. -assert (H2 := nonneg_derivative_1 f pr H0). -assert (H3 := nonpos_derivative_1 f pr H1). -apply increasing_decreasing; assumption. -intro; right; symmetry in |- *; apply (H x). -intro; right; apply (H x). + forall (f:R -> R) (pr:derivable f), + (forall x:R, derive_pt f x (pr x) = 0) -> constant f. +Proof. + intros. + cut (forall x:R, derive_pt f x (pr x) <= 0). + cut (forall x:R, 0 <= derive_pt f x (pr x)). + intros. + assert (H2 := nonneg_derivative_1 f pr H0). + assert (H3 := nonpos_derivative_1 f pr H1). + apply increasing_decreasing; assumption. + intro; right; symmetry in |- *; apply (H x). + intro; right; apply (H x). Qed. (**********) Lemma derive_increasing_interv_ax : - forall (a b:R) (f:R -> R) (pr:derivable f), - a < b -> - ((forall t:R, a < t < b -> 0 < derive_pt f t (pr t)) -> - forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x < f y) /\ - ((forall t:R, a < t < b -> 0 <= derive_pt f t (pr t)) -> - forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x <= f y). -intros. -split; intros. -apply Rplus_lt_reg_r with (- f x). -rewrite Rplus_opp_l; rewrite Rplus_comm. -assert (H4 := MVT_cor1 f _ _ pr H3). -elim H4; intros. -elim H5; intros. -unfold Rminus in H6. -rewrite H6. -apply Rmult_lt_0_compat. -apply H0. -elim H7; intros. -split. -elim H1; intros. -apply Rle_lt_trans with x; assumption. -elim H2; intros. -apply Rlt_le_trans with y; assumption. -apply Rplus_lt_reg_r with x. -rewrite Rplus_0_r; replace (x + (y + - x)) with y; [ assumption | ring ]. -apply Rplus_le_reg_l with (- f x). -rewrite Rplus_opp_l; rewrite Rplus_comm. -assert (H4 := MVT_cor1 f _ _ pr H3). -elim H4; intros. -elim H5; intros. -unfold Rminus in H6. -rewrite H6. -apply Rmult_le_pos. -apply H0. -elim H7; intros. -split. -elim H1; intros. -apply Rle_lt_trans with x; assumption. -elim H2; intros. -apply Rlt_le_trans with y; assumption. -apply Rplus_le_reg_l with x. -rewrite Rplus_0_r; replace (x + (y + - x)) with y; - [ left; assumption | ring ]. + forall (a b:R) (f:R -> R) (pr:derivable f), + a < b -> + ((forall t:R, a < t < b -> 0 < derive_pt f t (pr t)) -> + forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x < f y) /\ + ((forall t:R, a < t < b -> 0 <= derive_pt f t (pr t)) -> + forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x <= f y). +Proof. + intros. + split; intros. + apply Rplus_lt_reg_r with (- f x). + rewrite Rplus_opp_l; rewrite Rplus_comm. + assert (H4 := MVT_cor1 f _ _ pr H3). + elim H4; intros. + elim H5; intros. + unfold Rminus in H6. + rewrite H6. + apply Rmult_lt_0_compat. + apply H0. + elim H7; intros. + split. + elim H1; intros. + apply Rle_lt_trans with x; assumption. + elim H2; intros. + apply Rlt_le_trans with y; assumption. + apply Rplus_lt_reg_r with x. + rewrite Rplus_0_r; replace (x + (y + - x)) with y; [ assumption | ring ]. + apply Rplus_le_reg_l with (- f x). + rewrite Rplus_opp_l; rewrite Rplus_comm. + assert (H4 := MVT_cor1 f _ _ pr H3). + elim H4; intros. + elim H5; intros. + unfold Rminus in H6. + rewrite H6. + apply Rmult_le_pos. + apply H0. + elim H7; intros. + split. + elim H1; intros. + apply Rle_lt_trans with x; assumption. + elim H2; intros. + apply Rlt_le_trans with y; assumption. + apply Rplus_le_reg_l with x. + rewrite Rplus_0_r; replace (x + (y + - x)) with y; + [ left; assumption | ring ]. Qed. (**********) Lemma derive_increasing_interv : - forall (a b:R) (f:R -> R) (pr:derivable f), - a < b -> - (forall t:R, a < t < b -> 0 < derive_pt f t (pr t)) -> - forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x < f y. -intros. -generalize (derive_increasing_interv_ax a b f pr H); intro. -elim H4; intros H5 _; apply (H5 H0 x y H1 H2 H3). + forall (a b:R) (f:R -> R) (pr:derivable f), + a < b -> + (forall t:R, a < t < b -> 0 < derive_pt f t (pr t)) -> + forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x < f y. +Proof. + intros. + generalize (derive_increasing_interv_ax a b f pr H); intro. + elim H4; intros H5 _; apply (H5 H0 x y H1 H2 H3). Qed. (**********) Lemma derive_increasing_interv_var : - forall (a b:R) (f:R -> R) (pr:derivable f), - a < b -> - (forall t:R, a < t < b -> 0 <= derive_pt f t (pr t)) -> - forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x <= f y. -intros a b f pr H H0 x y H1 H2 H3; - generalize (derive_increasing_interv_ax a b f pr H); - intro; elim H4; intros _ H5; apply (H5 H0 x y H1 H2 H3). + forall (a b:R) (f:R -> R) (pr:derivable f), + a < b -> + (forall t:R, a < t < b -> 0 <= derive_pt f t (pr t)) -> + forall x y:R, a <= x <= b -> a <= y <= b -> x < y -> f x <= f y. +Proof. + intros a b f pr H H0 x y H1 H2 H3; + generalize (derive_increasing_interv_ax a b f pr H); + intro; elim H4; intros _ H5; apply (H5 H0 x y H1 H2 H3). Qed. (**********) (**********) Theorem IAF : - forall (f:R -> R) (a b k:R) (pr:derivable f), - a <= b -> - (forall c:R, a <= c <= b -> derive_pt f c (pr c) <= k) -> - f b - f a <= k * (b - a). -intros. -case (total_order_T a b); intro. -elim s; intro. -assert (H1 := MVT_cor1 f _ _ pr a0). -elim H1; intros. -elim H2; intros. -rewrite H3. -do 2 rewrite <- (Rmult_comm (b - a)). -apply Rmult_le_compat_l. -apply Rplus_le_reg_l with a; rewrite Rplus_0_r. -replace (a + (b - a)) with b; [ assumption | ring ]. -apply H0. -elim H4; intros. -split; left; assumption. -rewrite b0. -unfold Rminus in |- *; do 2 rewrite Rplus_opp_r. -rewrite Rmult_0_r; right; reflexivity. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). + forall (f:R -> R) (a b k:R) (pr:derivable f), + a <= b -> + (forall c:R, a <= c <= b -> derive_pt f c (pr c) <= k) -> + f b - f a <= k * (b - a). +Proof. + intros. + case (total_order_T a b); intro. + elim s; intro. + assert (H1 := MVT_cor1 f _ _ pr a0). + elim H1; intros. + elim H2; intros. + rewrite H3. + do 2 rewrite <- (Rmult_comm (b - a)). + apply Rmult_le_compat_l. + apply Rplus_le_reg_l with a; rewrite Rplus_0_r. + replace (a + (b - a)) with b; [ assumption | ring ]. + apply H0. + elim H4; intros. + split; left; assumption. + rewrite b0. + unfold Rminus in |- *; do 2 rewrite Rplus_opp_r. + rewrite Rmult_0_r; right; reflexivity. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). Qed. Lemma IAF_var : - forall (f g:R -> R) (a b:R) (pr1:derivable f) (pr2:derivable g), - a <= b -> - (forall c:R, a <= c <= b -> derive_pt g c (pr2 c) <= derive_pt f c (pr1 c)) -> - g b - g a <= f b - f a. -intros. -cut (derivable (g - f)). -intro X. -cut (forall c:R, a <= c <= b -> derive_pt (g - f) c (X c) <= 0). -intro. -assert (H2 := IAF (g - f)%F a b 0 X H H1). -rewrite Rmult_0_l in H2; unfold minus_fct in H2. -apply Rplus_le_reg_l with (- f b + f a). -replace (- f b + f a + (f b - f a)) with 0; [ idtac | ring ]. -replace (- f b + f a + (g b - g a)) with (g b - f b - (g a - f a)); - [ apply H2 | ring ]. -intros. -cut - (derive_pt (g - f) c (X c) = - derive_pt (g - f) c (derivable_pt_minus _ _ _ (pr2 c) (pr1 c))). -intro. -rewrite H2. -rewrite derive_pt_minus. -apply Rplus_le_reg_l with (derive_pt f c (pr1 c)). -rewrite Rplus_0_r. -replace - (derive_pt f c (pr1 c) + (derive_pt g c (pr2 c) - derive_pt f c (pr1 c))) - with (derive_pt g c (pr2 c)); [ idtac | ring ]. -apply H0; assumption. -apply pr_nu. -apply derivable_minus; assumption. + forall (f g:R -> R) (a b:R) (pr1:derivable f) (pr2:derivable g), + a <= b -> + (forall c:R, a <= c <= b -> derive_pt g c (pr2 c) <= derive_pt f c (pr1 c)) -> + g b - g a <= f b - f a. +Proof. + intros. + cut (derivable (g - f)). + intro X. + cut (forall c:R, a <= c <= b -> derive_pt (g - f) c (X c) <= 0). + intro. + assert (H2 := IAF (g - f)%F a b 0 X H H1). + rewrite Rmult_0_l in H2; unfold minus_fct in H2. + apply Rplus_le_reg_l with (- f b + f a). + replace (- f b + f a + (f b - f a)) with 0; [ idtac | ring ]. + replace (- f b + f a + (g b - g a)) with (g b - f b - (g a - f a)); + [ apply H2 | ring ]. + intros. + cut + (derive_pt (g - f) c (X c) = + derive_pt (g - f) c (derivable_pt_minus _ _ _ (pr2 c) (pr1 c))). + intro. + rewrite H2. + rewrite derive_pt_minus. + apply Rplus_le_reg_l with (derive_pt f c (pr1 c)). + rewrite Rplus_0_r. + replace + (derive_pt f c (pr1 c) + (derive_pt g c (pr2 c) - derive_pt f c (pr1 c))) + with (derive_pt g c (pr2 c)); [ idtac | ring ]. + apply H0; assumption. + apply pr_nu. + apply derivable_minus; assumption. Qed. (* If f has a null derivative in ]a,b[ and is continue in [a,b], *) (* then f is constant on [a,b] *) Lemma null_derivative_loc : - forall (f:R -> R) (a b:R) (pr:forall x:R, a < x < b -> derivable_pt f x), - (forall x:R, a <= x <= b -> continuity_pt f x) -> - (forall (x:R) (P:a < x < b), derive_pt f x (pr x P) = 0) -> - constant_D_eq f (fun x:R => a <= x <= b) (f a). -intros; unfold constant_D_eq in |- *; intros; case (total_order_T a b); intro. -elim s; intro. -assert (H2 : forall y:R, a < y < x -> derivable_pt id y). -intros; apply derivable_pt_id. -assert (H3 : forall y:R, a <= y <= x -> continuity_pt id y). -intros; apply derivable_continuous; apply derivable_id. -assert (H4 : forall y:R, a < y < x -> derivable_pt f y). -intros; apply pr; elim H4; intros; split. -assumption. -elim H1; intros; apply Rlt_le_trans with x; assumption. -assert (H5 : forall y:R, a <= y <= x -> continuity_pt f y). -intros; apply H; elim H5; intros; split. -assumption. -elim H1; intros; apply Rle_trans with x; assumption. -elim H1; clear H1; intros; elim H1; clear H1; intro. -assert (H7 := MVT f id a x H4 H2 H1 H5 H3). -elim H7; intros; elim H8; intros; assert (H10 : a < x0 < b). -elim x1; intros; split. -assumption. -apply Rlt_le_trans with x; assumption. -assert (H11 : derive_pt f x0 (H4 x0 x1) = 0). -replace (derive_pt f x0 (H4 x0 x1)) with (derive_pt f x0 (pr x0 H10)); - [ apply H0 | apply pr_nu ]. -assert (H12 : derive_pt id x0 (H2 x0 x1) = 1). -apply derive_pt_eq_0; apply derivable_pt_lim_id. -rewrite H11 in H9; rewrite H12 in H9; rewrite Rmult_0_r in H9; - rewrite Rmult_1_r in H9; apply Rminus_diag_uniq; symmetry in |- *; - assumption. -rewrite H1; reflexivity. -assert (H2 : x = a). -rewrite <- b0 in H1; elim H1; intros; apply Rle_antisym; assumption. -rewrite H2; reflexivity. -elim H1; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ (Rle_trans _ _ _ H2 H3) r)). + forall (f:R -> R) (a b:R) (pr:forall x:R, a < x < b -> derivable_pt f x), + (forall x:R, a <= x <= b -> continuity_pt f x) -> + (forall (x:R) (P:a < x < b), derive_pt f x (pr x P) = 0) -> + constant_D_eq f (fun x:R => a <= x <= b) (f a). +Proof. + intros; unfold constant_D_eq in |- *; intros; case (total_order_T a b); intro. + elim s; intro. + assert (H2 : forall y:R, a < y < x -> derivable_pt id y). + intros; apply derivable_pt_id. + assert (H3 : forall y:R, a <= y <= x -> continuity_pt id y). + intros; apply derivable_continuous; apply derivable_id. + assert (H4 : forall y:R, a < y < x -> derivable_pt f y). + intros; apply pr; elim H4; intros; split. + assumption. + elim H1; intros; apply Rlt_le_trans with x; assumption. + assert (H5 : forall y:R, a <= y <= x -> continuity_pt f y). + intros; apply H; elim H5; intros; split. + assumption. + elim H1; intros; apply Rle_trans with x; assumption. + elim H1; clear H1; intros; elim H1; clear H1; intro. + assert (H7 := MVT f id a x H4 H2 H1 H5 H3). + elim H7; intros; elim H8; intros; assert (H10 : a < x0 < b). + elim x1; intros; split. + assumption. + apply Rlt_le_trans with x; assumption. + assert (H11 : derive_pt f x0 (H4 x0 x1) = 0). + replace (derive_pt f x0 (H4 x0 x1)) with (derive_pt f x0 (pr x0 H10)); + [ apply H0 | apply pr_nu ]. + assert (H12 : derive_pt id x0 (H2 x0 x1) = 1). + apply derive_pt_eq_0; apply derivable_pt_lim_id. + rewrite H11 in H9; rewrite H12 in H9; rewrite Rmult_0_r in H9; + rewrite Rmult_1_r in H9; apply Rminus_diag_uniq; symmetry in |- *; + assumption. + rewrite H1; reflexivity. + assert (H2 : x = a). + rewrite <- b0 in H1; elim H1; intros; apply Rle_antisym; assumption. + rewrite H2; reflexivity. + elim H1; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ (Rle_trans _ _ _ H2 H3) r)). Qed. (* Unicity of the antiderivative *) Lemma antiderivative_Ucte : - forall (f g1 g2:R -> R) (a b:R), - antiderivative f g1 a b -> - antiderivative f g2 a b -> + forall (f g1 g2:R -> R) (a b:R), + antiderivative f g1 a b -> + antiderivative f g2 a b -> exists c : R, (forall x:R, a <= x <= b -> g1 x = g2 x + c). -unfold antiderivative in |- *; intros; elim H; clear H; intros; elim H0; - clear H0; intros H0 _; exists (g1 a - g2 a); intros; - assert (H3 : forall x:R, a <= x <= b -> derivable_pt g1 x). -intros; unfold derivable_pt in |- *; apply existT with (f x0); elim (H x0 H3); - intros; eapply derive_pt_eq_1; symmetry in |- *; - apply H4. -assert (H4 : forall x:R, a <= x <= b -> derivable_pt g2 x). -intros; unfold derivable_pt in |- *; apply existT with (f x0); - elim (H0 x0 H4); intros; eapply derive_pt_eq_1; symmetry in |- *; - apply H5. -assert (H5 : forall x:R, a < x < b -> derivable_pt (g1 - g2) x). -intros; elim H5; intros; apply derivable_pt_minus; - [ apply H3; split; left; assumption | apply H4; split; left; assumption ]. -assert (H6 : forall x:R, a <= x <= b -> continuity_pt (g1 - g2) x). -intros; apply derivable_continuous_pt; apply derivable_pt_minus; - [ apply H3 | apply H4 ]; assumption. -assert (H7 : forall (x:R) (P:a < x < b), derive_pt (g1 - g2) x (H5 x P) = 0). -intros; elim P; intros; apply derive_pt_eq_0; replace 0 with (f x0 - f x0); - [ idtac | ring ]. -assert (H9 : a <= x0 <= b). -split; left; assumption. -apply derivable_pt_lim_minus; [ elim (H _ H9) | elim (H0 _ H9) ]; intros; - eapply derive_pt_eq_1; symmetry in |- *; apply H10. -assert (H8 := null_derivative_loc (g1 - g2)%F a b H5 H6 H7); - unfold constant_D_eq in H8; assert (H9 := H8 _ H2); - unfold minus_fct in H9; rewrite <- H9; ring. +Proof. + unfold antiderivative in |- *; intros; elim H; clear H; intros; elim H0; + clear H0; intros H0 _; exists (g1 a - g2 a); intros; + assert (H3 : forall x:R, a <= x <= b -> derivable_pt g1 x). + intros; unfold derivable_pt in |- *; apply existT with (f x0); elim (H x0 H3); + intros; eapply derive_pt_eq_1; symmetry in |- *; + apply H4. + assert (H4 : forall x:R, a <= x <= b -> derivable_pt g2 x). + intros; unfold derivable_pt in |- *; apply existT with (f x0); + elim (H0 x0 H4); intros; eapply derive_pt_eq_1; symmetry in |- *; + apply H5. + assert (H5 : forall x:R, a < x < b -> derivable_pt (g1 - g2) x). + intros; elim H5; intros; apply derivable_pt_minus; + [ apply H3; split; left; assumption | apply H4; split; left; assumption ]. + assert (H6 : forall x:R, a <= x <= b -> continuity_pt (g1 - g2) x). + intros; apply derivable_continuous_pt; apply derivable_pt_minus; + [ apply H3 | apply H4 ]; assumption. + assert (H7 : forall (x:R) (P:a < x < b), derive_pt (g1 - g2) x (H5 x P) = 0). + intros; elim P; intros; apply derive_pt_eq_0; replace 0 with (f x0 - f x0); + [ idtac | ring ]. + assert (H9 : a <= x0 <= b). + split; left; assumption. + apply derivable_pt_lim_minus; [ elim (H _ H9) | elim (H0 _ H9) ]; intros; + eapply derive_pt_eq_1; symmetry in |- *; apply H10. + assert (H8 := null_derivative_loc (g1 - g2)%F a b H5 H6 H7); + unfold constant_D_eq in H8; assert (H9 := H8 _ H2); + unfold minus_fct in H9; rewrite <- H9; ring. Qed. |