(** 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'.