let diff m1 m2 =
    match m1, m2 with
    | Top _, _ | _, Top _ -> m1
    | Map mm1, Map mm2 ->
        let result =
          M.fold
            (fun k v1 acc ->
               let dif =
                 try
                   let v2 = M.find k mm2 in
                   (V.diff v1 v2)
                 with Not_found -> v1
               in
               add_or_bottom k dif acc)
            mm1
            M.empty
        in
        Map result