let mk_fresh x i d =
  match i with
    | Some(k) -> 
        Fresh(x, k, d)
    | None ->
        incr(k);
        Fresh(x, !k, d)