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)