Definition FSucc (x : float) :=
  match Z_eq_bool (Fnum x) (pPred (vNum b)) with
  | true => Float (nNormMin radix precision) (Zsucc (Fexp x))
  | false =>
      match Z_eq_bool (Fnum x) (- nNormMin radix precision) with
      | true =>
          match Z_eq_bool (Fexp x) (- dExp b) with
          | true => Float (Zsucc (Fnum x)) (Fexp x)
          | false => Float (- pPred (vNum b)) (Zpred (Fexp x))
          end
      | false => Float (Zsucc (Fnum x)) (Fexp x)
      end
  end.

(* Specifications: *)
Theorem FSuccSimpl1 : forall x : float, Fnum x = pPred (vNum b) -> FSucc x = Float (nNormMin radix precision) (Zsucc (Fexp x)).
Theorem FSuccSimpl2 : forall x : float, Fnum x = (- nNormMin radix precision)%Z -> Fexp x <> (- dExp b)%Z -> FSucc x = Float (- pPred (vNum b)) (Zpred (Fexp x)).
Theorem FSuccSimpl3 : FSucc (Float (- nNormMin radix precision) (- dExp b)) = Float (Zsucc (- nNormMin radix precision)) (- dExp b).
Theorem FSuccSimpl4 : forall x : float, Fnum x <> pPred (vNum b) -> Fnum x <> (- nNormMin radix precision)%Z -> FSucc x = Float (Zsucc (Fnum x)) (Fexp x).
Theorem FSuccDiff1 : forall x : float, Fnum x <> (- nNormMin radix precision)%Z -> Fminus radix (FSucc x) x = Float 1%nat (Fexp x) :>R.
Theorem FSuccDiff2 : forall x : float, Fnum x = (- nNormMin radix precision)%Z -> Fexp x = (- dExp b)%Z -> Fminus radix (FSucc x) x = Float 1%nat (Fexp x) :>R.
Theorem FSuccDiff3 : forall x : float, Fnum x = (- nNormMin radix precision)%Z -> Fexp x <> (- dExp b)%Z -> Fminus radix (FSucc x) x = Float 1%nat (Zpred (Fexp x)) :>R.
Theorem ZltNormMinVnum : (nNormMin radix precision < Zpos (vNum b))%Z.
Theorem FSuccNormPos : forall a : float, (0 <= a)%R -> Fnormal radix b a -> Fnormal radix b (FSucc a).
Theorem FSuccSubnormNotNearNormMin : forall a : float, Fsubnormal radix b a -> Fnum a <> Zpred (nNormMin radix precision) -> Fsubnormal radix b (FSucc a).
Theorem FSuccSubnormNearNormMin : forall a : float, Fsubnormal radix b a -> Fnum a = Zpred (nNormMin radix precision) -> Fnormal radix b (FSucc a).
Theorem FBoundedSuc : forall f : float, Fbounded b f -> Fbounded b (FSucc f).
Theorem FSuccSubnormal : forall a : float, Fsubnormal radix b a -> Fcanonic radix b (FSucc a).
Theorem FSuccPosNotMax : forall a : float, (0 <= a)%R -> Fcanonic radix b a -> Fcanonic radix b (FSucc a).
Theorem FSuccNormNegNotNormMin : forall a : float, (a <= 0)%R -> Fnormal radix b a -> a <> Float (- nNormMin radix precision) (- dExp b) -> Fnormal radix b (FSucc a).
Theorem FSuccNormNegNormMin : Fsubnormal radix b (FSucc (Float (- nNormMin radix precision) (- dExp b))).
Theorem FSuccNegCanonic : forall a : float, (a <= 0)%R -> Fcanonic radix b a -> Fcanonic radix b (FSucc a).
Theorem FSuccCanonic : forall a : float, Fcanonic radix b a -> Fcanonic radix b (FSucc a).
Theorem FSuccLt : forall a : float, (a < FSucc a)%R.
Theorem FSuccPropPos : forall x y : float, (0 <= x)%R -> Fcanonic radix b x -> Fcanonic radix b y -> (x < y)%R -> (FSucc x <= y)%R.
Theorem R0RltRleSucc : forall x : float, (x < 0)%R -> (FSucc x <= 0)%R.
Theorem FSuccPropNeg : forall x y : float, (x < 0)%R -> Fcanonic radix b x -> Fcanonic radix b y -> (x < y)%R -> (FSucc x <= y)%R.
Theorem FSuccProp : forall x y : float, Fcanonic radix b x -> Fcanonic radix b y -> (x < y)%R -> (FSucc x <= y)%R.
Theorem FSuccZleEq : forall p q : float, (p <= q)%R -> (q < FSucc p)%R -> (Fexp p <= Fexp q)%Z -> p = q :>R.