let intersects =
let map_intersects =
M.generic_symetric_existential_predicate
Found_inter
~decide_one:(fun _ _ -> ())
~decide_both:(fun x y -> if V.intersects x y then raise Found_inter)
in
fun mm1 mm2 ->
match mm1, mm2 with
| Top (_,_), Top (_,_) -> true
| Top _, (Map _ as m) | (Map _ as m), Top _ -> not (equal m bottom)
| Map m1, Map m2 ->
try
map_intersects m1 m2;
false
with
Found_inter -> true