let hash = function
  | External(n, _) ->
      (3 + Hashtbl.hash n) land 0x3FFFFFFF
  | Rename(n, i, _) ->
      (5 + Hashtbl.hash n + i) land 0x3FFFFFFF
  | Bound(i) ->
      (7 + i) land 0x3FFFFFFF
  | Slack(i,_, _) ->
      (11 + i) land 0x3FFFFFFF 
  | Fresh(n, i, _) ->
      (17 + Hashtbl.hash n + i) land 0x3FFFFFFF