Library FroundPlus
Require Export Finduct.
Require Export FroundProp.
Section FRoundP.
Variable b : Fbound.
Variable radix : Z.
Variable precision : nat.
Let FtoRradix := FtoR radix.
Coercion FtoRradix : float >-> R.
Hypothesis radixMoreThanOne : (1 < radix)%Z.
Let radixMoreThanZERO := Zlt_1_O _ (Zlt_le_weak _ _ radixMoreThanOne).
Hint Resolve radixMoreThanZERO: zarith.
Hypothesis precisionGreaterThanOne : 1 < precision.
Hypothesis pGivesBound : Zpos (vNum b) = Zpower_nat radix precision.
Theorem plusExpMin :
forall P,
RoundedModeP b radix P ->
forall p q pq : float,
P (p + q)%R pq ->
exists s : float,
Fbounded b s /\ s = pq :>R /\ (Zmin (Fexp p) (Fexp q) <= Fexp s)%Z.
Theorem plusExpUpperBound :
forall P,
RoundedModeP b radix P ->
forall p q pq : float,
P (p + q)%R pq ->
Fbounded b p ->
Fbounded b q ->
exists r : float,
Fbounded b r /\ r = pq :>R /\ (Fexp r <= Zsucc (Zmax (Fexp p) (Fexp q)))%Z.
Theorem plusExpBound :
forall P,
RoundedModeP b radix P ->
forall p q pq : float,
P (p + q)%R pq ->
Fbounded b p ->
Fbounded b q ->
exists r : float,
Fbounded b r /\
r = pq :>R /\
(Zmin (Fexp p) (Fexp q) <= Fexp r)%Z /\
(Fexp r <= Zsucc (Zmax (Fexp p) (Fexp q)))%Z.
Theorem minusRoundRep :
forall P,
RoundedModeP b radix P ->
forall p q qmp qmmp : float,
(0 <= p)%R ->
(p <= q)%R ->
P (q - p)%R qmp ->
Fbounded b p ->
Fbounded b q -> exists r : float, Fbounded b r /\ r = (q - qmp)%R :>R.
Theorem radixRangeBoundExp :
forall p q : float,
Fcanonic radix b p ->
Fcanonic radix b q ->
(0 <= p)%R ->
(p < q)%R -> (q < radix * p)%R -> Fexp p = Fexp q \/ Zsucc (Fexp p) = Fexp q.
Theorem ExactMinusIntervalAux :
forall P,
RoundedModeP b radix P ->
forall p q : float,
(0 < p)%R ->
(2%nat * p < q)%R ->
Fcanonic radix b p ->
Fcanonic radix b q ->
(exists r : float, Fbounded b r /\ r = (q - p)%R :>R) ->
forall r : float,
Fcanonic radix b r ->
(2%nat * p < r)%R ->
(r <= q)%R -> exists r' : float, Fbounded b r' /\ r' = (r - p)%R :>R.
Theorem ExactMinusIntervalAux1 :
forall P,
RoundedModeP b radix P ->
forall p q : float,
(0 <= p)%R ->
(p <= q)%R ->
Fcanonic radix b p ->
Fcanonic radix b q ->
(exists r : float, Fbounded b r /\ r = (q - p)%R :>R) ->
forall r : float,
Fcanonic radix b r ->
(p <= r)%R ->
(r <= q)%R -> exists r' : float, Fbounded b r' /\ r' = (r - p)%R :>R.
Theorem ExactMinusInterval :
forall P,
RoundedModeP b radix P ->
forall p q : float,
(0 <= p)%R ->
(p <= q)%R ->
Fbounded b p ->
Fbounded b q ->
(exists r : float, Fbounded b r /\ r = (q - p)%R :>R) ->
forall r : float,
Fbounded b r ->
(p <= r)%R ->
(r <= q)%R -> exists r' : float, Fbounded b r' /\ r' = (r - p)%R :>R.
Theorem MSBroundLSB :
forall P : R -> float -> Prop,
RoundedModeP b radix P ->
forall f1 f2 : float,
P f1 f2 ->
~ is_Fzero (Fminus radix f1 f2) ->
(MSB radix (Fminus radix f1 f2) < LSB radix f2)%Z.
Theorem LSBMinus :
forall p q : float,
~ is_Fzero (Fminus radix p q) ->
(Zmin (LSB radix p) (LSB radix q) <= LSB radix (Fminus radix p q))%Z.
Theorem LSBPlus :
forall p q : float,
~ is_Fzero (Fplus radix p q) ->
(Zmin (LSB radix p) (LSB radix q) <= LSB radix (Fplus radix p q))%Z.
End FRoundP.