Notation bpow e := (bpow beta e).Definition Falign (f1 f2 : float beta) :=
  let '(Float m1 e1) := f1 in
  let '(Float m2 e2) := f2 in
  if Zle_bool e1 e2
  then (m1, (m2 * Zpower beta (e2 - e1))%Z, e1)
  else ((m1 * Zpower beta (e1 - e2))%Z, m2, e2).

(* Specifications: *)
Theorem Falign_spec : forall f1 f2 : float beta, let '(m1, m2, e) := Falign f1 f2 in F2R f1 = @F2R beta (Float m1 e) /\ F2R f2 = @F2R beta (Float m2 e).
Theorem Falign_spec_exp: forall f1 f2 : float beta, snd (Falign f1 f2) = Zmin (Fexp f1) (Fexp f2).
Theorem Falign_spec : forall f1 f2 : float beta, let '(m1, m2, e) := Falign f1 f2 in F2R f1 = @F2R beta (Float m1 e) /\ F2R f2 = @F2R beta (Float m2 e).
Theorem Falign_spec_exp: forall f1 f2 : float beta, snd (Falign f1 f2) = Zmin (Fexp f1) (Fexp f2).