diff options
Diffstat (limited to 'theories/Reals/Ranalysis3.v')
-rw-r--r-- | theories/Reals/Ranalysis3.v | 1492 |
1 files changed, 748 insertions, 744 deletions
diff --git a/theories/Reals/Ranalysis3.v b/theories/Reals/Ranalysis3.v index 663ccb07..f50aa2ad 100644 --- a/theories/Reals/Ranalysis3.v +++ b/theories/Reals/Ranalysis3.v @@ -6,788 +6,792 @@ (* * GNU Lesser General Public License Version 2.1 *) (************************************************************************) -(*i $Id: Ranalysis3.v 8670 2006-03-28 22:16:14Z herbelin $ i*) +(*i $Id: Ranalysis3.v 9245 2006-10-17 12:53:34Z notin $ i*) Require Import Rbase. Require Import Rfunctions. Require Import Ranalysis1. Require Import Ranalysis2. Open Local Scope R_scope. -(* Division *) +(** Division *) Theorem derivable_pt_lim_div : - forall (f1 f2:R -> R) (x l1 l2:R), - derivable_pt_lim f1 x l1 -> - derivable_pt_lim f2 x l2 -> - f2 x <> 0 -> - derivable_pt_lim (f1 / f2) x ((l1 * f2 x - l2 * f1 x) / Rsqr (f2 x)). -intros f1 f2 x l1 l2 H H0 H1. -cut (derivable_pt f2 x); - [ intro X | unfold derivable_pt in |- *; apply existT with l2; exact H0 ]. -assert (H2 := continuous_neq_0 _ _ (derivable_continuous_pt _ _ X) H1). -elim H2; clear H2; intros eps_f2 H2. -unfold div_fct in |- *. -assert (H3 := derivable_continuous_pt _ _ X). -unfold continuity_pt in H3; unfold continue_in in H3; unfold limit1_in in H3; - unfold limit_in in H3; unfold dist in H3. -simpl in H3; unfold R_dist in H3. -elim (H3 (Rabs (f2 x) / 2)); - [ idtac - | unfold Rdiv in |- *; change (0 < Rabs (f2 x) * / 2) in |- *; - apply Rmult_lt_0_compat; - [ apply Rabs_pos_lt; assumption | apply Rinv_0_lt_compat; prove_sup0 ] ]. -clear H3; intros alp_f2 H3. -cut - (forall x0:R, - Rabs (x0 - x) < alp_f2 -> Rabs (f2 x0 - f2 x) < Rabs (f2 x) / 2). -intro H4. -cut (forall a:R, Rabs (a - x) < alp_f2 -> Rabs (f2 x) / 2 < Rabs (f2 a)). -intro H5. -cut - (forall a:R, - Rabs a < Rmin eps_f2 alp_f2 -> / Rabs (f2 (x + a)) < 2 / Rabs (f2 x)). -intro Maj. -unfold derivable_pt_lim in |- *; intros. -elim (H (Rabs (eps * f2 x / 8))); - [ idtac - | unfold Rdiv in |- *; change (0 < Rabs (eps * f2 x * / 8)) in |- *; - apply Rabs_pos_lt; repeat apply prod_neq_R0; - [ red in |- *; intro H7; rewrite H7 in H6; elim (Rlt_irrefl _ H6) - | assumption - | apply Rinv_neq_0_compat; discrR ] ]. -intros alp_f1d H7. -case (Req_dec (f1 x) 0); intro. -case (Req_dec l1 0); intro. + forall (f1 f2:R -> R) (x l1 l2:R), + derivable_pt_lim f1 x l1 -> + derivable_pt_lim f2 x l2 -> + f2 x <> 0 -> + derivable_pt_lim (f1 / f2) x ((l1 * f2 x - l2 * f1 x) / Rsqr (f2 x)). +Proof. + intros f1 f2 x l1 l2 H H0 H1. + cut (derivable_pt f2 x); + [ intro X | unfold derivable_pt in |- *; apply existT with l2; exact H0 ]. + assert (H2 := continuous_neq_0 _ _ (derivable_continuous_pt _ _ X) H1). + elim H2; clear H2; intros eps_f2 H2. + unfold div_fct in |- *. + assert (H3 := derivable_continuous_pt _ _ X). + unfold continuity_pt in H3; unfold continue_in in H3; unfold limit1_in in H3; + unfold limit_in in H3; unfold dist in H3. + simpl in H3; unfold R_dist in H3. + elim (H3 (Rabs (f2 x) / 2)); + [ idtac + | unfold Rdiv in |- *; change (0 < Rabs (f2 x) * / 2) in |- *; + apply Rmult_lt_0_compat; + [ apply Rabs_pos_lt; assumption | apply Rinv_0_lt_compat; prove_sup0 ] ]. + clear H3; intros alp_f2 H3. + cut + (forall x0:R, + Rabs (x0 - x) < alp_f2 -> Rabs (f2 x0 - f2 x) < Rabs (f2 x) / 2). + intro H4. + cut (forall a:R, Rabs (a - x) < alp_f2 -> Rabs (f2 x) / 2 < Rabs (f2 a)). + intro H5. + cut + (forall a:R, + Rabs a < Rmin eps_f2 alp_f2 -> / Rabs (f2 (x + a)) < 2 / Rabs (f2 x)). + intro Maj. + unfold derivable_pt_lim in |- *; intros. + elim (H (Rabs (eps * f2 x / 8))); + [ idtac + | unfold Rdiv in |- *; change (0 < Rabs (eps * f2 x * / 8)) in |- *; + apply Rabs_pos_lt; repeat apply prod_neq_R0; + [ red in |- *; intro H7; rewrite H7 in H6; elim (Rlt_irrefl _ H6) + | assumption + | apply Rinv_neq_0_compat; discrR ] ]. + intros alp_f1d H7. + case (Req_dec (f1 x) 0); intro. + case (Req_dec l1 0); intro. (***********************************) (* Cas n° 1 *) (* (f1 x)=0 l1 =0 *) (***********************************) -cut (0 < Rmin eps_f2 (Rmin alp_f2 alp_f1d)); - [ intro - | repeat apply Rmin_pos; - [ apply (cond_pos eps_f2) - | elim H3; intros; assumption - | apply (cond_pos alp_f1d) ] ]. -exists (mkposreal (Rmin eps_f2 (Rmin alp_f2 alp_f1d)) H10). -simpl in |- *; intros. -assert (H13 := Rlt_le_trans _ _ _ H12 (Rmin_r _ _)). -assert (H14 := Rlt_le_trans _ _ _ H12 (Rmin_l _ _)). -assert (H15 := Rlt_le_trans _ _ _ H13 (Rmin_r _ _)). -assert (H16 := Rlt_le_trans _ _ _ H13 (Rmin_l _ _)). -assert (H17 := H7 _ H11 H15). -rewrite formule; [ idtac | assumption | assumption | apply H2; apply H14 ]. -apply Rle_lt_trans with - (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + - Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + - Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + - Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). -unfold Rminus in |- *. -rewrite <- - (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) - . -apply Rabs_4. -repeat rewrite Rabs_mult. -apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). -cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). -cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). -cut - (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < - eps / 4). -cut - (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < - eps / 4). -intros. -apply Rlt_4; assumption. -rewrite H8. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite H8. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite H9. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite <- Rabs_mult. -apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); - try assumption || apply H2. -apply H14. -apply Rmin_2; assumption. -right; symmetry in |- *; apply quadruple_var. + cut (0 < Rmin eps_f2 (Rmin alp_f2 alp_f1d)); + [ intro + | repeat apply Rmin_pos; + [ apply (cond_pos eps_f2) + | elim H3; intros; assumption + | apply (cond_pos alp_f1d) ] ]. + exists (mkposreal (Rmin eps_f2 (Rmin alp_f2 alp_f1d)) H10). + simpl in |- *; intros. + assert (H13 := Rlt_le_trans _ _ _ H12 (Rmin_r _ _)). + assert (H14 := Rlt_le_trans _ _ _ H12 (Rmin_l _ _)). + assert (H15 := Rlt_le_trans _ _ _ H13 (Rmin_r _ _)). + assert (H16 := Rlt_le_trans _ _ _ H13 (Rmin_l _ _)). + assert (H17 := H7 _ H11 H15). + rewrite formule; [ idtac | assumption | assumption | apply H2; apply H14 ]. + apply Rle_lt_trans with + (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + + Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + + Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + + Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). + unfold Rminus in |- *. + rewrite <- + (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) + . + apply Rabs_4. + repeat rewrite Rabs_mult. + apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). + cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). + cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). + cut + (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < + eps / 4). + cut + (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < + eps / 4). + intros. + apply Rlt_4; assumption. + rewrite H8. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite H8. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite H9. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite <- Rabs_mult. + apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); + try assumption || apply H2. + apply H14. + apply Rmin_2; assumption. + right; symmetry in |- *; apply quadruple_var. (***********************************) (* Cas n° 2 *) (* (f1 x)=0 l1<>0 *) (***********************************) -assert (H10 := derivable_continuous_pt _ _ X). -unfold continuity_pt in H10. -unfold continue_in in H10. -unfold limit1_in in H10. -unfold limit_in in H10. -unfold dist in H10. -simpl in H10. -unfold R_dist in H10. -elim (H10 (Rabs (eps * Rsqr (f2 x) / (8 * l1)))). -clear H10; intros alp_f2t2 H10. -cut - (forall a:R, - Rabs a < alp_f2t2 -> - Rabs (f2 (x + a) - f2 x) < Rabs (eps * Rsqr (f2 x) / (8 * l1))). -intro H11. -cut (0 < Rmin (Rmin eps_f2 alp_f1d) (Rmin alp_f2 alp_f2t2)). -intro. -exists (mkposreal (Rmin (Rmin eps_f2 alp_f1d) (Rmin alp_f2 alp_f2t2)) H12). -simpl in |- *. -intros. -assert (H15 := Rlt_le_trans _ _ _ H14 (Rmin_r _ _)). -assert (H16 := Rlt_le_trans _ _ _ H14 (Rmin_l _ _)). -assert (H17 := Rlt_le_trans _ _ _ H15 (Rmin_l _ _)). -assert (H18 := Rlt_le_trans _ _ _ H15 (Rmin_r _ _)). -assert (H19 := Rlt_le_trans _ _ _ H16 (Rmin_l _ _)). -assert (H20 := Rlt_le_trans _ _ _ H16 (Rmin_r _ _)). -clear H14 H15 H16. -rewrite formule; try assumption. -apply Rle_lt_trans with - (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + - Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + - Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + - Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). -unfold Rminus in |- *. -rewrite <- - (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) - . -apply Rabs_4. -repeat rewrite Rabs_mult. -apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). -cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). -cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). -cut - (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < - eps / 4). -cut - (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < - eps / 4). -intros. -apply Rlt_4; assumption. -rewrite H8. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite H8. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite <- Rabs_mult. -apply (maj_term2 x h eps l1 alp_f2 alp_f2t2 eps_f2 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite <- Rabs_mult. -apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -right; symmetry in |- *; apply quadruple_var. -apply H2; assumption. -repeat apply Rmin_pos. -apply (cond_pos eps_f2). -apply (cond_pos alp_f1d). -elim H3; intros; assumption. -elim H10; intros; assumption. -intros. -elim H10; intros. -case (Req_dec a 0); intro. -rewrite H14; rewrite Rplus_0_r. -unfold Rminus in |- *; rewrite Rplus_opp_r. -rewrite Rabs_R0. -apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *; repeat rewrite Rmult_assoc. -repeat apply prod_neq_R0; try assumption. -red in |- *; intro; rewrite H15 in H6; elim (Rlt_irrefl _ H6). -apply Rinv_neq_0_compat; repeat apply prod_neq_R0; discrR || assumption. -apply H13. -split. -apply D_x_no_cond; assumption. -replace (x + a - x) with a; [ assumption | ring ]. -change (0 < Rabs (eps * Rsqr (f2 x) / (8 * l1))) in |- *. -apply Rabs_pos_lt; unfold Rdiv, Rsqr in |- *; repeat rewrite Rmult_assoc; - repeat apply prod_neq_R0. -red in |- *; intro; rewrite H11 in H6; elim (Rlt_irrefl _ H6). -assumption. -assumption. -apply Rinv_neq_0_compat; repeat apply prod_neq_R0; - [ discrR | discrR | discrR | assumption ]. + assert (H10 := derivable_continuous_pt _ _ X). + unfold continuity_pt in H10. + unfold continue_in in H10. + unfold limit1_in in H10. + unfold limit_in in H10. + unfold dist in H10. + simpl in H10. + unfold R_dist in H10. + elim (H10 (Rabs (eps * Rsqr (f2 x) / (8 * l1)))). + clear H10; intros alp_f2t2 H10. + cut + (forall a:R, + Rabs a < alp_f2t2 -> + Rabs (f2 (x + a) - f2 x) < Rabs (eps * Rsqr (f2 x) / (8 * l1))). + intro H11. + cut (0 < Rmin (Rmin eps_f2 alp_f1d) (Rmin alp_f2 alp_f2t2)). + intro. + exists (mkposreal (Rmin (Rmin eps_f2 alp_f1d) (Rmin alp_f2 alp_f2t2)) H12). + simpl in |- *. + intros. + assert (H15 := Rlt_le_trans _ _ _ H14 (Rmin_r _ _)). + assert (H16 := Rlt_le_trans _ _ _ H14 (Rmin_l _ _)). + assert (H17 := Rlt_le_trans _ _ _ H15 (Rmin_l _ _)). + assert (H18 := Rlt_le_trans _ _ _ H15 (Rmin_r _ _)). + assert (H19 := Rlt_le_trans _ _ _ H16 (Rmin_l _ _)). + assert (H20 := Rlt_le_trans _ _ _ H16 (Rmin_r _ _)). + clear H14 H15 H16. + rewrite formule; try assumption. + apply Rle_lt_trans with + (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + + Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + + Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + + Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). + unfold Rminus in |- *. + rewrite <- + (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) + . + apply Rabs_4. + repeat rewrite Rabs_mult. + apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). + cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). + cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). + cut + (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < + eps / 4). + cut + (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < + eps / 4). + intros. + apply Rlt_4; assumption. + rewrite H8. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite H8. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite <- Rabs_mult. + apply (maj_term2 x h eps l1 alp_f2 alp_f2t2 eps_f2 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite <- Rabs_mult. + apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + right; symmetry in |- *; apply quadruple_var. + apply H2; assumption. + repeat apply Rmin_pos. + apply (cond_pos eps_f2). + apply (cond_pos alp_f1d). + elim H3; intros; assumption. + elim H10; intros; assumption. + intros. + elim H10; intros. + case (Req_dec a 0); intro. + rewrite H14; rewrite Rplus_0_r. + unfold Rminus in |- *; rewrite Rplus_opp_r. + rewrite Rabs_R0. + apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *; repeat rewrite Rmult_assoc. + repeat apply prod_neq_R0; try assumption. + red in |- *; intro; rewrite H15 in H6; elim (Rlt_irrefl _ H6). + apply Rinv_neq_0_compat; repeat apply prod_neq_R0; discrR || assumption. + apply H13. + split. + apply D_x_no_cond; assumption. + replace (x + a - x) with a; [ assumption | ring ]. + change (0 < Rabs (eps * Rsqr (f2 x) / (8 * l1))) in |- *. + apply Rabs_pos_lt; unfold Rdiv, Rsqr in |- *; repeat rewrite Rmult_assoc; + repeat apply prod_neq_R0. + red in |- *; intro; rewrite H11 in H6; elim (Rlt_irrefl _ H6). + assumption. + assumption. + apply Rinv_neq_0_compat; repeat apply prod_neq_R0; + [ discrR | discrR | discrR | assumption ]. (***********************************) (* Cas n° 3 *) (* (f1 x)<>0 l1=0 l2=0 *) (***********************************) -case (Req_dec l1 0); intro. -case (Req_dec l2 0); intro. -elim (H0 (Rabs (Rsqr (f2 x) * eps / (8 * f1 x)))); - [ idtac - | apply Rabs_pos_lt; unfold Rdiv, Rsqr in |- *; repeat rewrite Rmult_assoc; - repeat apply prod_neq_R0; - [ assumption - | assumption - | red in |- *; intro; rewrite H11 in H6; elim (Rlt_irrefl _ H6) - | apply Rinv_neq_0_compat; repeat apply prod_neq_R0; discrR || assumption ] ]. -intros alp_f2d H12. -cut (0 < Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d alp_f2d)). -intro. -exists (mkposreal (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d alp_f2d)) H11). -simpl in |- *. -intros. -assert (H15 := Rlt_le_trans _ _ _ H14 (Rmin_l _ _)). -assert (H16 := Rlt_le_trans _ _ _ H14 (Rmin_r _ _)). -assert (H17 := Rlt_le_trans _ _ _ H15 (Rmin_l _ _)). -assert (H18 := Rlt_le_trans _ _ _ H15 (Rmin_r _ _)). -assert (H19 := Rlt_le_trans _ _ _ H16 (Rmin_l _ _)). -assert (H20 := Rlt_le_trans _ _ _ H16 (Rmin_r _ _)). -clear H15 H16. -rewrite formule; try assumption. -apply Rle_lt_trans with - (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + - Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + - Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + - Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). -unfold Rminus in |- *. -rewrite <- - (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) - . -apply Rabs_4. -repeat rewrite Rabs_mult. -apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). -cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). -cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). -cut - (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < - eps / 4). -cut - (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < - eps / 4). -intros. -apply Rlt_4; assumption. -rewrite H10. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite <- Rabs_mult. -apply (maj_term3 x h eps l2 alp_f2 eps_f2 alp_f2d f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite H9. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite <- Rabs_mult. -apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); assumption || idtac. -apply H2; assumption. -apply Rmin_2; assumption. -right; symmetry in |- *; apply quadruple_var. -apply H2; assumption. -repeat apply Rmin_pos. -apply (cond_pos eps_f2). -elim H3; intros; assumption. -apply (cond_pos alp_f1d). -apply (cond_pos alp_f2d). + case (Req_dec l1 0); intro. + case (Req_dec l2 0); intro. + elim (H0 (Rabs (Rsqr (f2 x) * eps / (8 * f1 x)))); + [ idtac + | apply Rabs_pos_lt; unfold Rdiv, Rsqr in |- *; repeat rewrite Rmult_assoc; + repeat apply prod_neq_R0; + [ assumption + | assumption + | red in |- *; intro; rewrite H11 in H6; elim (Rlt_irrefl _ H6) + | apply Rinv_neq_0_compat; repeat apply prod_neq_R0; discrR || assumption ] ]. + intros alp_f2d H12. + cut (0 < Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d alp_f2d)). + intro. + exists (mkposreal (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d alp_f2d)) H11). + simpl in |- *. + intros. + assert (H15 := Rlt_le_trans _ _ _ H14 (Rmin_l _ _)). + assert (H16 := Rlt_le_trans _ _ _ H14 (Rmin_r _ _)). + assert (H17 := Rlt_le_trans _ _ _ H15 (Rmin_l _ _)). + assert (H18 := Rlt_le_trans _ _ _ H15 (Rmin_r _ _)). + assert (H19 := Rlt_le_trans _ _ _ H16 (Rmin_l _ _)). + assert (H20 := Rlt_le_trans _ _ _ H16 (Rmin_r _ _)). + clear H15 H16. + rewrite formule; try assumption. + apply Rle_lt_trans with + (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + + Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + + Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + + Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). + unfold Rminus in |- *. + rewrite <- + (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) + . + apply Rabs_4. + repeat rewrite Rabs_mult. + apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). + cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). + cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). + cut + (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < + eps / 4). + cut + (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < + eps / 4). + intros. + apply Rlt_4; assumption. + rewrite H10. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite <- Rabs_mult. + apply (maj_term3 x h eps l2 alp_f2 eps_f2 alp_f2d f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite H9. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite <- Rabs_mult. + apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); assumption || idtac. + apply H2; assumption. + apply Rmin_2; assumption. + right; symmetry in |- *; apply quadruple_var. + apply H2; assumption. + repeat apply Rmin_pos. + apply (cond_pos eps_f2). + elim H3; intros; assumption. + apply (cond_pos alp_f1d). + apply (cond_pos alp_f2d). (***********************************) (* Cas n° 4 *) (* (f1 x)<>0 l1=0 l2<>0 *) (***********************************) -elim (H0 (Rabs (Rsqr (f2 x) * eps / (8 * f1 x)))); - [ idtac - | apply Rabs_pos_lt; unfold Rsqr, Rdiv in |- *; - repeat rewrite Rinv_mult_distr; repeat apply prod_neq_R0; - try assumption || discrR ]. -intros alp_f2d H11. -assert (H12 := derivable_continuous_pt _ _ X). -unfold continuity_pt in H12. -unfold continue_in in H12. -unfold limit1_in in H12. -unfold limit_in in H12. -unfold dist in H12. -simpl in H12. -unfold R_dist in H12. -elim (H12 (Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2)))). -intros alp_f2c H13. -cut (0 < Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d (Rmin alp_f2d alp_f2c))). -intro. -exists - (mkposreal (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d (Rmin alp_f2d alp_f2c))) - H14). -simpl in |- *; intros. -assert (H17 := Rlt_le_trans _ _ _ H16 (Rmin_l _ _)). -assert (H18 := Rlt_le_trans _ _ _ H16 (Rmin_r _ _)). -assert (H19 := Rlt_le_trans _ _ _ H18 (Rmin_r _ _)). -assert (H20 := Rlt_le_trans _ _ _ H19 (Rmin_l _ _)). -assert (H21 := Rlt_le_trans _ _ _ H19 (Rmin_r _ _)). -assert (H22 := Rlt_le_trans _ _ _ H18 (Rmin_l _ _)). -assert (H23 := Rlt_le_trans _ _ _ H17 (Rmin_l _ _)). -assert (H24 := Rlt_le_trans _ _ _ H17 (Rmin_r _ _)). -clear H16 H17 H18 H19. -cut - (forall a:R, - Rabs a < alp_f2c -> - Rabs (f2 (x + a) - f2 x) < - Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2))). -intro. -rewrite formule; try assumption. -apply Rle_lt_trans with - (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + - Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + - Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + - Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). -unfold Rminus in |- *. -rewrite <- - (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) - . -apply Rabs_4. -repeat rewrite Rabs_mult. -apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). -cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). -cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). -cut - (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < - eps / 4). -cut - (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < - eps / 4). -intros. -apply Rlt_4; assumption. -rewrite <- Rabs_mult. -apply (maj_term4 x h eps l2 alp_f2 alp_f2c eps_f2 f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite <- Rabs_mult. -apply (maj_term3 x h eps l2 alp_f2 eps_f2 alp_f2d f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite H9. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite <- Rabs_mult. -apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -right; symmetry in |- *; apply quadruple_var. -apply H2; assumption. -intros. -case (Req_dec a 0); intro. -rewrite H17; rewrite Rplus_0_r. -unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0. -apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *. -repeat rewrite Rinv_mult_distr; try assumption. -repeat apply prod_neq_R0; try assumption. -red in |- *; intro H18; rewrite H18 in H6; elim (Rlt_irrefl _ H6). -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; assumption. -apply Rinv_neq_0_compat; assumption. -discrR. -discrR. -discrR. -discrR. -discrR. -apply prod_neq_R0; [ discrR | assumption ]. -elim H13; intros. -apply H19. -split. -apply D_x_no_cond; assumption. -replace (x + a - x) with a; [ assumption | ring ]. -repeat apply Rmin_pos. -apply (cond_pos eps_f2). -elim H3; intros; assumption. -apply (cond_pos alp_f1d). -apply (cond_pos alp_f2d). -elim H13; intros; assumption. -change (0 < Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2))) in |- *. -apply Rabs_pos_lt. -unfold Rsqr, Rdiv in |- *. -repeat rewrite Rinv_mult_distr; try assumption || discrR. -repeat apply prod_neq_R0; try assumption. -red in |- *; intro H13; rewrite H13 in H6; elim (Rlt_irrefl _ H6). -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; assumption. -apply Rinv_neq_0_compat; assumption. -apply prod_neq_R0; [ discrR | assumption ]. -red in |- *; intro H11; rewrite H11 in H6; elim (Rlt_irrefl _ H6). -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; discrR. -apply Rinv_neq_0_compat; assumption. + elim (H0 (Rabs (Rsqr (f2 x) * eps / (8 * f1 x)))); + [ idtac + | apply Rabs_pos_lt; unfold Rsqr, Rdiv in |- *; + repeat rewrite Rinv_mult_distr; repeat apply prod_neq_R0; + try assumption || discrR ]. + intros alp_f2d H11. + assert (H12 := derivable_continuous_pt _ _ X). + unfold continuity_pt in H12. + unfold continue_in in H12. + unfold limit1_in in H12. + unfold limit_in in H12. + unfold dist in H12. + simpl in H12. + unfold R_dist in H12. + elim (H12 (Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2)))). + intros alp_f2c H13. + cut (0 < Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d (Rmin alp_f2d alp_f2c))). + intro. + exists + (mkposreal (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d (Rmin alp_f2d alp_f2c))) + H14). + simpl in |- *; intros. + assert (H17 := Rlt_le_trans _ _ _ H16 (Rmin_l _ _)). + assert (H18 := Rlt_le_trans _ _ _ H16 (Rmin_r _ _)). + assert (H19 := Rlt_le_trans _ _ _ H18 (Rmin_r _ _)). + assert (H20 := Rlt_le_trans _ _ _ H19 (Rmin_l _ _)). + assert (H21 := Rlt_le_trans _ _ _ H19 (Rmin_r _ _)). + assert (H22 := Rlt_le_trans _ _ _ H18 (Rmin_l _ _)). + assert (H23 := Rlt_le_trans _ _ _ H17 (Rmin_l _ _)). + assert (H24 := Rlt_le_trans _ _ _ H17 (Rmin_r _ _)). + clear H16 H17 H18 H19. + cut + (forall a:R, + Rabs a < alp_f2c -> + Rabs (f2 (x + a) - f2 x) < + Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2))). + intro. + rewrite formule; try assumption. + apply Rle_lt_trans with + (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + + Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + + Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + + Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). + unfold Rminus in |- *. + rewrite <- + (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) + . + apply Rabs_4. + repeat rewrite Rabs_mult. + apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). + cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). + cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). + cut + (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < + eps / 4). + cut + (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < + eps / 4). + intros. + apply Rlt_4; assumption. + rewrite <- Rabs_mult. + apply (maj_term4 x h eps l2 alp_f2 alp_f2c eps_f2 f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite <- Rabs_mult. + apply (maj_term3 x h eps l2 alp_f2 eps_f2 alp_f2d f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite H9. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite <- Rabs_mult. + apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + right; symmetry in |- *; apply quadruple_var. + apply H2; assumption. + intros. + case (Req_dec a 0); intro. + rewrite H17; rewrite Rplus_0_r. + unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0. + apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *. + repeat rewrite Rinv_mult_distr; try assumption. + repeat apply prod_neq_R0; try assumption. + red in |- *; intro H18; rewrite H18 in H6; elim (Rlt_irrefl _ H6). + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; assumption. + apply Rinv_neq_0_compat; assumption. + discrR. + discrR. + discrR. + discrR. + discrR. + apply prod_neq_R0; [ discrR | assumption ]. + elim H13; intros. + apply H19. + split. + apply D_x_no_cond; assumption. + replace (x + a - x) with a; [ assumption | ring ]. + repeat apply Rmin_pos. + apply (cond_pos eps_f2). + elim H3; intros; assumption. + apply (cond_pos alp_f1d). + apply (cond_pos alp_f2d). + elim H13; intros; assumption. + change (0 < Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2))) in |- *. + apply Rabs_pos_lt. + unfold Rsqr, Rdiv in |- *. + repeat rewrite Rinv_mult_distr; try assumption || discrR. + repeat apply prod_neq_R0; try assumption. + red in |- *; intro H13; rewrite H13 in H6; elim (Rlt_irrefl _ H6). + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; assumption. + apply Rinv_neq_0_compat; assumption. + apply prod_neq_R0; [ discrR | assumption ]. + red in |- *; intro H11; rewrite H11 in H6; elim (Rlt_irrefl _ H6). + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; discrR. + apply Rinv_neq_0_compat; assumption. (***********************************) (* Cas n° 5 *) (* (f1 x)<>0 l1<>0 l2=0 *) (***********************************) -case (Req_dec l2 0); intro. -assert (H11 := derivable_continuous_pt _ _ X). -unfold continuity_pt in H11. -unfold continue_in in H11. -unfold limit1_in in H11. -unfold limit_in in H11. -unfold dist in H11. -simpl in H11. -unfold R_dist in H11. -elim (H11 (Rabs (eps * Rsqr (f2 x) / (8 * l1)))). -clear H11; intros alp_f2t2 H11. -elim (H0 (Rabs (Rsqr (f2 x) * eps / (8 * f1 x)))). -intros alp_f2d H12. -cut (0 < Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d (Rmin alp_f2d alp_f2t2))). -intro. -exists - (mkposreal - (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d (Rmin alp_f2d alp_f2t2))) H13). -simpl in |- *. -intros. -cut - (forall a:R, - Rabs a < alp_f2t2 -> - Rabs (f2 (x + a) - f2 x) < Rabs (eps * Rsqr (f2 x) / (8 * l1))). -intro. -assert (H17 := Rlt_le_trans _ _ _ H15 (Rmin_l _ _)). -assert (H18 := Rlt_le_trans _ _ _ H15 (Rmin_r _ _)). -assert (H19 := Rlt_le_trans _ _ _ H17 (Rmin_r _ _)). -assert (H20 := Rlt_le_trans _ _ _ H17 (Rmin_l _ _)). -assert (H21 := Rlt_le_trans _ _ _ H18 (Rmin_r _ _)). -assert (H22 := Rlt_le_trans _ _ _ H18 (Rmin_l _ _)). -assert (H23 := Rlt_le_trans _ _ _ H21 (Rmin_l _ _)). -assert (H24 := Rlt_le_trans _ _ _ H21 (Rmin_r _ _)). -clear H15 H17 H18 H21. -rewrite formule; try assumption. -apply Rle_lt_trans with - (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + - Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + - Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + - Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). -unfold Rminus in |- *. -rewrite <- - (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) - . -apply Rabs_4. -repeat rewrite Rabs_mult. -apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). -cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). -cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). -cut - (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < - eps / 4). -cut - (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < - eps / 4). -intros. -apply Rlt_4; assumption. -rewrite H10. -unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. -rewrite Rabs_R0; rewrite Rmult_0_l. -apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. -rewrite <- Rabs_mult. -apply (maj_term3 x h eps l2 alp_f2 eps_f2 alp_f2d f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite <- Rabs_mult. -apply (maj_term2 x h eps l1 alp_f2 alp_f2t2 eps_f2 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite <- Rabs_mult. -apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -right; symmetry in |- *; apply quadruple_var. -apply H2; assumption. -intros. -case (Req_dec a 0); intro. -rewrite H17; rewrite Rplus_0_r; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rabs_R0. -apply Rabs_pos_lt. -unfold Rdiv in |- *; rewrite Rinv_mult_distr; try discrR || assumption. -unfold Rsqr in |- *. -repeat apply prod_neq_R0; - assumption || - (apply Rinv_neq_0_compat; assumption) || - (apply Rinv_neq_0_compat; discrR) || - (red in |- *; intro H18; rewrite H18 in H6; elim (Rlt_irrefl _ H6)). -elim H11; intros. -apply H19. -split. -apply D_x_no_cond; assumption. -replace (x + a - x) with a; [ assumption | ring ]. -repeat apply Rmin_pos. -apply (cond_pos eps_f2). -elim H3; intros; assumption. -apply (cond_pos alp_f1d). -apply (cond_pos alp_f2d). -elim H11; intros; assumption. -apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr; try discrR || assumption. -repeat apply prod_neq_R0; - assumption || - (apply Rinv_neq_0_compat; assumption) || - (apply Rinv_neq_0_compat; discrR) || - (red in |- *; intro H12; rewrite H12 in H6; elim (Rlt_irrefl _ H6)). -change (0 < Rabs (eps * Rsqr (f2 x) / (8 * l1))) in |- *. -apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr; try discrR || assumption. -repeat apply prod_neq_R0; - assumption || - (apply Rinv_neq_0_compat; assumption) || - (apply Rinv_neq_0_compat; discrR) || - (red in |- *; intro H12; rewrite H12 in H6; elim (Rlt_irrefl _ H6)). + case (Req_dec l2 0); intro. + assert (H11 := derivable_continuous_pt _ _ X). + unfold continuity_pt in H11. + unfold continue_in in H11. + unfold limit1_in in H11. + unfold limit_in in H11. + unfold dist in H11. + simpl in H11. + unfold R_dist in H11. + elim (H11 (Rabs (eps * Rsqr (f2 x) / (8 * l1)))). + clear H11; intros alp_f2t2 H11. + elim (H0 (Rabs (Rsqr (f2 x) * eps / (8 * f1 x)))). + intros alp_f2d H12. + cut (0 < Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d (Rmin alp_f2d alp_f2t2))). + intro. + exists + (mkposreal + (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d (Rmin alp_f2d alp_f2t2))) H13). + simpl in |- *. + intros. + cut + (forall a:R, + Rabs a < alp_f2t2 -> + Rabs (f2 (x + a) - f2 x) < Rabs (eps * Rsqr (f2 x) / (8 * l1))). + intro. + assert (H17 := Rlt_le_trans _ _ _ H15 (Rmin_l _ _)). + assert (H18 := Rlt_le_trans _ _ _ H15 (Rmin_r _ _)). + assert (H19 := Rlt_le_trans _ _ _ H17 (Rmin_r _ _)). + assert (H20 := Rlt_le_trans _ _ _ H17 (Rmin_l _ _)). + assert (H21 := Rlt_le_trans _ _ _ H18 (Rmin_r _ _)). + assert (H22 := Rlt_le_trans _ _ _ H18 (Rmin_l _ _)). + assert (H23 := Rlt_le_trans _ _ _ H21 (Rmin_l _ _)). + assert (H24 := Rlt_le_trans _ _ _ H21 (Rmin_r _ _)). + clear H15 H17 H18 H21. + rewrite formule; try assumption. + apply Rle_lt_trans with + (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + + Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + + Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + + Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). + unfold Rminus in |- *. + rewrite <- + (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) + . + apply Rabs_4. + repeat rewrite Rabs_mult. + apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). + cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). + cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). + cut + (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < + eps / 4). + cut + (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < + eps / 4). + intros. + apply Rlt_4; assumption. + rewrite H10. + unfold Rdiv in |- *; repeat rewrite Rmult_0_r || rewrite Rmult_0_l. + rewrite Rabs_R0; rewrite Rmult_0_l. + apply Rmult_lt_0_compat; [ assumption | apply Rinv_0_lt_compat; prove_sup ]. + rewrite <- Rabs_mult. + apply (maj_term3 x h eps l2 alp_f2 eps_f2 alp_f2d f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite <- Rabs_mult. + apply (maj_term2 x h eps l1 alp_f2 alp_f2t2 eps_f2 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite <- Rabs_mult. + apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + right; symmetry in |- *; apply quadruple_var. + apply H2; assumption. + intros. + case (Req_dec a 0); intro. + rewrite H17; rewrite Rplus_0_r; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rabs_R0. + apply Rabs_pos_lt. + unfold Rdiv in |- *; rewrite Rinv_mult_distr; try discrR || assumption. + unfold Rsqr in |- *. + repeat apply prod_neq_R0; + assumption || + (apply Rinv_neq_0_compat; assumption) || + (apply Rinv_neq_0_compat; discrR) || + (red in |- *; intro H18; rewrite H18 in H6; elim (Rlt_irrefl _ H6)). + elim H11; intros. + apply H19. + split. + apply D_x_no_cond; assumption. + replace (x + a - x) with a; [ assumption | ring ]. + repeat apply Rmin_pos. + apply (cond_pos eps_f2). + elim H3; intros; assumption. + apply (cond_pos alp_f1d). + apply (cond_pos alp_f2d). + elim H11; intros; assumption. + apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr; try discrR || assumption. + repeat apply prod_neq_R0; + assumption || + (apply Rinv_neq_0_compat; assumption) || + (apply Rinv_neq_0_compat; discrR) || + (red in |- *; intro H12; rewrite H12 in H6; elim (Rlt_irrefl _ H6)). + change (0 < Rabs (eps * Rsqr (f2 x) / (8 * l1))) in |- *. + apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr; try discrR || assumption. + repeat apply prod_neq_R0; + assumption || + (apply Rinv_neq_0_compat; assumption) || + (apply Rinv_neq_0_compat; discrR) || + (red in |- *; intro H12; rewrite H12 in H6; elim (Rlt_irrefl _ H6)). (***********************************) (* Cas n° 6 *) (* (f1 x)<>0 l1<>0 l2<>0 *) (***********************************) -elim (H0 (Rabs (Rsqr (f2 x) * eps / (8 * f1 x)))). -intros alp_f2d H11. -assert (H12 := derivable_continuous_pt _ _ X). -unfold continuity_pt in H12. -unfold continue_in in H12. -unfold limit1_in in H12. -unfold limit_in in H12. -unfold dist in H12. -simpl in H12. -unfold R_dist in H12. -elim (H12 (Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2)))). -intros alp_f2c H13. -elim (H12 (Rabs (eps * Rsqr (f2 x) / (8 * l1)))). -intros alp_f2t2 H14. -cut - (0 < - Rmin (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d alp_f2d)) - (Rmin alp_f2c alp_f2t2)). -intro. -exists - (mkposreal - (Rmin (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d alp_f2d)) - (Rmin alp_f2c alp_f2t2)) H15). -simpl in |- *. -intros. -assert (H18 := Rlt_le_trans _ _ _ H17 (Rmin_l _ _)). -assert (H19 := Rlt_le_trans _ _ _ H17 (Rmin_r _ _)). -assert (H20 := Rlt_le_trans _ _ _ H18 (Rmin_l _ _)). -assert (H21 := Rlt_le_trans _ _ _ H18 (Rmin_r _ _)). -assert (H22 := Rlt_le_trans _ _ _ H19 (Rmin_l _ _)). -assert (H23 := Rlt_le_trans _ _ _ H19 (Rmin_r _ _)). -assert (H24 := Rlt_le_trans _ _ _ H20 (Rmin_l _ _)). -assert (H25 := Rlt_le_trans _ _ _ H20 (Rmin_r _ _)). -assert (H26 := Rlt_le_trans _ _ _ H21 (Rmin_l _ _)). -assert (H27 := Rlt_le_trans _ _ _ H21 (Rmin_r _ _)). -clear H17 H18 H19 H20 H21. -cut - (forall a:R, - Rabs a < alp_f2t2 -> - Rabs (f2 (x + a) - f2 x) < Rabs (eps * Rsqr (f2 x) / (8 * l1))). -cut - (forall a:R, - Rabs a < alp_f2c -> - Rabs (f2 (x + a) - f2 x) < - Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2))). -intros. -rewrite formule; try assumption. -apply Rle_lt_trans with - (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + - Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + - Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + - Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). -unfold Rminus in |- *. -rewrite <- - (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) - . -apply Rabs_4. -repeat rewrite Rabs_mult. -apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). -cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). -cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). -cut - (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < - eps / 4). -cut - (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < - eps / 4). -intros. -apply Rlt_4; assumption. -rewrite <- Rabs_mult. -apply (maj_term4 x h eps l2 alp_f2 alp_f2c eps_f2 f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite <- Rabs_mult. -apply (maj_term3 x h eps l2 alp_f2 eps_f2 alp_f2d f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite <- Rabs_mult. -apply (maj_term2 x h eps l1 alp_f2 alp_f2t2 eps_f2 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -rewrite <- Rabs_mult. -apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); try assumption. -apply H2; assumption. -apply Rmin_2; assumption. -right; symmetry in |- *; apply quadruple_var. -apply H2; assumption. -intros. -case (Req_dec a 0); intro. -rewrite H18; rewrite Rplus_0_r; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rabs_R0; apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr. -repeat apply prod_neq_R0; - assumption || - (apply Rinv_neq_0_compat; assumption) || - (apply Rinv_neq_0_compat; discrR) || - (red in |- *; intro H28; rewrite H28 in H6; elim (Rlt_irrefl _ H6)). -apply prod_neq_R0; [ discrR | assumption ]. -apply prod_neq_R0; [ discrR | assumption ]. -assumption. -elim H13; intros. -apply H20. -split. -apply D_x_no_cond; assumption. -replace (x + a - x) with a; [ assumption | ring ]. -intros. -case (Req_dec a 0); intro. -rewrite H18; rewrite Rplus_0_r; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rabs_R0; apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr. -repeat apply prod_neq_R0; - assumption || - (apply Rinv_neq_0_compat; assumption) || - (apply Rinv_neq_0_compat; discrR) || - (red in |- *; intro H28; rewrite H28 in H6; elim (Rlt_irrefl _ H6)). -discrR. -assumption. -elim H14; intros. -apply H20. -split. -unfold D_x, no_cond in |- *; split. -trivial. -apply Rminus_not_eq_right. -replace (x + a - x) with a; [ assumption | ring ]. -replace (x + a - x) with a; [ assumption | ring ]. -repeat apply Rmin_pos. -apply (cond_pos eps_f2). -elim H3; intros; assumption. -apply (cond_pos alp_f1d). -apply (cond_pos alp_f2d). -elim H13; intros; assumption. -elim H14; intros; assumption. -change (0 < Rabs (eps * Rsqr (f2 x) / (8 * l1))) in |- *; apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr; try discrR || assumption. -repeat apply prod_neq_R0; - assumption || - (apply Rinv_neq_0_compat; assumption) || - (apply Rinv_neq_0_compat; discrR) || - (red in |- *; intro H14; rewrite H14 in H6; elim (Rlt_irrefl _ H6)). -change (0 < Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2))) in |- *; - apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr. -repeat apply prod_neq_R0; - assumption || - (apply Rinv_neq_0_compat; assumption) || - (apply Rinv_neq_0_compat; discrR) || - (red in |- *; intro H13; rewrite H13 in H6; elim (Rlt_irrefl _ H6)). -apply prod_neq_R0; [ discrR | assumption ]. -apply prod_neq_R0; [ discrR | assumption ]. -assumption. -apply Rabs_pos_lt. -unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr; - [ idtac | discrR | assumption ]. -repeat apply prod_neq_R0; - assumption || - (apply Rinv_neq_0_compat; assumption) || - (apply Rinv_neq_0_compat; discrR) || - (red in |- *; intro H11; rewrite H11 in H6; elim (Rlt_irrefl _ H6)). -intros. -unfold Rdiv in |- *. -apply Rmult_lt_reg_l with (Rabs (f2 (x + a))). -apply Rabs_pos_lt; apply H2. -apply Rlt_le_trans with (Rmin eps_f2 alp_f2). -assumption. -apply Rmin_l. -rewrite <- Rinv_r_sym. -apply Rmult_lt_reg_l with (Rabs (f2 x)). -apply Rabs_pos_lt; assumption. -rewrite Rmult_1_r. -rewrite (Rmult_comm (Rabs (f2 x))). -repeat rewrite Rmult_assoc. -rewrite <- Rinv_l_sym. -rewrite Rmult_1_r. -apply Rmult_lt_reg_l with (/ 2). -apply Rinv_0_lt_compat; prove_sup0. -repeat rewrite (Rmult_comm (/ 2)). -repeat rewrite Rmult_assoc. -rewrite <- Rinv_r_sym. -rewrite Rmult_1_r. -unfold Rdiv in H5; apply H5. -replace (x + a - x) with a. -assert (H7 := Rlt_le_trans _ _ _ H6 (Rmin_r _ _)); assumption. -ring. -discrR. -apply Rabs_no_R0; assumption. -apply Rabs_no_R0; apply H2. -assert (H7 := Rlt_le_trans _ _ _ H6 (Rmin_l _ _)); assumption. -intros. -assert (H6 := H4 a H5). -rewrite <- (Rabs_Ropp (f2 a - f2 x)) in H6. -rewrite Ropp_minus_distr in H6. -assert (H7 := Rle_lt_trans _ _ _ (Rabs_triang_inv _ _) H6). -apply Rplus_lt_reg_r with (- Rabs (f2 a) + Rabs (f2 x) / 2). -rewrite Rplus_assoc. -rewrite <- double_var. -do 2 rewrite (Rplus_comm (- Rabs (f2 a))). -rewrite Rplus_assoc; rewrite Rplus_opp_l; rewrite Rplus_0_r. -unfold Rminus in H7; assumption. -intros. -case (Req_dec x x0); intro. -rewrite <- H5; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; - unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ apply Rabs_pos_lt; assumption | apply Rinv_0_lt_compat; prove_sup0 ]. -elim H3; intros. -apply H7. -split. -unfold D_x, no_cond in |- *; split. -trivial. -assumption. -assumption. + elim (H0 (Rabs (Rsqr (f2 x) * eps / (8 * f1 x)))). + intros alp_f2d H11. + assert (H12 := derivable_continuous_pt _ _ X). + unfold continuity_pt in H12. + unfold continue_in in H12. + unfold limit1_in in H12. + unfold limit_in in H12. + unfold dist in H12. + simpl in H12. + unfold R_dist in H12. + elim (H12 (Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2)))). + intros alp_f2c H13. + elim (H12 (Rabs (eps * Rsqr (f2 x) / (8 * l1)))). + intros alp_f2t2 H14. + cut + (0 < + Rmin (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d alp_f2d)) + (Rmin alp_f2c alp_f2t2)). + intro. + exists + (mkposreal + (Rmin (Rmin (Rmin eps_f2 alp_f2) (Rmin alp_f1d alp_f2d)) + (Rmin alp_f2c alp_f2t2)) H15). + simpl in |- *. + intros. + assert (H18 := Rlt_le_trans _ _ _ H17 (Rmin_l _ _)). + assert (H19 := Rlt_le_trans _ _ _ H17 (Rmin_r _ _)). + assert (H20 := Rlt_le_trans _ _ _ H18 (Rmin_l _ _)). + assert (H21 := Rlt_le_trans _ _ _ H18 (Rmin_r _ _)). + assert (H22 := Rlt_le_trans _ _ _ H19 (Rmin_l _ _)). + assert (H23 := Rlt_le_trans _ _ _ H19 (Rmin_r _ _)). + assert (H24 := Rlt_le_trans _ _ _ H20 (Rmin_l _ _)). + assert (H25 := Rlt_le_trans _ _ _ H20 (Rmin_r _ _)). + assert (H26 := Rlt_le_trans _ _ _ H21 (Rmin_l _ _)). + assert (H27 := Rlt_le_trans _ _ _ H21 (Rmin_r _ _)). + clear H17 H18 H19 H20 H21. + cut + (forall a:R, + Rabs a < alp_f2t2 -> + Rabs (f2 (x + a) - f2 x) < Rabs (eps * Rsqr (f2 x) / (8 * l1))). + cut + (forall a:R, + Rabs a < alp_f2c -> + Rabs (f2 (x + a) - f2 x) < + Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2))). + intros. + rewrite formule; try assumption. + apply Rle_lt_trans with + (Rabs (/ f2 (x + h) * ((f1 (x + h) - f1 x) / h - l1)) + + Rabs (l1 / (f2 x * f2 (x + h)) * (f2 x - f2 (x + h))) + + Rabs (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) - f2 x) / h - l2)) + + Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h)) * (f2 (x + h) - f2 x))). + unfold Rminus in |- *. + rewrite <- + (Rabs_Ropp (f1 x / (f2 x * f2 (x + h)) * ((f2 (x + h) + - f2 x) / h + - l2))) + . + apply Rabs_4. + repeat rewrite Rabs_mult. + apply Rlt_le_trans with (eps / 4 + eps / 4 + eps / 4 + eps / 4). + cut (Rabs (/ f2 (x + h)) * Rabs ((f1 (x + h) - f1 x) / h - l1) < eps / 4). + cut (Rabs (l1 / (f2 x * f2 (x + h))) * Rabs (f2 x - f2 (x + h)) < eps / 4). + cut + (Rabs (f1 x / (f2 x * f2 (x + h))) * Rabs ((f2 (x + h) - f2 x) / h - l2) < + eps / 4). + cut + (Rabs (l2 * f1 x / (Rsqr (f2 x) * f2 (x + h))) * Rabs (f2 (x + h) - f2 x) < + eps / 4). + intros. + apply Rlt_4; assumption. + rewrite <- Rabs_mult. + apply (maj_term4 x h eps l2 alp_f2 alp_f2c eps_f2 f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite <- Rabs_mult. + apply (maj_term3 x h eps l2 alp_f2 eps_f2 alp_f2d f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite <- Rabs_mult. + apply (maj_term2 x h eps l1 alp_f2 alp_f2t2 eps_f2 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + rewrite <- Rabs_mult. + apply (maj_term1 x h eps l1 alp_f2 eps_f2 alp_f1d f1 f2); try assumption. + apply H2; assumption. + apply Rmin_2; assumption. + right; symmetry in |- *; apply quadruple_var. + apply H2; assumption. + intros. + case (Req_dec a 0); intro. + rewrite H18; rewrite Rplus_0_r; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rabs_R0; apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr. + repeat apply prod_neq_R0; + assumption || + (apply Rinv_neq_0_compat; assumption) || + (apply Rinv_neq_0_compat; discrR) || + (red in |- *; intro H28; rewrite H28 in H6; elim (Rlt_irrefl _ H6)). + apply prod_neq_R0; [ discrR | assumption ]. + apply prod_neq_R0; [ discrR | assumption ]. + assumption. + elim H13; intros. + apply H20. + split. + apply D_x_no_cond; assumption. + replace (x + a - x) with a; [ assumption | ring ]. + intros. + case (Req_dec a 0); intro. + rewrite H18; rewrite Rplus_0_r; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rabs_R0; apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr. + repeat apply prod_neq_R0; + assumption || + (apply Rinv_neq_0_compat; assumption) || + (apply Rinv_neq_0_compat; discrR) || + (red in |- *; intro H28; rewrite H28 in H6; elim (Rlt_irrefl _ H6)). + discrR. + assumption. + elim H14; intros. + apply H20. + split. + unfold D_x, no_cond in |- *; split. + trivial. + apply Rminus_not_eq_right. + replace (x + a - x) with a; [ assumption | ring ]. + replace (x + a - x) with a; [ assumption | ring ]. + repeat apply Rmin_pos. + apply (cond_pos eps_f2). + elim H3; intros; assumption. + apply (cond_pos alp_f1d). + apply (cond_pos alp_f2d). + elim H13; intros; assumption. + elim H14; intros; assumption. + change (0 < Rabs (eps * Rsqr (f2 x) / (8 * l1))) in |- *; apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr; try discrR || assumption. + repeat apply prod_neq_R0; + assumption || + (apply Rinv_neq_0_compat; assumption) || + (apply Rinv_neq_0_compat; discrR) || + (red in |- *; intro H14; rewrite H14 in H6; elim (Rlt_irrefl _ H6)). + change (0 < Rabs (Rsqr (f2 x) * f2 x * eps / (8 * f1 x * l2))) in |- *; + apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr. + repeat apply prod_neq_R0; + assumption || + (apply Rinv_neq_0_compat; assumption) || + (apply Rinv_neq_0_compat; discrR) || + (red in |- *; intro H13; rewrite H13 in H6; elim (Rlt_irrefl _ H6)). + apply prod_neq_R0; [ discrR | assumption ]. + apply prod_neq_R0; [ discrR | assumption ]. + assumption. + apply Rabs_pos_lt. + unfold Rdiv, Rsqr in |- *; rewrite Rinv_mult_distr; + [ idtac | discrR | assumption ]. + repeat apply prod_neq_R0; + assumption || + (apply Rinv_neq_0_compat; assumption) || + (apply Rinv_neq_0_compat; discrR) || + (red in |- *; intro H11; rewrite H11 in H6; elim (Rlt_irrefl _ H6)). + intros. + unfold Rdiv in |- *. + apply Rmult_lt_reg_l with (Rabs (f2 (x + a))). + apply Rabs_pos_lt; apply H2. + apply Rlt_le_trans with (Rmin eps_f2 alp_f2). + assumption. + apply Rmin_l. + rewrite <- Rinv_r_sym. + apply Rmult_lt_reg_l with (Rabs (f2 x)). + apply Rabs_pos_lt; assumption. + rewrite Rmult_1_r. + rewrite (Rmult_comm (Rabs (f2 x))). + repeat rewrite Rmult_assoc. + rewrite <- Rinv_l_sym. + rewrite Rmult_1_r. + apply Rmult_lt_reg_l with (/ 2). + apply Rinv_0_lt_compat; prove_sup0. + repeat rewrite (Rmult_comm (/ 2)). + repeat rewrite Rmult_assoc. + rewrite <- Rinv_r_sym. + rewrite Rmult_1_r. + unfold Rdiv in H5; apply H5. + replace (x + a - x) with a. + assert (H7 := Rlt_le_trans _ _ _ H6 (Rmin_r _ _)); assumption. + ring. + discrR. + apply Rabs_no_R0; assumption. + apply Rabs_no_R0; apply H2. + assert (H7 := Rlt_le_trans _ _ _ H6 (Rmin_l _ _)); assumption. + intros. + assert (H6 := H4 a H5). + rewrite <- (Rabs_Ropp (f2 a - f2 x)) in H6. + rewrite Ropp_minus_distr in H6. + assert (H7 := Rle_lt_trans _ _ _ (Rabs_triang_inv _ _) H6). + apply Rplus_lt_reg_r with (- Rabs (f2 a) + Rabs (f2 x) / 2). + rewrite Rplus_assoc. + rewrite <- double_var. + do 2 rewrite (Rplus_comm (- Rabs (f2 a))). + rewrite Rplus_assoc; rewrite Rplus_opp_l; rewrite Rplus_0_r. + unfold Rminus in H7; assumption. + intros. + case (Req_dec x x0); intro. + rewrite <- H5; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; + unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ apply Rabs_pos_lt; assumption | apply Rinv_0_lt_compat; prove_sup0 ]. + elim H3; intros. + apply H7. + split. + unfold D_x, no_cond in |- *; split. + trivial. + assumption. + assumption. Qed. Lemma derivable_pt_div : - forall (f1 f2:R -> R) (x:R), - derivable_pt f1 x -> - derivable_pt f2 x -> f2 x <> 0 -> derivable_pt (f1 / f2) x. -unfold derivable_pt in |- *. -intros f1 f2 x X X0 H. -elim X; intros. -elim X0; intros. -apply existT with ((x0 * f2 x - x1 * f1 x) / Rsqr (f2 x)). -apply derivable_pt_lim_div; assumption. + forall (f1 f2:R -> R) (x:R), + derivable_pt f1 x -> + derivable_pt f2 x -> f2 x <> 0 -> derivable_pt (f1 / f2) x. +Proof. + unfold derivable_pt in |- *. + intros f1 f2 x X X0 H. + elim X; intros. + elim X0; intros. + apply existT with ((x0 * f2 x - x1 * f1 x) / Rsqr (f2 x)). + apply derivable_pt_lim_div; assumption. Qed. Lemma derivable_div : - forall f1 f2:R -> R, - derivable f1 -> - derivable f2 -> (forall x:R, f2 x <> 0) -> derivable (f1 / f2). -unfold derivable in |- *; intros f1 f2 X X0 H x. -apply (derivable_pt_div _ _ _ (X x) (X0 x) (H x)). + forall f1 f2:R -> R, + derivable f1 -> + derivable f2 -> (forall x:R, f2 x <> 0) -> derivable (f1 / f2). +Proof. + unfold derivable in |- *; intros f1 f2 X X0 H x. + apply (derivable_pt_div _ _ _ (X x) (X0 x) (H x)). Qed. Lemma derive_pt_div : - forall (f1 f2:R -> R) (x:R) (pr1:derivable_pt f1 x) - (pr2:derivable_pt f2 x) (na:f2 x <> 0), - derive_pt (f1 / f2) x (derivable_pt_div _ _ _ pr1 pr2 na) = - (derive_pt f1 x pr1 * f2 x - derive_pt f2 x pr2 * f1 x) / Rsqr (f2 x). -intros. -assert (H := derivable_derive f1 x pr1). -assert (H0 := derivable_derive f2 x pr2). -assert - (H1 := derivable_derive (f1 / f2)%F x (derivable_pt_div _ _ _ pr1 pr2 na)). -elim H; clear H; intros l1 H. -elim H0; clear H0; intros l2 H0. -elim H1; clear H1; intros l H1. -rewrite H; rewrite H0; apply derive_pt_eq_0. -assert (H3 := projT2 pr1). -unfold derive_pt in H; rewrite H in H3. -assert (H4 := projT2 pr2). -unfold derive_pt in H0; rewrite H0 in H4. -apply derivable_pt_lim_div; assumption. + forall (f1 f2:R -> R) (x:R) (pr1:derivable_pt f1 x) + (pr2:derivable_pt f2 x) (na:f2 x <> 0), + derive_pt (f1 / f2) x (derivable_pt_div _ _ _ pr1 pr2 na) = + (derive_pt f1 x pr1 * f2 x - derive_pt f2 x pr2 * f1 x) / Rsqr (f2 x). +Proof. + intros. + assert (H := derivable_derive f1 x pr1). + assert (H0 := derivable_derive f2 x pr2). + assert + (H1 := derivable_derive (f1 / f2)%F x (derivable_pt_div _ _ _ pr1 pr2 na)). + elim H; clear H; intros l1 H. + elim H0; clear H0; intros l2 H0. + elim H1; clear H1; intros l H1. + rewrite H; rewrite H0; apply derive_pt_eq_0. + assert (H3 := projT2 pr1). + unfold derive_pt in H; rewrite H in H3. + assert (H4 := projT2 pr2). + unfold derive_pt in H0; rewrite H0 in H4. + apply derivable_pt_lim_div; assumption. Qed. |