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