Section PowerRZ.
Local Coercion Z_of_nat : nat >-> Z.
Section Z_compl.
Local Open Scope Z_scope.
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).
Lemma intP (
x :
Z) :
Z_spec x x.
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.
Lemma Zpower_NR0 :
forall (
x:
Z) (
n:
nat), (0
<= x)%
Z -> (0
<= Zpower_nat x n)%
Z.
Lemma powerRZ_O :
forall x:
R,
x ^Z 0
= 1.
Lemma powerRZ_1 :
forall x:
R,
x ^Z Z.succ 0
= x.
Lemma powerRZ_NOR :
forall (
x:
R) (
z:
Z),
x <> 0
-> x ^Z z <> 0.
Lemma powerRZ_pos_sub (
x:
R) (
n m:
positive) :
x <> 0
->
x ^Z (Z.pos_sub n m) = x ^ Pos.to_nat n * / x ^ Pos.to_nat m.
Lemma powerRZ_add :
forall (
x:
R) (
n m:
Z),
x <> 0
-> x ^Z (n + m) = x ^Z n * x ^Z m.
#[
local]
Hint Resolve powerRZ_O powerRZ_1 powerRZ_NOR powerRZ_add:
real.
Lemma Zpower_nat_powerRZ :
forall n m:
nat,
IZR (
Zpower_nat (
Z.of_nat n)
m)
= INR n ^Z Z.of_nat m.
Lemma Zpower_pos_powerRZ :
forall n m,
IZR (
Z.pow_pos n m)
= IZR n ^Z Zpos m.
Lemma powerRZ_lt :
forall (
x:
R) (
z:
Z), 0
< x -> 0
< x ^Z z.
#[
local]
Hint Resolve powerRZ_lt:
real.
Lemma powerRZ_le :
forall (
x:
R) (
z:
Z), 0
< x -> 0
<= x ^Z z.
#[
local]
Hint Resolve powerRZ_le:
real.
Lemma Zpower_nat_powerRZ_absolu :
forall n m:
Z, (0
<= m)%
Z -> IZR (
Zpower_nat n (
Z.abs_nat m))
= IZR n ^Z m.
Lemma powerRZ_R1 :
forall n:
Z, 1
^Z n = 1.
Local Open Scope Z_scope.
Lemma pow_powerRZ (
r :
R) (
n :
nat) :
(
r ^ n)%
R = powerRZ r (
Z_of_nat n).
Lemma powerRZ_ind (
P :
Z -> R -> R -> Prop) :
(forall x,
P 0
x 1%
R) ->
(forall x n,
P (
Z.of_nat n)
x (
x ^ n)%
R) ->
(forall x n,
P ((
-(Z.of_nat n))%
Z)
x (
Rinv (
x ^ n))
) ->
forall x (
m :
Z),
P m x (
powerRZ x m)%
R.
Lemma powerRZ_inv' x alpha :
powerRZ (
/ x)
alpha = Rinv (
powerRZ x alpha).
Lemma powerRZ_inv_depr x alpha : (
x <> 0)%
R -> powerRZ (
/ x)
alpha = Rinv (
powerRZ x alpha).
Lemma powerRZ_neg' x :
forall alpha,
powerRZ x (
- alpha)
= Rinv (
powerRZ x alpha).
Lemma powerRZ_neg_depr x :
forall alpha,
x <> R0 -> powerRZ x (
- alpha)
= powerRZ (
/ x)
alpha.
Lemma powerRZ_mult m x y : (
powerRZ (
x*y)
m = powerRZ x m * powerRZ y m)%
R.
Lemma powerRZ_mult_distr_depr :
forall m x y,
((0
<= m)%
Z \/ (
x * y <> 0)%
R) ->
(
powerRZ (
x*y)
m = powerRZ x m * powerRZ y m)%
R.
End PowerRZ.
#[
deprecated(
since="8.16",
note="Use powerRZ_inv'.")]
Notation powerRZ_inv :=
powerRZ_inv_depr.
#[
deprecated(
since="8.16",
note="Use powerRZ_neg' and powerRZ_inv'.")]
Notation powerRZ_neg :=
powerRZ_neg_depr.
#[
deprecated(
since="8.16",
note="Use powerRZ_mult.")]
Notation powerRZ_mult_distr :=
powerRZ_mult_distr_depr.
Local Infix "^Z" :=
powerRZ (
at level 30,
right associativity) :
R_scope.
Definition decimal_exp (
r:
R) (
z:
Z) :
R := (
r * 10
^Z z).