YES Problem: a__from(X) -> cons(mark(X),from(s(X))) a__length(nil()) -> 0() a__length(cons(X,Y)) -> s(a__length1(Y)) a__length1(X) -> a__length(X) mark(from(X)) -> a__from(mark(X)) mark(length(X)) -> a__length(X) mark(length1(X)) -> a__length1(X) mark(cons(X1,X2)) -> cons(mark(X1),X2) mark(s(X)) -> s(mark(X)) mark(nil()) -> nil() mark(0()) -> 0() a__from(X) -> from(X) a__length(X) -> length(X) a__length1(X) -> length1(X) Proof: WPO Processor: algebra: Max weight function: w0 = 0 w(length1) = w(length) = w(a__length1) = w(0) = w(a__length) = w(nil) = w( cons) = w(from) = w(s) = w(mark) = w(a__from) = 0 status function: st(cons) = [1, 0] st(length1) = st(length) = st(a__length1) = [0] st(0) = [] st(a__length) = [0] st(nil) = [] st(from) = st(s) = st(mark) = st(a__from) = [0] subterm penalty function: sp(cons, 0) = sp(from, 0) = sp(a__from, 0) = 1 sp(length1, 0) = sp(length, 0) = sp(a__length1, 0) = sp(a__length, 0) = sp( cons, 1) = sp(s, 0) = sp(mark, 0) = 0 precedence: mark > a__from > cons > a__length1 > a__length > length1 ~ length ~ 0 ~ nil ~ from ~ s problem: Qed