0 :: a asort :: b → b cons :: a → b → b dsort :: b → b insert :: (a → a → a) → (a → a → a) → b → a → b max :: a → a → a min :: a → a → a nil :: b s :: a → a sort :: (a → a → a) → (a → a → a) → b → b sort(F, Z, nil) → nil sort(G, H, cons(W, P)) → insert(G, H, sort(G, H, P), W) insert(F1, Z1, nil, U1) → cons(U1, nil) insert(H1, I1, cons(P1, Y2), X2) → cons(H1(P1, X2), insert(H1, I1, Y2, I1(P1, X2))) max(0, U2) → U2 max(V2, 0) → V2 max(s(W2), s(P2)) → max(W2, P2) min(0, X3) → 0 min(Y3, 0) → 0 min(s(U3), s(V3)) → min(U3, V3) asort(W3) → sort(min, max, W3) dsort(P3) → sort(max, min, P3)