Definition MSB (x : float) := Zpred (Z_of_nat (Fdigit radix x) + Fexp x).

(* Specifications: *)
Theorem MSB_shift : forall (x : float) (n : nat), ~ is_Fzero x -> MSB x = MSB (Fshift radix n x).
Theorem MSB_comp : forall (x y : float) (n : nat), ~ is_Fzero x -> x = y :>R -> MSB x = MSB y.
Theorem MSB_opp : forall x : float, MSB x = MSB (Fopp x).
Theorem MSB_abs : forall x : float, MSB x = MSB (Fabs x).
Theorem LSB_le_MSB : forall x : float, ~ is_Fzero x -> (LSB x <= MSB x)%Z.
Theorem Fexp_le_LSB : forall x : float, (Fexp x <= LSB x)%Z.
Theorem Ulp_Le_LSigB : forall x : float, (Float 1%nat (Fexp x) <= Float 1%nat (LSB x))%R.
Theorem Fexp_le_MSB : forall x : float, ~ is_Fzero x -> (Fexp x <= MSB x)%Z.
Theorem MSB_le_abs : forall x : float, ~ is_Fzero x -> (Float 1%nat (MSB x) <= Fabs x)%R.
Theorem abs_lt_MSB : forall x : float, (Fabs x < Float 1%nat (Zsucc (MSB x)))%R.
Theorem LSB_le_abs : forall x : float, ~ is_Fzero x -> (Float 1%nat (LSB x) <= Fabs x)%R.
Theorem MSB_monotoneAux : forall x y : float, (Fabs x <= Fabs y)%R -> Fexp x = Fexp y -> (MSB x <= MSB y)%Z.
Theorem MSB_monotone : forall x y : float, ~ is_Fzero x -> ~ is_Fzero y -> (Fabs x <= Fabs y)%R -> (MSB x <= MSB y)%Z.
Theorem MSB_le_multAux : forall x y : float, ~ is_Fzero x -> ~ is_Fzero y -> (MSB x + MSB y <= MSB (Fmult x y))%Z.
Theorem MSB_le_mult : forall x y : float, ~ is_Fzero x -> ~ is_Fzero y -> (Fmult (Float 1%nat (MSB x)) (Float 1%nat (MSB y)) <= Float 1%nat (MSB (Fmult x y)))%R.
Theorem mult_le_MSBAux : forall x y : float, ~ is_Fzero x -> ~ is_Fzero y -> (MSB (Fmult x y) <= Zsucc (MSB x + MSB y))%Z.
Theorem mult_le_MSB : forall x y : float, ~ is_Fzero x -> ~ is_Fzero y -> (Float 1%nat (MSB (Fmult x y)) <= radix * Fmult (Float 1%nat (MSB x)) (Float 1%nat (MSB y)))%R.
Theorem MSB_mix : forall x y : float, ~ is_Fzero x -> ~ is_Fzero y -> (Fabs x * Float 1%nat (MSB y) < radix * (Fabs y * Float 1%nat (MSB x)))%R.
Theorem LSB_rep : forall x y : float, ~ is_Fzero y -> (LSB x <= LSB y)%Z -> exists z : Z, y = Float z (Fexp x) :>R.
Theorem LSB_rep_min : forall p : float, exists z : Z, p = Float z (LSB p) :>R.