YES Problem: rev1(0(),nil()) -> 0() rev1(s(X),nil()) -> s(X) rev1(X,cons(Y,L)) -> rev1(Y,L) rev(nil()) -> nil() rev(cons(X,L)) -> cons(rev1(X,L),rev2(X,L)) rev2(X,nil()) -> nil() rev2(X,cons(Y,L)) -> rev(cons(X,rev(rev2(Y,L)))) Proof: DP Processor: DPs: rev1#(X,cons(Y,L)) -> rev1#(Y,L) rev#(cons(X,L)) -> rev2#(X,L) rev#(cons(X,L)) -> rev1#(X,L) rev2#(X,cons(Y,L)) -> rev2#(Y,L) rev2#(X,cons(Y,L)) -> rev#(rev2(Y,L)) rev2#(X,cons(Y,L)) -> rev#(cons(X,rev(rev2(Y,L)))) TRS: rev1(0(),nil()) -> 0() rev1(s(X),nil()) -> s(X) rev1(X,cons(Y,L)) -> rev1(Y,L) rev(nil()) -> nil() rev(cons(X,L)) -> cons(rev1(X,L),rev2(X,L)) rev2(X,nil()) -> nil() rev2(X,cons(Y,L)) -> rev(cons(X,rev(rev2(Y,L)))) TDG Processor: DPs: rev1#(X,cons(Y,L)) -> rev1#(Y,L) rev#(cons(X,L)) -> rev2#(X,L) rev#(cons(X,L)) -> rev1#(X,L) rev2#(X,cons(Y,L)) -> rev2#(Y,L) rev2#(X,cons(Y,L)) -> rev#(rev2(Y,L)) rev2#(X,cons(Y,L)) -> rev#(cons(X,rev(rev2(Y,L)))) TRS: rev1(0(),nil()) -> 0() rev1(s(X),nil()) -> s(X) rev1(X,cons(Y,L)) -> rev1(Y,L) rev(nil()) -> nil() rev(cons(X,L)) -> cons(rev1(X,L),rev2(X,L)) rev2(X,nil()) -> nil() rev2(X,cons(Y,L)) -> rev(cons(X,rev(rev2(Y,L)))) graph: rev2#(X,cons(Y,L)) -> rev2#(Y,L) -> rev2#(X,cons(Y,L)) -> rev#(cons(X,rev(rev2(Y,L)))) rev2#(X,cons(Y,L)) -> rev2#(Y,L) -> rev2#(X,cons(Y,L)) -> rev#(rev2(Y,L)) rev2#(X,cons(Y,L)) -> rev2#(Y,L) -> rev2#(X,cons(Y,L)) -> rev2#(Y,L) rev2#(X,cons(Y,L)) -> rev#(rev2(Y,L)) -> rev#(cons(X,L)) -> rev1#(X,L) rev2#(X,cons(Y,L)) -> rev#(rev2(Y,L)) -> rev#(cons(X,L)) -> rev2#(X,L) rev2#(X,cons(Y,L)) -> rev#(cons(X,rev(rev2(Y,L)))) -> rev#(cons(X,L)) -> rev1#(X,L) rev2#(X,cons(Y,L)) -> rev#(cons(X,rev(rev2(Y,L)))) -> rev#(cons(X,L)) -> rev2#(X,L) rev#(cons(X,L)) -> rev2#(X,L) -> rev2#(X,cons(Y,L)) -> rev#(cons(X,rev(rev2(Y,L)))) rev#(cons(X,L)) -> rev2#(X,L) -> rev2#(X,cons(Y,L)) -> rev#(rev2(Y,L)) rev#(cons(X,L)) -> rev2#(X,L) -> rev2#(X,cons(Y,L)) -> rev2#(Y,L) rev#(cons(X,L)) -> rev1#(X,L) -> rev1#(X,cons(Y,L)) -> rev1#(Y,L) rev1#(X,cons(Y,L)) -> rev1#(Y,L) -> rev1#(X,cons(Y,L)) -> rev1#(Y,L) SCC Processor: #sccs: 2 #rules: 5 #arcs: 12/36 DPs: rev2#(X,cons(Y,L)) -> rev2#(Y,L) rev2#(X,cons(Y,L)) -> rev#(rev2(Y,L)) rev#(cons(X,L)) -> rev2#(X,L) rev2#(X,cons(Y,L)) -> rev#(cons(X,rev(rev2(Y,L)))) TRS: rev1(0(),nil()) -> 0() rev1(s(X),nil()) -> s(X) rev1(X,cons(Y,L)) -> rev1(Y,L) rev(nil()) -> nil() rev(cons(X,L)) -> cons(rev1(X,L),rev2(X,L)) rev2(X,nil()) -> nil() rev2(X,cons(Y,L)) -> rev(cons(X,rev(rev2(Y,L)))) Matrix Interpretation Processor: dim=1 interpretation: [rev2#](x0, x1) = 4x1 + 6, [rev#](x0) = 4x0 + 2, [rev2](x0, x1) = x1, [rev](x0) = x0, [cons](x0, x1) = 4x1 + 4, [s](x0) = 0, [rev1](x0, x1) = 2x1 + 4, [nil] = 4, [0] = 0 orientation: rev2#(X,cons(Y,L)) = 16L + 22 >= 4L + 6 = rev2#(Y,L) rev2#(X,cons(Y,L)) = 16L + 22 >= 4L + 2 = rev#(rev2(Y,L)) rev#(cons(X,L)) = 16L + 18 >= 4L + 6 = rev2#(X,L) rev2#(X,cons(Y,L)) = 16L + 22 >= 16L + 18 = rev#(cons(X,rev(rev2(Y,L)))) rev1(0(),nil()) = 12 >= 0 = 0() rev1(s(X),nil()) = 12 >= 0 = s(X) rev1(X,cons(Y,L)) = 8L + 12 >= 2L + 4 = rev1(Y,L) rev(nil()) = 4 >= 4 = nil() rev(cons(X,L)) = 4L + 4 >= 4L + 4 = cons(rev1(X,L),rev2(X,L)) rev2(X,nil()) = 4 >= 4 = nil() rev2(X,cons(Y,L)) = 4L + 4 >= 4L + 4 = rev(cons(X,rev(rev2(Y,L)))) problem: DPs: TRS: rev1(0(),nil()) -> 0() rev1(s(X),nil()) -> s(X) rev1(X,cons(Y,L)) -> rev1(Y,L) rev(nil()) -> nil() rev(cons(X,L)) -> cons(rev1(X,L),rev2(X,L)) rev2(X,nil()) -> nil() rev2(X,cons(Y,L)) -> rev(cons(X,rev(rev2(Y,L)))) Qed DPs: rev1#(X,cons(Y,L)) -> rev1#(Y,L) TRS: rev1(0(),nil()) -> 0() rev1(s(X),nil()) -> s(X) rev1(X,cons(Y,L)) -> rev1(Y,L) rev(nil()) -> nil() rev(cons(X,L)) -> cons(rev1(X,L),rev2(X,L)) rev2(X,nil()) -> nil() rev2(X,cons(Y,L)) -> rev(cons(X,rev(rev2(Y,L)))) KBO Processor: argument filtering: pi(0) = [] pi(nil) = [] pi(rev1) = [] pi(s) = [] pi(cons) = [1] pi(rev) = 0 pi(rev2) = 1 pi(rev1#) = 1 weight function: w0 = 1 w(rev1#) = w(rev2) = w(rev) = w(cons) = w(s) = w(rev1) = w(nil) = w(0) = 1 precedence: rev1# ~ rev ~ cons ~ rev1 ~ nil > rev2 ~ s ~ 0 problem: DPs: TRS: rev1(0(),nil()) -> 0() rev1(s(X),nil()) -> s(X) rev1(X,cons(Y,L)) -> rev1(Y,L) rev(nil()) -> nil() rev(cons(X,L)) -> cons(rev1(X,L),rev2(X,L)) rev2(X,nil()) -> nil() rev2(X,cons(Y,L)) -> rev(cons(X,rev(rev2(Y,L)))) Qed