Proof with auto with typeclass_instances.
intros x Hx.
unfold ulp; case Req_bool_spec; intros Hx2.
(* x = 0 *)
case (negligible_exp_spec FLT_exp).
intros T; specialize (T (emin-1)%Z); contradict T.
apply Zle_not_lt; unfold FLT_exp.
apply Zle_trans with (2:=Z.le_max_r _ _); omega.
assert (V:FLT_exp emin = emin).
unfold FLT_exp; apply Z.max_r.
unfold Prec_gt_0 in prec_gt_0_; omega.
intros n H2; rewrite <-V.
apply f_equal, fexp_negligible_exp_eq...
omega.
(* x <> 0 *)
apply f_equal; unfold canonic_exp, FLT_exp.
apply Z.max_r.
assert (ln_beta beta x-1 < emin+prec)%Z;[idtac|omega].
destruct (ln_beta beta x) as (e,He); simpl.
apply lt_bpow with beta.
apply Rle_lt_trans with (2:=Hx).
now apply He.
Qed.

(* Specifications: *)
Theorem ulp_FLT_le :
forall x, (bpow (emin + prec - 1) <= Rabs x)%R ->
(ulp beta FLT_exp x <= Rabs x * bpow (1 - prec))%R.
Theorem ulp_FLT_gt :
forall x, (Rabs x * bpow (-prec) < ulp beta FLT_exp x)%R.
Theorem ulp_FLT_le: forall x, (bpow (emin+prec) <= Rabs x)%R ->
(ulp beta FLT_exp x <= Rabs x * bpow (1-prec))%R.
Theorem ulp_FLT_ge: forall x, (Rabs x * bpow (-prec) < ulp beta FLT_exp x)%R.
Global Instance FLT_exp_monotone : Monotone_exp FLT_exp.