let inter m1 m2 =
if is_bottom m1 then m1
else if is_bottom m2 then m2
else (* m1 and m2 are not bottom => the result cannot be bottom *)
match m1,m2 with
| T.Spare, _ -> m1
| _, T.Spare -> m2
| T.Cav d1, T.Cav d2 ->
let m = mk_mark (D.inter d1 d2) in
if is_bottom m then spare else m