summaryrefslogtreecommitdiff
path: root/theories/Reals/Rfunctions.v
diff options
context:
space:
mode:
Diffstat (limited to 'theories/Reals/Rfunctions.v')
-rw-r--r--theories/Reals/Rfunctions.v964
1 files changed, 482 insertions, 482 deletions
diff --git a/theories/Reals/Rfunctions.v b/theories/Reals/Rfunctions.v
index 0ab93229..c727623c 100644
--- a/theories/Reals/Rfunctions.v
+++ b/theories/Reals/Rfunctions.v
@@ -6,7 +6,7 @@
(* * GNU Lesser General Public License Version 2.1 *)
(************************************************************************)
-(*i $Id: Rfunctions.v 6338 2004-11-22 09:10:51Z gregoire $ i*)
+(*i $Id: Rfunctions.v 9302 2006-10-27 21:21:17Z barras $ i*)
(*i Some properties about pow and sum have been made with John Harrison i*)
(*i Some Lemmas (about pow and powerRZ) have been done by Laurent Thery i*)
@@ -15,6 +15,8 @@
(** Definition of the sum functions *)
(* *)
(********************************************************)
+Require Export LegacyArithRing. (* for ring_nat... *)
+Require Export ArithRing.
Require Import Rbase.
Require Export R_Ifp.
@@ -29,498 +31,496 @@ Open Local Scope nat_scope.
Open Local Scope R_scope.
(*******************************)
-(** Lemmas about factorial *)
+(** * Lemmas about factorial *)
(*******************************)
(*********)
Lemma INR_fact_neq_0 : forall n:nat, INR (fact n) <> 0.
Proof.
-intro; red in |- *; intro; apply (not_O_INR (fact n) (fact_neq_0 n));
- assumption.
+ intro; red in |- *; intro; apply (not_O_INR (fact n) (fact_neq_0 n));
+ assumption.
Qed.
(*********)
Lemma fact_simpl : forall n:nat, fact (S n) = (S n * fact n)%nat.
Proof.
-intro; reflexivity.
+ intro; reflexivity.
Qed.
(*********)
Lemma simpl_fact :
- forall n:nat, / INR (fact (S n)) * / / INR (fact n) = / INR (S n).
+ forall n:nat, / INR (fact (S n)) * / / INR (fact n) = / INR (S n).
Proof.
-intro; rewrite (Rinv_involutive (INR (fact n)) (INR_fact_neq_0 n));
- unfold fact at 1 in |- *; cbv beta iota in |- *; fold fact in |- *;
- rewrite (mult_INR (S n) (fact n));
- rewrite (Rinv_mult_distr (INR (S n)) (INR (fact n))).
-rewrite (Rmult_assoc (/ INR (S n)) (/ INR (fact n)) (INR (fact n)));
- rewrite (Rinv_l (INR (fact n)) (INR_fact_neq_0 n));
- apply (let (H1, H2) := Rmult_ne (/ INR (S n)) in H1).
-apply not_O_INR; auto.
-apply INR_fact_neq_0.
+ intro; rewrite (Rinv_involutive (INR (fact n)) (INR_fact_neq_0 n));
+ unfold fact at 1 in |- *; cbv beta iota in |- *; fold fact in |- *;
+ rewrite (mult_INR (S n) (fact n));
+ rewrite (Rinv_mult_distr (INR (S n)) (INR (fact n))).
+ rewrite (Rmult_assoc (/ INR (S n)) (/ INR (fact n)) (INR (fact n)));
+ rewrite (Rinv_l (INR (fact n)) (INR_fact_neq_0 n));
+ apply (let (H1, H2) := Rmult_ne (/ INR (S n)) in H1).
+ apply not_O_INR; auto.
+ apply INR_fact_neq_0.
Qed.
(*******************************)
-(* Power *)
+(** * Power *)
(*******************************)
(*********)
Boxed Fixpoint pow (r:R) (n:nat) {struct n} : R :=
match n with
- | O => 1
- | S n => r * pow r n
+ | O => 1
+ | S n => r * pow r n
end.
Infix "^" := pow : R_scope.
Lemma pow_O : forall x:R, x ^ 0 = 1.
Proof.
-reflexivity.
+ reflexivity.
Qed.
-
+
Lemma pow_1 : forall x:R, x ^ 1 = x.
Proof.
-simpl in |- *; auto with real.
+ simpl in |- *; auto with real.
Qed.
-
+
Lemma pow_add : forall (x:R) (n m:nat), x ^ (n + m) = x ^ n * x ^ m.
Proof.
-intros x n; elim n; simpl in |- *; auto with real.
-intros n0 H' m; rewrite H'; auto with real.
+ intros x n; elim n; simpl in |- *; auto with real.
+ intros n0 H' m; rewrite H'; auto with real.
Qed.
Lemma pow_nonzero : forall (x:R) (n:nat), x <> 0 -> x ^ n <> 0.
Proof.
-intro; simple induction n; simpl in |- *.
-intro; red in |- *; intro; apply R1_neq_R0; assumption.
-intros; red in |- *; intro; elim (Rmult_integral x (x ^ n0) H1).
-intro; auto.
-apply H; assumption.
+ intro; simple induction n; simpl in |- *.
+ intro; red in |- *; intro; apply R1_neq_R0; assumption.
+ intros; red in |- *; intro; elim (Rmult_integral x (x ^ n0) H1).
+ intro; auto.
+ apply H; assumption.
Qed.
Hint Resolve pow_O pow_1 pow_add pow_nonzero: real.
-
+
Lemma pow_RN_plus :
- forall (x:R) (n m:nat), x <> 0 -> x ^ n = x ^ (n + m) * / x ^ m.
+ forall (x:R) (n m:nat), x <> 0 -> x ^ n = x ^ (n + m) * / x ^ m.
Proof.
-intros x n; elim n; simpl in |- *; auto with real.
-intros n0 H' m H'0.
-rewrite Rmult_assoc; rewrite <- H'; auto.
+ intros x n; elim n; simpl in |- *; auto with real.
+ intros n0 H' m H'0.
+ rewrite Rmult_assoc; rewrite <- H'; auto.
Qed.
Lemma pow_lt : forall (x:R) (n:nat), 0 < x -> 0 < x ^ n.
Proof.
-intros x n; elim n; simpl in |- *; auto with real.
-intros n0 H' H'0; replace 0 with (x * 0); auto with real.
+ intros x n; elim n; simpl in |- *; auto with real.
+ intros n0 H' H'0; replace 0 with (x * 0); auto with real.
Qed.
Hint Resolve pow_lt: real.
Lemma Rlt_pow_R1 : forall (x:R) (n:nat), 1 < x -> (0 < n)%nat -> 1 < x ^ n.
Proof.
-intros x n; elim n; simpl in |- *; auto with real.
-intros H' H'0; elimtype False; omega.
-intros n0; case n0.
-simpl in |- *; rewrite Rmult_1_r; auto.
-intros n1 H' H'0 H'1.
-replace 1 with (1 * 1); auto with real.
-apply Rlt_trans with (r2 := x * 1); auto with real.
-apply Rmult_lt_compat_l; auto with real.
-apply Rlt_trans with (r2 := 1); auto with real.
-apply H'; auto with arith.
+ intros x n; elim n; simpl in |- *; auto with real.
+ intros H' H'0; elimtype False; omega.
+ intros n0; case n0.
+ simpl in |- *; rewrite Rmult_1_r; auto.
+ intros n1 H' H'0 H'1.
+ replace 1 with (1 * 1); auto with real.
+ apply Rlt_trans with (r2 := x * 1); auto with real.
+ apply Rmult_lt_compat_l; auto with real.
+ apply Rlt_trans with (r2 := 1); auto with real.
+ apply H'; auto with arith.
Qed.
Hint Resolve Rlt_pow_R1: real.
Lemma Rlt_pow : forall (x:R) (n m:nat), 1 < x -> (n < m)%nat -> x ^ n < x ^ m.
Proof.
-intros x n m H' H'0; replace m with (m - n + n)%nat.
-rewrite pow_add.
-pattern (x ^ n) at 1 in |- *; replace (x ^ n) with (1 * x ^ n);
- auto with real.
-apply Rminus_lt.
-repeat rewrite (fun y:R => Rmult_comm y (x ^ n));
- rewrite <- Rmult_minus_distr_l.
-replace 0 with (x ^ n * 0); auto with real.
-apply Rmult_lt_compat_l; auto with real.
-apply pow_lt; auto with real.
-apply Rlt_trans with (r2 := 1); auto with real.
-apply Rlt_minus; auto with real.
-apply Rlt_pow_R1; auto with arith.
-apply plus_lt_reg_l with (p := n); auto with arith.
-rewrite le_plus_minus_r; auto with arith; rewrite <- plus_n_O; auto.
-rewrite plus_comm; auto with arith.
+ intros x n m H' H'0; replace m with (m - n + n)%nat.
+ rewrite pow_add.
+ pattern (x ^ n) at 1 in |- *; replace (x ^ n) with (1 * x ^ n);
+ auto with real.
+ apply Rminus_lt.
+ repeat rewrite (fun y:R => Rmult_comm y (x ^ n));
+ rewrite <- Rmult_minus_distr_l.
+ replace 0 with (x ^ n * 0); auto with real.
+ apply Rmult_lt_compat_l; auto with real.
+ apply pow_lt; auto with real.
+ apply Rlt_trans with (r2 := 1); auto with real.
+ apply Rlt_minus; auto with real.
+ apply Rlt_pow_R1; auto with arith.
+ apply plus_lt_reg_l with (p := n); auto with arith.
+ rewrite le_plus_minus_r; auto with arith; rewrite <- plus_n_O; auto.
+ rewrite plus_comm; auto with arith.
Qed.
Hint Resolve Rlt_pow: real.
(*********)
Lemma tech_pow_Rmult : forall (x:R) (n:nat), x * x ^ n = x ^ S n.
Proof.
-simple induction n; simpl in |- *; trivial.
+ simple induction n; simpl in |- *; trivial.
Qed.
(*********)
Lemma tech_pow_Rplus :
- forall (x:R) (a n:nat), x ^ a + INR n * x ^ a = INR (S n) * x ^ a.
+ forall (x:R) (a n:nat), x ^ a + INR n * x ^ a = INR (S n) * x ^ a.
Proof.
-intros; pattern (x ^ a) at 1 in |- *;
- rewrite <- (let (H1, H2) := Rmult_ne (x ^ a) in H1);
- rewrite (Rmult_comm (INR n) (x ^ a));
- rewrite <- (Rmult_plus_distr_l (x ^ a) 1 (INR n));
- rewrite (Rplus_comm 1 (INR n)); rewrite <- (S_INR n);
- apply Rmult_comm.
+ intros; pattern (x ^ a) at 1 in |- *;
+ rewrite <- (let (H1, H2) := Rmult_ne (x ^ a) in H1);
+ rewrite (Rmult_comm (INR n) (x ^ a));
+ rewrite <- (Rmult_plus_distr_l (x ^ a) 1 (INR n));
+ rewrite (Rplus_comm 1 (INR n)); rewrite <- (S_INR n);
+ apply Rmult_comm.
Qed.
Lemma poly : forall (n:nat) (x:R), 0 < x -> 1 + INR n * x <= (1 + x) ^ n.
Proof.
-intros; elim n.
-simpl in |- *; cut (1 + 0 * x = 1).
-intro; rewrite H0; unfold Rle in |- *; right; reflexivity.
-ring.
-intros; unfold pow in |- *; fold pow in |- *;
- apply
- (Rle_trans (1 + INR (S n0) * x) ((1 + x) * (1 + INR n0 * x))
- ((1 + x) * (1 + x) ^ n0)).
-cut ((1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)).
-intro; rewrite H1; pattern (1 + INR (S n0) * x) at 1 in |- *;
- rewrite <- (let (H1, H2) := Rplus_ne (1 + INR (S n0) * x) in H1);
- apply Rplus_le_compat_l; elim n0; intros.
-simpl in |- *; rewrite Rmult_0_l; unfold Rle in |- *; right; auto.
-unfold Rle in |- *; left; generalize Rmult_gt_0_compat; unfold Rgt in |- *;
- intro; fold (Rsqr x) in |- *;
- apply (H3 (INR (S n1)) (Rsqr x) (lt_INR_0 (S n1) (lt_O_Sn n1)));
- fold (x > 0) in H;
- apply (Rlt_0_sqr x (Rlt_dichotomy_converse x 0 (or_intror (x < 0) H))).
-rewrite (S_INR n0); ring.
-unfold Rle in H0; elim H0; intro.
-unfold Rle in |- *; left; apply Rmult_lt_compat_l.
-rewrite Rplus_comm; apply (Rle_lt_0_plus_1 x (Rlt_le 0 x H)).
-assumption.
-rewrite H1; unfold Rle in |- *; right; trivial.
+ intros; elim n.
+ simpl in |- *; cut (1 + 0 * x = 1).
+ intro; rewrite H0; unfold Rle in |- *; right; reflexivity.
+ ring.
+ intros; unfold pow in |- *; fold pow in |- *;
+ apply
+ (Rle_trans (1 + INR (S n0) * x) ((1 + x) * (1 + INR n0 * x))
+ ((1 + x) * (1 + x) ^ n0)).
+ cut ((1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)).
+ intro; rewrite H1; pattern (1 + INR (S n0) * x) at 1 in |- *;
+ rewrite <- (let (H1, H2) := Rplus_ne (1 + INR (S n0) * x) in H1);
+ apply Rplus_le_compat_l; elim n0; intros.
+ simpl in |- *; rewrite Rmult_0_l; unfold Rle in |- *; right; auto.
+ unfold Rle in |- *; left; generalize Rmult_gt_0_compat; unfold Rgt in |- *;
+ intro; fold (Rsqr x) in |- *;
+ apply (H3 (INR (S n1)) (Rsqr x) (lt_INR_0 (S n1) (lt_O_Sn n1)));
+ fold (x > 0) in H;
+ apply (Rlt_0_sqr x (Rlt_dichotomy_converse x 0 (or_intror (x < 0) H))).
+ rewrite (S_INR n0); ring.
+ unfold Rle in H0; elim H0; intro.
+ unfold Rle in |- *; left; apply Rmult_lt_compat_l.
+ rewrite Rplus_comm; apply (Rle_lt_0_plus_1 x (Rlt_le 0 x H)).
+ assumption.
+ rewrite H1; unfold Rle in |- *; right; trivial.
Qed.
Lemma Power_monotonic :
- forall (x:R) (m n:nat),
- Rabs x > 1 -> (m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n).
-Proof.
-intros x m n H; induction n as [| n Hrecn]; intros; inversion H0.
-unfold Rle in |- *; right; reflexivity.
-unfold Rle in |- *; right; reflexivity.
-apply (Rle_trans (Rabs (x ^ m)) (Rabs (x ^ n)) (Rabs (x ^ S n))).
-apply Hrecn; assumption.
-simpl in |- *; rewrite Rabs_mult.
-pattern (Rabs (x ^ n)) at 1 in |- *.
-rewrite <- Rmult_1_r.
-rewrite (Rmult_comm (Rabs x) (Rabs (x ^ n))).
-apply Rmult_le_compat_l.
-apply Rabs_pos.
-unfold Rgt in H.
-apply Rlt_le; assumption.
+ forall (x:R) (m n:nat),
+ Rabs x > 1 -> (m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n).
+Proof.
+ intros x m n H; induction n as [| n Hrecn]; intros; inversion H0.
+ unfold Rle in |- *; right; reflexivity.
+ unfold Rle in |- *; right; reflexivity.
+ apply (Rle_trans (Rabs (x ^ m)) (Rabs (x ^ n)) (Rabs (x ^ S n))).
+ apply Hrecn; assumption.
+ simpl in |- *; rewrite Rabs_mult.
+ pattern (Rabs (x ^ n)) at 1 in |- *.
+ rewrite <- Rmult_1_r.
+ rewrite (Rmult_comm (Rabs x) (Rabs (x ^ n))).
+ apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ unfold Rgt in H.
+ apply Rlt_le; assumption.
Qed.
Lemma RPow_abs : forall (x:R) (n:nat), Rabs x ^ n = Rabs (x ^ n).
Proof.
-intro; simple induction n; simpl in |- *.
-apply sym_eq; apply Rabs_pos_eq; apply Rlt_le; apply Rlt_0_1.
-intros; rewrite H; apply sym_eq; apply Rabs_mult.
+ intro; simple induction n; simpl in |- *.
+ apply sym_eq; apply Rabs_pos_eq; apply Rlt_le; apply Rlt_0_1.
+ intros; rewrite H; apply sym_eq; apply Rabs_mult.
Qed.
Lemma Pow_x_infinity :
- forall x:R,
- Rabs x > 1 ->
- forall b:R,
+ forall x:R,
+ Rabs x > 1 ->
+ forall b:R,
exists N : nat, (forall n:nat, (n >= N)%nat -> Rabs (x ^ n) >= b).
Proof.
-intros; elim (archimed (b * / (Rabs x - 1))); intros; clear H1;
- cut (exists N : nat, INR N >= b * / (Rabs x - 1)).
-intro; elim H1; clear H1; intros; exists x0; intros;
- apply (Rge_trans (Rabs (x ^ n)) (Rabs (x ^ x0)) b).
-apply Rle_ge; apply Power_monotonic; assumption.
-rewrite <- RPow_abs; cut (Rabs x = 1 + (Rabs x - 1)).
-intro; rewrite H3;
- apply (Rge_trans ((1 + (Rabs x - 1)) ^ x0) (1 + INR x0 * (Rabs x - 1)) b).
-apply Rle_ge; apply poly; fold (Rabs x - 1 > 0) in |- *; apply Rgt_minus;
- assumption.
-apply (Rge_trans (1 + INR x0 * (Rabs x - 1)) (INR x0 * (Rabs x - 1)) b).
-apply Rle_ge; apply Rlt_le; rewrite (Rplus_comm 1 (INR x0 * (Rabs x - 1)));
- pattern (INR x0 * (Rabs x - 1)) at 1 in |- *;
- rewrite <- (let (H1, H2) := Rplus_ne (INR x0 * (Rabs x - 1)) in H1);
- apply Rplus_lt_compat_l; apply Rlt_0_1.
-cut (b = b * / (Rabs x - 1) * (Rabs x - 1)).
-intros; rewrite H4; apply Rmult_ge_compat_r.
-apply Rge_minus; unfold Rge in |- *; left; assumption.
-assumption.
-rewrite Rmult_assoc; rewrite Rinv_l.
-ring.
-apply Rlt_dichotomy_converse; right; apply Rgt_minus; assumption.
-ring.
-cut ((0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z).
-intros; elim H1; intro.
-elim (IZN (up (b * / (Rabs x - 1))) H2); intros; exists x0;
- apply
- (Rge_trans (INR x0) (IZR (up (b * / (Rabs x - 1)))) (b * / (Rabs x - 1))).
-rewrite INR_IZR_INZ; apply IZR_ge; omega.
-unfold Rge in |- *; left; assumption.
-exists 0%nat;
- apply
- (Rge_trans (INR 0) (IZR (up (b * / (Rabs x - 1)))) (b * / (Rabs x - 1))).
-rewrite INR_IZR_INZ; apply IZR_ge; simpl in |- *; omega.
-unfold Rge in |- *; left; assumption.
-omega.
+ intros; elim (archimed (b * / (Rabs x - 1))); intros; clear H1;
+ cut (exists N : nat, INR N >= b * / (Rabs x - 1)).
+ intro; elim H1; clear H1; intros; exists x0; intros;
+ apply (Rge_trans (Rabs (x ^ n)) (Rabs (x ^ x0)) b).
+ apply Rle_ge; apply Power_monotonic; assumption.
+ rewrite <- RPow_abs; cut (Rabs x = 1 + (Rabs x - 1)).
+ intro; rewrite H3;
+ apply (Rge_trans ((1 + (Rabs x - 1)) ^ x0) (1 + INR x0 * (Rabs x - 1)) b).
+ apply Rle_ge; apply poly; fold (Rabs x - 1 > 0) in |- *; apply Rgt_minus;
+ assumption.
+ apply (Rge_trans (1 + INR x0 * (Rabs x - 1)) (INR x0 * (Rabs x - 1)) b).
+ apply Rle_ge; apply Rlt_le; rewrite (Rplus_comm 1 (INR x0 * (Rabs x - 1)));
+ pattern (INR x0 * (Rabs x - 1)) at 1 in |- *;
+ rewrite <- (let (H1, H2) := Rplus_ne (INR x0 * (Rabs x - 1)) in H1);
+ apply Rplus_lt_compat_l; apply Rlt_0_1.
+ cut (b = b * / (Rabs x - 1) * (Rabs x - 1)).
+ intros; rewrite H4; apply Rmult_ge_compat_r.
+ apply Rge_minus; unfold Rge in |- *; left; assumption.
+ assumption.
+ rewrite Rmult_assoc; rewrite Rinv_l.
+ ring.
+ apply Rlt_dichotomy_converse; right; apply Rgt_minus; assumption.
+ ring.
+ cut ((0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z).
+ intros; elim H1; intro.
+ elim (IZN (up (b * / (Rabs x - 1))) H2); intros; exists x0;
+ apply
+ (Rge_trans (INR x0) (IZR (up (b * / (Rabs x - 1)))) (b * / (Rabs x - 1))).
+ rewrite INR_IZR_INZ; apply IZR_ge; omega.
+ unfold Rge in |- *; left; assumption.
+ exists 0%nat;
+ apply
+ (Rge_trans (INR 0) (IZR (up (b * / (Rabs x - 1)))) (b * / (Rabs x - 1))).
+ rewrite INR_IZR_INZ; apply IZR_ge; simpl in |- *; omega.
+ unfold Rge in |- *; left; assumption.
+ omega.
Qed.
Lemma pow_ne_zero : forall n:nat, n <> 0%nat -> 0 ^ n = 0.
Proof.
-simple induction n.
-simpl in |- *; auto.
-intros; elim H; reflexivity.
-intros; simpl in |- *; apply Rmult_0_l.
+ simple induction n.
+ simpl in |- *; auto.
+ intros; elim H; reflexivity.
+ intros; simpl in |- *; apply Rmult_0_l.
Qed.
Lemma Rinv_pow : forall (x:R) (n:nat), x <> 0 -> / x ^ n = (/ x) ^ n.
Proof.
-intros; elim n; simpl in |- *.
-apply Rinv_1.
-intro m; intro; rewrite Rinv_mult_distr.
-rewrite H0; reflexivity; assumption.
-assumption.
-apply pow_nonzero; assumption.
+ intros; elim n; simpl in |- *.
+ apply Rinv_1.
+ intro m; intro; rewrite Rinv_mult_distr.
+ rewrite H0; reflexivity; assumption.
+ assumption.
+ apply pow_nonzero; assumption.
Qed.
Lemma pow_lt_1_zero :
- forall x:R,
- Rabs x < 1 ->
- forall y:R,
- 0 < y ->
+ forall x:R,
+ Rabs x < 1 ->
+ forall y:R,
+ 0 < y ->
exists N : nat, (forall n:nat, (n >= N)%nat -> Rabs (x ^ n) < y).
Proof.
-intros; elim (Req_dec x 0); intro.
-exists 1%nat; rewrite H1; intros n GE; rewrite pow_ne_zero.
-rewrite Rabs_R0; assumption.
-inversion GE; auto.
-cut (Rabs (/ x) > 1).
-intros; elim (Pow_x_infinity (/ x) H2 (/ y + 1)); intros N.
-exists N; intros; rewrite <- (Rinv_involutive y).
-rewrite <- (Rinv_involutive (Rabs (x ^ n))).
-apply Rinv_lt_contravar.
-apply Rmult_lt_0_compat.
-apply Rinv_0_lt_compat.
-assumption.
-apply Rinv_0_lt_compat.
-apply Rabs_pos_lt.
-apply pow_nonzero.
-assumption.
-rewrite <- Rabs_Rinv.
-rewrite Rinv_pow.
-apply (Rlt_le_trans (/ y) (/ y + 1) (Rabs ((/ x) ^ n))).
-pattern (/ y) at 1 in |- *.
-rewrite <- (let (H1, H2) := Rplus_ne (/ y) in H1).
-apply Rplus_lt_compat_l.
-apply Rlt_0_1.
-apply Rge_le.
-apply H3.
-assumption.
-assumption.
-apply pow_nonzero.
-assumption.
-apply Rabs_no_R0.
-apply pow_nonzero.
-assumption.
-apply Rlt_dichotomy_converse.
-right; unfold Rgt in |- *; assumption.
-rewrite <- (Rinv_involutive 1).
-rewrite Rabs_Rinv.
-unfold Rgt in |- *; apply Rinv_lt_contravar.
-apply Rmult_lt_0_compat.
-apply Rabs_pos_lt.
-assumption.
-rewrite Rinv_1; apply Rlt_0_1.
-rewrite Rinv_1; assumption.
-assumption.
-red in |- *; intro; apply R1_neq_R0; assumption.
+ intros; elim (Req_dec x 0); intro.
+ exists 1%nat; rewrite H1; intros n GE; rewrite pow_ne_zero.
+ rewrite Rabs_R0; assumption.
+ inversion GE; auto.
+ cut (Rabs (/ x) > 1).
+ intros; elim (Pow_x_infinity (/ x) H2 (/ y + 1)); intros N.
+ exists N; intros; rewrite <- (Rinv_involutive y).
+ rewrite <- (Rinv_involutive (Rabs (x ^ n))).
+ apply Rinv_lt_contravar.
+ apply Rmult_lt_0_compat.
+ apply Rinv_0_lt_compat.
+ assumption.
+ apply Rinv_0_lt_compat.
+ apply Rabs_pos_lt.
+ apply pow_nonzero.
+ assumption.
+ rewrite <- Rabs_Rinv.
+ rewrite Rinv_pow.
+ apply (Rlt_le_trans (/ y) (/ y + 1) (Rabs ((/ x) ^ n))).
+ pattern (/ y) at 1 in |- *.
+ rewrite <- (let (H1, H2) := Rplus_ne (/ y) in H1).
+ apply Rplus_lt_compat_l.
+ apply Rlt_0_1.
+ apply Rge_le.
+ apply H3.
+ assumption.
+ assumption.
+ apply pow_nonzero.
+ assumption.
+ apply Rabs_no_R0.
+ apply pow_nonzero.
+ assumption.
+ apply Rlt_dichotomy_converse.
+ right; unfold Rgt in |- *; assumption.
+ rewrite <- (Rinv_involutive 1).
+ rewrite Rabs_Rinv.
+ unfold Rgt in |- *; apply Rinv_lt_contravar.
+ apply Rmult_lt_0_compat.
+ apply Rabs_pos_lt.
+ assumption.
+ rewrite Rinv_1; apply Rlt_0_1.
+ rewrite Rinv_1; assumption.
+ assumption.
+ red in |- *; intro; apply R1_neq_R0; assumption.
Qed.
Lemma pow_R1 : forall (r:R) (n:nat), r ^ n = 1 -> Rabs r = 1 \/ n = 0%nat.
Proof.
-intros r n H'.
-case (Req_dec (Rabs r) 1); auto; intros H'1.
-case (Rdichotomy _ _ H'1); intros H'2.
-generalize H'; case n; auto.
-intros n0 H'0.
-cut (r <> 0); [ intros Eq1 | idtac ].
-cut (Rabs r <> 0); [ intros Eq2 | apply Rabs_no_R0 ]; auto.
-absurd (Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0); auto.
-replace (Rabs (/ r) ^ S n0) with 1.
-simpl in |- *; apply Rlt_irrefl; auto.
-rewrite Rabs_Rinv; auto.
-rewrite <- Rinv_pow; auto.
-rewrite RPow_abs; auto.
-rewrite H'0; rewrite Rabs_right; auto with real.
-apply Rle_ge; auto with real.
-apply Rlt_pow; auto with arith.
-rewrite Rabs_Rinv; auto.
-apply Rmult_lt_reg_l with (r := Rabs r).
-case (Rabs_pos r); auto.
-intros H'3; case Eq2; auto.
-rewrite Rmult_1_r; rewrite Rinv_r; auto with real.
-red in |- *; intro; absurd (r ^ S n0 = 1); auto.
-simpl in |- *; rewrite H; rewrite Rmult_0_l; auto with real.
-generalize H'; case n; auto.
-intros n0 H'0.
-cut (r <> 0); [ intros Eq1 | auto with real ].
-cut (Rabs r <> 0); [ intros Eq2 | apply Rabs_no_R0 ]; auto.
-absurd (Rabs r ^ 0 < Rabs r ^ S n0); auto with real arith.
-repeat rewrite RPow_abs; rewrite H'0; simpl in |- *; auto with real.
-red in |- *; intro; absurd (r ^ S n0 = 1); auto.
-simpl in |- *; rewrite H; rewrite Rmult_0_l; auto with real.
+ intros r n H'.
+ case (Req_dec (Rabs r) 1); auto; intros H'1.
+ case (Rdichotomy _ _ H'1); intros H'2.
+ generalize H'; case n; auto.
+ intros n0 H'0.
+ cut (r <> 0); [ intros Eq1 | idtac ].
+ cut (Rabs r <> 0); [ intros Eq2 | apply Rabs_no_R0 ]; auto.
+ absurd (Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0); auto.
+ replace (Rabs (/ r) ^ S n0) with 1.
+ simpl in |- *; apply Rlt_irrefl; auto.
+ rewrite Rabs_Rinv; auto.
+ rewrite <- Rinv_pow; auto.
+ rewrite RPow_abs; auto.
+ rewrite H'0; rewrite Rabs_right; auto with real.
+ apply Rle_ge; auto with real.
+ apply Rlt_pow; auto with arith.
+ rewrite Rabs_Rinv; auto.
+ apply Rmult_lt_reg_l with (r := Rabs r).
+ case (Rabs_pos r); auto.
+ intros H'3; case Eq2; auto.
+ rewrite Rmult_1_r; rewrite Rinv_r; auto with real.
+ red in |- *; intro; absurd (r ^ S n0 = 1); auto.
+ simpl in |- *; rewrite H; rewrite Rmult_0_l; auto with real.
+ generalize H'; case n; auto.
+ intros n0 H'0.
+ cut (r <> 0); [ intros Eq1 | auto with real ].
+ cut (Rabs r <> 0); [ intros Eq2 | apply Rabs_no_R0 ]; auto.
+ absurd (Rabs r ^ 0 < Rabs r ^ S n0); auto with real arith.
+ repeat rewrite RPow_abs; rewrite H'0; simpl in |- *; auto with real.
+ red in |- *; intro; absurd (r ^ S n0 = 1); auto.
+ simpl in |- *; rewrite H; rewrite Rmult_0_l; auto with real.
Qed.
Lemma pow_Rsqr : forall (x:R) (n:nat), x ^ (2 * n) = Rsqr x ^ n.
Proof.
-intros; induction n as [| n Hrecn].
-reflexivity.
-replace (2 * S n)%nat with (S (S (2 * n))).
-replace (x ^ S (S (2 * n))) with (x * x * x ^ (2 * n)).
-rewrite Hrecn; reflexivity.
-simpl in |- *; ring.
-apply INR_eq; do 2 rewrite S_INR; do 2 rewrite mult_INR; repeat rewrite S_INR;
- ring.
+ intros; induction n as [| n Hrecn].
+ reflexivity.
+ replace (2 * S n)%nat with (S (S (2 * n))).
+ replace (x ^ S (S (2 * n))) with (x * x * x ^ (2 * n)).
+ rewrite Hrecn; reflexivity.
+ simpl in |- *; ring.
+ ring_nat.
Qed.
Lemma pow_le : forall (a:R) (n:nat), 0 <= a -> 0 <= a ^ n.
Proof.
-intros; induction n as [| n Hrecn].
-simpl in |- *; left; apply Rlt_0_1.
-simpl in |- *; apply Rmult_le_pos; assumption.
+ intros; induction n as [| n Hrecn].
+ simpl in |- *; left; apply Rlt_0_1.
+ simpl in |- *; apply Rmult_le_pos; assumption.
Qed.
(**********)
Lemma pow_1_even : forall n:nat, (-1) ^ (2 * n) = 1.
Proof.
-intro; induction n as [| n Hrecn].
-reflexivity.
-replace (2 * S n)%nat with (2 + 2 * n)%nat.
-rewrite pow_add; rewrite Hrecn; simpl in |- *; ring.
-replace (S n) with (n + 1)%nat; [ ring | ring ].
+ intro; induction n as [| n Hrecn].
+ reflexivity.
+ replace (2 * S n)%nat with (2 + 2 * n)%nat by ring.
+ rewrite pow_add; rewrite Hrecn; simpl in |- *; ring.
Qed.
(**********)
Lemma pow_1_odd : forall n:nat, (-1) ^ S (2 * n) = -1.
Proof.
-intro; replace (S (2 * n)) with (2 * n + 1)%nat; [ idtac | ring ].
-rewrite pow_add; rewrite pow_1_even; simpl in |- *; ring.
+ intro; replace (S (2 * n)) with (2 * n + 1)%nat by ring.
+ rewrite pow_add; rewrite pow_1_even; simpl in |- *; ring.
Qed.
(**********)
Lemma pow_1_abs : forall n:nat, Rabs ((-1) ^ n) = 1.
Proof.
-intro; induction n as [| n Hrecn].
-simpl in |- *; apply Rabs_R1.
-replace (S n) with (n + 1)%nat; [ rewrite pow_add | ring ].
-rewrite Rabs_mult.
-rewrite Hrecn; rewrite Rmult_1_l; simpl in |- *; rewrite Rmult_1_r;
- rewrite Rabs_Ropp; apply Rabs_R1.
+ intro; induction n as [| n Hrecn].
+ simpl in |- *; apply Rabs_R1.
+ replace (S n) with (n + 1)%nat; [ rewrite pow_add | ring ].
+ rewrite Rabs_mult.
+ rewrite Hrecn; rewrite Rmult_1_l; simpl in |- *; rewrite Rmult_1_r;
+ rewrite Rabs_Ropp; apply Rabs_R1.
Qed.
Lemma pow_mult : forall (x:R) (n1 n2:nat), x ^ (n1 * n2) = (x ^ n1) ^ n2.
Proof.
-intros; induction n2 as [| n2 Hrecn2].
-simpl in |- *; replace (n1 * 0)%nat with 0%nat; [ reflexivity | ring ].
-replace (n1 * S n2)%nat with (n1 * n2 + n1)%nat.
-replace (S n2) with (n2 + 1)%nat; [ idtac | ring ].
-do 2 rewrite pow_add.
-rewrite Hrecn2.
-simpl in |- *.
-ring.
-apply INR_eq; rewrite plus_INR; do 2 rewrite mult_INR; rewrite S_INR; ring.
+ intros; induction n2 as [| n2 Hrecn2].
+ simpl in |- *; replace (n1 * 0)%nat with 0%nat; [ reflexivity | ring ].
+ replace (n1 * S n2)%nat with (n1 * n2 + n1)%nat.
+ replace (S n2) with (n2 + 1)%nat by ring.
+ do 2 rewrite pow_add.
+ rewrite Hrecn2.
+ simpl in |- *.
+ ring.
+ ring_nat.
Qed.
Lemma pow_incr : forall (x y:R) (n:nat), 0 <= x <= y -> x ^ n <= y ^ n.
Proof.
-intros.
-induction n as [| n Hrecn].
-right; reflexivity.
-simpl in |- *.
-elim H; intros.
-apply Rle_trans with (y * x ^ n).
-do 2 rewrite <- (Rmult_comm (x ^ n)).
-apply Rmult_le_compat_l.
-apply pow_le; assumption.
-assumption.
-apply Rmult_le_compat_l.
-apply Rle_trans with x; assumption.
-apply Hrecn.
+ intros.
+ induction n as [| n Hrecn].
+ right; reflexivity.
+ simpl in |- *.
+ elim H; intros.
+ apply Rle_trans with (y * x ^ n).
+ do 2 rewrite <- (Rmult_comm (x ^ n)).
+ apply Rmult_le_compat_l.
+ apply pow_le; assumption.
+ assumption.
+ apply Rmult_le_compat_l.
+ apply Rle_trans with x; assumption.
+ apply Hrecn.
Qed.
Lemma pow_R1_Rle : forall (x:R) (k:nat), 1 <= x -> 1 <= x ^ k.
Proof.
-intros.
-induction k as [| k Hreck].
-right; reflexivity.
-simpl in |- *.
-apply Rle_trans with (x * 1).
-rewrite Rmult_1_r; assumption.
-apply Rmult_le_compat_l.
-left; apply Rlt_le_trans with 1; [ apply Rlt_0_1 | assumption ].
-exact Hreck.
+ intros.
+ induction k as [| k Hreck].
+ right; reflexivity.
+ simpl in |- *.
+ apply Rle_trans with (x * 1).
+ rewrite Rmult_1_r; assumption.
+ apply Rmult_le_compat_l.
+ left; apply Rlt_le_trans with 1; [ apply Rlt_0_1 | assumption ].
+ exact Hreck.
Qed.
Lemma Rle_pow :
- forall (x:R) (m n:nat), 1 <= x -> (m <= n)%nat -> x ^ m <= x ^ n.
+ forall (x:R) (m n:nat), 1 <= x -> (m <= n)%nat -> x ^ m <= x ^ n.
Proof.
-intros.
-replace n with (n - m + m)%nat.
-rewrite pow_add.
-rewrite Rmult_comm.
-pattern (x ^ m) at 1 in |- *; rewrite <- Rmult_1_r.
-apply Rmult_le_compat_l.
-apply pow_le; left; apply Rlt_le_trans with 1; [ apply Rlt_0_1 | assumption ].
-apply pow_R1_Rle; assumption.
-rewrite plus_comm.
-symmetry in |- *; apply le_plus_minus; assumption.
+ intros.
+ replace n with (n - m + m)%nat.
+ rewrite pow_add.
+ rewrite Rmult_comm.
+ pattern (x ^ m) at 1 in |- *; rewrite <- Rmult_1_r.
+ apply Rmult_le_compat_l.
+ apply pow_le; left; apply Rlt_le_trans with 1; [ apply Rlt_0_1 | assumption ].
+ apply pow_R1_Rle; assumption.
+ rewrite plus_comm.
+ symmetry in |- *; apply le_plus_minus; assumption.
Qed.
Lemma pow1 : forall n:nat, 1 ^ n = 1.
Proof.
-intro; induction n as [| n Hrecn].
-reflexivity.
-simpl in |- *; rewrite Hrecn; rewrite Rmult_1_r; reflexivity.
+ intro; induction n as [| n Hrecn].
+ reflexivity.
+ simpl in |- *; rewrite Hrecn; rewrite Rmult_1_r; reflexivity.
Qed.
Lemma pow_Rabs : forall (x:R) (n:nat), x ^ n <= Rabs x ^ n.
Proof.
-intros; induction n as [| n Hrecn].
-right; reflexivity.
-simpl in |- *; case (Rcase_abs x); intro.
-apply Rle_trans with (Rabs (x * x ^ n)).
-apply RRle_abs.
-rewrite Rabs_mult.
-apply Rmult_le_compat_l.
-apply Rabs_pos.
-right; symmetry in |- *; apply RPow_abs.
-pattern (Rabs x) at 1 in |- *; rewrite (Rabs_right x r);
- apply Rmult_le_compat_l.
-apply Rge_le; exact r.
-apply Hrecn.
+ intros; induction n as [| n Hrecn].
+ right; reflexivity.
+ simpl in |- *; case (Rcase_abs x); intro.
+ apply Rle_trans with (Rabs (x * x ^ n)).
+ apply RRle_abs.
+ rewrite Rabs_mult.
+ apply Rmult_le_compat_l.
+ apply Rabs_pos.
+ right; symmetry in |- *; apply RPow_abs.
+ pattern (Rabs x) at 1 in |- *; rewrite (Rabs_right x r);
+ apply Rmult_le_compat_l.
+ apply Rge_le; exact r.
+ apply Hrecn.
Qed.
Lemma pow_maj_Rabs : forall (x y:R) (n:nat), Rabs y <= x -> y ^ n <= x ^ n.
Proof.
-intros; cut (0 <= x).
-intro; apply Rle_trans with (Rabs y ^ n).
-apply pow_Rabs.
-induction n as [| n Hrecn].
-right; reflexivity.
-simpl in |- *; apply Rle_trans with (x * Rabs y ^ n).
-do 2 rewrite <- (Rmult_comm (Rabs y ^ n)).
-apply Rmult_le_compat_l.
-apply pow_le; apply Rabs_pos.
-assumption.
-apply Rmult_le_compat_l.
-apply H0.
-apply Hrecn.
-apply Rle_trans with (Rabs y); [ apply Rabs_pos | exact H ].
+ intros; cut (0 <= x).
+ intro; apply Rle_trans with (Rabs y ^ n).
+ apply pow_Rabs.
+ induction n as [| n Hrecn].
+ right; reflexivity.
+ simpl in |- *; apply Rle_trans with (x * Rabs y ^ n).
+ do 2 rewrite <- (Rmult_comm (Rabs y ^ n)).
+ apply Rmult_le_compat_l.
+ apply pow_le; apply Rabs_pos.
+ assumption.
+ apply Rmult_le_compat_l.
+ apply H0.
+ apply Hrecn.
+ apply Rle_trans with (Rabs y); [ apply Rabs_pos | exact H ].
Qed.
(*******************************)
-(** PowerRZ *)
+(** * PowerRZ *)
(*******************************)
(*i Due to L.Thery i*)
@@ -529,151 +529,151 @@ Ltac case_eq name :=
Definition powerRZ (x:R) (n:Z) :=
match n with
- | Z0 => 1
- | Zpos p => x ^ nat_of_P p
- | Zneg p => / x ^ nat_of_P p
+ | Z0 => 1
+ | Zpos p => x ^ nat_of_P p
+ | Zneg p => / x ^ nat_of_P p
end.
Infix Local "^Z" := powerRZ (at level 30, right associativity) : R_scope.
Lemma Zpower_NR0 :
- forall (x:Z) (n:nat), (0 <= x)%Z -> (0 <= Zpower_nat x n)%Z.
+ forall (x:Z) (n:nat), (0 <= x)%Z -> (0 <= Zpower_nat x n)%Z.
Proof.
-induction n; unfold Zpower_nat in |- *; simpl in |- *; auto with zarith.
+ induction n; unfold Zpower_nat in |- *; simpl in |- *; auto with zarith.
Qed.
Lemma powerRZ_O : forall x:R, x ^Z 0 = 1.
Proof.
-reflexivity.
+ reflexivity.
Qed.
-
+
Lemma powerRZ_1 : forall x:R, x ^Z Zsucc 0 = x.
Proof.
-simpl in |- *; auto with real.
+ simpl in |- *; auto with real.
Qed.
-
+
Lemma powerRZ_NOR : forall (x:R) (z:Z), x <> 0 -> x ^Z z <> 0.
Proof.
-destruct z; simpl in |- *; auto with real.
+ destruct z; simpl in |- *; auto with real.
Qed.
-
+
Lemma powerRZ_add :
- forall (x:R) (n m:Z), x <> 0 -> x ^Z (n + m) = x ^Z n * x ^Z m.
+ forall (x:R) (n m:Z), x <> 0 -> x ^Z (n + m) = x ^Z n * x ^Z m.
Proof.
-intro x; destruct n as [| n1| n1]; destruct m as [| m1| m1]; simpl in |- *;
- auto with real.
+ intro x; destruct n as [| n1| n1]; destruct m as [| m1| m1]; simpl in |- *;
+ auto with real.
(* POS/POS *)
-rewrite nat_of_P_plus_morphism; auto with real.
+ rewrite nat_of_P_plus_morphism; auto with real.
(* POS/NEG *)
-case_eq ((n1 ?= m1)%positive Datatypes.Eq); simpl in |- *; auto with real.
-intros H' H'0; rewrite Pcompare_Eq_eq with (1 := H'); auto with real.
-intros H' H'0; rewrite (nat_of_P_minus_morphism m1 n1); auto with real.
-rewrite (pow_RN_plus x (nat_of_P m1 - nat_of_P n1) (nat_of_P n1));
- auto with real.
-rewrite plus_comm; rewrite le_plus_minus_r; auto with real.
-rewrite Rinv_mult_distr; auto with real.
-rewrite Rinv_involutive; auto with real.
-apply lt_le_weak.
-apply nat_of_P_lt_Lt_compare_morphism; auto.
-apply ZC2; auto.
-intros H' H'0; rewrite (nat_of_P_minus_morphism n1 m1); auto with real.
-rewrite (pow_RN_plus x (nat_of_P n1 - nat_of_P m1) (nat_of_P m1));
- auto with real.
-rewrite plus_comm; rewrite le_plus_minus_r; auto with real.
-apply lt_le_weak.
-change (nat_of_P n1 > nat_of_P m1)%nat in |- *.
-apply nat_of_P_gt_Gt_compare_morphism; auto.
+ case_eq ((n1 ?= m1)%positive Datatypes.Eq); simpl in |- *; auto with real.
+ intros H' H'0; rewrite Pcompare_Eq_eq with (1 := H'); auto with real.
+ intros H' H'0; rewrite (nat_of_P_minus_morphism m1 n1); auto with real.
+ rewrite (pow_RN_plus x (nat_of_P m1 - nat_of_P n1) (nat_of_P n1));
+ auto with real.
+ rewrite plus_comm; rewrite le_plus_minus_r; auto with real.
+ rewrite Rinv_mult_distr; auto with real.
+ rewrite Rinv_involutive; auto with real.
+ apply lt_le_weak.
+ apply nat_of_P_lt_Lt_compare_morphism; auto.
+ apply ZC2; auto.
+ intros H' H'0; rewrite (nat_of_P_minus_morphism n1 m1); auto with real.
+ rewrite (pow_RN_plus x (nat_of_P n1 - nat_of_P m1) (nat_of_P m1));
+ auto with real.
+ rewrite plus_comm; rewrite le_plus_minus_r; auto with real.
+ apply lt_le_weak.
+ change (nat_of_P n1 > nat_of_P m1)%nat in |- *.
+ apply nat_of_P_gt_Gt_compare_morphism; auto.
(* NEG/POS *)
-case_eq ((n1 ?= m1)%positive Datatypes.Eq); simpl in |- *; auto with real.
-intros H' H'0; rewrite Pcompare_Eq_eq with (1 := H'); auto with real.
-intros H' H'0; rewrite (nat_of_P_minus_morphism m1 n1); auto with real.
-rewrite (pow_RN_plus x (nat_of_P m1 - nat_of_P n1) (nat_of_P n1));
- auto with real.
-rewrite plus_comm; rewrite le_plus_minus_r; auto with real.
-apply lt_le_weak.
-apply nat_of_P_lt_Lt_compare_morphism; auto.
-apply ZC2; auto.
-intros H' H'0; rewrite (nat_of_P_minus_morphism n1 m1); auto with real.
-rewrite (pow_RN_plus x (nat_of_P n1 - nat_of_P m1) (nat_of_P m1));
- auto with real.
-rewrite plus_comm; rewrite le_plus_minus_r; auto with real.
-rewrite Rinv_mult_distr; auto with real.
-apply lt_le_weak.
-change (nat_of_P n1 > nat_of_P m1)%nat in |- *.
-apply nat_of_P_gt_Gt_compare_morphism; auto.
+ case_eq ((n1 ?= m1)%positive Datatypes.Eq); simpl in |- *; auto with real.
+ intros H' H'0; rewrite Pcompare_Eq_eq with (1 := H'); auto with real.
+ intros H' H'0; rewrite (nat_of_P_minus_morphism m1 n1); auto with real.
+ rewrite (pow_RN_plus x (nat_of_P m1 - nat_of_P n1) (nat_of_P n1));
+ auto with real.
+ rewrite plus_comm; rewrite le_plus_minus_r; auto with real.
+ apply lt_le_weak.
+ apply nat_of_P_lt_Lt_compare_morphism; auto.
+ apply ZC2; auto.
+ intros H' H'0; rewrite (nat_of_P_minus_morphism n1 m1); auto with real.
+ rewrite (pow_RN_plus x (nat_of_P n1 - nat_of_P m1) (nat_of_P m1));
+ auto with real.
+ rewrite plus_comm; rewrite le_plus_minus_r; auto with real.
+ rewrite Rinv_mult_distr; auto with real.
+ apply lt_le_weak.
+ change (nat_of_P n1 > nat_of_P m1)%nat in |- *.
+ apply nat_of_P_gt_Gt_compare_morphism; auto.
(* NEG/NEG *)
-rewrite nat_of_P_plus_morphism; auto with real.
-intros H'; rewrite pow_add; auto with real.
-apply Rinv_mult_distr; auto.
-apply pow_nonzero; auto.
-apply pow_nonzero; auto.
+ rewrite nat_of_P_plus_morphism; auto with real.
+ intros H'; rewrite pow_add; auto with real.
+ apply Rinv_mult_distr; auto.
+ apply pow_nonzero; auto.
+ apply pow_nonzero; auto.
Qed.
Hint Resolve powerRZ_O powerRZ_1 powerRZ_NOR powerRZ_add: real.
-
+
Lemma Zpower_nat_powerRZ :
- forall n m:nat, IZR (Zpower_nat (Z_of_nat n) m) = INR n ^Z Z_of_nat m.
-Proof.
-intros n m; elim m; simpl in |- *; auto with real.
-intros m1 H'; rewrite nat_of_P_o_P_of_succ_nat_eq_succ; simpl in |- *.
-replace (Zpower_nat (Z_of_nat n) (S m1)) with
- (Z_of_nat n * Zpower_nat (Z_of_nat n) m1)%Z.
-rewrite mult_IZR; auto with real.
-repeat rewrite <- INR_IZR_INZ; simpl in |- *.
-rewrite H'; simpl in |- *.
-case m1; simpl in |- *; auto with real.
-intros m2; rewrite nat_of_P_o_P_of_succ_nat_eq_succ; auto.
-unfold Zpower_nat in |- *; auto.
-Qed.
-
+ forall n m:nat, IZR (Zpower_nat (Z_of_nat n) m) = INR n ^Z Z_of_nat m.
+Proof.
+ intros n m; elim m; simpl in |- *; auto with real.
+ intros m1 H'; rewrite nat_of_P_o_P_of_succ_nat_eq_succ; simpl in |- *.
+ replace (Zpower_nat (Z_of_nat n) (S m1)) with
+ (Z_of_nat n * Zpower_nat (Z_of_nat n) m1)%Z.
+ rewrite mult_IZR; auto with real.
+ repeat rewrite <- INR_IZR_INZ; simpl in |- *.
+ rewrite H'; simpl in |- *.
+ case m1; simpl in |- *; auto with real.
+ intros m2; rewrite nat_of_P_o_P_of_succ_nat_eq_succ; auto.
+ unfold Zpower_nat in |- *; auto.
+Qed.
+
Lemma powerRZ_lt : forall (x:R) (z:Z), 0 < x -> 0 < x ^Z z.
Proof.
-intros x z; case z; simpl in |- *; auto with real.
+ intros x z; case z; simpl in |- *; auto with real.
Qed.
Hint Resolve powerRZ_lt: real.
-
+
Lemma powerRZ_le : forall (x:R) (z:Z), 0 < x -> 0 <= x ^Z z.
Proof.
-intros x z H'; apply Rlt_le; auto with real.
+ intros x z H'; apply Rlt_le; auto with real.
Qed.
Hint Resolve powerRZ_le: real.
-
+
Lemma Zpower_nat_powerRZ_absolu :
- forall n m:Z, (0 <= m)%Z -> IZR (Zpower_nat n (Zabs_nat m)) = IZR n ^Z m.
+ forall n m:Z, (0 <= m)%Z -> IZR (Zpower_nat n (Zabs_nat m)) = IZR n ^Z m.
Proof.
-intros n m; case m; simpl in |- *; auto with zarith.
-intros p H'; elim (nat_of_P p); simpl in |- *; auto with zarith.
-intros n0 H'0; rewrite <- H'0; simpl in |- *; auto with zarith.
-rewrite <- mult_IZR; auto.
-intros p H'; absurd (0 <= Zneg p)%Z; auto with zarith.
+ intros n m; case m; simpl in |- *; auto with zarith.
+ intros p H'; elim (nat_of_P p); simpl in |- *; auto with zarith.
+ intros n0 H'0; rewrite <- H'0; simpl in |- *; auto with zarith.
+ rewrite <- mult_IZR; auto.
+ intros p H'; absurd (0 <= Zneg p)%Z; auto with zarith.
Qed.
Lemma powerRZ_R1 : forall n:Z, 1 ^Z n = 1.
Proof.
-intros n; case n; simpl in |- *; auto.
-intros p; elim (nat_of_P p); simpl in |- *; auto; intros n0 H'; rewrite H';
- ring.
-intros p; elim (nat_of_P p); simpl in |- *.
-exact Rinv_1.
-intros n1 H'; rewrite Rinv_mult_distr; try rewrite Rinv_1; try rewrite H';
- auto with real.
+ intros n; case n; simpl in |- *; auto.
+ intros p; elim (nat_of_P p); simpl in |- *; auto; intros n0 H'; rewrite H';
+ ring.
+ intros p; elim (nat_of_P p); simpl in |- *.
+ exact Rinv_1.
+ intros n1 H'; rewrite Rinv_mult_distr; try rewrite Rinv_1; try rewrite H';
+ auto with real.
Qed.
(*******************************)
(* For easy interface *)
(*******************************)
(* decimal_exp r z is defined as r 10^z *)
-
+
Definition decimal_exp (r:R) (z:Z) : R := (r * 10 ^Z z).
(*******************************)
-(** Sum of n first naturals *)
+(** * Sum of n first naturals *)
(*******************************)
(*********)
Boxed Fixpoint sum_nat_f_O (f:nat -> nat) (n:nat) {struct n} : nat :=
match n with
- | O => f 0%nat
- | S n' => (sum_nat_f_O f n' + f (S n'))%nat
+ | O => f 0%nat
+ | S n' => (sum_nat_f_O f n' + f (S n'))%nat
end.
(*********)
@@ -687,13 +687,13 @@ Definition sum_nat_O (n:nat) : nat := sum_nat_f_O (fun x:nat => x) n.
Definition sum_nat (s n:nat) : nat := sum_nat_f s n (fun x:nat => x).
(*******************************)
-(** Sum *)
+(** * Sum *)
(*******************************)
(*********)
Fixpoint sum_f_R0 (f:nat -> R) (N:nat) {struct N} : R :=
match N with
- | O => f 0%nat
- | S i => sum_f_R0 f i + f (S i)
+ | O => f 0%nat
+ | S i => sum_f_R0 f i + f (S i)
end.
(*********)
@@ -701,35 +701,35 @@ Definition sum_f (s n:nat) (f:nat -> R) : R :=
sum_f_R0 (fun x:nat => f (x + s)%nat) (n - s).
Lemma GP_finite :
- forall (x:R) (n:nat),
- sum_f_R0 (fun n:nat => x ^ n) n * (x - 1) = x ^ (n + 1) - 1.
+ forall (x:R) (n:nat),
+ sum_f_R0 (fun n:nat => x ^ n) n * (x - 1) = x ^ (n + 1) - 1.
Proof.
-intros; induction n as [| n Hrecn]; simpl in |- *.
-ring.
-rewrite Rmult_plus_distr_r; rewrite Hrecn; cut ((n + 1)%nat = S n).
-intro H; rewrite H; simpl in |- *; ring.
-omega.
+ intros; induction n as [| n Hrecn]; simpl in |- *.
+ ring.
+ rewrite Rmult_plus_distr_r; rewrite Hrecn; cut ((n + 1)%nat = S n).
+ intro H; rewrite H; simpl in |- *; ring.
+ omega.
Qed.
Lemma sum_f_R0_triangle :
- forall (x:nat -> R) (n:nat),
- Rabs (sum_f_R0 x n) <= sum_f_R0 (fun i:nat => Rabs (x i)) n.
-Proof.
-intro; simple induction n; simpl in |- *.
-unfold Rle in |- *; right; reflexivity.
-intro m; intro;
- apply
- (Rle_trans (Rabs (sum_f_R0 x m + x (S m)))
- (Rabs (sum_f_R0 x m) + Rabs (x (S m)))
- (sum_f_R0 (fun i:nat => Rabs (x i)) m + Rabs (x (S m)))).
-apply Rabs_triang.
-rewrite Rplus_comm;
- rewrite (Rplus_comm (sum_f_R0 (fun i:nat => Rabs (x i)) m) (Rabs (x (S m))));
- apply Rplus_le_compat_l; assumption.
+ forall (x:nat -> R) (n:nat),
+ Rabs (sum_f_R0 x n) <= sum_f_R0 (fun i:nat => Rabs (x i)) n.
+Proof.
+ intro; simple induction n; simpl in |- *.
+ unfold Rle in |- *; right; reflexivity.
+ intro m; intro;
+ apply
+ (Rle_trans (Rabs (sum_f_R0 x m + x (S m)))
+ (Rabs (sum_f_R0 x m) + Rabs (x (S m)))
+ (sum_f_R0 (fun i:nat => Rabs (x i)) m + Rabs (x (S m)))).
+ apply Rabs_triang.
+ rewrite Rplus_comm;
+ rewrite (Rplus_comm (sum_f_R0 (fun i:nat => Rabs (x i)) m) (Rabs (x (S m))));
+ apply Rplus_le_compat_l; assumption.
Qed.
(*******************************)
-(* Distance in R *)
+(** * Distance in R *)
(*******************************)
(*********)
@@ -738,64 +738,64 @@ Definition R_dist (x y:R) : R := Rabs (x - y).
(*********)
Lemma R_dist_pos : forall x y:R, R_dist x y >= 0.
Proof.
-intros; unfold R_dist in |- *; unfold Rabs in |- *; case (Rcase_abs (x - y));
- intro l.
-unfold Rge in |- *; left; apply (Ropp_gt_lt_0_contravar (x - y) l).
-trivial.
+ intros; unfold R_dist in |- *; unfold Rabs in |- *; case (Rcase_abs (x - y));
+ intro l.
+ unfold Rge in |- *; left; apply (Ropp_gt_lt_0_contravar (x - y) l).
+ trivial.
Qed.
(*********)
Lemma R_dist_sym : forall x y:R, R_dist x y = R_dist y x.
Proof.
-unfold R_dist in |- *; intros; split_Rabs; ring.
-generalize (Ropp_gt_lt_0_contravar (y - x) r); intro;
- rewrite (Ropp_minus_distr y x) in H; generalize (Rlt_asym (x - y) 0 r0);
- intro; unfold Rgt in H; elimtype False; auto.
-generalize (minus_Rge y x r); intro; generalize (minus_Rge x y r0); intro;
- generalize (Rge_antisym x y H0 H); intro; rewrite H1;
- ring.
+ unfold R_dist in |- *; intros; split_Rabs; try ring.
+ generalize (Ropp_gt_lt_0_contravar (y - x) r); intro;
+ rewrite (Ropp_minus_distr y x) in H; generalize (Rlt_asym (x - y) 0 r0);
+ intro; unfold Rgt in H; elimtype False; auto.
+ generalize (minus_Rge y x r); intro; generalize (minus_Rge x y r0); intro;
+ generalize (Rge_antisym x y H0 H); intro; rewrite H1;
+ ring.
Qed.
(*********)
Lemma R_dist_refl : forall x y:R, R_dist x y = 0 <-> x = y.
Proof.
-unfold R_dist in |- *; intros; split_Rabs; split; intros.
-rewrite (Ropp_minus_distr x y) in H; apply sym_eq;
- apply (Rminus_diag_uniq y x H).
-rewrite (Ropp_minus_distr x y); generalize (sym_eq H); intro;
- apply (Rminus_diag_eq y x H0).
-apply (Rminus_diag_uniq x y H).
-apply (Rminus_diag_eq x y H).
+ unfold R_dist in |- *; intros; split_Rabs; split; intros.
+ rewrite (Ropp_minus_distr x y) in H; apply sym_eq;
+ apply (Rminus_diag_uniq y x H).
+ rewrite (Ropp_minus_distr x y); generalize (sym_eq H); intro;
+ apply (Rminus_diag_eq y x H0).
+ apply (Rminus_diag_uniq x y H).
+ apply (Rminus_diag_eq x y H).
Qed.
Lemma R_dist_eq : forall x:R, R_dist x x = 0.
Proof.
-unfold R_dist in |- *; intros; split_Rabs; intros; ring.
+ unfold R_dist in |- *; intros; split_Rabs; intros; ring.
Qed.
(***********)
Lemma R_dist_tri : forall x y z:R, R_dist x y <= R_dist x z + R_dist z y.
Proof.
-intros; unfold R_dist in |- *; replace (x - y) with (x - z + (z - y));
- [ apply (Rabs_triang (x - z) (z - y)) | ring ].
+ intros; unfold R_dist in |- *; replace (x - y) with (x - z + (z - y));
+ [ apply (Rabs_triang (x - z) (z - y)) | ring ].
Qed.
(*********)
Lemma R_dist_plus :
- forall a b c d:R, R_dist (a + c) (b + d) <= R_dist a b + R_dist c d.
+ forall a b c d:R, R_dist (a + c) (b + d) <= R_dist a b + R_dist c d.
Proof.
-intros; unfold R_dist in |- *;
- replace (a + c - (b + d)) with (a - b + (c - d)).
-exact (Rabs_triang (a - b) (c - d)).
-ring.
+ intros; unfold R_dist in |- *;
+ replace (a + c - (b + d)) with (a - b + (c - d)).
+ exact (Rabs_triang (a - b) (c - d)).
+ ring.
Qed.
(*******************************)
-(** Infinit Sum *)
+(** * Infinit Sum *)
(*******************************)
(*********)
Definition infinit_sum (s:nat -> R) (l:R) : Prop :=
forall eps:R,
eps > 0 ->
- exists N : nat,
+ exists N : nat,
(forall n:nat, (n >= N)%nat -> R_dist (sum_f_R0 s n) l < eps).