intros p H1 H2; unfold Fulp in |- *.
replace (FtoRradix p) with (FtoRradix (Fnormalize radix b precision p));
[ idtac | unfold FtoRradix in |- *; apply FnormalizeCorrect; auto ].
apply Rmult_le_reg_l with (powerRZ radix (Zpred precision)).
apply powerRZ_lt; auto with real arith.
replace
(powerRZ radix (Zpred precision) *
(Rabs (Fnormalize radix b precision p) *
powerRZ radix (Zsucc (- precision))))%R with
(Rabs (Fnormalize radix b precision p)).
unfold FtoRradix in |- *; rewrite <- Fabs_correct; auto with arith real.
unfold Fabs, FtoR in |- *; simpl in |- *.
apply Rmult_le_compat_r; [ apply powerRZ_le | rewrite <- inj_pred ];
auto with real arith zarith.
rewrite <- Zpower_nat_Z_powerRZ.
replace (Zpower_nat radix (pred precision)) with (nNormMin radix precision);
auto; apply Rle_IZR.
apply pNormal_absolu_min with b; auto with arith zarith real.
apply
trans_eq
with
(Rabs (Fnormalize radix b precision p) *
(powerRZ radix (Zpred precision) * powerRZ radix (Zsucc (- precision))))%R;
[ idtac | ring ].
rewrite <- powerRZ_add; auto with zarith real.
replace (Zpred precision + Zsucc (- precision))%Z with 0%Z;
[ simpl in |- *; ring | unfold Zsucc, Zpred in |- *; ring ];
auto with real zarith.
Qed.

(* Specifications: *)
Theorem FulpGe :
forall p : float,
Fbounded b p -> (Rabs p <= (powerRZ radix precision - 1) * Fulp p)%R.