YES Problem: sort(nil()) -> nil() sort(cons(x,y)) -> insert(x,sort(y)) insert(x,nil()) -> cons(x,nil()) insert(x,cons(v,w)) -> choose(x,cons(v,w),x,v) choose(x,cons(v,w),y,0()) -> cons(x,cons(v,w)) choose(x,cons(v,w),0(),s(z)) -> cons(v,insert(x,w)) choose(x,cons(v,w),s(y),s(z)) -> choose(x,cons(v,w),y,z) Proof: DP Processor: DPs: sort#(cons(x,y)) -> sort#(y) sort#(cons(x,y)) -> insert#(x,sort(y)) insert#(x,cons(v,w)) -> choose#(x,cons(v,w),x,v) choose#(x,cons(v,w),0(),s(z)) -> insert#(x,w) choose#(x,cons(v,w),s(y),s(z)) -> choose#(x,cons(v,w),y,z) TRS: sort(nil()) -> nil() sort(cons(x,y)) -> insert(x,sort(y)) insert(x,nil()) -> cons(x,nil()) insert(x,cons(v,w)) -> choose(x,cons(v,w),x,v) choose(x,cons(v,w),y,0()) -> cons(x,cons(v,w)) choose(x,cons(v,w),0(),s(z)) -> cons(v,insert(x,w)) choose(x,cons(v,w),s(y),s(z)) -> choose(x,cons(v,w),y,z) Matrix Interpretation Processor: dim=3 interpretation: [choose#](x0, x1, x2, x3) = [0 0 1]x1 + [1 0 0]x3, [insert#](x0, x1) = [0 1 0]x1, [sort#](x0) = [0 1 0]x0 + [1], [1 0 0] [1] [s](x0) = [0 0 0]x0 + [0] [0 0 0] [0], [0] [0] = [0] [0], [0 0 0] [0 0 0] [0] [choose](x0, x1, x2, x3) = [1 0 0]x0 + [0 1 0]x1 + [1] [1 0 0] [0 1 0] [0], [0 0 0] [0 0 0] [0] [insert](x0, x1) = [1 0 0]x0 + [0 1 0]x1 + [1] [1 0 0] [0 1 0] [0], [0 0 0] [0 0 0] [0] [cons](x0, x1) = [1 0 0]x0 + [1 1 0]x1 + [1] [0 0 0] [1 1 0] [0], [0 0 0] [sort](x0) = [1 1 0]x0 [0 1 0] , [0] [nil] = [0] [0] orientation: sort#(cons(x,y)) = [1 0 0]x + [1 1 0]y + [2] >= [0 1 0]y + [1] = sort#(y) sort#(cons(x,y)) = [1 0 0]x + [1 1 0]y + [2] >= [1 1 0]y = insert#(x,sort(y)) insert#(x,cons(v,w)) = [1 0 0]v + [1 1 0]w + [1] >= [1 0 0]v + [1 1 0]w = choose#(x,cons(v,w),x,v) choose#(x,cons(v,w),0(),s(z)) = [1 1 0]w + [1 0 0]z + [1] >= [0 1 0]w = insert#(x,w) choose#(x,cons(v,w),s(y),s(z)) = [1 1 0]w + [1 0 0]z + [1] >= [1 1 0]w + [1 0 0]z = choose#(x,cons(v,w),y,z) [0] [0] sort(nil()) = [0] >= [0] = nil() [0] [0] [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0] sort(cons(x,y)) = [1 0 0]x + [1 1 0]y + [1] >= [1 0 0]x + [1 1 0]y + [1] = insert(x,sort(y)) [1 0 0] [1 1 0] [1] [1 0 0] [1 1 0] [0] [0 0 0] [0] [0 0 0] [0] insert(x,nil()) = [1 0 0]x + [1] >= [1 0 0]x + [1] = cons(x,nil()) [1 0 0] [0] [0 0 0] [0] [0 0 0] [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0 0 0] [0] insert(x,cons(v,w)) = [1 0 0]v + [1 1 0]w + [1 0 0]x + [2] >= [1 0 0]v + [1 1 0]w + [1 0 0]x + [2] = choose(x,cons(v,w),x,v) [1 0 0] [1 1 0] [1 0 0] [1] [1 0 0] [1 1 0] [1 0 0] [1] [0 0 0] [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0 0 0] [0] choose(x,cons(v,w),y,0()) = [1 0 0]v + [1 1 0]w + [1 0 0]x + [2] >= [1 0 0]v + [1 1 0]w + [1 0 0]x + [2] = cons(x,cons(v,w)) [1 0 0] [1 1 0] [1 0 0] [1] [1 0 0] [1 1 0] [0 0 0] [1] [0 0 0] [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0 0 0] [0] choose(x,cons(v,w),0(),s(z)) = [1 0 0]v + [1 1 0]w + [1 0 0]x + [2] >= [1 0 0]v + [0 1 0]w + [1 0 0]x + [2] = cons(v,insert(x,w)) [1 0 0] [1 1 0] [1 0 0] [1] [0 0 0] [0 1 0] [1 0 0] [1] [0 0 0] [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0 0 0] [0] choose(x,cons(v,w),s(y),s(z)) = [1 0 0]v + [1 1 0]w + [1 0 0]x + [2] >= [1 0 0]v + [1 1 0]w + [1 0 0]x + [2] = choose(x,cons(v,w),y,z) [1 0 0] [1 1 0] [1 0 0] [1] [1 0 0] [1 1 0] [1 0 0] [1] problem: DPs: TRS: sort(nil()) -> nil() sort(cons(x,y)) -> insert(x,sort(y)) insert(x,nil()) -> cons(x,nil()) insert(x,cons(v,w)) -> choose(x,cons(v,w),x,v) choose(x,cons(v,w),y,0()) -> cons(x,cons(v,w)) choose(x,cons(v,w),0(),s(z)) -> cons(v,insert(x,w)) choose(x,cons(v,w),s(y),s(z)) -> choose(x,cons(v,w),y,z) Qed