[X,Y,K,N,M,L]

eq(0,0) -> true.
eq(0,s(Y)) -> false.
eq(s(X),0) -> false.
eq(s(X),s(Y)) -> eq(X,Y).
le(0,Y) -> true.
le(s(X),0) -> false.
le(s(X),s(Y)) -> le(X,Y).
min(cons(0,nil)) -> 0.
min(cons(s(N),nil)) -> s(N).
min(cons(N,cons(M,L))) -> ifmin(le(N,M),cons(N,cons(M,L))).
ifmin(true,cons(N,cons(M,L))) -> min(cons(N,L)).
ifmin(false,cons(N,cons(M,L))) -> min(cons(M,L)).
replace(N,M,nil) -> nil.
replace(N,M,cons(K,L)) -> ifrepl(eq(N,K),N,M,cons(K,L)).
ifrepl(true,N,M,cons(K,L)) -> cons(M,L).
ifrepl(false,N,M,cons(K,L)) -> cons(K,replace(N,M,L)).
selsort(nil) -> nil.
selsort(cons(N,L)) -> ifselsort(eq(N,min(cons(N,L))),cons(N,L)).
ifselsort(true,cons(N,L)) -> cons(N,selsort(L)).
ifselsort(false,cons(N,L)) -> cons(min(cons(N,L)),selsort(replace(min(cons(N,L)),N,L))).

