FroundMult.v



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

Require Export FroundProp.
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)).

Theorem minRepMult:
  (p, q, fmin:
float)
  (Fbounded b p) ->
  (Fbounded b q) ->
  (Rle R0 p) ->
  (Rle R0 q) ->
  (Zle (Zopp (dExp b)) (Zplus (Fexp p) (Fexp q))) ->
  (isMin b radix (Rmult p q) fmin) ->
  (Ex [r:float]
  r==(Rminus (Rmult p q) fmin) /\
  ((Fbounded b r) /\ (Fexp r)=(Zplus (Fexp p) (Fexp q)))).

Theorem maxRepMult:
  (p, q, fmax:
float)
  (Fbounded b p) ->
  (Fbounded b q) ->
  (Rle R0 p) ->
  (Rle R0 q) ->
  (Zle (Zopp (dExp b)) (Zplus (Fexp p) (Fexp q))) ->
  (isMax b radix (Rmult p q) fmax) ->
  (Ex [r:float]
  r==(Rminus (Rmult p q) fmax) /\
  ((Fbounded b r) /\ (Fexp r)=(Zplus (Fexp p) (Fexp q)))).

Theorem multExpMin:
  (P:?) (
RoundedModeP b radix P) ->
  (p, q, pq:float) (P (Rmult p q) pq) ->
  (Ex [s:float]
  (Fbounded b s) /\ (<R> s==pq /\ (Zle (Zplus (Fexp p) (Fexp q)) (Fexp s)))).

Theorem multExpUpperBound:
  (P:?) (
RoundedModeP b radix P) ->
  (p, q, pq:float)
  (P (Rmult p q) pq) ->
  (Fbounded b p) ->
  (Fbounded b q) -> (Zle (Zopp (dExp b)) (Zplus (Fexp p) (Fexp q))) ->
  (Ex [r:float]
  (Fbounded b r) /\
  (<R> r==pq /\ (Zle (Fexp r) (Zplus precision (Zplus (Fexp p) (Fexp q)))))).

Theorem RepMult:
  (P:?) (
RoundedModeP b radix P) ->
  (p, q, f:float)
  (Fbounded b p) ->
  (Fbounded b q) ->
  (Rle R0 p) ->
  (Rle R0 q) ->
  (Zle (Zopp (dExp b)) (Zplus (Fexp p) (Fexp q))) -> (P (Rmult p q) f) ->
  (Ex [r:float]
  r==(Rminus (Rmult p q) f) /\
  ((Fbounded b r) /\ (Fexp r)=(Zplus (Fexp p) (Fexp q)))).

Theorem multExactExp_aux:
  (n1, n2:Z)
  (Zle (Zabs n1) (vNum b)) ->
  (Zle (Zabs n2) (vNum b)) ->
  (Ex [ny:Z]
  (Ex [ey:Z]
  <R> (Rmult n1 n2)==(Rmult ny (
powerRZ radix ey)) /\ (Zle (Zabs ny) (vNum b)))) ->
  (Ex [nx:Z]
  (Ex [ex:Z]
  <R> (Rmult n1 n2)==(Rmult nx (powerRZ radix ex)) /\
  ((Zle (Zabs nx) (vNum b)) /\ ((Zle ZERO ex) /\ (Zle ex precision))))).

Theorem Zabs_Fbounded1:
  (a:Z) (Zle (Zabs a) (vNum b)) ->(Zle (Zopp (vNum b)) a) /\ (Zle a (vNum b)).

Theorem
multExactExp:
  (P:?) (
RoundedModeP b radix P) ->
  (p, q, pq:float)
  (Fbounded b p) ->
  (Fbounded b q) ->
  (Rle R0 p) ->
  (Rle R0 q) ->
  (P (Rmult p q) pq) -> (Zle (Zopp (dExp b)) (Zplus (Fexp p) (Fexp q))) ->
  (ex
     float
     [r:float]
     (ex
        float
        [s:float]
        (Fbounded b r) /\
        ((Fbounded b s) /\
         (<R> r==pq /\
          (<R> s==(Rminus (Rmult p q) r) /\
           (<Z> (Fexp s)=(Zplus (Fexp p) (Fexp q)) /\
            ((Zle (Fexp s) (Fexp r)) /\
             (Zle (Fexp r) (Zplus precision (Zplus (Fexp p) (Fexp q))))))))))).
End FRoundP.

30/05/01, 18:14