summaryrefslogtreecommitdiff
path: root/theories/Reals/Rsqrt_def.v
diff options
context:
space:
mode:
Diffstat (limited to 'theories/Reals/Rsqrt_def.v')
-rw-r--r--theories/Reals/Rsqrt_def.v1341
1 files changed, 682 insertions, 659 deletions
diff --git a/theories/Reals/Rsqrt_def.v b/theories/Reals/Rsqrt_def.v
index de3422e8..92284e7d 100644
--- a/theories/Reals/Rsqrt_def.v
+++ b/theories/Reals/Rsqrt_def.v
@@ -5,8 +5,8 @@
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(************************************************************************)
-
-(*i $Id: Rsqrt_def.v 8670 2006-03-28 22:16:14Z herbelin $ i*)
+
+(*i $Id: Rsqrt_def.v 9245 2006-10-17 12:53:34Z notin $ i*)
Require Import Sumbool.
Require Import Rbase.
@@ -17,746 +17,769 @@ Open Local Scope R_scope.
Boxed Fixpoint Dichotomy_lb (x y:R) (P:R -> bool) (N:nat) {struct N} : R :=
match N with
- | O => x
- | S n =>
+ | O => x
+ | S n =>
let down := Dichotomy_lb x y P n in
- let up := Dichotomy_ub x y P n in
- let z := (down + up) / 2 in if P z then down else z
+ let up := Dichotomy_ub x y P n in
+ let z := (down + up) / 2 in if P z then down else z
end
-
- with Dichotomy_ub (x y:R) (P:R -> bool) (N:nat) {struct N} : R :=
- match N with
- | O => y
- | S n =>
- let down := Dichotomy_lb x y P n in
- let up := Dichotomy_ub x y P n in
- let z := (down + up) / 2 in if P z then z else up
- end.
+
+ with Dichotomy_ub (x y:R) (P:R -> bool) (N:nat) {struct N} : R :=
+ match N with
+ | O => y
+ | S n =>
+ let down := Dichotomy_lb x y P n in
+ let up := Dichotomy_ub x y P n in
+ let z := (down + up) / 2 in if P z then z else up
+ end.
Definition dicho_lb (x y:R) (P:R -> bool) (N:nat) : R := Dichotomy_lb x y P N.
Definition dicho_up (x y:R) (P:R -> bool) (N:nat) : R := Dichotomy_ub x y P N.
(**********)
Lemma dicho_comp :
- forall (x y:R) (P:R -> bool) (n:nat),
- x <= y -> dicho_lb x y P n <= dicho_up x y P n.
-intros.
-induction n as [| n Hrecn].
-simpl in |- *; assumption.
-simpl in |- *.
-case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
-unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
-prove_sup0.
-pattern 2 at 1 in |- *; rewrite Rmult_comm.
-rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ idtac | discrR ].
-rewrite Rmult_1_r.
-rewrite double.
-apply Rplus_le_compat_l.
-assumption.
-unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
-prove_sup0.
-pattern 2 at 3 in |- *; rewrite Rmult_comm.
-rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ idtac | discrR ].
-rewrite Rmult_1_r.
-rewrite double.
-rewrite <- (Rplus_comm (Dichotomy_ub x y P n)).
-apply Rplus_le_compat_l.
-assumption.
+ forall (x y:R) (P:R -> bool) (n:nat),
+ x <= y -> dicho_lb x y P n <= dicho_up x y P n.
+Proof.
+ intros.
+ induction n as [| n Hrecn].
+ simpl in |- *; assumption.
+ simpl in |- *.
+ case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
+ unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
+ prove_sup0.
+ pattern 2 at 1 in |- *; rewrite Rmult_comm.
+ rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ idtac | discrR ].
+ rewrite Rmult_1_r.
+ rewrite double.
+ apply Rplus_le_compat_l.
+ assumption.
+ unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
+ prove_sup0.
+ pattern 2 at 3 in |- *; rewrite Rmult_comm.
+ rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ idtac | discrR ].
+ rewrite Rmult_1_r.
+ rewrite double.
+ rewrite <- (Rplus_comm (Dichotomy_ub x y P n)).
+ apply Rplus_le_compat_l.
+ assumption.
Qed.
Lemma dicho_lb_growing :
- forall (x y:R) (P:R -> bool), x <= y -> Un_growing (dicho_lb x y P).
-intros.
-unfold Un_growing in |- *.
-intro.
-simpl in |- *.
-case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
-right; reflexivity.
-unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
-prove_sup0.
-pattern 2 at 1 in |- *; rewrite Rmult_comm.
-rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ idtac | discrR ].
-rewrite Rmult_1_r.
-rewrite double.
-apply Rplus_le_compat_l.
-replace (Dichotomy_ub x y P n) with (dicho_up x y P n);
- [ apply dicho_comp; assumption | reflexivity ].
+ forall (x y:R) (P:R -> bool), x <= y -> Un_growing (dicho_lb x y P).
+Proof.
+ intros.
+ unfold Un_growing in |- *.
+ intro.
+ simpl in |- *.
+ case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
+ right; reflexivity.
+ unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
+ prove_sup0.
+ pattern 2 at 1 in |- *; rewrite Rmult_comm.
+ rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ idtac | discrR ].
+ rewrite Rmult_1_r.
+ rewrite double.
+ apply Rplus_le_compat_l.
+ replace (Dichotomy_ub x y P n) with (dicho_up x y P n);
+ [ apply dicho_comp; assumption | reflexivity ].
Qed.
Lemma dicho_up_decreasing :
- forall (x y:R) (P:R -> bool), x <= y -> Un_decreasing (dicho_up x y P).
-intros.
-unfold Un_decreasing in |- *.
-intro.
-simpl in |- *.
-case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
-unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
-prove_sup0.
-pattern 2 at 3 in |- *; rewrite Rmult_comm.
-rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ idtac | discrR ].
-rewrite Rmult_1_r.
-rewrite double.
-replace (Dichotomy_ub x y P n) with (dicho_up x y P n);
- [ idtac | reflexivity ].
-replace (Dichotomy_lb x y P n) with (dicho_lb x y P n);
- [ idtac | reflexivity ].
-rewrite <- (Rplus_comm (dicho_up x y P n)).
-apply Rplus_le_compat_l.
-apply dicho_comp; assumption.
-right; reflexivity.
+ forall (x y:R) (P:R -> bool), x <= y -> Un_decreasing (dicho_up x y P).
+Proof.
+ intros.
+ unfold Un_decreasing in |- *.
+ intro.
+ simpl in |- *.
+ case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
+ unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
+ prove_sup0.
+ pattern 2 at 3 in |- *; rewrite Rmult_comm.
+ rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ idtac | discrR ].
+ rewrite Rmult_1_r.
+ rewrite double.
+ replace (Dichotomy_ub x y P n) with (dicho_up x y P n);
+ [ idtac | reflexivity ].
+ replace (Dichotomy_lb x y P n) with (dicho_lb x y P n);
+ [ idtac | reflexivity ].
+ rewrite <- (Rplus_comm (dicho_up x y P n)).
+ apply Rplus_le_compat_l.
+ apply dicho_comp; assumption.
+ right; reflexivity.
Qed.
Lemma dicho_lb_maj_y :
- forall (x y:R) (P:R -> bool), x <= y -> forall n:nat, dicho_lb x y P n <= y.
-intros.
-induction n as [| n Hrecn].
-simpl in |- *; assumption.
-simpl in |- *.
-case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
-assumption.
-unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
-prove_sup0.
-pattern 2 at 3 in |- *; rewrite Rmult_comm.
-rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ rewrite Rmult_1_r | discrR ].
-rewrite double; apply Rplus_le_compat.
-assumption.
-pattern y at 2 in |- *; replace y with (Dichotomy_ub x y P 0);
- [ idtac | reflexivity ].
-apply decreasing_prop.
-assert (H0 := dicho_up_decreasing x y P H).
-assumption.
-apply le_O_n.
+ forall (x y:R) (P:R -> bool), x <= y -> forall n:nat, dicho_lb x y P n <= y.
+Proof.
+ intros.
+ induction n as [| n Hrecn].
+ simpl in |- *; assumption.
+ simpl in |- *.
+ case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
+ assumption.
+ unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
+ prove_sup0.
+ pattern 2 at 3 in |- *; rewrite Rmult_comm.
+ rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ rewrite Rmult_1_r | discrR ].
+ rewrite double; apply Rplus_le_compat.
+ assumption.
+ pattern y at 2 in |- *; replace y with (Dichotomy_ub x y P 0);
+ [ idtac | reflexivity ].
+ apply decreasing_prop.
+ assert (H0 := dicho_up_decreasing x y P H).
+ assumption.
+ apply le_O_n.
Qed.
Lemma dicho_lb_maj :
- forall (x y:R) (P:R -> bool), x <= y -> has_ub (dicho_lb x y P).
-intros.
-cut (forall n:nat, dicho_lb x y P n <= y).
-intro.
-unfold has_ub in |- *.
-unfold bound in |- *.
-exists y.
-unfold is_upper_bound in |- *.
-intros.
-elim H1; intros.
-rewrite H2; apply H0.
-apply dicho_lb_maj_y; assumption.
+ forall (x y:R) (P:R -> bool), x <= y -> has_ub (dicho_lb x y P).
+Proof.
+ intros.
+ cut (forall n:nat, dicho_lb x y P n <= y).
+ intro.
+ unfold has_ub in |- *.
+ unfold bound in |- *.
+ exists y.
+ unfold is_upper_bound in |- *.
+ intros.
+ elim H1; intros.
+ rewrite H2; apply H0.
+ apply dicho_lb_maj_y; assumption.
Qed.
Lemma dicho_up_min_x :
- forall (x y:R) (P:R -> bool), x <= y -> forall n:nat, x <= dicho_up x y P n.
-intros.
-induction n as [| n Hrecn].
-simpl in |- *; assumption.
-simpl in |- *.
-case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
-unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
-prove_sup0.
-pattern 2 at 1 in |- *; rewrite Rmult_comm.
-rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ rewrite Rmult_1_r | discrR ].
-rewrite double; apply Rplus_le_compat.
-pattern x at 1 in |- *; replace x with (Dichotomy_lb x y P 0);
- [ idtac | reflexivity ].
-apply tech9.
-assert (H0 := dicho_lb_growing x y P H).
-assumption.
-apply le_O_n.
-assumption.
-assumption.
+ forall (x y:R) (P:R -> bool), x <= y -> forall n:nat, x <= dicho_up x y P n.
+Proof.
+ intros.
+ induction n as [| n Hrecn].
+ simpl in |- *; assumption.
+ simpl in |- *.
+ case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
+ unfold Rdiv in |- *; apply Rmult_le_reg_l with 2.
+ prove_sup0.
+ pattern 2 at 1 in |- *; rewrite Rmult_comm.
+ rewrite Rmult_assoc; rewrite <- Rinv_l_sym; [ rewrite Rmult_1_r | discrR ].
+ rewrite double; apply Rplus_le_compat.
+ pattern x at 1 in |- *; replace x with (Dichotomy_lb x y P 0);
+ [ idtac | reflexivity ].
+ apply tech9.
+ assert (H0 := dicho_lb_growing x y P H).
+ assumption.
+ apply le_O_n.
+ assumption.
+ assumption.
Qed.
Lemma dicho_up_min :
- forall (x y:R) (P:R -> bool), x <= y -> has_lb (dicho_up x y P).
-intros.
-cut (forall n:nat, x <= dicho_up x y P n).
-intro.
-unfold has_lb in |- *.
-unfold bound in |- *.
-exists (- x).
-unfold is_upper_bound in |- *.
-intros.
-elim H1; intros.
-rewrite H2.
-unfold opp_seq in |- *.
-apply Ropp_le_contravar.
-apply H0.
-apply dicho_up_min_x; assumption.
+ forall (x y:R) (P:R -> bool), x <= y -> has_lb (dicho_up x y P).
+Proof.
+ intros.
+ cut (forall n:nat, x <= dicho_up x y P n).
+ intro.
+ unfold has_lb in |- *.
+ unfold bound in |- *.
+ exists (- x).
+ unfold is_upper_bound in |- *.
+ intros.
+ elim H1; intros.
+ rewrite H2.
+ unfold opp_seq in |- *.
+ apply Ropp_le_contravar.
+ apply H0.
+ apply dicho_up_min_x; assumption.
Qed.
Lemma dicho_lb_cv :
- forall (x y:R) (P:R -> bool),
- x <= y -> sigT (fun l:R => Un_cv (dicho_lb x y P) l).
-intros.
-apply growing_cv.
-apply dicho_lb_growing; assumption.
-apply dicho_lb_maj; assumption.
+ forall (x y:R) (P:R -> bool),
+ x <= y -> sigT (fun l:R => Un_cv (dicho_lb x y P) l).
+Proof.
+ intros.
+ apply growing_cv.
+ apply dicho_lb_growing; assumption.
+ apply dicho_lb_maj; assumption.
Qed.
Lemma dicho_up_cv :
- forall (x y:R) (P:R -> bool),
- x <= y -> sigT (fun l:R => Un_cv (dicho_up x y P) l).
-intros.
-apply decreasing_cv.
-apply dicho_up_decreasing; assumption.
-apply dicho_up_min; assumption.
+ forall (x y:R) (P:R -> bool),
+ x <= y -> sigT (fun l:R => Un_cv (dicho_up x y P) l).
+Proof.
+ intros.
+ apply decreasing_cv.
+ apply dicho_up_decreasing; assumption.
+ apply dicho_up_min; assumption.
Qed.
Lemma dicho_lb_dicho_up :
- forall (x y:R) (P:R -> bool) (n:nat),
- x <= y -> dicho_up x y P n - dicho_lb x y P n = (y - x) / 2 ^ n.
-intros.
-induction n as [| n Hrecn].
-simpl in |- *.
-unfold Rdiv in |- *; rewrite Rinv_1; ring.
-simpl in |- *.
-case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
-unfold Rdiv in |- *.
-replace
- ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) * / 2 - Dichotomy_lb x y P n)
- with ((dicho_up x y P n - dicho_lb x y P n) / 2).
-unfold Rdiv in |- *; rewrite Hrecn.
-unfold Rdiv in |- *.
-rewrite Rinv_mult_distr.
-ring.
-discrR.
-apply pow_nonzero; discrR.
-pattern (Dichotomy_lb x y P n) at 2 in |- *;
- rewrite (double_var (Dichotomy_lb x y P n));
- unfold dicho_up, dicho_lb, Rminus, Rdiv in |- *; ring.
-replace
- (Dichotomy_ub x y P n - (Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)
- with ((dicho_up x y P n - dicho_lb x y P n) / 2).
-unfold Rdiv in |- *; rewrite Hrecn.
-unfold Rdiv in |- *.
-rewrite Rinv_mult_distr.
-ring.
-discrR.
-apply pow_nonzero; discrR.
-pattern (Dichotomy_ub x y P n) at 1 in |- *;
- rewrite (double_var (Dichotomy_ub x y P n));
- unfold dicho_up, dicho_lb, Rminus, Rdiv in |- *; ring.
+ forall (x y:R) (P:R -> bool) (n:nat),
+ x <= y -> dicho_up x y P n - dicho_lb x y P n = (y - x) / 2 ^ n.
+Proof.
+ intros.
+ induction n as [| n Hrecn].
+ simpl in |- *.
+ unfold Rdiv in |- *; rewrite Rinv_1; ring.
+ simpl in |- *.
+ case (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)).
+ unfold Rdiv in |- *.
+ replace
+ ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) * / 2 - Dichotomy_lb x y P n)
+ with ((dicho_up x y P n - dicho_lb x y P n) / 2).
+ unfold Rdiv in |- *; rewrite Hrecn.
+ unfold Rdiv in |- *.
+ rewrite Rinv_mult_distr.
+ ring.
+ discrR.
+ apply pow_nonzero; discrR.
+ pattern (Dichotomy_lb x y P n) at 2 in |- *;
+ rewrite (double_var (Dichotomy_lb x y P n));
+ unfold dicho_up, dicho_lb, Rminus, Rdiv in |- *; ring.
+ replace
+ (Dichotomy_ub x y P n - (Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2)
+ with ((dicho_up x y P n - dicho_lb x y P n) / 2).
+ unfold Rdiv in |- *; rewrite Hrecn.
+ unfold Rdiv in |- *.
+ rewrite Rinv_mult_distr.
+ ring.
+ discrR.
+ apply pow_nonzero; discrR.
+ pattern (Dichotomy_ub x y P n) at 1 in |- *;
+ rewrite (double_var (Dichotomy_ub x y P n));
+ unfold dicho_up, dicho_lb, Rminus, Rdiv in |- *; ring.
Qed.
Definition pow_2_n (n:nat) := 2 ^ n.
Lemma pow_2_n_neq_R0 : forall n:nat, pow_2_n n <> 0.
-intro.
-unfold pow_2_n in |- *.
-apply pow_nonzero.
-discrR.
+Proof.
+ intro.
+ unfold pow_2_n in |- *.
+ apply pow_nonzero.
+ discrR.
Qed.
Lemma pow_2_n_growing : Un_growing pow_2_n.
-unfold Un_growing in |- *.
-intro.
-replace (S n) with (n + 1)%nat;
- [ unfold pow_2_n in |- *; rewrite pow_add | ring ].
-pattern (2 ^ n) at 1 in |- *; rewrite <- Rmult_1_r.
-apply Rmult_le_compat_l.
-left; apply pow_lt; prove_sup0.
-simpl in |- *.
-rewrite Rmult_1_r.
-pattern 1 at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_le_compat_l; left;
- apply Rlt_0_1.
+Proof.
+ unfold Un_growing in |- *.
+ intro.
+ replace (S n) with (n + 1)%nat;
+ [ unfold pow_2_n in |- *; rewrite pow_add | ring ].
+ pattern (2 ^ n) at 1 in |- *; rewrite <- Rmult_1_r.
+ apply Rmult_le_compat_l.
+ left; apply pow_lt; prove_sup0.
+ simpl in |- *.
+ rewrite Rmult_1_r.
+ pattern 1 at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_le_compat_l; left;
+ apply Rlt_0_1.
Qed.
Lemma pow_2_n_infty : cv_infty pow_2_n.
-cut (forall N:nat, INR N <= 2 ^ N).
-intros.
-unfold cv_infty in |- *.
-intro.
-case (total_order_T 0 M); intro.
-elim s; intro.
-set (N := up M).
-cut (0 <= N)%Z.
-intro.
-elim (IZN N H0); intros N0 H1.
-exists N0.
-intros.
-apply Rlt_le_trans with (INR N0).
-rewrite INR_IZR_INZ.
-rewrite <- H1.
-unfold N in |- *.
-assert (H3 := archimed M).
-elim H3; intros; assumption.
-apply Rle_trans with (pow_2_n N0).
-unfold pow_2_n in |- *; apply H.
-apply Rge_le.
-apply growing_prop.
-apply pow_2_n_growing.
-assumption.
-apply le_IZR.
-unfold N in |- *.
-simpl in |- *.
-assert (H0 := archimed M); elim H0; intros.
-left; apply Rlt_trans with M; assumption.
-exists 0%nat; intros.
-rewrite <- b.
-unfold pow_2_n in |- *; apply pow_lt; prove_sup0.
-exists 0%nat; intros.
-apply Rlt_trans with 0.
-assumption.
-unfold pow_2_n in |- *; apply pow_lt; prove_sup0.
-simple induction N.
-simpl in |- *.
-left; apply Rlt_0_1.
-intros.
-pattern (S n) at 2 in |- *; replace (S n) with (n + 1)%nat; [ idtac | ring ].
-rewrite S_INR; rewrite pow_add.
-simpl in |- *.
-rewrite Rmult_1_r.
-apply Rle_trans with (2 ^ n).
-rewrite <- (Rplus_comm 1).
-rewrite <- (Rmult_1_r (INR n)).
-apply (poly n 1).
-apply Rlt_0_1.
-pattern (2 ^ n) at 1 in |- *; rewrite <- Rplus_0_r.
-rewrite <- (Rmult_comm 2).
-rewrite double.
-apply Rplus_le_compat_l.
-left; apply pow_lt; prove_sup0.
+Proof.
+ cut (forall N:nat, INR N <= 2 ^ N).
+ intros.
+ unfold cv_infty in |- *.
+ intro.
+ case (total_order_T 0 M); intro.
+ elim s; intro.
+ set (N := up M).
+ cut (0 <= N)%Z.
+ intro.
+ elim (IZN N H0); intros N0 H1.
+ exists N0.
+ intros.
+ apply Rlt_le_trans with (INR N0).
+ rewrite INR_IZR_INZ.
+ rewrite <- H1.
+ unfold N in |- *.
+ assert (H3 := archimed M).
+ elim H3; intros; assumption.
+ apply Rle_trans with (pow_2_n N0).
+ unfold pow_2_n in |- *; apply H.
+ apply Rge_le.
+ apply growing_prop.
+ apply pow_2_n_growing.
+ assumption.
+ apply le_IZR.
+ unfold N in |- *.
+ simpl in |- *.
+ assert (H0 := archimed M); elim H0; intros.
+ left; apply Rlt_trans with M; assumption.
+ exists 0%nat; intros.
+ rewrite <- b.
+ unfold pow_2_n in |- *; apply pow_lt; prove_sup0.
+ exists 0%nat; intros.
+ apply Rlt_trans with 0.
+ assumption.
+ unfold pow_2_n in |- *; apply pow_lt; prove_sup0.
+ simple induction N.
+ simpl in |- *.
+ left; apply Rlt_0_1.
+ intros.
+ pattern (S n) at 2 in |- *; replace (S n) with (n + 1)%nat; [ idtac | ring ].
+ rewrite S_INR; rewrite pow_add.
+ simpl in |- *.
+ rewrite Rmult_1_r.
+ apply Rle_trans with (2 ^ n).
+ rewrite <- (Rplus_comm 1).
+ rewrite <- (Rmult_1_r (INR n)).
+ apply (poly n 1).
+ apply Rlt_0_1.
+ pattern (2 ^ n) at 1 in |- *; rewrite <- Rplus_0_r.
+ rewrite <- (Rmult_comm 2).
+ rewrite double.
+ apply Rplus_le_compat_l.
+ left; apply pow_lt; prove_sup0.
Qed.
Lemma cv_dicho :
- forall (x y l1 l2:R) (P:R -> bool),
- x <= y ->
- Un_cv (dicho_lb x y P) l1 -> Un_cv (dicho_up x y P) l2 -> l1 = l2.
-intros.
-assert (H2 := CV_minus _ _ _ _ H0 H1).
-cut (Un_cv (fun i:nat => dicho_lb x y P i - dicho_up x y P i) 0).
-intro.
-assert (H4 := UL_sequence _ _ _ H2 H3).
-symmetry in |- *; apply Rminus_diag_uniq_sym; assumption.
-unfold Un_cv in |- *; unfold R_dist in |- *.
-intros.
-assert (H4 := cv_infty_cv_R0 pow_2_n pow_2_n_neq_R0 pow_2_n_infty).
-case (total_order_T x y); intro.
-elim s; intro.
-unfold Un_cv in H4; unfold R_dist in H4.
-cut (0 < y - x).
-intro Hyp.
-cut (0 < eps / (y - x)).
-intro.
-elim (H4 (eps / (y - x)) H5); intros N H6.
-exists N; intros.
-replace (dicho_lb x y P n - dicho_up x y P n - 0) with
- (dicho_lb x y P n - dicho_up x y P n); [ idtac | ring ].
-rewrite <- Rabs_Ropp.
-rewrite Ropp_minus_distr'.
-rewrite dicho_lb_dicho_up.
-unfold Rdiv in |- *; rewrite Rabs_mult.
-rewrite (Rabs_right (y - x)).
-apply Rmult_lt_reg_l with (/ (y - x)).
-apply Rinv_0_lt_compat; assumption.
-rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym.
-rewrite Rmult_1_l.
-replace (/ 2 ^ n) with (/ 2 ^ n - 0);
- [ unfold pow_2_n, Rdiv in H6; rewrite <- (Rmult_comm eps); apply H6;
+ forall (x y l1 l2:R) (P:R -> bool),
+ x <= y ->
+ Un_cv (dicho_lb x y P) l1 -> Un_cv (dicho_up x y P) l2 -> l1 = l2.
+Proof.
+ intros.
+ assert (H2 := CV_minus _ _ _ _ H0 H1).
+ cut (Un_cv (fun i:nat => dicho_lb x y P i - dicho_up x y P i) 0).
+ intro.
+ assert (H4 := UL_sequence _ _ _ H2 H3).
+ symmetry in |- *; apply Rminus_diag_uniq_sym; assumption.
+ unfold Un_cv in |- *; unfold R_dist in |- *.
+ intros.
+ assert (H4 := cv_infty_cv_R0 pow_2_n pow_2_n_neq_R0 pow_2_n_infty).
+ case (total_order_T x y); intro.
+ elim s; intro.
+ unfold Un_cv in H4; unfold R_dist in H4.
+ cut (0 < y - x).
+ intro Hyp.
+ cut (0 < eps / (y - x)).
+ intro.
+ elim (H4 (eps / (y - x)) H5); intros N H6.
+ exists N; intros.
+ replace (dicho_lb x y P n - dicho_up x y P n - 0) with
+ (dicho_lb x y P n - dicho_up x y P n); [ idtac | ring ].
+ rewrite <- Rabs_Ropp.
+ rewrite Ropp_minus_distr'.
+ rewrite dicho_lb_dicho_up.
+ unfold Rdiv in |- *; rewrite Rabs_mult.
+ rewrite (Rabs_right (y - x)).
+ apply Rmult_lt_reg_l with (/ (y - x)).
+ apply Rinv_0_lt_compat; assumption.
+ rewrite <- Rmult_assoc; rewrite <- Rinv_l_sym.
+ rewrite Rmult_1_l.
+ replace (/ 2 ^ n) with (/ 2 ^ n - 0);
+ [ unfold pow_2_n, Rdiv in H6; rewrite <- (Rmult_comm eps); apply H6;
assumption
- | ring ].
-red in |- *; intro; rewrite H8 in Hyp; elim (Rlt_irrefl _ Hyp).
-apply Rle_ge.
-apply Rplus_le_reg_l with x; rewrite Rplus_0_r.
-replace (x + (y - x)) with y; [ assumption | ring ].
-assumption.
-unfold Rdiv in |- *; apply Rmult_lt_0_compat;
- [ assumption | apply Rinv_0_lt_compat; assumption ].
-apply Rplus_lt_reg_r with x; rewrite Rplus_0_r.
-replace (x + (y - x)) with y; [ assumption | ring ].
-exists 0%nat; intros.
-replace (dicho_lb x y P n - dicho_up x y P n - 0) with
- (dicho_lb x y P n - dicho_up x y P n); [ idtac | ring ].
-rewrite <- Rabs_Ropp.
-rewrite Ropp_minus_distr'.
-rewrite dicho_lb_dicho_up.
-rewrite b.
-unfold Rminus, Rdiv in |- *; rewrite Rplus_opp_r; rewrite Rmult_0_l;
- rewrite Rabs_R0; assumption.
-assumption.
-elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)).
+ | ring ].
+ red in |- *; intro; rewrite H8 in Hyp; elim (Rlt_irrefl _ Hyp).
+ apply Rle_ge.
+ apply Rplus_le_reg_l with x; rewrite Rplus_0_r.
+ replace (x + (y - x)) with y; [ assumption | ring ].
+ assumption.
+ unfold Rdiv in |- *; apply Rmult_lt_0_compat;
+ [ assumption | apply Rinv_0_lt_compat; assumption ].
+ apply Rplus_lt_reg_r with x; rewrite Rplus_0_r.
+ replace (x + (y - x)) with y; [ assumption | ring ].
+ exists 0%nat; intros.
+ replace (dicho_lb x y P n - dicho_up x y P n - 0) with
+ (dicho_lb x y P n - dicho_up x y P n); [ idtac | ring ].
+ rewrite <- Rabs_Ropp.
+ rewrite Ropp_minus_distr'.
+ rewrite dicho_lb_dicho_up.
+ rewrite b.
+ unfold Rminus, Rdiv in |- *; rewrite Rplus_opp_r; rewrite Rmult_0_l;
+ rewrite Rabs_R0; assumption.
+ assumption.
+ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H r)).
Qed.
Definition cond_positivity (x:R) : bool :=
match Rle_dec 0 x with
- | left _ => true
- | right _ => false
+ | left _ => true
+ | right _ => false
end.
-(* Sequential caracterisation of continuity *)
+(** Sequential caracterisation of continuity *)
Lemma continuity_seq :
- forall (f:R -> R) (Un:nat -> R) (l:R),
- continuity_pt f l -> Un_cv Un l -> Un_cv (fun i:nat => f (Un i)) (f l).
-unfold continuity_pt, Un_cv in |- *; unfold continue_in in |- *.
-unfold limit1_in in |- *.
-unfold limit_in in |- *.
-unfold dist in |- *.
-simpl in |- *.
-unfold R_dist in |- *.
-intros.
-elim (H eps H1); intros alp H2.
-elim H2; intros.
-elim (H0 alp H3); intros N H5.
-exists N; intros.
-case (Req_dec (Un n) l); intro.
-rewrite H7; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
- assumption.
-apply H4.
-split.
-unfold D_x, no_cond in |- *.
-split.
-trivial.
-apply (sym_not_eq (A:=R)); assumption.
-apply H5; assumption.
+ forall (f:R -> R) (Un:nat -> R) (l:R),
+ continuity_pt f l -> Un_cv Un l -> Un_cv (fun i:nat => f (Un i)) (f l).
+Proof.
+ unfold continuity_pt, Un_cv in |- *; unfold continue_in in |- *.
+ unfold limit1_in in |- *.
+ unfold limit_in in |- *.
+ unfold dist in |- *.
+ simpl in |- *.
+ unfold R_dist in |- *.
+ intros.
+ elim (H eps H1); intros alp H2.
+ elim H2; intros.
+ elim (H0 alp H3); intros N H5.
+ exists N; intros.
+ case (Req_dec (Un n) l); intro.
+ rewrite H7; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0;
+ assumption.
+ apply H4.
+ split.
+ unfold D_x, no_cond in |- *.
+ split.
+ trivial.
+ apply (sym_not_eq (A:=R)); assumption.
+ apply H5; assumption.
Qed.
Lemma dicho_lb_car :
- forall (x y:R) (P:R -> bool) (n:nat),
- P x = false -> P (dicho_lb x y P n) = false.
-intros.
-induction n as [| n Hrecn].
-simpl in |- *.
-assumption.
-simpl in |- *.
-assert
- (X :=
- sumbool_of_bool (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2))).
-elim X; intro.
-rewrite a.
-unfold dicho_lb in Hrecn; assumption.
-rewrite b.
-assumption.
+ forall (x y:R) (P:R -> bool) (n:nat),
+ P x = false -> P (dicho_lb x y P n) = false.
+Proof.
+ intros.
+ induction n as [| n Hrecn].
+ simpl in |- *.
+ assumption.
+ simpl in |- *.
+ assert
+ (X :=
+ sumbool_of_bool (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2))).
+ elim X; intro.
+ rewrite a.
+ unfold dicho_lb in Hrecn; assumption.
+ rewrite b.
+ assumption.
Qed.
Lemma dicho_up_car :
- forall (x y:R) (P:R -> bool) (n:nat),
- P y = true -> P (dicho_up x y P n) = true.
-intros.
-induction n as [| n Hrecn].
-simpl in |- *.
-assumption.
-simpl in |- *.
-assert
- (X :=
- sumbool_of_bool (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2))).
-elim X; intro.
-rewrite a.
-unfold dicho_lb in Hrecn; assumption.
-rewrite b.
-assumption.
+ forall (x y:R) (P:R -> bool) (n:nat),
+ P y = true -> P (dicho_up x y P n) = true.
+Proof.
+ intros.
+ induction n as [| n Hrecn].
+ simpl in |- *.
+ assumption.
+ simpl in |- *.
+ assert
+ (X :=
+ sumbool_of_bool (P ((Dichotomy_lb x y P n + Dichotomy_ub x y P n) / 2))).
+ elim X; intro.
+ rewrite a.
+ unfold dicho_lb in Hrecn; assumption.
+ rewrite b.
+ assumption.
Qed.
-(* Intermediate Value Theorem *)
+(** Intermediate Value Theorem *)
Lemma IVT :
- forall (f:R -> R) (x y:R),
- continuity f ->
- x < y -> f x < 0 -> 0 < f y -> sigT (fun z:R => x <= z <= y /\ f z = 0).
-intros.
-cut (x <= y).
-intro.
-generalize (dicho_lb_cv x y (fun z:R => cond_positivity (f z)) H3).
-generalize (dicho_up_cv x y (fun z:R => cond_positivity (f z)) H3).
-intros X X0.
-elim X; intros.
-elim X0; intros.
-assert (H4 := cv_dicho _ _ _ _ _ H3 p0 p).
-rewrite H4 in p0.
-apply existT with x0.
-split.
-split.
-apply Rle_trans with (dicho_lb x y (fun z:R => cond_positivity (f z)) 0).
-simpl in |- *.
-right; reflexivity.
-apply growing_ineq.
-apply dicho_lb_growing; assumption.
-assumption.
-apply Rle_trans with (dicho_up x y (fun z:R => cond_positivity (f z)) 0).
-apply decreasing_ineq.
-apply dicho_up_decreasing; assumption.
-assumption.
-right; reflexivity.
-2: left; assumption.
-set (Vn := fun n:nat => dicho_lb x y (fun z:R => cond_positivity (f z)) n).
-set (Wn := fun n:nat => dicho_up x y (fun z:R => cond_positivity (f z)) n).
-cut ((forall n:nat, f (Vn n) <= 0) -> f x0 <= 0).
-cut ((forall n:nat, 0 <= f (Wn n)) -> 0 <= f x0).
-intros.
-cut (forall n:nat, f (Vn n) <= 0).
-cut (forall n:nat, 0 <= f (Wn n)).
-intros.
-assert (H9 := H6 H8).
-assert (H10 := H5 H7).
-apply Rle_antisym; assumption.
-intro.
-unfold Wn in |- *.
-cut (forall z:R, cond_positivity z = true <-> 0 <= z).
-intro.
-assert (H8 := dicho_up_car x y (fun z:R => cond_positivity (f z)) n).
-elim (H7 (f (dicho_up x y (fun z:R => cond_positivity (f z)) n))); intros.
-apply H9.
-apply H8.
-elim (H7 (f y)); intros.
-apply H12.
-left; assumption.
-intro.
-unfold cond_positivity in |- *.
-case (Rle_dec 0 z); intro.
-split.
-intro; assumption.
-intro; reflexivity.
-split.
-intro; elim diff_false_true; assumption.
-intro.
-elim n0; assumption.
-unfold Vn in |- *.
-cut (forall z:R, cond_positivity z = false <-> z < 0).
-intros.
-assert (H8 := dicho_lb_car x y (fun z:R => cond_positivity (f z)) n).
-left.
-elim (H7 (f (dicho_lb x y (fun z:R => cond_positivity (f z)) n))); intros.
-apply H9.
-apply H8.
-elim (H7 (f x)); intros.
-apply H12.
-assumption.
-intro.
-unfold cond_positivity in |- *.
-case (Rle_dec 0 z); intro.
-split.
-intro; elim diff_true_false; assumption.
-intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H7)).
-split.
-intro; auto with real.
-intro; reflexivity.
-cut (Un_cv Wn x0).
-intros.
-assert (H7 := continuity_seq f Wn x0 (H x0) H5).
-case (total_order_T 0 (f x0)); intro.
-elim s; intro.
-left; assumption.
-rewrite <- b; right; reflexivity.
-unfold Un_cv in H7; unfold R_dist in H7.
-cut (0 < - f x0).
-intro.
-elim (H7 (- f x0) H8); intros.
-cut (x2 >= x2)%nat; [ intro | unfold ge in |- *; apply le_n ].
-assert (H11 := H9 x2 H10).
-rewrite Rabs_right in H11.
-pattern (- f x0) at 1 in H11; rewrite <- Rplus_0_r in H11.
-unfold Rminus in H11; rewrite (Rplus_comm (f (Wn x2))) in H11.
-assert (H12 := Rplus_lt_reg_r _ _ _ H11).
-assert (H13 := H6 x2).
-elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H13 H12)).
-apply Rle_ge; left; unfold Rminus in |- *; apply Rplus_le_lt_0_compat.
-apply H6.
-exact H8.
-apply Ropp_0_gt_lt_contravar; assumption.
-unfold Wn in |- *; assumption.
-cut (Un_cv Vn x0).
-intros.
-assert (H7 := continuity_seq f Vn x0 (H x0) H5).
-case (total_order_T 0 (f x0)); intro.
-elim s; intro.
-unfold Un_cv in H7; unfold R_dist in H7.
-elim (H7 (f x0) a); intros.
-cut (x2 >= x2)%nat; [ intro | unfold ge in |- *; apply le_n ].
-assert (H10 := H8 x2 H9).
-rewrite Rabs_left in H10.
-pattern (f x0) at 2 in H10; rewrite <- Rplus_0_r in H10.
-rewrite Ropp_minus_distr' in H10.
-unfold Rminus in H10.
-assert (H11 := Rplus_lt_reg_r _ _ _ H10).
-assert (H12 := H6 x2).
-cut (0 < f (Vn x2)).
-intro.
-elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H13 H12)).
-rewrite <- (Ropp_involutive (f (Vn x2))).
-apply Ropp_0_gt_lt_contravar; assumption.
-apply Rplus_lt_reg_r with (f x0 - f (Vn x2)).
-rewrite Rplus_0_r; replace (f x0 - f (Vn x2) + (f (Vn x2) - f x0)) with 0;
- [ unfold Rminus in |- *; apply Rplus_lt_le_0_compat | ring ].
-assumption.
-apply Ropp_0_ge_le_contravar; apply Rle_ge; apply H6.
-right; rewrite <- b; reflexivity.
-left; assumption.
-unfold Vn in |- *; assumption.
+ forall (f:R -> R) (x y:R),
+ continuity f ->
+ x < y -> f x < 0 -> 0 < f y -> sigT (fun z:R => x <= z <= y /\ f z = 0).
+Proof.
+ intros.
+ cut (x <= y).
+ intro.
+ generalize (dicho_lb_cv x y (fun z:R => cond_positivity (f z)) H3).
+ generalize (dicho_up_cv x y (fun z:R => cond_positivity (f z)) H3).
+ intros X X0.
+ elim X; intros.
+ elim X0; intros.
+ assert (H4 := cv_dicho _ _ _ _ _ H3 p0 p).
+ rewrite H4 in p0.
+ apply existT with x0.
+ split.
+ split.
+ apply Rle_trans with (dicho_lb x y (fun z:R => cond_positivity (f z)) 0).
+ simpl in |- *.
+ right; reflexivity.
+ apply growing_ineq.
+ apply dicho_lb_growing; assumption.
+ assumption.
+ apply Rle_trans with (dicho_up x y (fun z:R => cond_positivity (f z)) 0).
+ apply decreasing_ineq.
+ apply dicho_up_decreasing; assumption.
+ assumption.
+ right; reflexivity.
+ 2: left; assumption.
+ set (Vn := fun n:nat => dicho_lb x y (fun z:R => cond_positivity (f z)) n).
+ set (Wn := fun n:nat => dicho_up x y (fun z:R => cond_positivity (f z)) n).
+ cut ((forall n:nat, f (Vn n) <= 0) -> f x0 <= 0).
+ cut ((forall n:nat, 0 <= f (Wn n)) -> 0 <= f x0).
+ intros.
+ cut (forall n:nat, f (Vn n) <= 0).
+ cut (forall n:nat, 0 <= f (Wn n)).
+ intros.
+ assert (H9 := H6 H8).
+ assert (H10 := H5 H7).
+ apply Rle_antisym; assumption.
+ intro.
+ unfold Wn in |- *.
+ cut (forall z:R, cond_positivity z = true <-> 0 <= z).
+ intro.
+ assert (H8 := dicho_up_car x y (fun z:R => cond_positivity (f z)) n).
+ elim (H7 (f (dicho_up x y (fun z:R => cond_positivity (f z)) n))); intros.
+ apply H9.
+ apply H8.
+ elim (H7 (f y)); intros.
+ apply H12.
+ left; assumption.
+ intro.
+ unfold cond_positivity in |- *.
+ case (Rle_dec 0 z); intro.
+ split.
+ intro; assumption.
+ intro; reflexivity.
+ split.
+ intro; elim diff_false_true; assumption.
+ intro.
+ elim n0; assumption.
+ unfold Vn in |- *.
+ cut (forall z:R, cond_positivity z = false <-> z < 0).
+ intros.
+ assert (H8 := dicho_lb_car x y (fun z:R => cond_positivity (f z)) n).
+ left.
+ elim (H7 (f (dicho_lb x y (fun z:R => cond_positivity (f z)) n))); intros.
+ apply H9.
+ apply H8.
+ elim (H7 (f x)); intros.
+ apply H12.
+ assumption.
+ intro.
+ unfold cond_positivity in |- *.
+ case (Rle_dec 0 z); intro.
+ split.
+ intro; elim diff_true_false; assumption.
+ intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H7)).
+ split.
+ intro; auto with real.
+ intro; reflexivity.
+ cut (Un_cv Wn x0).
+ intros.
+ assert (H7 := continuity_seq f Wn x0 (H x0) H5).
+ case (total_order_T 0 (f x0)); intro.
+ elim s; intro.
+ left; assumption.
+ rewrite <- b; right; reflexivity.
+ unfold Un_cv in H7; unfold R_dist in H7.
+ cut (0 < - f x0).
+ intro.
+ elim (H7 (- f x0) H8); intros.
+ cut (x2 >= x2)%nat; [ intro | unfold ge in |- *; apply le_n ].
+ assert (H11 := H9 x2 H10).
+ rewrite Rabs_right in H11.
+ pattern (- f x0) at 1 in H11; rewrite <- Rplus_0_r in H11.
+ unfold Rminus in H11; rewrite (Rplus_comm (f (Wn x2))) in H11.
+ assert (H12 := Rplus_lt_reg_r _ _ _ H11).
+ assert (H13 := H6 x2).
+ elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H13 H12)).
+ apply Rle_ge; left; unfold Rminus in |- *; apply Rplus_le_lt_0_compat.
+ apply H6.
+ exact H8.
+ apply Ropp_0_gt_lt_contravar; assumption.
+ unfold Wn in |- *; assumption.
+ cut (Un_cv Vn x0).
+ intros.
+ assert (H7 := continuity_seq f Vn x0 (H x0) H5).
+ case (total_order_T 0 (f x0)); intro.
+ elim s; intro.
+ unfold Un_cv in H7; unfold R_dist in H7.
+ elim (H7 (f x0) a); intros.
+ cut (x2 >= x2)%nat; [ intro | unfold ge in |- *; apply le_n ].
+ assert (H10 := H8 x2 H9).
+ rewrite Rabs_left in H10.
+ pattern (f x0) at 2 in H10; rewrite <- Rplus_0_r in H10.
+ rewrite Ropp_minus_distr' in H10.
+ unfold Rminus in H10.
+ assert (H11 := Rplus_lt_reg_r _ _ _ H10).
+ assert (H12 := H6 x2).
+ cut (0 < f (Vn x2)).
+ intro.
+ elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H13 H12)).
+ rewrite <- (Ropp_involutive (f (Vn x2))).
+ apply Ropp_0_gt_lt_contravar; assumption.
+ apply Rplus_lt_reg_r with (f x0 - f (Vn x2)).
+ rewrite Rplus_0_r; replace (f x0 - f (Vn x2) + (f (Vn x2) - f x0)) with 0;
+ [ unfold Rminus in |- *; apply Rplus_lt_le_0_compat | ring ].
+ assumption.
+ apply Ropp_0_ge_le_contravar; apply Rle_ge; apply H6.
+ right; rewrite <- b; reflexivity.
+ left; assumption.
+ unfold Vn in |- *; assumption.
Qed.
Lemma IVT_cor :
- forall (f:R -> R) (x y:R),
- continuity f ->
- x <= y -> f x * f y <= 0 -> sigT (fun z:R => x <= z <= y /\ f z = 0).
-intros.
-case (total_order_T 0 (f x)); intro.
-case (total_order_T 0 (f y)); intro.
-elim s; intro.
-elim s0; intro.
-cut (0 < f x * f y);
- [ intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 H2))
- | apply Rmult_lt_0_compat; assumption ].
-exists y.
-split.
-split; [ assumption | right; reflexivity ].
-symmetry in |- *; exact b.
-exists x.
-split.
-split; [ right; reflexivity | assumption ].
-symmetry in |- *; exact b.
-elim s; intro.
-cut (x < y).
-intro.
-assert (H3 := IVT (- f)%F x y (continuity_opp f H) H2).
-cut ((- f)%F x < 0).
-cut (0 < (- f)%F y).
-intros.
-elim (H3 H5 H4); intros.
-apply existT with x0.
-elim p; intros.
-split.
-assumption.
-unfold opp_fct in H7.
-rewrite <- (Ropp_involutive (f x0)).
-apply Ropp_eq_0_compat; assumption.
-unfold opp_fct in |- *; apply Ropp_0_gt_lt_contravar; assumption.
-unfold opp_fct in |- *.
-apply Rplus_lt_reg_r with (f x); rewrite Rplus_opp_r; rewrite Rplus_0_r;
- assumption.
-inversion H0.
-assumption.
-rewrite H2 in a.
-elim (Rlt_irrefl _ (Rlt_trans _ _ _ r a)).
-apply existT with x.
-split.
-split; [ right; reflexivity | assumption ].
-symmetry in |- *; assumption.
-case (total_order_T 0 (f y)); intro.
-elim s; intro.
-cut (x < y).
-intro.
-apply IVT; assumption.
-inversion H0.
-assumption.
-rewrite H2 in r.
-elim (Rlt_irrefl _ (Rlt_trans _ _ _ r a)).
-apply existT with y.
-split.
-split; [ assumption | right; reflexivity ].
-symmetry in |- *; assumption.
-cut (0 < f x * f y).
-intro.
-elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H2 H1)).
-rewrite <- Rmult_opp_opp; apply Rmult_lt_0_compat;
- apply Ropp_0_gt_lt_contravar; assumption.
+ forall (f:R -> R) (x y:R),
+ continuity f ->
+ x <= y -> f x * f y <= 0 -> sigT (fun z:R => x <= z <= y /\ f z = 0).
+Proof.
+ intros.
+ case (total_order_T 0 (f x)); intro.
+ case (total_order_T 0 (f y)); intro.
+ elim s; intro.
+ elim s0; intro.
+ cut (0 < f x * f y);
+ [ intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H1 H2))
+ | apply Rmult_lt_0_compat; assumption ].
+ exists y.
+ split.
+ split; [ assumption | right; reflexivity ].
+ symmetry in |- *; exact b.
+ exists x.
+ split.
+ split; [ right; reflexivity | assumption ].
+ symmetry in |- *; exact b.
+ elim s; intro.
+ cut (x < y).
+ intro.
+ assert (H3 := IVT (- f)%F x y (continuity_opp f H) H2).
+ cut ((- f)%F x < 0).
+ cut (0 < (- f)%F y).
+ intros.
+ elim (H3 H5 H4); intros.
+ apply existT with x0.
+ elim p; intros.
+ split.
+ assumption.
+ unfold opp_fct in H7.
+ rewrite <- (Ropp_involutive (f x0)).
+ apply Ropp_eq_0_compat; assumption.
+ unfold opp_fct in |- *; apply Ropp_0_gt_lt_contravar; assumption.
+ unfold opp_fct in |- *.
+ apply Rplus_lt_reg_r with (f x); rewrite Rplus_opp_r; rewrite Rplus_0_r;
+ assumption.
+ inversion H0.
+ assumption.
+ rewrite H2 in a.
+ elim (Rlt_irrefl _ (Rlt_trans _ _ _ r a)).
+ apply existT with x.
+ split.
+ split; [ right; reflexivity | assumption ].
+ symmetry in |- *; assumption.
+ case (total_order_T 0 (f y)); intro.
+ elim s; intro.
+ cut (x < y).
+ intro.
+ apply IVT; assumption.
+ inversion H0.
+ assumption.
+ rewrite H2 in r.
+ elim (Rlt_irrefl _ (Rlt_trans _ _ _ r a)).
+ apply existT with y.
+ split.
+ split; [ assumption | right; reflexivity ].
+ symmetry in |- *; assumption.
+ cut (0 < f x * f y).
+ intro.
+ elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H2 H1)).
+ rewrite <- Rmult_opp_opp; apply Rmult_lt_0_compat;
+ apply Ropp_0_gt_lt_contravar; assumption.
Qed.
-(* We can now define the square root function as the reciprocal transformation of the square root function *)
+(** We can now define the square root function as the reciprocal
+ transformation of the square root function *)
Lemma Rsqrt_exists :
- forall y:R, 0 <= y -> sigT (fun z:R => 0 <= z /\ y = Rsqr z).
-intros.
-set (f := fun x:R => Rsqr x - y).
-cut (f 0 <= 0).
-intro.
-cut (continuity f).
-intro.
-case (total_order_T y 1); intro.
-elim s; intro.
-cut (0 <= f 1).
-intro.
-cut (f 0 * f 1 <= 0).
-intro.
-assert (X := IVT_cor f 0 1 H1 (Rlt_le _ _ Rlt_0_1) H3).
-elim X; intros t H4.
-apply existT with t.
-elim H4; intros.
-split.
-elim H5; intros; assumption.
-unfold f in H6.
-apply Rminus_diag_uniq_sym; exact H6.
-rewrite Rmult_comm; pattern 0 at 2 in |- *; rewrite <- (Rmult_0_r (f 1)).
-apply Rmult_le_compat_l; assumption.
-unfold f in |- *.
-rewrite Rsqr_1.
-apply Rplus_le_reg_l with y.
-rewrite Rplus_0_r; rewrite Rplus_comm; unfold Rminus in |- *;
- rewrite Rplus_assoc; rewrite Rplus_opp_l; rewrite Rplus_0_r;
- left; assumption.
-apply existT with 1.
-split.
-left; apply Rlt_0_1.
-rewrite b; symmetry in |- *; apply Rsqr_1.
-cut (0 <= f y).
-intro.
-cut (f 0 * f y <= 0).
-intro.
-assert (X := IVT_cor f 0 y H1 H H3).
-elim X; intros t H4.
-apply existT with t.
-elim H4; intros.
-split.
-elim H5; intros; assumption.
-unfold f in H6.
-apply Rminus_diag_uniq_sym; exact H6.
-rewrite Rmult_comm; pattern 0 at 2 in |- *; rewrite <- (Rmult_0_r (f y)).
-apply Rmult_le_compat_l; assumption.
-unfold f in |- *.
-apply Rplus_le_reg_l with y.
-rewrite Rplus_0_r; rewrite Rplus_comm; unfold Rminus in |- *;
- rewrite Rplus_assoc; rewrite Rplus_opp_l; rewrite Rplus_0_r.
-pattern y at 1 in |- *; rewrite <- Rmult_1_r.
-unfold Rsqr in |- *; apply Rmult_le_compat_l.
-assumption.
-left; exact r.
-replace f with (Rsqr - fct_cte y)%F.
-apply continuity_minus.
-apply derivable_continuous; apply derivable_Rsqr.
-apply derivable_continuous; apply derivable_const.
-reflexivity.
-unfold f in |- *; rewrite Rsqr_0.
-unfold Rminus in |- *; rewrite Rplus_0_l.
-apply Rge_le.
-apply Ropp_0_le_ge_contravar; assumption.
+ forall y:R, 0 <= y -> sigT (fun z:R => 0 <= z /\ y = Rsqr z).
+Proof.
+ intros.
+ set (f := fun x:R => Rsqr x - y).
+ cut (f 0 <= 0).
+ intro.
+ cut (continuity f).
+ intro.
+ case (total_order_T y 1); intro.
+ elim s; intro.
+ cut (0 <= f 1).
+ intro.
+ cut (f 0 * f 1 <= 0).
+ intro.
+ assert (X := IVT_cor f 0 1 H1 (Rlt_le _ _ Rlt_0_1) H3).
+ elim X; intros t H4.
+ apply existT with t.
+ elim H4; intros.
+ split.
+ elim H5; intros; assumption.
+ unfold f in H6.
+ apply Rminus_diag_uniq_sym; exact H6.
+ rewrite Rmult_comm; pattern 0 at 2 in |- *; rewrite <- (Rmult_0_r (f 1)).
+ apply Rmult_le_compat_l; assumption.
+ unfold f in |- *.
+ rewrite Rsqr_1.
+ apply Rplus_le_reg_l with y.
+ rewrite Rplus_0_r; rewrite Rplus_comm; unfold Rminus in |- *;
+ rewrite Rplus_assoc; rewrite Rplus_opp_l; rewrite Rplus_0_r;
+ left; assumption.
+ apply existT with 1.
+ split.
+ left; apply Rlt_0_1.
+ rewrite b; symmetry in |- *; apply Rsqr_1.
+ cut (0 <= f y).
+ intro.
+ cut (f 0 * f y <= 0).
+ intro.
+ assert (X := IVT_cor f 0 y H1 H H3).
+ elim X; intros t H4.
+ apply existT with t.
+ elim H4; intros.
+ split.
+ elim H5; intros; assumption.
+ unfold f in H6.
+ apply Rminus_diag_uniq_sym; exact H6.
+ rewrite Rmult_comm; pattern 0 at 2 in |- *; rewrite <- (Rmult_0_r (f y)).
+ apply Rmult_le_compat_l; assumption.
+ unfold f in |- *.
+ apply Rplus_le_reg_l with y.
+ rewrite Rplus_0_r; rewrite Rplus_comm; unfold Rminus in |- *;
+ rewrite Rplus_assoc; rewrite Rplus_opp_l; rewrite Rplus_0_r.
+ pattern y at 1 in |- *; rewrite <- Rmult_1_r.
+ unfold Rsqr in |- *; apply Rmult_le_compat_l.
+ assumption.
+ left; exact r.
+ replace f with (Rsqr - fct_cte y)%F.
+ apply continuity_minus.
+ apply derivable_continuous; apply derivable_Rsqr.
+ apply derivable_continuous; apply derivable_const.
+ reflexivity.
+ unfold f in |- *; rewrite Rsqr_0.
+ unfold Rminus in |- *; rewrite Rplus_0_l.
+ apply Rge_le.
+ apply Ropp_0_le_ge_contravar; assumption.
Qed.
(* Definition of the square root: R+->R *)
Definition Rsqrt (y:nonnegreal) : R :=
match Rsqrt_exists (nonneg y) (cond_nonneg y) with
- | existT a b => a
+ | existT a b => a
end.
(**********)
Lemma Rsqrt_positivity : forall x:nonnegreal, 0 <= Rsqrt x.
-intro.
-assert (X := Rsqrt_exists (nonneg x) (cond_nonneg x)).
-elim X; intros.
-cut (x0 = Rsqrt x).
-intros.
-elim p; intros.
-rewrite H in H0; assumption.
-unfold Rsqrt in |- *.
-case (Rsqrt_exists x (cond_nonneg x)).
-intros.
-elim p; elim a; intros.
-apply Rsqr_inj.
-assumption.
-assumption.
-rewrite <- H0; rewrite <- H2; reflexivity.
+Proof.
+ intro.
+ assert (X := Rsqrt_exists (nonneg x) (cond_nonneg x)).
+ elim X; intros.
+ cut (x0 = Rsqrt x).
+ intros.
+ elim p; intros.
+ rewrite H in H0; assumption.
+ unfold Rsqrt in |- *.
+ case (Rsqrt_exists x (cond_nonneg x)).
+ intros.
+ elim p; elim a; intros.
+ apply Rsqr_inj.
+ assumption.
+ assumption.
+ rewrite <- H0; rewrite <- H2; reflexivity.
Qed.
(**********)
Lemma Rsqrt_Rsqrt : forall x:nonnegreal, Rsqrt x * Rsqrt x = x.
-intros.
-assert (X := Rsqrt_exists (nonneg x) (cond_nonneg x)).
-elim X; intros.
-cut (x0 = Rsqrt x).
-intros.
-rewrite <- H.
-elim p; intros.
-rewrite H1; reflexivity.
-unfold Rsqrt in |- *.
-case (Rsqrt_exists x (cond_nonneg x)).
-intros.
-elim p; elim a; intros.
-apply Rsqr_inj.
-assumption.
-assumption.
-rewrite <- H0; rewrite <- H2; reflexivity.
+Proof.
+ intros.
+ assert (X := Rsqrt_exists (nonneg x) (cond_nonneg x)).
+ elim X; intros.
+ cut (x0 = Rsqrt x).
+ intros.
+ rewrite <- H.
+ elim p; intros.
+ rewrite H1; reflexivity.
+ unfold Rsqrt in |- *.
+ case (Rsqrt_exists x (cond_nonneg x)).
+ intros.
+ elim p; elim a; intros.
+ apply Rsqr_inj.
+ assumption.
+ assumption.
+ rewrite <- H0; rewrite <- H2; reflexivity.
Qed.