Definition Fdigit (p : float) := digit radix (Fnum p).Definition Fshift (n : nat) (x : float) :=
  Float (Fnum x * Zpower_nat radix n) (Fexp x - n).

(* Specifications: *)
Theorem sameExpEq : forall p q : float, p = q :>R -> Fexp p = Fexp q -> p = q.
Theorem FshiftFdigit : forall (n : nat) (x : float), ~ is_Fzero x -> Fdigit (Fshift n x) = Fdigit x + n.
Theorem FshiftCorrect : forall (n : nat) (x : float), Fshift n x = x :>R.
Theorem FshiftCorrectInv : forall x y : float, x = y :>R -> (Fexp x <= Fexp y)%Z -> Fshift (Zabs_nat (Fexp y - Fexp x)) y = x.
Theorem FshiftO : forall x : float, Fshift 0 x = x.
Theorem FshiftCorrectSym : forall x y : float, x = y :>R -> exists n : nat, (exists m : nat, Fshift n x = Fshift m y).
Theorem FshiftAdd : forall (n m : nat) (p : float), Fshift (n + m) p = Fshift n (Fshift m p).
Theorem ReqGivesEqwithSameExp : forall p q : float, exists r : float, (exists s : float, p = r :>R /\ q = s :>R /\ Fexp r = Fexp s).
Theorem FdigitEq : forall x y : float, ~ is_Fzero x -> x = y :>R -> Fdigit x = Fdigit y -> x = y.