ThreeSum2

# Library ThreeSum2

`Require Export AllFloat.
Section F2.
Variable b : Fbound.
Variable precision : nat.
Let radix := 2%Z.
Coercion Local FtoRradix := FtoR radix.
Let TMTO : (1 < radix)%Z := TwoMoreThanOne.
Hint Resolve TMTO: zarith.
Hypothesis precisionNotZero : 1 < precision.
Hypothesis pGivesBound : Zpos (vNum b) = Zpower_nat radix precision.
Variables p q r u v w p' q' r' : float.
Hypothesis Fp : Fbounded b p.
Hypothesis Fq : Fbounded b q.
Hypothesis Fr : Fbounded b r.
Hypothesis Fu : Fbounded b u.
Hypothesis Fv : Fbounded b v.
Hypothesis Fw : Fbounded b w.
Hypothesis Fp' : Fbounded b p'.
Hypothesis Fq' : Fbounded b q'.
Hypothesis Fr' : Fbounded b r'.
Hypothesis epq : (Fexp q <= Fexp p)%Z.
Hypothesis eqr : (Fexp r <= Fexp q)%Z.
Hypothesis uDef : Closest b radix (q + r) u.
Hypothesis vDef : v = (q + r - u)%R :>R.
Hypothesis p'Def : Closest b radix (p + u) p'.
Hypothesis wDef : w = (p + u - p')%R :>R.
Hypothesis q'Def : Closest b radix (w + v) q'.
Hypothesis r'Def : r' = (w + v - q')%R :>R.
Theorem TwoSumNul :
forall f g x : float,
Closest b radix (f + g) x ->
x = 0%R :>R -> Fbounded b f -> Fbounded b g -> (f + g - x)%R = 0%R.
Theorem bound3Sum :
r' <> 0%R :>R ->
(Rabs (q' + r') < 3%nat * radix * / pPred (vNum b) * Rabs p')%R.
Theorem exp3Sum :
exists p'' : float,
(exists q'' : float,
(exists r'' : float,
(Fbounded b p'' /\ Fbounded b q'' /\ Fbounded b r'') /\
(p'' = p' :>R /\ q'' = q' :>R /\ r'' = r' :>R) /\
(Fexp r <= Fexp r'')%Z /\
((Fexp r'' <= Fexp q'')%Z /\ (Fexp q'' <= Fexp p'')%Z) /\
Fexp r'' = Fexp r)).
Theorem OutSum3 :
r' <> 0%R :>R ->
(Float 1%nat (Fexp r) <
3%nat *
(radix *
(radix * (Rabs p' * / (pPred (vNum b) * (radix * pPred (vNum b) - radix))))))%R.
Theorem TwoSumNonNul :
forall p q r pq : float,
Fbounded b p ->
Fbounded b q ->
Closest b radix (p + q) pq ->
r = (p + q - pq)%R :>R -> r <> 0%R :>R -> pq <> 0%R :>R.
Theorem TwoSumOneNul :
forall p q pq : float,
Fbounded b p ->
Fbounded b q ->
Fbounded b pq -> Closest b radix (p + q) pq -> p = 0%R :>R -> pq = q :>R.
Theorem TwoSumOneNul2 :
forall p q pq r : float,
Fbounded b p ->
Fbounded b q ->
Fbounded b pq ->
Closest b radix (p + q) pq ->
p = 0%R :>R -> r = (p + q - pq)%R :>R -> r = 0%R :>R.
End F2.
`