(** Conversion from/to signed hexadecimal numbers *)
Module Signed.

(* Specifications: *)
Lemma of_to (n:N) : N.of_hex_int (N.to_hex_int n) = Some n.
Lemma to_of (d:int)(n:N) : N.of_hex_int d = Some n -> N.to_hex_int n = norm d.
Lemma to_int_inj n n' : N.to_hex_int n = N.to_hex_int n' -> n = n'.
Lemma to_int_pos_surj d : exists n, N.to_hex_int n = norm (Pos d).
Lemma of_int_norm d : N.of_hex_int (norm d) = N.of_hex_int d.
Lemma of_inj_pos d d' :
N.of_hex_int (Pos d) = N.of_hex_int (Pos d') -> unorm d = unorm d'.
Lemma of_to (n:nat) : Nat.of_hex_int (Nat.to_hex_int n) = Some n.
Lemma to_of (d:int)(n:nat) : Nat.of_hex_int d = Some n -> Nat.to_hex_int n = norm d.
Lemma to_int_inj n n' : Nat.to_hex_int n = Nat.to_hex_int n' -> n = n'.
Lemma to_int_pos_surj d : exists n, Nat.to_hex_int n = norm (Pos d).
Lemma of_int_norm d : Nat.of_hex_int (norm d) = Nat.of_hex_int d.
Lemma of_inj_pos d d' :
Nat.of_hex_int (Pos d) = Nat.of_hex_int (Pos d') -> unorm d = unorm d'.