Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************)
(*         *   The Coq Proof Assistant / The Coq Development Team       *)
(*  v      *   INRIA, CNRS and contributors - Copyright 1999-2018       *)
(* <O___,, *       (see CREDITS file for the list of authors)           *)
(*   \VV/  **************************************************************)
(*    //   *    This file is distributed under the terms of the         *)
(*         *     GNU Lesser General Public License Version 2.1          *)
(*         *     (see LICENSE file for the text of the license)         *)
(************************************************************************)

(*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*)

(********************************************************)
Definition of the sum functions
(*                                                      *)
(********************************************************)
Require Export ArithRing.

Require Import Rbase.
Require Export Rpow_def.
Require Export R_Ifp.
Require Export Rbasic_fun.
Require Export R_sqr.
Require Export SplitAbsolu.
Require Export SplitRmult.
Require Export ArithProp.
Require Import Omega.
Require Import Zpower.
Local Open Scope nat_scope.
Local Open Scope R_scope.

(*******************************)

Lemmas about factorial

(*******************************)
(*********)

forall n : nat, INR (fact n) <> 0

forall n : nat, INR (fact n) <> 0
intro; red; intro; apply (not_O_INR (fact n) (fact_neq_0 n)); assumption. Qed. (*********)

forall n : nat, fact (S n) = (S n * fact n)%nat

forall n : nat, fact (S n) = (S n * fact n)%nat
intro; reflexivity. Qed. (*********)

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)
n:nat

/ INR (S n) * / INR (fact n) * INR (fact n) = / INR (S n)
n:nat
INR (S n) <> 0
n:nat
INR (fact n) <> 0
n:nat

INR (S n) <> 0
n:nat
INR (fact n) <> 0
n:nat

INR (fact n) <> 0
apply INR_fact_neq_0. Qed. (*******************************)

Power

(*******************************)
(*********)

Infix "^" := pow : R_scope.


forall x : R, x ^ 0 = 1

forall x : R, x ^ 0 = 1
reflexivity. Qed.

forall x : R, x ^ 1 = x

forall x : R, x ^ 1 = x
simpl; auto with real. Qed.

forall (x : R) (n m : nat), x ^ (n + m) = x ^ n * x ^ m

forall (x : R) (n m : nat), x ^ (n + m) = x ^ n * x ^ m
x:R
n:nat

forall n0 : nat, (forall m : nat, x ^ (n0 + m) = x ^ n0 * x ^ m) -> forall m : nat, x * x ^ (n0 + m) = x * x ^ n0 * x ^ m
intros n0 H' m; rewrite H'; auto with real. Qed.

forall (x y : R) (n : nat), (x * y) ^ n = x ^ n * y ^ n

forall (x y : R) (n : nat), (x * y) ^ n = x ^ n * y ^ n
x, y:R

(x * y) ^ 0 = x ^ 0 * y ^ 0
x, y:R
n:nat
IHn:(x * y) ^ n = x ^ n * y ^ n
(x * y) ^ S n = x ^ S n * y ^ S n
x, y:R
n:nat
IHn:(x * y) ^ n = x ^ n * y ^ n

(x * y) ^ S n = x ^ S n * y ^ S n
x, y:R
n:nat
IHn:(x * y) ^ n = x ^ n * y ^ n

x * y * (x * y) ^ n = x * x ^ n * (y * y ^ n)
x, y:R
n:nat
IHn:(x * y) ^ n = x ^ n * y ^ n

y * (x * y) ^ n = x ^ n * (y * y ^ n)
rewrite IHn ; field. Qed.

forall (x : R) (n : nat), x <> 0 -> x ^ n <> 0

forall (x : R) (n : nat), x <> 0 -> x ^ n <> 0
x:R
n:nat

x <> 0 -> 1 <> 0
x:R
n:nat
forall n0 : nat, (x <> 0 -> x ^ n0 <> 0) -> x <> 0 -> x * x ^ n0 <> 0
x:R
n:nat

forall n0 : nat, (x <> 0 -> x ^ n0 <> 0) -> x <> 0 -> x * x ^ n0 <> 0
x:R
n, n0:nat
H:x <> 0 -> x ^ n0 <> 0
H0:x <> 0
H1:x * x ^ n0 = 0

x = 0 -> False
x:R
n, n0:nat
H:x <> 0 -> x ^ n0 <> 0
H0:x <> 0
H1:x * x ^ n0 = 0
x ^ n0 = 0 -> False
x:R
n, n0:nat
H:x <> 0 -> x ^ n0 <> 0
H0:x <> 0
H1:x * x ^ n0 = 0

x ^ n0 = 0 -> False
apply H; assumption. Qed. Hint Resolve pow_O pow_1 pow_add pow_nonzero: real.

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
x:R
n:nat

forall n0 : nat, (forall m : nat, x <> 0 -> x ^ n0 = x ^ (n0 + m) * / x ^ m) -> forall m : nat, x <> 0 -> x * x ^ n0 = x * x ^ (n0 + m) * / x ^ m
x:R
n, n0:nat
H':forall m0 : nat, x <> 0 -> x ^ n0 = x ^ (n0 + m0) * / x ^ m0
m:nat
H'0:x <> 0

x * x ^ n0 = x * x ^ (n0 + m) * / x ^ m
rewrite Rmult_assoc; rewrite <- H'; auto. Qed.

forall (x : R) (n : nat), 0 < x -> 0 < x ^ n

forall (x : R) (n : nat), 0 < x -> 0 < x ^ n
x:R
n:nat

forall n0 : nat, (0 < x -> 0 < x ^ n0) -> 0 < x -> 0 < x * x ^ n0
intros n0 H' H'0; replace 0 with (x * 0); auto with real. Qed. Hint Resolve pow_lt: real.

forall (x : R) (n : nat), 1 < x -> (0 < n)%nat -> 1 < x ^ n

forall (x : R) (n : nat), 1 < x -> (0 < n)%nat -> 1 < x ^ n
x:R
n:nat

1 < x -> (0 < 0)%nat -> 1 < 1
x:R
n:nat
forall n0 : nat, (1 < x -> (0 < n0)%nat -> 1 < x ^ n0) -> 1 < x -> (0 < S n0)%nat -> 1 < x * x ^ n0
x:R
n:nat

forall n0 : nat, (1 < x -> (0 < n0)%nat -> 1 < x ^ n0) -> 1 < x -> (0 < S n0)%nat -> 1 < x * x ^ n0
x:R
n, n0:nat

(1 < x -> (0 < 0)%nat -> 1 < x ^ 0) -> 1 < x -> (0 < 1)%nat -> 1 < x * x ^ 0
x:R
n, n0:nat
forall n1 : nat, (1 < x -> (0 < S n1)%nat -> 1 < x ^ S n1) -> 1 < x -> (0 < S (S n1))%nat -> 1 < x * x ^ S n1
x:R
n, n0:nat

forall n1 : nat, (1 < x -> (0 < S n1)%nat -> 1 < x ^ S n1) -> 1 < x -> (0 < S (S n1))%nat -> 1 < x * x ^ S n1
x:R
n, n0, n1:nat
H':1 < x -> (0 < S n1)%nat -> 1 < x ^ S n1
H'0:1 < x
H'1:(0 < S (S n1))%nat

1 < x * x ^ S n1
x:R
n, n0, n1:nat
H':1 < x -> (0 < S n1)%nat -> 1 < x ^ S n1
H'0:1 < x
H'1:(0 < S (S n1))%nat

1 * 1 < x * x ^ S n1
x:R
n, n0, n1:nat
H':1 < x -> (0 < S n1)%nat -> 1 < x ^ S n1
H'0:1 < x
H'1:(0 < S (S n1))%nat

x * 1 < x * x ^ S n1
x:R
n, n0, n1:nat
H':1 < x -> (0 < S n1)%nat -> 1 < x ^ S n1
H'0:1 < x
H'1:(0 < S (S n1))%nat

0 < x
x:R
n, n0, n1:nat
H':1 < x -> (0 < S n1)%nat -> 1 < x ^ S n1
H'0:1 < x
H'1:(0 < S (S n1))%nat
1 < x ^ S n1
x:R
n, n0, n1:nat
H':1 < x -> (0 < S n1)%nat -> 1 < x ^ S n1
H'0:1 < x
H'1:(0 < S (S n1))%nat

1 < x ^ S n1
apply H'; auto with arith. Qed. Hint Resolve Rlt_pow_R1: real.

forall (x : R) (n m : nat), 1 < x -> (n < m)%nat -> x ^ n < x ^ m

forall (x : R) (n m : nat), 1 < x -> (n < m)%nat -> x ^ n < x ^ m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

