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 usable rules: 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) interpretation: [choose#](x0, x1, x2, x3) = [1 0 0]x1 + [1 0 0]x3, [insert#](x0, x1) = [0 1 0]x1, [sort#](x0) = [0 0 1]x0, [1 1 0] [1] [s](x0) = [0 0 0]x0 + [0] [0 0 0] [0], [0] [0] = [0] [0], [1 0 0] [0 1 0] [0] [choose](x0, x1, x2, x3) = [1 0 0]x0 + [0 1 0]x1 + [1] [1 0 0] [0 0 1] [1], [1 0 0] [0 1 0] [1] [insert](x0, x1) = [1 0 0]x0 + [0 1 0]x1 + [1] [1 0 0] [0 0 1] [1], [0 0 0] [0 1 0] [0] [cons](x0, x1) = [1 0 0]x0 + [0 1 0]x1 + [1] [1 0 0] [0 0 1] [1], [0 1 1] [1] [sort](x0) = [0 0 1]x0 + [0] [0 1 0] [1], [0] [nil] = [1] [1] orientation: sort#(cons(x,y)) = [1 0 0]x + [0 0 1]y + [1] >= [0 0 1]y = sort#(y) sort#(cons(x,y)) = [1 0 0]x + [0 0 1]y + [1] >= [0 0 1]y = insert#(x,sort(y)) insert#(x,cons(v,w)) = [1 0 0]v + [0 1 0]w + [1] >= [1 0 0]v + [0 1 0]w = choose#(x,cons(v,w),x,v) choose#(x,cons(v,w),0(),s(z)) = [0 1 0]w + [1 1 0]z + [1] >= [0 1 0]w = insert#(x,w) choose#(x,cons(v,w),s(y),s(z)) = [0 1 0]w + [1 1 0]z + [1] >= [0 1 0]w + [1 0 0]z = choose#(x,cons(v,w),y,z) [3] [0] sort(nil()) = [1] >= [1] = nil() [2] [1] [2 0 0] [0 1 1] [3] [1 0 0] [0 0 1] [1] sort(cons(x,y)) = [1 0 0]x + [0 0 1]y + [1] >= [1 0 0]x + [0 0 1]y + [1] = insert(x,sort(y)) [1 0 0] [0 1 0] [2] [1 0 0] [0 1 0] [2] [1 0 0] [2] [0 0 0] [1] insert(x,nil()) = [1 0 0]x + [2] >= [1 0 0]x + [2] = cons(x,nil()) [1 0 0] [2] [1 0 0] [2] [1 0 0] [0 1 0] [1 0 0] [2] [1 0 0] [0 1 0] [1 0 0] [1] insert(x,cons(v,w)) = [1 0 0]v + [0 1 0]w + [1 0 0]x + [2] >= [1 0 0]v + [0 1 0]w + [1 0 0]x + [2] = choose(x,cons(v,w),x,v) [1 0 0] [0 0 1] [1 0 0] [2] [1 0 0] [0 0 1] [1 0 0] [2] [1 0 0] [0 1 0] [1 0 0] [1] [1 0 0] [0 1 0] [0 0 0] [1] choose(x,cons(v,w),y,0()) = [1 0 0]v + [0 1 0]w + [1 0 0]x + [2] >= [1 0 0]v + [0 1 0]w + [1 0 0]x + [2] = cons(x,cons(v,w)) [1 0 0] [0 0 1] [1 0 0] [2] [1 0 0] [0 0 1] [1 0 0] [2] [1 0 0] [0 1 0] [1 0 0] [1] [0 0 0] [0 1 0] [1 0 0] [1] choose(x,cons(v,w),0(),s(z)) = [1 0 0]v + [0 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] [0 0 1] [1 0 0] [2] [1 0 0] [0 0 1] [1 0 0] [2] [1 0 0] [0 1 0] [1 0 0] [1] [1 0 0] [0 1 0] [1 0 0] [1] choose(x,cons(v,w),s(y),s(z)) = [1 0 0]v + [0 1 0]w + [1 0 0]x + [2] >= [1 0 0]v + [0 1 0]w + [1 0 0]x + [2] = choose(x,cons(v,w),y,z) [1 0 0] [0 0 1] [1 0 0] [2] [1 0 0] [0 0 1] [1 0 0] [2] 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