Library ClosestPlus
Require Export FroundPlus.
Require Export ClosestProp.
Section ClosestP.
Variable b : Fbound.
Variable radix : Z.
Variable precision : nat.
Coercion Local FtoRradix := FtoR radix.
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 errorBoundedPlusLe :
forall p q pq : float,
Fbounded b p ->
Fbounded b q ->
(Fexp p <= Fexp q)%Z ->
Closest b radix (p + q) pq ->
exists error : float,
error = Rabs (p + q - pq) :>R /\
Fbounded b error /\ Fexp error = Zmin (Fexp p) (Fexp q).
Theorem errorBoundedPlusAbs :
forall p q pq : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) pq ->
exists error : float,
error = Rabs (p + q - pq) :>R /\
Fbounded b error /\ Fexp error = Zmin (Fexp p) (Fexp q).
Theorem errorBoundedPlus :
forall p q pq : float,
(Fbounded b p) ->
(Fbounded b q) ->
(Closest b radix (p + q) pq) ->
exists error : float,
error = (p + q - pq)%R :>R /\
(Fbounded b error) /\ (Fexp error) = (Zmin (Fexp p) (Fexp q)).
Theorem plusExact1 :
forall p q r : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) r ->
(Fexp r <= Zmin (Fexp p) (Fexp q))%Z -> r = (p + q)%R :>R.
Theorem plusExact1bis :
forall p q r : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) r ->
r <> (p + q)%R :>R -> (Zmin (Fexp p) (Fexp q) < Fexp r)%Z.
Theorem plusExact2Aux :
forall p q r : float,
(0 <= p)%R ->
Fcanonic radix b p ->
Fbounded b q ->
Closest b radix (p + q) r ->
(Fexp r < Zpred (Fexp p))%Z -> r = (p + q)%R :>R.
Theorem plusExact2 :
forall p q r : float,
Fcanonic radix b p ->
Fbounded b q ->
Closest b radix (p + q) r ->
(Fexp r < Zpred (Fexp p))%Z -> r = (p + q)%R :>R.
Theorem plusExactR0 :
forall p q r : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) r -> r = 0%R :>R -> r = (p + q)%R :>R.
Theorem plusErrorBound1 :
forall p q r : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) r ->
~ is_Fzero r ->
(Rabs (r - (p + q)) < Rabs r * / 2%nat * (radix * / pPred (vNum b)))%R.
Theorem plusErrorBound1bis :
forall p q r : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) r ->
~ is_Fzero r ->
(Rabs (r - (p + q)) <= Rabs r * / 2%nat * (radix * / Zpos (vNum b)))%R.
Theorem plusErrorBound1withZero :
forall p q r : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) r ->
(Rabs (r - (p + q)) <= Rabs r * / 2%nat * (radix * / pPred (vNum b)))%R.
Theorem pPredMoreThanOne : (0 < pPred (vNum b))%Z.
Theorem pPredMoreThanRadix : (radix < pPred (vNum b))%Z.
Theorem RoundBound :
forall x y p : float,
Fbounded b x ->
Fbounded b y ->
Fbounded b p ->
Closest b radix (x + y) p ->
(radix < 2%nat * pPred (vNum b))%Z ->
(Rabs p <=
Rabs (x + y) *
(2%nat * pPred (vNum b) * / (2%nat * pPred (vNum b) - radix)))%R.
Theorem plusExactExp :
forall p q pq : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) pq ->
ex
(fun r : float =>
ex
(fun s : float =>
Fbounded b r /\
Fbounded b s /\
s = pq :>R /\
r = (p + q - s)%R :>R /\
Fexp r = Zmin (Fexp p) (Fexp q) :>Z /\
(Fexp r <= Fexp s)%Z /\ (Fexp s <= Zsucc (Zmax (Fexp p) (Fexp q)))%Z)).
Theorem plusExactExpCanonic :
forall c d p q : float,
Fbounded b c ->
Fbounded b d ->
Fbounded b p ->
Fbounded b q ->
Closest b radix (c + d) p ->
q = (c + d - p)%R :>R ->
q <> 0%R :>R ->
ex
(fun r : float =>
ex
(fun s : float =>
Fcanonic radix b s /\
Fbounded b r /\
s = p :>R /\
r = (c + d - s)%R :>R /\
Fexp r = Zmin (Fexp c) (Fexp d) :>Z /\
(Fexp r < Fexp s)%Z /\ (Fexp s <= Zsucc (Zmax (Fexp c) (Fexp d)))%Z)).
End ClosestP.