x ^ n < x ^ (m - n + n)
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

x ^ n < x ^ (m - n) * x ^ n
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

1 * x ^ n < x ^ (m - n) * x ^ n
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

1 * x ^ n - x ^ (m - n) * x ^ n < 0
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

x ^ n * (1 - x ^ (m - n)) < 0
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

x ^ n * (1 - x ^ (m - n)) < x ^ n * 0
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

0 < x ^ n
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
1 - x ^ (m - n) < 0
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

0 < x
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
1 - x ^ (m - n) < 0
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

1 - x ^ (m - n) < 0
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

1 < x ^ (m - n)
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

(0 < m - n)%nat
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

(n + 0 < n + (m - n))%nat
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat
(m - n + n)%nat = m
x:R
n, m:nat
H':1 < x
H'0:(n < m)%nat

(m - n + n)%nat = m
rewrite plus_comm; auto with arith. Qed. Hint Resolve Rlt_pow: real. (*********)

forall (x : R) (n : nat), x * x ^ n = x ^ S n

forall (x : R) (n : nat), x * x ^ n = x ^ S n
simple induction n; simpl; trivial. Qed. (*********)

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
intros; pattern (x ^ a) at 1; 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.

forall (n : nat) (x : R), 0 < x -> 1 + INR n * x <= (1 + x) ^ n

forall (n : nat) (x : R), 0 < x -> 1 + INR n * x <= (1 + x) ^ n
n:nat
x:R
H:0 < x

1 + INR 0 * x <= (1 + x) ^ 0
n:nat
x:R
H:0 < x
forall n0 : nat, 1 + INR n0 * x <= (1 + x) ^ n0 -> 1 + INR (S n0) * x <= (1 + x) ^ S n0
n:nat
x:R
H:0 < x

1 + 0 * x = 1 -> 1 + 0 * x <= 1
n:nat
x:R
H:0 < x
1 + 0 * x = 1
n:nat
x:R
H:0 < x
forall n0 : nat, 1 + INR n0 * x <= (1 + x) ^ n0 -> 1 + INR (S n0) * x <= (1 + x) ^ S n0
n:nat
x:R
H:0 < x

1 + 0 * x = 1
n:nat
x:R
H:0 < x
forall n0 : nat, 1 + INR n0 * x <= (1 + x) ^ n0 -> 1 + INR (S n0) * x <= (1 + x) ^ S n0
n:nat
x:R
H:0 < x

forall n0 : nat, 1 + INR n0 * x <= (1 + x) ^ n0 -> 1 + INR (S n0) * x <= (1 + x) ^ S n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0

