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