intros P p q H' H'0 H'1 H'2.
replace (MSB radix p) with (MSB radix (Float 1%nat (MSB radix p))).
apply MSB_monotone; auto.
unfold is_Fzero in |- *; simpl in |- *; red in |- *; intros; discriminate.
red in |- *; intros H'3; absurd (q = 0%R :>R).
apply MSBBoundNotZero with (P := P) (f1 := p); auto.
unfold FtoRradix in |- *; apply is_Fzero_rep1; auto.
replace (Fabs (Float 1%nat (MSB radix p))) with (Float 1%nat (MSB radix p));
[ idtac | unfold Fabs in |- *; simpl in |- *; auto ].
rewrite Fabs_correct; auto with arith; fold FtoRradix in |- *.
apply RoundAbsMonotonel with (P := P) (p := FtoRradix p); auto.
apply (FboundedOne _ radixMoreThanOne b precision); auto with zarith.
unfold FtoRradix in |- *; rewrite <- (Fabs_correct radix); auto with arith;
apply MSB_le_abs; auto.
Contradict H'1; unfold FtoRradix in |- *; apply is_Fzero_rep1; auto.
unfold MSB, Fdigit in |- *; simpl in |- *.
case (Zpred (digit radix (Fnum p) + Fexp p)); simpl in |- *; auto with zarith.
intros p0; case p0; simpl in |- *; auto.
intros p1; elim p1; simpl in |- *; auto.
intros p2 H; injection H; intros H1; rewrite <- H1; auto.
intros p0; case p0; simpl in |- *; auto.
intros p1; case p1; simpl in |- *; auto.
intros p2; elim p2; simpl in |- *; auto.
intros p3 H; injection H; intros H1; rewrite H1; auto.
Qed.

(* Specifications: *)
Theorem RoundLSBMax :
forall (P : R -> float -> Prop) (p q : float),
RoundedModeP b radix P ->
P p q -> ~ is_Fzero q -> (LSB radix p <= LSB radix q)%Z.