(** Normalization and rounding *)

Definition shl_align mx ex ex' :=
  match (ex' - ex)%Z with
  | Zneg d => (shift_pos d mx, ex')
  | _ => (mx, ex)
  end.

(* Specifications: *)
Theorem shl_align_correct : forall mx ex ex', let (mx', ex'') := shl_align mx ex ex' in F2R (Float radix2 (Zpos mx) ex) = F2R (Float radix2 (Zpos mx') ex'') /\ (ex'' <= ex')%Z.
Theorem snd_shl_align : forall mx ex ex', (ex' <= ex)%Z -> snd (shl_align mx ex ex') = ex'.
Theorem shl_align_correct : forall mx ex ex', let (mx', ex'') := shl_align mx ex ex' in F2R (Float radix2 (Zpos mx) ex) = F2R (Float radix2 (Zpos mx') ex'') /\ (ex'' <= ex')%Z.
Theorem snd_shl_align : forall mx ex ex', (ex' <= ex)%Z -> snd (shl_align mx ex ex') = ex'.