Definition FPred (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 (Zpred (Fnum x)) (Fexp x)
          | false => Float (pPred (vNum b)) (Zpred (Fexp x))
          end
      | false => Float (Zpred (Fnum x)) (Fexp x)
      end
  end.

(* Specifications: *)
Theorem FPredSimpl1 : forall x : float, Fnum x = (- pPred (vNum b))%Z -> FPred x = Float (- nNormMin radix precision) (Zsucc (Fexp x)).
Theorem FPredSimpl2 : forall x : float, Fnum x = nNormMin radix precision -> Fexp x <> (- dExp b)%Z -> FPred x = Float (pPred (vNum b)) (Zpred (Fexp x)).
Theorem FPredSimpl3 : FPred (Float (nNormMin radix precision) (- dExp b)) = Float (Zpred (nNormMin radix precision)) (- dExp b).
Theorem FPredSimpl4 : forall x : float, Fnum x <> (- pPred (vNum b))%Z -> Fnum x <> nNormMin radix precision -> FPred x = Float (Zpred (Fnum x)) (Fexp x).
Theorem FPredFopFSucc : forall x : float, FPred x = Fopp (FSucc b radix precision (Fopp x)).
Theorem FPredDiff1 : forall x : float, Fnum x <> nNormMin radix precision -> Fminus radix x (FPred x) = Float 1%nat (Fexp x) :>R.
Theorem FPredDiff2 : forall x : float, Fnum x = nNormMin radix precision -> Fexp x = (- dExp b)%Z -> Fminus radix x (FPred x) = Float 1%nat (Fexp x) :>R.
Theorem FPredDiff3 : forall x : float, Fnum x = nNormMin radix precision -> Fexp x <> (- dExp b)%Z -> Fminus radix x (FPred x) = Float 1%nat (Zpred (Fexp x)) :>R.
Theorem FBoundedPred : forall f : float, Fbounded b f -> Fbounded b (FPred f).
Theorem FPredCanonic : forall a : float, Fcanonic radix b a -> Fcanonic radix b (FPred a).
Theorem FPredLt : forall a : float, (FPred a < a)%R.
Theorem R0RltRlePred : forall x : float, (0 < x)%R -> (0 <= FPred x)%R.
Theorem FPredProp : forall x y : float, Fcanonic radix b x -> Fcanonic radix b y -> (x < y)%R -> (x <= FPred y)%R.
Theorem FPredZleEq : forall p q : float, (FPred p < q)%R -> (q <= p)%R -> (Fexp p <= Fexp q)%Z -> p = q :>R.