let hash = function
  | Uninterp(x) -> (2 + Hashtbl.hash x) land 0x3FFFFFFF
  | Arith(f) -> (3 + Hashtbl.hash f) land 0x3FFFFFFF
  | Pair(f) -> (5 + Hashtbl.hash f) land 0x3FFFFFFF
  | Coproduct(f) -> (7 + Hashtbl.hash f) land 0x3FFFFFFF
  | Bv(f) -> (11 + Hashtbl.hash f) land 0x3FFFFFFF
  | Pp(f) -> (17 + Hashtbl.hash f) land 0x3FFFFFFF
  | Fun(f) -> (23 + Hashtbl.hash f) land 0x3FFFFFFF
  | Bvarith(f) -> (29 + Hashtbl.hash f) land 0x3FFFFFFF
  | Arrays(f) ->(31 + Hashtbl.hash f) land 0x3FFFFFFF