let rec add i j =
  let dom = Dom.union i.dom j.dom
  and lo = 
    match i.lo, j.lo with
      | None, _ -> None       
      | _, None -> None         
      | Some(alpha, q), Some(beta, p) -> Some(alpha && beta, Q.add q p)
  and hi = 
    match i.hi, j.hi with
      | None, _ -> None       
      | _, None -> None         
      | Some(q, alpha), Some(p, beta) -> Some(Q.add q p, alpha && beta)
  in
    make (dom, lo, hi)