FroundProp.v



(****************************************************************************
                                                                             
          IEEE754  :  FroundProp                                                     
                                                                             
          Laurent Thery  &  Sylvie Boldo                                                      
                                                                             
*****************************************************************************
*)

Require Export Fround.
Require Export MSB.
Section FRoundP.
Variable b:Fbound.
Variable radix:nat.
Variable precision:nat.

Local FtoRradix := (FtoR radix).
Coercion FtoRradix : float >-> R.
Hypothesis radixMoreThanOne:(lt (S O) radix).
Hypothesis precisionGreaterThanOne:(lt (1) precision).
Hypothesis pGivesBound:(vNum b)=(minus (exp radix precision) (1)).

Definition Fulp :=
   [p:
float](powerRZ radix (Fexp (Fnormalize radix b precision p))).

Theorem FulpComp:
  (p, q:
float) (Fbounded b p) -> (Fbounded b q) -> <R> p==q ->(Fulp p)==(Fulp q).

Theorem FulpLe: (p:float) (Fbounded b p) ->(Rle (Fulp p) (Float (1) (Fexp p))).

Theorem Fulp_zero:
  (x:
float) (is_Fzero x) ->(Fulp x)==(powerRZ radix (Zopp (dExp b))).

Theorem FulpSucCan:
  (p:
float) (Fcanonic radix b precision p) ->
  (Rle (Rminus (FSucc b radix precision p) p) (Fulp p)).

Theorem FulpSuc:
  (p:
float) (Fbounded b p) ->
  (Rle (Rminus (FNSucc b radix precision p) p) (Fulp p)).

Theorem FulpPredCan:
  (p:
float) (Fcanonic radix b precision p) ->
  (Rle (Rminus p (FPred b radix precision p)) (Fulp p)).

Theorem FulpPred:
  (p:
float) (Fbounded b p) ->
  (Rle (Rminus p (FNPred b radix precision p)) (Fulp p)).

Theorem RoundedModeUlp:
  (P:?) (
RoundedModeP b radix P) ->
  (p, q:float) (P p q) ->(Rlt (Rabsolu (Rminus p q)) (Fulp q)).

Theorem RoundedModeUlp2:
  (P:?) (
RoundedModeP b radix P) ->
  (p:R) (q:float) (P p q) ->(Rlt (Rabsolu (Rminus p q)) (Fulp q)).

Theorem RoundedModeErrorExpStrict:
  (P:?) (
RoundedModeP b radix P) ->
  (p, q:float)
  (x:R)
  (Fbounded b p) ->
  (Fbounded b q) -> (P x p) -> <R> q==(Rminus x p) -> ~ <R> q==R0 ->
  (Zlt (Fexp q) (Fexp p)).

Theorem RoundedModeProjectorIdem:
  (P:?) (p:
float) (RoundedModeP b radix P) -> (Fbounded b p) ->(P p p).

Theorem RoundedModeBounded:
  (P:?) (r:R) (q:
float) (RoundedModeP b radix P) -> (P r q) ->(Fbounded b q).

Theorem RoundedModeProjectorIdemEq:
  (P:R ->
float ->Prop)
  (p, q:float)
  (RoundedModeP b radix P) -> (Fbounded b p) -> (P (FtoR radix p) q) -><R> p==q.

