Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
sort : ∀ {l} {a : Set l} → (a → a → bool) → list a → list a
sorted : ∀ {l} {a : Set l} → (a → a → bool) → list a → bool
sort-sorts : ∀ {l} {a : Set l} {cmp : a → a → bool} {xs : list a} → sorted (sort xs) ≡ true
-- sort - любой
sorted _ _ = true
sort-sorts = refl
sorted cmp xs = xs == sort cmp xs
sort _ [] = []
sort _<_ (h :: t) = filter (\x -> x < h) t ++ h ++ filter (\x -> not (x < h)) t
sorted _ [] = true
sorted _ (_ :: []) = true
sorted _<_ (x :: y :: t) = ((x < y) || not (y < x)) && sorted _<_ (y :: t)
Кстати, вставку символов по именам в TeX можно получить в любом моде Emacs через
M-x set-input-method TeX
Верифицированный QuickSort на Agda