1 + INR (S n0) * x <= (1 + x) * (1 + INR n0 * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0

(1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x) -> 1 + INR (S n0) * x <= (1 + x) * (1 + INR n0 * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
H1:(1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)

0 <= INR 0 * (x * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
H1:(1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)
n1:nat
H2:0 <= INR n1 * (x * x)
0 <= INR (S n1) * (x * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
H1:(1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)
n1:nat
H2:0 <= INR n1 * (x * x)

0 <= INR (S n1) * (x * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0

(1 + x) * (1 + INR n0 * x) = 1 + INR (S n0) * x + INR n0 * (x * x)
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x <= (1 + x) ^ n0

(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x < (1 + x) ^ n0 \/ 1 + INR n0 * x = (1 + x) ^ n0
H1:1 + INR n0 * x < (1 + x) ^ n0

(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x < (1 + x) ^ n0 \/ 1 + INR n0 * x = (1 + x) ^ n0
H1:1 + INR n0 * x = (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x < (1 + x) ^ n0 \/ 1 + INR n0 * x = (1 + x) ^ n0
H1:1 + INR n0 * x < (1 + x) ^ n0

0 < 1 + x
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x < (1 + x) ^ n0 \/ 1 + INR n0 * x = (1 + x) ^ n0
H1:1 + INR n0 * x < (1 + x) ^ n0
1 + INR n0 * x < (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x < (1 + x) ^ n0 \/ 1 + INR n0 * x = (1 + x) ^ n0
H1:1 + INR n0 * x = (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x < (1 + x) ^ n0 \/ 1 + INR n0 * x = (1 + x) ^ n0
H1:1 + INR n0 * x < (1 + x) ^ n0

1 + INR n0 * x < (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x < (1 + x) ^ n0 \/ 1 + INR n0 * x = (1 + x) ^ n0
H1:1 + INR n0 * x = (1 + x) ^ n0
(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
n:nat
x:R
H:0 < x
n0:nat
H0:1 + INR n0 * x < (1 + x) ^ n0 \/ 1 + INR n0 * x = (1 + x) ^ n0
H1:1 + INR n0 * x = (1 + x) ^ n0

(1 + x) * (1 + INR n0 * x) <= (1 + x) * (1 + x) ^ n0
rewrite H1; unfold Rle; right; trivial. Qed.

forall (x : R) (m n : nat), Rabs x > 1 -> (m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)

forall (x : R) (m n : nat), Rabs x > 1 -> (m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
x:R
m:nat
H:Rabs x > 1
H0:(m <= 0)%nat
H1:m = 0%nat

Rabs (x ^ 0) <= Rabs (x ^ 0)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
H1:m = S n
Rabs (x ^ S n) <= Rabs (x ^ S n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n
Rabs (x ^ m) <= Rabs (x ^ S n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
H1:m = S n

Rabs (x ^ S n) <= Rabs (x ^ S n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n
Rabs (x ^ m) <= Rabs (x ^ S n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

Rabs (x ^ m) <= Rabs (x ^ S n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

Rabs (x ^ m) <= Rabs (x ^ n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n
Rabs (x ^ n) <= Rabs (x ^ S n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

Rabs (x ^ n) <= Rabs (x ^ S n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

Rabs (x ^ n) <= Rabs x * Rabs (x ^ n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

(fun r : R => r <= Rabs x * Rabs (x ^ n)) (Rabs (x ^ n))
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

Rabs (x ^ n) * 1 <= Rabs x * Rabs (x ^ n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

Rabs (x ^ n) * 1 <= Rabs (x ^ n) * Rabs x
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

0 <= Rabs (x ^ n)
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n
1 <= Rabs x
x:R
m, n:nat
H:Rabs x > 1
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

1 <= Rabs x
x:R
m, n:nat
H:1 < Rabs x
Hrecn:(m <= n)%nat -> Rabs (x ^ m) <= Rabs (x ^ n)
H0:(m <= S n)%nat
m0:nat
H2:(m <= n)%nat
H1:m0 = n

1 <= Rabs x
apply Rlt_le; assumption. Qed.

forall (x : R) (n : nat), Rabs x ^ n = Rabs (x ^ n)

forall (x : R) (n : nat), Rabs x ^ n = Rabs (x ^ n)
x:R
n:nat

1 = Rabs 1
x:R
n:nat
forall n0 : nat, Rabs x ^ n0 = Rabs (x ^ n0) -> Rabs x * Rabs x ^ n0 = Rabs (x * x ^ n0)
x:R
n:nat

forall n0 : nat, Rabs x ^ n0 = Rabs (x ^ n0) -> Rabs x * Rabs x ^ n0 = Rabs (x * x ^ n0)
intros; rewrite H; symmetry; apply Rabs_mult. Qed.

forall x : R, Rabs x > 1 -> forall b : R, exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) >= b

forall x : R, Rabs x > 1 -> forall b : R, exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)

(exists N : nat, INR N >= b * / (Rabs x - 1)) -> exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat

Rabs (x ^ n) >= Rabs (x ^ x0)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs (x ^ x0) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat

Rabs (x ^ x0) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat

Rabs x = 1 + (Rabs x - 1) -> Rabs x ^ x0 >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)

(1 + (Rabs x - 1)) ^ x0 >= 1 + INR x0 * (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
1 + INR x0 * (Rabs x - 1) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)

1 + INR x0 * (Rabs x - 1) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)

1 + INR x0 * (Rabs x - 1) >= INR x0 * (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
INR x0 * (Rabs x - 1) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)

INR x0 * (Rabs x - 1) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)

b = b * / (Rabs x - 1) * (Rabs x - 1) -> INR x0 * (Rabs x - 1) >= b
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
b = b * / (Rabs x - 1) * (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
H4:b = b * / (Rabs x - 1) * (Rabs x - 1)

Rabs x - 1 >= 0
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
H4:b = b * / (Rabs x - 1) * (Rabs x - 1)
INR x0 >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
b = b * / (Rabs x - 1) * (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
H4:b = b * / (Rabs x - 1) * (Rabs x - 1)

INR x0 >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
b = b * / (Rabs x - 1) * (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)

b = b * / (Rabs x - 1) * (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)

b = b * 1
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)
Rabs x - 1 <> 0
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
H3:Rabs x = 1 + (Rabs x - 1)

Rabs x - 1 <> 0
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat
Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
x0:nat
H1:INR x0 >= b * / (Rabs x - 1)
n:nat
H2:(n >= x0)%nat

Rabs x = 1 + (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)

exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)

(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z -> exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(0 <= up (b * / (Rabs x - 1)))%Z

exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(up (b * / (Rabs x - 1)) <= 0)%Z
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(0 <= up (b * / (Rabs x - 1)))%Z
x0:nat
H3:up (b * / (Rabs x - 1)) = Z.of_nat x0

INR x0 >= IZR (up (b * / (Rabs x - 1)))
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(0 <= up (b * / (Rabs x - 1)))%Z
x0:nat
H3:up (b * / (Rabs x - 1)) = Z.of_nat x0
IZR (up (b * / (Rabs x - 1))) >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(up (b * / (Rabs x - 1)) <= 0)%Z
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(0 <= up (b * / (Rabs x - 1)))%Z
x0:nat
H3:up (b * / (Rabs x - 1)) = Z.of_nat x0

IZR (up (b * / (Rabs x - 1))) >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(up (b * / (Rabs x - 1)) <= 0)%Z
exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(up (b * / (Rabs x - 1)) <= 0)%Z

exists N : nat, INR N >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(up (b * / (Rabs x - 1)) <= 0)%Z

INR 0 >= IZR (up (b * / (Rabs x - 1)))
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(up (b * / (Rabs x - 1)) <= 0)%Z
IZR (up (b * / (Rabs x - 1))) >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
H1:(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
H2:(up (b * / (Rabs x - 1)) <= 0)%Z

IZR (up (b * / (Rabs x - 1))) >= b * / (Rabs x - 1)
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)
(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
x:R
H:Rabs x > 1
b:R
H0:IZR (up (b * / (Rabs x - 1))) > b * / (Rabs x - 1)

(0 <= up (b * / (Rabs x - 1)))%Z \/ (up (b * / (Rabs x - 1)) <= 0)%Z
omega. Qed.

forall n : nat, n <> 0%nat -> 0 ^ n = 0

forall n : nat, n <> 0%nat -> 0 ^ n = 0
n:nat

0%nat <> 0%nat -> 0 ^ 0 = 0
n:nat
forall n0 : nat, (n0 <> 0%nat -> 0 ^ n0 = 0) -> S n0 <> 0%nat -> 0 ^ S n0 = 0
n:nat

0%nat <> 0%nat -> 1 = 0
n:nat
forall n0 : nat, (n0 <> 0%nat -> 0 ^ n0 = 0) -> S n0 <> 0%nat -> 0 ^ S n0 = 0
n:nat

forall n0 : nat, (n0 <> 0%nat -> 0 ^ n0 = 0) -> S n0 <> 0%nat -> 0 ^ S n0 = 0
intros; simpl; apply Rmult_0_l. Qed.

forall (x : R) (n : nat), x <> 0 -> / x ^ n = (/ x) ^ n

forall (x : R) (n : nat), x <> 0 -> / x ^ n = (/ x) ^ n
x:R
n:nat
H:x <> 0

/ 1 = 1
x:R
n:nat
H:x <> 0
forall n0 : nat, / x ^ n0 = (/ x) ^ n0 -> / (x * x ^ n0) = / x * (/ x) ^ n0
x:R
n:nat
H:x <> 0

forall n0 : nat, / x ^ n0 = (/ x) ^ n0 -> / (x * x ^ n0) = / x * (/ x) ^ n0
x:R
n:nat
H:x <> 0
m:nat
H0:/ x ^ m = (/ x) ^ m

/ x * / x ^ m = / x * (/ x) ^ m
x:R
n:nat
H:x <> 0
m:nat
H0:/ x ^ m = (/ x) ^ m
x <> 0
x:R
n:nat
H:x <> 0
m:nat
H0:/ x ^ m = (/ x) ^ m
x ^ m <> 0
x:R
n:nat
H:x <> 0
m:nat
H0:/ x ^ m = (/ x) ^ m

x <> 0
x:R
n:nat
H:x <> 0
m:nat
H0:/ x ^ m = (/ x) ^ m
x ^ m <> 0
x:R
n:nat
H:x <> 0
m:nat
H0:/ x ^ m = (/ x) ^ m

x ^ m <> 0
apply pow_nonzero; assumption. Qed.

forall x : R, Rabs x < 1 -> forall y : R, 0 < y -> exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) < 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
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x = 0

exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x = 0
n:nat
GE:(n >= 1)%nat

Rabs 0 < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x = 0
n:nat
GE:(n >= 1)%nat
n <> 0%nat
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x = 0
n:nat
GE:(n >= 1)%nat

n <> 0%nat
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

Rabs (/ x) > 1 -> exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (x ^ n) < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat

(forall n : nat, (n >= N)%nat -> Rabs ((/ x) ^ n) >= / y + 1) -> exists N0 : nat, forall n : nat, (n >= N0)%nat -> Rabs (x ^ n) < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

Rabs (x ^ n) < / / y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

/ / Rabs (x ^ n) < / / y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

0 < / y * / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

0 < / y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
0 < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

0 < y
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
0 < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

0 < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

0 < Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

/ y < / Rabs (x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

/ y < Rabs (/ x ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

/ y < Rabs ((/ x) ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

/ y < / y + 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y + 1 <= Rabs ((/ x) ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

(fun r : R => r < / y + 1) (/ y)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y + 1 <= Rabs ((/ x) ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

/ y + 0 < / y + 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y + 1 <= Rabs ((/ x) ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

0 < 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
/ y + 1 <= Rabs ((/ x) ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

/ y + 1 <= Rabs ((/ x) ^ n)
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

Rabs ((/ x) ^ n) >= / y + 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

(n >= N)%nat
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

Rabs (x ^ n) <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

x ^ n <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat
y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

y <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
H2:Rabs (/ x) > 1
N:nat
H3:forall n0 : nat, (n0 >= N)%nat -> Rabs ((/ x) ^ n0) >= / y + 1
n:nat
H4:(n >= N)%nat

y < 0 \/ y > 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

Rabs (/ x) > 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

Rabs (/ x) > / / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
1 <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

/ Rabs x > / / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
1 <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

0 < Rabs x * / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs x < / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
1 <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

0 < Rabs x
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
0 < / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs x < / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
1 <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
0 < / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs x < / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
1 <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

0 < / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
Rabs x < / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
1 <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

Rabs x < / 1
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
1 <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

x <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0
1 <> 0
x:R
H:Rabs x < 1
y:R
H0:0 < y
H1:x <> 0

1 <> 0
red; intro; apply R1_neq_R0; assumption. Qed.

forall (r : R) (n : nat), r ^ n = 1 -> Rabs r = 1 \/ n = 0%nat

forall (r : R) (n : nat), r ^ n = 1 -> Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1

Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1

Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1

Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1

forall n0 : nat, r ^ S n0 = 1 -> Rabs r = 1 \/ S n0 = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1

Rabs r = 1 \/ S n0 = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0

Rabs r = 1 \/ S n0 = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

Rabs r = 1 \/ S n0 = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

~ Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

~ Rabs (/ r) ^ 0 < 1
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
1 = Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

1 = Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

1 = (/ Rabs r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

1 = / Rabs r ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

1 = / Rabs (r ^ S n0)
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

Rabs (/ r) ^ 0 < Rabs (/ r) ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

1 < Rabs (/ r)
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

1 < / Rabs r
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

0 < Rabs r
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
Rabs r * 1 < Rabs r * / Rabs r
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

0 = Rabs r -> 0 < Rabs r
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0
Rabs r * 1 < Rabs r * / Rabs r
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

Rabs r * 1 < Rabs r * / Rabs r
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1

r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r < 1
n0:nat
H'0:r ^ S n0 = 1
H:r = 0

r ^ S n0 <> 1
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1

Rabs r = 1 \/ n = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1

forall n0 : nat, r ^ S n0 = 1 -> Rabs r = 1 \/ S n0 = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1

Rabs r = 1 \/ S n0 = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0

Rabs r = 1 \/ S n0 = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

Rabs r = 1 \/ S n0 = 0%nat
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1
Eq1:r <> 0
Eq2:Rabs r <> 0

~ Rabs r ^ 0 < Rabs r ^ S n0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1
r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1

r <> 0
r:R
n:nat
H':r ^ n = 1
H'1:Rabs r <> 1
H'2:Rabs r > 1
n0:nat
H'0:r ^ S n0 = 1
H:r = 0

r ^ S n0 <> 1
simpl; rewrite H; rewrite Rmult_0_l; auto with real. Qed.

forall (x : R) (n : nat), x ^ (2 * n) = x² ^ n

forall (x : R) (n : nat), x ^ (2 * n) = x² ^ n
x:R

x ^ (2 * 0) = x² ^ 0
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n
x ^ (2 * S n) = x² ^ S n
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n

x ^ (2 * S n) = x² ^ S n
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n

x ^ S (S (2 * n)) = x² ^ S n
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n
S (S (2 * n)) = (2 * S n)%nat
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n

x * x * x ^ (2 * n) = x² ^ S n
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n
x * x * x ^ (2 * n) = x ^ S (S (2 * n))
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n
S (S (2 * n)) = (2 * S n)%nat
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n

x * x * x ^ (2 * n) = x ^ S (S (2 * n))
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n
S (S (2 * n)) = (2 * S n)%nat
x:R
n:nat
Hrecn:x ^ (2 * n) = x² ^ n

S (S (2 * n)) = (2 * S n)%nat
ring. Qed.

forall (a : R) (n : nat), 0 <= a -> 0 <= a ^ n

forall (a : R) (n : nat), 0 <= a -> 0 <= a ^ n
a:R
H:0 <= a

0 <= a ^ 0
a:R
n:nat
H:0 <= a
Hrecn:0 <= a ^ n
0 <= a ^ S n
a:R
n:nat
H:0 <= a
Hrecn:0 <= a ^ n

0 <= a ^ S n
simpl; apply Rmult_le_pos; assumption. Qed. (**********)

forall n : nat, (-1) ^ (2 * n) = 1

forall n : nat, (-1) ^ (2 * n) = 1

(-1) ^ (2 * 0) = 1
n:nat
Hrecn:(-1) ^ (2 * n) = 1
(-1) ^ (2 * S n) = 1
n:nat
Hrecn:(-1) ^ (2 * n) = 1

(-1) ^ (2 * S n) = 1
n:nat
Hrecn:(-1) ^ (2 * n) = 1

(-1) ^ (2 + 2 * n) = 1
rewrite pow_add; rewrite Hrecn; simpl; ring. Qed. (**********)

forall n : nat, (-1) ^ S (2 * n) = -1

forall n : nat, (-1) ^ S (2 * n) = -1
n:nat

(-1) ^ (2 * n + 1) = -1
rewrite pow_add; rewrite pow_1_even; simpl; ring. Qed. (**********)

forall n : nat, Rabs ((-1) ^ n) = 1

forall n : nat, Rabs ((-1) ^ n) = 1

Rabs ((-1) ^ 0) = 1
n:nat
Hrecn:Rabs ((-1) ^ n) = 1
Rabs ((-1) ^ S n) = 1
n:nat
Hrecn:Rabs ((-1) ^ n) = 1

Rabs ((-1) ^ S n) = 1
n:nat
Hrecn:Rabs ((-1) ^ n) = 1

Rabs ((-1) ^ n * (-1) ^ 1) = 1
n:nat
Hrecn:Rabs ((-1) ^ n) = 1

Rabs ((-1) ^ n) * Rabs ((-1) ^ 1) = 1
n:nat
Hrecn:Rabs ((-1) ^ n) = 1

Rabs (-1) = 1
n:nat
Hrecn:Rabs ((-1) ^ n) = 1

Rabs (- (1)) = 1
rewrite Rabs_Ropp; apply Rabs_R1. Qed.

forall (x : R) (n1 n2 : nat), x ^ (n1 * n2) = (x ^ n1) ^ n2

forall (x : R) (n1 n2 : nat), x ^ (n1 * n2) = (x ^ n1) ^ n2
x:R
n1:nat

x ^ (n1 * 0) = (x ^ n1) ^ 0
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2
x ^ (n1 * S n2) = (x ^ n1) ^ S n2
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2

x ^ (n1 * S n2) = (x ^ n1) ^ S n2
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2

x ^ (n1 * n2 + n1) = (x ^ n1) ^ S n2
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2
(n1 * n2 + n1)%nat = (n1 * S n2)%nat
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2

x ^ (n1 * n2 + n1) = (x ^ n1) ^ (n2 + 1)
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2
(n1 * n2 + n1)%nat = (n1 * S n2)%nat
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2

x ^ (n1 * n2) * x ^ n1 = (x ^ n1) ^ n2 * (x ^ n1) ^ 1
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2
(n1 * n2 + n1)%nat = (n1 * S n2)%nat
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2

(x ^ n1) ^ n2 * x ^ n1 = (x ^ n1) ^ n2 * (x ^ n1) ^ 1
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2
(n1 * n2 + n1)%nat = (n1 * S n2)%nat
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2

(x ^ n1) ^ n2 * x ^ n1 = (x ^ n1) ^ n2 * (x ^ n1 * 1)
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2
(n1 * n2 + n1)%nat = (n1 * S n2)%nat
x:R
n1, n2:nat
Hrecn2:x ^ (n1 * n2) = (x ^ n1) ^ n2

(n1 * n2 + n1)%nat = (n1 * S n2)%nat
ring. Qed.

forall (x y : R) (n : nat), 0 <= x <= y -> x ^ n <= y ^ n

forall (x y : R) (n : nat), 0 <= x <= y -> x ^ n <= y ^ n
x, y:R
n:nat
H:0 <= x <= y

x ^ n <= y ^ n
x, y:R
H:0 <= x <= y

x ^ 0 <= y ^ 0
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
x ^ S n <= y ^ S n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n

x ^ S n <= y ^ S n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n

x * x ^ n <= y * y ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y

x * x ^ n <= y * y ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y

x * x ^ n <= y * x ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y
y * x ^ n <= y * y ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y

x ^ n * x <= x ^ n * y
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y
y * x ^ n <= y * y ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y

0 <= x ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y
x <= y
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y
y * x ^ n <= y * y ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y

x <= y
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y
y * x ^ n <= y * y ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y

y * x ^ n <= y * y ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y

0 <= y
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y
x ^ n <= y ^ n
x, y:R
n:nat
H:0 <= x <= y
Hrecn:x ^ n <= y ^ n
H0:0 <= x
H1:x <= y

x ^ n <= y ^ n
apply Hrecn. Qed.

forall (x : R) (k : nat), 1 <= x -> 1 <= x ^ k

forall (x : R) (k : nat), 1 <= x -> 1 <= x ^ k
x:R
k:nat
H:1 <= x

1 <= x ^ k
x:R
H:1 <= x

1 <= x ^ 0
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k
1 <= x ^ S k
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k

1 <= x ^ S k
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k

1 <= x * x ^ k
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k

1 <= x * 1
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k
x * 1 <= x * x ^ k
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k

x * 1 <= x * x ^ k
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k

0 <= x
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k
1 <= x ^ k
x:R
k:nat
H:1 <= x
Hreck:1 <= x ^ k

1 <= x ^ k
exact Hreck. Qed.

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
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

x ^ m <= x ^ n
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

x ^ m <= x ^ (n - m + m)
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat
(n - m + m)%nat = n
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

x ^ m <= x ^ (n - m) * x ^ m
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat
(n - m + m)%nat = n
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

x ^ m <= x ^ m * x ^ (n - m)
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat
(n - m + m)%nat = n
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

x ^ m * 1 <= x ^ m * x ^ (n - m)
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat
(n - m + m)%nat = n
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

0 <= x ^ m
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat
1 <= x ^ (n - m)
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat
(n - m + m)%nat = n
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

1 <= x ^ (n - m)
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat
(n - m + m)%nat = n
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

(n - m + m)%nat = n
x:R
m, n:nat
H:1 <= x
H0:(m <= n)%nat

(m + (n - m))%nat = n
symmetry ; apply le_plus_minus; assumption. Qed.

forall n : nat, 1 ^ n = 1

forall n : nat, 1 ^ n = 1

1 ^ 0 = 1
n:nat
Hrecn:1 ^ n = 1
1 ^ S n = 1
n:nat
Hrecn:1 ^ n = 1

1 ^ S n = 1
simpl; rewrite Hrecn; rewrite Rmult_1_r; reflexivity. Qed.

forall (x : R) (n : nat), x ^ n <= Rabs x ^ n

forall (x : R) (n : nat), x ^ n <= Rabs x ^ n
x:R

x ^ 0 <= Rabs x ^ 0
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
x ^ S n <= Rabs x ^ S n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n

x ^ S n <= Rabs x ^ S n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hlt:x < 0

x * x ^ n <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0
x * x ^ n <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hlt:x < 0

x * x ^ n <= Rabs (x * x ^ n)
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hlt:x < 0
Rabs (x * x ^ n) <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0
x * x ^ n <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hlt:x < 0

Rabs (x * x ^ n) <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0
x * x ^ n <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hlt:x < 0

Rabs x * Rabs (x ^ n) <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0
x * x ^ n <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hlt:x < 0

0 <= Rabs x
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hlt:x < 0
Rabs (x ^ n) <= Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0
x * x ^ n <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hlt:x < 0

Rabs (x ^ n) <= Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0
x * x ^ n <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0

x * x ^ n <= Rabs x * Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0

0 <= x
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0
x ^ n <= Rabs x ^ n
x:R
n:nat
Hrecn:x ^ n <= Rabs x ^ n
Hle:x >= 0

x ^ n <= Rabs x ^ n
apply Hrecn. Qed.

forall (x y : R) (n : nat), Rabs y <= x -> y ^ n <= x ^ n

forall (x y : R) (n : nat), Rabs y <= x -> y ^ n <= x ^ n
x, y:R
n:nat
H:Rabs y <= x

0 <= x -> y ^ n <= x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x

y ^ n <= Rabs y ^ n
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Rabs y ^ n <= x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x

Rabs y ^ n <= x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
H:Rabs y <= x
H0:0 <= x

Rabs y ^ 0 <= x ^ 0
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n
Rabs y ^ S n <= x ^ S n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n

Rabs y ^ S n <= x ^ S n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n

Rabs y * Rabs y ^ n <= x * Rabs y ^ n
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n
x * Rabs y ^ n <= x * x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n

Rabs y ^ n * Rabs y <= Rabs y ^ n * x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n
x * Rabs y ^ n <= x * x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n

0 <= Rabs y ^ n
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n
Rabs y <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n
x * Rabs y ^ n <= x * x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n

Rabs y <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n
x * Rabs y ^ n <= x * x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n

x * Rabs y ^ n <= x * x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n

0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n
Rabs y ^ n <= x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x
H0:0 <= x
Hrecn:Rabs y ^ n <= x ^ n

Rabs y ^ n <= x ^ n
x, y:R
n:nat
H:Rabs y <= x
0 <= x
x, y:R
n:nat
H:Rabs y <= x

0 <= x
apply Rle_trans with (Rabs y); [ apply Rabs_pos | exact H ]. Qed.

forall x : R, x² = x ^ 2

forall x : R, x² = x ^ 2
intros; unfold Rsqr; simpl; rewrite Rmult_1_r; reflexivity. Qed. (*******************************)

PowerRZ

(*******************************)
(*i Due to L.Thery i*)

Section PowerRZ.

Coercion Z_of_nat : nat >-> Z.

(* the following section should probably be somewhere else, but not sure where *)
Section Z_compl.

Local Open Scope Z_scope.

(* Provides a way to reason directly on Z in terms of nats instead of positive *)
Inductive Z_spec (x : Z) : Z -> Type :=
| ZintNull : x = 0 -> Z_spec x 0
| ZintPos (n : nat) : x = n -> Z_spec x n
| ZintNeg (n : nat) : x = - n -> Z_spec x (- n).

x:Z

Z_spec x x
x:Z

Z_spec x x

Z_spec 0 0
p:positive
Z_spec (Z.pos p) (Z.pos p)
p:positive
Z_spec (Z.neg p) (Z.neg p)

Z_spec 0 0
now apply ZintNull.
p:positive

Z_spec (Z.pos p) (Z.pos p)
p:positive

Z_spec (Z.pos p) (Pos.to_nat p)
p:positive

Z.pos p = Pos.to_nat p
now rewrite positive_nat_Z.
p:positive

Z_spec (Z.neg p) (Z.neg p)
p:positive

Z_spec (- Z.pos p) (- Z.pos p)
p:positive

Z_spec (- Z.pos p) (- Pos.to_nat p)
p:positive

- Z.pos p = - Pos.to_nat p
now rewrite positive_nat_Z. Qed. End Z_compl. Definition powerRZ (x:R) (n:Z) := match n with | Z0 => 1 | Zpos p => x ^ Pos.to_nat p | Zneg p => / x ^ Pos.to_nat p end. Local Infix "^Z" := powerRZ (at level 30, right associativity) : R_scope.

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
induction n; unfold Zpower_nat; simpl; auto with zarith. Qed.

forall x : R, x ^Z 0 = 1

forall x : R, x ^Z 0 = 1
reflexivity. Qed.

forall x : R, x ^Z Z.succ 0 = x

forall x : R, x ^Z Z.succ 0 = x
simpl; auto with real. Qed.

forall (x : R) (z : Z), x <> 0 -> x ^Z z <> 0

forall (x : R) (z : Z), x <> 0 -> x ^Z z <> 0
destruct z; simpl; auto with real. Qed.
x:R
n, m:positive

x <> 0 -> x ^Z Z.pos_sub n m = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive

x <> 0 -> x ^Z Z.pos_sub n m = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0

x ^Z Z.pos_sub n m = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0

x ^Z match (n ?= m)%positive with | Eq => 0 | Lt => Z.neg (m - n) | Gt => Z.pos (n - m) end = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:n = m

1 = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(n < m)%positive
/ x ^ Pos.to_nat (m - n) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(m < n)%positive
x ^ Pos.to_nat (n - m) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:n = m

1 = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
subst; auto with real.
x:R
n, m:positive
Hx:x <> 0
H:(n < m)%positive

/ x ^ Pos.to_nat (m - n) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(n < m)%positive

/ x ^ (Pos.to_nat m - Pos.to_nat n) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(Pos.to_nat n < Pos.to_nat m)%nat

/ x ^ (Pos.to_nat m - Pos.to_nat n) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(Pos.to_nat n < Pos.to_nat m)%nat

/ (x ^ (Pos.to_nat m - Pos.to_nat n + Pos.to_nat n) * / x ^ Pos.to_nat n) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(Pos.to_nat n < Pos.to_nat m)%nat

/ (x ^ Pos.to_nat m * / x ^ Pos.to_nat n) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
rewrite Rinv_mult_distr, Rinv_involutive; auto with real.
x:R
n, m:positive
Hx:x <> 0
H:(m < n)%positive

x ^ Pos.to_nat (n - m) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(m < n)%positive

x ^ (Pos.to_nat n - Pos.to_nat m) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(Pos.to_nat m < Pos.to_nat n)%nat

x ^ (Pos.to_nat n - Pos.to_nat m) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(Pos.to_nat m < Pos.to_nat n)%nat

x ^ (Pos.to_nat n - Pos.to_nat m + Pos.to_nat m) * / x ^ Pos.to_nat m = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
Hx:x <> 0
H:(Pos.to_nat m < Pos.to_nat n)%nat

x ^ Pos.to_nat n * / x ^ Pos.to_nat m = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
reflexivity. Qed.

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
x:R
n, m:positive
H:x <> 0

x ^ Pos.to_nat (n + m) = x ^ Pos.to_nat n * x ^ Pos.to_nat m
x:R
n, m:positive
H:x <> 0
x ^Z Z.pos_sub n m = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
H:x <> 0
x ^Z Z.pos_sub m n = / x ^ Pos.to_nat n * x ^ Pos.to_nat m
x:R
n, m:positive
H:x <> 0
/ x ^ Pos.to_nat (n + m) = / x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
H:x <> 0

x ^ Pos.to_nat (n + m) = x ^ Pos.to_nat n * x ^ Pos.to_nat m
rewrite Pos2Nat.inj_add; auto with real.
x:R
n, m:positive
H:x <> 0

x ^Z Z.pos_sub n m = x ^ Pos.to_nat n * / x ^ Pos.to_nat m
now apply powerRZ_pos_sub.
x:R
n, m:positive
H:x <> 0

x ^Z Z.pos_sub m n = / x ^ Pos.to_nat n * x ^ Pos.to_nat m
x:R
n, m:positive
H:x <> 0

x ^Z Z.pos_sub m n = x ^ Pos.to_nat m * / x ^ Pos.to_nat n
now apply powerRZ_pos_sub.
x:R
n, m:positive
H:x <> 0

/ x ^ Pos.to_nat (n + m) = / x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
H:x <> 0

/ x ^ (Pos.to_nat n + Pos.to_nat m) = / x ^ Pos.to_nat n * / x ^ Pos.to_nat m
x:R
n, m:positive
H:x <> 0

/ (x ^ Pos.to_nat n * x ^ Pos.to_nat m) = / x ^ Pos.to_nat n * / x ^ Pos.to_nat m
apply Rinv_mult_distr; apply pow_nonzero; auto. Qed. Hint Resolve powerRZ_O powerRZ_1 powerRZ_NOR powerRZ_add: real.

forall n m : nat, IZR (Zpower_nat n m) = INR n ^Z m

forall n m : nat, IZR (Zpower_nat n m) = INR n ^Z m
n, m:nat

forall n0 : nat, IZR (Zpower_nat n n0) = INR n ^Z n0 -> IZR (n * Zpower_nat n n0) = INR n ^ Pos.to_nat (Pos.of_succ_nat n0)
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1

IZR (n * Zpower_nat n m1) = INR n * INR n ^ m1
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1

IZR (n * Zpower_nat n m1) = INR n * INR n ^ m1
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1
(n * Zpower_nat n m1)%Z = Zpower_nat n (S m1)
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1

IZR n * IZR (Zpower_nat n m1) = INR n * INR n ^ m1
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1
(n * Zpower_nat n m1)%Z = Zpower_nat n (S m1)
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1

INR n * IZR (Zpower_nat n m1) = INR n * INR n ^ m1
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1
(n * Zpower_nat n m1)%Z = Zpower_nat n (S m1)
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1

INR n * INR n ^Z m1 = INR n * INR n ^ m1
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1
(n * Zpower_nat n m1)%Z = Zpower_nat n (S m1)
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1

forall n0 : nat, INR n * INR n ^ Pos.to_nat (Pos.of_succ_nat n0) = INR n * (INR n * INR n ^ n0)
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1
(n * Zpower_nat n m1)%Z = Zpower_nat n (S m1)
n, m, m1:nat
H':IZR (Zpower_nat n m1) = INR n ^Z m1

(n * Zpower_nat n m1)%Z = Zpower_nat n (S m1)
unfold Zpower_nat; auto. Qed.

forall (n : Z) (m : positive), IZR (Z.pow_pos n m) = IZR n ^Z Z.pos m

forall (n : Z) (m : positive), IZR (Z.pow_pos n m) = IZR n ^Z Z.pos m
n:Z
m:positive

IZR (Z.pow_pos n m) = IZR n ^Z Z.pos m
n:Z
m:positive

IZR (Zpower_nat n (Pos.to_nat m)) = IZR n ^ Pos.to_nat m
n:Z
m:positive

IZR (Zpower_nat n 0) = IZR n ^ 0
n:Z
m:positive
n0:nat
IHn0:IZR (Zpower_nat n n0) = IZR n ^ n0
IZR (Zpower_nat n (S n0)) = IZR n ^ S n0
n:Z
m:positive
n0:nat
IHn0:IZR (Zpower_nat n n0) = IZR n ^ n0

IZR (Zpower_nat n (S n0)) = IZR n ^ S n0
n:Z
m:positive
n0:nat
IHn0:IZR (Zpower_nat n n0) = IZR n ^ n0

IZR (n * nat_rect (fun _ : nat => Z) 1%Z (fun _ : nat => Z.mul n) n0) = IZR n * IZR n ^ n0
n:Z
m:positive
n0:nat
IHn0:IZR (Zpower_nat n n0) = IZR n ^ n0

IZR n * IZR (nat_rect (fun _ : nat => Z) 1%Z (fun _ : nat => Z.mul n) n0) = IZR n * IZR n ^ n0
now rewrite <- IHn0. Qed.

forall (x : R) (z : Z), 0 < x -> 0 < x ^Z z

forall (x : R) (z : Z), 0 < x -> 0 < x ^Z z
intros x z; case z; simpl; auto with real. Qed. Hint Resolve powerRZ_lt: real.

forall (x : R) (z : Z), 0 < x -> 0 <= x ^Z z

forall (x : R) (z : Z), 0 < x -> 0 <= x ^Z z
intros x z H'; apply Rlt_le; auto with real. Qed. Hint Resolve powerRZ_le: real.

forall n m : Z, (0 <= m)%Z -> IZR (Zpower_nat n (Z.abs_nat m)) = IZR n ^Z m

forall n m : Z, (0 <= m)%Z -> IZR (Zpower_nat n (Z.abs_nat m)) = IZR n ^Z m
n, m:Z

forall p : positive, (0 <= Z.pos p)%Z -> IZR (Zpower_nat n (Pos.to_nat p)) = IZR n ^ Pos.to_nat p
n, m:Z
forall p : positive, (0 <= Z.neg p)%Z -> IZR (Zpower_nat n (Pos.to_nat p)) = / IZR n ^ Pos.to_nat p
n, m:Z
p:positive
H':(0 <= Z.pos p)%Z

forall n0 : nat, IZR (Zpower_nat n n0) = IZR n ^ n0 -> IZR (n * Zpower_nat n n0) = IZR n * IZR n ^ n0
n, m:Z
forall p : positive, (0 <= Z.neg p)%Z -> IZR (Zpower_nat n (Pos.to_nat p)) = / IZR n ^ Pos.to_nat p
n, m:Z
p:positive
H':(0 <= Z.pos p)%Z
n0:nat
H'0:IZR (Zpower_nat n n0) = IZR n ^ n0

IZR (n * Zpower_nat n n0) = IZR n * IZR (Zpower_nat n n0)
n, m:Z
forall p : positive, (0 <= Z.neg p)%Z -> IZR (Zpower_nat n (Pos.to_nat p)) = / IZR n ^ Pos.to_nat p
n, m:Z

forall p : positive, (0 <= Z.neg p)%Z -> IZR (Zpower_nat n (Pos.to_nat p)) = / IZR n ^ Pos.to_nat p
intros p H'; absurd (0 <= Zneg p)%Z; auto with zarith. Qed.

forall n : Z, 1 ^Z n = 1

forall n : Z, 1 ^Z n = 1
n:Z

forall p : positive, 1 ^ Pos.to_nat p = 1
n:Z
forall p : positive, / 1 ^ Pos.to_nat p = 1
n:Z

forall p : positive, / 1 ^ Pos.to_nat p = 1
n:Z
p:positive

/ 1 = 1
n:Z
p:positive
forall n0 : nat, / 1 ^ n0 = 1 -> / (1 * 1 ^ n0) = 1
n:Z
p:positive

forall n0 : nat, / 1 ^ n0 = 1 -> / (1 * 1 ^ n0) = 1
intros n1 H'; rewrite Rinv_mult_distr; try rewrite Rinv_1; try rewrite H'; auto with real. Qed. Local Open Scope Z_scope.
r:R
n:nat

(r ^ n)%R = r ^Z n
r:R
n:nat

(r ^ n)%R = r ^Z n
r:R
n:nat
IHn:(r ^ n)%R = r ^Z n

(r * r ^ n)%R = (r ^ Pos.to_nat (Pos.of_succ_nat n))%R
now rewrite SuccNat2Pos.id_succ. Qed.
P:Z -> R -> R -> Prop

(forall x : R, P 0 x 1%R) -> (forall (x : R) (n : nat), P n x (x ^ n)%R) -> (forall (x : R) (n : nat), P (- n) x (/ x ^ n)) -> forall (x : R) (m : Z), P m x (x ^Z m)
P:Z -> R -> R -> Prop

(forall x : R, P 0 x 1%R) -> (forall (x : R) (n : nat), P n x (x ^ n)%R) -> (forall (x : R) (n : nat), P (- n) x (/ x ^ n)) -> forall (x : R) (m : Z), P m x (x ^Z m)
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n : nat), P n x0 (x0 ^ n)%R
H1:forall (x0 : R) (n : nat), P (- n) x0 (/ x0 ^ n)
x:R
m:Z

P m x (x ^Z m)
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n : nat), P n x0 (x0 ^ n)%R
H1:forall (x0 : R) (n : nat), P (- n) x0 (/ x0 ^ n)
x:R
m:Z
Hm:m = 0

P 0 x (x ^Z 0)
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n0 : nat), P n0 x0 (x0 ^ n0)%R
H1:forall (x0 : R) (n0 : nat), P (- n0) x0 (/ x0 ^ n0)
x:R
m:Z
n:nat
Hm:m = n
P n x (x ^Z n)
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n0 : nat), P n0 x0 (x0 ^ n0)%R
H1:forall (x0 : R) (n0 : nat), P (- n0) x0 (/ x0 ^ n0)
x:R
m:Z
n:nat
Hm:m = - n
P (- n) x (x ^Z (- n))
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n : nat), P n x0 (x0 ^ n)%R
H1:forall (x0 : R) (n : nat), P (- n) x0 (/ x0 ^ n)
x:R
m:Z
Hm:m = 0

P 0 x (x ^Z 0)
easy.
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n0 : nat), P n0 x0 (x0 ^ n0)%R
H1:forall (x0 : R) (n0 : nat), P (- n0) x0 (/ x0 ^ n0)
x:R
m:Z
n:nat
Hm:m = n

P n x (x ^Z n)
now rewrite <- pow_powerRZ.
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n0 : nat), P n0 x0 (x0 ^ n0)%R
H1:forall (x0 : R) (n0 : nat), P (- n0) x0 (/ x0 ^ n0)
x:R
m:Z
n:nat
Hm:m = - n

P (- n) x (x ^Z (- n))
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n0 : nat), P n0 x0 (x0 ^ n0)%R
H1:forall (x0 : R) (n0 : nat), P (- n0) x0 (/ x0 ^ n0)
x:R
m:Z
n:nat
Hm:m = - n

P (- n) x match - n with | 0 => 1%R | Z.pos p => (x ^ Pos.to_nat p)%R | Z.neg p => / x ^ Pos.to_nat p end
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n0 : nat), P n0 x0 (x0 ^ n0)%R
H1:forall (x0 : R) (n0 : nat), P (- n0) x0 (/ x0 ^ n0)
x:R
m:Z
n:nat
Hm:m = - S n

P (- S n) x match - S n with | 0 => 1%R | Z.pos p => (x ^ Pos.to_nat p)%R | Z.neg p => / x ^ Pos.to_nat p end
P:Z -> R -> R -> Prop
H:forall x0 : R, P 0 x0 1%R
H0:forall (x0 : R) (n0 : nat), P n0 x0 (x0 ^ n0)%R
H1:forall (x0 : R) (n0 : nat), P (- n0) x0 (/ x0 ^ n0)
x:R
m:Z
n:nat
Hm:m = - S n

P (Z.neg (Pos.of_succ_nat n)) x (/ x ^ Pos.to_nat (Pos.of_succ_nat n))
now rewrite <- Pos2Z.opp_pos, <- positive_nat_Z. Qed.
x:R
alpha:Z

x <> 0%R -> (/ x) ^Z alpha = / x ^Z alpha
x:R
alpha:Z

x <> 0%R -> (/ x) ^Z alpha = / x ^Z alpha
x:R
alpha:Z
H:x <> 0%R
e:alpha = 0

(/ x) ^Z 0 = / x ^Z 0
x:R
alpha:Z
H:x <> 0%R
n:nat
e:alpha = n
(/ x) ^Z n = / x ^Z n
x:R
alpha:Z
H:x <> 0%R
n:nat
e:alpha = - n
(/ x) ^Z (- n) = / x ^Z (- n)
x:R
alpha:Z
H:x <> 0%R
e:alpha = 0

(/ x) ^Z 0 = / x ^Z 0
now simpl; rewrite Rinv_1.
x:R
alpha:Z
H:x <> 0%R
n:nat
e:alpha = n

(/ x) ^Z n = / x ^Z n
now rewrite <-!pow_powerRZ, ?Rinv_pow, ?pow_powerRZ.
x:R
alpha:Z
H:x <> 0%R
n:nat
e:alpha = - n

(/ x) ^Z (- n) = / x ^Z (- n)
x:R
alpha:Z
H:x <> 0%R
n:nat
e:alpha = - n

match - n with | 0 => 1%R | Z.pos p => ((/ x) ^ Pos.to_nat p)%R | Z.neg p => / (/ x) ^ Pos.to_nat p end = / match - n with | 0%Z => 1 | Z.pos p => x ^ Pos.to_nat p | Z.neg p => / x ^ Pos.to_nat p end
x:R
alpha:Z
H:x <> 0%R
n:nat
e:alpha = 0

1%R = / 1
x:R
alpha:Z
H:x <> 0%R
n:nat
p:positive
e:alpha = Z.pos p
((/ x) ^ Pos.to_nat p)%R = / x ^ Pos.to_nat p
x:R
alpha:Z
H:x <> 0%R
n:nat
p:positive
e:alpha = Z.neg p
/ (/ x) ^ Pos.to_nat p = / / x ^ Pos.to_nat p
x:R
alpha:Z
H:x <> 0%R
n:nat
e:alpha = 0

1%R = / 1
now rewrite Rinv_1.
x:R
alpha:Z
H:x <> 0%R
n:nat
p:positive
e:alpha = Z.pos p

((/ x) ^ Pos.to_nat p)%R = / x ^ Pos.to_nat p
now rewrite Rinv_pow.
x:R
alpha:Z
H:x <> 0%R
n:nat
p:positive
e:alpha = Z.neg p

/ (/ x) ^ Pos.to_nat p = / / x ^ Pos.to_nat p
now rewrite <-Rinv_pow. Qed.
x:R

forall alpha : Z, x <> R0 -> x ^Z (- alpha) = (/ x) ^Z alpha
x:R

forall alpha : Z, x <> R0 -> x ^Z (- alpha) = (/ x) ^Z alpha
x:R
H:x <> R0

1%R = 1%R
x:R
n:positive
H:x <> R0
/ x ^ Pos.to_nat n = ((/ x) ^ Pos.to_nat n)%R
x:R
n:positive
H:x <> R0
(x ^ Pos.to_nat n)%R = / (/ x) ^ Pos.to_nat n
x:R
H:x <> R0

1%R = 1%R
easy.
x:R
n:positive
H:x <> R0

/ x ^ Pos.to_nat n = ((/ x) ^ Pos.to_nat n)%R
now rewrite Rinv_pow.
x:R
n:positive
H:x <> R0

(x ^ Pos.to_nat n)%R = / (/ x) ^ Pos.to_nat n
x:R
n:positive
H:x <> R0

(x ^ Pos.to_nat n)%R = ((/ / x) ^ Pos.to_nat n)%R
now rewrite Rinv_involutive. Qed.

forall (m : Z) (x y : R), 0 <= m \/ (x * y)%R <> 0%R -> (x * y) ^Z m = (x ^Z m * y ^Z m)%R

forall (m : Z) (x y : R), 0 <= m \/ (x * y)%R <> 0%R -> (x * y) ^Z m = (x ^Z m * y ^Z m)%R
m:Z
x0, y0:R
Hmxy:0 <= m \/ (x0 * y0)%R <> 0%R

(x0 * y0) ^Z m = (x0 ^Z m * y0 ^Z m)%R
m:Z
x0, y0:R
Hmxy:0 <= m \/ (x0 * y0)%R <> 0%R
e:m = 0

(x0 * y0) ^Z 0 = (x0 ^Z 0 * y0 ^Z 0)%R
m:Z
x0, y0:R
Hmxy:0 <= m \/ (x0 * y0)%R <> 0%R
n:nat
e:m = n
(x0 * y0) ^Z n = (x0 ^Z n * y0 ^Z n)%R
m:Z
x0, y0:R
Hmxy:0 <= m \/ (x0 * y0)%R <> 0%R
n:nat
Hm:m = - n
(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
m:Z
x0, y0:R
Hmxy:0 <= m \/ (x0 * y0)%R <> 0%R
e:m = 0

(x0 * y0) ^Z 0 = (x0 ^Z 0 * y0 ^Z 0)%R
now simpl; rewrite Rmult_1_l.
m:Z
x0, y0:R
Hmxy:0 <= m \/ (x0 * y0)%R <> 0%R
n:nat
e:m = n

(x0 * y0) ^Z n = (x0 ^Z n * y0 ^Z n)%R
now rewrite <- !pow_powerRZ, Rpow_mult_distr.
m:Z
x0, y0:R
Hmxy:0 <= m \/ (x0 * y0)%R <> 0%R
n:nat
Hm:m = - n

(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
m:Z
x0, y0:R
H:0 <= m
n:nat
Hm:m = - n

(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
m:Z
x0, y0:R
H:(x0 * y0)%R <> 0%R
n:nat
Hm:m = - n
(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
m:Z
x0, y0:R
H:0 <= m
n:nat
Hm:m = - n

(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
x0, y0:R
H:0 <= 0
n:nat
Hm:0 = - n

(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
now rewrite <- Hm, Rmult_1_l.
m:Z
x0, y0:R
H:(x0 * y0)%R <> 0%R
n:nat
Hm:m = - n

(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
m:Z
x0, y0:R
H:(x0 * y0)%R <> 0%R
n:nat
Hm:m = - n
H0:x0 <> 0%R

(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
m:Z
x0, y0:R
H:(x0 * y0)%R <> 0%R
n:nat
Hm:m = - n
H0:x0 <> 0%R
H1:y0 <> 0%R

(x0 * y0) ^Z (- n) = (x0 ^Z (- n) * y0 ^Z (- n))%R
m:Z
x0, y0:R
H:(x0 * y0)%R <> 0%R
n:nat
Hm:m = - n
H0:x0 <> 0%R
H1:y0 <> 0%R

(/ (x0 * y0)) ^Z n = ((/ x0) ^Z n * (/ y0) ^Z n)%R
m:Z
x0, y0:R
H:(x0 * y0)%R <> 0%R
n:nat
Hm:m = - n
H0:x0 <> 0%R
H1:y0 <> 0%R

(/ x0 * / y0) ^Z n = ((/ x0) ^Z n * (/ y0) ^Z n)%R
now rewrite <- !pow_powerRZ, Rpow_mult_distr. Qed. End PowerRZ. Local Infix "^Z" := powerRZ (at level 30, right associativity) : R_scope. (*******************************) (* 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

(*******************************)
(*********)
Fixpoint sum_nat_f_O (f:nat -> nat) (n:nat) : nat :=
  match n with
    | O => f 0%nat
    | S n' => (sum_nat_f_O f n' + f (S n'))%nat
  end.

(*********)
Definition sum_nat_f (s n:nat) (f:nat -> nat) : nat :=
  sum_nat_f_O (fun x:nat => f (x + s)%nat) (n - s).

(*********)
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

(*******************************)
(*********)
Fixpoint sum_f_R0 (f:nat -> R) (N:nat) : R :=
  match N with
    | O => f 0%nat
    | S i => sum_f_R0 f i + f (S i)
  end.

(*********)
Definition sum_f (s n:nat) (f:nat -> R) : R :=
  sum_f_R0 (fun x:nat => f (x + s)%nat) (n - s).


forall (x : R) (n : nat), sum_f_R0 (fun n0 : nat => x ^ n0) n * (x - 1) = x ^ (n + 1) - 1

forall (x : R) (n : nat), sum_f_R0 (fun n0 : nat => x ^ n0) n * (x - 1) = x ^ (n + 1) - 1
x:R

1 * (x - 1) = x * 1 - 1
x:R
n:nat
Hrecn:sum_f_R0 (fun n0 : nat => x ^ n0) n * (x - 1) = x ^ (n + 1) - 1
(sum_f_R0 (fun n0 : nat => x ^ n0) n + x * x ^ n) * (x - 1) = x * x ^ (n + 1) - 1
x:R
n:nat
Hrecn:sum_f_R0 (fun n0 : nat => x ^ n0) n * (x - 1) = x ^ (n + 1) - 1

(sum_f_R0 (fun n0 : nat => x ^ n0) n + x * x ^ n) * (x - 1) = x * x ^ (n + 1) - 1
x:R
n:nat
Hrecn:sum_f_R0 (fun n0 : nat => x ^ n0) n * (x - 1) = x ^ (n + 1) - 1

(n + 1)%nat = S n -> x ^ (n + 1) - 1 + x * x ^ n * (x - 1) = x * x ^ (n + 1) - 1
x:R
n:nat
Hrecn:sum_f_R0 (fun n0 : nat => x ^ n0) n * (x - 1) = x ^ (n + 1) - 1
(n + 1)%nat = S n
x:R
n:nat
Hrecn:sum_f_R0 (fun n0 : nat => x ^ n0) n * (x - 1) = x ^ (n + 1) - 1

(n + 1)%nat = S n
omega. Qed.

forall (x : nat -> R) (n : nat), Rabs (sum_f_R0 x n) <= sum_f_R0 (fun i : nat => Rabs (x i)) n

forall (x : nat -> R) (n : nat), Rabs (sum_f_R0 x n) <= sum_f_R0 (fun i : nat => Rabs (x i)) n
x:nat -> R
n:nat

Rabs (x 0%nat) <= Rabs (x 0%nat)
x:nat -> R
n:nat
forall n0 : nat, Rabs (sum_f_R0 x n0) <= sum_f_R0 (fun i : nat => Rabs (x i)) n0 -> Rabs (sum_f_R0 x n0 + x (S n0)) <= sum_f_R0 (fun i : nat => Rabs (x i)) n0 + Rabs (x (S n0))
x:nat -> R
n:nat

forall n0 : nat, Rabs (sum_f_R0 x n0) <= sum_f_R0 (fun i : nat => Rabs (x i)) n0 -> Rabs (sum_f_R0 x n0 + x (S n0)) <= sum_f_R0 (fun i : nat => Rabs (x i)) n0 + Rabs (x (S n0))
x:nat -> R
n, m:nat
H:Rabs (sum_f_R0 x m) <= sum_f_R0 (fun i : nat => Rabs (x i)) m

Rabs (sum_f_R0 x m + x (S m)) <= Rabs (sum_f_R0 x m) + Rabs (x (S m))
x:nat -> R
n, m:nat
H:Rabs (sum_f_R0 x m) <= sum_f_R0 (fun i : nat => Rabs (x i)) 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))
x:nat -> R
n, m:nat
H:Rabs (sum_f_R0 x m) <= sum_f_R0 (fun i : nat => Rabs (x i)) 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))
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

(*******************************)

(*********)
Definition R_dist (x y:R) : R := Rabs (x - y).

(*********)

forall x y : R, R_dist x y >= 0

forall x y : R, R_dist x y >= 0
x, y:R
l:x - y < 0

- (x - y) >= 0
x, y:R
l:x - y >= 0
x - y >= 0
x, y:R
l:x - y >= 0

x - y >= 0
trivial. Qed. (*********)

forall x y : R, R_dist x y = R_dist y x

forall x y : R, R_dist x y = R_dist y x
x, y:R
Hlt:x - y < 0
Hlt0:y - x < 0

- (x - y) = - (y - x)
x, y:R
Hge:x - y >= 0
Hge0:y - x >= 0
x - y = y - x
x, y:R
Hge:x - y >= 0
Hge0:y - x >= 0

x - y = y - x
generalize (minus_Rge y x Hge0); intro; generalize (minus_Rge x y Hge); intro; generalize (Rge_antisym x y H0 H); intro; rewrite H1; ring. Qed. (*********)

forall x y : R, R_dist x y = 0 <-> x = y

forall x y : R, R_dist x y = 0 <-> x = y
x, y:R
Hlt:x - y < 0
H:- (x - y) = 0

x = y
x, y:R
Hlt:x - y < 0
H:x = y
- (x - y) = 0
x, y:R
Hge:x - y >= 0
H:x - y = 0
x = y
x, y:R
Hge:x - y >= 0
H:x = y
x - y = 0
x, y:R
Hlt:x - y < 0
H:x = y

- (x - y) = 0
x, y:R
Hge:x - y >= 0
H:x - y = 0
x = y
x, y:R
Hge:x - y >= 0
H:x = y
x - y = 0
x, y:R
Hge:x - y >= 0
H:x - y = 0

x = y
x, y:R
Hge:x - y >= 0
H:x = y
x - y = 0
x, y:R
Hge:x - y >= 0
H:x = y

x - y = 0
apply (Rminus_diag_eq x y H). Qed.

forall x : R, R_dist x x = 0

forall x : R, R_dist x x = 0
unfold R_dist; intros; split_Rabs; intros; ring. Qed. (***********)

forall x y z : R, R_dist x y <= R_dist x z + R_dist z y

forall x y z : R, R_dist x y <= R_dist x z + R_dist z y
intros; unfold R_dist; replace (x - y) with (x - z + (z - y)); [ apply (Rabs_triang (x - z) (z - y)) | ring ]. Qed. (*********)

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
a, b, c, d:R

Rabs (a - b + (c - d)) <= Rabs (a - b) + Rabs (c - d)
a, b, c, d:R
a - b + (c - d) = a + c - (b + d)
a, b, c, d:R

a - b + (c - d) = a + c - (b + d)
ring. Qed.

forall a b c : R, R_dist (a * b) (a * c) = Rabs a * R_dist b c

forall a b c : R, R_dist (a * b) (a * c) = Rabs a * R_dist b c

forall a b c : R, Rabs (a * b - a * c) = Rabs a * Rabs (b - c)
intros a b c; rewrite <- Rmult_minus_distr_l, Rabs_mult; reflexivity. Qed. (*******************************)

Infinite Sum

(*******************************)
(*********)
Definition infinite_sum (s:nat -> R) (l:R) : Prop :=
  forall eps:R,
    eps > 0 ->
    exists N : nat,
      (forall n:nat, (n >= N)%nat -> R_dist (sum_f_R0 s n) l < eps).
Compatibility with previous versions
Notation infinit_sum := infinite_sum (only parsing).