intros x y; case x; case y; unfold Fminus, Fplus, Fopp in |- *; simpl in |- *.
intros Fnum1 Fexp1 Fnum2 Fexp2 H'; rewrite <- H'.
repeat rewrite Zmin_n_n.
apply floatEq; simpl in |- *; auto.
replace (Zabs_nat (Fexp2 - Fexp2)) with 0; auto with zarith arith.
replace (Zpower_nat radix 0) with (Z_of_nat 1); simpl in |- *;
auto with zarith arith.
replace (Fexp2 - Fexp2)%Z with 0%Z; simpl in |- *; auto with zarith arith.
Qed.
Definition Fmult (x y : float) := Float (Fnum x * Fnum y) (Fexp x + Fexp y).
Definition Fmult_correct : forall x y : float, Fmult x y = (x * y)%R :>R.
intros x y; unfold FtoRradix, FtoR, Fmult in |- *; simpl in |- *; auto.
rewrite powerRZ_add; auto with real zarith.
repeat rewrite Rmult_IZR.
repeat rewrite Rmult_assoc.
repeat rewrite (Rmult_comm (Fnum y)).
repeat rewrite <- Rmult_assoc.
repeat rewrite Zmult_assoc_reverse; auto.
Qed.

(* Specifications: *)
Theorem oneZplus :
forall x y : Z,
Float 1%nat (x + y) = Fmult (Float 1%nat x) (Float 1%nat y).