let compute state base_set =
  let state = Relations_type.Model.value_state state in
  let q = Queue.create () in
  let result = ref Base.Map.empty in
  Base.Set.iter (fun elt -> Queue.add elt q) base_set;
  while not (Queue.is_empty q) do
    let current_base = Queue.take q in
    let recip = Cvalue_type.Model.reciprocal_image current_base state in
    result := Base.Map.add current_base recip !result ;
    try
      Zone.fold_bases
        (fun base () ->
          try ignore (Base.Map.find base !result)
          with Not_found -> Queue.add base q)
        (fst recip)
        ()
    with Zone.Error_Top -> ()
  done;
  Inout_parameters.result "%a" pretty !result;
  !result