let rec merge sort opl1 opl2 = 
    (* List.merge sort_obligs opl1 opl2 : no, because keeps duplicates *)
    match opl1, opl2 with
      | _, [] -> opl1
      | [], _ -> opl2
      | op1::tl1, op2::tl2 ->
          let cmp = sort op1 op2 in
            if cmp = 0 then op1::(merge sort tl1 tl2)
            else if cmp < 0 then op1::(merge sort tl1 opl2)
            else op2::(merge sort opl1 tl2)