diff options
Diffstat (limited to 'theories/Reals/NewtonInt.v')
-rw-r--r-- | theories/Reals/NewtonInt.v | 1387 |
1 files changed, 701 insertions, 686 deletions
diff --git a/theories/Reals/NewtonInt.v b/theories/Reals/NewtonInt.v index 62c53e6d..306d5ac4 100644 --- a/theories/Reals/NewtonInt.v +++ b/theories/Reals/NewtonInt.v @@ -5,8 +5,8 @@ (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (************************************************************************) - -(*i $Id: NewtonInt.v 8670 2006-03-28 22:16:14Z herbelin $ i*) + +(*i $Id: NewtonInt.v 9245 2006-10-17 12:53:34Z notin $ i*) Require Import Rbase. Require Import Rfunctions. @@ -23,767 +23,782 @@ Definition Newton_integrable (f:R -> R) (a b:R) : Type := Definition NewtonInt (f:R -> R) (a b:R) (pr:Newton_integrable f a b) : R := let g := match pr with - | existT a b => a + | existT a b => a end in g b - g a. (* If f is differentiable, then f' is Newton integrable (Tautology ?) *) Lemma FTCN_step1 : - forall (f:Differential) (a b:R), - Newton_integrable (fun x:R => derive_pt f x (cond_diff f x)) a b. -intros f a b; unfold Newton_integrable in |- *; apply existT with (d1 f); - unfold antiderivative in |- *; intros; case (Rle_dec a b); - intro; - [ left; split; [ intros; exists (cond_diff f x); reflexivity | assumption ] - | right; split; - [ intros; exists (cond_diff f x); reflexivity | auto with real ] ]. + forall (f:Differential) (a b:R), + Newton_integrable (fun x:R => derive_pt f x (cond_diff f x)) a b. +Proof. + intros f a b; unfold Newton_integrable in |- *; apply existT with (d1 f); + unfold antiderivative in |- *; intros; case (Rle_dec a b); + intro; + [ left; split; [ intros; exists (cond_diff f x); reflexivity | assumption ] + | right; split; + [ intros; exists (cond_diff f x); reflexivity | auto with real ] ]. Defined. (* By definition, we have the Fondamental Theorem of Calculus *) Lemma FTC_Newton : - forall (f:Differential) (a b:R), - NewtonInt (fun x:R => derive_pt f x (cond_diff f x)) a b - (FTCN_step1 f a b) = f b - f a. -intros; unfold NewtonInt in |- *; reflexivity. + forall (f:Differential) (a b:R), + NewtonInt (fun x:R => derive_pt f x (cond_diff f x)) a b + (FTCN_step1 f a b) = f b - f a. +Proof. + intros; unfold NewtonInt in |- *; reflexivity. Qed. (* $\int_a^a f$ exists forall a:R and f:R->R *) Lemma NewtonInt_P1 : forall (f:R -> R) (a:R), Newton_integrable f a a. -intros f a; unfold Newton_integrable in |- *; - apply existT with (fct_cte (f a) * id)%F; left; - unfold antiderivative in |- *; split. -intros; assert (H1 : derivable_pt (fct_cte (f a) * id) x). -apply derivable_pt_mult. -apply derivable_pt_const. -apply derivable_pt_id. -exists H1; assert (H2 : x = a). -elim H; intros; apply Rle_antisym; assumption. -symmetry in |- *; apply derive_pt_eq_0; - replace (f x) with (0 * id x + fct_cte (f a) x * 1); - [ apply (derivable_pt_lim_mult (fct_cte (f a)) id x); - [ apply derivable_pt_lim_const | apply derivable_pt_lim_id ] - | unfold id, fct_cte in |- *; rewrite H2; ring ]. -right; reflexivity. +Proof. + intros f a; unfold Newton_integrable in |- *; + apply existT with (fct_cte (f a) * id)%F; left; + unfold antiderivative in |- *; split. + intros; assert (H1 : derivable_pt (fct_cte (f a) * id) x). + apply derivable_pt_mult. + apply derivable_pt_const. + apply derivable_pt_id. + exists H1; assert (H2 : x = a). + elim H; intros; apply Rle_antisym; assumption. + symmetry in |- *; apply derive_pt_eq_0; + replace (f x) with (0 * id x + fct_cte (f a) x * 1); + [ apply (derivable_pt_lim_mult (fct_cte (f a)) id x); + [ apply derivable_pt_lim_const | apply derivable_pt_lim_id ] + | unfold id, fct_cte in |- *; rewrite H2; ring ]. + right; reflexivity. Defined. (* $\int_a^a f = 0$ *) Lemma NewtonInt_P2 : - forall (f:R -> R) (a:R), NewtonInt f a a (NewtonInt_P1 f a) = 0. -intros; unfold NewtonInt in |- *; simpl in |- *; - unfold mult_fct, fct_cte, id in |- *; ring. + forall (f:R -> R) (a:R), NewtonInt f a a (NewtonInt_P1 f a) = 0. +Proof. + intros; unfold NewtonInt in |- *; simpl in |- *; + unfold mult_fct, fct_cte, id in |- *; ring. Qed. (* If $\int_a^b f$ exists, then $\int_b^a f$ exists too *) Lemma NewtonInt_P3 : - forall (f:R -> R) (a b:R) (X:Newton_integrable f a b), - Newton_integrable f b a. -unfold Newton_integrable in |- *; intros; elim X; intros g H; - apply existT with g; tauto. + forall (f:R -> R) (a b:R) (X:Newton_integrable f a b), + Newton_integrable f b a. +Proof. + unfold Newton_integrable in |- *; intros; elim X; intros g H; + apply existT with g; tauto. Defined. (* $\int_a^b f = -\int_b^a f$ *) Lemma NewtonInt_P4 : - forall (f:R -> R) (a b:R) (pr:Newton_integrable f a b), - NewtonInt f a b pr = - NewtonInt f b a (NewtonInt_P3 f a b pr). -intros; unfold Newton_integrable in pr; elim pr; intros; elim p; intro. -unfold NewtonInt in |- *; - case - (NewtonInt_P3 f a b - (existT + forall (f:R -> R) (a b:R) (pr:Newton_integrable f a b), + NewtonInt f a b pr = - NewtonInt f b a (NewtonInt_P3 f a b pr). +Proof. + intros; unfold Newton_integrable in pr; elim pr; intros; elim p; intro. + unfold NewtonInt in |- *; + case + (NewtonInt_P3 f a b + (existT (fun g:R -> R => antiderivative f g a b \/ antiderivative f g b a) x p)). -intros; elim o; intro. -unfold antiderivative in H0; elim H0; intros; elim H2; intro. -unfold antiderivative in H; elim H; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H5 H3)). -rewrite H3; ring. -assert (H1 := antiderivative_Ucte f x x0 a b H H0); elim H1; intros; - unfold antiderivative in H0; elim H0; clear H0; intros _ H0. -assert (H3 : a <= a <= b). -split; [ right; reflexivity | assumption ]. -assert (H4 : a <= b <= b). -split; [ assumption | right; reflexivity ]. -assert (H5 := H2 _ H3); assert (H6 := H2 _ H4); rewrite H5; rewrite H6; ring. -unfold NewtonInt in |- *; - case - (NewtonInt_P3 f a b - (existT + intros; elim o; intro. + unfold antiderivative in H0; elim H0; intros; elim H2; intro. + unfold antiderivative in H; elim H; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H5 H3)). + rewrite H3; ring. + assert (H1 := antiderivative_Ucte f x x0 a b H H0); elim H1; intros; + unfold antiderivative in H0; elim H0; clear H0; intros _ H0. + assert (H3 : a <= a <= b). + split; [ right; reflexivity | assumption ]. + assert (H4 : a <= b <= b). + split; [ assumption | right; reflexivity ]. + assert (H5 := H2 _ H3); assert (H6 := H2 _ H4); rewrite H5; rewrite H6; ring. + unfold NewtonInt in |- *; + case + (NewtonInt_P3 f a b + (existT (fun g:R -> R => antiderivative f g a b \/ antiderivative f g b a) x p)); intros; elim o; intro. -assert (H1 := antiderivative_Ucte f x x0 b a H H0); elim H1; intros; - unfold antiderivative in H0; elim H0; clear H0; intros _ H0. -assert (H3 : b <= a <= a). -split; [ assumption | right; reflexivity ]. -assert (H4 : b <= b <= a). -split; [ right; reflexivity | assumption ]. -assert (H5 := H2 _ H3); assert (H6 := H2 _ H4); rewrite H5; rewrite H6; ring. -unfold antiderivative in H0; elim H0; intros; elim H2; intro. -unfold antiderivative in H; elim H; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H5 H3)). -rewrite H3; ring. + assert (H1 := antiderivative_Ucte f x x0 b a H H0); elim H1; intros; + unfold antiderivative in H0; elim H0; clear H0; intros _ H0. + assert (H3 : b <= a <= a). + split; [ assumption | right; reflexivity ]. + assert (H4 : b <= b <= a). + split; [ right; reflexivity | assumption ]. + assert (H5 := H2 _ H3); assert (H6 := H2 _ H4); rewrite H5; rewrite H6; ring. + unfold antiderivative in H0; elim H0; intros; elim H2; intro. + unfold antiderivative in H; elim H; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H5 H3)). + rewrite H3; ring. Qed. (* The set of Newton integrable functions is a vectorial space *) Lemma NewtonInt_P5 : - forall (f g:R -> R) (l a b:R), - Newton_integrable f a b -> - Newton_integrable g a b -> - Newton_integrable (fun x:R => l * f x + g x) a b. -unfold Newton_integrable in |- *; intros f g l a b X X0; - elim X; intros; elim X0; intros; - exists (fun y:R => l * x y + x0 y). -elim p; intro. -elim p0; intro. -left; unfold antiderivative in |- *; unfold antiderivative in H, H0; elim H; - clear H; intros; elim H0; clear H0; intros H0 _. -split. -intros; elim (H _ H2); elim (H0 _ H2); intros. -assert (H5 : derivable_pt (fun y:R => l * x y + x0 y) x1). -reg. -exists H5; symmetry in |- *; reg; rewrite <- H3; rewrite <- H4; reflexivity. -assumption. -unfold antiderivative in H, H0; elim H; elim H0; intros; elim H4; intro. -elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H5 H2)). -left; rewrite <- H5; unfold antiderivative in |- *; split. -intros; elim H6; intros; assert (H9 : x1 = a). -apply Rle_antisym; assumption. -assert (H10 : a <= x1 <= b). -split; right; [ symmetry in |- *; assumption | rewrite <- H5; assumption ]. -assert (H11 : b <= x1 <= a). -split; right; [ rewrite <- H5; symmetry in |- *; assumption | assumption ]. -assert (H12 : derivable_pt x x1). -unfold derivable_pt in |- *; exists (f x1); elim (H3 _ H10); intros; - eapply derive_pt_eq_1; symmetry in |- *; apply H12. -assert (H13 : derivable_pt x0 x1). -unfold derivable_pt in |- *; exists (g x1); elim (H1 _ H11); intros; - eapply derive_pt_eq_1; symmetry in |- *; apply H13. -assert (H14 : derivable_pt (fun y:R => l * x y + x0 y) x1). -reg. -exists H14; symmetry in |- *; reg. -assert (H15 : derive_pt x0 x1 H13 = g x1). -elim (H1 _ H11); intros; rewrite H15; apply pr_nu. -assert (H16 : derive_pt x x1 H12 = f x1). -elim (H3 _ H10); intros; rewrite H16; apply pr_nu. -rewrite H15; rewrite H16; ring. -right; reflexivity. -elim p0; intro. -unfold antiderivative in H, H0; elim H; elim H0; intros; elim H4; intro. -elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H5 H2)). -left; rewrite H5; unfold antiderivative in |- *; split. -intros; elim H6; intros; assert (H9 : x1 = a). -apply Rle_antisym; assumption. -assert (H10 : a <= x1 <= b). -split; right; [ symmetry in |- *; assumption | rewrite H5; assumption ]. -assert (H11 : b <= x1 <= a). -split; right; [ rewrite H5; symmetry in |- *; assumption | assumption ]. -assert (H12 : derivable_pt x x1). -unfold derivable_pt in |- *; exists (f x1); elim (H3 _ H11); intros; - eapply derive_pt_eq_1; symmetry in |- *; apply H12. -assert (H13 : derivable_pt x0 x1). -unfold derivable_pt in |- *; exists (g x1); elim (H1 _ H10); intros; - eapply derive_pt_eq_1; symmetry in |- *; apply H13. -assert (H14 : derivable_pt (fun y:R => l * x y + x0 y) x1). -reg. -exists H14; symmetry in |- *; reg. -assert (H15 : derive_pt x0 x1 H13 = g x1). -elim (H1 _ H10); intros; rewrite H15; apply pr_nu. -assert (H16 : derive_pt x x1 H12 = f x1). -elim (H3 _ H11); intros; rewrite H16; apply pr_nu. -rewrite H15; rewrite H16; ring. -right; reflexivity. -right; unfold antiderivative in |- *; unfold antiderivative in H, H0; elim H; - clear H; intros; elim H0; clear H0; intros H0 _; split. -intros; elim (H _ H2); elim (H0 _ H2); intros. -assert (H5 : derivable_pt (fun y:R => l * x y + x0 y) x1). -reg. -exists H5; symmetry in |- *; reg; rewrite <- H3; rewrite <- H4; reflexivity. -assumption. + forall (f g:R -> R) (l a b:R), + Newton_integrable f a b -> + Newton_integrable g a b -> + Newton_integrable (fun x:R => l * f x + g x) a b. +Proof. + unfold Newton_integrable in |- *; intros f g l a b X X0; + elim X; intros; elim X0; intros; + exists (fun y:R => l * x y + x0 y). + elim p; intro. + elim p0; intro. + left; unfold antiderivative in |- *; unfold antiderivative in H, H0; elim H; + clear H; intros; elim H0; clear H0; intros H0 _. + split. + intros; elim (H _ H2); elim (H0 _ H2); intros. + assert (H5 : derivable_pt (fun y:R => l * x y + x0 y) x1). + reg. + exists H5; symmetry in |- *; reg; rewrite <- H3; rewrite <- H4; reflexivity. + assumption. + unfold antiderivative in H, H0; elim H; elim H0; intros; elim H4; intro. + elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H5 H2)). + left; rewrite <- H5; unfold antiderivative in |- *; split. + intros; elim H6; intros; assert (H9 : x1 = a). + apply Rle_antisym; assumption. + assert (H10 : a <= x1 <= b). + split; right; [ symmetry in |- *; assumption | rewrite <- H5; assumption ]. + assert (H11 : b <= x1 <= a). + split; right; [ rewrite <- H5; symmetry in |- *; assumption | assumption ]. + assert (H12 : derivable_pt x x1). + unfold derivable_pt in |- *; exists (f x1); elim (H3 _ H10); intros; + eapply derive_pt_eq_1; symmetry in |- *; apply H12. + assert (H13 : derivable_pt x0 x1). + unfold derivable_pt in |- *; exists (g x1); elim (H1 _ H11); intros; + eapply derive_pt_eq_1; symmetry in |- *; apply H13. + assert (H14 : derivable_pt (fun y:R => l * x y + x0 y) x1). + reg. + exists H14; symmetry in |- *; reg. + assert (H15 : derive_pt x0 x1 H13 = g x1). + elim (H1 _ H11); intros; rewrite H15; apply pr_nu. + assert (H16 : derive_pt x x1 H12 = f x1). + elim (H3 _ H10); intros; rewrite H16; apply pr_nu. + rewrite H15; rewrite H16; ring. + right; reflexivity. + elim p0; intro. + unfold antiderivative in H, H0; elim H; elim H0; intros; elim H4; intro. + elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H5 H2)). + left; rewrite H5; unfold antiderivative in |- *; split. + intros; elim H6; intros; assert (H9 : x1 = a). + apply Rle_antisym; assumption. + assert (H10 : a <= x1 <= b). + split; right; [ symmetry in |- *; assumption | rewrite H5; assumption ]. + assert (H11 : b <= x1 <= a). + split; right; [ rewrite H5; symmetry in |- *; assumption | assumption ]. + assert (H12 : derivable_pt x x1). + unfold derivable_pt in |- *; exists (f x1); elim (H3 _ H11); intros; + eapply derive_pt_eq_1; symmetry in |- *; apply H12. + assert (H13 : derivable_pt x0 x1). + unfold derivable_pt in |- *; exists (g x1); elim (H1 _ H10); intros; + eapply derive_pt_eq_1; symmetry in |- *; apply H13. + assert (H14 : derivable_pt (fun y:R => l * x y + x0 y) x1). + reg. + exists H14; symmetry in |- *; reg. + assert (H15 : derive_pt x0 x1 H13 = g x1). + elim (H1 _ H10); intros; rewrite H15; apply pr_nu. + assert (H16 : derive_pt x x1 H12 = f x1). + elim (H3 _ H11); intros; rewrite H16; apply pr_nu. + rewrite H15; rewrite H16; ring. + right; reflexivity. + right; unfold antiderivative in |- *; unfold antiderivative in H, H0; elim H; + clear H; intros; elim H0; clear H0; intros H0 _; split. + intros; elim (H _ H2); elim (H0 _ H2); intros. + assert (H5 : derivable_pt (fun y:R => l * x y + x0 y) x1). + reg. + exists H5; symmetry in |- *; reg; rewrite <- H3; rewrite <- H4; reflexivity. + assumption. Defined. (**********) Lemma antiderivative_P1 : - forall (f g F G:R -> R) (l a b:R), - antiderivative f F a b -> - antiderivative g G a b -> - antiderivative (fun x:R => l * f x + g x) (fun x:R => l * F x + G x) a b. -unfold antiderivative in |- *; intros; elim H; elim H0; clear H H0; intros; - split. -intros; elim (H _ H3); elim (H1 _ H3); intros. -assert (H6 : derivable_pt (fun x:R => l * F x + G x) x). -reg. -exists H6; symmetry in |- *; reg; rewrite <- H4; rewrite <- H5; ring. -assumption. + forall (f g F G:R -> R) (l a b:R), + antiderivative f F a b -> + antiderivative g G a b -> + antiderivative (fun x:R => l * f x + g x) (fun x:R => l * F x + G x) a b. +Proof. + unfold antiderivative in |- *; intros; elim H; elim H0; clear H H0; intros; + split. + intros; elim (H _ H3); elim (H1 _ H3); intros. + assert (H6 : derivable_pt (fun x:R => l * F x + G x) x). + reg. + exists H6; symmetry in |- *; reg; rewrite <- H4; rewrite <- H5; ring. + assumption. Qed. (* $\int_a^b \lambda f + g = \lambda \int_a^b f + \int_a^b f *) Lemma NewtonInt_P6 : - forall (f g:R -> R) (l a b:R) (pr1:Newton_integrable f a b) - (pr2:Newton_integrable g a b), - NewtonInt (fun x:R => l * f x + g x) a b (NewtonInt_P5 f g l a b pr1 pr2) = - l * NewtonInt f a b pr1 + NewtonInt g a b pr2. -intros f g l a b pr1 pr2; unfold NewtonInt in |- *; - case (NewtonInt_P5 f g l a b pr1 pr2); intros; case pr1; - intros; case pr2; intros; case (total_order_T a b); - intro. -elim s; intro. -elim o; intro. -elim o0; intro. -elim o1; intro. -assert (H2 := antiderivative_P1 f g x0 x1 l a b H0 H1); - assert (H3 := antiderivative_Ucte _ _ _ _ _ H H2); - elim H3; intros; assert (H5 : a <= a <= b). -split; [ right; reflexivity | left; assumption ]. -assert (H6 : a <= b <= b). -split; [ left; assumption | right; reflexivity ]. -assert (H7 := H4 _ H5); assert (H8 := H4 _ H6); rewrite H7; rewrite H8; ring. -unfold antiderivative in H1; elim H1; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H3 a0)). -unfold antiderivative in H0; elim H0; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a0)). -unfold antiderivative in H; elim H; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 a0)). -rewrite b0; ring. -elim o; intro. -unfold antiderivative in H; elim H; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 r)). -elim o0; intro. -unfold antiderivative in H0; elim H0; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 r)). -elim o1; intro. -unfold antiderivative in H1; elim H1; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H3 r)). -assert (H2 := antiderivative_P1 f g x0 x1 l b a H0 H1); - assert (H3 := antiderivative_Ucte _ _ _ _ _ H H2); - elim H3; intros; assert (H5 : b <= a <= a). -split; [ left; assumption | right; reflexivity ]. -assert (H6 : b <= b <= a). -split; [ right; reflexivity | left; assumption ]. -assert (H7 := H4 _ H5); assert (H8 := H4 _ H6); rewrite H7; rewrite H8; ring. + forall (f g:R -> R) (l a b:R) (pr1:Newton_integrable f a b) + (pr2:Newton_integrable g a b), + NewtonInt (fun x:R => l * f x + g x) a b (NewtonInt_P5 f g l a b pr1 pr2) = + l * NewtonInt f a b pr1 + NewtonInt g a b pr2. +Proof. + intros f g l a b pr1 pr2; unfold NewtonInt in |- *; + case (NewtonInt_P5 f g l a b pr1 pr2); intros; case pr1; + intros; case pr2; intros; case (total_order_T a b); + intro. + elim s; intro. + elim o; intro. + elim o0; intro. + elim o1; intro. + assert (H2 := antiderivative_P1 f g x0 x1 l a b H0 H1); + assert (H3 := antiderivative_Ucte _ _ _ _ _ H H2); + elim H3; intros; assert (H5 : a <= a <= b). + split; [ right; reflexivity | left; assumption ]. + assert (H6 : a <= b <= b). + split; [ left; assumption | right; reflexivity ]. + assert (H7 := H4 _ H5); assert (H8 := H4 _ H6); rewrite H7; rewrite H8; ring. + unfold antiderivative in H1; elim H1; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H3 a0)). + unfold antiderivative in H0; elim H0; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a0)). + unfold antiderivative in H; elim H; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 a0)). + rewrite b0; ring. + elim o; intro. + unfold antiderivative in H; elim H; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 r)). + elim o0; intro. + unfold antiderivative in H0; elim H0; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 r)). + elim o1; intro. + unfold antiderivative in H1; elim H1; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H3 r)). + assert (H2 := antiderivative_P1 f g x0 x1 l b a H0 H1); + assert (H3 := antiderivative_Ucte _ _ _ _ _ H H2); + elim H3; intros; assert (H5 : b <= a <= a). + split; [ left; assumption | right; reflexivity ]. + assert (H6 : b <= b <= a). + split; [ right; reflexivity | left; assumption ]. + assert (H7 := H4 _ H5); assert (H8 := H4 _ H6); rewrite H7; rewrite H8; ring. Qed. Lemma antiderivative_P2 : - forall (f F0 F1:R -> R) (a b c:R), - antiderivative f F0 a b -> - antiderivative f F1 b c -> - antiderivative f - (fun x:R => - match Rle_dec x b with + forall (f F0 F1:R -> R) (a b c:R), + antiderivative f F0 a b -> + antiderivative f F1 b c -> + antiderivative f + (fun x:R => + match Rle_dec x b with | left _ => F0 x | right _ => F1 x + (F0 b - F1 b) - end) a c. -unfold antiderivative in |- *; intros; elim H; clear H; intros; elim H0; - clear H0; intros; split. -2: apply Rle_trans with b; assumption. -intros; elim H3; clear H3; intros; case (total_order_T x b); intro. -elim s; intro. -assert (H5 : a <= x <= b). -split; [ assumption | left; assumption ]. -assert (H6 := H _ H5); elim H6; clear H6; intros; - assert - (H7 : - derivable_pt_lim - (fun x:R => + end) a c. +Proof. + unfold antiderivative in |- *; intros; elim H; clear H; intros; elim H0; + clear H0; intros; split. + 2: apply Rle_trans with b; assumption. + intros; elim H3; clear H3; intros; case (total_order_T x b); intro. + elim s; intro. + assert (H5 : a <= x <= b). + split; [ assumption | left; assumption ]. + assert (H6 := H _ H5); elim H6; clear H6; intros; + assert + (H7 : + derivable_pt_lim + (fun x:R => + match Rle_dec x b with + | left _ => F0 x + | right _ => F1 x + (F0 b - F1 b) + end) x (f x)). + unfold derivable_pt_lim in |- *; assert (H7 : derive_pt F0 x x0 = f x). + symmetry in |- *; assumption. + assert (H8 := derive_pt_eq_1 F0 x (f x) x0 H7); unfold derivable_pt_lim in H8; + intros; elim (H8 _ H9); intros; set (D := Rmin x1 (b - x)). + assert (H11 : 0 < D). + unfold D in |- *; unfold Rmin in |- *; case (Rle_dec x1 (b - x)); intro. + apply (cond_pos x1). + apply Rlt_Rminus; assumption. + exists (mkposreal _ H11); intros; case (Rle_dec x b); intro. + case (Rle_dec (x + h) b); intro. + apply H10. + assumption. + apply Rlt_le_trans with D; [ assumption | unfold D in |- *; apply Rmin_l ]. + elim n; left; apply Rlt_le_trans with (x + D). + apply Rplus_lt_compat_l; apply Rle_lt_trans with (Rabs h). + apply RRle_abs. + apply H13. + apply Rplus_le_reg_l with (- x); rewrite <- Rplus_assoc; rewrite Rplus_opp_l; + rewrite Rplus_0_l; rewrite Rplus_comm; unfold D in |- *; + apply Rmin_r. + elim n; left; assumption. + assert + (H8 : + derivable_pt + (fun x:R => match Rle_dec x b with - | left _ => F0 x - | right _ => F1 x + (F0 b - F1 b) - end) x (f x)). -unfold derivable_pt_lim in |- *; assert (H7 : derive_pt F0 x x0 = f x). -symmetry in |- *; assumption. -assert (H8 := derive_pt_eq_1 F0 x (f x) x0 H7); unfold derivable_pt_lim in H8; - intros; elim (H8 _ H9); intros; set (D := Rmin x1 (b - x)). -assert (H11 : 0 < D). -unfold D in |- *; unfold Rmin in |- *; case (Rle_dec x1 (b - x)); intro. -apply (cond_pos x1). -apply Rlt_Rminus; assumption. -exists (mkposreal _ H11); intros; case (Rle_dec x b); intro. -case (Rle_dec (x + h) b); intro. -apply H10. -assumption. -apply Rlt_le_trans with D; [ assumption | unfold D in |- *; apply Rmin_l ]. -elim n; left; apply Rlt_le_trans with (x + D). -apply Rplus_lt_compat_l; apply Rle_lt_trans with (Rabs h). -apply RRle_abs. -apply H13. -apply Rplus_le_reg_l with (- x); rewrite <- Rplus_assoc; rewrite Rplus_opp_l; - rewrite Rplus_0_l; rewrite Rplus_comm; unfold D in |- *; - apply Rmin_r. -elim n; left; assumption. -assert - (H8 : - derivable_pt - (fun x:R => - match Rle_dec x b with - | left _ => F0 x - | right _ => F1 x + (F0 b - F1 b) - end) x). -unfold derivable_pt in |- *; apply existT with (f x); apply H7. -exists H8; symmetry in |- *; apply derive_pt_eq_0; apply H7. -assert (H5 : a <= x <= b). -split; [ assumption | right; assumption ]. -assert (H6 : b <= x <= c). -split; [ right; symmetry in |- *; assumption | assumption ]. -elim (H _ H5); elim (H0 _ H6); intros; assert (H9 : derive_pt F0 x x1 = f x). -symmetry in |- *; assumption. -assert (H10 : derive_pt F1 x x0 = f x). -symmetry in |- *; assumption. -assert (H11 := derive_pt_eq_1 F0 x (f x) x1 H9); - assert (H12 := derive_pt_eq_1 F1 x (f x) x0 H10); - assert - (H13 : - derivable_pt_lim - (fun x:R => + | left _ => F0 x + | right _ => F1 x + (F0 b - F1 b) + end) x). + unfold derivable_pt in |- *; apply existT with (f x); apply H7. + exists H8; symmetry in |- *; apply derive_pt_eq_0; apply H7. + assert (H5 : a <= x <= b). + split; [ assumption | right; assumption ]. + assert (H6 : b <= x <= c). + split; [ right; symmetry in |- *; assumption | assumption ]. + elim (H _ H5); elim (H0 _ H6); intros; assert (H9 : derive_pt F0 x x1 = f x). + symmetry in |- *; assumption. + assert (H10 : derive_pt F1 x x0 = f x). + symmetry in |- *; assumption. + assert (H11 := derive_pt_eq_1 F0 x (f x) x1 H9); + assert (H12 := derive_pt_eq_1 F1 x (f x) x0 H10); + assert + (H13 : + derivable_pt_lim + (fun x:R => + match Rle_dec x b with + | left _ => F0 x + | right _ => F1 x + (F0 b - F1 b) + end) x (f x)). + unfold derivable_pt_lim in |- *; unfold derivable_pt_lim in H11, H12; intros; + elim (H11 _ H13); elim (H12 _ H13); intros; set (D := Rmin x2 x3); + assert (H16 : 0 < D). + unfold D in |- *; unfold Rmin in |- *; case (Rle_dec x2 x3); intro. + apply (cond_pos x2). + apply (cond_pos x3). + exists (mkposreal _ H16); intros; case (Rle_dec x b); intro. + case (Rle_dec (x + h) b); intro. + apply H15. + assumption. + apply Rlt_le_trans with D; [ assumption | unfold D in |- *; apply Rmin_r ]. + replace (F1 (x + h) + (F0 b - F1 b) - F0 x) with (F1 (x + h) - F1 x). + apply H14. + assumption. + apply Rlt_le_trans with D; [ assumption | unfold D in |- *; apply Rmin_l ]. + rewrite b0; ring. + elim n; right; assumption. + assert + (H14 : + derivable_pt + (fun x:R => match Rle_dec x b with - | left _ => F0 x - | right _ => F1 x + (F0 b - F1 b) - end) x (f x)). -unfold derivable_pt_lim in |- *; unfold derivable_pt_lim in H11, H12; intros; - elim (H11 _ H13); elim (H12 _ H13); intros; set (D := Rmin x2 x3); - assert (H16 : 0 < D). -unfold D in |- *; unfold Rmin in |- *; case (Rle_dec x2 x3); intro. -apply (cond_pos x2). -apply (cond_pos x3). -exists (mkposreal _ H16); intros; case (Rle_dec x b); intro. -case (Rle_dec (x + h) b); intro. -apply H15. -assumption. -apply Rlt_le_trans with D; [ assumption | unfold D in |- *; apply Rmin_r ]. -replace (F1 (x + h) + (F0 b - F1 b) - F0 x) with (F1 (x + h) - F1 x). -apply H14. -assumption. -apply Rlt_le_trans with D; [ assumption | unfold D in |- *; apply Rmin_l ]. -rewrite b0; ring. -elim n; right; assumption. -assert - (H14 : - derivable_pt - (fun x:R => - match Rle_dec x b with - | left _ => F0 x - | right _ => F1 x + (F0 b - F1 b) - end) x). -unfold derivable_pt in |- *; apply existT with (f x); apply H13. -exists H14; symmetry in |- *; apply derive_pt_eq_0; apply H13. -assert (H5 : b <= x <= c). -split; [ left; assumption | assumption ]. -assert (H6 := H0 _ H5); elim H6; clear H6; intros; - assert - (H7 : - derivable_pt_lim - (fun x:R => + | left _ => F0 x + | right _ => F1 x + (F0 b - F1 b) + end) x). + unfold derivable_pt in |- *; apply existT with (f x); apply H13. + exists H14; symmetry in |- *; apply derive_pt_eq_0; apply H13. + assert (H5 : b <= x <= c). + split; [ left; assumption | assumption ]. + assert (H6 := H0 _ H5); elim H6; clear H6; intros; + assert + (H7 : + derivable_pt_lim + (fun x:R => + match Rle_dec x b with + | left _ => F0 x + | right _ => F1 x + (F0 b - F1 b) + end) x (f x)). + unfold derivable_pt_lim in |- *; assert (H7 : derive_pt F1 x x0 = f x). + symmetry in |- *; assumption. + assert (H8 := derive_pt_eq_1 F1 x (f x) x0 H7); unfold derivable_pt_lim in H8; + intros; elim (H8 _ H9); intros; set (D := Rmin x1 (x - b)); + assert (H11 : 0 < D). + unfold D in |- *; unfold Rmin in |- *; case (Rle_dec x1 (x - b)); intro. + apply (cond_pos x1). + apply Rlt_Rminus; assumption. + exists (mkposreal _ H11); intros; case (Rle_dec x b); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 r)). + case (Rle_dec (x + h) b); intro. + cut (b < x + h). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 H14)). + apply Rplus_lt_reg_r with (- h - b); replace (- h - b + b) with (- h); + [ idtac | ring ]; replace (- h - b + (x + h)) with (x - b); + [ idtac | ring ]; apply Rle_lt_trans with (Rabs h). + rewrite <- Rabs_Ropp; apply RRle_abs. + apply Rlt_le_trans with D. + apply H13. + unfold D in |- *; apply Rmin_r. + replace (F1 (x + h) + (F0 b - F1 b) - (F1 x + (F0 b - F1 b))) with + (F1 (x + h) - F1 x); [ idtac | ring ]; apply H10. + assumption. + apply Rlt_le_trans with D. + assumption. + unfold D in |- *; apply Rmin_l. + assert + (H8 : + derivable_pt + (fun x:R => match Rle_dec x b with - | left _ => F0 x - | right _ => F1 x + (F0 b - F1 b) - end) x (f x)). -unfold derivable_pt_lim in |- *; assert (H7 : derive_pt F1 x x0 = f x). -symmetry in |- *; assumption. -assert (H8 := derive_pt_eq_1 F1 x (f x) x0 H7); unfold derivable_pt_lim in H8; - intros; elim (H8 _ H9); intros; set (D := Rmin x1 (x - b)); - assert (H11 : 0 < D). -unfold D in |- *; unfold Rmin in |- *; case (Rle_dec x1 (x - b)); intro. -apply (cond_pos x1). -apply Rlt_Rminus; assumption. -exists (mkposreal _ H11); intros; case (Rle_dec x b); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 r)). -case (Rle_dec (x + h) b); intro. -cut (b < x + h). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 H14)). -apply Rplus_lt_reg_r with (- h - b); replace (- h - b + b) with (- h); - [ idtac | ring ]; replace (- h - b + (x + h)) with (x - b); - [ idtac | ring ]; apply Rle_lt_trans with (Rabs h). -rewrite <- Rabs_Ropp; apply RRle_abs. -apply Rlt_le_trans with D. -apply H13. -unfold D in |- *; apply Rmin_r. -replace (F1 (x + h) + (F0 b - F1 b) - (F1 x + (F0 b - F1 b))) with - (F1 (x + h) - F1 x); [ idtac | ring ]; apply H10. -assumption. -apply Rlt_le_trans with D. -assumption. -unfold D in |- *; apply Rmin_l. -assert - (H8 : - derivable_pt - (fun x:R => - match Rle_dec x b with - | left _ => F0 x - | right _ => F1 x + (F0 b - F1 b) - end) x). -unfold derivable_pt in |- *; apply existT with (f x); apply H7. -exists H8; symmetry in |- *; apply derive_pt_eq_0; apply H7. + | left _ => F0 x + | right _ => F1 x + (F0 b - F1 b) + end) x). + unfold derivable_pt in |- *; apply existT with (f x); apply H7. + exists H8; symmetry in |- *; apply derive_pt_eq_0; apply H7. Qed. Lemma antiderivative_P3 : - forall (f F0 F1:R -> R) (a b c:R), - antiderivative f F0 a b -> - antiderivative f F1 c b -> - antiderivative f F1 c a \/ antiderivative f F0 a c. -intros; unfold antiderivative in H, H0; elim H; clear H; elim H0; clear H0; - intros; case (total_order_T a c); intro. -elim s; intro. -right; unfold antiderivative in |- *; split. -intros; apply H1; elim H3; intros; split; - [ assumption | apply Rle_trans with c; assumption ]. -left; assumption. -right; unfold antiderivative in |- *; split. -intros; apply H1; elim H3; intros; split; - [ assumption | apply Rle_trans with c; assumption ]. -right; assumption. -left; unfold antiderivative in |- *; split. -intros; apply H; elim H3; intros; split; - [ assumption | apply Rle_trans with a; assumption ]. -left; assumption. + forall (f F0 F1:R -> R) (a b c:R), + antiderivative f F0 a b -> + antiderivative f F1 c b -> + antiderivative f F1 c a \/ antiderivative f F0 a c. +Proof. + intros; unfold antiderivative in H, H0; elim H; clear H; elim H0; clear H0; + intros; case (total_order_T a c); intro. + elim s; intro. + right; unfold antiderivative in |- *; split. + intros; apply H1; elim H3; intros; split; + [ assumption | apply Rle_trans with c; assumption ]. + left; assumption. + right; unfold antiderivative in |- *; split. + intros; apply H1; elim H3; intros; split; + [ assumption | apply Rle_trans with c; assumption ]. + right; assumption. + left; unfold antiderivative in |- *; split. + intros; apply H; elim H3; intros; split; + [ assumption | apply Rle_trans with a; assumption ]. + left; assumption. Qed. Lemma antiderivative_P4 : - forall (f F0 F1:R -> R) (a b c:R), - antiderivative f F0 a b -> - antiderivative f F1 a c -> - antiderivative f F1 b c \/ antiderivative f F0 c b. -intros; unfold antiderivative in H, H0; elim H; clear H; elim H0; clear H0; - intros; case (total_order_T c b); intro. -elim s; intro. -right; unfold antiderivative in |- *; split. -intros; apply H1; elim H3; intros; split; - [ apply Rle_trans with c; assumption | assumption ]. -left; assumption. -right; unfold antiderivative in |- *; split. -intros; apply H1; elim H3; intros; split; - [ apply Rle_trans with c; assumption | assumption ]. -right; assumption. -left; unfold antiderivative in |- *; split. -intros; apply H; elim H3; intros; split; - [ apply Rle_trans with b; assumption | assumption ]. -left; assumption. + forall (f F0 F1:R -> R) (a b c:R), + antiderivative f F0 a b -> + antiderivative f F1 a c -> + antiderivative f F1 b c \/ antiderivative f F0 c b. +Proof. + intros; unfold antiderivative in H, H0; elim H; clear H; elim H0; clear H0; + intros; case (total_order_T c b); intro. + elim s; intro. + right; unfold antiderivative in |- *; split. + intros; apply H1; elim H3; intros; split; + [ apply Rle_trans with c; assumption | assumption ]. + left; assumption. + right; unfold antiderivative in |- *; split. + intros; apply H1; elim H3; intros; split; + [ apply Rle_trans with c; assumption | assumption ]. + right; assumption. + left; unfold antiderivative in |- *; split. + intros; apply H; elim H3; intros; split; + [ apply Rle_trans with b; assumption | assumption ]. + left; assumption. Qed. Lemma NewtonInt_P7 : - forall (f:R -> R) (a b c:R), - a < b -> - b < c -> - Newton_integrable f a b -> - Newton_integrable f b c -> Newton_integrable f a c. -unfold Newton_integrable in |- *; intros f a b c Hab Hbc X X0; elim X; - clear X; intros F0 H0; elim X0; clear X0; intros F1 H1; - set - (g := - fun x:R => - match Rle_dec x b with - | left _ => F0 x - | right _ => F1 x + (F0 b - F1 b) - end); apply existT with g; left; unfold g in |- *; - apply antiderivative_P2. -elim H0; intro. -assumption. -unfold antiderivative in H; elim H; clear H; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 Hab)). -elim H1; intro. -assumption. -unfold antiderivative in H; elim H; clear H; intros; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 Hbc)). + forall (f:R -> R) (a b c:R), + a < b -> + b < c -> + Newton_integrable f a b -> + Newton_integrable f b c -> Newton_integrable f a c. +Proof. + unfold Newton_integrable in |- *; intros f a b c Hab Hbc X X0; elim X; + clear X; intros F0 H0; elim X0; clear X0; intros F1 H1; + set + (g := + fun x:R => + match Rle_dec x b with + | left _ => F0 x + | right _ => F1 x + (F0 b - F1 b) + end); apply existT with g; left; unfold g in |- *; + apply antiderivative_P2. + elim H0; intro. + assumption. + unfold antiderivative in H; elim H; clear H; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 Hab)). + elim H1; intro. + assumption. + unfold antiderivative in H; elim H; clear H; intros; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 Hbc)). Qed. Lemma NewtonInt_P8 : - forall (f:R -> R) (a b c:R), - Newton_integrable f a b -> - Newton_integrable f b c -> Newton_integrable f a c. -intros. -elim X; intros F0 H0. -elim X0; intros F1 H1. -case (total_order_T a b); intro. -elim s; intro. -case (total_order_T b c); intro. -elim s0; intro. + forall (f:R -> R) (a b c:R), + Newton_integrable f a b -> + Newton_integrable f b c -> Newton_integrable f a c. +Proof. + intros. + elim X; intros F0 H0. + elim X0; intros F1 H1. + case (total_order_T a b); intro. + elim s; intro. + case (total_order_T b c); intro. + elim s0; intro. (* a<b & b<c *) -unfold Newton_integrable in |- *; - apply existT with - (fun x:R => - match Rle_dec x b with - | left _ => F0 x - | right _ => F1 x + (F0 b - F1 b) - end). -elim H0; intro. -elim H1; intro. -left; apply antiderivative_P2; assumption. -unfold antiderivative in H2; elim H2; clear H2; intros _ H2. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a1)). -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H a0)). + unfold Newton_integrable in |- *; + apply existT with + (fun x:R => + match Rle_dec x b with + | left _ => F0 x + | right _ => F1 x + (F0 b - F1 b) + end). + elim H0; intro. + elim H1; intro. + left; apply antiderivative_P2; assumption. + unfold antiderivative in H2; elim H2; clear H2; intros _ H2. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a1)). + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H a0)). (* a<b & b=c *) -rewrite b0 in X; apply X. + rewrite b0 in X; apply X. (* a<b & b>c *) -case (total_order_T a c); intro. -elim s0; intro. -unfold Newton_integrable in |- *; apply existT with F0. -left. -elim H1; intro. -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). -elim H0; intro. -assert (H3 := antiderivative_P3 f F0 F1 a b c H2 H). -elim H3; intro. -unfold antiderivative in H4; elim H4; clear H4; intros _ H4. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 a1)). -assumption. -unfold antiderivative in H2; elim H2; clear H2; intros _ H2. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a0)). -rewrite b0; apply NewtonInt_P1. -unfold Newton_integrable in |- *; apply existT with F1. -right. -elim H1; intro. -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). -elim H0; intro. -assert (H3 := antiderivative_P3 f F0 F1 a b c H2 H). -elim H3; intro. -assumption. -unfold antiderivative in H4; elim H4; clear H4; intros _ H4. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 r0)). -unfold antiderivative in H2; elim H2; clear H2; intros _ H2. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a0)). + case (total_order_T a c); intro. + elim s0; intro. + unfold Newton_integrable in |- *; apply existT with F0. + left. + elim H1; intro. + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). + elim H0; intro. + assert (H3 := antiderivative_P3 f F0 F1 a b c H2 H). + elim H3; intro. + unfold antiderivative in H4; elim H4; clear H4; intros _ H4. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 a1)). + assumption. + unfold antiderivative in H2; elim H2; clear H2; intros _ H2. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a0)). + rewrite b0; apply NewtonInt_P1. + unfold Newton_integrable in |- *; apply existT with F1. + right. + elim H1; intro. + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). + elim H0; intro. + assert (H3 := antiderivative_P3 f F0 F1 a b c H2 H). + elim H3; intro. + assumption. + unfold antiderivative in H4; elim H4; clear H4; intros _ H4. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 r0)). + unfold antiderivative in H2; elim H2; clear H2; intros _ H2. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a0)). (* a=b *) -rewrite b0; apply X0. -case (total_order_T b c); intro. -elim s; intro. + rewrite b0; apply X0. + case (total_order_T b c); intro. + elim s; intro. (* a>b & b<c *) -case (total_order_T a c); intro. -elim s0; intro. -unfold Newton_integrable in |- *; apply existT with F1. -left. -elim H1; intro. + case (total_order_T a c); intro. + elim s0; intro. + unfold Newton_integrable in |- *; apply existT with F1. + left. + elim H1; intro. (*****************) -elim H0; intro. -unfold antiderivative in H2; elim H2; clear H2; intros _ H2. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 r)). -assert (H3 := antiderivative_P4 f F0 F1 b a c H2 H). -elim H3; intro. -assumption. -unfold antiderivative in H4; elim H4; clear H4; intros _ H4. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 a1)). -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H a0)). -rewrite b0; apply NewtonInt_P1. -unfold Newton_integrable in |- *; apply existT with F0. -right. -elim H0; intro. -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). -elim H1; intro. -assert (H3 := antiderivative_P4 f F0 F1 b a c H H2). -elim H3; intro. -unfold antiderivative in H4; elim H4; clear H4; intros _ H4. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 r0)). -assumption. -unfold antiderivative in H2; elim H2; clear H2; intros _ H2. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a0)). + elim H0; intro. + unfold antiderivative in H2; elim H2; clear H2; intros _ H2. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 r)). + assert (H3 := antiderivative_P4 f F0 F1 b a c H2 H). + elim H3; intro. + assumption. + unfold antiderivative in H4; elim H4; clear H4; intros _ H4. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 a1)). + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H a0)). + rewrite b0; apply NewtonInt_P1. + unfold Newton_integrable in |- *; apply existT with F0. + right. + elim H0; intro. + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). + elim H1; intro. + assert (H3 := antiderivative_P4 f F0 F1 b a c H H2). + elim H3; intro. + unfold antiderivative in H4; elim H4; clear H4; intros _ H4. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 r0)). + assumption. + unfold antiderivative in H2; elim H2; clear H2; intros _ H2. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H2 a0)). (* a>b & b=c *) -rewrite b0 in X; apply X. + rewrite b0 in X; apply X. (* a>b & b>c *) -assert (X1 := NewtonInt_P3 f a b X). -assert (X2 := NewtonInt_P3 f b c X0). -apply NewtonInt_P3. -apply NewtonInt_P7 with b; assumption. + assert (X1 := NewtonInt_P3 f a b X). + assert (X2 := NewtonInt_P3 f b c X0). + apply NewtonInt_P3. + apply NewtonInt_P7 with b; assumption. Defined. (* Chasles' relation *) Lemma NewtonInt_P9 : - forall (f:R -> R) (a b c:R) (pr1:Newton_integrable f a b) - (pr2:Newton_integrable f b c), - NewtonInt f a c (NewtonInt_P8 f a b c pr1 pr2) = - NewtonInt f a b pr1 + NewtonInt f b c pr2. -intros; unfold NewtonInt in |- *. -case (NewtonInt_P8 f a b c pr1 pr2); intros. -case pr1; intros. -case pr2; intros. -case (total_order_T a b); intro. -elim s; intro. -case (total_order_T b c); intro. -elim s0; intro. + forall (f:R -> R) (a b c:R) (pr1:Newton_integrable f a b) + (pr2:Newton_integrable f b c), + NewtonInt f a c (NewtonInt_P8 f a b c pr1 pr2) = + NewtonInt f a b pr1 + NewtonInt f b c pr2. +Proof. + intros; unfold NewtonInt in |- *. + case (NewtonInt_P8 f a b c pr1 pr2); intros. + case pr1; intros. + case pr2; intros. + case (total_order_T a b); intro. + elim s; intro. + case (total_order_T b c); intro. + elim s0; intro. (* a<b & b<c *) -elim o0; intro. -elim o1; intro. -elim o; intro. -assert (H2 := antiderivative_P2 f x0 x1 a b c H H0). -assert - (H3 := - antiderivative_Ucte f x - (fun x:R => - match Rle_dec x b with - | left _ => x0 x - | right _ => x1 x + (x0 b - x1 b) - end) a c H1 H2). -elim H3; intros. -assert (H5 : a <= a <= c). -split; [ right; reflexivity | left; apply Rlt_trans with b; assumption ]. -assert (H6 : a <= c <= c). -split; [ left; apply Rlt_trans with b; assumption | right; reflexivity ]. -rewrite (H4 _ H5); rewrite (H4 _ H6). -case (Rle_dec a b); intro. -case (Rle_dec c b); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 a1)). -ring. -elim n; left; assumption. -unfold antiderivative in H1; elim H1; clear H1; intros _ H1. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 (Rlt_trans _ _ _ a0 a1))). -unfold antiderivative in H0; elim H0; clear H0; intros _ H0. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 a1)). -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H a0)). + elim o0; intro. + elim o1; intro. + elim o; intro. + assert (H2 := antiderivative_P2 f x0 x1 a b c H H0). + assert + (H3 := + antiderivative_Ucte f x + (fun x:R => + match Rle_dec x b with + | left _ => x0 x + | right _ => x1 x + (x0 b - x1 b) + end) a c H1 H2). + elim H3; intros. + assert (H5 : a <= a <= c). + split; [ right; reflexivity | left; apply Rlt_trans with b; assumption ]. + assert (H6 : a <= c <= c). + split; [ left; apply Rlt_trans with b; assumption | right; reflexivity ]. + rewrite (H4 _ H5); rewrite (H4 _ H6). + case (Rle_dec a b); intro. + case (Rle_dec c b); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 a1)). + ring. + elim n; left; assumption. + unfold antiderivative in H1; elim H1; clear H1; intros _ H1. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 (Rlt_trans _ _ _ a0 a1))). + unfold antiderivative in H0; elim H0; clear H0; intros _ H0. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 a1)). + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H a0)). (* a<b & b=c *) -rewrite <- b0. -unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rplus_0_r. -rewrite <- b0 in o. -elim o0; intro. -elim o; intro. -assert (H1 := antiderivative_Ucte f x x0 a b H0 H). -elim H1; intros. -rewrite (H2 b). -rewrite (H2 a). -ring. -split; [ right; reflexivity | left; assumption ]. -split; [ left; assumption | right; reflexivity ]. -unfold antiderivative in H0; elim H0; clear H0; intros _ H0. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 a0)). -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H a0)). + rewrite <- b0. + unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rplus_0_r. + rewrite <- b0 in o. + elim o0; intro. + elim o; intro. + assert (H1 := antiderivative_Ucte f x x0 a b H0 H). + elim H1; intros. + rewrite (H2 b). + rewrite (H2 a). + ring. + split; [ right; reflexivity | left; assumption ]. + split; [ left; assumption | right; reflexivity ]. + unfold antiderivative in H0; elim H0; clear H0; intros _ H0. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 a0)). + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H a0)). (* a<b & b>c *) -elim o1; intro. -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). -elim o0; intro. -elim o; intro. -assert (H2 := antiderivative_P2 f x x1 a c b H1 H). -assert (H3 := antiderivative_Ucte _ _ _ a b H0 H2). -elim H3; intros. -rewrite (H4 a). -rewrite (H4 b). -case (Rle_dec b c); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 r)). -case (Rle_dec a c); intro. -ring. -elim n0; unfold antiderivative in H1; elim H1; intros; assumption. -split; [ left; assumption | right; reflexivity ]. -split; [ right; reflexivity | left; assumption ]. -assert (H2 := antiderivative_P2 _ _ _ _ _ _ H1 H0). -assert (H3 := antiderivative_Ucte _ _ _ c b H H2). -elim H3; intros. -rewrite (H4 c). -rewrite (H4 b). -case (Rle_dec b a); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 a0)). -case (Rle_dec c a); intro. -ring. -elim n0; unfold antiderivative in H1; elim H1; intros; assumption. -split; [ left; assumption | right; reflexivity ]. -split; [ right; reflexivity | left; assumption ]. -unfold antiderivative in H0; elim H0; clear H0; intros _ H0. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 a0)). + elim o1; intro. + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). + elim o0; intro. + elim o; intro. + assert (H2 := antiderivative_P2 f x x1 a c b H1 H). + assert (H3 := antiderivative_Ucte _ _ _ a b H0 H2). + elim H3; intros. + rewrite (H4 a). + rewrite (H4 b). + case (Rle_dec b c); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 r)). + case (Rle_dec a c); intro. + ring. + elim n0; unfold antiderivative in H1; elim H1; intros; assumption. + split; [ left; assumption | right; reflexivity ]. + split; [ right; reflexivity | left; assumption ]. + assert (H2 := antiderivative_P2 _ _ _ _ _ _ H1 H0). + assert (H3 := antiderivative_Ucte _ _ _ c b H H2). + elim H3; intros. + rewrite (H4 c). + rewrite (H4 b). + case (Rle_dec b a); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 a0)). + case (Rle_dec c a); intro. + ring. + elim n0; unfold antiderivative in H1; elim H1; intros; assumption. + split; [ left; assumption | right; reflexivity ]. + split; [ right; reflexivity | left; assumption ]. + unfold antiderivative in H0; elim H0; clear H0; intros _ H0. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 a0)). (* a=b *) -rewrite b0 in o; rewrite b0. -elim o; intro. -elim o1; intro. -assert (H1 := antiderivative_Ucte _ _ _ b c H H0). -elim H1; intros. -assert (H3 : b <= c). -unfold antiderivative in H; elim H; intros; assumption. -rewrite (H2 b). -rewrite (H2 c). -ring. -split; [ assumption | right; reflexivity ]. -split; [ right; reflexivity | assumption ]. -assert (H1 : b = c). -unfold antiderivative in H, H0; elim H; elim H0; intros; apply Rle_antisym; - assumption. -rewrite H1; ring. -elim o1; intro. -assert (H1 : b = c). -unfold antiderivative in H, H0; elim H; elim H0; intros; apply Rle_antisym; - assumption. -rewrite H1; ring. -assert (H1 := antiderivative_Ucte _ _ _ c b H H0). -elim H1; intros. -assert (H3 : c <= b). -unfold antiderivative in H; elim H; intros; assumption. -rewrite (H2 c). -rewrite (H2 b). -ring. -split; [ assumption | right; reflexivity ]. -split; [ right; reflexivity | assumption ]. + rewrite b0 in o; rewrite b0. + elim o; intro. + elim o1; intro. + assert (H1 := antiderivative_Ucte _ _ _ b c H H0). + elim H1; intros. + assert (H3 : b <= c). + unfold antiderivative in H; elim H; intros; assumption. + rewrite (H2 b). + rewrite (H2 c). + ring. + split; [ assumption | right; reflexivity ]. + split; [ right; reflexivity | assumption ]. + assert (H1 : b = c). + unfold antiderivative in H, H0; elim H; elim H0; intros; apply Rle_antisym; + assumption. + rewrite H1; ring. + elim o1; intro. + assert (H1 : b = c). + unfold antiderivative in H, H0; elim H; elim H0; intros; apply Rle_antisym; + assumption. + rewrite H1; ring. + assert (H1 := antiderivative_Ucte _ _ _ c b H H0). + elim H1; intros. + assert (H3 : c <= b). + unfold antiderivative in H; elim H; intros; assumption. + rewrite (H2 c). + rewrite (H2 b). + ring. + split; [ assumption | right; reflexivity ]. + split; [ right; reflexivity | assumption ]. (* a>b & b<c *) -case (total_order_T b c); intro. -elim s; intro. -elim o0; intro. -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). -elim o1; intro. -elim o; intro. -assert (H2 := antiderivative_P2 _ _ _ _ _ _ H H1). -assert (H3 := antiderivative_Ucte _ _ _ b c H0 H2). -elim H3; intros. -rewrite (H4 b). -rewrite (H4 c). -case (Rle_dec b a); intro. -case (Rle_dec c a); intro. -assert (H5 : a = c). -unfold antiderivative in H1; elim H1; intros; apply Rle_antisym; assumption. -rewrite H5; ring. -ring. -elim n; left; assumption. -split; [ left; assumption | right; reflexivity ]. -split; [ right; reflexivity | left; assumption ]. -assert (H2 := antiderivative_P2 _ _ _ _ _ _ H0 H1). -assert (H3 := antiderivative_Ucte _ _ _ b a H H2). -elim H3; intros. -rewrite (H4 a). -rewrite (H4 b). -case (Rle_dec b c); intro. -case (Rle_dec a c); intro. -assert (H5 : a = c). -unfold antiderivative in H1; elim H1; intros; apply Rle_antisym; assumption. -rewrite H5; ring. -ring. -elim n; left; assumption. -split; [ right; reflexivity | left; assumption ]. -split; [ left; assumption | right; reflexivity ]. -unfold antiderivative in H0; elim H0; clear H0; intros _ H0. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 a0)). + case (total_order_T b c); intro. + elim s; intro. + elim o0; intro. + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). + elim o1; intro. + elim o; intro. + assert (H2 := antiderivative_P2 _ _ _ _ _ _ H H1). + assert (H3 := antiderivative_Ucte _ _ _ b c H0 H2). + elim H3; intros. + rewrite (H4 b). + rewrite (H4 c). + case (Rle_dec b a); intro. + case (Rle_dec c a); intro. + assert (H5 : a = c). + unfold antiderivative in H1; elim H1; intros; apply Rle_antisym; assumption. + rewrite H5; ring. + ring. + elim n; left; assumption. + split; [ left; assumption | right; reflexivity ]. + split; [ right; reflexivity | left; assumption ]. + assert (H2 := antiderivative_P2 _ _ _ _ _ _ H0 H1). + assert (H3 := antiderivative_Ucte _ _ _ b a H H2). + elim H3; intros. + rewrite (H4 a). + rewrite (H4 b). + case (Rle_dec b c); intro. + case (Rle_dec a c); intro. + assert (H5 : a = c). + unfold antiderivative in H1; elim H1; intros; apply Rle_antisym; assumption. + rewrite H5; ring. + ring. + elim n; left; assumption. + split; [ right; reflexivity | left; assumption ]. + split; [ left; assumption | right; reflexivity ]. + unfold antiderivative in H0; elim H0; clear H0; intros _ H0. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 a0)). (* a>b & b=c *) -rewrite <- b0. -unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rplus_0_r. -rewrite <- b0 in o. -elim o0; intro. -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). -elim o; intro. -unfold antiderivative in H0; elim H0; clear H0; intros _ H0. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 r)). -assert (H1 := antiderivative_Ucte f x x0 b a H0 H). -elim H1; intros. -rewrite (H2 b). -rewrite (H2 a). -ring. -split; [ left; assumption | right; reflexivity ]. -split; [ right; reflexivity | left; assumption ]. + rewrite <- b0. + unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rplus_0_r. + rewrite <- b0 in o. + elim o0; intro. + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). + elim o; intro. + unfold antiderivative in H0; elim H0; clear H0; intros _ H0. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 r)). + assert (H1 := antiderivative_Ucte f x x0 b a H0 H). + elim H1; intros. + rewrite (H2 b). + rewrite (H2 a). + ring. + split; [ left; assumption | right; reflexivity ]. + split; [ right; reflexivity | left; assumption ]. (* a>b & b>c *) -elim o0; intro. -unfold antiderivative in H; elim H; clear H; intros _ H. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). -elim o1; intro. -unfold antiderivative in H0; elim H0; clear H0; intros _ H0. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 r0)). -elim o; intro. -unfold antiderivative in H1; elim H1; clear H1; intros _ H1. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 (Rlt_trans _ _ _ r0 r))). -assert (H2 := antiderivative_P2 _ _ _ _ _ _ H0 H). -assert (H3 := antiderivative_Ucte _ _ _ c a H1 H2). -elim H3; intros. -assert (H5 : c <= a). -unfold antiderivative in H1; elim H1; intros; assumption. -rewrite (H4 c). -rewrite (H4 a). -case (Rle_dec a b); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r1 r)). -case (Rle_dec c b); intro. -ring. -elim n0; left; assumption. -split; [ assumption | right; reflexivity ]. -split; [ right; reflexivity | assumption ]. + elim o0; intro. + unfold antiderivative in H; elim H; clear H; intros _ H. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)). + elim o1; intro. + unfold antiderivative in H0; elim H0; clear H0; intros _ H0. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 r0)). + elim o; intro. + unfold antiderivative in H1; elim H1; clear H1; intros _ H1. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 (Rlt_trans _ _ _ r0 r))). + assert (H2 := antiderivative_P2 _ _ _ _ _ _ H0 H). + assert (H3 := antiderivative_Ucte _ _ _ c a H1 H2). + elim H3; intros. + assert (H5 : c <= a). + unfold antiderivative in H1; elim H1; intros; assumption. + rewrite (H4 c). + rewrite (H4 a). + case (Rle_dec a b); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r1 r)). + case (Rle_dec c b); intro. + ring. + elim n0; left; assumption. + split; [ assumption | right; reflexivity ]. + split; [ right; reflexivity | assumption ]. Qed. |