let intersects m1 m2 =
let result =
match m1,m2 with
| Top (_,_), Top (_,_) -> true
| Top _, (Map _ as m) | (Map _ as m), Top _ -> not (equal m bottom)
| Map m1, Map m2 ->
let intersects_in_m1 k v2 =
let v1 = find_or_bottom k m1 in
if V.intersects v1 v2
then raise Found_inter
in
try
M.iter intersects_in_m1 m2;
false
with
Found_inter -> true
in
(* Format.printf "Map_Lattice.intersects: m1=%a m2=%a result=%b@\n"
pretty m1
pretty m2
result;*)
result