let compute state base_set = 
  let state = Relations_type.Model.value_state state in
  let q = Queue.create () in
  let result = ref BaseMap.empty in
  BaseSet.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 := BaseMap.add current_base recip !result ;
    try 
      Zone.fold_bases 
        (fun base () -> try ignore (BaseMap.find base !result)
         with Not_found -> Queue.add base q)
        (fst recip) 
        ()
    with Zone.Error_Top -> ()
  done;
  Inout_parameters.result "%a" pretty !result;
  !result