diff options
Diffstat (limited to 'theories/Reals/RiemannInt_SF.v')
-rw-r--r-- | theories/Reals/RiemannInt_SF.v | 4836 |
1 files changed, 2441 insertions, 2395 deletions
diff --git a/theories/Reals/RiemannInt_SF.v b/theories/Reals/RiemannInt_SF.v index b628de73..0f91d006 100644 --- a/theories/Reals/RiemannInt_SF.v +++ b/theories/Reals/RiemannInt_SF.v @@ -5,8 +5,8 @@ (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (************************************************************************) - -(*i $Id: RiemannInt_SF.v 8837 2006-05-22 08:41:18Z herbelin $ i*) + +(*i $Id: RiemannInt_SF.v 9245 2006-10-17 12:53:34Z notin $ i*) Require Import Rbase. Require Import Rfunctions. @@ -16,98 +16,100 @@ Open Local Scope R_scope. Set Implicit Arguments. -(**************************************************) -(* Each bounded subset of N has a maximal element *) -(**************************************************) +(*****************************************************) +(** * Each bounded subset of N has a maximal element *) +(*****************************************************) Definition Nbound (I:nat -> Prop) : Prop := - exists n : nat, (forall i:nat, I i -> (i <= n)%nat). + exists n : nat, (forall i:nat, I i -> (i <= n)%nat). Lemma IZN_var : forall z:Z, (0 <= z)%Z -> {n : nat | z = Z_of_nat n}. -intros; apply Z_of_nat_complete_inf; assumption. +Proof. + intros; apply Z_of_nat_complete_inf; assumption. Qed. Lemma Nzorn : - forall I:nat -> Prop, - (exists n : nat, I n) -> - Nbound I -> sigT (fun n:nat => I n /\ (forall i:nat, I i -> (i <= n)%nat)). -intros I H H0; set (E := fun x:R => exists i : nat, I i /\ INR i = x); - assert (H1 : bound E). -unfold Nbound in H0; elim H0; intros N H1; unfold bound in |- *; - exists (INR N); unfold is_upper_bound in |- *; intros; - unfold E in H2; elim H2; intros; elim H3; intros; - rewrite <- H5; apply le_INR; apply H1; assumption. -assert (H2 : exists x : R, E x). -elim H; intros; exists (INR x); unfold E in |- *; exists x; split; - [ assumption | reflexivity ]. -assert (H3 := completeness E H1 H2); elim H3; intros; unfold is_lub in p; - elim p; clear p; intros; unfold is_upper_bound in H4, H5; - assert (H6 : 0 <= x). -elim H2; intros; unfold E in H6; elim H6; intros; elim H7; intros; - apply Rle_trans with x0; - [ rewrite <- H9; change (INR 0 <= INR x1) in |- *; apply le_INR; - apply le_O_n - | apply H4; assumption ]. -assert (H7 := archimed x); elim H7; clear H7; intros; - assert (H9 : x <= IZR (up x) - 1). -apply H5; intros; assert (H10 := H4 _ H9); unfold E in H9; elim H9; intros; - elim H11; intros; rewrite <- H13; apply Rplus_le_reg_l with 1; - replace (1 + (IZR (up x) - 1)) with (IZR (up x)); - [ idtac | ring ]; replace (1 + INR x1) with (INR (S x1)); - [ idtac | rewrite S_INR; ring ]. -assert (H14 : (0 <= up x)%Z). -apply le_IZR; apply Rle_trans with x; [ apply H6 | left; assumption ]. -assert (H15 := IZN _ H14); elim H15; clear H15; intros; rewrite H15; - rewrite <- INR_IZR_INZ; apply le_INR; apply lt_le_S; - apply INR_lt; rewrite H13; apply Rle_lt_trans with x; - [ assumption | rewrite INR_IZR_INZ; rewrite <- H15; assumption ]. -assert (H10 : x = IZR (up x) - 1). -apply Rle_antisym; - [ assumption - | apply Rplus_le_reg_l with (- x + 1); - replace (- x + 1 + (IZR (up x) - 1)) with (IZR (up x) - x); - [ idtac | ring ]; replace (- x + 1 + x) with 1; - [ assumption | ring ] ]. -assert (H11 : (0 <= up x)%Z). -apply le_IZR; apply Rle_trans with x; [ apply H6 | left; assumption ]. -assert (H12 := IZN_var H11); elim H12; clear H12; intros; assert (H13 : E x). -elim (classic (E x)); intro; try assumption. -cut (forall y:R, E y -> y <= x - 1). -intro; assert (H14 := H5 _ H13); cut (x - 1 < x). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H14 H15)). -apply Rminus_lt; replace (x - 1 - x) with (-1); [ idtac | ring ]; - rewrite <- Ropp_0; apply Ropp_lt_gt_contravar; apply Rlt_0_1. -intros; assert (H14 := H4 _ H13); elim H14; intro; unfold E in H13; elim H13; - intros; elim H16; intros; apply Rplus_le_reg_l with 1. -replace (1 + (x - 1)) with x; [ idtac | ring ]; rewrite <- H18; - replace (1 + INR x1) with (INR (S x1)); [ idtac | rewrite S_INR; ring ]. -cut (x = INR (pred x0)). -intro; rewrite H19; apply le_INR; apply lt_le_S; apply INR_lt; rewrite H18; - rewrite <- H19; assumption. -rewrite H10; rewrite p; rewrite <- INR_IZR_INZ; replace 1 with (INR 1); - [ idtac | reflexivity ]; rewrite <- minus_INR. -replace (x0 - 1)%nat with (pred x0); - [ reflexivity - | case x0; [ reflexivity | intro; simpl in |- *; apply minus_n_O ] ]. -induction x0 as [| x0 Hrecx0]; - [ rewrite p in H7; rewrite <- INR_IZR_INZ in H7; simpl in H7; - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H6 H7)) - | apply le_n_S; apply le_O_n ]. -rewrite H15 in H13; elim H12; assumption. -split with (pred x0); unfold E in H13; elim H13; intros; elim H12; intros; - rewrite H10 in H15; rewrite p in H15; rewrite <- INR_IZR_INZ in H15; - assert (H16 : INR x0 = INR x1 + 1). -rewrite H15; ring. -rewrite <- S_INR in H16; assert (H17 := INR_eq _ _ H16); rewrite H17; - simpl in |- *; split. -assumption. -intros; apply INR_le; rewrite H15; rewrite <- H15; elim H12; intros; - rewrite H20; apply H4; unfold E in |- *; exists i; - split; [ assumption | reflexivity ]. + forall I:nat -> Prop, + (exists n : nat, I n) -> + Nbound I -> sigT (fun n:nat => I n /\ (forall i:nat, I i -> (i <= n)%nat)). +Proof. + intros I H H0; set (E := fun x:R => exists i : nat, I i /\ INR i = x); + assert (H1 : bound E). + unfold Nbound in H0; elim H0; intros N H1; unfold bound in |- *; + exists (INR N); unfold is_upper_bound in |- *; intros; + unfold E in H2; elim H2; intros; elim H3; intros; + rewrite <- H5; apply le_INR; apply H1; assumption. + assert (H2 : exists x : R, E x). + elim H; intros; exists (INR x); unfold E in |- *; exists x; split; + [ assumption | reflexivity ]. + assert (H3 := completeness E H1 H2); elim H3; intros; unfold is_lub in p; + elim p; clear p; intros; unfold is_upper_bound in H4, H5; + assert (H6 : 0 <= x). + elim H2; intros; unfold E in H6; elim H6; intros; elim H7; intros; + apply Rle_trans with x0; + [ rewrite <- H9; change (INR 0 <= INR x1) in |- *; apply le_INR; + apply le_O_n + | apply H4; assumption ]. + assert (H7 := archimed x); elim H7; clear H7; intros; + assert (H9 : x <= IZR (up x) - 1). + apply H5; intros; assert (H10 := H4 _ H9); unfold E in H9; elim H9; intros; + elim H11; intros; rewrite <- H13; apply Rplus_le_reg_l with 1; + replace (1 + (IZR (up x) - 1)) with (IZR (up x)); + [ idtac | ring ]; replace (1 + INR x1) with (INR (S x1)); + [ idtac | rewrite S_INR; ring ]. + assert (H14 : (0 <= up x)%Z). + apply le_IZR; apply Rle_trans with x; [ apply H6 | left; assumption ]. + assert (H15 := IZN _ H14); elim H15; clear H15; intros; rewrite H15; + rewrite <- INR_IZR_INZ; apply le_INR; apply lt_le_S; + apply INR_lt; rewrite H13; apply Rle_lt_trans with x; + [ assumption | rewrite INR_IZR_INZ; rewrite <- H15; assumption ]. + assert (H10 : x = IZR (up x) - 1). + apply Rle_antisym; + [ assumption + | apply Rplus_le_reg_l with (- x + 1); + replace (- x + 1 + (IZR (up x) - 1)) with (IZR (up x) - x); + [ idtac | ring ]; replace (- x + 1 + x) with 1; + [ assumption | ring ] ]. + assert (H11 : (0 <= up x)%Z). + apply le_IZR; apply Rle_trans with x; [ apply H6 | left; assumption ]. + assert (H12 := IZN_var H11); elim H12; clear H12; intros; assert (H13 : E x). + elim (classic (E x)); intro; try assumption. + cut (forall y:R, E y -> y <= x - 1). + intro; assert (H14 := H5 _ H13); cut (x - 1 < x). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H14 H15)). + apply Rminus_lt; replace (x - 1 - x) with (-1); [ idtac | ring ]; + rewrite <- Ropp_0; apply Ropp_lt_gt_contravar; apply Rlt_0_1. + intros; assert (H14 := H4 _ H13); elim H14; intro; unfold E in H13; elim H13; + intros; elim H16; intros; apply Rplus_le_reg_l with 1. + replace (1 + (x - 1)) with x; [ idtac | ring ]; rewrite <- H18; + replace (1 + INR x1) with (INR (S x1)); [ idtac | rewrite S_INR; ring ]. + cut (x = INR (pred x0)). + intro; rewrite H19; apply le_INR; apply lt_le_S; apply INR_lt; rewrite H18; + rewrite <- H19; assumption. + rewrite H10; rewrite p; rewrite <- INR_IZR_INZ; replace 1 with (INR 1); + [ idtac | reflexivity ]; rewrite <- minus_INR. + replace (x0 - 1)%nat with (pred x0); + [ reflexivity + | case x0; [ reflexivity | intro; simpl in |- *; apply minus_n_O ] ]. + induction x0 as [| x0 Hrecx0]; + [ rewrite p in H7; rewrite <- INR_IZR_INZ in H7; simpl in H7; + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H6 H7)) + | apply le_n_S; apply le_O_n ]. + rewrite H15 in H13; elim H12; assumption. + split with (pred x0); unfold E in H13; elim H13; intros; elim H12; intros; + rewrite H10 in H15; rewrite p in H15; rewrite <- INR_IZR_INZ in H15; + assert (H16 : INR x0 = INR x1 + 1). + rewrite H15; ring. + rewrite <- S_INR in H16; assert (H17 := INR_eq _ _ H16); rewrite H17; + simpl in |- *; split. + assumption. + intros; apply INR_le; rewrite H15; rewrite <- H15; elim H12; intros; + rewrite H20; apply H4; unfold E in |- *; exists i; + split; [ assumption | reflexivity ]. Qed. (*******************************************) -(* Step functions *) +(** * Step functions *) (*******************************************) Definition open_interval (a b x:R) : Prop := a < x < b. @@ -119,15 +121,15 @@ Definition adapted_couple (f:R -> R) (a b:R) (l lf:Rlist) : Prop := pos_Rl l (pred (Rlength l)) = Rmax a b /\ Rlength l = S (Rlength lf) /\ (forall i:nat, - (i < pred (Rlength l))%nat -> - constant_D_eq f (open_interval (pos_Rl l i) (pos_Rl l (S i))) - (pos_Rl lf i)). + (i < pred (Rlength l))%nat -> + constant_D_eq f (open_interval (pos_Rl l i) (pos_Rl l (S i))) + (pos_Rl lf i)). Definition adapted_couple_opt (f:R -> R) (a b:R) (l lf:Rlist) := adapted_couple f a b l lf /\ (forall i:nat, - (i < pred (Rlength lf))%nat -> - pos_Rl lf i <> pos_Rl lf (S i) \/ f (pos_Rl l (S i)) <> pos_Rl lf i) /\ + (i < pred (Rlength lf))%nat -> + pos_Rl lf i <> pos_Rl lf (S i) \/ f (pos_Rl l (S i)) <> pos_Rl lf i) /\ (forall i:nat, (i < pred (Rlength l))%nat -> pos_Rl l i <> pos_Rl l (S i)). Definition is_subdivision (f:R -> R) (a b:R) (l:Rlist) : Type := @@ -136,7 +138,7 @@ Definition is_subdivision (f:R -> R) (a b:R) (l:Rlist) : Type := Definition IsStepFun (f:R -> R) (a b:R) : Type := sigT (fun l:Rlist => is_subdivision f a b l). -(* Class of step functions *) +(** ** Class of step functions *) Record StepFun (a b:R) : Type := mkStepFun {fe :> R -> R; pre : IsStepFun fe a b}. @@ -144,2477 +146,2521 @@ Definition subdivision (a b:R) (f:StepFun a b) : Rlist := projT1 (pre f). Definition subdivision_val (a b:R) (f:StepFun a b) : Rlist := match projT2 (pre f) with - | existT a b => a + | existT a b => a end. Boxed Fixpoint Int_SF (l k:Rlist) {struct l} : R := match l with - | nil => 0 - | cons a l' => + | nil => 0 + | cons a l' => match k with - | nil => 0 - | cons x nil => 0 - | cons x (cons y k') => a * (y - x) + Int_SF l' (cons y k') + | nil => 0 + | cons x nil => 0 + | cons x (cons y k') => a * (y - x) + Int_SF l' (cons y k') end end. -(* Integral of step functions *) +(** ** Integral of step functions *) Definition RiemannInt_SF (a b:R) (f:StepFun a b) : R := match Rle_dec a b with - | left _ => Int_SF (subdivision_val f) (subdivision f) - | right _ => - Int_SF (subdivision_val f) (subdivision f) + | left _ => Int_SF (subdivision_val f) (subdivision f) + | right _ => - Int_SF (subdivision_val f) (subdivision f) end. -(********************************) -(* Properties of step functions *) -(********************************) +(************************************) +(** ** Properties of step functions *) +(************************************) Lemma StepFun_P1 : - forall (a b:R) (f:StepFun a b), - adapted_couple f a b (subdivision f) (subdivision_val f). -intros a b f; unfold subdivision_val in |- *; case (projT2 (pre f)); intros; - apply a0. + forall (a b:R) (f:StepFun a b), + adapted_couple f a b (subdivision f) (subdivision_val f). +Proof. + intros a b f; unfold subdivision_val in |- *; case (projT2 (pre f)); intros; + apply a0. Qed. Lemma StepFun_P2 : - forall (a b:R) (f:R -> R) (l lf:Rlist), - adapted_couple f a b l lf -> adapted_couple f b a l lf. -unfold adapted_couple in |- *; intros; decompose [and] H; clear H; - repeat split; try assumption. -rewrite H2; unfold Rmin in |- *; case (Rle_dec a b); intro; - case (Rle_dec b a); intro; try reflexivity. -apply Rle_antisym; assumption. -apply Rle_antisym; auto with real. -rewrite H1; unfold Rmax in |- *; case (Rle_dec a b); intro; - case (Rle_dec b a); intro; try reflexivity. -apply Rle_antisym; assumption. -apply Rle_antisym; auto with real. + forall (a b:R) (f:R -> R) (l lf:Rlist), + adapted_couple f a b l lf -> adapted_couple f b a l lf. +Proof. + unfold adapted_couple in |- *; intros; decompose [and] H; clear H; + repeat split; try assumption. + rewrite H2; unfold Rmin in |- *; case (Rle_dec a b); intro; + case (Rle_dec b a); intro; try reflexivity. + apply Rle_antisym; assumption. + apply Rle_antisym; auto with real. + rewrite H1; unfold Rmax in |- *; case (Rle_dec a b); intro; + case (Rle_dec b a); intro; try reflexivity. + apply Rle_antisym; assumption. + apply Rle_antisym; auto with real. Qed. Lemma StepFun_P3 : - forall a b c:R, - a <= b -> - adapted_couple (fct_cte c) a b (cons a (cons b nil)) (cons c nil). -intros; unfold adapted_couple in |- *; repeat split. -unfold ordered_Rlist in |- *; intros; simpl in H0; inversion H0; - [ simpl in |- *; assumption | elim (le_Sn_O _ H2) ]. -simpl in |- *; unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -simpl in |- *; unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -unfold constant_D_eq, open_interval in |- *; intros; simpl in H0; - inversion H0; [ reflexivity | elim (le_Sn_O _ H3) ]. + forall a b c:R, + a <= b -> + adapted_couple (fct_cte c) a b (cons a (cons b nil)) (cons c nil). +Proof. + intros; unfold adapted_couple in |- *; repeat split. + unfold ordered_Rlist in |- *; intros; simpl in H0; inversion H0; + [ simpl in |- *; assumption | elim (le_Sn_O _ H2) ]. + simpl in |- *; unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + simpl in |- *; unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + unfold constant_D_eq, open_interval in |- *; intros; simpl in H0; + inversion H0; [ reflexivity | elim (le_Sn_O _ H3) ]. Qed. Lemma StepFun_P4 : forall a b c:R, IsStepFun (fct_cte c) a b. -intros; unfold IsStepFun in |- *; case (Rle_dec a b); intro. -apply existT with (cons a (cons b nil)); unfold is_subdivision in |- *; - apply existT with (cons c nil); apply (StepFun_P3 c r). -apply existT with (cons b (cons a nil)); unfold is_subdivision in |- *; - apply existT with (cons c nil); apply StepFun_P2; - apply StepFun_P3; auto with real. +Proof. + intros; unfold IsStepFun in |- *; case (Rle_dec a b); intro. + apply existT with (cons a (cons b nil)); unfold is_subdivision in |- *; + apply existT with (cons c nil); apply (StepFun_P3 c r). + apply existT with (cons b (cons a nil)); unfold is_subdivision in |- *; + apply existT with (cons c nil); apply StepFun_P2; + apply StepFun_P3; auto with real. Qed. Lemma StepFun_P5 : - forall (a b:R) (f:R -> R) (l:Rlist), - is_subdivision f a b l -> is_subdivision f b a l. -destruct 1 as (x,(H0,(H1,(H2,(H3,H4))))); exists x; - repeat split; try assumption. -rewrite H1; apply Rmin_comm. -rewrite H2; apply Rmax_comm. + forall (a b:R) (f:R -> R) (l:Rlist), + is_subdivision f a b l -> is_subdivision f b a l. +Proof. + destruct 1 as (x,(H0,(H1,(H2,(H3,H4))))); exists x; + repeat split; try assumption. + rewrite H1; apply Rmin_comm. + rewrite H2; apply Rmax_comm. Qed. Lemma StepFun_P6 : - forall (f:R -> R) (a b:R), IsStepFun f a b -> IsStepFun f b a. -unfold IsStepFun in |- *; intros; elim X; intros; apply existT with x; - apply StepFun_P5; assumption. + forall (f:R -> R) (a b:R), IsStepFun f a b -> IsStepFun f b a. +Proof. + unfold IsStepFun in |- *; intros; elim X; intros; apply existT with x; + apply StepFun_P5; assumption. Qed. Lemma StepFun_P7 : - forall (a b r1 r2 r3:R) (f:R -> R) (l lf:Rlist), - a <= b -> - adapted_couple f a b (cons r1 (cons r2 l)) (cons r3 lf) -> - adapted_couple f r2 b (cons r2 l) lf. -unfold adapted_couple in |- *; intros; decompose [and] H0; clear H0; - assert (H5 : Rmax a b = b). -unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -assert (H7 : r2 <= b). -rewrite H5 in H2; rewrite <- H2; apply RList_P7; - [ assumption | simpl in |- *; right; left; reflexivity ]. -repeat split. -apply RList_P4 with r1; assumption. -rewrite H5 in H2; unfold Rmin in |- *; case (Rle_dec r2 b); intro; - [ reflexivity | elim n; assumption ]. -unfold Rmax in |- *; case (Rle_dec r2 b); intro; - [ rewrite H5 in H2; rewrite <- H2; reflexivity | elim n; assumption ]. -simpl in H4; simpl in |- *; apply INR_eq; apply Rplus_eq_reg_l with 1; - do 2 rewrite (Rplus_comm 1); do 2 rewrite <- S_INR; - rewrite H4; reflexivity. -intros; unfold constant_D_eq, open_interval in |- *; intros; - unfold constant_D_eq, open_interval in H6; - assert (H9 : (S i < pred (Rlength (cons r1 (cons r2 l))))%nat). -simpl in |- *; simpl in H0; apply lt_n_S; assumption. -assert (H10 := H6 _ H9); apply H10; assumption. + forall (a b r1 r2 r3:R) (f:R -> R) (l lf:Rlist), + a <= b -> + adapted_couple f a b (cons r1 (cons r2 l)) (cons r3 lf) -> + adapted_couple f r2 b (cons r2 l) lf. +Proof. + unfold adapted_couple in |- *; intros; decompose [and] H0; clear H0; + assert (H5 : Rmax a b = b). + unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + assert (H7 : r2 <= b). + rewrite H5 in H2; rewrite <- H2; apply RList_P7; + [ assumption | simpl in |- *; right; left; reflexivity ]. + repeat split. + apply RList_P4 with r1; assumption. + rewrite H5 in H2; unfold Rmin in |- *; case (Rle_dec r2 b); intro; + [ reflexivity | elim n; assumption ]. + unfold Rmax in |- *; case (Rle_dec r2 b); intro; + [ rewrite H5 in H2; rewrite <- H2; reflexivity | elim n; assumption ]. + simpl in H4; simpl in |- *; apply INR_eq; apply Rplus_eq_reg_l with 1; + do 2 rewrite (Rplus_comm 1); do 2 rewrite <- S_INR; + rewrite H4; reflexivity. + intros; unfold constant_D_eq, open_interval in |- *; intros; + unfold constant_D_eq, open_interval in H6; + assert (H9 : (S i < pred (Rlength (cons r1 (cons r2 l))))%nat). + simpl in |- *; simpl in H0; apply lt_n_S; assumption. + assert (H10 := H6 _ H9); apply H10; assumption. Qed. Lemma StepFun_P8 : - forall (f:R -> R) (l1 lf1:Rlist) (a b:R), - adapted_couple f a b l1 lf1 -> a = b -> Int_SF lf1 l1 = 0. -simple induction l1. -intros; induction lf1 as [| r lf1 Hreclf1]; reflexivity. -simple induction r0. -intros; induction lf1 as [| r1 lf1 Hreclf1]. -reflexivity. -unfold adapted_couple in H0; decompose [and] H0; clear H0; simpl in H5; - discriminate. -intros; induction lf1 as [| r3 lf1 Hreclf1]. -reflexivity. -simpl in |- *; cut (r = r1). -intro; rewrite H3; rewrite (H0 lf1 r b). -ring. -rewrite H3; apply StepFun_P7 with a r r3; [ right; assumption | assumption ]. -clear H H0 Hreclf1 r0; unfold adapted_couple in H1; decompose [and] H1; - intros; simpl in H4; rewrite H4; unfold Rmin in |- *; - case (Rle_dec a b); intro; [ assumption | reflexivity ]. -unfold adapted_couple in H1; decompose [and] H1; intros; apply Rle_antisym. -apply (H3 0%nat); simpl in |- *; apply lt_O_Sn. -simpl in H5; rewrite H2 in H5; rewrite H5; replace (Rmin b b) with (Rmax a b); - [ rewrite <- H4; apply RList_P7; - [ assumption | simpl in |- *; right; left; reflexivity ] - | unfold Rmin, Rmax in |- *; case (Rle_dec b b); case (Rle_dec a b); intros; - try assumption || reflexivity ]. + forall (f:R -> R) (l1 lf1:Rlist) (a b:R), + adapted_couple f a b l1 lf1 -> a = b -> Int_SF lf1 l1 = 0. +Proof. + simple induction l1. + intros; induction lf1 as [| r lf1 Hreclf1]; reflexivity. + simple induction r0. + intros; induction lf1 as [| r1 lf1 Hreclf1]. + reflexivity. + unfold adapted_couple in H0; decompose [and] H0; clear H0; simpl in H5; + discriminate. + intros; induction lf1 as [| r3 lf1 Hreclf1]. + reflexivity. + simpl in |- *; cut (r = r1). + intro; rewrite H3; rewrite (H0 lf1 r b). + ring. + rewrite H3; apply StepFun_P7 with a r r3; [ right; assumption | assumption ]. + clear H H0 Hreclf1 r0; unfold adapted_couple in H1; decompose [and] H1; + intros; simpl in H4; rewrite H4; unfold Rmin in |- *; + case (Rle_dec a b); intro; [ assumption | reflexivity ]. + unfold adapted_couple in H1; decompose [and] H1; intros; apply Rle_antisym. + apply (H3 0%nat); simpl in |- *; apply lt_O_Sn. + simpl in H5; rewrite H2 in H5; rewrite H5; replace (Rmin b b) with (Rmax a b); + [ rewrite <- H4; apply RList_P7; + [ assumption | simpl in |- *; right; left; reflexivity ] + | unfold Rmin, Rmax in |- *; case (Rle_dec b b); case (Rle_dec a b); intros; + try assumption || reflexivity ]. Qed. Lemma StepFun_P9 : - forall (a b:R) (f:R -> R) (l lf:Rlist), - adapted_couple f a b l lf -> a <> b -> (2 <= Rlength l)%nat. -intros; unfold adapted_couple in H; decompose [and] H; clear H; - induction l as [| r l Hrecl]; - [ simpl in H4; discriminate - | induction l as [| r0 l Hrecl0]; - [ simpl in H3; simpl in H2; generalize H3; generalize H2; - unfold Rmin, Rmax in |- *; case (Rle_dec a b); - intros; elim H0; rewrite <- H5; rewrite <- H7; - reflexivity - | simpl in |- *; do 2 apply le_n_S; apply le_O_n ] ]. + forall (a b:R) (f:R -> R) (l lf:Rlist), + adapted_couple f a b l lf -> a <> b -> (2 <= Rlength l)%nat. +Proof. + intros; unfold adapted_couple in H; decompose [and] H; clear H; + induction l as [| r l Hrecl]; + [ simpl in H4; discriminate + | induction l as [| r0 l Hrecl0]; + [ simpl in H3; simpl in H2; generalize H3; generalize H2; + unfold Rmin, Rmax in |- *; case (Rle_dec a b); + intros; elim H0; rewrite <- H5; rewrite <- H7; + reflexivity + | simpl in |- *; do 2 apply le_n_S; apply le_O_n ] ]. Qed. Lemma StepFun_P10 : - forall (f:R -> R) (l lf:Rlist) (a b:R), - a <= b -> - adapted_couple f a b l lf -> + forall (f:R -> R) (l lf:Rlist) (a b:R), + a <= b -> + adapted_couple f a b l lf -> exists l' : Rlist, - (exists lf' : Rlist, adapted_couple_opt f a b l' lf'). -simple induction l. -intros; unfold adapted_couple in H0; decompose [and] H0; simpl in H4; - discriminate. -intros; case (Req_dec a b); intro. -exists (cons a nil); exists nil; unfold adapted_couple_opt in |- *; - unfold adapted_couple in |- *; unfold ordered_Rlist in |- *; - repeat split; try (intros; simpl in H3; elim (lt_n_O _ H3)). -simpl in |- *; rewrite <- H2; unfold Rmin in |- *; case (Rle_dec a a); intro; - reflexivity. -simpl in |- *; rewrite <- H2; unfold Rmax in |- *; case (Rle_dec a a); intro; - reflexivity. -elim (RList_P20 _ (StepFun_P9 H1 H2)); intros t1 [t2 [t3 H3]]; - induction lf as [| r1 lf Hreclf]. -unfold adapted_couple in H1; decompose [and] H1; rewrite H3 in H7; - simpl in H7; discriminate. -clear Hreclf; assert (H4 : adapted_couple f t2 b r0 lf). -rewrite H3 in H1; assert (H4 := RList_P21 _ _ H3); simpl in H4; rewrite H4; - eapply StepFun_P7; [ apply H0 | apply H1 ]. -cut (t2 <= b). -intro; assert (H6 := H _ _ _ H5 H4); case (Req_dec t1 t2); intro Hyp_eq. -replace a with t2. -apply H6. -rewrite <- Hyp_eq; rewrite H3 in H1; unfold adapted_couple in H1; - decompose [and] H1; clear H1; simpl in H9; rewrite H9; - unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -elim H6; clear H6; intros l' [lf' H6]; case (Req_dec t2 b); intro. -exists (cons a (cons b nil)); exists (cons r1 nil); - unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; - repeat split. -unfold ordered_Rlist in |- *; intros; simpl in H8; inversion H8; - [ simpl in |- *; assumption | elim (le_Sn_O _ H10) ]. -simpl in |- *; unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -simpl in |- *; unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -intros; simpl in H8; inversion H8. -unfold constant_D_eq, open_interval in |- *; intros; simpl in |- *; - simpl in H9; rewrite H3 in H1; unfold adapted_couple in H1; - decompose [and] H1; apply (H16 0%nat). -simpl in |- *; apply lt_O_Sn. -unfold open_interval in |- *; simpl in |- *; rewrite H7; simpl in H13; - rewrite H13; unfold Rmin in |- *; case (Rle_dec a b); - intro; [ assumption | elim n; assumption ]. -elim (le_Sn_O _ H10). -intros; simpl in H8; elim (lt_n_O _ H8). -intros; simpl in H8; inversion H8; - [ simpl in |- *; assumption | elim (le_Sn_O _ H10) ]. -assert (Hyp_min : Rmin t2 b = t2). -unfold Rmin in |- *; case (Rle_dec t2 b); intro; - [ reflexivity | elim n; assumption ]. -unfold adapted_couple in H6; elim H6; clear H6; intros; - elim (RList_P20 _ (StepFun_P9 H6 H7)); intros s1 [s2 [s3 H9]]; - induction lf' as [| r2 lf' Hreclf']. -unfold adapted_couple in H6; decompose [and] H6; rewrite H9 in H13; - simpl in H13; discriminate. -clear Hreclf'; case (Req_dec r1 r2); intro. -case (Req_dec (f t2) r1); intro. -exists (cons t1 (cons s2 s3)); exists (cons r1 lf'); rewrite H3 in H1; - rewrite H9 in H6; unfold adapted_couple in H6, H1; - decompose [and] H1; decompose [and] H6; clear H1 H6; - unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; - repeat split. -unfold ordered_Rlist in |- *; intros; simpl in H1; - induction i as [| i Hreci]. -simpl in |- *; apply Rle_trans with s1. -replace s1 with t2. -apply (H12 0%nat). -simpl in |- *; apply lt_O_Sn. -simpl in H19; rewrite H19; symmetry in |- *; apply Hyp_min. -apply (H16 0%nat); simpl in |- *; apply lt_O_Sn. -change (pos_Rl (cons s2 s3) i <= pos_Rl (cons s2 s3) (S i)) in |- *; - apply (H16 (S i)); simpl in |- *; assumption. -simpl in |- *; simpl in H14; rewrite H14; reflexivity. -simpl in |- *; simpl in H18; rewrite H18; unfold Rmax in |- *; - case (Rle_dec a b); case (Rle_dec t2 b); intros; reflexivity || elim n; - assumption. -simpl in |- *; simpl in H20; apply H20. -intros; simpl in H1; unfold constant_D_eq, open_interval in |- *; intros; - induction i as [| i Hreci]. -simpl in |- *; simpl in H6; case (total_order_T x t2); intro. -elim s; intro. -apply (H17 0%nat); - [ simpl in |- *; apply lt_O_Sn - | unfold open_interval in |- *; simpl in |- *; elim H6; intros; split; - assumption ]. -rewrite b0; assumption. -rewrite H10; apply (H22 0%nat); - [ simpl in |- *; apply lt_O_Sn - | unfold open_interval in |- *; simpl in |- *; replace s1 with t2; - [ elim H6; intros; split; assumption - | simpl in H19; rewrite H19; rewrite Hyp_min; reflexivity ] ]. -simpl in |- *; simpl in H6; apply (H22 (S i)); - [ simpl in |- *; assumption - | unfold open_interval in |- *; simpl in |- *; apply H6 ]. -intros; simpl in H1; rewrite H10; - change - (pos_Rl (cons r2 lf') i <> pos_Rl (cons r2 lf') (S i) \/ - f (pos_Rl (cons s1 (cons s2 s3)) (S i)) <> pos_Rl (cons r2 lf') i) - in |- *; rewrite <- H9; elim H8; intros; apply H6; - simpl in |- *; apply H1. -intros; induction i as [| i Hreci]. -simpl in |- *; red in |- *; intro; elim Hyp_eq; apply Rle_antisym. -apply (H12 0%nat); simpl in |- *; apply lt_O_Sn. -rewrite <- Hyp_min; rewrite H6; simpl in H19; rewrite <- H19; - apply (H16 0%nat); simpl in |- *; apply lt_O_Sn. -elim H8; intros; rewrite H9 in H21; apply (H21 (S i)); simpl in |- *; - simpl in H1; apply H1. -exists (cons t1 l'); exists (cons r1 (cons r2 lf')); rewrite H9 in H6; - rewrite H3 in H1; unfold adapted_couple in H1, H6; - decompose [and] H6; decompose [and] H1; clear H6 H1; - unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; - repeat split. -rewrite H9; unfold ordered_Rlist in |- *; intros; simpl in H1; - induction i as [| i Hreci]. -simpl in |- *; replace s1 with t2. -apply (H16 0%nat); simpl in |- *; apply lt_O_Sn. -simpl in H14; rewrite H14; rewrite Hyp_min; reflexivity. -change - (pos_Rl (cons s1 (cons s2 s3)) i <= pos_Rl (cons s1 (cons s2 s3)) (S i)) - in |- *; apply (H12 i); simpl in |- *; apply lt_S_n; - assumption. -simpl in |- *; simpl in H19; apply H19. -rewrite H9; simpl in |- *; simpl in H13; rewrite H13; unfold Rmax in |- *; - case (Rle_dec t2 b); case (Rle_dec a b); intros; reflexivity || elim n; - assumption. -rewrite H9; simpl in |- *; simpl in H15; rewrite H15; reflexivity. -intros; simpl in H1; unfold constant_D_eq, open_interval in |- *; intros; - induction i as [| i Hreci]. -simpl in |- *; rewrite H9 in H6; simpl in H6; apply (H22 0%nat). -simpl in |- *; apply lt_O_Sn. -unfold open_interval in |- *; simpl in |- *. -replace t2 with s1. -assumption. -simpl in H14; rewrite H14; rewrite Hyp_min; reflexivity. -change (f x = pos_Rl (cons r2 lf') i) in |- *; clear Hreci; apply (H17 i). -simpl in |- *; rewrite H9 in H1; simpl in H1; apply lt_S_n; apply H1. -rewrite H9 in H6; unfold open_interval in |- *; apply H6. -intros; simpl in H1; induction i as [| i Hreci]. -simpl in |- *; rewrite H9; right; simpl in |- *; replace s1 with t2. -assumption. -simpl in H14; rewrite H14; rewrite Hyp_min; reflexivity. -elim H8; intros; apply (H6 i). -simpl in |- *; apply lt_S_n; apply H1. -intros; rewrite H9; induction i as [| i Hreci]. -simpl in |- *; red in |- *; intro; elim Hyp_eq; apply Rle_antisym. -apply (H16 0%nat); simpl in |- *; apply lt_O_Sn. -rewrite <- Hyp_min; rewrite H6; simpl in H14; rewrite <- H14; right; - reflexivity. -elim H8; intros; rewrite <- H9; apply (H21 i); rewrite H9; rewrite H9 in H1; - simpl in |- *; simpl in H1; apply lt_S_n; apply H1. -exists (cons t1 l'); exists (cons r1 (cons r2 lf')); rewrite H9 in H6; - rewrite H3 in H1; unfold adapted_couple in H1, H6; - decompose [and] H6; decompose [and] H1; clear H6 H1; - unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; - repeat split. -rewrite H9; unfold ordered_Rlist in |- *; intros; simpl in H1; - induction i as [| i Hreci]. -simpl in |- *; replace s1 with t2. -apply (H15 0%nat); simpl in |- *; apply lt_O_Sn. -simpl in H13; rewrite H13; rewrite Hyp_min; reflexivity. -change - (pos_Rl (cons s1 (cons s2 s3)) i <= pos_Rl (cons s1 (cons s2 s3)) (S i)) - in |- *; apply (H11 i); simpl in |- *; apply lt_S_n; - assumption. -simpl in |- *; simpl in H18; apply H18. -rewrite H9; simpl in |- *; simpl in H12; rewrite H12; unfold Rmax in |- *; - case (Rle_dec t2 b); case (Rle_dec a b); intros; reflexivity || elim n; - assumption. -rewrite H9; simpl in |- *; simpl in H14; rewrite H14; reflexivity. -intros; simpl in H1; unfold constant_D_eq, open_interval in |- *; intros; - induction i as [| i Hreci]. -simpl in |- *; rewrite H9 in H6; simpl in H6; apply (H21 0%nat). -simpl in |- *; apply lt_O_Sn. -unfold open_interval in |- *; simpl in |- *; replace t2 with s1. -assumption. -simpl in H13; rewrite H13; rewrite Hyp_min; reflexivity. -change (f x = pos_Rl (cons r2 lf') i) in |- *; clear Hreci; apply (H16 i). -simpl in |- *; rewrite H9 in H1; simpl in H1; apply lt_S_n; apply H1. -rewrite H9 in H6; unfold open_interval in |- *; apply H6. -intros; simpl in H1; induction i as [| i Hreci]. -simpl in |- *; left; assumption. -elim H8; intros; apply (H6 i). -simpl in |- *; apply lt_S_n; apply H1. -intros; rewrite H9; induction i as [| i Hreci]. -simpl in |- *; red in |- *; intro; elim Hyp_eq; apply Rle_antisym. -apply (H15 0%nat); simpl in |- *; apply lt_O_Sn. -rewrite <- Hyp_min; rewrite H6; simpl in H13; rewrite <- H13; right; - reflexivity. -elim H8; intros; rewrite <- H9; apply (H20 i); rewrite H9; rewrite H9 in H1; - simpl in |- *; simpl in H1; apply lt_S_n; apply H1. -rewrite H3 in H1; clear H4; unfold adapted_couple in H1; decompose [and] H1; - clear H1; clear H H7 H9; cut (Rmax a b = b); - [ intro; rewrite H in H5; rewrite <- H5; apply RList_P7; - [ assumption | simpl in |- *; right; left; reflexivity ] - | unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ] ]. + (exists lf' : Rlist, adapted_couple_opt f a b l' lf'). +Proof. + simple induction l. + intros; unfold adapted_couple in H0; decompose [and] H0; simpl in H4; + discriminate. + intros; case (Req_dec a b); intro. + exists (cons a nil); exists nil; unfold adapted_couple_opt in |- *; + unfold adapted_couple in |- *; unfold ordered_Rlist in |- *; + repeat split; try (intros; simpl in H3; elim (lt_n_O _ H3)). + simpl in |- *; rewrite <- H2; unfold Rmin in |- *; case (Rle_dec a a); intro; + reflexivity. + simpl in |- *; rewrite <- H2; unfold Rmax in |- *; case (Rle_dec a a); intro; + reflexivity. + elim (RList_P20 _ (StepFun_P9 H1 H2)); intros t1 [t2 [t3 H3]]; + induction lf as [| r1 lf Hreclf]. + unfold adapted_couple in H1; decompose [and] H1; rewrite H3 in H7; + simpl in H7; discriminate. + clear Hreclf; assert (H4 : adapted_couple f t2 b r0 lf). + rewrite H3 in H1; assert (H4 := RList_P21 _ _ H3); simpl in H4; rewrite H4; + eapply StepFun_P7; [ apply H0 | apply H1 ]. + cut (t2 <= b). + intro; assert (H6 := H _ _ _ H5 H4); case (Req_dec t1 t2); intro Hyp_eq. + replace a with t2. + apply H6. + rewrite <- Hyp_eq; rewrite H3 in H1; unfold adapted_couple in H1; + decompose [and] H1; clear H1; simpl in H9; rewrite H9; + unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + elim H6; clear H6; intros l' [lf' H6]; case (Req_dec t2 b); intro. + exists (cons a (cons b nil)); exists (cons r1 nil); + unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; + repeat split. + unfold ordered_Rlist in |- *; intros; simpl in H8; inversion H8; + [ simpl in |- *; assumption | elim (le_Sn_O _ H10) ]. + simpl in |- *; unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + simpl in |- *; unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + intros; simpl in H8; inversion H8. + unfold constant_D_eq, open_interval in |- *; intros; simpl in |- *; + simpl in H9; rewrite H3 in H1; unfold adapted_couple in H1; + decompose [and] H1; apply (H16 0%nat). + simpl in |- *; apply lt_O_Sn. + unfold open_interval in |- *; simpl in |- *; rewrite H7; simpl in H13; + rewrite H13; unfold Rmin in |- *; case (Rle_dec a b); + intro; [ assumption | elim n; assumption ]. + elim (le_Sn_O _ H10). + intros; simpl in H8; elim (lt_n_O _ H8). + intros; simpl in H8; inversion H8; + [ simpl in |- *; assumption | elim (le_Sn_O _ H10) ]. + assert (Hyp_min : Rmin t2 b = t2). + unfold Rmin in |- *; case (Rle_dec t2 b); intro; + [ reflexivity | elim n; assumption ]. + unfold adapted_couple in H6; elim H6; clear H6; intros; + elim (RList_P20 _ (StepFun_P9 H6 H7)); intros s1 [s2 [s3 H9]]; + induction lf' as [| r2 lf' Hreclf']. + unfold adapted_couple in H6; decompose [and] H6; rewrite H9 in H13; + simpl in H13; discriminate. + clear Hreclf'; case (Req_dec r1 r2); intro. + case (Req_dec (f t2) r1); intro. + exists (cons t1 (cons s2 s3)); exists (cons r1 lf'); rewrite H3 in H1; + rewrite H9 in H6; unfold adapted_couple in H6, H1; + decompose [and] H1; decompose [and] H6; clear H1 H6; + unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; + repeat split. + unfold ordered_Rlist in |- *; intros; simpl in H1; + induction i as [| i Hreci]. + simpl in |- *; apply Rle_trans with s1. + replace s1 with t2. + apply (H12 0%nat). + simpl in |- *; apply lt_O_Sn. + simpl in H19; rewrite H19; symmetry in |- *; apply Hyp_min. + apply (H16 0%nat); simpl in |- *; apply lt_O_Sn. + change (pos_Rl (cons s2 s3) i <= pos_Rl (cons s2 s3) (S i)) in |- *; + apply (H16 (S i)); simpl in |- *; assumption. + simpl in |- *; simpl in H14; rewrite H14; reflexivity. + simpl in |- *; simpl in H18; rewrite H18; unfold Rmax in |- *; + case (Rle_dec a b); case (Rle_dec t2 b); intros; reflexivity || elim n; + assumption. + simpl in |- *; simpl in H20; apply H20. + intros; simpl in H1; unfold constant_D_eq, open_interval in |- *; intros; + induction i as [| i Hreci]. + simpl in |- *; simpl in H6; case (total_order_T x t2); intro. + elim s; intro. + apply (H17 0%nat); + [ simpl in |- *; apply lt_O_Sn + | unfold open_interval in |- *; simpl in |- *; elim H6; intros; split; + assumption ]. + rewrite b0; assumption. + rewrite H10; apply (H22 0%nat); + [ simpl in |- *; apply lt_O_Sn + | unfold open_interval in |- *; simpl in |- *; replace s1 with t2; + [ elim H6; intros; split; assumption + | simpl in H19; rewrite H19; rewrite Hyp_min; reflexivity ] ]. + simpl in |- *; simpl in H6; apply (H22 (S i)); + [ simpl in |- *; assumption + | unfold open_interval in |- *; simpl in |- *; apply H6 ]. + intros; simpl in H1; rewrite H10; + change + (pos_Rl (cons r2 lf') i <> pos_Rl (cons r2 lf') (S i) \/ + f (pos_Rl (cons s1 (cons s2 s3)) (S i)) <> pos_Rl (cons r2 lf') i) + in |- *; rewrite <- H9; elim H8; intros; apply H6; + simpl in |- *; apply H1. + intros; induction i as [| i Hreci]. + simpl in |- *; red in |- *; intro; elim Hyp_eq; apply Rle_antisym. + apply (H12 0%nat); simpl in |- *; apply lt_O_Sn. + rewrite <- Hyp_min; rewrite H6; simpl in H19; rewrite <- H19; + apply (H16 0%nat); simpl in |- *; apply lt_O_Sn. + elim H8; intros; rewrite H9 in H21; apply (H21 (S i)); simpl in |- *; + simpl in H1; apply H1. + exists (cons t1 l'); exists (cons r1 (cons r2 lf')); rewrite H9 in H6; + rewrite H3 in H1; unfold adapted_couple in H1, H6; + decompose [and] H6; decompose [and] H1; clear H6 H1; + unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; + repeat split. + rewrite H9; unfold ordered_Rlist in |- *; intros; simpl in H1; + induction i as [| i Hreci]. + simpl in |- *; replace s1 with t2. + apply (H16 0%nat); simpl in |- *; apply lt_O_Sn. + simpl in H14; rewrite H14; rewrite Hyp_min; reflexivity. + change + (pos_Rl (cons s1 (cons s2 s3)) i <= pos_Rl (cons s1 (cons s2 s3)) (S i)) + in |- *; apply (H12 i); simpl in |- *; apply lt_S_n; + assumption. + simpl in |- *; simpl in H19; apply H19. + rewrite H9; simpl in |- *; simpl in H13; rewrite H13; unfold Rmax in |- *; + case (Rle_dec t2 b); case (Rle_dec a b); intros; reflexivity || elim n; + assumption. + rewrite H9; simpl in |- *; simpl in H15; rewrite H15; reflexivity. + intros; simpl in H1; unfold constant_D_eq, open_interval in |- *; intros; + induction i as [| i Hreci]. + simpl in |- *; rewrite H9 in H6; simpl in H6; apply (H22 0%nat). + simpl in |- *; apply lt_O_Sn. + unfold open_interval in |- *; simpl in |- *. + replace t2 with s1. + assumption. + simpl in H14; rewrite H14; rewrite Hyp_min; reflexivity. + change (f x = pos_Rl (cons r2 lf') i) in |- *; clear Hreci; apply (H17 i). + simpl in |- *; rewrite H9 in H1; simpl in H1; apply lt_S_n; apply H1. + rewrite H9 in H6; unfold open_interval in |- *; apply H6. + intros; simpl in H1; induction i as [| i Hreci]. + simpl in |- *; rewrite H9; right; simpl in |- *; replace s1 with t2. + assumption. + simpl in H14; rewrite H14; rewrite Hyp_min; reflexivity. + elim H8; intros; apply (H6 i). + simpl in |- *; apply lt_S_n; apply H1. + intros; rewrite H9; induction i as [| i Hreci]. + simpl in |- *; red in |- *; intro; elim Hyp_eq; apply Rle_antisym. + apply (H16 0%nat); simpl in |- *; apply lt_O_Sn. + rewrite <- Hyp_min; rewrite H6; simpl in H14; rewrite <- H14; right; + reflexivity. + elim H8; intros; rewrite <- H9; apply (H21 i); rewrite H9; rewrite H9 in H1; + simpl in |- *; simpl in H1; apply lt_S_n; apply H1. + exists (cons t1 l'); exists (cons r1 (cons r2 lf')); rewrite H9 in H6; + rewrite H3 in H1; unfold adapted_couple in H1, H6; + decompose [and] H6; decompose [and] H1; clear H6 H1; + unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; + repeat split. + rewrite H9; unfold ordered_Rlist in |- *; intros; simpl in H1; + induction i as [| i Hreci]. + simpl in |- *; replace s1 with t2. + apply (H15 0%nat); simpl in |- *; apply lt_O_Sn. + simpl in H13; rewrite H13; rewrite Hyp_min; reflexivity. + change + (pos_Rl (cons s1 (cons s2 s3)) i <= pos_Rl (cons s1 (cons s2 s3)) (S i)) + in |- *; apply (H11 i); simpl in |- *; apply lt_S_n; + assumption. + simpl in |- *; simpl in H18; apply H18. + rewrite H9; simpl in |- *; simpl in H12; rewrite H12; unfold Rmax in |- *; + case (Rle_dec t2 b); case (Rle_dec a b); intros; reflexivity || elim n; + assumption. + rewrite H9; simpl in |- *; simpl in H14; rewrite H14; reflexivity. + intros; simpl in H1; unfold constant_D_eq, open_interval in |- *; intros; + induction i as [| i Hreci]. + simpl in |- *; rewrite H9 in H6; simpl in H6; apply (H21 0%nat). + simpl in |- *; apply lt_O_Sn. + unfold open_interval in |- *; simpl in |- *; replace t2 with s1. + assumption. + simpl in H13; rewrite H13; rewrite Hyp_min; reflexivity. + change (f x = pos_Rl (cons r2 lf') i) in |- *; clear Hreci; apply (H16 i). + simpl in |- *; rewrite H9 in H1; simpl in H1; apply lt_S_n; apply H1. + rewrite H9 in H6; unfold open_interval in |- *; apply H6. + intros; simpl in H1; induction i as [| i Hreci]. + simpl in |- *; left; assumption. + elim H8; intros; apply (H6 i). + simpl in |- *; apply lt_S_n; apply H1. + intros; rewrite H9; induction i as [| i Hreci]. + simpl in |- *; red in |- *; intro; elim Hyp_eq; apply Rle_antisym. + apply (H15 0%nat); simpl in |- *; apply lt_O_Sn. + rewrite <- Hyp_min; rewrite H6; simpl in H13; rewrite <- H13; right; + reflexivity. + elim H8; intros; rewrite <- H9; apply (H20 i); rewrite H9; rewrite H9 in H1; + simpl in |- *; simpl in H1; apply lt_S_n; apply H1. + rewrite H3 in H1; clear H4; unfold adapted_couple in H1; decompose [and] H1; + clear H1; clear H H7 H9; cut (Rmax a b = b); + [ intro; rewrite H in H5; rewrite <- H5; apply RList_P7; + [ assumption | simpl in |- *; right; left; reflexivity ] + | unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ] ]. Qed. Lemma StepFun_P11 : - forall (a b r r1 r3 s1 s2 r4:R) (r2 lf1 s3 lf2:Rlist) - (f:R -> R), - a < b -> - adapted_couple f a b (cons r (cons r1 r2)) (cons r3 lf1) -> - adapted_couple_opt f a b (cons s1 (cons s2 s3)) (cons r4 lf2) -> r1 <= s2. -intros; unfold adapted_couple_opt in H1; elim H1; clear H1; intros; - unfold adapted_couple in H0, H1; decompose [and] H0; - decompose [and] H1; clear H0 H1; assert (H12 : r = s1). -simpl in H10; simpl in H5; rewrite H10; rewrite H5; reflexivity. -assert (H14 := H3 0%nat (lt_O_Sn _)); simpl in H14; elim H14; intro. -assert (H15 := H7 0%nat (lt_O_Sn _)); simpl in H15; elim H15; intro. -rewrite <- H12 in H1; case (Rle_dec r1 s2); intro; try assumption. -assert (H16 : s2 < r1); auto with real. -induction s3 as [| r0 s3 Hrecs3]. -simpl in H9; rewrite H9 in H16; cut (r1 <= Rmax a b). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H17 H16)). -rewrite <- H4; apply RList_P7; - [ assumption | simpl in |- *; right; left; reflexivity ]. -clear Hrecs3; induction lf2 as [| r5 lf2 Hreclf2]. -simpl in H11; discriminate. -clear Hreclf2; assert (H17 : r3 = r4). -set (x := (r + s2) / 2); assert (H17 := H8 0%nat (lt_O_Sn _)); - assert (H18 := H13 0%nat (lt_O_Sn _)); - unfold constant_D_eq, open_interval in H17, H18; simpl in H17; - simpl in H18; rewrite <- (H17 x). -rewrite <- (H18 x). -reflexivity. -rewrite <- H12; unfold x in |- *; 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; assumption - | 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 r); rewrite double; - apply Rplus_lt_compat_l; assumption - | discrR ] ]. -unfold x in |- *; 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; assumption - | discrR ] ]. -apply Rlt_trans with s2; - [ apply Rmult_lt_reg_l with 2; + forall (a b r r1 r3 s1 s2 r4:R) (r2 lf1 s3 lf2:Rlist) + (f:R -> R), + a < b -> + adapted_couple f a b (cons r (cons r1 r2)) (cons r3 lf1) -> + adapted_couple_opt f a b (cons s1 (cons s2 s3)) (cons r4 lf2) -> r1 <= s2. +Proof. + intros; unfold adapted_couple_opt in H1; elim H1; clear H1; intros; + unfold adapted_couple in H0, H1; decompose [and] H0; + decompose [and] H1; clear H0 H1; assert (H12 : r = s1). + simpl in H10; simpl in H5; rewrite H10; rewrite H5; reflexivity. + assert (H14 := H3 0%nat (lt_O_Sn _)); simpl in H14; elim H14; intro. + assert (H15 := H7 0%nat (lt_O_Sn _)); simpl in H15; elim H15; intro. + rewrite <- H12 in H1; case (Rle_dec r1 s2); intro; try assumption. + assert (H16 : s2 < r1); auto with real. + induction s3 as [| r0 s3 Hrecs3]. + simpl in H9; rewrite H9 in H16; cut (r1 <= Rmax a b). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H17 H16)). + rewrite <- H4; apply RList_P7; + [ assumption | simpl in |- *; right; left; reflexivity ]. + clear Hrecs3; induction lf2 as [| r5 lf2 Hreclf2]. + simpl in H11; discriminate. + clear Hreclf2; assert (H17 : r3 = r4). + set (x := (r + s2) / 2); assert (H17 := H8 0%nat (lt_O_Sn _)); + assert (H18 := H13 0%nat (lt_O_Sn _)); + unfold constant_D_eq, open_interval in H17, H18; simpl in H17; + simpl in H18; rewrite <- (H17 x). + rewrite <- (H18 x). + reflexivity. + rewrite <- H12; unfold x in |- *; 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; assumption + | 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 r); rewrite double; + apply Rplus_lt_compat_l; assumption + | discrR ] ]. + unfold x in |- *; 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 (Rplus_comm r); rewrite double; - apply Rplus_lt_compat_l; assumption - | discrR ] ] - | assumption ]. -assert (H18 : f s2 = r3). -apply (H8 0%nat); - [ simpl in |- *; apply lt_O_Sn - | unfold open_interval in |- *; simpl in |- *; split; assumption ]. -assert (H19 : r3 = r5). -assert (H19 := H7 1%nat); simpl in H19; - assert (H20 := H19 (lt_n_S _ _ (lt_O_Sn _))); elim H20; - intro. -set (x := (s2 + Rmin r1 r0) / 2); assert (H22 := H8 0%nat); - assert (H23 := H13 1%nat); simpl in H22; simpl in H23; - rewrite <- (H22 (lt_O_Sn _) x). -rewrite <- (H23 (lt_n_S _ _ (lt_O_Sn _)) x). -reflexivity. -unfold open_interval in |- *; simpl in |- *; unfold x in |- *; 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; - unfold Rmin in |- *; case (Rle_dec r1 r0); intro; - assumption - | 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 double; - apply Rlt_le_trans with (r0 + Rmin r1 r0); - [ do 2 rewrite <- (Rplus_comm (Rmin r1 r0)); apply Rplus_lt_compat_l; - assumption - | apply Rplus_le_compat_l; apply Rmin_r ] - | discrR ] ]. -unfold open_interval in |- *; simpl in |- *; unfold x in |- *; split. -apply Rlt_trans with s2; - [ assumption - | apply Rmult_lt_reg_l with 2; + | 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; assumption + | discrR ] ]. + apply Rlt_trans with s2; + [ 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 r); rewrite double; + apply Rplus_lt_compat_l; assumption + | discrR ] ] + | assumption ]. + assert (H18 : f s2 = r3). + apply (H8 0%nat); + [ simpl in |- *; apply lt_O_Sn + | unfold open_interval in |- *; simpl in |- *; split; assumption ]. + assert (H19 : r3 = r5). + assert (H19 := H7 1%nat); simpl in H19; + assert (H20 := H19 (lt_n_S _ _ (lt_O_Sn _))); elim H20; + intro. + set (x := (s2 + Rmin r1 r0) / 2); assert (H22 := H8 0%nat); + assert (H23 := H13 1%nat); simpl in H22; simpl in H23; + rewrite <- (H22 (lt_O_Sn _) x). + rewrite <- (H23 (lt_n_S _ _ (lt_O_Sn _)) x). + reflexivity. + unfold open_interval in |- *; simpl in |- *; unfold x in |- *; 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; + unfold Rmin in |- *; case (Rle_dec r1 r0); intro; + assumption + | 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 double; + apply Rlt_le_trans with (r0 + Rmin r1 r0); + [ do 2 rewrite <- (Rplus_comm (Rmin r1 r0)); apply Rplus_lt_compat_l; + assumption + | apply Rplus_le_compat_l; apply Rmin_r ] + | discrR ] ]. + unfold open_interval in |- *; simpl in |- *; unfold x in |- *; split. + apply Rlt_trans with s2; + [ assumption + | 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; + unfold Rmin in |- *; case (Rle_dec r1 r0); + intro; assumption + | 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 double; apply Rplus_lt_compat_l; - unfold Rmin in |- *; case (Rle_dec r1 r0); - intro; assumption - | 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 double; - apply Rlt_le_trans with (r1 + Rmin r1 r0); - [ do 2 rewrite <- (Rplus_comm (Rmin r1 r0)); apply Rplus_lt_compat_l; - assumption - | apply Rplus_le_compat_l; apply Rmin_l ] - | discrR ] ]. -elim H2; clear H2; intros; assert (H23 := H22 1%nat); simpl in H23; - assert (H24 := H23 (lt_n_S _ _ (lt_O_Sn _))); elim H24; - assumption. -elim H2; intros; assert (H22 := H20 0%nat); simpl in H22; - assert (H23 := H22 (lt_O_Sn _)); elim H23; intro; - [ elim H24; rewrite <- H17; rewrite <- H19; reflexivity - | elim H24; rewrite <- H17; assumption ]. -elim H2; clear H2; intros; assert (H17 := H16 0%nat); simpl in H17; - elim (H17 (lt_O_Sn _)); assumption. -rewrite <- H0; rewrite H12; apply (H7 0%nat); simpl in |- *; apply lt_O_Sn. + | unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; + rewrite <- Rinv_r_sym; + [ rewrite Rmult_1_l; rewrite double; + apply Rlt_le_trans with (r1 + Rmin r1 r0); + [ do 2 rewrite <- (Rplus_comm (Rmin r1 r0)); apply Rplus_lt_compat_l; + assumption + | apply Rplus_le_compat_l; apply Rmin_l ] + | discrR ] ]. + elim H2; clear H2; intros; assert (H23 := H22 1%nat); simpl in H23; + assert (H24 := H23 (lt_n_S _ _ (lt_O_Sn _))); elim H24; + assumption. + elim H2; intros; assert (H22 := H20 0%nat); simpl in H22; + assert (H23 := H22 (lt_O_Sn _)); elim H23; intro; + [ elim H24; rewrite <- H17; rewrite <- H19; reflexivity + | elim H24; rewrite <- H17; assumption ]. + elim H2; clear H2; intros; assert (H17 := H16 0%nat); simpl in H17; + elim (H17 (lt_O_Sn _)); assumption. + rewrite <- H0; rewrite H12; apply (H7 0%nat); simpl in |- *; apply lt_O_Sn. Qed. Lemma StepFun_P12 : - forall (a b:R) (f:R -> R) (l lf:Rlist), - adapted_couple_opt f a b l lf -> adapted_couple_opt f b a l lf. -unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; intros; - decompose [and] H; clear H; repeat split; try assumption. -rewrite H0; unfold Rmin in |- *; case (Rle_dec a b); intro; - case (Rle_dec b a); intro; try reflexivity. -apply Rle_antisym; assumption. -apply Rle_antisym; auto with real. -rewrite H3; unfold Rmax in |- *; case (Rle_dec a b); intro; - case (Rle_dec b a); intro; try reflexivity. -apply Rle_antisym; assumption. -apply Rle_antisym; auto with real. + forall (a b:R) (f:R -> R) (l lf:Rlist), + adapted_couple_opt f a b l lf -> adapted_couple_opt f b a l lf. +Proof. + unfold adapted_couple_opt in |- *; unfold adapted_couple in |- *; intros; + decompose [and] H; clear H; repeat split; try assumption. + rewrite H0; unfold Rmin in |- *; case (Rle_dec a b); intro; + case (Rle_dec b a); intro; try reflexivity. + apply Rle_antisym; assumption. + apply Rle_antisym; auto with real. + rewrite H3; unfold Rmax in |- *; case (Rle_dec a b); intro; + case (Rle_dec b a); intro; try reflexivity. + apply Rle_antisym; assumption. + apply Rle_antisym; auto with real. Qed. Lemma StepFun_P13 : - forall (a b r r1 r3 s1 s2 r4:R) (r2 lf1 s3 lf2:Rlist) - (f:R -> R), - a <> b -> - adapted_couple f a b (cons r (cons r1 r2)) (cons r3 lf1) -> - adapted_couple_opt f a b (cons s1 (cons s2 s3)) (cons r4 lf2) -> r1 <= s2. -intros; case (total_order_T a b); intro. -elim s; intro. -eapply StepFun_P11; [ apply a0 | apply H0 | apply H1 ]. -elim H; assumption. -eapply StepFun_P11; - [ apply r0 | apply StepFun_P2; apply H0 | apply StepFun_P12; apply H1 ]. + forall (a b r r1 r3 s1 s2 r4:R) (r2 lf1 s3 lf2:Rlist) + (f:R -> R), + a <> b -> + adapted_couple f a b (cons r (cons r1 r2)) (cons r3 lf1) -> + adapted_couple_opt f a b (cons s1 (cons s2 s3)) (cons r4 lf2) -> r1 <= s2. +Proof. + intros; case (total_order_T a b); intro. + elim s; intro. + eapply StepFun_P11; [ apply a0 | apply H0 | apply H1 ]. + elim H; assumption. + eapply StepFun_P11; + [ apply r0 | apply StepFun_P2; apply H0 | apply StepFun_P12; apply H1 ]. Qed. Lemma StepFun_P14 : - forall (f:R -> R) (l1 l2 lf1 lf2:Rlist) (a b:R), - a <= b -> - adapted_couple f a b l1 lf1 -> - adapted_couple_opt f a b l2 lf2 -> Int_SF lf1 l1 = Int_SF lf2 l2. -simple induction l1. -intros l2 lf1 lf2 a b Hyp H H0; unfold adapted_couple in H; decompose [and] H; - clear H H0 H2 H3 H1 H6; simpl in H4; discriminate. -simple induction r0. -intros; case (Req_dec a b); intro. -unfold adapted_couple_opt in H2; elim H2; intros; rewrite (StepFun_P8 H4 H3); - rewrite (StepFun_P8 H1 H3); reflexivity. -assert (H4 := StepFun_P9 H1 H3); simpl in H4; - elim (le_Sn_O _ (le_S_n _ _ H4)). -intros; clear H; unfold adapted_couple_opt in H3; elim H3; clear H3; intros; - case (Req_dec a b); intro. -rewrite (StepFun_P8 H2 H4); rewrite (StepFun_P8 H H4); reflexivity. -assert (Hyp_min : Rmin a b = a). -unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -assert (Hyp_max : Rmax a b = b). -unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -elim (RList_P20 _ (StepFun_P9 H H4)); intros s1 [s2 [s3 H5]]; rewrite H5 in H; - rewrite H5; induction lf1 as [| r3 lf1 Hreclf1]. -unfold adapted_couple in H2; decompose [and] H2; - clear H H2 H4 H5 H3 H6 H8 H7 H11; simpl in H9; discriminate. -clear Hreclf1; induction lf2 as [| r4 lf2 Hreclf2]. -unfold adapted_couple in H; decompose [and] H; - clear H H2 H4 H5 H3 H6 H8 H7 H11; simpl in H9; discriminate. -clear Hreclf2; assert (H6 : r = s1). -unfold adapted_couple in H, H2; decompose [and] H; decompose [and] H2; - clear H H2; simpl in H13; simpl in H8; rewrite H13; - rewrite H8; reflexivity. -assert (H7 : r3 = r4 \/ r = r1). -case (Req_dec r r1); intro. -right; assumption. -left; cut (r1 <= s2). -intro; unfold adapted_couple in H2, H; decompose [and] H; decompose [and] H2; - clear H H2; set (x := (r + r1) / 2); assert (H18 := H14 0%nat); - assert (H20 := H19 0%nat); unfold constant_D_eq, open_interval in H18, H20; - simpl in H18; simpl in H20; rewrite <- (H18 (lt_O_Sn _) x). -rewrite <- (H20 (lt_O_Sn _) x). -reflexivity. -assert (H21 := H13 0%nat (lt_O_Sn _)); simpl in H21; elim H21; intro; - [ idtac | elim H7; assumption ]; unfold x in |- *; - 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 r1); rewrite double; - apply Rplus_lt_compat_l; apply H - | discrR ] ]. -rewrite <- H6; assert (H21 := H13 0%nat (lt_O_Sn _)); simpl in H21; elim H21; - intro; [ idtac | elim H7; assumption ]; unfold x in |- *; - 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 Rlt_le_trans with r1; - [ apply Rmult_lt_reg_l with 2; + forall (f:R -> R) (l1 l2 lf1 lf2:Rlist) (a b:R), + a <= b -> + adapted_couple f a b l1 lf1 -> + adapted_couple_opt f a b l2 lf2 -> Int_SF lf1 l1 = Int_SF lf2 l2. +Proof. + simple induction l1. + intros l2 lf1 lf2 a b Hyp H H0; unfold adapted_couple in H; decompose [and] H; + clear H H0 H2 H3 H1 H6; simpl in H4; discriminate. + simple induction r0. + intros; case (Req_dec a b); intro. + unfold adapted_couple_opt in H2; elim H2; intros; rewrite (StepFun_P8 H4 H3); + rewrite (StepFun_P8 H1 H3); reflexivity. + assert (H4 := StepFun_P9 H1 H3); simpl in H4; + elim (le_Sn_O _ (le_S_n _ _ H4)). + intros; clear H; unfold adapted_couple_opt in H3; elim H3; clear H3; intros; + case (Req_dec a b); intro. + rewrite (StepFun_P8 H2 H4); rewrite (StepFun_P8 H H4); reflexivity. + assert (Hyp_min : Rmin a b = a). + unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + assert (Hyp_max : Rmax a b = b). + unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + elim (RList_P20 _ (StepFun_P9 H H4)); intros s1 [s2 [s3 H5]]; rewrite H5 in H; + rewrite H5; induction lf1 as [| r3 lf1 Hreclf1]. + unfold adapted_couple in H2; decompose [and] H2; + clear H H2 H4 H5 H3 H6 H8 H7 H11; simpl in H9; discriminate. + clear Hreclf1; induction lf2 as [| r4 lf2 Hreclf2]. + unfold adapted_couple in H; decompose [and] H; + clear H H2 H4 H5 H3 H6 H8 H7 H11; simpl in H9; discriminate. + clear Hreclf2; assert (H6 : r = s1). + unfold adapted_couple in H, H2; decompose [and] H; decompose [and] H2; + clear H H2; simpl in H13; simpl in H8; rewrite H13; + rewrite H8; reflexivity. + assert (H7 : r3 = r4 \/ r = r1). + case (Req_dec r r1); intro. + right; assumption. + left; cut (r1 <= s2). + intro; unfold adapted_couple in H2, H; decompose [and] H; decompose [and] H2; + clear H H2; set (x := (r + r1) / 2); assert (H18 := H14 0%nat); + assert (H20 := H19 0%nat); unfold constant_D_eq, open_interval in H18, H20; + simpl in H18; simpl in H20; rewrite <- (H18 (lt_O_Sn _) x). + rewrite <- (H20 (lt_O_Sn _) x). + reflexivity. + assert (H21 := H13 0%nat (lt_O_Sn _)); simpl in H21; elim H21; intro; + [ idtac | elim H7; assumption ]; unfold x in |- *; + 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 r1); rewrite double; - apply Rplus_lt_compat_l; apply H - | discrR ] ] - | assumption ]. -eapply StepFun_P13. -apply H4. -apply H2. -unfold adapted_couple_opt in |- *; split. -apply H. -rewrite H5 in H3; apply H3. -assert (H8 : r1 <= s2). -eapply StepFun_P13. -apply H4. -apply H2. -unfold adapted_couple_opt in |- *; split. -apply H. -rewrite H5 in H3; apply H3. -elim H7; intro. -simpl in |- *; elim H8; intro. -replace (r4 * (s2 - s1)) with (r3 * (r1 - r) + r3 * (s2 - r1)); - [ idtac | rewrite H9; rewrite H6; ring ]. -rewrite Rplus_assoc; apply Rplus_eq_compat_l; - change - (Int_SF lf1 (cons r1 r2) = Int_SF (cons r3 lf2) (cons r1 (cons s2 s3))) - in |- *; apply H0 with r1 b. -unfold adapted_couple in H2; decompose [and] H2; clear H2; - replace b with (Rmax a b). -rewrite <- H12; apply RList_P7; - [ assumption | simpl in |- *; right; left; reflexivity ]. -eapply StepFun_P7. -apply H1. -apply H2. -unfold adapted_couple_opt in |- *; split. -apply StepFun_P7 with a a r3. -apply H1. -unfold adapted_couple in H2, H; decompose [and] H2; decompose [and] H; - clear H H2; assert (H20 : r = a). -simpl in H13; rewrite H13; apply Hyp_min. -unfold adapted_couple in |- *; repeat split. -unfold ordered_Rlist in |- *; intros; simpl in H; induction i as [| i Hreci]. -simpl in |- *; rewrite <- H20; apply (H11 0%nat). -simpl in |- *; apply lt_O_Sn. -induction i as [| i Hreci0]. -simpl in |- *; assumption. -change (pos_Rl (cons s2 s3) i <= pos_Rl (cons s2 s3) (S i)) in |- *; - apply (H15 (S i)); simpl in |- *; apply lt_S_n; assumption. -simpl in |- *; symmetry in |- *; apply Hyp_min. -rewrite <- H17; reflexivity. -simpl in H19; simpl in |- *; rewrite H19; reflexivity. -intros; simpl in H; unfold constant_D_eq, open_interval in |- *; intros; - induction i as [| i Hreci]. -simpl in |- *; apply (H16 0%nat). -simpl in |- *; apply lt_O_Sn. -simpl in H2; rewrite <- H20 in H2; unfold open_interval in |- *; - simpl in |- *; apply H2. -clear Hreci; induction i as [| i Hreci]. -simpl in |- *; simpl in H2; rewrite H9; apply (H21 0%nat). -simpl in |- *; apply lt_O_Sn. -unfold open_interval in |- *; simpl in |- *; elim H2; intros; split. -apply Rle_lt_trans with r1; try assumption; rewrite <- H6; apply (H11 0%nat); - simpl in |- *; apply lt_O_Sn. -assumption. -clear Hreci; simpl in |- *; apply (H21 (S i)). -simpl in |- *; apply lt_S_n; assumption. -unfold open_interval in |- *; apply H2. -elim H3; clear H3; intros; split. -rewrite H9; - change - (forall i:nat, - (i < pred (Rlength (cons r4 lf2)))%nat -> - pos_Rl (cons r4 lf2) i <> pos_Rl (cons r4 lf2) (S i) \/ - f (pos_Rl (cons s1 (cons s2 s3)) (S i)) <> pos_Rl (cons r4 lf2) i) - in |- *; rewrite <- H5; apply H3. -rewrite H5 in H11; intros; simpl in H12; induction i as [| i Hreci]. -simpl in |- *; red in |- *; intro; rewrite H13 in H10; - elim (Rlt_irrefl _ H10). -clear Hreci; apply (H11 (S i)); simpl in |- *; apply H12. -rewrite H9; rewrite H10; rewrite H6; apply Rplus_eq_compat_l; rewrite <- H10; - apply H0 with r1 b. -unfold adapted_couple in H2; decompose [and] H2; clear H2; - replace b with (Rmax a b). -rewrite <- H12; apply RList_P7; - [ assumption | simpl in |- *; right; left; reflexivity ]. -eapply StepFun_P7. -apply H1. -apply H2. -unfold adapted_couple_opt in |- *; split. -apply StepFun_P7 with a a r3. -apply H1. -unfold adapted_couple in H2, H; decompose [and] H2; decompose [and] H; - clear H H2; assert (H20 : r = a). -simpl in H13; rewrite H13; apply Hyp_min. -unfold adapted_couple in |- *; repeat split. -unfold ordered_Rlist in |- *; intros; simpl in H; induction i as [| i Hreci]. -simpl in |- *; rewrite <- H20; apply (H11 0%nat); simpl in |- *; - apply lt_O_Sn. -rewrite H10; apply (H15 (S i)); simpl in |- *; assumption. -simpl in |- *; symmetry in |- *; apply Hyp_min. -rewrite <- H17; rewrite H10; reflexivity. -simpl in H19; simpl in |- *; apply H19. -intros; simpl in H; unfold constant_D_eq, open_interval in |- *; intros; - induction i as [| i Hreci]. -simpl in |- *; apply (H16 0%nat). -simpl in |- *; apply lt_O_Sn. -simpl in H2; rewrite <- H20 in H2; unfold open_interval in |- *; - simpl in |- *; apply H2. -clear Hreci; simpl in |- *; apply (H21 (S i)). -simpl in |- *; assumption. -rewrite <- H10; unfold open_interval in |- *; apply H2. -elim H3; clear H3; intros; split. -rewrite H5 in H3; intros; apply (H3 (S i)). -simpl in |- *; replace (Rlength lf2) with (S (pred (Rlength lf2))). -apply lt_n_S; apply H12. -symmetry in |- *; apply S_pred with 0%nat; apply neq_O_lt; red in |- *; - intro; rewrite <- H13 in H12; elim (lt_n_O _ H12). -intros; simpl in H12; rewrite H10; rewrite H5 in H11; apply (H11 (S i)); - simpl in |- *; apply lt_n_S; apply H12. -simpl in |- *; rewrite H9; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rmult_0_r; rewrite Rplus_0_l; - change - (Int_SF lf1 (cons r1 r2) = Int_SF (cons r4 lf2) (cons s1 (cons s2 s3))) - in |- *; eapply H0. -apply H1. -2: rewrite H5 in H3; unfold adapted_couple_opt in |- *; split; assumption. -assert (H10 : r = a). -unfold adapted_couple in H2; decompose [and] H2; clear H2; simpl in H12; - rewrite H12; apply Hyp_min. -rewrite <- H9; rewrite H10; apply StepFun_P7 with a r r3; - [ apply H1 - | pattern a at 2 in |- *; rewrite <- H10; pattern r at 2 in |- *; rewrite H9; - apply H2 ]. + | unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; + rewrite <- Rinv_r_sym; + [ rewrite Rmult_1_l; rewrite <- (Rplus_comm r1); rewrite double; + apply Rplus_lt_compat_l; apply H + | discrR ] ]. + rewrite <- H6; assert (H21 := H13 0%nat (lt_O_Sn _)); simpl in H21; elim H21; + intro; [ idtac | elim H7; assumption ]; unfold x in |- *; + 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 Rlt_le_trans with r1; + [ 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 r1); rewrite double; + apply Rplus_lt_compat_l; apply H + | discrR ] ] + | assumption ]. + eapply StepFun_P13. + apply H4. + apply H2. + unfold adapted_couple_opt in |- *; split. + apply H. + rewrite H5 in H3; apply H3. + assert (H8 : r1 <= s2). + eapply StepFun_P13. + apply H4. + apply H2. + unfold adapted_couple_opt in |- *; split. + apply H. + rewrite H5 in H3; apply H3. + elim H7; intro. + simpl in |- *; elim H8; intro. + replace (r4 * (s2 - s1)) with (r3 * (r1 - r) + r3 * (s2 - r1)); + [ idtac | rewrite H9; rewrite H6; ring ]. + rewrite Rplus_assoc; apply Rplus_eq_compat_l; + change + (Int_SF lf1 (cons r1 r2) = Int_SF (cons r3 lf2) (cons r1 (cons s2 s3))) + in |- *; apply H0 with r1 b. + unfold adapted_couple in H2; decompose [and] H2; clear H2; + replace b with (Rmax a b). + rewrite <- H12; apply RList_P7; + [ assumption | simpl in |- *; right; left; reflexivity ]. + eapply StepFun_P7. + apply H1. + apply H2. + unfold adapted_couple_opt in |- *; split. + apply StepFun_P7 with a a r3. + apply H1. + unfold adapted_couple in H2, H; decompose [and] H2; decompose [and] H; + clear H H2; assert (H20 : r = a). + simpl in H13; rewrite H13; apply Hyp_min. + unfold adapted_couple in |- *; repeat split. + unfold ordered_Rlist in |- *; intros; simpl in H; induction i as [| i Hreci]. + simpl in |- *; rewrite <- H20; apply (H11 0%nat). + simpl in |- *; apply lt_O_Sn. + induction i as [| i Hreci0]. + simpl in |- *; assumption. + change (pos_Rl (cons s2 s3) i <= pos_Rl (cons s2 s3) (S i)) in |- *; + apply (H15 (S i)); simpl in |- *; apply lt_S_n; assumption. + simpl in |- *; symmetry in |- *; apply Hyp_min. + rewrite <- H17; reflexivity. + simpl in H19; simpl in |- *; rewrite H19; reflexivity. + intros; simpl in H; unfold constant_D_eq, open_interval in |- *; intros; + induction i as [| i Hreci]. + simpl in |- *; apply (H16 0%nat). + simpl in |- *; apply lt_O_Sn. + simpl in H2; rewrite <- H20 in H2; unfold open_interval in |- *; + simpl in |- *; apply H2. + clear Hreci; induction i as [| i Hreci]. + simpl in |- *; simpl in H2; rewrite H9; apply (H21 0%nat). + simpl in |- *; apply lt_O_Sn. + unfold open_interval in |- *; simpl in |- *; elim H2; intros; split. + apply Rle_lt_trans with r1; try assumption; rewrite <- H6; apply (H11 0%nat); + simpl in |- *; apply lt_O_Sn. + assumption. + clear Hreci; simpl in |- *; apply (H21 (S i)). + simpl in |- *; apply lt_S_n; assumption. + unfold open_interval in |- *; apply H2. + elim H3; clear H3; intros; split. + rewrite H9; + change + (forall i:nat, + (i < pred (Rlength (cons r4 lf2)))%nat -> + pos_Rl (cons r4 lf2) i <> pos_Rl (cons r4 lf2) (S i) \/ + f (pos_Rl (cons s1 (cons s2 s3)) (S i)) <> pos_Rl (cons r4 lf2) i) + in |- *; rewrite <- H5; apply H3. + rewrite H5 in H11; intros; simpl in H12; induction i as [| i Hreci]. + simpl in |- *; red in |- *; intro; rewrite H13 in H10; + elim (Rlt_irrefl _ H10). + clear Hreci; apply (H11 (S i)); simpl in |- *; apply H12. + rewrite H9; rewrite H10; rewrite H6; apply Rplus_eq_compat_l; rewrite <- H10; + apply H0 with r1 b. + unfold adapted_couple in H2; decompose [and] H2; clear H2; + replace b with (Rmax a b). + rewrite <- H12; apply RList_P7; + [ assumption | simpl in |- *; right; left; reflexivity ]. + eapply StepFun_P7. + apply H1. + apply H2. + unfold adapted_couple_opt in |- *; split. + apply StepFun_P7 with a a r3. + apply H1. + unfold adapted_couple in H2, H; decompose [and] H2; decompose [and] H; + clear H H2; assert (H20 : r = a). + simpl in H13; rewrite H13; apply Hyp_min. + unfold adapted_couple in |- *; repeat split. + unfold ordered_Rlist in |- *; intros; simpl in H; induction i as [| i Hreci]. + simpl in |- *; rewrite <- H20; apply (H11 0%nat); simpl in |- *; + apply lt_O_Sn. + rewrite H10; apply (H15 (S i)); simpl in |- *; assumption. + simpl in |- *; symmetry in |- *; apply Hyp_min. + rewrite <- H17; rewrite H10; reflexivity. + simpl in H19; simpl in |- *; apply H19. + intros; simpl in H; unfold constant_D_eq, open_interval in |- *; intros; + induction i as [| i Hreci]. + simpl in |- *; apply (H16 0%nat). + simpl in |- *; apply lt_O_Sn. + simpl in H2; rewrite <- H20 in H2; unfold open_interval in |- *; + simpl in |- *; apply H2. + clear Hreci; simpl in |- *; apply (H21 (S i)). + simpl in |- *; assumption. + rewrite <- H10; unfold open_interval in |- *; apply H2. + elim H3; clear H3; intros; split. + rewrite H5 in H3; intros; apply (H3 (S i)). + simpl in |- *; replace (Rlength lf2) with (S (pred (Rlength lf2))). + apply lt_n_S; apply H12. + symmetry in |- *; apply S_pred with 0%nat; apply neq_O_lt; red in |- *; + intro; rewrite <- H13 in H12; elim (lt_n_O _ H12). + intros; simpl in H12; rewrite H10; rewrite H5 in H11; apply (H11 (S i)); + simpl in |- *; apply lt_n_S; apply H12. + simpl in |- *; rewrite H9; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rmult_0_r; rewrite Rplus_0_l; + change + (Int_SF lf1 (cons r1 r2) = Int_SF (cons r4 lf2) (cons s1 (cons s2 s3))) + in |- *; eapply H0. + apply H1. + 2: rewrite H5 in H3; unfold adapted_couple_opt in |- *; split; assumption. + assert (H10 : r = a). + unfold adapted_couple in H2; decompose [and] H2; clear H2; simpl in H12; + rewrite H12; apply Hyp_min. + rewrite <- H9; rewrite H10; apply StepFun_P7 with a r r3; + [ apply H1 + | pattern a at 2 in |- *; rewrite <- H10; pattern r at 2 in |- *; rewrite H9; + apply H2 ]. Qed. Lemma StepFun_P15 : - forall (f:R -> R) (l1 l2 lf1 lf2:Rlist) (a b:R), - adapted_couple f a b l1 lf1 -> - adapted_couple_opt f a b l2 lf2 -> Int_SF lf1 l1 = Int_SF lf2 l2. -intros; case (Rle_dec a b); intro; - [ apply (StepFun_P14 r H H0) - | assert (H1 : b <= a); - [ auto with real - | eapply StepFun_P14; - [ apply H1 | apply StepFun_P2; apply H | apply StepFun_P12; apply H0 ] ] ]. + forall (f:R -> R) (l1 l2 lf1 lf2:Rlist) (a b:R), + adapted_couple f a b l1 lf1 -> + adapted_couple_opt f a b l2 lf2 -> Int_SF lf1 l1 = Int_SF lf2 l2. +Proof. + intros; case (Rle_dec a b); intro; + [ apply (StepFun_P14 r H H0) + | assert (H1 : b <= a); + [ auto with real + | eapply StepFun_P14; + [ apply H1 | apply StepFun_P2; apply H | apply StepFun_P12; apply H0 ] ] ]. Qed. Lemma StepFun_P16 : - forall (f:R -> R) (l lf:Rlist) (a b:R), - adapted_couple f a b l lf -> + forall (f:R -> R) (l lf:Rlist) (a b:R), + adapted_couple f a b l lf -> exists l' : Rlist, - (exists lf' : Rlist, adapted_couple_opt f a b l' lf'). -intros; case (Rle_dec a b); intro; - [ apply (StepFun_P10 r H) - | assert (H1 : b <= a); - [ auto with real - | assert (H2 := StepFun_P10 H1 (StepFun_P2 H)); elim H2; - intros l' [lf' H3]; exists l'; exists lf'; apply StepFun_P12; - assumption ] ]. + (exists lf' : Rlist, adapted_couple_opt f a b l' lf'). +Proof. + intros; case (Rle_dec a b); intro; + [ apply (StepFun_P10 r H) + | assert (H1 : b <= a); + [ auto with real + | assert (H2 := StepFun_P10 H1 (StepFun_P2 H)); elim H2; + intros l' [lf' H3]; exists l'; exists lf'; apply StepFun_P12; + assumption ] ]. Qed. Lemma StepFun_P17 : - forall (f:R -> R) (l1 l2 lf1 lf2:Rlist) (a b:R), - adapted_couple f a b l1 lf1 -> - adapted_couple f a b l2 lf2 -> Int_SF lf1 l1 = Int_SF lf2 l2. -intros; elim (StepFun_P16 H); intros l' [lf' H1]; rewrite (StepFun_P15 H H1); - rewrite (StepFun_P15 H0 H1); reflexivity. + forall (f:R -> R) (l1 l2 lf1 lf2:Rlist) (a b:R), + adapted_couple f a b l1 lf1 -> + adapted_couple f a b l2 lf2 -> Int_SF lf1 l1 = Int_SF lf2 l2. +Proof. + intros; elim (StepFun_P16 H); intros l' [lf' H1]; rewrite (StepFun_P15 H H1); + rewrite (StepFun_P15 H0 H1); reflexivity. Qed. Lemma StepFun_P18 : - forall a b c:R, RiemannInt_SF (mkStepFun (StepFun_P4 a b c)) = c * (b - a). -intros; unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro. -replace - (Int_SF (subdivision_val (mkStepFun (StepFun_P4 a b c))) + forall a b c:R, RiemannInt_SF (mkStepFun (StepFun_P4 a b c)) = c * (b - a). +Proof. + intros; unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro. + replace + (Int_SF (subdivision_val (mkStepFun (StepFun_P4 a b c))) (subdivision (mkStepFun (StepFun_P4 a b c)))) with - (Int_SF (cons c nil) (cons a (cons b nil))); - [ simpl in |- *; ring - | apply StepFun_P17 with (fct_cte c) a b; - [ apply StepFun_P3; assumption - | apply (StepFun_P1 (mkStepFun (StepFun_P4 a b c))) ] ]. -replace - (Int_SF (subdivision_val (mkStepFun (StepFun_P4 a b c))) + (Int_SF (cons c nil) (cons a (cons b nil))); + [ simpl in |- *; ring + | apply StepFun_P17 with (fct_cte c) a b; + [ apply StepFun_P3; assumption + | apply (StepFun_P1 (mkStepFun (StepFun_P4 a b c))) ] ]. + replace + (Int_SF (subdivision_val (mkStepFun (StepFun_P4 a b c))) (subdivision (mkStepFun (StepFun_P4 a b c)))) with - (Int_SF (cons c nil) (cons b (cons a nil))); - [ simpl in |- *; ring - | apply StepFun_P17 with (fct_cte c) a b; - [ apply StepFun_P2; apply StepFun_P3; auto with real - | apply (StepFun_P1 (mkStepFun (StepFun_P4 a b c))) ] ]. + (Int_SF (cons c nil) (cons b (cons a nil))); + [ simpl in |- *; ring + | apply StepFun_P17 with (fct_cte c) a b; + [ apply StepFun_P2; apply StepFun_P3; auto with real + | apply (StepFun_P1 (mkStepFun (StepFun_P4 a b c))) ] ]. Qed. Lemma StepFun_P19 : - forall (l1:Rlist) (f g:R -> R) (l:R), - Int_SF (FF l1 (fun x:R => f x + l * g x)) l1 = - Int_SF (FF l1 f) l1 + l * Int_SF (FF l1 g) l1. -intros; induction l1 as [| r l1 Hrecl1]; - [ simpl in |- *; ring - | induction l1 as [| r0 l1 Hrecl0]; simpl in |- *; - [ ring | simpl in Hrecl1; rewrite Hrecl1; ring ] ]. + forall (l1:Rlist) (f g:R -> R) (l:R), + Int_SF (FF l1 (fun x:R => f x + l * g x)) l1 = + Int_SF (FF l1 f) l1 + l * Int_SF (FF l1 g) l1. +Proof. + intros; induction l1 as [| r l1 Hrecl1]; + [ simpl in |- *; ring + | induction l1 as [| r0 l1 Hrecl0]; simpl in |- *; + [ ring | simpl in Hrecl1; rewrite Hrecl1; ring ] ]. Qed. Lemma StepFun_P20 : - forall (l:Rlist) (f:R -> R), - (0 < Rlength l)%nat -> Rlength l = S (Rlength (FF l f)). -intros l f H; induction l; - [ elim (lt_irrefl _ H) - | simpl in |- *; rewrite RList_P18; rewrite RList_P14; reflexivity ]. + forall (l:Rlist) (f:R -> R), + (0 < Rlength l)%nat -> Rlength l = S (Rlength (FF l f)). +Proof. + intros l f H; induction l; + [ elim (lt_irrefl _ H) + | simpl in |- *; rewrite RList_P18; rewrite RList_P14; reflexivity ]. Qed. Lemma StepFun_P21 : - forall (a b:R) (f:R -> R) (l:Rlist), - is_subdivision f a b l -> adapted_couple f a b l (FF l f). -intros; unfold adapted_couple in |- *; unfold is_subdivision in X; - unfold adapted_couple in X; elim X; clear X; intros; - decompose [and] p; clear p; repeat split; try assumption. -apply StepFun_P20; rewrite H2; apply lt_O_Sn. -intros; assert (H5 := H4 _ H3); unfold constant_D_eq, open_interval in H5; - unfold constant_D_eq, open_interval in |- *; intros; - induction l as [| r l Hrecl]. -discriminate. -unfold FF in |- *; rewrite RList_P12. -simpl in |- *; - change (f x0 = f (pos_Rl (mid_Rlist (cons r l) r) (S i))) in |- *; - rewrite RList_P13; try assumption; rewrite (H5 x0 H6); - rewrite H5. -reflexivity. -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; elim H6; - intros; apply Rlt_trans with x0; assumption - | 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 double; - rewrite (Rplus_comm (pos_Rl (cons r l) i)); - apply Rplus_lt_compat_l; elim H6; intros; apply Rlt_trans with x0; - assumption - | discrR ] ]. -rewrite RList_P14; simpl in H3; apply H3. + forall (a b:R) (f:R -> R) (l:Rlist), + is_subdivision f a b l -> adapted_couple f a b l (FF l f). +Proof. + intros; unfold adapted_couple in |- *; unfold is_subdivision in X; + unfold adapted_couple in X; elim X; clear X; intros; + decompose [and] p; clear p; repeat split; try assumption. + apply StepFun_P20; rewrite H2; apply lt_O_Sn. + intros; assert (H5 := H4 _ H3); unfold constant_D_eq, open_interval in H5; + unfold constant_D_eq, open_interval in |- *; intros; + induction l as [| r l Hrecl]. + discriminate. + unfold FF in |- *; rewrite RList_P12. + simpl in |- *; + change (f x0 = f (pos_Rl (mid_Rlist (cons r l) r) (S i))) in |- *; + rewrite RList_P13; try assumption; rewrite (H5 x0 H6); + rewrite H5. + reflexivity. + 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; elim H6; + intros; apply Rlt_trans with x0; assumption + | 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 double; + rewrite (Rplus_comm (pos_Rl (cons r l) i)); + apply Rplus_lt_compat_l; elim H6; intros; apply Rlt_trans with x0; + assumption + | discrR ] ]. + rewrite RList_P14; simpl in H3; apply H3. Qed. Lemma StepFun_P22 : - forall (a b:R) (f g:R -> R) (lf lg:Rlist), - a <= b -> - is_subdivision f a b lf -> - is_subdivision g a b lg -> is_subdivision f a b (cons_ORlist lf lg). -unfold is_subdivision in |- *; intros a b f g lf lg Hyp X X0; elim X; elim X0; - clear X X0; intros lg0 p lf0 p0; assert (Hyp_min : Rmin a b = a). -unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -assert (Hyp_max : Rmax a b = b). -unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -apply existT with (FF (cons_ORlist lf lg) f); unfold adapted_couple in p, p0; - decompose [and] p; decompose [and] p0; clear p p0; - rewrite Hyp_min in H6; rewrite Hyp_min in H1; rewrite Hyp_max in H0; - rewrite Hyp_max in H5; unfold adapted_couple in |- *; - repeat split. -apply RList_P2; assumption. -rewrite Hyp_min; symmetry in |- *; apply Rle_antisym. -induction lf as [| r lf Hreclf]. -simpl in |- *; right; symmetry in |- *; assumption. -assert - (H10 : - In (pos_Rl (cons_ORlist (cons r lf) lg) 0) (cons_ORlist (cons r lf) lg)). -elim - (RList_P3 (cons_ORlist (cons r lf) lg) - (pos_Rl (cons_ORlist (cons r lf) lg) 0)); intros _ H10; - apply H10; exists 0%nat; split; - [ reflexivity | rewrite RList_P11; simpl in |- *; apply lt_O_Sn ]. -elim (RList_P9 (cons r lf) lg (pos_Rl (cons_ORlist (cons r lf) lg) 0)); - intros H12 _; assert (H13 := H12 H10); elim H13; intro. -elim (RList_P3 (cons r lf) (pos_Rl (cons_ORlist (cons r lf) lg) 0)); - intros H11 _; assert (H14 := H11 H8); elim H14; intros; - elim H15; clear H15; intros; rewrite H15; rewrite <- H6; - elim (RList_P6 (cons r lf)); intros; apply H17; - [ assumption | apply le_O_n | assumption ]. -elim (RList_P3 lg (pos_Rl (cons_ORlist (cons r lf) lg) 0)); intros H11 _; - assert (H14 := H11 H8); elim H14; intros; elim H15; - clear H15; intros; rewrite H15; rewrite <- H1; elim (RList_P6 lg); - intros; apply H17; [ assumption | apply le_O_n | assumption ]. -induction lf as [| r lf Hreclf]. -simpl in |- *; right; assumption. -assert (H8 : In a (cons_ORlist (cons r lf) lg)). -elim (RList_P9 (cons r lf) lg a); intros; apply H10; left; - elim (RList_P3 (cons r lf) a); intros; apply H12; - exists 0%nat; split; - [ symmetry in |- *; assumption | simpl in |- *; apply lt_O_Sn ]. -apply RList_P5; [ apply RList_P2; assumption | assumption ]. -rewrite Hyp_max; apply Rle_antisym. -induction lf as [| r lf Hreclf]. -simpl in |- *; right; assumption. -assert - (H8 : - In - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg)))) - (cons_ORlist (cons r lf) lg)). -elim - (RList_P3 (cons_ORlist (cons r lf) lg) - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg))))); - intros _ H10; apply H10; - exists (pred (Rlength (cons_ORlist (cons r lf) lg))); - split; [ reflexivity | rewrite RList_P11; simpl in |- *; apply lt_n_Sn ]. -elim - (RList_P9 (cons r lf) lg - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg))))); - intros H10 _. -assert (H11 := H10 H8); elim H11; intro. -elim - (RList_P3 (cons r lf) - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg))))); - intros H13 _; assert (H14 := H13 H12); elim H14; intros; - elim H15; clear H15; intros; rewrite H15; rewrite <- H5; - elim (RList_P6 (cons r lf)); intros; apply H17; - [ assumption - | simpl in |- *; simpl in H14; apply lt_n_Sm_le; assumption - | simpl in |- *; apply lt_n_Sn ]. -elim - (RList_P3 lg - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg))))); - intros H13 _; assert (H14 := H13 H12); elim H14; intros; - elim H15; clear H15; intros. -rewrite H15; assert (H17 : Rlength lg = S (pred (Rlength lg))). -apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; - rewrite <- H17 in H16; elim (lt_n_O _ H16). -rewrite <- H0; elim (RList_P6 lg); intros; apply H18; - [ assumption - | rewrite H17 in H16; apply lt_n_Sm_le; assumption - | apply lt_pred_n_n; rewrite H17; apply lt_O_Sn ]. -induction lf as [| r lf Hreclf]. -simpl in |- *; right; symmetry in |- *; assumption. -assert (H8 : In b (cons_ORlist (cons r lf) lg)). -elim (RList_P9 (cons r lf) lg b); intros; apply H10; left; - elim (RList_P3 (cons r lf) b); intros; apply H12; - exists (pred (Rlength (cons r lf))); split; - [ symmetry in |- *; assumption | simpl in |- *; apply lt_n_Sn ]. -apply RList_P7; [ apply RList_P2; assumption | assumption ]. -apply StepFun_P20; rewrite RList_P11; rewrite H2; rewrite H7; simpl in |- *; - apply lt_O_Sn. -intros; unfold constant_D_eq, open_interval in |- *; intros; - cut - (exists l : R, - constant_D_eq f - (open_interval (pos_Rl (cons_ORlist lf lg) i) + forall (a b:R) (f g:R -> R) (lf lg:Rlist), + a <= b -> + is_subdivision f a b lf -> + is_subdivision g a b lg -> is_subdivision f a b (cons_ORlist lf lg). +Proof. + unfold is_subdivision in |- *; intros a b f g lf lg Hyp X X0; elim X; elim X0; + clear X X0; intros lg0 p lf0 p0; assert (Hyp_min : Rmin a b = a). + unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + assert (Hyp_max : Rmax a b = b). + unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + apply existT with (FF (cons_ORlist lf lg) f); unfold adapted_couple in p, p0; + decompose [and] p; decompose [and] p0; clear p p0; + rewrite Hyp_min in H6; rewrite Hyp_min in H1; rewrite Hyp_max in H0; + rewrite Hyp_max in H5; unfold adapted_couple in |- *; + repeat split. + apply RList_P2; assumption. + rewrite Hyp_min; symmetry in |- *; apply Rle_antisym. + induction lf as [| r lf Hreclf]. + simpl in |- *; right; symmetry in |- *; assumption. + assert + (H10 : + In (pos_Rl (cons_ORlist (cons r lf) lg) 0) (cons_ORlist (cons r lf) lg)). + elim + (RList_P3 (cons_ORlist (cons r lf) lg) + (pos_Rl (cons_ORlist (cons r lf) lg) 0)); intros _ H10; + apply H10; exists 0%nat; split; + [ reflexivity | rewrite RList_P11; simpl in |- *; apply lt_O_Sn ]. + elim (RList_P9 (cons r lf) lg (pos_Rl (cons_ORlist (cons r lf) lg) 0)); + intros H12 _; assert (H13 := H12 H10); elim H13; intro. + elim (RList_P3 (cons r lf) (pos_Rl (cons_ORlist (cons r lf) lg) 0)); + intros H11 _; assert (H14 := H11 H8); elim H14; intros; + elim H15; clear H15; intros; rewrite H15; rewrite <- H6; + elim (RList_P6 (cons r lf)); intros; apply H17; + [ assumption | apply le_O_n | assumption ]. + elim (RList_P3 lg (pos_Rl (cons_ORlist (cons r lf) lg) 0)); intros H11 _; + assert (H14 := H11 H8); elim H14; intros; elim H15; + clear H15; intros; rewrite H15; rewrite <- H1; elim (RList_P6 lg); + intros; apply H17; [ assumption | apply le_O_n | assumption ]. + induction lf as [| r lf Hreclf]. + simpl in |- *; right; assumption. + assert (H8 : In a (cons_ORlist (cons r lf) lg)). + elim (RList_P9 (cons r lf) lg a); intros; apply H10; left; + elim (RList_P3 (cons r lf) a); intros; apply H12; + exists 0%nat; split; + [ symmetry in |- *; assumption | simpl in |- *; apply lt_O_Sn ]. + apply RList_P5; [ apply RList_P2; assumption | assumption ]. + rewrite Hyp_max; apply Rle_antisym. + induction lf as [| r lf Hreclf]. + simpl in |- *; right; assumption. + assert + (H8 : + In + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg)))) + (cons_ORlist (cons r lf) lg)). + elim + (RList_P3 (cons_ORlist (cons r lf) lg) + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg))))); + intros _ H10; apply H10; + exists (pred (Rlength (cons_ORlist (cons r lf) lg))); + split; [ reflexivity | rewrite RList_P11; simpl in |- *; apply lt_n_Sn ]. + elim + (RList_P9 (cons r lf) lg + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg))))); + intros H10 _. + assert (H11 := H10 H8); elim H11; intro. + elim + (RList_P3 (cons r lf) + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg))))); + intros H13 _; assert (H14 := H13 H12); elim H14; intros; + elim H15; clear H15; intros; rewrite H15; rewrite <- H5; + elim (RList_P6 (cons r lf)); intros; apply H17; + [ assumption + | simpl in |- *; simpl in H14; apply lt_n_Sm_le; assumption + | simpl in |- *; apply lt_n_Sn ]. + elim + (RList_P3 lg + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg))))); + intros H13 _; assert (H14 := H13 H12); elim H14; intros; + elim H15; clear H15; intros. + rewrite H15; assert (H17 : Rlength lg = S (pred (Rlength lg))). + apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; + rewrite <- H17 in H16; elim (lt_n_O _ H16). + rewrite <- H0; elim (RList_P6 lg); intros; apply H18; + [ assumption + | rewrite H17 in H16; apply lt_n_Sm_le; assumption + | apply lt_pred_n_n; rewrite H17; apply lt_O_Sn ]. + induction lf as [| r lf Hreclf]. + simpl in |- *; right; symmetry in |- *; assumption. + assert (H8 : In b (cons_ORlist (cons r lf) lg)). + elim (RList_P9 (cons r lf) lg b); intros; apply H10; left; + elim (RList_P3 (cons r lf) b); intros; apply H12; + exists (pred (Rlength (cons r lf))); split; + [ symmetry in |- *; assumption | simpl in |- *; apply lt_n_Sn ]. + apply RList_P7; [ apply RList_P2; assumption | assumption ]. + apply StepFun_P20; rewrite RList_P11; rewrite H2; rewrite H7; simpl in |- *; + apply lt_O_Sn. + intros; unfold constant_D_eq, open_interval in |- *; intros; + cut + (exists l : R, + constant_D_eq f + (open_interval (pos_Rl (cons_ORlist lf lg) i) (pos_Rl (cons_ORlist lf lg) (S i))) l). -intros; elim H11; clear H11; intros; assert (H12 := H11); - assert - (Hyp_cons : - exists r : R, (exists r0 : Rlist, cons_ORlist lf lg = cons r r0)). -apply RList_P19; red in |- *; intro; rewrite H13 in H8; elim (lt_n_O _ H8). -elim Hyp_cons; clear Hyp_cons; intros r [r0 Hyp_cons]; rewrite Hyp_cons; - unfold FF in |- *; rewrite RList_P12. -change (f x = f (pos_Rl (mid_Rlist (cons r r0) r) (S i))) in |- *; - rewrite <- Hyp_cons; rewrite RList_P13. -assert (H13 := RList_P2 _ _ H _ H8); elim H13; intro. -unfold constant_D_eq, open_interval in H11, H12; rewrite (H11 x H10); - assert - (H15 : - pos_Rl (cons_ORlist lf lg) i < - (pos_Rl (cons_ORlist lf lg) i + pos_Rl (cons_ORlist lf lg) (S i)) / 2 < - pos_Rl (cons_ORlist lf lg) (S i)). -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; assumption - | 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 double; - rewrite (Rplus_comm (pos_Rl (cons_ORlist lf lg) i)); - apply Rplus_lt_compat_l; assumption - | discrR ] ]. -rewrite (H11 _ H15); reflexivity. -elim H10; intros; rewrite H14 in H15; - elim (Rlt_irrefl _ (Rlt_trans _ _ _ H16 H15)). -apply H8. -rewrite RList_P14; rewrite Hyp_cons in H8; simpl in H8; apply H8. -assert (H11 : a < b). -apply Rle_lt_trans with (pos_Rl (cons_ORlist lf lg) i). -rewrite <- H6; rewrite <- (RList_P15 lf lg). -elim (RList_P6 (cons_ORlist lf lg)); intros; apply H11. -apply RList_P2; assumption. -apply le_O_n. -apply lt_trans with (pred (Rlength (cons_ORlist lf lg))); - [ assumption - | apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; - rewrite <- H13 in H8; elim (lt_n_O _ H8) ]. -assumption. -assumption. -rewrite H1; assumption. -apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)). -elim H10; intros; apply Rlt_trans with x; assumption. -rewrite <- H5; rewrite <- (RList_P16 lf lg); try assumption. -elim (RList_P6 (cons_ORlist lf lg)); intros; apply H11. -apply RList_P2; assumption. -apply lt_n_Sm_le; apply lt_n_S; assumption. -apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H8; - elim (lt_n_O _ H8). -rewrite H0; assumption. -set - (I := - fun j:nat => - pos_Rl lf j <= pos_Rl (cons_ORlist lf lg) i /\ (j < Rlength lf)%nat); - assert (H12 : Nbound I). -unfold Nbound in |- *; exists (Rlength lf); intros; unfold I in H12; elim H12; - intros; apply lt_le_weak; assumption. -assert (H13 : exists n : nat, I n). -exists 0%nat; unfold I in |- *; split. -apply Rle_trans with (pos_Rl (cons_ORlist lf lg) 0). -right; symmetry in |- *. -apply RList_P15; try assumption; rewrite H1; assumption. -elim (RList_P6 (cons_ORlist lf lg)); intros; apply H13. -apply RList_P2; assumption. -apply le_O_n. -apply lt_trans with (pred (Rlength (cons_ORlist lf lg))). -assumption. -apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H15 in H8; - elim (lt_n_O _ H8). -apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H5; - rewrite <- H6 in H11; rewrite <- H5 in H11; elim (Rlt_irrefl _ H11). -assert (H14 := Nzorn H13 H12); elim H14; clear H14; intros x0 H14; - exists (pos_Rl lf0 x0); unfold constant_D_eq, open_interval in |- *; - intros; assert (H16 := H9 x0); assert (H17 : (x0 < pred (Rlength lf))%nat). -elim H14; clear H14; intros; unfold I in H14; elim H14; clear H14; intros; - apply lt_S_n; replace (S (pred (Rlength lf))) with (Rlength lf). -inversion H18. -2: apply lt_n_S; assumption. -cut (x0 = pred (Rlength lf)). -intro; rewrite H19 in H14; rewrite H5 in H14; - cut (pos_Rl (cons_ORlist lf lg) i < b). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H14 H21)). -apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)). -elim H10; intros; apply Rlt_trans with x; assumption. -rewrite <- H5; - apply Rle_trans with - (pos_Rl (cons_ORlist lf lg) (pred (Rlength (cons_ORlist lf lg)))). -elim (RList_P6 (cons_ORlist lf lg)); intros; apply H21. -apply RList_P2; assumption. -apply lt_n_Sm_le; apply lt_n_S; assumption. -apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H23 in H8; - elim (lt_n_O _ H8). -right; apply RList_P16; try assumption; rewrite H0; assumption. -rewrite <- H20; reflexivity. -apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; - rewrite <- H19 in H18; elim (lt_n_O _ H18). -assert (H18 := H16 H17); unfold constant_D_eq, open_interval in H18; - rewrite (H18 x1). -reflexivity. -elim H15; clear H15; intros; elim H14; clear H14; intros; unfold I in H14; - elim H14; clear H14; intros; split. -apply Rle_lt_trans with (pos_Rl (cons_ORlist lf lg) i); assumption. -apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)); try assumption. -assert (H22 : (S x0 < Rlength lf)%nat). -replace (Rlength lf) with (S (pred (Rlength lf))); - [ apply lt_n_S; assumption - | symmetry in |- *; apply S_pred with 0%nat; apply neq_O_lt; red in |- *; - intro; rewrite <- H22 in H21; elim (lt_n_O _ H21) ]. -elim (Rle_dec (pos_Rl lf (S x0)) (pos_Rl (cons_ORlist lf lg) i)); intro. -assert (H23 : (S x0 <= x0)%nat). -apply H20; unfold I in |- *; split; assumption. -elim (le_Sn_n _ H23). -assert (H23 : pos_Rl (cons_ORlist lf lg) i < pos_Rl lf (S x0)). -auto with real. -clear b0; apply RList_P17; try assumption. -apply RList_P2; assumption. -elim (RList_P9 lf lg (pos_Rl lf (S x0))); intros; apply H25; left; - elim (RList_P3 lf (pos_Rl lf (S x0))); intros; apply H27; - exists (S x0); split; [ reflexivity | apply H22 ]. + intros; elim H11; clear H11; intros; assert (H12 := H11); + assert + (Hyp_cons : + exists r : R, (exists r0 : Rlist, cons_ORlist lf lg = cons r r0)). + apply RList_P19; red in |- *; intro; rewrite H13 in H8; elim (lt_n_O _ H8). + elim Hyp_cons; clear Hyp_cons; intros r [r0 Hyp_cons]; rewrite Hyp_cons; + unfold FF in |- *; rewrite RList_P12. + change (f x = f (pos_Rl (mid_Rlist (cons r r0) r) (S i))) in |- *; + rewrite <- Hyp_cons; rewrite RList_P13. + assert (H13 := RList_P2 _ _ H _ H8); elim H13; intro. + unfold constant_D_eq, open_interval in H11, H12; rewrite (H11 x H10); + assert + (H15 : + pos_Rl (cons_ORlist lf lg) i < + (pos_Rl (cons_ORlist lf lg) i + pos_Rl (cons_ORlist lf lg) (S i)) / 2 < + pos_Rl (cons_ORlist lf lg) (S i)). + 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; assumption + | 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 double; + rewrite (Rplus_comm (pos_Rl (cons_ORlist lf lg) i)); + apply Rplus_lt_compat_l; assumption + | discrR ] ]. + rewrite (H11 _ H15); reflexivity. + elim H10; intros; rewrite H14 in H15; + elim (Rlt_irrefl _ (Rlt_trans _ _ _ H16 H15)). + apply H8. + rewrite RList_P14; rewrite Hyp_cons in H8; simpl in H8; apply H8. + assert (H11 : a < b). + apply Rle_lt_trans with (pos_Rl (cons_ORlist lf lg) i). + rewrite <- H6; rewrite <- (RList_P15 lf lg). + elim (RList_P6 (cons_ORlist lf lg)); intros; apply H11. + apply RList_P2; assumption. + apply le_O_n. + apply lt_trans with (pred (Rlength (cons_ORlist lf lg))); + [ assumption + | apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; + rewrite <- H13 in H8; elim (lt_n_O _ H8) ]. + assumption. + assumption. + rewrite H1; assumption. + apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)). + elim H10; intros; apply Rlt_trans with x; assumption. + rewrite <- H5; rewrite <- (RList_P16 lf lg); try assumption. + elim (RList_P6 (cons_ORlist lf lg)); intros; apply H11. + apply RList_P2; assumption. + apply lt_n_Sm_le; apply lt_n_S; assumption. + apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H8; + elim (lt_n_O _ H8). + rewrite H0; assumption. + set + (I := + fun j:nat => + pos_Rl lf j <= pos_Rl (cons_ORlist lf lg) i /\ (j < Rlength lf)%nat); + assert (H12 : Nbound I). + unfold Nbound in |- *; exists (Rlength lf); intros; unfold I in H12; elim H12; + intros; apply lt_le_weak; assumption. + assert (H13 : exists n : nat, I n). + exists 0%nat; unfold I in |- *; split. + apply Rle_trans with (pos_Rl (cons_ORlist lf lg) 0). + right; symmetry in |- *. + apply RList_P15; try assumption; rewrite H1; assumption. + elim (RList_P6 (cons_ORlist lf lg)); intros; apply H13. + apply RList_P2; assumption. + apply le_O_n. + apply lt_trans with (pred (Rlength (cons_ORlist lf lg))). + assumption. + apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H15 in H8; + elim (lt_n_O _ H8). + apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H5; + rewrite <- H6 in H11; rewrite <- H5 in H11; elim (Rlt_irrefl _ H11). + assert (H14 := Nzorn H13 H12); elim H14; clear H14; intros x0 H14; + exists (pos_Rl lf0 x0); unfold constant_D_eq, open_interval in |- *; + intros; assert (H16 := H9 x0); assert (H17 : (x0 < pred (Rlength lf))%nat). + elim H14; clear H14; intros; unfold I in H14; elim H14; clear H14; intros; + apply lt_S_n; replace (S (pred (Rlength lf))) with (Rlength lf). + inversion H18. + 2: apply lt_n_S; assumption. + cut (x0 = pred (Rlength lf)). + intro; rewrite H19 in H14; rewrite H5 in H14; + cut (pos_Rl (cons_ORlist lf lg) i < b). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H14 H21)). + apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)). + elim H10; intros; apply Rlt_trans with x; assumption. + rewrite <- H5; + apply Rle_trans with + (pos_Rl (cons_ORlist lf lg) (pred (Rlength (cons_ORlist lf lg)))). + elim (RList_P6 (cons_ORlist lf lg)); intros; apply H21. + apply RList_P2; assumption. + apply lt_n_Sm_le; apply lt_n_S; assumption. + apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H23 in H8; + elim (lt_n_O _ H8). + right; apply RList_P16; try assumption; rewrite H0; assumption. + rewrite <- H20; reflexivity. + apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; + rewrite <- H19 in H18; elim (lt_n_O _ H18). + assert (H18 := H16 H17); unfold constant_D_eq, open_interval in H18; + rewrite (H18 x1). + reflexivity. + elim H15; clear H15; intros; elim H14; clear H14; intros; unfold I in H14; + elim H14; clear H14; intros; split. + apply Rle_lt_trans with (pos_Rl (cons_ORlist lf lg) i); assumption. + apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)); try assumption. + assert (H22 : (S x0 < Rlength lf)%nat). + replace (Rlength lf) with (S (pred (Rlength lf))); + [ apply lt_n_S; assumption + | symmetry in |- *; apply S_pred with 0%nat; apply neq_O_lt; red in |- *; + intro; rewrite <- H22 in H21; elim (lt_n_O _ H21) ]. + elim (Rle_dec (pos_Rl lf (S x0)) (pos_Rl (cons_ORlist lf lg) i)); intro. + assert (H23 : (S x0 <= x0)%nat). + apply H20; unfold I in |- *; split; assumption. + elim (le_Sn_n _ H23). + assert (H23 : pos_Rl (cons_ORlist lf lg) i < pos_Rl lf (S x0)). + auto with real. + clear b0; apply RList_P17; try assumption. + apply RList_P2; assumption. + elim (RList_P9 lf lg (pos_Rl lf (S x0))); intros; apply H25; left; + elim (RList_P3 lf (pos_Rl lf (S x0))); intros; apply H27; + exists (S x0); split; [ reflexivity | apply H22 ]. Qed. Lemma StepFun_P23 : - forall (a b:R) (f g:R -> R) (lf lg:Rlist), - is_subdivision f a b lf -> - is_subdivision g a b lg -> is_subdivision f a b (cons_ORlist lf lg). -intros; case (Rle_dec a b); intro; - [ apply StepFun_P22 with g; assumption - | apply StepFun_P5; apply StepFun_P22 with g; - [ auto with real - | apply StepFun_P5; assumption - | apply StepFun_P5; assumption ] ]. + forall (a b:R) (f g:R -> R) (lf lg:Rlist), + is_subdivision f a b lf -> + is_subdivision g a b lg -> is_subdivision f a b (cons_ORlist lf lg). +Proof. + intros; case (Rle_dec a b); intro; + [ apply StepFun_P22 with g; assumption + | apply StepFun_P5; apply StepFun_P22 with g; + [ auto with real + | apply StepFun_P5; assumption + | apply StepFun_P5; assumption ] ]. Qed. Lemma StepFun_P24 : - forall (a b:R) (f g:R -> R) (lf lg:Rlist), - a <= b -> - is_subdivision f a b lf -> - is_subdivision g a b lg -> is_subdivision g a b (cons_ORlist lf lg). -unfold is_subdivision in |- *; intros a b f g lf lg Hyp X X0; elim X; elim X0; - clear X X0; intros lg0 p lf0 p0; assert (Hyp_min : Rmin a b = a). -unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -assert (Hyp_max : Rmax a b = b). -unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -apply existT with (FF (cons_ORlist lf lg) g); unfold adapted_couple in p, p0; - decompose [and] p; decompose [and] p0; clear p p0; - rewrite Hyp_min in H1; rewrite Hyp_min in H6; rewrite Hyp_max in H0; - rewrite Hyp_max in H5; unfold adapted_couple in |- *; - repeat split. -apply RList_P2; assumption. -rewrite Hyp_min; symmetry in |- *; apply Rle_antisym. -induction lf as [| r lf Hreclf]. -simpl in |- *; right; symmetry in |- *; assumption. -assert - (H10 : - In (pos_Rl (cons_ORlist (cons r lf) lg) 0) (cons_ORlist (cons r lf) lg)). -elim - (RList_P3 (cons_ORlist (cons r lf) lg) - (pos_Rl (cons_ORlist (cons r lf) lg) 0)); intros _ H10; - apply H10; exists 0%nat; split; - [ reflexivity | rewrite RList_P11; simpl in |- *; apply lt_O_Sn ]. -elim (RList_P9 (cons r lf) lg (pos_Rl (cons_ORlist (cons r lf) lg) 0)); - intros H12 _; assert (H13 := H12 H10); elim H13; intro. -elim (RList_P3 (cons r lf) (pos_Rl (cons_ORlist (cons r lf) lg) 0)); - intros H11 _; assert (H14 := H11 H8); elim H14; intros; - elim H15; clear H15; intros; rewrite H15; rewrite <- H6; - elim (RList_P6 (cons r lf)); intros; apply H17; - [ assumption | apply le_O_n | assumption ]. -elim (RList_P3 lg (pos_Rl (cons_ORlist (cons r lf) lg) 0)); intros H11 _; - assert (H14 := H11 H8); elim H14; intros; elim H15; - clear H15; intros; rewrite H15; rewrite <- H1; elim (RList_P6 lg); - intros; apply H17; [ assumption | apply le_O_n | assumption ]. -induction lf as [| r lf Hreclf]. -simpl in |- *; right; assumption. -assert (H8 : In a (cons_ORlist (cons r lf) lg)). -elim (RList_P9 (cons r lf) lg a); intros; apply H10; left; - elim (RList_P3 (cons r lf) a); intros; apply H12; - exists 0%nat; split; - [ symmetry in |- *; assumption | simpl in |- *; apply lt_O_Sn ]. -apply RList_P5; [ apply RList_P2; assumption | assumption ]. -rewrite Hyp_max; apply Rle_antisym. -induction lf as [| r lf Hreclf]. -simpl in |- *; right; assumption. -assert - (H8 : - In - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg)))) - (cons_ORlist (cons r lf) lg)). -elim - (RList_P3 (cons_ORlist (cons r lf) lg) - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg))))); - intros _ H10; apply H10; - exists (pred (Rlength (cons_ORlist (cons r lf) lg))); - split; [ reflexivity | rewrite RList_P11; simpl in |- *; apply lt_n_Sn ]. -elim - (RList_P9 (cons r lf) lg - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg))))); - intros H10 _; assert (H11 := H10 H8); elim H11; intro. -elim - (RList_P3 (cons r lf) - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg))))); - intros H13 _; assert (H14 := H13 H12); elim H14; intros; - elim H15; clear H15; intros; rewrite H15; rewrite <- H5; - elim (RList_P6 (cons r lf)); intros; apply H17; - [ assumption - | simpl in |- *; simpl in H14; apply lt_n_Sm_le; assumption - | simpl in |- *; apply lt_n_Sn ]. -elim - (RList_P3 lg - (pos_Rl (cons_ORlist (cons r lf) lg) - (pred (Rlength (cons_ORlist (cons r lf) lg))))); - intros H13 _; assert (H14 := H13 H12); elim H14; intros; - elim H15; clear H15; intros; rewrite H15; - assert (H17 : Rlength lg = S (pred (Rlength lg))). -apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; - rewrite <- H17 in H16; elim (lt_n_O _ H16). -rewrite <- H0; elim (RList_P6 lg); intros; apply H18; - [ assumption - | rewrite H17 in H16; apply lt_n_Sm_le; assumption - | apply lt_pred_n_n; rewrite H17; apply lt_O_Sn ]. -induction lf as [| r lf Hreclf]. -simpl in |- *; right; symmetry in |- *; assumption. -assert (H8 : In b (cons_ORlist (cons r lf) lg)). -elim (RList_P9 (cons r lf) lg b); intros; apply H10; left; - elim (RList_P3 (cons r lf) b); intros; apply H12; - exists (pred (Rlength (cons r lf))); split; - [ symmetry in |- *; assumption | simpl in |- *; apply lt_n_Sn ]. -apply RList_P7; [ apply RList_P2; assumption | assumption ]. -apply StepFun_P20; rewrite RList_P11; rewrite H7; rewrite H2; simpl in |- *; - apply lt_O_Sn. -unfold constant_D_eq, open_interval in |- *; intros; - cut - (exists l : R, - constant_D_eq g - (open_interval (pos_Rl (cons_ORlist lf lg) i) + forall (a b:R) (f g:R -> R) (lf lg:Rlist), + a <= b -> + is_subdivision f a b lf -> + is_subdivision g a b lg -> is_subdivision g a b (cons_ORlist lf lg). +Proof. + unfold is_subdivision in |- *; intros a b f g lf lg Hyp X X0; elim X; elim X0; + clear X X0; intros lg0 p lf0 p0; assert (Hyp_min : Rmin a b = a). + unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + assert (Hyp_max : Rmax a b = b). + unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + apply existT with (FF (cons_ORlist lf lg) g); unfold adapted_couple in p, p0; + decompose [and] p; decompose [and] p0; clear p p0; + rewrite Hyp_min in H1; rewrite Hyp_min in H6; rewrite Hyp_max in H0; + rewrite Hyp_max in H5; unfold adapted_couple in |- *; + repeat split. + apply RList_P2; assumption. + rewrite Hyp_min; symmetry in |- *; apply Rle_antisym. + induction lf as [| r lf Hreclf]. + simpl in |- *; right; symmetry in |- *; assumption. + assert + (H10 : + In (pos_Rl (cons_ORlist (cons r lf) lg) 0) (cons_ORlist (cons r lf) lg)). + elim + (RList_P3 (cons_ORlist (cons r lf) lg) + (pos_Rl (cons_ORlist (cons r lf) lg) 0)); intros _ H10; + apply H10; exists 0%nat; split; + [ reflexivity | rewrite RList_P11; simpl in |- *; apply lt_O_Sn ]. + elim (RList_P9 (cons r lf) lg (pos_Rl (cons_ORlist (cons r lf) lg) 0)); + intros H12 _; assert (H13 := H12 H10); elim H13; intro. + elim (RList_P3 (cons r lf) (pos_Rl (cons_ORlist (cons r lf) lg) 0)); + intros H11 _; assert (H14 := H11 H8); elim H14; intros; + elim H15; clear H15; intros; rewrite H15; rewrite <- H6; + elim (RList_P6 (cons r lf)); intros; apply H17; + [ assumption | apply le_O_n | assumption ]. + elim (RList_P3 lg (pos_Rl (cons_ORlist (cons r lf) lg) 0)); intros H11 _; + assert (H14 := H11 H8); elim H14; intros; elim H15; + clear H15; intros; rewrite H15; rewrite <- H1; elim (RList_P6 lg); + intros; apply H17; [ assumption | apply le_O_n | assumption ]. + induction lf as [| r lf Hreclf]. + simpl in |- *; right; assumption. + assert (H8 : In a (cons_ORlist (cons r lf) lg)). + elim (RList_P9 (cons r lf) lg a); intros; apply H10; left; + elim (RList_P3 (cons r lf) a); intros; apply H12; + exists 0%nat; split; + [ symmetry in |- *; assumption | simpl in |- *; apply lt_O_Sn ]. + apply RList_P5; [ apply RList_P2; assumption | assumption ]. + rewrite Hyp_max; apply Rle_antisym. + induction lf as [| r lf Hreclf]. + simpl in |- *; right; assumption. + assert + (H8 : + In + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg)))) + (cons_ORlist (cons r lf) lg)). + elim + (RList_P3 (cons_ORlist (cons r lf) lg) + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg))))); + intros _ H10; apply H10; + exists (pred (Rlength (cons_ORlist (cons r lf) lg))); + split; [ reflexivity | rewrite RList_P11; simpl in |- *; apply lt_n_Sn ]. + elim + (RList_P9 (cons r lf) lg + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg))))); + intros H10 _; assert (H11 := H10 H8); elim H11; intro. + elim + (RList_P3 (cons r lf) + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg))))); + intros H13 _; assert (H14 := H13 H12); elim H14; intros; + elim H15; clear H15; intros; rewrite H15; rewrite <- H5; + elim (RList_P6 (cons r lf)); intros; apply H17; + [ assumption + | simpl in |- *; simpl in H14; apply lt_n_Sm_le; assumption + | simpl in |- *; apply lt_n_Sn ]. + elim + (RList_P3 lg + (pos_Rl (cons_ORlist (cons r lf) lg) + (pred (Rlength (cons_ORlist (cons r lf) lg))))); + intros H13 _; assert (H14 := H13 H12); elim H14; intros; + elim H15; clear H15; intros; rewrite H15; + assert (H17 : Rlength lg = S (pred (Rlength lg))). + apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; + rewrite <- H17 in H16; elim (lt_n_O _ H16). + rewrite <- H0; elim (RList_P6 lg); intros; apply H18; + [ assumption + | rewrite H17 in H16; apply lt_n_Sm_le; assumption + | apply lt_pred_n_n; rewrite H17; apply lt_O_Sn ]. + induction lf as [| r lf Hreclf]. + simpl in |- *; right; symmetry in |- *; assumption. + assert (H8 : In b (cons_ORlist (cons r lf) lg)). + elim (RList_P9 (cons r lf) lg b); intros; apply H10; left; + elim (RList_P3 (cons r lf) b); intros; apply H12; + exists (pred (Rlength (cons r lf))); split; + [ symmetry in |- *; assumption | simpl in |- *; apply lt_n_Sn ]. + apply RList_P7; [ apply RList_P2; assumption | assumption ]. + apply StepFun_P20; rewrite RList_P11; rewrite H7; rewrite H2; simpl in |- *; + apply lt_O_Sn. + unfold constant_D_eq, open_interval in |- *; intros; + cut + (exists l : R, + constant_D_eq g + (open_interval (pos_Rl (cons_ORlist lf lg) i) (pos_Rl (cons_ORlist lf lg) (S i))) l). -intros; elim H11; clear H11; intros; assert (H12 := H11); - assert - (Hyp_cons : - exists r : R, (exists r0 : Rlist, cons_ORlist lf lg = cons r r0)). -apply RList_P19; red in |- *; intro; rewrite H13 in H8; elim (lt_n_O _ H8). -elim Hyp_cons; clear Hyp_cons; intros r [r0 Hyp_cons]; rewrite Hyp_cons; - unfold FF in |- *; rewrite RList_P12. -change (g x = g (pos_Rl (mid_Rlist (cons r r0) r) (S i))) in |- *; - rewrite <- Hyp_cons; rewrite RList_P13. -assert (H13 := RList_P2 _ _ H _ H8); elim H13; intro. -unfold constant_D_eq, open_interval in H11, H12; rewrite (H11 x H10); - assert - (H15 : - pos_Rl (cons_ORlist lf lg) i < - (pos_Rl (cons_ORlist lf lg) i + pos_Rl (cons_ORlist lf lg) (S i)) / 2 < - pos_Rl (cons_ORlist lf lg) (S i)). -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; assumption - | 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 double; - rewrite (Rplus_comm (pos_Rl (cons_ORlist lf lg) i)); - apply Rplus_lt_compat_l; assumption - | discrR ] ]. -rewrite (H11 _ H15); reflexivity. -elim H10; intros; rewrite H14 in H15; - elim (Rlt_irrefl _ (Rlt_trans _ _ _ H16 H15)). -apply H8. -rewrite RList_P14; rewrite Hyp_cons in H8; simpl in H8; apply H8. -assert (H11 : a < b). -apply Rle_lt_trans with (pos_Rl (cons_ORlist lf lg) i). -rewrite <- H6; rewrite <- (RList_P15 lf lg); try assumption. -elim (RList_P6 (cons_ORlist lf lg)); intros; apply H11. -apply RList_P2; assumption. -apply le_O_n. -apply lt_trans with (pred (Rlength (cons_ORlist lf lg))); - [ assumption - | apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; - rewrite <- H13 in H8; elim (lt_n_O _ H8) ]. -rewrite H1; assumption. -apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)). -elim H10; intros; apply Rlt_trans with x; assumption. -rewrite <- H5; rewrite <- (RList_P16 lf lg); try assumption. -elim (RList_P6 (cons_ORlist lf lg)); intros; apply H11. -apply RList_P2; assumption. -apply lt_n_Sm_le; apply lt_n_S; assumption. -apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H8; - elim (lt_n_O _ H8). -rewrite H0; assumption. -set - (I := - fun j:nat => - pos_Rl lg j <= pos_Rl (cons_ORlist lf lg) i /\ (j < Rlength lg)%nat); - assert (H12 : Nbound I). -unfold Nbound in |- *; exists (Rlength lg); intros; unfold I in H12; elim H12; - intros; apply lt_le_weak; assumption. -assert (H13 : exists n : nat, I n). -exists 0%nat; unfold I in |- *; split. -apply Rle_trans with (pos_Rl (cons_ORlist lf lg) 0). -right; symmetry in |- *; rewrite H1; rewrite <- H6; apply RList_P15; - try assumption; rewrite H1; assumption. -elim (RList_P6 (cons_ORlist lf lg)); intros; apply H13; - [ apply RList_P2; assumption - | apply le_O_n - | apply lt_trans with (pred (Rlength (cons_ORlist lf lg))); + intros; elim H11; clear H11; intros; assert (H12 := H11); + assert + (Hyp_cons : + exists r : R, (exists r0 : Rlist, cons_ORlist lf lg = cons r r0)). + apply RList_P19; red in |- *; intro; rewrite H13 in H8; elim (lt_n_O _ H8). + elim Hyp_cons; clear Hyp_cons; intros r [r0 Hyp_cons]; rewrite Hyp_cons; + unfold FF in |- *; rewrite RList_P12. + change (g x = g (pos_Rl (mid_Rlist (cons r r0) r) (S i))) in |- *; + rewrite <- Hyp_cons; rewrite RList_P13. + assert (H13 := RList_P2 _ _ H _ H8); elim H13; intro. + unfold constant_D_eq, open_interval in H11, H12; rewrite (H11 x H10); + assert + (H15 : + pos_Rl (cons_ORlist lf lg) i < + (pos_Rl (cons_ORlist lf lg) i + pos_Rl (cons_ORlist lf lg) (S i)) / 2 < + pos_Rl (cons_ORlist lf lg) (S i)). + 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; assumption + | 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 double; + rewrite (Rplus_comm (pos_Rl (cons_ORlist lf lg) i)); + apply Rplus_lt_compat_l; assumption + | discrR ] ]. + rewrite (H11 _ H15); reflexivity. + elim H10; intros; rewrite H14 in H15; + elim (Rlt_irrefl _ (Rlt_trans _ _ _ H16 H15)). + apply H8. + rewrite RList_P14; rewrite Hyp_cons in H8; simpl in H8; apply H8. + assert (H11 : a < b). + apply Rle_lt_trans with (pos_Rl (cons_ORlist lf lg) i). + rewrite <- H6; rewrite <- (RList_P15 lf lg); try assumption. + elim (RList_P6 (cons_ORlist lf lg)); intros; apply H11. + apply RList_P2; assumption. + apply le_O_n. + apply lt_trans with (pred (Rlength (cons_ORlist lf lg))); [ assumption - | apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; - rewrite <- H15 in H8; elim (lt_n_O _ H8) ] ]. -apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H0; - rewrite <- H1 in H11; rewrite <- H0 in H11; elim (Rlt_irrefl _ H11). -assert (H14 := Nzorn H13 H12); elim H14; clear H14; intros x0 H14; - exists (pos_Rl lg0 x0); unfold constant_D_eq, open_interval in |- *; - intros; assert (H16 := H4 x0); assert (H17 : (x0 < pred (Rlength lg))%nat). -elim H14; clear H14; intros; unfold I in H14; elim H14; clear H14; intros; - apply lt_S_n; replace (S (pred (Rlength lg))) with (Rlength lg). -inversion H18. -2: apply lt_n_S; assumption. -cut (x0 = pred (Rlength lg)). -intro; rewrite H19 in H14; rewrite H0 in H14; - cut (pos_Rl (cons_ORlist lf lg) i < b). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H14 H21)). -apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)). -elim H10; intros; apply Rlt_trans with x; assumption. -rewrite <- H0; - apply Rle_trans with - (pos_Rl (cons_ORlist lf lg) (pred (Rlength (cons_ORlist lf lg)))). -elim (RList_P6 (cons_ORlist lf lg)); intros; apply H21. -apply RList_P2; assumption. -apply lt_n_Sm_le; apply lt_n_S; assumption. -apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H23 in H8; - elim (lt_n_O _ H8). -right; rewrite H0; rewrite <- H5; apply RList_P16; try assumption. -rewrite H0; assumption. -rewrite <- H20; reflexivity. -apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; - rewrite <- H19 in H18; elim (lt_n_O _ H18). -assert (H18 := H16 H17); unfold constant_D_eq, open_interval in H18; - rewrite (H18 x1). -reflexivity. -elim H15; clear H15; intros; elim H14; clear H14; intros; unfold I in H14; - elim H14; clear H14; intros; split. -apply Rle_lt_trans with (pos_Rl (cons_ORlist lf lg) i); assumption. -apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)); try assumption. -assert (H22 : (S x0 < Rlength lg)%nat). -replace (Rlength lg) with (S (pred (Rlength lg))). -apply lt_n_S; assumption. -symmetry in |- *; apply S_pred with 0%nat; apply neq_O_lt; red in |- *; - intro; rewrite <- H22 in H21; elim (lt_n_O _ H21). -elim (Rle_dec (pos_Rl lg (S x0)) (pos_Rl (cons_ORlist lf lg) i)); intro. -assert (H23 : (S x0 <= x0)%nat); - [ apply H20; unfold I in |- *; split; assumption | elim (le_Sn_n _ H23) ]. -assert (H23 : pos_Rl (cons_ORlist lf lg) i < pos_Rl lg (S x0)). -auto with real. -clear b0; apply RList_P17; try assumption; - [ apply RList_P2; assumption - | elim (RList_P9 lf lg (pos_Rl lg (S x0))); intros; apply H25; right; - elim (RList_P3 lg (pos_Rl lg (S x0))); intros; - apply H27; exists (S x0); split; [ reflexivity | apply H22 ] ]. + | apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; + rewrite <- H13 in H8; elim (lt_n_O _ H8) ]. + rewrite H1; assumption. + apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)). + elim H10; intros; apply Rlt_trans with x; assumption. + rewrite <- H5; rewrite <- (RList_P16 lf lg); try assumption. + elim (RList_P6 (cons_ORlist lf lg)); intros; apply H11. + apply RList_P2; assumption. + apply lt_n_Sm_le; apply lt_n_S; assumption. + apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H8; + elim (lt_n_O _ H8). + rewrite H0; assumption. + set + (I := + fun j:nat => + pos_Rl lg j <= pos_Rl (cons_ORlist lf lg) i /\ (j < Rlength lg)%nat); + assert (H12 : Nbound I). + unfold Nbound in |- *; exists (Rlength lg); intros; unfold I in H12; elim H12; + intros; apply lt_le_weak; assumption. + assert (H13 : exists n : nat, I n). + exists 0%nat; unfold I in |- *; split. + apply Rle_trans with (pos_Rl (cons_ORlist lf lg) 0). + right; symmetry in |- *; rewrite H1; rewrite <- H6; apply RList_P15; + try assumption; rewrite H1; assumption. + elim (RList_P6 (cons_ORlist lf lg)); intros; apply H13; + [ apply RList_P2; assumption + | apply le_O_n + | apply lt_trans with (pred (Rlength (cons_ORlist lf lg))); + [ assumption + | apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; + rewrite <- H15 in H8; elim (lt_n_O _ H8) ] ]. + apply neq_O_lt; red in |- *; intro; rewrite <- H13 in H0; + rewrite <- H1 in H11; rewrite <- H0 in H11; elim (Rlt_irrefl _ H11). + assert (H14 := Nzorn H13 H12); elim H14; clear H14; intros x0 H14; + exists (pos_Rl lg0 x0); unfold constant_D_eq, open_interval in |- *; + intros; assert (H16 := H4 x0); assert (H17 : (x0 < pred (Rlength lg))%nat). + elim H14; clear H14; intros; unfold I in H14; elim H14; clear H14; intros; + apply lt_S_n; replace (S (pred (Rlength lg))) with (Rlength lg). + inversion H18. + 2: apply lt_n_S; assumption. + cut (x0 = pred (Rlength lg)). + intro; rewrite H19 in H14; rewrite H0 in H14; + cut (pos_Rl (cons_ORlist lf lg) i < b). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H14 H21)). + apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)). + elim H10; intros; apply Rlt_trans with x; assumption. + rewrite <- H0; + apply Rle_trans with + (pos_Rl (cons_ORlist lf lg) (pred (Rlength (cons_ORlist lf lg)))). + elim (RList_P6 (cons_ORlist lf lg)); intros; apply H21. + apply RList_P2; assumption. + apply lt_n_Sm_le; apply lt_n_S; assumption. + apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H23 in H8; + elim (lt_n_O _ H8). + right; rewrite H0; rewrite <- H5; apply RList_P16; try assumption. + rewrite H0; assumption. + rewrite <- H20; reflexivity. + apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; + rewrite <- H19 in H18; elim (lt_n_O _ H18). + assert (H18 := H16 H17); unfold constant_D_eq, open_interval in H18; + rewrite (H18 x1). + reflexivity. + elim H15; clear H15; intros; elim H14; clear H14; intros; unfold I in H14; + elim H14; clear H14; intros; split. + apply Rle_lt_trans with (pos_Rl (cons_ORlist lf lg) i); assumption. + apply Rlt_le_trans with (pos_Rl (cons_ORlist lf lg) (S i)); try assumption. + assert (H22 : (S x0 < Rlength lg)%nat). + replace (Rlength lg) with (S (pred (Rlength lg))). + apply lt_n_S; assumption. + symmetry in |- *; apply S_pred with 0%nat; apply neq_O_lt; red in |- *; + intro; rewrite <- H22 in H21; elim (lt_n_O _ H21). + elim (Rle_dec (pos_Rl lg (S x0)) (pos_Rl (cons_ORlist lf lg) i)); intro. + assert (H23 : (S x0 <= x0)%nat); + [ apply H20; unfold I in |- *; split; assumption | elim (le_Sn_n _ H23) ]. + assert (H23 : pos_Rl (cons_ORlist lf lg) i < pos_Rl lg (S x0)). + auto with real. + clear b0; apply RList_P17; try assumption; + [ apply RList_P2; assumption + | elim (RList_P9 lf lg (pos_Rl lg (S x0))); intros; apply H25; right; + elim (RList_P3 lg (pos_Rl lg (S x0))); intros; + apply H27; exists (S x0); split; [ reflexivity | apply H22 ] ]. Qed. Lemma StepFun_P25 : - forall (a b:R) (f g:R -> R) (lf lg:Rlist), - is_subdivision f a b lf -> - is_subdivision g a b lg -> is_subdivision g a b (cons_ORlist lf lg). -intros a b f g lf lg H H0; case (Rle_dec a b); intro; - [ apply StepFun_P24 with f; assumption - | apply StepFun_P5; apply StepFun_P24 with f; - [ auto with real - | apply StepFun_P5; assumption - | apply StepFun_P5; assumption ] ]. + forall (a b:R) (f g:R -> R) (lf lg:Rlist), + is_subdivision f a b lf -> + is_subdivision g a b lg -> is_subdivision g a b (cons_ORlist lf lg). +Proof. + intros a b f g lf lg H H0; case (Rle_dec a b); intro; + [ apply StepFun_P24 with f; assumption + | apply StepFun_P5; apply StepFun_P24 with f; + [ auto with real + | apply StepFun_P5; assumption + | apply StepFun_P5; assumption ] ]. Qed. Lemma StepFun_P26 : - forall (a b l:R) (f g:R -> R) (l1:Rlist), - is_subdivision f a b l1 -> - is_subdivision g a b l1 -> - is_subdivision (fun x:R => f x + l * g x) a b l1. + forall (a b l:R) (f g:R -> R) (l1:Rlist), + is_subdivision f a b l1 -> + is_subdivision g a b l1 -> + is_subdivision (fun x:R => f x + l * g x) a b l1. Proof. -intros a b l f g l1 (x0,(H0,(H1,(H2,(H3,H4))))) - (x,(_,(_,(_,(_,H9))))). - exists (FF l1 (fun x:R => f x + l * g x)); repeat split; try assumption. -apply StepFun_P20; rewrite H3; auto with arith. -intros i H8 x1 H10; unfold open_interval in H10, H9, H4; - rewrite (H9 _ H8 _ H10); rewrite (H4 _ H8 _ H10); - assert (H11 : l1 <> nil). -red in |- *; intro H11; rewrite H11 in H8; elim (lt_n_O _ H8). -destruct (RList_P19 _ H11) as (r,(r0,H12)); - rewrite H12; unfold FF in |- *; - change - (pos_Rl x0 i + l * pos_Rl x i = - pos_Rl - (app_Rlist (mid_Rlist (cons r r0) r) (fun x2:R => f x2 + l * g x2)) - (S i)) in |- *; rewrite RList_P12. -rewrite RList_P13. -rewrite <- H12; rewrite (H9 _ H8); try rewrite (H4 _ H8); - reflexivity || - (elim H10; clear H10; intros; 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 Rlt_trans with x1; assumption - | 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 double; - rewrite (Rplus_comm (pos_Rl l1 i)); apply Rplus_lt_compat_l; - apply Rlt_trans with x1; assumption - | discrR ] ] ]). -rewrite <- H12; assumption. -rewrite RList_P14; simpl in |- *; rewrite H12 in H8; simpl in H8; - apply lt_n_S; apply H8. + intros a b l f g l1 (x0,(H0,(H1,(H2,(H3,H4))))) + (x,(_,(_,(_,(_,H9))))). + exists (FF l1 (fun x:R => f x + l * g x)); repeat split; try assumption. + apply StepFun_P20; rewrite H3; auto with arith. + intros i H8 x1 H10; unfold open_interval in H10, H9, H4; + rewrite (H9 _ H8 _ H10); rewrite (H4 _ H8 _ H10); + assert (H11 : l1 <> nil). + red in |- *; intro H11; rewrite H11 in H8; elim (lt_n_O _ H8). + destruct (RList_P19 _ H11) as (r,(r0,H12)); + rewrite H12; unfold FF in |- *; + change + (pos_Rl x0 i + l * pos_Rl x i = + pos_Rl + (app_Rlist (mid_Rlist (cons r r0) r) (fun x2:R => f x2 + l * g x2)) + (S i)) in |- *; rewrite RList_P12. + rewrite RList_P13. + rewrite <- H12; rewrite (H9 _ H8); try rewrite (H4 _ H8); + reflexivity || + (elim H10; clear H10; intros; 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 Rlt_trans with x1; assumption + | 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 double; + rewrite (Rplus_comm (pos_Rl l1 i)); apply Rplus_lt_compat_l; + apply Rlt_trans with x1; assumption + | discrR ] ] ]). + rewrite <- H12; assumption. + rewrite RList_P14; simpl in |- *; rewrite H12 in H8; simpl in H8; + apply lt_n_S; apply H8. Qed. Lemma StepFun_P27 : - forall (a b l:R) (f g:R -> R) (lf lg:Rlist), - is_subdivision f a b lf -> - is_subdivision g a b lg -> - is_subdivision (fun x:R => f x + l * g x) a b (cons_ORlist lf lg). -intros a b l f g lf lg H H0; apply StepFun_P26; - [ apply StepFun_P23 with g; assumption - | apply StepFun_P25 with f; assumption ]. + forall (a b l:R) (f g:R -> R) (lf lg:Rlist), + is_subdivision f a b lf -> + is_subdivision g a b lg -> + is_subdivision (fun x:R => f x + l * g x) a b (cons_ORlist lf lg). +Proof. + intros a b l f g lf lg H H0; apply StepFun_P26; + [ apply StepFun_P23 with g; assumption + | apply StepFun_P25 with f; assumption ]. Qed. -(* The set of step functions on [a,b] is a vectorial space *) +(** The set of step functions on [a,b] is a vectorial space *) Lemma StepFun_P28 : - forall (a b l:R) (f g:StepFun a b), IsStepFun (fun x:R => f x + l * g x) a b. -intros a b l f g; unfold IsStepFun in |- *; assert (H := pre f); - assert (H0 := pre g); unfold IsStepFun in H, H0; elim H; - elim H0; intros; apply existT with (cons_ORlist x0 x); - apply StepFun_P27; assumption. + forall (a b l:R) (f g:StepFun a b), IsStepFun (fun x:R => f x + l * g x) a b. +Proof. + intros a b l f g; unfold IsStepFun in |- *; assert (H := pre f); + assert (H0 := pre g); unfold IsStepFun in H, H0; elim H; + elim H0; intros; apply existT with (cons_ORlist x0 x); + apply StepFun_P27; assumption. Qed. Lemma StepFun_P29 : - forall (a b:R) (f:StepFun a b), is_subdivision f a b (subdivision f). -intros a b f; unfold is_subdivision in |- *; - apply existT with (subdivision_val f); apply StepFun_P1. + forall (a b:R) (f:StepFun a b), is_subdivision f a b (subdivision f). +Proof. + intros a b f; unfold is_subdivision in |- *; + apply existT with (subdivision_val f); apply StepFun_P1. Qed. Lemma StepFun_P30 : - forall (a b l:R) (f g:StepFun a b), - RiemannInt_SF (mkStepFun (StepFun_P28 l f g)) = - RiemannInt_SF f + l * RiemannInt_SF g. -intros a b l f g; unfold RiemannInt_SF in |- *; case (Rle_dec a b); - (intro; - replace - (Int_SF (subdivision_val (mkStepFun (StepFun_P28 l f g))) - (subdivision (mkStepFun (StepFun_P28 l f g)))) with - (Int_SF - (FF (cons_ORlist (subdivision f) (subdivision g)) - (fun x:R => f x + l * g x)) - (cons_ORlist (subdivision f) (subdivision g))); - [ rewrite StepFun_P19; + forall (a b l:R) (f g:StepFun a b), + RiemannInt_SF (mkStepFun (StepFun_P28 l f g)) = + RiemannInt_SF f + l * RiemannInt_SF g. +Proof. + intros a b l f g; unfold RiemannInt_SF in |- *; case (Rle_dec a b); + (intro; replace - (Int_SF (FF (cons_ORlist (subdivision f) (subdivision g)) f) + (Int_SF (subdivision_val (mkStepFun (StepFun_P28 l f g))) + (subdivision (mkStepFun (StepFun_P28 l f g)))) with + (Int_SF + (FF (cons_ORlist (subdivision f) (subdivision g)) + (fun x:R => f x + l * g x)) + (cons_ORlist (subdivision f) (subdivision g))); + [ rewrite StepFun_P19; + replace + (Int_SF (FF (cons_ORlist (subdivision f) (subdivision g)) f) (cons_ORlist (subdivision f) (subdivision g))) with - (Int_SF (subdivision_val f) (subdivision f)); - [ replace - (Int_SF (FF (cons_ORlist (subdivision f) (subdivision g)) g) + (Int_SF (subdivision_val f) (subdivision f)); + [ replace + (Int_SF (FF (cons_ORlist (subdivision f) (subdivision g)) g) (cons_ORlist (subdivision f) (subdivision g))) with - (Int_SF (subdivision_val g) (subdivision g)); - [ ring - | apply StepFun_P17 with (fe g) a b; + (Int_SF (subdivision_val g) (subdivision g)); + [ ring + | apply StepFun_P17 with (fe g) a b; + [ apply StepFun_P1 + | apply StepFun_P21; apply StepFun_P25 with (fe f); + apply StepFun_P29 ] ] + | apply StepFun_P17 with (fe f) a b; [ apply StepFun_P1 - | apply StepFun_P21; apply StepFun_P25 with (fe f); - apply StepFun_P29 ] ] - | apply StepFun_P17 with (fe f) a b; - [ apply StepFun_P1 - | apply StepFun_P21; apply StepFun_P23 with (fe g); - apply StepFun_P29 ] ] - | apply StepFun_P17 with (fun x:R => f x + l * g x) a b; - [ apply StepFun_P21; apply StepFun_P27; apply StepFun_P29 - | apply (StepFun_P1 (mkStepFun (StepFun_P28 l f g))) ] ]). + | apply StepFun_P21; apply StepFun_P23 with (fe g); + apply StepFun_P29 ] ] + | apply StepFun_P17 with (fun x:R => f x + l * g x) a b; + [ apply StepFun_P21; apply StepFun_P27; apply StepFun_P29 + | apply (StepFun_P1 (mkStepFun (StepFun_P28 l f g))) ] ]). Qed. Lemma StepFun_P31 : - forall (a b:R) (f:R -> R) (l lf:Rlist), - adapted_couple f a b l lf -> - adapted_couple (fun x:R => Rabs (f x)) a b l (app_Rlist lf Rabs). -unfold adapted_couple in |- *; intros; decompose [and] H; clear H; - repeat split; try assumption. -symmetry in |- *; rewrite H3; rewrite RList_P18; reflexivity. -intros; unfold constant_D_eq, open_interval in |- *; - unfold constant_D_eq, open_interval in H5; intros; - rewrite (H5 _ H _ H4); rewrite RList_P12; - [ reflexivity | rewrite H3 in H; simpl in H; apply H ]. + forall (a b:R) (f:R -> R) (l lf:Rlist), + adapted_couple f a b l lf -> + adapted_couple (fun x:R => Rabs (f x)) a b l (app_Rlist lf Rabs). +Proof. + unfold adapted_couple in |- *; intros; decompose [and] H; clear H; + repeat split; try assumption. + symmetry in |- *; rewrite H3; rewrite RList_P18; reflexivity. + intros; unfold constant_D_eq, open_interval in |- *; + unfold constant_D_eq, open_interval in H5; intros; + rewrite (H5 _ H _ H4); rewrite RList_P12; + [ reflexivity | rewrite H3 in H; simpl in H; apply H ]. Qed. Lemma StepFun_P32 : - forall (a b:R) (f:StepFun a b), IsStepFun (fun x:R => Rabs (f x)) a b. -intros a b f; unfold IsStepFun in |- *; apply existT with (subdivision f); - unfold is_subdivision in |- *; - apply existT with (app_Rlist (subdivision_val f) Rabs); - apply StepFun_P31; apply StepFun_P1. + forall (a b:R) (f:StepFun a b), IsStepFun (fun x:R => Rabs (f x)) a b. +Proof. + intros a b f; unfold IsStepFun in |- *; apply existT with (subdivision f); + unfold is_subdivision in |- *; + apply existT with (app_Rlist (subdivision_val f) Rabs); + apply StepFun_P31; apply StepFun_P1. Qed. Lemma StepFun_P33 : - forall l2 l1:Rlist, - ordered_Rlist l1 -> Rabs (Int_SF l2 l1) <= Int_SF (app_Rlist l2 Rabs) l1. -simple induction l2; intros. -simpl in |- *; rewrite Rabs_R0; right; reflexivity. -simpl in |- *; induction l1 as [| r1 l1 Hrecl1]. -rewrite Rabs_R0; right; reflexivity. -induction l1 as [| r2 l1 Hrecl0]. -rewrite Rabs_R0; right; reflexivity. -apply Rle_trans with (Rabs (r * (r2 - r1)) + Rabs (Int_SF r0 (cons r2 l1))). -apply Rabs_triang. -rewrite Rabs_mult; rewrite (Rabs_right (r2 - r1)); - [ apply Rplus_le_compat_l; apply H; apply RList_P4 with r1; assumption - | apply Rge_minus; apply Rle_ge; apply (H0 0%nat); simpl in |- *; - apply lt_O_Sn ]. + forall l2 l1:Rlist, + ordered_Rlist l1 -> Rabs (Int_SF l2 l1) <= Int_SF (app_Rlist l2 Rabs) l1. +Proof. + simple induction l2; intros. + simpl in |- *; rewrite Rabs_R0; right; reflexivity. + simpl in |- *; induction l1 as [| r1 l1 Hrecl1]. + rewrite Rabs_R0; right; reflexivity. + induction l1 as [| r2 l1 Hrecl0]. + rewrite Rabs_R0; right; reflexivity. + apply Rle_trans with (Rabs (r * (r2 - r1)) + Rabs (Int_SF r0 (cons r2 l1))). + apply Rabs_triang. + rewrite Rabs_mult; rewrite (Rabs_right (r2 - r1)); + [ apply Rplus_le_compat_l; apply H; apply RList_P4 with r1; assumption + | apply Rge_minus; apply Rle_ge; apply (H0 0%nat); simpl in |- *; + apply lt_O_Sn ]. Qed. Lemma StepFun_P34 : - forall (a b:R) (f:StepFun a b), - a <= b -> - Rabs (RiemannInt_SF f) <= RiemannInt_SF (mkStepFun (StepFun_P32 f)). -intros; unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro. -replace - (Int_SF (subdivision_val (mkStepFun (StepFun_P32 f))) + forall (a b:R) (f:StepFun a b), + a <= b -> + Rabs (RiemannInt_SF f) <= RiemannInt_SF (mkStepFun (StepFun_P32 f)). +Proof. + intros; unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro. + replace + (Int_SF (subdivision_val (mkStepFun (StepFun_P32 f))) (subdivision (mkStepFun (StepFun_P32 f)))) with - (Int_SF (app_Rlist (subdivision_val f) Rabs) (subdivision f)). -apply StepFun_P33; assert (H0 := StepFun_P29 f); unfold is_subdivision in H0; - elim H0; intros; unfold adapted_couple in p; decompose [and] p; - assumption. -apply StepFun_P17 with (fun x:R => Rabs (f x)) a b; - [ apply StepFun_P31; apply StepFun_P1 - | apply (StepFun_P1 (mkStepFun (StepFun_P32 f))) ]. -elim n; assumption. + (Int_SF (app_Rlist (subdivision_val f) Rabs) (subdivision f)). + apply StepFun_P33; assert (H0 := StepFun_P29 f); unfold is_subdivision in H0; + elim H0; intros; unfold adapted_couple in p; decompose [and] p; + assumption. + apply StepFun_P17 with (fun x:R => Rabs (f x)) a b; + [ apply StepFun_P31; apply StepFun_P1 + | apply (StepFun_P1 (mkStepFun (StepFun_P32 f))) ]. + elim n; assumption. Qed. Lemma StepFun_P35 : - forall (l:Rlist) (a b:R) (f g:R -> R), - ordered_Rlist l -> - pos_Rl l 0 = a -> - pos_Rl l (pred (Rlength l)) = b -> - (forall x:R, a < x < b -> f x <= g x) -> - Int_SF (FF l f) l <= Int_SF (FF l g) l. -simple induction l; intros. -right; reflexivity. -simpl in |- *; induction r0 as [| r0 r1 Hrecr0]. -right; reflexivity. -simpl in |- *; apply Rplus_le_compat. -case (Req_dec r r0); intro. -rewrite H4; right; ring. -do 2 rewrite <- (Rmult_comm (r0 - r)); apply Rmult_le_compat_l. -apply Rge_le; apply Rge_minus; apply Rle_ge; apply (H0 0%nat); simpl in |- *; - apply lt_O_Sn. -apply H3; split. -apply Rmult_lt_reg_l with 2. -prove_sup0. -unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; - rewrite <- Rinv_r_sym. -assert (H5 : r = a). -apply H1. -rewrite H5; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat_l. -assert (H6 := H0 0%nat (lt_O_Sn _)). -simpl in H6. -elim H6; intro. -rewrite H5 in H7; apply H7. -elim H4; assumption. -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 double; assert (H5 : r0 <= b). -replace b with - (pos_Rl (cons r (cons r0 r1)) (pred (Rlength (cons r (cons r0 r1))))). -replace r0 with (pos_Rl (cons r (cons r0 r1)) 1). -elim (RList_P6 (cons r (cons r0 r1))); intros; apply H5. -assumption. -simpl in |- *; apply le_n_S. -apply le_O_n. -simpl in |- *; apply lt_n_Sn. -reflexivity. -apply Rle_lt_trans with (r + b). -apply Rplus_le_compat_l; assumption. -rewrite (Rplus_comm r); apply Rplus_lt_compat_l. -apply Rlt_le_trans with r0. -assert (H6 := H0 0%nat (lt_O_Sn _)). -simpl in H6. -elim H6; intro. -apply H7. -elim H4; assumption. -assumption. -discrR. -simpl in H; apply H with r0 b. -apply RList_P4 with r; assumption. -reflexivity. -rewrite <- H2; reflexivity. -intros; apply H3; elim H4; intros; split; try assumption. -apply Rle_lt_trans with r0; try assumption. -rewrite <- H1. -simpl in |- *; apply (H0 0%nat); simpl in |- *; apply lt_O_Sn. + forall (l:Rlist) (a b:R) (f g:R -> R), + ordered_Rlist l -> + pos_Rl l 0 = a -> + pos_Rl l (pred (Rlength l)) = b -> + (forall x:R, a < x < b -> f x <= g x) -> + Int_SF (FF l f) l <= Int_SF (FF l g) l. +Proof. + simple induction l; intros. + right; reflexivity. + simpl in |- *; induction r0 as [| r0 r1 Hrecr0]. + right; reflexivity. + simpl in |- *; apply Rplus_le_compat. + case (Req_dec r r0); intro. + rewrite H4; right; ring. + do 2 rewrite <- (Rmult_comm (r0 - r)); apply Rmult_le_compat_l. + apply Rge_le; apply Rge_minus; apply Rle_ge; apply (H0 0%nat); simpl in |- *; + apply lt_O_Sn. + apply H3; split. + apply Rmult_lt_reg_l with 2. + prove_sup0. + unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; + rewrite <- Rinv_r_sym. + assert (H5 : r = a). + apply H1. + rewrite H5; rewrite Rmult_1_l; rewrite double; apply Rplus_lt_compat_l. + assert (H6 := H0 0%nat (lt_O_Sn _)). + simpl in H6. + elim H6; intro. + rewrite H5 in H7; apply H7. + elim H4; assumption. + 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 double; assert (H5 : r0 <= b). + replace b with + (pos_Rl (cons r (cons r0 r1)) (pred (Rlength (cons r (cons r0 r1))))). + replace r0 with (pos_Rl (cons r (cons r0 r1)) 1). + elim (RList_P6 (cons r (cons r0 r1))); intros; apply H5. + assumption. + simpl in |- *; apply le_n_S. + apply le_O_n. + simpl in |- *; apply lt_n_Sn. + reflexivity. + apply Rle_lt_trans with (r + b). + apply Rplus_le_compat_l; assumption. + rewrite (Rplus_comm r); apply Rplus_lt_compat_l. + apply Rlt_le_trans with r0. + assert (H6 := H0 0%nat (lt_O_Sn _)). + simpl in H6. + elim H6; intro. + apply H7. + elim H4; assumption. + assumption. + discrR. + simpl in H; apply H with r0 b. + apply RList_P4 with r; assumption. + reflexivity. + rewrite <- H2; reflexivity. + intros; apply H3; elim H4; intros; split; try assumption. + apply Rle_lt_trans with r0; try assumption. + rewrite <- H1. + simpl in |- *; apply (H0 0%nat); simpl in |- *; apply lt_O_Sn. Qed. Lemma StepFun_P36 : - forall (a b:R) (f g:StepFun a b) (l:Rlist), - a <= b -> - is_subdivision f a b l -> - is_subdivision g a b l -> - (forall x:R, a < x < b -> f x <= g x) -> - RiemannInt_SF f <= RiemannInt_SF g. -intros; unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro. -replace (Int_SF (subdivision_val f) (subdivision f)) with (Int_SF (FF l f) l). -replace (Int_SF (subdivision_val g) (subdivision g)) with (Int_SF (FF l g) l). -unfold is_subdivision in X; elim X; clear X; intros; - unfold adapted_couple in p; decompose [and] p; clear p; - assert (H5 : Rmin a b = a); - [ unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ] - | assert (H7 : Rmax a b = b); - [ unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ] - | rewrite H5 in H3; rewrite H7 in H2; eapply StepFun_P35 with a b; - assumption ] ]. -apply StepFun_P17 with (fe g) a b; - [ apply StepFun_P21; assumption | apply StepFun_P1 ]. -apply StepFun_P17 with (fe f) a b; - [ apply StepFun_P21; assumption | apply StepFun_P1 ]. -elim n; assumption. + forall (a b:R) (f g:StepFun a b) (l:Rlist), + a <= b -> + is_subdivision f a b l -> + is_subdivision g a b l -> + (forall x:R, a < x < b -> f x <= g x) -> + RiemannInt_SF f <= RiemannInt_SF g. +Proof. + intros; unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro. + replace (Int_SF (subdivision_val f) (subdivision f)) with (Int_SF (FF l f) l). + replace (Int_SF (subdivision_val g) (subdivision g)) with (Int_SF (FF l g) l). + unfold is_subdivision in X; elim X; clear X; intros; + unfold adapted_couple in p; decompose [and] p; clear p; + assert (H5 : Rmin a b = a); + [ unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ] + | assert (H7 : Rmax a b = b); + [ unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ] + | rewrite H5 in H3; rewrite H7 in H2; eapply StepFun_P35 with a b; + assumption ] ]. + apply StepFun_P17 with (fe g) a b; + [ apply StepFun_P21; assumption | apply StepFun_P1 ]. + apply StepFun_P17 with (fe f) a b; + [ apply StepFun_P21; assumption | apply StepFun_P1 ]. + elim n; assumption. Qed. Lemma StepFun_P37 : - forall (a b:R) (f g:StepFun a b), - a <= b -> - (forall x:R, a < x < b -> f x <= g x) -> - RiemannInt_SF f <= RiemannInt_SF g. -intros; eapply StepFun_P36; try assumption. -eapply StepFun_P25; apply StepFun_P29. -eapply StepFun_P23; apply StepFun_P29. + forall (a b:R) (f g:StepFun a b), + a <= b -> + (forall x:R, a < x < b -> f x <= g x) -> + RiemannInt_SF f <= RiemannInt_SF g. +Proof. + intros; eapply StepFun_P36; try assumption. + eapply StepFun_P25; apply StepFun_P29. + eapply StepFun_P23; apply StepFun_P29. Qed. Lemma StepFun_P38 : - forall (l:Rlist) (a b:R) (f:R -> R), - ordered_Rlist l -> - pos_Rl l 0 = a -> - pos_Rl l (pred (Rlength l)) = b -> - sigT - (fun g:StepFun a b => - g b = f b /\ - (forall i:nat, - (i < pred (Rlength l))%nat -> - constant_D_eq g (co_interval (pos_Rl l i) (pos_Rl l (S i))) - (f (pos_Rl l i)))). -intros l a b f; generalize a; clear a; induction l. -intros a H H0 H1; simpl in H0; simpl in H1; - exists (mkStepFun (StepFun_P4 a b (f b))); split. -reflexivity. -intros; elim (lt_n_O _ H2). -intros; destruct l as [| r1 l]. -simpl in H1; simpl in H0; exists (mkStepFun (StepFun_P4 a b (f b))); split. -reflexivity. -intros i H2; elim (lt_n_O _ H2). -intros; assert (H2 : ordered_Rlist (cons r1 l)). -apply RList_P4 with r; assumption. -assert (H3 : pos_Rl (cons r1 l) 0 = r1). -reflexivity. -assert (H4 : pos_Rl (cons r1 l) (pred (Rlength (cons r1 l))) = b). -rewrite <- H1; reflexivity. -elim (IHl r1 H2 H3 H4); intros g [H5 H6]. -set - (g' := - fun x:R => match Rle_dec r1 x with - | left _ => g x - | right _ => f a - end). -assert (H7 : r1 <= b). -rewrite <- H4; apply RList_P7; [ assumption | left; reflexivity ]. -assert (H8 : IsStepFun g' a b). -unfold IsStepFun in |- *; assert (H8 := pre g); unfold IsStepFun in H8; - elim H8; intros lg H9; unfold is_subdivision in H9; - elim H9; clear H9; intros lg2 H9; split with (cons a lg); - unfold is_subdivision in |- *; split with (cons (f a) lg2); - unfold adapted_couple in H9; decompose [and] H9; clear H9; - unfold adapted_couple in |- *; repeat split. -unfold ordered_Rlist in |- *; intros; simpl in H9; - induction i as [| i Hreci]. -simpl in |- *; rewrite H12; replace (Rmin r1 b) with r1. -simpl in H0; rewrite <- H0; apply (H 0%nat); simpl in |- *; apply lt_O_Sn. -unfold Rmin in |- *; case (Rle_dec r1 b); intro; - [ reflexivity | elim n; assumption ]. -apply (H10 i); apply lt_S_n. -replace (S (pred (Rlength lg))) with (Rlength lg). -apply H9. -apply S_pred with 0%nat; apply neq_O_lt; intro; rewrite <- H14 in H9; - elim (lt_n_O _ H9). -simpl in |- *; assert (H14 : a <= b). -rewrite <- H1; simpl in H0; rewrite <- H0; apply RList_P7; - [ assumption | left; reflexivity ]. -unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -assert (H14 : a <= b). -rewrite <- H1; simpl in H0; rewrite <- H0; apply RList_P7; - [ assumption | left; reflexivity ]. -replace (Rmax a b) with (Rmax r1 b). -rewrite <- H11; induction lg as [| r0 lg Hreclg]. -simpl in H13; discriminate. -reflexivity. -unfold Rmax in |- *; case (Rle_dec a b); case (Rle_dec r1 b); intros; - reflexivity || elim n; assumption. -simpl in |- *; rewrite H13; reflexivity. -intros; simpl in H9; induction i as [| i Hreci]. -unfold constant_D_eq, open_interval in |- *; simpl in |- *; intros; - assert (H16 : Rmin r1 b = r1). -unfold Rmin in |- *; case (Rle_dec r1 b); intro; - [ reflexivity | elim n; assumption ]. -rewrite H16 in H12; rewrite H12 in H14; elim H14; clear H14; intros _ H14; - unfold g' in |- *; case (Rle_dec r1 x); intro r3. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r3 H14)). -reflexivity. -change - (constant_D_eq g' (open_interval (pos_Rl lg i) (pos_Rl lg (S i))) - (pos_Rl lg2 i)) in |- *; clear Hreci; assert (H16 := H15 i); - assert (H17 : (i < pred (Rlength lg))%nat). -apply lt_S_n. -replace (S (pred (Rlength lg))) with (Rlength lg). -assumption. -apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; - rewrite <- H14 in H9; elim (lt_n_O _ H9). -assert (H18 := H16 H17); unfold constant_D_eq, open_interval in H18; - unfold constant_D_eq, open_interval in |- *; intros; - assert (H19 := H18 _ H14); rewrite <- H19; unfold g' in |- *; - case (Rle_dec r1 x); intro. -reflexivity. -elim n; replace r1 with (Rmin r1 b). -rewrite <- H12; elim H14; clear H14; intros H14 _; left; - apply Rle_lt_trans with (pos_Rl lg i); try assumption. -apply RList_P5. -assumption. -elim (RList_P3 lg (pos_Rl lg i)); intros; apply H21; exists i; split. -reflexivity. -apply lt_trans with (pred (Rlength lg)); try assumption. -apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H22 in H17; - elim (lt_n_O _ H17). -unfold Rmin in |- *; case (Rle_dec r1 b); intro; - [ reflexivity | elim n0; assumption ]. -exists (mkStepFun H8); split. -simpl in |- *; unfold g' in |- *; case (Rle_dec r1 b); intro. -assumption. -elim n; assumption. -intros; simpl in H9; induction i as [| i Hreci]. -unfold constant_D_eq, co_interval in |- *; simpl in |- *; intros; simpl in H0; - rewrite H0; elim H10; clear H10; intros; unfold g' in |- *; - case (Rle_dec r1 x); intro r3. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r3 H11)). -reflexivity. -clear Hreci; - change - (constant_D_eq (mkStepFun H8) - (co_interval (pos_Rl (cons r1 l) i) (pos_Rl (cons r1 l) (S i))) - (f (pos_Rl (cons r1 l) i))) in |- *; assert (H10 := H6 i); - assert (H11 : (i < pred (Rlength (cons r1 l)))%nat). -simpl in |- *; apply lt_S_n; assumption. -assert (H12 := H10 H11); unfold constant_D_eq, co_interval in H12; - unfold constant_D_eq, co_interval in |- *; intros; - rewrite <- (H12 _ H13); simpl in |- *; unfold g' in |- *; - case (Rle_dec r1 x); intro. -reflexivity. -elim n; elim H13; clear H13; intros; - apply Rle_trans with (pos_Rl (cons r1 l) i); try assumption; - change (pos_Rl (cons r1 l) 0 <= pos_Rl (cons r1 l) i) in |- *; - elim (RList_P6 (cons r1 l)); intros; apply H15; - [ assumption - | apply le_O_n - | simpl in |- *; apply lt_trans with (Rlength l); - [ apply lt_S_n; assumption | apply lt_n_Sn ] ]. + forall (l:Rlist) (a b:R) (f:R -> R), + ordered_Rlist l -> + pos_Rl l 0 = a -> + pos_Rl l (pred (Rlength l)) = b -> + sigT + (fun g:StepFun a b => + g b = f b /\ + (forall i:nat, + (i < pred (Rlength l))%nat -> + constant_D_eq g (co_interval (pos_Rl l i) (pos_Rl l (S i))) + (f (pos_Rl l i)))). +Proof. + intros l a b f; generalize a; clear a; induction l. + intros a H H0 H1; simpl in H0; simpl in H1; + exists (mkStepFun (StepFun_P4 a b (f b))); split. + reflexivity. + intros; elim (lt_n_O _ H2). + intros; destruct l as [| r1 l]. + simpl in H1; simpl in H0; exists (mkStepFun (StepFun_P4 a b (f b))); split. + reflexivity. + intros i H2; elim (lt_n_O _ H2). + intros; assert (H2 : ordered_Rlist (cons r1 l)). + apply RList_P4 with r; assumption. + assert (H3 : pos_Rl (cons r1 l) 0 = r1). + reflexivity. + assert (H4 : pos_Rl (cons r1 l) (pred (Rlength (cons r1 l))) = b). + rewrite <- H1; reflexivity. + elim (IHl r1 H2 H3 H4); intros g [H5 H6]. + set + (g' := + fun x:R => match Rle_dec r1 x with + | left _ => g x + | right _ => f a + end). + assert (H7 : r1 <= b). + rewrite <- H4; apply RList_P7; [ assumption | left; reflexivity ]. + assert (H8 : IsStepFun g' a b). + unfold IsStepFun in |- *; assert (H8 := pre g); unfold IsStepFun in H8; + elim H8; intros lg H9; unfold is_subdivision in H9; + elim H9; clear H9; intros lg2 H9; split with (cons a lg); + unfold is_subdivision in |- *; split with (cons (f a) lg2); + unfold adapted_couple in H9; decompose [and] H9; clear H9; + unfold adapted_couple in |- *; repeat split. + unfold ordered_Rlist in |- *; intros; simpl in H9; + induction i as [| i Hreci]. + simpl in |- *; rewrite H12; replace (Rmin r1 b) with r1. + simpl in H0; rewrite <- H0; apply (H 0%nat); simpl in |- *; apply lt_O_Sn. + unfold Rmin in |- *; case (Rle_dec r1 b); intro; + [ reflexivity | elim n; assumption ]. + apply (H10 i); apply lt_S_n. + replace (S (pred (Rlength lg))) with (Rlength lg). + apply H9. + apply S_pred with 0%nat; apply neq_O_lt; intro; rewrite <- H14 in H9; + elim (lt_n_O _ H9). + simpl in |- *; assert (H14 : a <= b). + rewrite <- H1; simpl in H0; rewrite <- H0; apply RList_P7; + [ assumption | left; reflexivity ]. + unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + assert (H14 : a <= b). + rewrite <- H1; simpl in H0; rewrite <- H0; apply RList_P7; + [ assumption | left; reflexivity ]. + replace (Rmax a b) with (Rmax r1 b). + rewrite <- H11; induction lg as [| r0 lg Hreclg]. + simpl in H13; discriminate. + reflexivity. + unfold Rmax in |- *; case (Rle_dec a b); case (Rle_dec r1 b); intros; + reflexivity || elim n; assumption. + simpl in |- *; rewrite H13; reflexivity. + intros; simpl in H9; induction i as [| i Hreci]. + unfold constant_D_eq, open_interval in |- *; simpl in |- *; intros; + assert (H16 : Rmin r1 b = r1). + unfold Rmin in |- *; case (Rle_dec r1 b); intro; + [ reflexivity | elim n; assumption ]. + rewrite H16 in H12; rewrite H12 in H14; elim H14; clear H14; intros _ H14; + unfold g' in |- *; case (Rle_dec r1 x); intro r3. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r3 H14)). + reflexivity. + change + (constant_D_eq g' (open_interval (pos_Rl lg i) (pos_Rl lg (S i))) + (pos_Rl lg2 i)) in |- *; clear Hreci; assert (H16 := H15 i); + assert (H17 : (i < pred (Rlength lg))%nat). + apply lt_S_n. + replace (S (pred (Rlength lg))) with (Rlength lg). + assumption. + apply S_pred with 0%nat; apply neq_O_lt; red in |- *; intro; + rewrite <- H14 in H9; elim (lt_n_O _ H9). + assert (H18 := H16 H17); unfold constant_D_eq, open_interval in H18; + unfold constant_D_eq, open_interval in |- *; intros; + assert (H19 := H18 _ H14); rewrite <- H19; unfold g' in |- *; + case (Rle_dec r1 x); intro. + reflexivity. + elim n; replace r1 with (Rmin r1 b). + rewrite <- H12; elim H14; clear H14; intros H14 _; left; + apply Rle_lt_trans with (pos_Rl lg i); try assumption. + apply RList_P5. + assumption. + elim (RList_P3 lg (pos_Rl lg i)); intros; apply H21; exists i; split. + reflexivity. + apply lt_trans with (pred (Rlength lg)); try assumption. + apply lt_pred_n_n; apply neq_O_lt; red in |- *; intro; rewrite <- H22 in H17; + elim (lt_n_O _ H17). + unfold Rmin in |- *; case (Rle_dec r1 b); intro; + [ reflexivity | elim n0; assumption ]. + exists (mkStepFun H8); split. + simpl in |- *; unfold g' in |- *; case (Rle_dec r1 b); intro. + assumption. + elim n; assumption. + intros; simpl in H9; induction i as [| i Hreci]. + unfold constant_D_eq, co_interval in |- *; simpl in |- *; intros; simpl in H0; + rewrite H0; elim H10; clear H10; intros; unfold g' in |- *; + case (Rle_dec r1 x); intro r3. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r3 H11)). + reflexivity. + clear Hreci; + change + (constant_D_eq (mkStepFun H8) + (co_interval (pos_Rl (cons r1 l) i) (pos_Rl (cons r1 l) (S i))) + (f (pos_Rl (cons r1 l) i))) in |- *; assert (H10 := H6 i); + assert (H11 : (i < pred (Rlength (cons r1 l)))%nat). + simpl in |- *; apply lt_S_n; assumption. + assert (H12 := H10 H11); unfold constant_D_eq, co_interval in H12; + unfold constant_D_eq, co_interval in |- *; intros; + rewrite <- (H12 _ H13); simpl in |- *; unfold g' in |- *; + case (Rle_dec r1 x); intro. + reflexivity. + elim n; elim H13; clear H13; intros; + apply Rle_trans with (pos_Rl (cons r1 l) i); try assumption; + change (pos_Rl (cons r1 l) 0 <= pos_Rl (cons r1 l) i) in |- *; + elim (RList_P6 (cons r1 l)); intros; apply H15; + [ assumption + | apply le_O_n + | simpl in |- *; apply lt_trans with (Rlength l); + [ apply lt_S_n; assumption | apply lt_n_Sn ] ]. Qed. Lemma StepFun_P39 : - forall (a b:R) (f:StepFun a b), - RiemannInt_SF f = - RiemannInt_SF (mkStepFun (StepFun_P6 (pre f))). -intros; unfold RiemannInt_SF in |- *; case (Rle_dec a b); case (Rle_dec b a); - intros. -assert (H : adapted_couple f a b (subdivision f) (subdivision_val f)); - [ apply StepFun_P1 - | assert - (H0 : - adapted_couple (mkStepFun (StepFun_P6 (pre f))) b a - (subdivision (mkStepFun (StepFun_P6 (pre f)))) - (subdivision_val (mkStepFun (StepFun_P6 (pre f))))); + forall (a b:R) (f:StepFun a b), + RiemannInt_SF f = - RiemannInt_SF (mkStepFun (StepFun_P6 (pre f))). +Proof. + intros; unfold RiemannInt_SF in |- *; case (Rle_dec a b); case (Rle_dec b a); + intros. + assert (H : adapted_couple f a b (subdivision f) (subdivision_val f)); + [ apply StepFun_P1 + | assert + (H0 : + adapted_couple (mkStepFun (StepFun_P6 (pre f))) b a + (subdivision (mkStepFun (StepFun_P6 (pre f)))) + (subdivision_val (mkStepFun (StepFun_P6 (pre f))))); + [ apply StepFun_P1 + | assert (H1 : a = b); + [ apply Rle_antisym; assumption + | rewrite (StepFun_P8 H H1); assert (H2 : b = a); + [ symmetry in |- *; apply H1 | rewrite (StepFun_P8 H0 H2); ring ] ] ] ]. + rewrite Ropp_involutive; eapply StepFun_P17; + [ apply StepFun_P1 + | apply StepFun_P2; set (H := StepFun_P6 (pre f)); unfold IsStepFun in H; + elim H; intros; unfold is_subdivision in |- *; + elim p; intros; apply p0 ]. + apply Ropp_eq_compat; eapply StepFun_P17; [ apply StepFun_P1 - | assert (H1 : a = b); - [ apply Rle_antisym; assumption - | rewrite (StepFun_P8 H H1); assert (H2 : b = a); - [ symmetry in |- *; apply H1 | rewrite (StepFun_P8 H0 H2); ring ] ] ] ]. -rewrite Ropp_involutive; eapply StepFun_P17; - [ apply StepFun_P1 - | apply StepFun_P2; set (H := StepFun_P6 (pre f)); unfold IsStepFun in H; - elim H; intros; unfold is_subdivision in |- *; - elim p; intros; apply p0 ]. -apply Ropp_eq_compat; eapply StepFun_P17; - [ apply StepFun_P1 - | apply StepFun_P2; set (H := StepFun_P6 (pre f)); unfold IsStepFun in H; - elim H; intros; unfold is_subdivision in |- *; - elim p; intros; apply p0 ]. -assert (H : a < b); - [ auto with real - | assert (H0 : b < a); - [ auto with real | elim (Rlt_irrefl _ (Rlt_trans _ _ _ H H0)) ] ]. + | apply StepFun_P2; set (H := StepFun_P6 (pre f)); unfold IsStepFun in H; + elim H; intros; unfold is_subdivision in |- *; + elim p; intros; apply p0 ]. + assert (H : a < b); + [ auto with real + | assert (H0 : b < a); + [ auto with real | elim (Rlt_irrefl _ (Rlt_trans _ _ _ H H0)) ] ]. Qed. Lemma StepFun_P40 : - forall (f:R -> R) (a b c:R) (l1 l2 lf1 lf2:Rlist), - a < b -> - b < c -> - adapted_couple f a b l1 lf1 -> - adapted_couple f b c l2 lf2 -> - adapted_couple f a c (cons_Rlist l1 l2) (FF (cons_Rlist l1 l2) f). -intros f a b c l1 l2 lf1 lf2 H H0 H1 H2; unfold adapted_couple in H1, H2; - unfold adapted_couple in |- *; decompose [and] H1; - decompose [and] H2; clear H1 H2; repeat split. -apply RList_P25; try assumption. -rewrite H10; rewrite H4; unfold Rmin, Rmax in |- *; case (Rle_dec a b); - case (Rle_dec b c); intros; - (right; reflexivity) || (elim n; left; assumption). -rewrite RList_P22. -rewrite H5; unfold Rmin, Rmax in |- *; case (Rle_dec a b); case (Rle_dec a c); - intros; - [ reflexivity - | elim n; apply Rle_trans with b; left; assumption - | elim n; left; assumption - | elim n0; left; assumption ]. -red in |- *; intro; rewrite H1 in H6; discriminate. -rewrite RList_P24. -rewrite H9; unfold Rmin, Rmax in |- *; case (Rle_dec b c); case (Rle_dec a c); - intros; - [ reflexivity - | elim n; apply Rle_trans with b; left; assumption - | elim n; left; assumption - | elim n0; left; assumption ]. -red in |- *; intro; rewrite H1 in H11; discriminate. -apply StepFun_P20. -rewrite RList_P23; apply neq_O_lt; red in |- *; intro. -assert (H2 : (Rlength l1 + Rlength l2)%nat = 0%nat). -symmetry in |- *; apply H1. -elim (plus_is_O _ _ H2); intros; rewrite H12 in H6; discriminate. -unfold constant_D_eq, open_interval in |- *; intros; - elim (le_or_lt (S (S i)) (Rlength l1)); intro. -assert (H14 : pos_Rl (cons_Rlist l1 l2) i = pos_Rl l1 i). -apply RList_P26; apply lt_S_n; apply le_lt_n_Sm; apply le_S_n; - apply le_trans with (Rlength l1); [ assumption | apply le_n_Sn ]. -assert (H15 : pos_Rl (cons_Rlist l1 l2) (S i) = pos_Rl l1 (S i)). -apply RList_P26; apply lt_S_n; apply le_lt_n_Sm; assumption. -rewrite H14 in H2; rewrite H15 in H2; assert (H16 : (2 <= Rlength l1)%nat). -apply le_trans with (S (S i)); - [ repeat apply le_n_S; apply le_O_n | assumption ]. -elim (RList_P20 _ H16); intros r1 [r2 [r3 H17]]; rewrite H17; - change - (f x = pos_Rl (app_Rlist (mid_Rlist (cons_Rlist (cons r2 r3) l2) r1) f) i) - in |- *; rewrite RList_P12. -induction i as [| i Hreci]. -simpl in |- *; assert (H18 := H8 0%nat); - unfold constant_D_eq, open_interval in H18; - assert (H19 : (0 < pred (Rlength l1))%nat). -rewrite H17; simpl in |- *; apply lt_O_Sn. -assert (H20 := H18 H19); repeat rewrite H20. -reflexivity. -assert (H21 : r1 <= r2). -rewrite H17 in H3; apply (H3 0%nat). -simpl in |- *; apply lt_O_Sn. -elim H21; intro. -split. -rewrite H17; simpl in |- *; 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; assumption - | discrR ] ]. -rewrite H17; simpl in |- *; 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 r1); rewrite double; - apply Rplus_lt_compat_l; assumption - | discrR ] ]. -elim H2; intros; rewrite H17 in H23; rewrite H17 in H24; simpl in H24; - simpl in H23; rewrite H22 in H23; - elim (Rlt_irrefl _ (Rlt_trans _ _ _ H23 H24)). -assumption. -clear Hreci; rewrite RList_P13. -rewrite H17 in H14; rewrite H17 in H15; - change - (pos_Rl (cons_Rlist (cons r2 r3) l2) i = - pos_Rl (cons r1 (cons r2 r3)) (S i)) in H14; rewrite H14; - change - (pos_Rl (cons_Rlist (cons r2 r3) l2) (S i) = - pos_Rl (cons r1 (cons r2 r3)) (S (S i))) in H15; - rewrite H15; assert (H18 := H8 (S i)); - unfold constant_D_eq, open_interval in H18; - assert (H19 : (S i < pred (Rlength l1))%nat). -apply lt_pred; apply lt_S_n; apply le_lt_n_Sm; assumption. -assert (H20 := H18 H19); repeat rewrite H20. -reflexivity. -rewrite <- H17; assert (H21 : pos_Rl l1 (S i) <= pos_Rl l1 (S (S i))). -apply (H3 (S i)); apply lt_pred; apply lt_S_n; apply le_lt_n_Sm; assumption. -elim H21; intro. -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; assumption - | 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 (pos_Rl l1 (S i))); - rewrite double; apply Rplus_lt_compat_l; assumption - | discrR ] ]. -elim H2; intros; rewrite H22 in H23; - elim (Rlt_irrefl _ (Rlt_trans _ _ _ H23 H24)). -assumption. -simpl in |- *; rewrite H17 in H1; simpl in H1; apply lt_S_n; assumption. -rewrite RList_P14; rewrite H17 in H1; simpl in H1; apply H1. -inversion H12. -assert (H16 : pos_Rl (cons_Rlist l1 l2) (S i) = b). -rewrite RList_P29. -rewrite H15; rewrite <- minus_n_n; rewrite H10; unfold Rmin in |- *; - case (Rle_dec b c); intro; [ reflexivity | elim n; left; assumption ]. -rewrite H15; apply le_n. -induction l1 as [| r l1 Hrecl1]. -simpl in H15; discriminate. -clear Hrecl1; simpl in H1; simpl in |- *; apply lt_n_S; assumption. -assert (H17 : pos_Rl (cons_Rlist l1 l2) i = b). -rewrite RList_P26. -replace i with (pred (Rlength l1)); - [ rewrite H4; unfold Rmax in |- *; case (Rle_dec a b); intro; + forall (f:R -> R) (a b c:R) (l1 l2 lf1 lf2:Rlist), + a < b -> + b < c -> + adapted_couple f a b l1 lf1 -> + adapted_couple f b c l2 lf2 -> + adapted_couple f a c (cons_Rlist l1 l2) (FF (cons_Rlist l1 l2) f). +Proof. + intros f a b c l1 l2 lf1 lf2 H H0 H1 H2; unfold adapted_couple in H1, H2; + unfold adapted_couple in |- *; decompose [and] H1; + decompose [and] H2; clear H1 H2; repeat split. + apply RList_P25; try assumption. + rewrite H10; rewrite H4; unfold Rmin, Rmax in |- *; case (Rle_dec a b); + case (Rle_dec b c); intros; + (right; reflexivity) || (elim n; left; assumption). + rewrite RList_P22. + rewrite H5; unfold Rmin, Rmax in |- *; case (Rle_dec a b); case (Rle_dec a c); + intros; + [ reflexivity + | elim n; apply Rle_trans with b; left; assumption + | elim n; left; assumption + | elim n0; left; assumption ]. + red in |- *; intro; rewrite H1 in H6; discriminate. + rewrite RList_P24. + rewrite H9; unfold Rmin, Rmax in |- *; case (Rle_dec b c); case (Rle_dec a c); + intros; + [ reflexivity + | elim n; apply Rle_trans with b; left; assumption + | elim n; left; assumption + | elim n0; left; assumption ]. + red in |- *; intro; rewrite H1 in H11; discriminate. + apply StepFun_P20. + rewrite RList_P23; apply neq_O_lt; red in |- *; intro. + assert (H2 : (Rlength l1 + Rlength l2)%nat = 0%nat). + symmetry in |- *; apply H1. + elim (plus_is_O _ _ H2); intros; rewrite H12 in H6; discriminate. + unfold constant_D_eq, open_interval in |- *; intros; + elim (le_or_lt (S (S i)) (Rlength l1)); intro. + assert (H14 : pos_Rl (cons_Rlist l1 l2) i = pos_Rl l1 i). + apply RList_P26; apply lt_S_n; apply le_lt_n_Sm; apply le_S_n; + apply le_trans with (Rlength l1); [ assumption | apply le_n_Sn ]. + assert (H15 : pos_Rl (cons_Rlist l1 l2) (S i) = pos_Rl l1 (S i)). + apply RList_P26; apply lt_S_n; apply le_lt_n_Sm; assumption. + rewrite H14 in H2; rewrite H15 in H2; assert (H16 : (2 <= Rlength l1)%nat). + apply le_trans with (S (S i)); + [ repeat apply le_n_S; apply le_O_n | assumption ]. + elim (RList_P20 _ H16); intros r1 [r2 [r3 H17]]; rewrite H17; + change + (f x = pos_Rl (app_Rlist (mid_Rlist (cons_Rlist (cons r2 r3) l2) r1) f) i) + in |- *; rewrite RList_P12. + induction i as [| i Hreci]. + simpl in |- *; assert (H18 := H8 0%nat); + unfold constant_D_eq, open_interval in H18; + assert (H19 : (0 < pred (Rlength l1))%nat). + rewrite H17; simpl in |- *; apply lt_O_Sn. + assert (H20 := H18 H19); repeat rewrite H20. + reflexivity. + assert (H21 : r1 <= r2). + rewrite H17 in H3; apply (H3 0%nat). + simpl in |- *; apply lt_O_Sn. + elim H21; intro. + split. + rewrite H17; simpl in |- *; 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; assumption + | discrR ] ]. + rewrite H17; simpl in |- *; 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 r1); rewrite double; + apply Rplus_lt_compat_l; assumption + | discrR ] ]. + elim H2; intros; rewrite H17 in H23; rewrite H17 in H24; simpl in H24; + simpl in H23; rewrite H22 in H23; + elim (Rlt_irrefl _ (Rlt_trans _ _ _ H23 H24)). + assumption. + clear Hreci; rewrite RList_P13. + rewrite H17 in H14; rewrite H17 in H15; + change + (pos_Rl (cons_Rlist (cons r2 r3) l2) i = + pos_Rl (cons r1 (cons r2 r3)) (S i)) in H14; rewrite H14; + change + (pos_Rl (cons_Rlist (cons r2 r3) l2) (S i) = + pos_Rl (cons r1 (cons r2 r3)) (S (S i))) in H15; + rewrite H15; assert (H18 := H8 (S i)); + unfold constant_D_eq, open_interval in H18; + assert (H19 : (S i < pred (Rlength l1))%nat). + apply lt_pred; apply lt_S_n; apply le_lt_n_Sm; assumption. + assert (H20 := H18 H19); repeat rewrite H20. + reflexivity. + rewrite <- H17; assert (H21 : pos_Rl l1 (S i) <= pos_Rl l1 (S (S i))). + apply (H3 (S i)); apply lt_pred; apply lt_S_n; apply le_lt_n_Sm; assumption. + elim H21; intro. + 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; assumption + | 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 (pos_Rl l1 (S i))); + rewrite double; apply Rplus_lt_compat_l; assumption + | discrR ] ]. + elim H2; intros; rewrite H22 in H23; + elim (Rlt_irrefl _ (Rlt_trans _ _ _ H23 H24)). + assumption. + simpl in |- *; rewrite H17 in H1; simpl in H1; apply lt_S_n; assumption. + rewrite RList_P14; rewrite H17 in H1; simpl in H1; apply H1. + inversion H12. + assert (H16 : pos_Rl (cons_Rlist l1 l2) (S i) = b). + rewrite RList_P29. + rewrite H15; rewrite <- minus_n_n; rewrite H10; unfold Rmin in |- *; + case (Rle_dec b c); intro; [ reflexivity | elim n; left; assumption ]. + rewrite H15; apply le_n. + induction l1 as [| r l1 Hrecl1]. + simpl in H15; discriminate. + clear Hrecl1; simpl in H1; simpl in |- *; apply lt_n_S; assumption. + assert (H17 : pos_Rl (cons_Rlist l1 l2) i = b). + rewrite RList_P26. + replace i with (pred (Rlength l1)); + [ rewrite H4; unfold Rmax in |- *; case (Rle_dec a b); intro; [ reflexivity | elim n; left; assumption ] - | rewrite H15; reflexivity ]. -rewrite H15; apply lt_n_Sn. -rewrite H16 in H2; rewrite H17 in H2; elim H2; intros; - elim (Rlt_irrefl _ (Rlt_trans _ _ _ H14 H18)). -assert (H16 : pos_Rl (cons_Rlist l1 l2) i = pos_Rl l2 (i - Rlength l1)). -apply RList_P29. -apply le_S_n; assumption. -apply lt_le_trans with (pred (Rlength (cons_Rlist l1 l2))); - [ assumption | apply le_pred_n ]. -assert - (H17 : pos_Rl (cons_Rlist l1 l2) (S i) = pos_Rl l2 (S (i - Rlength l1))). -replace (S (i - Rlength l1)) with (S i - Rlength l1)%nat. -apply RList_P29. -apply le_S_n; apply le_trans with (S i); [ assumption | apply le_n_Sn ]. -induction l1 as [| r l1 Hrecl1]. -simpl in H6; discriminate. -clear Hrecl1; simpl in H1; simpl in |- *; apply lt_n_S; assumption. -symmetry in |- *; apply minus_Sn_m; apply le_S_n; assumption. -assert (H18 : (2 <= Rlength l1)%nat). -clear f c l2 lf2 H0 H3 H8 H7 H10 H9 H11 H13 i H1 x H2 H12 m H14 H15 H16 H17; - induction l1 as [| r l1 Hrecl1]. -discriminate. -clear Hrecl1; induction l1 as [| r0 l1 Hrecl1]. -simpl in H5; simpl in H4; assert (H0 : Rmin a b < Rmax a b). -unfold Rmin, Rmax in |- *; case (Rle_dec a b); intro; - [ assumption | elim n; left; assumption ]. -rewrite <- H5 in H0; rewrite <- H4 in H0; elim (Rlt_irrefl _ H0). -clear Hrecl1; simpl in |- *; repeat apply le_n_S; apply le_O_n. -elim (RList_P20 _ H18); intros r1 [r2 [r3 H19]]; rewrite H19; - change - (f x = pos_Rl (app_Rlist (mid_Rlist (cons_Rlist (cons r2 r3) l2) r1) f) i) - in |- *; rewrite RList_P12. -induction i as [| i Hreci]. -assert (H20 := le_S_n _ _ H15); assert (H21 := le_trans _ _ _ H18 H20); - elim (le_Sn_O _ H21). -clear Hreci; rewrite RList_P13. -rewrite H19 in H16; rewrite H19 in H17; - change - (pos_Rl (cons_Rlist (cons r2 r3) l2) i = - pos_Rl l2 (S i - Rlength (cons r1 (cons r2 r3)))) - in H16; rewrite H16; - change - (pos_Rl (cons_Rlist (cons r2 r3) l2) (S i) = - pos_Rl l2 (S (S i - Rlength (cons r1 (cons r2 r3))))) - in H17; rewrite H17; assert (H20 := H13 (S i - Rlength l1)%nat); - unfold constant_D_eq, open_interval in H20; - assert (H21 : (S i - Rlength l1 < pred (Rlength l2))%nat). -apply lt_pred; rewrite minus_Sn_m. -apply plus_lt_reg_l with (Rlength l1); rewrite <- le_plus_minus. -rewrite H19 in H1; simpl in H1; rewrite H19; simpl in |- *; - rewrite RList_P23 in H1; apply lt_n_S; assumption. -apply le_trans with (S i); [ apply le_S_n; assumption | apply le_n_Sn ]. -apply le_S_n; assumption. -assert (H22 := H20 H21); repeat rewrite H22. -reflexivity. -rewrite <- H19; - assert - (H23 : pos_Rl l2 (S i - Rlength l1) <= pos_Rl l2 (S (S i - Rlength l1))). -apply H7; apply lt_pred. -rewrite minus_Sn_m. -apply plus_lt_reg_l with (Rlength l1); rewrite <- le_plus_minus. -rewrite H19 in H1; simpl in H1; rewrite H19; simpl in |- *; - rewrite RList_P23 in H1; apply lt_n_S; assumption. -apply le_trans with (S i); [ apply le_S_n; assumption | apply le_n_Sn ]. -apply le_S_n; assumption. -elim H23; intro. -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; assumption - | 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 (pos_Rl l2 (S i - Rlength l1))); - rewrite double; apply Rplus_lt_compat_l; assumption - | discrR ] ]. -rewrite <- H19 in H16; rewrite <- H19 in H17; elim H2; intros; - rewrite H19 in H25; rewrite H19 in H26; simpl in H25; - simpl in H16; rewrite H16 in H25; simpl in H26; simpl in H17; - rewrite H17 in H26; simpl in H24; rewrite H24 in H25; - elim (Rlt_irrefl _ (Rlt_trans _ _ _ H25 H26)). -assert (H23 : pos_Rl (cons_Rlist l1 l2) (S i) = pos_Rl l2 (S i - Rlength l1)). -rewrite H19; simpl in |- *; simpl in H16; apply H16. -assert - (H24 : - pos_Rl (cons_Rlist l1 l2) (S (S i)) = pos_Rl l2 (S (S i - Rlength l1))). -rewrite H19; simpl in |- *; simpl in H17; apply H17. -rewrite <- H23; rewrite <- H24; assumption. -simpl in |- *; rewrite H19 in H1; simpl in H1; apply lt_S_n; assumption. -rewrite RList_P14; rewrite H19 in H1; simpl in H1; simpl in |- *; apply H1. + | rewrite H15; reflexivity ]. + rewrite H15; apply lt_n_Sn. + rewrite H16 in H2; rewrite H17 in H2; elim H2; intros; + elim (Rlt_irrefl _ (Rlt_trans _ _ _ H14 H18)). + assert (H16 : pos_Rl (cons_Rlist l1 l2) i = pos_Rl l2 (i - Rlength l1)). + apply RList_P29. + apply le_S_n; assumption. + apply lt_le_trans with (pred (Rlength (cons_Rlist l1 l2))); + [ assumption | apply le_pred_n ]. + assert + (H17 : pos_Rl (cons_Rlist l1 l2) (S i) = pos_Rl l2 (S (i - Rlength l1))). + replace (S (i - Rlength l1)) with (S i - Rlength l1)%nat. + apply RList_P29. + apply le_S_n; apply le_trans with (S i); [ assumption | apply le_n_Sn ]. + induction l1 as [| r l1 Hrecl1]. + simpl in H6; discriminate. + clear Hrecl1; simpl in H1; simpl in |- *; apply lt_n_S; assumption. + symmetry in |- *; apply minus_Sn_m; apply le_S_n; assumption. + assert (H18 : (2 <= Rlength l1)%nat). + clear f c l2 lf2 H0 H3 H8 H7 H10 H9 H11 H13 i H1 x H2 H12 m H14 H15 H16 H17; + induction l1 as [| r l1 Hrecl1]. + discriminate. + clear Hrecl1; induction l1 as [| r0 l1 Hrecl1]. + simpl in H5; simpl in H4; assert (H0 : Rmin a b < Rmax a b). + unfold Rmin, Rmax in |- *; case (Rle_dec a b); intro; + [ assumption | elim n; left; assumption ]. + rewrite <- H5 in H0; rewrite <- H4 in H0; elim (Rlt_irrefl _ H0). + clear Hrecl1; simpl in |- *; repeat apply le_n_S; apply le_O_n. + elim (RList_P20 _ H18); intros r1 [r2 [r3 H19]]; rewrite H19; + change + (f x = pos_Rl (app_Rlist (mid_Rlist (cons_Rlist (cons r2 r3) l2) r1) f) i) + in |- *; rewrite RList_P12. + induction i as [| i Hreci]. + assert (H20 := le_S_n _ _ H15); assert (H21 := le_trans _ _ _ H18 H20); + elim (le_Sn_O _ H21). + clear Hreci; rewrite RList_P13. + rewrite H19 in H16; rewrite H19 in H17; + change + (pos_Rl (cons_Rlist (cons r2 r3) l2) i = + pos_Rl l2 (S i - Rlength (cons r1 (cons r2 r3)))) + in H16; rewrite H16; + change + (pos_Rl (cons_Rlist (cons r2 r3) l2) (S i) = + pos_Rl l2 (S (S i - Rlength (cons r1 (cons r2 r3))))) + in H17; rewrite H17; assert (H20 := H13 (S i - Rlength l1)%nat); + unfold constant_D_eq, open_interval in H20; + assert (H21 : (S i - Rlength l1 < pred (Rlength l2))%nat). + apply lt_pred; rewrite minus_Sn_m. + apply plus_lt_reg_l with (Rlength l1); rewrite <- le_plus_minus. + rewrite H19 in H1; simpl in H1; rewrite H19; simpl in |- *; + rewrite RList_P23 in H1; apply lt_n_S; assumption. + apply le_trans with (S i); [ apply le_S_n; assumption | apply le_n_Sn ]. + apply le_S_n; assumption. + assert (H22 := H20 H21); repeat rewrite H22. + reflexivity. + rewrite <- H19; + assert + (H23 : pos_Rl l2 (S i - Rlength l1) <= pos_Rl l2 (S (S i - Rlength l1))). + apply H7; apply lt_pred. + rewrite minus_Sn_m. + apply plus_lt_reg_l with (Rlength l1); rewrite <- le_plus_minus. + rewrite H19 in H1; simpl in H1; rewrite H19; simpl in |- *; + rewrite RList_P23 in H1; apply lt_n_S; assumption. + apply le_trans with (S i); [ apply le_S_n; assumption | apply le_n_Sn ]. + apply le_S_n; assumption. + elim H23; intro. + 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; assumption + | 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 (pos_Rl l2 (S i - Rlength l1))); + rewrite double; apply Rplus_lt_compat_l; assumption + | discrR ] ]. + rewrite <- H19 in H16; rewrite <- H19 in H17; elim H2; intros; + rewrite H19 in H25; rewrite H19 in H26; simpl in H25; + simpl in H16; rewrite H16 in H25; simpl in H26; simpl in H17; + rewrite H17 in H26; simpl in H24; rewrite H24 in H25; + elim (Rlt_irrefl _ (Rlt_trans _ _ _ H25 H26)). + assert (H23 : pos_Rl (cons_Rlist l1 l2) (S i) = pos_Rl l2 (S i - Rlength l1)). + rewrite H19; simpl in |- *; simpl in H16; apply H16. + assert + (H24 : + pos_Rl (cons_Rlist l1 l2) (S (S i)) = pos_Rl l2 (S (S i - Rlength l1))). + rewrite H19; simpl in |- *; simpl in H17; apply H17. + rewrite <- H23; rewrite <- H24; assumption. + simpl in |- *; rewrite H19 in H1; simpl in H1; apply lt_S_n; assumption. + rewrite RList_P14; rewrite H19 in H1; simpl in H1; simpl in |- *; apply H1. Qed. Lemma StepFun_P41 : - forall (f:R -> R) (a b c:R), - a <= b -> b <= c -> IsStepFun f a b -> IsStepFun f b c -> IsStepFun f a c. + forall (f:R -> R) (a b c:R), + a <= b -> b <= c -> IsStepFun f a b -> IsStepFun f b c -> IsStepFun f a c. Proof. -intros f a b c H H0 (l1,(lf1,H1)) (l2,(lf2,H2)); - destruct (total_order_T a b) as [[Hltab|Hab]|Hgtab]. - destruct (total_order_T b c) as [[Hltbc|Hbc]|Hgtbc]. -exists (cons_Rlist l1 l2); exists (FF (cons_Rlist l1 l2) f); - apply StepFun_P40 with b lf1 lf2; assumption. -exists l1; exists lf1; rewrite Hbc in H1; assumption. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 Hgtbc)). -exists l2; exists lf2; rewrite <- Hab in H2; assumption. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H Hgtab)). + intros f a b c H H0 (l1,(lf1,H1)) (l2,(lf2,H2)); + destruct (total_order_T a b) as [[Hltab|Hab]|Hgtab]. + destruct (total_order_T b c) as [[Hltbc|Hbc]|Hgtbc]. + exists (cons_Rlist l1 l2); exists (FF (cons_Rlist l1 l2) f); + apply StepFun_P40 with b lf1 lf2; assumption. + exists l1; exists lf1; rewrite Hbc in H1; assumption. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H0 Hgtbc)). + exists l2; exists lf2; rewrite <- Hab in H2; assumption. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H Hgtab)). Qed. Lemma StepFun_P42 : - forall (l1 l2:Rlist) (f:R -> R), - pos_Rl l1 (pred (Rlength l1)) = pos_Rl l2 0 -> - Int_SF (FF (cons_Rlist l1 l2) f) (cons_Rlist l1 l2) = - Int_SF (FF l1 f) l1 + Int_SF (FF l2 f) l2. -intros l1 l2 f; induction l1 as [| r l1 IHl1]; intros H; - [ simpl in |- *; ring - | destruct l1 as [| r0 r1]; - [ simpl in H; simpl in |- *; destruct l2 as [| r0 r1]; - [ simpl in |- *; ring | simpl in |- *; simpl in H; rewrite H; ring ] - | simpl in |- *; rewrite Rplus_assoc; apply Rplus_eq_compat_l; apply IHl1; - rewrite <- H; reflexivity ] ]. + forall (l1 l2:Rlist) (f:R -> R), + pos_Rl l1 (pred (Rlength l1)) = pos_Rl l2 0 -> + Int_SF (FF (cons_Rlist l1 l2) f) (cons_Rlist l1 l2) = + Int_SF (FF l1 f) l1 + Int_SF (FF l2 f) l2. +Proof. + intros l1 l2 f; induction l1 as [| r l1 IHl1]; intros H; + [ simpl in |- *; ring + | destruct l1 as [| r0 r1]; + [ simpl in H; simpl in |- *; destruct l2 as [| r0 r1]; + [ simpl in |- *; ring | simpl in |- *; simpl in H; rewrite H; ring ] + | simpl in |- *; rewrite Rplus_assoc; apply Rplus_eq_compat_l; apply IHl1; + rewrite <- H; reflexivity ] ]. Qed. Lemma StepFun_P43 : - forall (f:R -> R) (a b c:R) (pr1:IsStepFun f a b) - (pr2:IsStepFun f b c) (pr3:IsStepFun f a c), - RiemannInt_SF (mkStepFun pr1) + RiemannInt_SF (mkStepFun pr2) = - RiemannInt_SF (mkStepFun pr3). -intros f; intros; - assert - (H1 : - sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f a b l l0))). -apply pr1. -assert - (H2 : - sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f b c l l0))). -apply pr2. -assert - (H3 : - sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f a c l l0))). -apply pr3. -elim H1; clear H1; intros l1 [lf1 H1]; elim H2; clear H2; intros l2 [lf2 H2]; - elim H3; clear H3; intros l3 [lf3 H3]. -replace (RiemannInt_SF (mkStepFun pr1)) with - match Rle_dec a b with - | left _ => Int_SF lf1 l1 - | right _ => - Int_SF lf1 l1 - end. -replace (RiemannInt_SF (mkStepFun pr2)) with - match Rle_dec b c with - | left _ => Int_SF lf2 l2 - | right _ => - Int_SF lf2 l2 - end. -replace (RiemannInt_SF (mkStepFun pr3)) with - match Rle_dec a c with - | left _ => Int_SF lf3 l3 - | right _ => - Int_SF lf3 l3 - end. -case (Rle_dec a b); case (Rle_dec b c); case (Rle_dec a c); intros. -elim r1; intro. -elim r0; intro. -replace (Int_SF lf3 l3) with - (Int_SF (FF (cons_Rlist l1 l2) f) (cons_Rlist l1 l2)). -replace (Int_SF lf1 l1) with (Int_SF (FF l1 f) l1). -replace (Int_SF lf2 l2) with (Int_SF (FF l2 f) l2). -symmetry in |- *; apply StepFun_P42. -unfold adapted_couple in H1, H2; decompose [and] H1; decompose [and] H2; - clear H1 H2; rewrite H11; rewrite H5; unfold Rmax, Rmin in |- *; - case (Rle_dec a b); case (Rle_dec b c); intros; reflexivity || elim n; - assumption. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf2; apply H2; - assumption - | assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf1; apply H1 - | assumption ]. -eapply StepFun_P17; [ apply (StepFun_P40 H H0 H1 H2) | apply H3 ]. -replace (Int_SF lf2 l2) with 0. -rewrite Rplus_0_r; eapply StepFun_P17; - [ apply H1 | rewrite <- H0 in H3; apply H3 ]. -symmetry in |- *; eapply StepFun_P8; [ apply H2 | assumption ]. -replace (Int_SF lf1 l1) with 0. -rewrite Rplus_0_l; eapply StepFun_P17; - [ apply H2 | rewrite H in H3; apply H3 ]. -symmetry in |- *; eapply StepFun_P8; [ apply H1 | assumption ]. -elim n; apply Rle_trans with b; assumption. -apply Rplus_eq_reg_l with (Int_SF lf2 l2); - replace (Int_SF lf2 l2 + (Int_SF lf1 l1 + - Int_SF lf2 l2)) with - (Int_SF lf1 l1); [ idtac | ring ]. -assert (H : c < b). -auto with real. -elim r; intro. -rewrite Rplus_comm; - replace (Int_SF lf1 l1) with - (Int_SF (FF (cons_Rlist l3 l2) f) (cons_Rlist l3 l2)). -replace (Int_SF lf3 l3) with (Int_SF (FF l3 f) l3). -replace (Int_SF lf2 l2) with (Int_SF (FF l2 f) l2). -apply StepFun_P42. -unfold adapted_couple in H2, H3; decompose [and] H2; decompose [and] H3; - clear H3 H2; rewrite H10; rewrite H6; unfold Rmax, Rmin in |- *; - case (Rle_dec a c); case (Rle_dec b c); intros; - [ elim n; assumption - | reflexivity - | elim n0; assumption - | elim n1; assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf2; apply H2 - | assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf3; apply H3 - | assumption ]. -eapply StepFun_P17; - [ apply (StepFun_P40 H0 H H3 (StepFun_P2 H2)) | apply H1 ]. -replace (Int_SF lf3 l3) with 0. -rewrite Rplus_0_r; eapply StepFun_P17; - [ apply H1 | apply StepFun_P2; rewrite <- H0 in H2; apply H2 ]. -symmetry in |- *; eapply StepFun_P8; [ apply H3 | assumption ]. -replace (Int_SF lf2 l2) with (Int_SF lf3 l3 + Int_SF lf1 l1). -ring. -elim r; intro. -replace (Int_SF lf2 l2) with - (Int_SF (FF (cons_Rlist l3 l1) f) (cons_Rlist l3 l1)). -replace (Int_SF lf3 l3) with (Int_SF (FF l3 f) l3). -replace (Int_SF lf1 l1) with (Int_SF (FF l1 f) l1). -symmetry in |- *; apply StepFun_P42. -unfold adapted_couple in H1, H3; decompose [and] H1; decompose [and] H3; - clear H3 H1; rewrite H9; rewrite H5; unfold Rmax, Rmin in |- *; - case (Rle_dec a c); case (Rle_dec a b); intros; - [ elim n; assumption - | elim n1; assumption - | reflexivity - | elim n1; assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf1; apply H1 - | assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf3; apply H3 - | assumption ]. -eapply StepFun_P17. -assert (H0 : c < a). -auto with real. -apply (StepFun_P40 H0 H (StepFun_P2 H3) H1). -apply StepFun_P2; apply H2. -replace (Int_SF lf1 l1) with 0. -rewrite Rplus_0_r; eapply StepFun_P17; - [ apply H3 | rewrite <- H in H2; apply H2 ]. -symmetry in |- *; eapply StepFun_P8; [ apply H1 | assumption ]. -assert (H : b < a). -auto with real. -replace (Int_SF lf2 l2) with (Int_SF lf3 l3 + Int_SF lf1 l1). -ring. -rewrite Rplus_comm; elim r; intro. -replace (Int_SF lf2 l2) with - (Int_SF (FF (cons_Rlist l1 l3) f) (cons_Rlist l1 l3)). -replace (Int_SF lf3 l3) with (Int_SF (FF l3 f) l3). -replace (Int_SF lf1 l1) with (Int_SF (FF l1 f) l1). -symmetry in |- *; apply StepFun_P42. -unfold adapted_couple in H1, H3; decompose [and] H1; decompose [and] H3; - clear H3 H1; rewrite H11; rewrite H5; unfold Rmax, Rmin in |- *; - case (Rle_dec a c); case (Rle_dec a b); intros; - [ elim n; assumption - | reflexivity - | elim n0; assumption - | elim n1; assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf1; apply H1 - | assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf3; apply H3 - | assumption ]. -eapply StepFun_P17. -apply (StepFun_P40 H H0 (StepFun_P2 H1) H3). -apply H2. -replace (Int_SF lf3 l3) with 0. -rewrite Rplus_0_r; eapply StepFun_P17; - [ apply H1 | rewrite <- H0 in H2; apply StepFun_P2; apply H2 ]. -symmetry in |- *; eapply StepFun_P8; [ apply H3 | assumption ]. -assert (H : c < a). -auto with real. -replace (Int_SF lf1 l1) with (Int_SF lf2 l2 + Int_SF lf3 l3). -ring. -elim r; intro. -replace (Int_SF lf1 l1) with - (Int_SF (FF (cons_Rlist l2 l3) f) (cons_Rlist l2 l3)). -replace (Int_SF lf3 l3) with (Int_SF (FF l3 f) l3). -replace (Int_SF lf2 l2) with (Int_SF (FF l2 f) l2). -symmetry in |- *; apply StepFun_P42. -unfold adapted_couple in H2, H3; decompose [and] H2; decompose [and] H3; - clear H3 H2; rewrite H11; rewrite H5; unfold Rmax, Rmin in |- *; - case (Rle_dec a c); case (Rle_dec b c); intros; - [ elim n; assumption - | elim n1; assumption - | reflexivity - | elim n1; assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf2; apply H2 - | assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf3; apply H3 - | assumption ]. -eapply StepFun_P17. -apply (StepFun_P40 H0 H H2 (StepFun_P2 H3)). -apply StepFun_P2; apply H1. -replace (Int_SF lf2 l2) with 0. -rewrite Rplus_0_l; eapply StepFun_P17; - [ apply H3 | rewrite H0 in H1; apply H1 ]. -symmetry in |- *; eapply StepFun_P8; [ apply H2 | assumption ]. -elim n; apply Rle_trans with a; try assumption. -auto with real. -assert (H : c < b). -auto with real. -assert (H0 : b < a). -auto with real. -replace (Int_SF lf3 l3) with (Int_SF lf2 l2 + Int_SF lf1 l1). -ring. -replace (Int_SF lf3 l3) with - (Int_SF (FF (cons_Rlist l2 l1) f) (cons_Rlist l2 l1)). -replace (Int_SF lf1 l1) with (Int_SF (FF l1 f) l1). -replace (Int_SF lf2 l2) with (Int_SF (FF l2 f) l2). -symmetry in |- *; apply StepFun_P42. -unfold adapted_couple in H2, H1; decompose [and] H2; decompose [and] H1; - clear H1 H2; rewrite H11; rewrite H5; unfold Rmax, Rmin in |- *; - case (Rle_dec a b); case (Rle_dec b c); intros; - [ elim n1; assumption - | elim n1; assumption - | elim n0; assumption - | reflexivity ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf2; apply H2 - | assumption ]. -eapply StepFun_P17; - [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf1; apply H1 - | assumption ]. -eapply StepFun_P17. -apply (StepFun_P40 H H0 (StepFun_P2 H2) (StepFun_P2 H1)). -apply StepFun_P2; apply H3. -unfold RiemannInt_SF in |- *; case (Rle_dec a c); intro. -eapply StepFun_P17. -apply H3. -change - (adapted_couple (mkStepFun pr3) a c (subdivision (mkStepFun pr3)) - (subdivision_val (mkStepFun pr3))) in |- *; apply StepFun_P1. -apply Ropp_eq_compat; eapply StepFun_P17. -apply H3. -change - (adapted_couple (mkStepFun pr3) a c (subdivision (mkStepFun pr3)) - (subdivision_val (mkStepFun pr3))) in |- *; apply StepFun_P1. -unfold RiemannInt_SF in |- *; case (Rle_dec b c); intro. -eapply StepFun_P17. -apply H2. -change - (adapted_couple (mkStepFun pr2) b c (subdivision (mkStepFun pr2)) - (subdivision_val (mkStepFun pr2))) in |- *; apply StepFun_P1. -apply Ropp_eq_compat; eapply StepFun_P17. -apply H2. -change - (adapted_couple (mkStepFun pr2) b c (subdivision (mkStepFun pr2)) - (subdivision_val (mkStepFun pr2))) in |- *; apply StepFun_P1. -unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro. -eapply StepFun_P17. -apply H1. -change - (adapted_couple (mkStepFun pr1) a b (subdivision (mkStepFun pr1)) - (subdivision_val (mkStepFun pr1))) in |- *; apply StepFun_P1. -apply Ropp_eq_compat; eapply StepFun_P17. -apply H1. -change - (adapted_couple (mkStepFun pr1) a b (subdivision (mkStepFun pr1)) - (subdivision_val (mkStepFun pr1))) in |- *; apply StepFun_P1. + forall (f:R -> R) (a b c:R) (pr1:IsStepFun f a b) + (pr2:IsStepFun f b c) (pr3:IsStepFun f a c), + RiemannInt_SF (mkStepFun pr1) + RiemannInt_SF (mkStepFun pr2) = + RiemannInt_SF (mkStepFun pr3). +Proof. + intros f; intros; + assert + (H1 : + sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f a b l l0))). + apply pr1. + assert + (H2 : + sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f b c l l0))). + apply pr2. + assert + (H3 : + sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f a c l l0))). + apply pr3. + elim H1; clear H1; intros l1 [lf1 H1]; elim H2; clear H2; intros l2 [lf2 H2]; + elim H3; clear H3; intros l3 [lf3 H3]. + replace (RiemannInt_SF (mkStepFun pr1)) with + match Rle_dec a b with + | left _ => Int_SF lf1 l1 + | right _ => - Int_SF lf1 l1 + end. + replace (RiemannInt_SF (mkStepFun pr2)) with + match Rle_dec b c with + | left _ => Int_SF lf2 l2 + | right _ => - Int_SF lf2 l2 + end. + replace (RiemannInt_SF (mkStepFun pr3)) with + match Rle_dec a c with + | left _ => Int_SF lf3 l3 + | right _ => - Int_SF lf3 l3 + end. + case (Rle_dec a b); case (Rle_dec b c); case (Rle_dec a c); intros. + elim r1; intro. + elim r0; intro. + replace (Int_SF lf3 l3) with + (Int_SF (FF (cons_Rlist l1 l2) f) (cons_Rlist l1 l2)). + replace (Int_SF lf1 l1) with (Int_SF (FF l1 f) l1). + replace (Int_SF lf2 l2) with (Int_SF (FF l2 f) l2). + symmetry in |- *; apply StepFun_P42. + unfold adapted_couple in H1, H2; decompose [and] H1; decompose [and] H2; + clear H1 H2; rewrite H11; rewrite H5; unfold Rmax, Rmin in |- *; + case (Rle_dec a b); case (Rle_dec b c); intros; reflexivity || elim n; + assumption. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf2; apply H2; + assumption + | assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf1; apply H1 + | assumption ]. + eapply StepFun_P17; [ apply (StepFun_P40 H H0 H1 H2) | apply H3 ]. + replace (Int_SF lf2 l2) with 0. + rewrite Rplus_0_r; eapply StepFun_P17; + [ apply H1 | rewrite <- H0 in H3; apply H3 ]. + symmetry in |- *; eapply StepFun_P8; [ apply H2 | assumption ]. + replace (Int_SF lf1 l1) with 0. + rewrite Rplus_0_l; eapply StepFun_P17; + [ apply H2 | rewrite H in H3; apply H3 ]. + symmetry in |- *; eapply StepFun_P8; [ apply H1 | assumption ]. + elim n; apply Rle_trans with b; assumption. + apply Rplus_eq_reg_l with (Int_SF lf2 l2); + replace (Int_SF lf2 l2 + (Int_SF lf1 l1 + - Int_SF lf2 l2)) with + (Int_SF lf1 l1); [ idtac | ring ]. + assert (H : c < b). + auto with real. + elim r; intro. + rewrite Rplus_comm; + replace (Int_SF lf1 l1) with + (Int_SF (FF (cons_Rlist l3 l2) f) (cons_Rlist l3 l2)). + replace (Int_SF lf3 l3) with (Int_SF (FF l3 f) l3). + replace (Int_SF lf2 l2) with (Int_SF (FF l2 f) l2). + apply StepFun_P42. + unfold adapted_couple in H2, H3; decompose [and] H2; decompose [and] H3; + clear H3 H2; rewrite H10; rewrite H6; unfold Rmax, Rmin in |- *; + case (Rle_dec a c); case (Rle_dec b c); intros; + [ elim n; assumption + | reflexivity + | elim n0; assumption + | elim n1; assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf2; apply H2 + | assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf3; apply H3 + | assumption ]. + eapply StepFun_P17; + [ apply (StepFun_P40 H0 H H3 (StepFun_P2 H2)) | apply H1 ]. + replace (Int_SF lf3 l3) with 0. + rewrite Rplus_0_r; eapply StepFun_P17; + [ apply H1 | apply StepFun_P2; rewrite <- H0 in H2; apply H2 ]. + symmetry in |- *; eapply StepFun_P8; [ apply H3 | assumption ]. + replace (Int_SF lf2 l2) with (Int_SF lf3 l3 + Int_SF lf1 l1). + ring. + elim r; intro. + replace (Int_SF lf2 l2) with + (Int_SF (FF (cons_Rlist l3 l1) f) (cons_Rlist l3 l1)). + replace (Int_SF lf3 l3) with (Int_SF (FF l3 f) l3). + replace (Int_SF lf1 l1) with (Int_SF (FF l1 f) l1). + symmetry in |- *; apply StepFun_P42. + unfold adapted_couple in H1, H3; decompose [and] H1; decompose [and] H3; + clear H3 H1; rewrite H9; rewrite H5; unfold Rmax, Rmin in |- *; + case (Rle_dec a c); case (Rle_dec a b); intros; + [ elim n; assumption + | elim n1; assumption + | reflexivity + | elim n1; assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf1; apply H1 + | assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf3; apply H3 + | assumption ]. + eapply StepFun_P17. + assert (H0 : c < a). + auto with real. + apply (StepFun_P40 H0 H (StepFun_P2 H3) H1). + apply StepFun_P2; apply H2. + replace (Int_SF lf1 l1) with 0. + rewrite Rplus_0_r; eapply StepFun_P17; + [ apply H3 | rewrite <- H in H2; apply H2 ]. + symmetry in |- *; eapply StepFun_P8; [ apply H1 | assumption ]. + assert (H : b < a). + auto with real. + replace (Int_SF lf2 l2) with (Int_SF lf3 l3 + Int_SF lf1 l1). + ring. + rewrite Rplus_comm; elim r; intro. + replace (Int_SF lf2 l2) with + (Int_SF (FF (cons_Rlist l1 l3) f) (cons_Rlist l1 l3)). + replace (Int_SF lf3 l3) with (Int_SF (FF l3 f) l3). + replace (Int_SF lf1 l1) with (Int_SF (FF l1 f) l1). + symmetry in |- *; apply StepFun_P42. + unfold adapted_couple in H1, H3; decompose [and] H1; decompose [and] H3; + clear H3 H1; rewrite H11; rewrite H5; unfold Rmax, Rmin in |- *; + case (Rle_dec a c); case (Rle_dec a b); intros; + [ elim n; assumption + | reflexivity + | elim n0; assumption + | elim n1; assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf1; apply H1 + | assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf3; apply H3 + | assumption ]. + eapply StepFun_P17. + apply (StepFun_P40 H H0 (StepFun_P2 H1) H3). + apply H2. + replace (Int_SF lf3 l3) with 0. + rewrite Rplus_0_r; eapply StepFun_P17; + [ apply H1 | rewrite <- H0 in H2; apply StepFun_P2; apply H2 ]. + symmetry in |- *; eapply StepFun_P8; [ apply H3 | assumption ]. + assert (H : c < a). + auto with real. + replace (Int_SF lf1 l1) with (Int_SF lf2 l2 + Int_SF lf3 l3). + ring. + elim r; intro. + replace (Int_SF lf1 l1) with + (Int_SF (FF (cons_Rlist l2 l3) f) (cons_Rlist l2 l3)). + replace (Int_SF lf3 l3) with (Int_SF (FF l3 f) l3). + replace (Int_SF lf2 l2) with (Int_SF (FF l2 f) l2). + symmetry in |- *; apply StepFun_P42. + unfold adapted_couple in H2, H3; decompose [and] H2; decompose [and] H3; + clear H3 H2; rewrite H11; rewrite H5; unfold Rmax, Rmin in |- *; + case (Rle_dec a c); case (Rle_dec b c); intros; + [ elim n; assumption + | elim n1; assumption + | reflexivity + | elim n1; assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf2; apply H2 + | assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf3; apply H3 + | assumption ]. + eapply StepFun_P17. + apply (StepFun_P40 H0 H H2 (StepFun_P2 H3)). + apply StepFun_P2; apply H1. + replace (Int_SF lf2 l2) with 0. + rewrite Rplus_0_l; eapply StepFun_P17; + [ apply H3 | rewrite H0 in H1; apply H1 ]. + symmetry in |- *; eapply StepFun_P8; [ apply H2 | assumption ]. + elim n; apply Rle_trans with a; try assumption. + auto with real. + assert (H : c < b). + auto with real. + assert (H0 : b < a). + auto with real. + replace (Int_SF lf3 l3) with (Int_SF lf2 l2 + Int_SF lf1 l1). + ring. + replace (Int_SF lf3 l3) with + (Int_SF (FF (cons_Rlist l2 l1) f) (cons_Rlist l2 l1)). + replace (Int_SF lf1 l1) with (Int_SF (FF l1 f) l1). + replace (Int_SF lf2 l2) with (Int_SF (FF l2 f) l2). + symmetry in |- *; apply StepFun_P42. + unfold adapted_couple in H2, H1; decompose [and] H2; decompose [and] H1; + clear H1 H2; rewrite H11; rewrite H5; unfold Rmax, Rmin in |- *; + case (Rle_dec a b); case (Rle_dec b c); intros; + [ elim n1; assumption + | elim n1; assumption + | elim n0; assumption + | reflexivity ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf2; apply H2 + | assumption ]. + eapply StepFun_P17; + [ apply StepFun_P21; unfold is_subdivision in |- *; split with lf1; apply H1 + | assumption ]. + eapply StepFun_P17. + apply (StepFun_P40 H H0 (StepFun_P2 H2) (StepFun_P2 H1)). + apply StepFun_P2; apply H3. + unfold RiemannInt_SF in |- *; case (Rle_dec a c); intro. + eapply StepFun_P17. + apply H3. + change + (adapted_couple (mkStepFun pr3) a c (subdivision (mkStepFun pr3)) + (subdivision_val (mkStepFun pr3))) in |- *; apply StepFun_P1. + apply Ropp_eq_compat; eapply StepFun_P17. + apply H3. + change + (adapted_couple (mkStepFun pr3) a c (subdivision (mkStepFun pr3)) + (subdivision_val (mkStepFun pr3))) in |- *; apply StepFun_P1. + unfold RiemannInt_SF in |- *; case (Rle_dec b c); intro. + eapply StepFun_P17. + apply H2. + change + (adapted_couple (mkStepFun pr2) b c (subdivision (mkStepFun pr2)) + (subdivision_val (mkStepFun pr2))) in |- *; apply StepFun_P1. + apply Ropp_eq_compat; eapply StepFun_P17. + apply H2. + change + (adapted_couple (mkStepFun pr2) b c (subdivision (mkStepFun pr2)) + (subdivision_val (mkStepFun pr2))) in |- *; apply StepFun_P1. + unfold RiemannInt_SF in |- *; case (Rle_dec a b); intro. + eapply StepFun_P17. + apply H1. + change + (adapted_couple (mkStepFun pr1) a b (subdivision (mkStepFun pr1)) + (subdivision_val (mkStepFun pr1))) in |- *; apply StepFun_P1. + apply Ropp_eq_compat; eapply StepFun_P17. + apply H1. + change + (adapted_couple (mkStepFun pr1) a b (subdivision (mkStepFun pr1)) + (subdivision_val (mkStepFun pr1))) in |- *; apply StepFun_P1. Qed. Lemma StepFun_P44 : - forall (f:R -> R) (a b c:R), - IsStepFun f a b -> a <= c <= b -> IsStepFun f a c. -intros f; intros; assert (H0 : a <= b). -elim H; intros; apply Rle_trans with c; assumption. -elim H; clear H; intros; unfold IsStepFun in X; unfold is_subdivision in X; - elim X; clear X; intros l1 [lf1 H2]; - cut - (forall (l1 lf1:Rlist) (a b c:R) (f:R -> R), - adapted_couple f a b l1 lf1 -> - a <= c <= b -> - sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f a c l l0))). -intro X; unfold IsStepFun in |- *; unfold is_subdivision in |- *; eapply X. -apply H2. -split; assumption. -clear f a b c H0 H H1 H2 l1 lf1; simple induction l1. -intros; unfold adapted_couple in H; decompose [and] H; clear H; simpl in H4; - discriminate. -simple induction r0. -intros X lf1 a b c f H H0; assert (H1 : a = b). -unfold adapted_couple in H; decompose [and] H; clear H; simpl in H3; - simpl in H2; assert (H7 : a <= b). -elim H0; intros; apply Rle_trans with c; assumption. -replace a with (Rmin a b). -pattern b at 2 in |- *; replace b with (Rmax a b). -rewrite <- H2; rewrite H3; reflexivity. -unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -split with (cons r nil); split with lf1; assert (H2 : c = b). -rewrite H1 in H0; elim H0; intros; apply Rle_antisym; assumption. -rewrite H2; assumption. -intros r1 r2 _ X0 lf1 a b c f H H0; induction lf1 as [| r3 lf1 Hreclf1]. -unfold adapted_couple in H; decompose [and] H; clear H; simpl in H4; - discriminate. -clear Hreclf1; assert (H1 : {c <= r1} + {r1 < c}). -case (Rle_dec c r1); intro; [ left; assumption | right; auto with real ]. -elim H1; intro. -split with (cons r (cons c nil)); split with (cons r3 nil); - unfold adapted_couple in H; decompose [and] H; clear H; - assert (H6 : r = a). -simpl in H4; rewrite H4; unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity - | elim n; elim H0; intros; apply Rle_trans with c; assumption ]. -elim H0; clear H0; intros; unfold adapted_couple in |- *; repeat split. -rewrite H6; unfold ordered_Rlist in |- *; intros; simpl in H8; inversion H8; - [ simpl in |- *; assumption | elim (le_Sn_O _ H10) ]. -simpl in |- *; unfold Rmin in |- *; case (Rle_dec a c); intro; - [ assumption | elim n; assumption ]. -simpl in |- *; unfold Rmax in |- *; case (Rle_dec a c); intro; - [ reflexivity | elim n; assumption ]. -unfold constant_D_eq, open_interval in |- *; intros; simpl in H8; - inversion H8. -simpl in |- *; assert (H10 := H7 0%nat); - assert (H12 : (0 < pred (Rlength (cons r (cons r1 r2))))%nat). -simpl in |- *; apply lt_O_Sn. -apply (H10 H12); unfold open_interval in |- *; simpl in |- *; - rewrite H11 in H9; simpl in H9; elim H9; clear H9; - intros; split; try assumption. -apply Rlt_le_trans with c; assumption. -elim (le_Sn_O _ H11). -cut (adapted_couple f r1 b (cons r1 r2) lf1). -cut (r1 <= c <= b). -intros. -elim (X0 _ _ _ _ _ H3 H2); intros l1' [lf1' H4]; split with (cons r l1'); - split with (cons r3 lf1'); unfold adapted_couple in H, H4; - decompose [and] H; decompose [and] H4; clear H H4 X0; - assert (H14 : a <= b). -elim H0; intros; apply Rle_trans with c; assumption. -assert (H16 : r = a). -simpl in H7; rewrite H7; unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -induction l1' as [| r4 l1' Hrecl1']. -simpl in H13; discriminate. -clear Hrecl1'; unfold adapted_couple in |- *; repeat split. -unfold ordered_Rlist in |- *; intros; simpl in H; induction i as [| i Hreci]. -simpl in |- *; replace r4 with r1. -apply (H5 0%nat). -simpl in |- *; apply lt_O_Sn. -simpl in H12; rewrite H12; unfold Rmin in |- *; case (Rle_dec r1 c); intro; - [ reflexivity | elim n; left; assumption ]. -apply (H9 i); simpl in |- *; apply lt_S_n; assumption. -simpl in |- *; unfold Rmin in |- *; case (Rle_dec a c); intro; - [ assumption | elim n; elim H0; intros; assumption ]. -replace (Rmax a c) with (Rmax r1 c). -rewrite <- H11; reflexivity. -unfold Rmax in |- *; case (Rle_dec r1 c); case (Rle_dec a c); intros; - [ reflexivity - | elim n; elim H0; intros; assumption - | elim n; left; assumption - | elim n0; left; assumption ]. -simpl in |- *; simpl in H13; rewrite H13; reflexivity. -intros; simpl in H; unfold constant_D_eq, open_interval in |- *; intros; - induction i as [| i Hreci]. -simpl in |- *; assert (H17 := H10 0%nat); - assert (H18 : (0 < pred (Rlength (cons r (cons r1 r2))))%nat). -simpl in |- *; apply lt_O_Sn. -apply (H17 H18); unfold open_interval in |- *; simpl in |- *; simpl in H4; - elim H4; clear H4; intros; split; try assumption; - replace r1 with r4. -assumption. -simpl in H12; rewrite H12; unfold Rmin in |- *; case (Rle_dec r1 c); intro; - [ reflexivity | elim n; left; assumption ]. -clear Hreci; simpl in |- *; apply H15. -simpl in |- *; apply lt_S_n; assumption. -unfold open_interval in |- *; apply H4. -split. -left; assumption. -elim H0; intros; assumption. -eapply StepFun_P7; - [ elim H0; intros; apply Rle_trans with c; [ apply H2 | apply H3 ] - | apply H ]. + forall (f:R -> R) (a b c:R), + IsStepFun f a b -> a <= c <= b -> IsStepFun f a c. +Proof. + intros f; intros; assert (H0 : a <= b). + elim H; intros; apply Rle_trans with c; assumption. + elim H; clear H; intros; unfold IsStepFun in X; unfold is_subdivision in X; + elim X; clear X; intros l1 [lf1 H2]; + cut + (forall (l1 lf1:Rlist) (a b c:R) (f:R -> R), + adapted_couple f a b l1 lf1 -> + a <= c <= b -> + sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f a c l l0))). + intro X; unfold IsStepFun in |- *; unfold is_subdivision in |- *; eapply X. + apply H2. + split; assumption. + clear f a b c H0 H H1 H2 l1 lf1; simple induction l1. + intros; unfold adapted_couple in H; decompose [and] H; clear H; simpl in H4; + discriminate. + simple induction r0. + intros X lf1 a b c f H H0; assert (H1 : a = b). + unfold adapted_couple in H; decompose [and] H; clear H; simpl in H3; + simpl in H2; assert (H7 : a <= b). + elim H0; intros; apply Rle_trans with c; assumption. + replace a with (Rmin a b). + pattern b at 2 in |- *; replace b with (Rmax a b). + rewrite <- H2; rewrite H3; reflexivity. + unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + split with (cons r nil); split with lf1; assert (H2 : c = b). + rewrite H1 in H0; elim H0; intros; apply Rle_antisym; assumption. + rewrite H2; assumption. + intros r1 r2 _ X0 lf1 a b c f H H0; induction lf1 as [| r3 lf1 Hreclf1]. + unfold adapted_couple in H; decompose [and] H; clear H; simpl in H4; + discriminate. + clear Hreclf1; assert (H1 : {c <= r1} + {r1 < c}). + case (Rle_dec c r1); intro; [ left; assumption | right; auto with real ]. + elim H1; intro. + split with (cons r (cons c nil)); split with (cons r3 nil); + unfold adapted_couple in H; decompose [and] H; clear H; + assert (H6 : r = a). + simpl in H4; rewrite H4; unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity + | elim n; elim H0; intros; apply Rle_trans with c; assumption ]. + elim H0; clear H0; intros; unfold adapted_couple in |- *; repeat split. + rewrite H6; unfold ordered_Rlist in |- *; intros; simpl in H8; inversion H8; + [ simpl in |- *; assumption | elim (le_Sn_O _ H10) ]. + simpl in |- *; unfold Rmin in |- *; case (Rle_dec a c); intro; + [ assumption | elim n; assumption ]. + simpl in |- *; unfold Rmax in |- *; case (Rle_dec a c); intro; + [ reflexivity | elim n; assumption ]. + unfold constant_D_eq, open_interval in |- *; intros; simpl in H8; + inversion H8. + simpl in |- *; assert (H10 := H7 0%nat); + assert (H12 : (0 < pred (Rlength (cons r (cons r1 r2))))%nat). + simpl in |- *; apply lt_O_Sn. + apply (H10 H12); unfold open_interval in |- *; simpl in |- *; + rewrite H11 in H9; simpl in H9; elim H9; clear H9; + intros; split; try assumption. + apply Rlt_le_trans with c; assumption. + elim (le_Sn_O _ H11). + cut (adapted_couple f r1 b (cons r1 r2) lf1). + cut (r1 <= c <= b). + intros. + elim (X0 _ _ _ _ _ H3 H2); intros l1' [lf1' H4]; split with (cons r l1'); + split with (cons r3 lf1'); unfold adapted_couple in H, H4; + decompose [and] H; decompose [and] H4; clear H H4 X0; + assert (H14 : a <= b). + elim H0; intros; apply Rle_trans with c; assumption. + assert (H16 : r = a). + simpl in H7; rewrite H7; unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + induction l1' as [| r4 l1' Hrecl1']. + simpl in H13; discriminate. + clear Hrecl1'; unfold adapted_couple in |- *; repeat split. + unfold ordered_Rlist in |- *; intros; simpl in H; induction i as [| i Hreci]. + simpl in |- *; replace r4 with r1. + apply (H5 0%nat). + simpl in |- *; apply lt_O_Sn. + simpl in H12; rewrite H12; unfold Rmin in |- *; case (Rle_dec r1 c); intro; + [ reflexivity | elim n; left; assumption ]. + apply (H9 i); simpl in |- *; apply lt_S_n; assumption. + simpl in |- *; unfold Rmin in |- *; case (Rle_dec a c); intro; + [ assumption | elim n; elim H0; intros; assumption ]. + replace (Rmax a c) with (Rmax r1 c). + rewrite <- H11; reflexivity. + unfold Rmax in |- *; case (Rle_dec r1 c); case (Rle_dec a c); intros; + [ reflexivity + | elim n; elim H0; intros; assumption + | elim n; left; assumption + | elim n0; left; assumption ]. + simpl in |- *; simpl in H13; rewrite H13; reflexivity. + intros; simpl in H; unfold constant_D_eq, open_interval in |- *; intros; + induction i as [| i Hreci]. + simpl in |- *; assert (H17 := H10 0%nat); + assert (H18 : (0 < pred (Rlength (cons r (cons r1 r2))))%nat). + simpl in |- *; apply lt_O_Sn. + apply (H17 H18); unfold open_interval in |- *; simpl in |- *; simpl in H4; + elim H4; clear H4; intros; split; try assumption; + replace r1 with r4. + assumption. + simpl in H12; rewrite H12; unfold Rmin in |- *; case (Rle_dec r1 c); intro; + [ reflexivity | elim n; left; assumption ]. + clear Hreci; simpl in |- *; apply H15. + simpl in |- *; apply lt_S_n; assumption. + unfold open_interval in |- *; apply H4. + split. + left; assumption. + elim H0; intros; assumption. + eapply StepFun_P7; + [ elim H0; intros; apply Rle_trans with c; [ apply H2 | apply H3 ] + | apply H ]. Qed. Lemma StepFun_P45 : - forall (f:R -> R) (a b c:R), - IsStepFun f a b -> a <= c <= b -> IsStepFun f c b. -intros f; intros; assert (H0 : a <= b). -elim H; intros; apply Rle_trans with c; assumption. -elim H; clear H; intros; unfold IsStepFun in X; unfold is_subdivision in X; - elim X; clear X; intros l1 [lf1 H2]; - cut - (forall (l1 lf1:Rlist) (a b c:R) (f:R -> R), - adapted_couple f a b l1 lf1 -> - a <= c <= b -> - sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f c b l l0))). -intro X; unfold IsStepFun in |- *; unfold is_subdivision in |- *; eapply X; - [ apply H2 | split; assumption ]. -clear f a b c H0 H H1 H2 l1 lf1; simple induction l1. -intros; unfold adapted_couple in H; decompose [and] H; clear H; simpl in H4; - discriminate. -simple induction r0. -intros X lf1 a b c f H H0; assert (H1 : a = b). -unfold adapted_couple in H; decompose [and] H; clear H; simpl in H3; - simpl in H2; assert (H7 : a <= b). -elim H0; intros; apply Rle_trans with c; assumption. -replace a with (Rmin a b). -pattern b at 2 in |- *; replace b with (Rmax a b). -rewrite <- H2; rewrite H3; reflexivity. -unfold Rmax in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -unfold Rmin in |- *; case (Rle_dec a b); intro; - [ reflexivity | elim n; assumption ]. -split with (cons r nil); split with lf1; assert (H2 : c = b). -rewrite H1 in H0; elim H0; intros; apply Rle_antisym; assumption. -rewrite <- H2 in H1; rewrite <- H1; assumption. -intros r1 r2 _ X0 lf1 a b c f H H0; induction lf1 as [| r3 lf1 Hreclf1]. -unfold adapted_couple in H; decompose [and] H; clear H; simpl in H4; - discriminate. -clear Hreclf1; assert (H1 : {c <= r1} + {r1 < c}). -case (Rle_dec c r1); intro; [ left; assumption | right; auto with real ]. -elim H1; intro. -split with (cons c (cons r1 r2)); split with (cons r3 lf1); - unfold adapted_couple in H; decompose [and] H; clear H; - unfold adapted_couple in |- *; repeat split. -unfold ordered_Rlist in |- *; intros; simpl in H; induction i as [| i Hreci]. -simpl in |- *; assumption. -clear Hreci; apply (H2 (S i)); simpl in |- *; assumption. -simpl in |- *; unfold Rmin in |- *; case (Rle_dec c b); intro; - [ reflexivity | elim n; elim H0; intros; assumption ]. -replace (Rmax c b) with (Rmax a b). -rewrite <- H3; reflexivity. -unfold Rmax in |- *; case (Rle_dec a b); case (Rle_dec c b); intros; - [ reflexivity - | elim n; elim H0; intros; assumption - | elim n; elim H0; intros; apply Rle_trans with c; assumption - | elim n0; elim H0; intros; apply Rle_trans with c; assumption ]. -simpl in |- *; simpl in H5; apply H5. -intros; simpl in H; induction i as [| i Hreci]. -unfold constant_D_eq, open_interval in |- *; intros; simpl in |- *; - apply (H7 0%nat). -simpl in |- *; apply lt_O_Sn. -unfold open_interval in |- *; simpl in |- *; simpl in H6; elim H6; clear H6; - intros; split; try assumption; apply Rle_lt_trans with c; - try assumption; replace r with a. -elim H0; intros; assumption. -simpl in H4; rewrite H4; unfold Rmin in |- *; case (Rle_dec a b); intros; - [ reflexivity - | elim n; elim H0; intros; apply Rle_trans with c; assumption ]. -clear Hreci; apply (H7 (S i)); simpl in |- *; assumption. -cut (adapted_couple f r1 b (cons r1 r2) lf1). -cut (r1 <= c <= b). -intros; elim (X0 _ _ _ _ _ H3 H2); intros l1' [lf1' H4]; split with l1'; - split with lf1'; assumption. -split; [ left; assumption | elim H0; intros; assumption ]. -eapply StepFun_P7; - [ elim H0; intros; apply Rle_trans with c; [ apply H2 | apply H3 ] - | apply H ]. + forall (f:R -> R) (a b c:R), + IsStepFun f a b -> a <= c <= b -> IsStepFun f c b. +Proof. + intros f; intros; assert (H0 : a <= b). + elim H; intros; apply Rle_trans with c; assumption. + elim H; clear H; intros; unfold IsStepFun in X; unfold is_subdivision in X; + elim X; clear X; intros l1 [lf1 H2]; + cut + (forall (l1 lf1:Rlist) (a b c:R) (f:R -> R), + adapted_couple f a b l1 lf1 -> + a <= c <= b -> + sigT (fun l:Rlist => sigT (fun l0:Rlist => adapted_couple f c b l l0))). + intro X; unfold IsStepFun in |- *; unfold is_subdivision in |- *; eapply X; + [ apply H2 | split; assumption ]. + clear f a b c H0 H H1 H2 l1 lf1; simple induction l1. + intros; unfold adapted_couple in H; decompose [and] H; clear H; simpl in H4; + discriminate. + simple induction r0. + intros X lf1 a b c f H H0; assert (H1 : a = b). + unfold adapted_couple in H; decompose [and] H; clear H; simpl in H3; + simpl in H2; assert (H7 : a <= b). + elim H0; intros; apply Rle_trans with c; assumption. + replace a with (Rmin a b). + pattern b at 2 in |- *; replace b with (Rmax a b). + rewrite <- H2; rewrite H3; reflexivity. + unfold Rmax in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + unfold Rmin in |- *; case (Rle_dec a b); intro; + [ reflexivity | elim n; assumption ]. + split with (cons r nil); split with lf1; assert (H2 : c = b). + rewrite H1 in H0; elim H0; intros; apply Rle_antisym; assumption. + rewrite <- H2 in H1; rewrite <- H1; assumption. + intros r1 r2 _ X0 lf1 a b c f H H0; induction lf1 as [| r3 lf1 Hreclf1]. + unfold adapted_couple in H; decompose [and] H; clear H; simpl in H4; + discriminate. + clear Hreclf1; assert (H1 : {c <= r1} + {r1 < c}). + case (Rle_dec c r1); intro; [ left; assumption | right; auto with real ]. + elim H1; intro. + split with (cons c (cons r1 r2)); split with (cons r3 lf1); + unfold adapted_couple in H; decompose [and] H; clear H; + unfold adapted_couple in |- *; repeat split. + unfold ordered_Rlist in |- *; intros; simpl in H; induction i as [| i Hreci]. + simpl in |- *; assumption. + clear Hreci; apply (H2 (S i)); simpl in |- *; assumption. + simpl in |- *; unfold Rmin in |- *; case (Rle_dec c b); intro; + [ reflexivity | elim n; elim H0; intros; assumption ]. + replace (Rmax c b) with (Rmax a b). + rewrite <- H3; reflexivity. + unfold Rmax in |- *; case (Rle_dec a b); case (Rle_dec c b); intros; + [ reflexivity + | elim n; elim H0; intros; assumption + | elim n; elim H0; intros; apply Rle_trans with c; assumption + | elim n0; elim H0; intros; apply Rle_trans with c; assumption ]. + simpl in |- *; simpl in H5; apply H5. + intros; simpl in H; induction i as [| i Hreci]. + unfold constant_D_eq, open_interval in |- *; intros; simpl in |- *; + apply (H7 0%nat). + simpl in |- *; apply lt_O_Sn. + unfold open_interval in |- *; simpl in |- *; simpl in H6; elim H6; clear H6; + intros; split; try assumption; apply Rle_lt_trans with c; + try assumption; replace r with a. + elim H0; intros; assumption. + simpl in H4; rewrite H4; unfold Rmin in |- *; case (Rle_dec a b); intros; + [ reflexivity + | elim n; elim H0; intros; apply Rle_trans with c; assumption ]. + clear Hreci; apply (H7 (S i)); simpl in |- *; assumption. + cut (adapted_couple f r1 b (cons r1 r2) lf1). + cut (r1 <= c <= b). + intros; elim (X0 _ _ _ _ _ H3 H2); intros l1' [lf1' H4]; split with l1'; + split with lf1'; assumption. + split; [ left; assumption | elim H0; intros; assumption ]. + eapply StepFun_P7; + [ elim H0; intros; apply Rle_trans with c; [ apply H2 | apply H3 ] + | apply H ]. Qed. Lemma StepFun_P46 : - forall (f:R -> R) (a b c:R), - IsStepFun f a b -> IsStepFun f b c -> IsStepFun f a c. -intros f; intros; case (Rle_dec a b); case (Rle_dec b c); intros. -apply StepFun_P41 with b; assumption. -case (Rle_dec a c); intro. -apply StepFun_P44 with b; try assumption. -split; [ assumption | auto with real ]. -apply StepFun_P6; apply StepFun_P44 with b. -apply StepFun_P6; assumption. -split; auto with real. -case (Rle_dec a c); intro. -apply StepFun_P45 with b; try assumption. -split; auto with real. -apply StepFun_P6; apply StepFun_P45 with b. -apply StepFun_P6; assumption. -split; [ assumption | auto with real ]. -apply StepFun_P6; apply StepFun_P41 with b; - auto with real || apply StepFun_P6; assumption. + forall (f:R -> R) (a b c:R), + IsStepFun f a b -> IsStepFun f b c -> IsStepFun f a c. +Proof. + intros f; intros; case (Rle_dec a b); case (Rle_dec b c); intros. + apply StepFun_P41 with b; assumption. + case (Rle_dec a c); intro. + apply StepFun_P44 with b; try assumption. + split; [ assumption | auto with real ]. + apply StepFun_P6; apply StepFun_P44 with b. + apply StepFun_P6; assumption. + split; auto with real. + case (Rle_dec a c); intro. + apply StepFun_P45 with b; try assumption. + split; auto with real. + apply StepFun_P6; apply StepFun_P45 with b. + apply StepFun_P6; assumption. + split; [ assumption | auto with real ]. + apply StepFun_P6; apply StepFun_P41 with b; + auto with real || apply StepFun_P6; assumption. Qed. |