let init_solver_closure ?(buffer=false) cudfpool closure =
  let map = new intprojection (List.length closure) in
  List.iter map#add closure;
  let globalid = (Array.length (strip_cudf_pool cudfpool)) - 1 in
  let solverpool = init_solver_pool map cudfpool closure in
  let solver = { constraints = init_solver_cache ~buffer solverpool ; map = map } in
  solver