(* Specifications: *)
Theorem boundOnePrecision : forall a : float, Fbounded b a -> (Rabs a < Float 1%nat (precision + Fexp a))%R.
Theorem boundNormalMult : forall x y : float, Fnormal radix b x -> Fbounded b y -> (Rabs y * Float 1%nat (Fexp x) < radix * (Rabs x * Float 1%nat (Fexp y)))%R.
Theorem Zpower_nat_less : forall q : nat, (0 < Zpower_nat n q)%Z.
Theorem Zpower_nat_monotone_S : forall p : nat, (Zpower_nat n p < Zpower_nat n (S p))%Z.
Theorem Zpower_nat_monotone_lt : forall p q : nat, p < q -> (Zpower_nat n p < Zpower_nat n q)%Z.
Theorem Zpower_nat_anti_monotone_lt : forall p q : nat, (Zpower_nat n p < Zpower_nat n q)%Z -> p < q.
Theorem Zpower_nat_monotone_le : forall p q : nat, p <= q -> (Zpower_nat n p <= Zpower_nat n q)%Z.
Theorem Zpower_nat_anti_monotone_le : forall p q : nat, (Zpower_nat n p <= Zpower_nat n q)%Z -> p <= q.
Theorem Zpower_nat_anti_eq : forall p q : nat, Zpower_nat n p = Zpower_nat n q -> p = q.
Theorem pow_O : forall e : R, (e ^ 0)%R = 1%R.
Theorem pow_1 : forall e : R, (e ^ 1)%R = e.
Theorem pow_NR0 : forall (e : R) (n : nat), e <> 0%R -> (e ^ n)%R <> 0%R.
Theorem pow_add : forall (e : R) (n m : nat), (e ^ (n + m))%R = (e ^ n * e ^ m)%R.
Theorem pow_RN_plus : forall (e : R) (n m : nat), e <> 0%R -> (e ^ n)%R = (e ^ (n + m) * / e ^ m)%R.
Theorem pow_lt : forall (e : R) (n : nat), (0 < e)%R -> (0 < e ^ n)%R.
Theorem Rlt_pow_R1 : forall (e : R) (n : nat), (1 < e)%R -> 0 < n -> (1 < e ^ n)%R.
Theorem Rlt_pow : forall (e : R) (n m : nat), (1 < e)%R -> n < m -> (e ^ n < e ^ m)%R.
Theorem pow_R1 : forall (r : R) (n : nat), (r ^ n)%R = 1%R -> Rabs r = 1%R \/ n = 0.
Theorem Zpower_NR0 : forall (e : BinInt.Z) (n : nat), (0 <= e)%Z -> (0 <= Zpower_nat e n)%Z.
Theorem Zpower_NR1 : forall (e : BinInt.Z) (n : nat), (1 <= e)%Z -> (1 <= Zpower_nat e n)%Z.
Theorem Contradict1 : forall a b : Prop, b -> (a -> ~ b) -> ~ a.
Theorem Contradict2 : forall a b : Prop, b -> ~ b -> a.
Theorem Contradict3 : forall a : Prop, a -> ~ ~ a.
Theorem SterbenzAux : forall x y : float, Fbounded b x -> Fbounded b y -> (y <= x)%R -> (x <= 2%nat * y)%R -> Fbounded b (Fminus radix x y).
Theorem Sterbenz : forall x y : float, Fbounded b x -> Fbounded b y -> (/ 2%nat * y <= x)%R -> (x <= 2%nat * y)%R -> Fbounded b (Fminus radix x y).
Theorem BminusSameExpAux : forall x y : float, Fbounded b x -> Fbounded b y -> (0 <= y)%R -> (y <= x)%R -> Fexp x = Fexp y -> Fbounded b (Fminus radix x y).
Theorem BminusSameExp : forall x y : float, Fbounded b x -> Fbounded b y -> (0 <= x)%R -> (0 <= y)%R -> Fexp x = Fexp y -> Fbounded b (Fminus radix x y).
Theorem BminusSameExpNeg : forall x y : float, Fbounded b x -> Fbounded b y -> (x <= 0)%R -> (y <= 0)%R -> Fexp x = Fexp y -> Fbounded b (Fminus radix x y).
Theorem ClosestOpp : forall (p : float) (r : R), Closest b radix r p -> Closest b radix (- r) (Fopp p).
Theorem ClosestFabs : forall (p : float) (r : R), Closest b radix r p -> Closest b radix (Rabs r) (Fabs p).
Theorem ClosestUlp : forall (p : R) (q : float), Closest b radix p q -> (2%nat * Rabs (p - q) <= Fulp b radix precision q)%R.
Theorem ClosestExp : forall (p : R) (q : float), Closest b radix p q -> (2%nat * Rabs (p - q) <= powerRZ radix (Fexp q))%R.
Theorem ClosestErrorExpStrict : forall (p q : float) (x : R), Fbounded b p -> Fbounded b q -> Closest b radix x p -> q = (x - p)%R :>R -> q <> 0%R :>R -> (Fexp q < Fexp p)%Z.
Theorem ClosestIdem : forall p q : float, Fbounded b p -> Closest b radix p q -> p = q :>R.
Theorem ClosestM1 : forall (r1 r2 : R) (min max p q : float), isMin b radix r1 min -> isMax b radix r1 max -> (min + max < 2%nat * r2)%R -> Closest b radix r1 p -> Closest b radix r2 q -> (p <= q)%R.
Theorem FmultRadixInv : forall (x z : float) (y : R), Fbounded b x -> Closest b radix y z -> (/ 2%nat * x < y)%R -> (/ 2%nat * x <= z)%R.
Theorem ClosestErrorBound : forall (p q : float) (x : R), Fbounded b p -> Closest b radix x p -> q = (x - p)%R :>R -> (Rabs q <= Float 1%nat (Fexp p) * / 2%nat)%R.
Theorem ClosestErrorExp : forall (p q : float) (x : R), Fbounded b p -> Fbounded b q -> Closest b radix x p -> q = (x - p)%R :>R -> exists error : float, Fbounded b error /\ error = q :>R /\ (Fexp error <= Zmax (Fexp p - precision) (- dExp b))%Z.
Theorem ClosestErrorBoundNormal_aux : forall (x : R) (p : float), Closest b radix x p -> Fnormal radix b (Fnormalize radix b precision p) -> (Rabs (x - p) <= Rabs p * (/ 2%nat * (radix * / Zpos (vNum b))))%R.
Theorem ClosestErrorBound2 : forall (x : R) (p : float), Closest b radix x p -> (Rabs (x - p) <= Rmax (Rabs p * (/ 2%nat * (radix * / Zpos (vNum b)))) (/ 2%nat * powerRZ radix (- dExp b)))%R.
Theorem ClosestErrorBoundNormal : forall (x : R) (p : float), Closest b radix x p -> Fnormal radix b (Fnormalize radix b precision p) -> (Rabs (x - p) <= Rabs p * (/ 2%nat * powerRZ radix (Zsucc (- precision))))%R.
Theorem ClosestPropHigham25 : forall (x : R) (p : float), Closest b radix x p -> exists delta : R, (exists nu : R, (x / (1 + delta) + nu)%R = FtoRradix p /\ (Rabs delta <= / 2%nat * powerRZ radix (Zsucc (- precision)))%R /\ (Rabs nu <= / 2%nat * powerRZ radix (- dExp b))%R /\ (delta * nu)%R = 0%R /\ (Fnormal radix b (Fnormalize radix b precision p) -> nu = 0%R) /\ (Fsubnormal radix b (Fnormalize radix b precision p) -> delta = 0%R)).
Theorem FpredUlpPos : forall x : float, Fcanonic radix b x -> (0 < x)%R -> (FPred b radix precision x + Fulp b radix precision (FPred b radix precision x))%R = x.
Theorem FulpFPredLe : forall f : float, Fbounded b f -> Fcanonic radix b f -> (Fulp b radix precision f <= radix * Fulp b radix precision (FPred b radix precision f))%R.
Theorem ClosestErrorBoundNormal2_aux : forall (x : R) (p : float), Closest b radix x p -> Fnormal radix b p -> Fnormal radix b (Fnormalize radix b precision (FPred b radix precision p)) -> (0 < x)%R -> (x < p)%R -> (Rabs (x - p) <= Rabs x * (/ 2%nat * powerRZ radix (Zsucc (- precision))))%R.
Theorem TwoMoreThanOne : (1 < radix)%Z.
Theorem FevenNormMin : Even (nNormMin 2%nat precision).
Theorem EvenFNSuccFNSuccMid : forall p : float, Fbounded b p -> FNeven b radix precision p -> Fminus radix (FNSucc b radix precision (FNSucc b radix precision p)) (FNSucc b radix precision p) = Fminus radix (FNSucc b radix precision p) p :>R.
Theorem AScal2 : forall p : float, Float (Fnum p) (Fexp p + 1%nat) = (radix * p)%R :>R.
Theorem minus_minus : forall a b : nat, a <= b -> b - (b - a) = a.
Theorem lte_comp_mult : forall p q r t : nat, p <= q -> r <= t -> p * r <= q * t.
Theorem le_refl_eq : forall n m : nat, n = m -> n <= m.
Theorem lt_le_pred : forall n m : nat, n < m -> n <= pred m.
Theorem lt_comp_mult_l : forall p q r : nat, 0 < p -> q < r -> p * q < p * r.
Theorem lt_comp_mult_r : forall p q r : nat, 0 < p -> q < r -> q * p < r * p.
Theorem lt_comp_mult : forall p q r s : nat, p < q -> r < s -> p * r < q * s.
Theorem mult_eq_inv : forall n m p : nat, 0 < n -> n * m = n * p -> m = p.
Theorem pow_O : forall e : R, (e ^ 0)%R = 1%R.
Theorem pow_1 : forall e : R, (e ^ 1)%R = e.
Theorem pow_NR0 : forall (e : R) (n : nat), e <> 0%R -> (e ^ n)%R <> 0%R.
Theorem pow_add : forall (e : R) (n m : nat), (e ^ (n + m))%R = (e ^ n * e ^ m)%R.
Theorem pow_RN_plus : forall (e : R) (n m : nat), e <> 0%R -> (e ^ n)%R = (e ^ (n + m) * / e ^ m)%R.
Theorem pow_lt : forall (e : R) (n : nat), (0 < e)%R -> (0 < e ^ n)%R.
Theorem Rlt_pow_R1 : forall (e : R) (n : nat), (1 < e)%R -> 0 < n -> (1 < e ^ n)%R.
Theorem Rlt_pow : forall (e : R) (n m : nat), (1 < e)%R -> n < m -> (e ^ n < e ^ m)%R.
Theorem pow_R1 : forall (r : R) (n : nat), (r ^ n)%R = 1%R -> Rabs r = 1%R \/ n = 0.
Theorem Zpower_NR0 : forall (e : Z) (n : nat), (0 <= e)%Z -> (0 <= Zpower_nat e n)%Z.
Theorem Zpower_NR1 : forall (e : Z) (n : nat), (1 <= e)%Z -> (1 <= Zpower_nat e n)%Z.
Theorem powerRZ_O : forall e : R, powerRZ e 0 = 1%R.
Theorem powerRZ_1 : forall e : R, powerRZ e (Zsucc 0) = e.
Theorem powerRZ_NOR : forall (e : R) (z : Z), e <> 0%R -> powerRZ e z <> 0%R.
Theorem powerRZ_add : forall (e : R) (n m : Z), e <> 0%R -> powerRZ e (n + m) = (powerRZ e n * powerRZ e m)%R.
Theorem powerRZ_Zopp : forall (e : R) (z : Z), e <> 0%R -> powerRZ e (- z) = (/ powerRZ e z)%R.
Theorem powerRZ_Zs : forall (e : R) (n : Z), e <> 0%R -> powerRZ e (Zsucc n) = (e * powerRZ e n)%R.
Theorem Zpower_nat_Z_powerRZ : forall (n : Z) (m : nat), IZR (Zpower_nat n m) = powerRZ (IZR n) (Z_of_nat m).
Theorem powerRZ_lt : forall (e : R) (z : Z), (0 < e)%R -> (0 < powerRZ e z)%R.
Theorem powerRZ_le : forall (e : R) (z : Z), (0 < e)%R -> (0 <= powerRZ e z)%R.
Theorem Rlt_powerRZ : forall (e : R) (n m : Z), (1 < e)%R -> (n < m)%Z -> (powerRZ e n < powerRZ e m)%R.
Theorem Rpow_R1 : forall (r : R) (z : Z), r <> 0%R -> powerRZ r z = 1%R -> Rabs r = 1%R \/ z = 0%Z.
Theorem Rpow_eq_inv : forall (r : R) (p q : Z), r <> 0%R -> Rabs r <> 1%R -> powerRZ r p = powerRZ r q -> p = q.
Theorem Zpower_nat_powerRZ_absolu : forall n m : Z, (0 <= m)%Z -> IZR (Zpower_nat n (Zabs_nat m)) = powerRZ (IZR n) m.
Theorem powerRZ_R1 : forall n : Z, powerRZ 1 n = 1%R.
Theorem Rle_powerRZ : forall (e : R) (n m : Z), (1 <= e)%R -> (n <= m)%Z -> (powerRZ e n <= powerRZ e m)%R.
Theorem Zlt_powerRZ : forall (e : R) (n m : Z), (1 <= e)%R -> (powerRZ e n < powerRZ e m)%R -> (n < m)%Z.
Theorem Zle_powerRZ : forall (e : R) (n m : Z), (1 < e)%R -> (powerRZ e n <= powerRZ e m)%R -> (n <= m)%Z.
Theorem Rinv_powerRZ : forall (e : R) (n : Z), e <> 0%R -> (/ powerRZ e n)%R = powerRZ e (- n).
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.
Theorem errorBoundedMultMin : forall p q fmin : float, Fbounded b p -> Fbounded b q -> (0 <= p)%R -> (0 <= q)%R -> (- dExp b <= Fexp p + Fexp q)%Z -> isMin b radix (p * q) fmin -> exists r : float, r = (p * q - fmin)%R :>R /\ Fbounded b r /\ Fexp r = (Fexp p + Fexp q)%Z.
Theorem errorBoundedMultMax : forall p q fmax : float, Fbounded b p -> Fbounded b q -> (0 <= p)%R -> (0 <= q)%R -> (- dExp b <= Fexp p + Fexp q)%Z -> isMax b radix (p * q) fmax -> exists r : float, FtoRradix r = (p * q - fmax)%R /\ Fbounded b r /\ Fexp r = (Fexp p + Fexp q)%Z.
Theorem multExpMin : 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 /\ (Fexp p + Fexp q <= Fexp s)%Z.
Theorem multExpUpperBound : forall P, RoundedModeP b radix P -> forall p q pq : float, P (p * q)%R pq -> Fbounded b p -> Fbounded b q -> (- dExp b <= Fexp p + Fexp q)%Z -> exists r : float, Fbounded b r /\ r = pq :>R /\ (Fexp r <= precision + (Fexp p + Fexp q))%Z.
Theorem errorBoundedMultPos : forall P, RoundedModeP b radix P -> forall p q f : float, Fbounded b p -> Fbounded b q -> (0 <= p)%R -> (0 <= q)%R -> (- dExp b <= Fexp p + Fexp q)%Z -> P (p * q)%R f -> exists r : float, r = (p * q - f)%R :>R /\ Fbounded b r /\ Fexp r = (Fexp p + Fexp q)%Z.
Theorem errorBoundedMultNeg : forall P, RoundedModeP b radix P -> forall p q f : float, Fbounded b p -> Fbounded b q -> (p <= 0)%R -> (0 <= q)%R -> (- dExp b <= Fexp p + Fexp q)%Z -> P (p * q)%R f -> exists r : float, r = (p * q - f)%R :>R /\ Fbounded b r /\ Fexp r = (Fexp p + Fexp q)%Z.
Theorem errorBoundedMult : forall P, RoundedModeP b radix P -> forall p q f : float, Fbounded b p -> Fbounded b q -> (- dExp b <= Fexp p + Fexp q)%Z -> P (p * q)%R f -> exists r : float, r = (p * q - f)%R :>R /\ Fbounded b r /\ Fexp r = (Fexp p + Fexp q)%Z.
Theorem errorBoundedMultExp_aux : forall n1 n2 : Z, (Zabs n1 < Zpos (vNum b))%Z -> (Zabs n2 < Zpos (vNum b))%Z -> (exists ny : Z, (exists ey : Z, (n1 * n2)%R = (ny * powerRZ radix ey)%R :>R /\ (Zabs ny < Zpos (vNum b))%Z)) -> exists nx : Z, (exists ex : Z, (n1 * n2)%R = (nx * powerRZ radix ex)%R :>R /\ (Zabs nx < Zpos (vNum b))%Z /\ (0 <= ex)%Z /\ (ex <= precision)%Z).
Theorem errorBoundedMultExpPos : forall P, RoundedModeP b radix P -> forall p q pq : float, Fbounded b p -> Fbounded b q -> (0 <= p)%R -> (0 <= q)%R -> P (p * q)%R pq -> (- dExp b <= Fexp p + Fexp q)%Z -> ex (fun r : float => ex (fun s : float => Fbounded b r /\ Fbounded b s /\ r = pq :>R /\ s = (p * q - r)%R :>R /\ Fexp s = (Fexp p + Fexp q)%Z :>Z /\ (Fexp s <= Fexp r)%Z /\ (Fexp r <= precision + (Fexp p + Fexp q))%Z)).
Theorem errorBoundedMultExp : forall P, (RoundedModeP b radix P) -> forall p q pq : float, (Fbounded b p) -> (Fbounded b q) -> (P (p * q)%R pq) -> (-(dExp b) <= Fexp p + Fexp q)%Z -> exists r : float, exists s : float, (Fbounded b r) /\ (Fbounded b s) /\ r = pq :>R /\ s = (p * q - r)%R :>R /\ (Fexp s = Fexp p + Fexp q)%Z /\ (Fexp s <= Fexp r)%Z /\ (Fexp r <= precision + (Fexp p + Fexp q))%Z.
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)).
Theorem TwoMoreThanOne : (1 < radix)%Z.
Theorem plusUpperBound : forall P, RoundedModeP b 2%nat P -> forall p q pq : float, P (p + q)%R pq -> Fbounded b p -> Fbounded b q -> (Rabs pq <= radix * Rmax (Rabs p) (Rabs q))%R.
Theorem plusErrorBound2 : forall p q r : float, Fbounded b p -> Fbounded b q -> Closest b radix (p + q) r -> ~ is_Fzero r -> (Rabs (r - (p + q)) < radix * / pPred (vNum b) * Rmax (Rabs p) (Rabs q))%R.
Theorem plusClosestLowerBoundAux1 : forall p q pq : float, (Rabs q <= p)%R -> Closest b radix (p + q) pq -> Fbounded b p -> Fbounded b q -> pq <> (p + q)%R :>R -> (/ radix * p <= pq)%R.
Theorem plusClosestLowerBoundAux2 : forall p q pq : float, Closest b radix (p + q) pq -> Fbounded b p -> Fbounded b q -> pq <> (p + q)%R :>R -> (Rabs p <= Rabs q)%R -> (/ radix * Rabs q <= Rabs pq)%R.
Theorem plusClosestLowerBound : forall p q pq : float, Closest b radix (p + q) pq -> Fbounded b p -> Fbounded b q -> pq <> (p + q)%R :>R -> (/ radix * Rmax (Rabs p) (Rabs q) <= Rabs pq)%R.
Theorem closestLessMultPos : forall (p : float) (r : R), Closest b radix r p -> (0 <= r)%R -> (p <= 2%nat * r)%R.
Theorem closestLessMultNeg : forall (p : float) (r : R), Closest b radix r p -> (r <= 0)%R -> (2%nat * r <= p)%R.
Theorem closestLessMultAbs : forall (p : float) (r : R), Closest b radix r p -> (Rabs p <= 2%nat * Rabs r)%R.
Theorem errorBoundedMultClosest_aux : forall p q pq : float, Fbounded b p -> Fbounded b q -> Closest b radix (p * q) pq -> (- dExp b <= Fexp p + Fexp q)%Z -> (p * q - pq)%R <> 0%R :>R -> ex (fun r : float => ex (fun s : float => Fcanonic radix b r /\ Fbounded b r /\ Fbounded b s /\ r = pq :>R /\ s = (p * q - r)%R :>R /\ Fexp s = (Fexp p + Fexp q)%Z :>Z /\ (Fexp s <= Fexp r)%Z /\ (Fexp r <= precision + (Fexp p + Fexp q))%Z)).
Theorem errorBoundedMultClosest : forall p q pq : float, Fbounded b p -> Fbounded b q -> Closest b radix (p * q) pq -> (- dExp b <= Fexp p + Fexp q)%Z -> (- dExp b <= Fexp (Fnormalize radix b precision pq) - precision)%Z -> ex (fun r : float => ex (fun s : float => Fcanonic radix b r /\ Fbounded b r /\ Fbounded b s /\ r = pq :>R /\ s = (p * q - r)%R :>R /\ Fexp s = (Fexp r - precision)%Z :>Z)).