let compute state base_set =
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.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