Theorem RoundedModeMult:
  (P:?) (
RoundedModeP b radix P) ->
  (r:R) (q, q':float) (P r q) -> (Fbounded b q') -> (Rle r (Rmult radix q')) ->
  (Rle q (Rmult radix q')).

Theorem RoundedModeMultLess:
  (P:?) (
RoundedModeP b radix P) ->
  (r:R) (q, q':float) (P r q) -> (Fbounded b q') -> (Rle (Rmult radix q') r) ->
  (Rle (Rmult radix q') q).

Theorem RleMinR0:
  (r:R) (min:
float) (Rle R0 r) -> (isMin b radix r min) ->(Rle R0 min).

Theorem RleRoundedR0:
  (P:R ->
float ->Prop)
  (p:float) (r:R) (RoundedModeP b radix P) -> (P r p) -> (Rle R0 r) ->(Rle R0 p).

Theorem RleMaxR0:
  (r:R) (max:
float) (Rle r R0) -> (isMax b radix r max) ->(Rle max R0).

Theorem RleRoundedLessR0:
  (P:R ->
float ->Prop)
  (p:float) (r:R) (RoundedModeP b radix P) -> (P r p) -> (Rle r R0) ->(Rle p R0).

Theorem PminPos:
  (p:
float)
  (min:float)
  (Rle R0 p) -> (Fbounded b p) -> (isMin b radix (Rmult (Rinv (2)) p) min) ->
  (Ex [c:float] (Fbounded b c) /\ <R> c==(Rminus p min)).

Theorem div2IsBetweenPos:
  (p:
float)
  (min, max:float)
  (Rle R0 p) ->
  (Fbounded b p) ->
  (isMin b radix (Rmult (Rinv (2)) p) min) ->
  (isMax b radix (Rmult (Rinv (2)) p) max) -><R> p==(Rplus min max).

Theorem div2IsBetween:
  (p:
float)
  (min, max:float)
  (Fbounded b p) ->
  (isMin b radix (Rmult (Rinv (2)) p) min) ->
  (isMax b radix (Rmult (Rinv (2)) p) max) -><R> p==(Rplus min max).

Theorem RoundedModeMultAbs:
  (P:?) (
RoundedModeP b radix P) ->
  (r:R)
  (q, q':float)
  (P r q) -> (Fbounded b q') -> (Rle (Rabsolu r) (Rmult radix q')) ->
  (Rle (Rabsolu q) (Rmult radix q')).

Theorem isMinComp:
  (r1, r2:R)
  (min, max:
float)
  (isMin b radix r1 min) ->
  (isMax b radix r1 max) -> (Rlt min r2) -> (Rlt r2 max) ->
  (isMin b radix r2 min).

Theorem isMaxComp:
  (r1, r2:R)
  (min, max:
float)
  (isMin b radix r1 min) ->
  (isMax b radix r1 max) -> (Rlt min r2) -> (Rlt r2 max) ->
  (isMax b radix r2 max).

Theorem roundedModeLessMult:
  (P:R ->
float ->Prop)
  (p:float)
  (r:R)
  (RoundedModeP b radix P) -> (P r p) -> (Rle (Float (1) (Zopp (dExp b))) r) ->
  (Rle p (Rmult radix r)).

Theorem roundedModeMoreMult:
  (P:R ->
float ->Prop)
  (p:float)
  (r:R)
  (RoundedModeP b radix P) ->
  (P r p) -> (Rle r (Float (Zopp (1)) (Zopp (dExp b)))) ->
  (Rle (Rmult radix r) p).

Theorem roundedModeAbsMult:
  (P:R ->
float ->Prop)
  (p:float)
  (r:R)
  (RoundedModeP b radix P) ->
  (P r p) -> (Rle (Float (1) (Zopp (dExp b))) (Rabsolu r)) ->
  (Rle (Rabsolu p) (Rmult radix (Rabsolu r))).

Theorem RleBoundRoundl:
  (P:?) (
RoundedModeP b radix P) ->
  (p, q:float) (r:R) (Fbounded b p) -> (Rle p r) -> (P r q) ->(Rle p q).

Theorem RleBoundRoundr:
  (P:?) (
RoundedModeP b radix P) ->
  (p, q:float) (r:R) (Fbounded b p) -> (Rle r p) -> (P r q) ->(Rle q p).

Theorem RoundAbsMonotoner:
  (P:R ->
float ->Prop)
  (p:R)
  (q, r:float)
  (RoundedModeP b radix P) ->
  (Fbounded b r) -> (P p q) -> (Rle (Rabsolu p) r) ->(Rle (Rabsolu q) r).

Theorem RoundAbsMonotonel:
  (P:R ->
float ->Prop)
  (p:R)
  (q, r:float)
  (RoundedModeP b radix P) ->
  (Fbounded b r) -> (P p q) -> (Rle r (Rabsolu p)) ->(Rle r (Rabsolu q)).
(* Rounded of natural numbers are natural *)

Theorem ZroundZ:
  (P:R ->
float ->Prop) (z:Z) (p:float) (RoundedModeP b radix P) -> (P z p) ->
  (Ex [z':Z] <R> p==z').

Theorem NroundN:
  (P:R ->
float ->Prop) (n:nat) (p:float) (RoundedModeP b radix P) -> (P n p) ->
  (Ex [n':nat] <R> p==n').
(* Properties of LSB and MSB *)

Theorem FUlp_Le_LSigB:
  (x:
float) (Fbounded b x) ->(Rle (Fulp x) (Float (1) (LSB radix x))).

Theorem MSBisMin:
  (f1, f2:
float)
  (Rle R0 f1) -> (isMin b radix f1 f2) -> ~ (is_Fzero f1) -> ~ (is_Fzero f2) ->
  (MSB radix f1)=(MSB radix f2).

Theorem MSBtoZero:
  (f1, f2:
float)
  (ToZeroP b radix f1 f2) -> ~ (is_Fzero f1) -> ~ (is_Fzero f2) ->
  (MSB radix f1)=(MSB radix f2).

Theorem MSBBoundNotZero:
  (P:R ->
float ->Prop) (RoundedModeP b radix P) ->
  (f1, f2:float)
  (P f1 f2) -> ~ <R> f1==R0 -> (Zle (Zopp (dExp b)) (MSB radix f1)) ->
  ~ <R> f2==R0.

Theorem RoundMSBmax:
  (P:R ->
float ->Prop)
  (p, q:float)
  (RoundedModeP b radix P) ->
  (P p q) -> ~ <R> p==R0 -> (Zle (Zopp (dExp b)) (MSB radix p)) ->
  (Zle (MSB radix q) (Zs (MSB radix p))).

Theorem RoundMSBmin:
  (P:R ->
float ->Prop)
  (p, q:float)
  (RoundedModeP b radix P) ->
  (P p q) -> ~ <R> p==R0 -> (Zle (Zopp (dExp b)) (MSB radix p)) ->
  (Zle (MSB radix p) (MSB radix q)).

Theorem RoundLSBMax:
  (P:R ->
float ->Prop)
  (p, q:float) (RoundedModeP b radix P) -> (P p q) -> ~ (is_Fzero q) ->
  (Zle (LSB radix p) (LSB radix q)).
End FRoundP.

30/05/01, 18:17