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