(VAR M N X Y Z ) (RULES lt(0, s(X)) -> true lt(s(X), 0) -> false lt(s(X), s(Y)) -> lt(X, Y) append(nil, Y) -> Y append(add(N, X), Y) -> add(N, append(X, Y)) split(N, nil) -> pair(nil, nil) split(N, add(M, Y)) -> f_1(split(N, Y), N, M, Y) f_1(pair(X, Z), N, M, Y) -> f_2(lt(N, M), N, M, Y, X, Z) f_2(true, N, M, Y, X, Z) -> pair(X, add(M, Z)) f_2(false, N, M, Y, X, Z) -> pair(add(M, X), Z) qsort(nil) -> nil qsort(add(N, X)) -> f_3(split(N, X), N, X) f_3(pair(Y, Z), N, X) -> append(qsort(Y), add(X, qsort(Z))) )