YES Problem: 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))) Proof: DP Processor: DPs: eq#(s(X),s(Y)) -> eq#(X,Y) le#(s(X),s(Y)) -> le#(X,Y) min#(cons(N,cons(M,L))) -> le#(N,M) 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,cons(K,L)) -> eq#(N,K) replace#(N,M,cons(K,L)) -> ifrepl#(eq(N,K),N,M,cons(K,L)) ifrepl#(false(),N,M,cons(K,L)) -> replace#(N,M,L) selsort#(cons(N,L)) -> min#(cons(N,L)) selsort#(cons(N,L)) -> eq#(N,min(cons(N,L))) selsort#(cons(N,L)) -> ifselsort#(eq(N,min(cons(N,L))),cons(N,L)) ifselsort#(true(),cons(N,L)) -> selsort#(L) ifselsort#(false(),cons(N,L)) -> replace#(min(cons(N,L)),N,L) ifselsort#(false(),cons(N,L)) -> selsort#(replace(min(cons(N,L)),N,L)) ifselsort#(false(),cons(N,L)) -> min#(cons(N,L)) TRS: 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))) Usable Rule Processor: DPs: eq#(s(X),s(Y)) -> eq#(X,Y) le#(s(X),s(Y)) -> le#(X,Y) min#(cons(N,cons(M,L))) -> le#(N,M) 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,cons(K,L)) -> eq#(N,K) replace#(N,M,cons(K,L)) -> ifrepl#(eq(N,K),N,M,cons(K,L)) ifrepl#(false(),N,M,cons(K,L)) -> replace#(N,M,L) selsort#(cons(N,L)) -> min#(cons(N,L)) selsort#(cons(N,L)) -> eq#(N,min(cons(N,L))) selsort#(cons(N,L)) -> ifselsort#(eq(N,min(cons(N,L))),cons(N,L)) ifselsort#(true(),cons(N,L)) -> selsort#(L) ifselsort#(false(),cons(N,L)) -> replace#(min(cons(N,L)),N,L) ifselsort#(false(),cons(N,L)) -> selsort#(replace(min(cons(N,L)),N,L)) ifselsort#(false(),cons(N,L)) -> min#(cons(N,L)) TRS: le(0(),Y) -> true() le(s(X),0()) -> false() le(s(X),s(Y)) -> le(X,Y) eq(0(),0()) -> true() eq(0(),s(Y)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(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)) Matrix Interpretation Processor: dim=1 usable rules: eq(0(),0()) -> true() eq(0(),s(Y)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(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)) interpretation: [ifselsort#](x0, x1) = 2x0 + 4x1 + 2, [selsort#](x0) = 4x0 + 7, [ifrepl#](x0, x1, x2, x3) = x2 + 4x3, [replace#](x0, x1, x2) = x1 + 4x2 + 1, [ifmin#](x0, x1) = 2x1 + 6, [min#](x0) = 2x0 + 7, [le#](x0, x1) = x0, [eq#](x0, x1) = x1, [ifrepl](x0, x1, x2, x3) = 2x0 + x2 + x3, [replace](x0, x1, x2) = x1 + x2 + 2, [ifmin](x0, x1) = x1, [min](x0) = x0, [cons](x0, x1) = x0 + x1 + 4, [nil] = 5, [le](x0, x1) = 0, [false] = 1, [s](x0) = 2x0 + 1, [true] = 0, [eq](x0, x1) = 1, [0] = 1 orientation: eq#(s(X),s(Y)) = 2Y + 1 >= Y = eq#(X,Y) le#(s(X),s(Y)) = 2X + 1 >= X = le#(X,Y) min#(cons(N,cons(M,L))) = 2L + 2M + 2N + 23 >= N = le#(N,M) min#(cons(N,cons(M,L))) = 2L + 2M + 2N + 23 >= 2L + 2M + 2N + 22 = ifmin#(le(N,M),cons(N,cons(M,L))) ifmin#(true(),cons(N,cons(M,L))) = 2L + 2M + 2N + 22 >= 2L + 2N + 15 = min#(cons(N,L)) ifmin#(false(),cons(N,cons(M,L))) = 2L + 2M + 2N + 22 >= 2L + 2M + 15 = min#(cons(M,L)) replace#(N,M,cons(K,L)) = 4K + 4L + M + 17 >= K = eq#(N,K) replace#(N,M,cons(K,L)) = 4K + 4L + M + 17 >= 4K + 4L + M + 16 = ifrepl#(eq(N,K),N,M,cons(K,L)) ifrepl#(false(),N,M,cons(K,L)) = 4K + 4L + M + 16 >= 4L + M + 1 = replace#(N,M,L) selsort#(cons(N,L)) = 4L + 4N + 23 >= 2L + 2N + 15 = min#(cons(N,L)) selsort#(cons(N,L)) = 4L + 4N + 23 >= L + N + 4 = eq#(N,min(cons(N,L))) selsort#(cons(N,L)) = 4L + 4N + 23 >= 4L + 4N + 20 = ifselsort#(eq(N,min(cons(N,L))),cons(N,L)) ifselsort#(true(),cons(N,L)) = 4L + 4N + 18 >= 4L + 7 = selsort#(L) ifselsort#(false(),cons(N,L)) = 4L + 4N + 20 >= 4L + N + 1 = replace#(min(cons(N,L)),N,L) ifselsort#(false(),cons(N,L)) = 4L + 4N + 20 >= 4L + 4N + 15 = selsort#(replace(min(cons(N,L)),N,L)) ifselsort#(false(),cons(N,L)) = 4L + 4N + 20 >= 2L + 2N + 15 = min#(cons(N,L)) le(0(),Y) = 0 >= 0 = true() le(s(X),0()) = 0 >= 1 = false() le(s(X),s(Y)) = 0 >= 0 = le(X,Y) eq(0(),0()) = 1 >= 0 = true() eq(0(),s(Y)) = 1 >= 1 = false() eq(s(X),0()) = 1 >= 1 = false() eq(s(X),s(Y)) = 1 >= 1 = eq(X,Y) min(cons(0(),nil())) = 10 >= 1 = 0() min(cons(s(N),nil())) = 2N + 10 >= 2N + 1 = s(N) min(cons(N,cons(M,L))) = L + M + N + 8 >= L + M + N + 8 = ifmin(le(N,M),cons(N,cons(M,L))) ifmin(true(),cons(N,cons(M,L))) = L + M + N + 8 >= L + N + 4 = min(cons(N,L)) ifmin(false(),cons(N,cons(M,L))) = L + M + N + 8 >= L + M + 4 = min(cons(M,L)) replace(N,M,nil()) = M + 7 >= 5 = nil() replace(N,M,cons(K,L)) = K + L + M + 6 >= K + L + M + 6 = ifrepl(eq(N,K),N,M,cons(K,L)) ifrepl(true(),N,M,cons(K,L)) = K + L + M + 4 >= L + M + 4 = cons(M,L) ifrepl(false(),N,M,cons(K,L)) = K + L + M + 6 >= K + L + M + 6 = cons(K,replace(N,M,L)) problem: DPs: TRS: le(0(),Y) -> true() le(s(X),0()) -> false() le(s(X),s(Y)) -> le(X,Y) eq(0(),0()) -> true() eq(0(),s(Y)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(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)) Qed