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