Lean4
/-- `sort s` constructs a sorted list from the multiset `s`.
(Uses merge sort algorithm.) -/
def sort (s : Multiset α) : List α :=
Quot.liftOn s (mergeSort · (r · ·)) fun _ _ h =>
eq_of_perm_of_sorted ((mergeSort_perm _ _).trans <| h.trans (mergeSort_perm _ _).symm)
(sorted_mergeSort IsTrans.trans (fun a b => by simpa using IsTotal.total a b) _)
(sorted_mergeSort IsTrans.trans (fun a b => by simpa using IsTotal.total a b) _)