intros p q H' H'0 H'1 H'2 H'3.
case (FcanonicLtPos _ radixMoreThanOne b precision) with (p := p) (q := q);
auto with arith.
2: intros H'4; elim H'4; intros H'5 H'6; clear H'4; auto.
intros H'4; right.
Casec H'; intros H'.
case
(FcanonicLtPos _ radixMoreThanOne b precision)
with (p := q) (q := Float (Fnum p) (Zsucc (Fexp p)));
auto with arith.
left.
case H'; intros H1 H2.
repeat split; simpl in |- *; auto with float.
apply Zle_trans with (Fexp p); auto with float zarith.
apply Rle_trans with (FtoRradix p); auto; apply Rlt_le; auto.
unfold FtoR in |- *; simpl in |- *.
rewrite powerRZ_Zs; auto with real zarith; auto.
rewrite <- Rmult_assoc;
rewrite (fun (x : R) (y : Z) => Rmult_comm x y);
rewrite Rmult_assoc; auto.
simpl in |- *; intros; apply Zle_antisym; auto with zarith.
simpl in |- *; auto.
intros H'5; elim H'5; intros H'6 H'7; auto.
case
(FcanonicLtPos _ radixMoreThanOne b precision)
with (p := q) (q := Float (nNormMin radix precision) (Zsucc (Fexp p)));
auto with arith.
left; repeat split; simpl in |- *.
rewrite Zabs_eq; auto with float zarith.
apply ZltNormMinVnum; auto with zarith.
apply Zlt_le_weak; auto with zarith.
apply nNormPos; auto with zarith.
case H'; auto with zarith float.
rewrite (PosNormMin radix b precision); auto with zarith.
apply Rle_trans with (1 := H'1); auto with real.
apply Rlt_trans with (1 := H'3).
unfold FtoR in |- *; simpl in |- *.
rewrite powerRZ_Zs; auto with real arith; auto.
rewrite <- Rmult_assoc;
rewrite (fun (x : R) (y : Z) => Rmult_comm x y);
rewrite Rmult_assoc; auto.
apply Rmult_lt_compat_l; auto with real arith.
replace (Fexp p) with (- dExp b)%Z.
change (p < firstNormalPos radix b precision)%R in |- *.
apply (FsubnormalLtFirstNormalPos radix); auto with arith.
case H'; intros Z1 (Z2, Z3); auto.
auto with real zarith.
simpl in |- *; auto.
intros H; apply Zle_antisym; auto with zarith.
intros H'5; elim H'5; intros H'6 H'7; rewrite H'6; clear H'5; auto.
Qed.

(* Specifications: *)
Theorem ExactMinusIntervalAux :
forall P,
RoundedModeP b radix P ->
forall p q : float,
(0 < p)%R ->
(2%nat * p < q)%R ->
Fcanonic radix b p ->
Fcanonic radix b q ->
(exists r : float, Fbounded b r /\ r = (q - p)%R :>R) ->
forall r : float,
Fcanonic radix b r ->
(2%nat * p < r)%R ->
(r <= q)%R -> exists r' : float, Fbounded b r' /\ r' = (r - p)%R :>R.