let merge a b =
          if a == b
          then a
          else
            (let r =
               match ((a.ghost), (b.ghost)) with
               | (falsefalse-> { (a) with stop = b.stop; }
               | (truetrue-> { (a) with stop = b.stop; }
               | (true, _) -> { (a) with stop = b.stop; }
               | (_, true-> { (b) with start = a.start; }
             in r)