YES Problem: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) -> x rev1(x,++(y,z)) -> rev1(y,z) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) Proof: DP Processor: DPs: rev#(++(x,y)) -> rev2#(x,y) rev#(++(x,y)) -> rev1#(x,y) rev1#(x,++(y,z)) -> rev1#(y,z) rev2#(x,++(y,z)) -> rev2#(y,z) rev2#(x,++(y,z)) -> rev#(rev2(y,z)) rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) TRS: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) -> x rev1(x,++(y,z)) -> rev1(y,z) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) TDG Processor: DPs: rev#(++(x,y)) -> rev2#(x,y) rev#(++(x,y)) -> rev1#(x,y) rev1#(x,++(y,z)) -> rev1#(y,z) rev2#(x,++(y,z)) -> rev2#(y,z) rev2#(x,++(y,z)) -> rev#(rev2(y,z)) rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) TRS: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) -> x rev1(x,++(y,z)) -> rev1(y,z) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) graph: rev1#(x,++(y,z)) -> rev1#(y,z) -> rev1#(x,++(y,z)) -> rev1#(y,z) rev2#(x,++(y,z)) -> rev2#(y,z) -> rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) rev2#(x,++(y,z)) -> rev2#(y,z) -> rev2#(x,++(y,z)) -> rev#(rev2(y,z)) rev2#(x,++(y,z)) -> rev2#(y,z) -> rev2#(x,++(y,z)) -> rev2#(y,z) rev2#(x,++(y,z)) -> rev#(rev2(y,z)) -> rev#(++(x,y)) -> rev1#(x,y) rev2#(x,++(y,z)) -> rev#(rev2(y,z)) -> rev#(++(x,y)) -> rev2#(x,y) rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) -> rev#(++(x,y)) -> rev1#(x,y) rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) -> rev#(++(x,y)) -> rev2#(x,y) rev#(++(x,y)) -> rev1#(x,y) -> rev1#(x,++(y,z)) -> rev1#(y,z) rev#(++(x,y)) -> rev2#(x,y) -> rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) rev#(++(x,y)) -> rev2#(x,y) -> rev2#(x,++(y,z)) -> rev#(rev2(y,z)) rev#(++(x,y)) -> rev2#(x,y) -> rev2#(x,++(y,z)) -> rev2#(y,z) SCC Processor: #sccs: 2 #rules: 5 #arcs: 12/36 DPs: rev2#(x,++(y,z)) -> rev2#(y,z) rev2#(x,++(y,z)) -> rev#(rev2(y,z)) rev#(++(x,y)) -> rev2#(x,y) rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) TRS: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) -> x rev1(x,++(y,z)) -> rev1(y,z) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) Arctic Interpretation Processor: dimension: 1 usable rules: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) interpretation: [rev2#](x0, x1) = 2x1 + 0, [rev#](x0) = x0 + 2, [rev2](x0, x1) = x1, [rev1](x0, x1) = 3x0 + x1, [++](x0, x1) = 4x1 + 0, [rev](x0) = x0, [nil] = 4 orientation: rev2#(x,++(y,z)) = 6z + 2 >= 2z + 0 = rev2#(y,z) rev2#(x,++(y,z)) = 6z + 2 >= z + 2 = rev#(rev2(y,z)) rev#(++(x,y)) = 4y + 2 >= 2y + 0 = rev2#(x,y) rev2#(x,++(y,z)) = 6z + 2 >= 4z + 2 = rev#(++(x,rev(rev2(y,z)))) rev(nil()) = 4 >= 4 = nil() rev(++(x,y)) = 4y + 0 >= 4y + 0 = ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) = 3x + 4 >= x = x rev1(x,++(y,z)) = 3x + 4z + 0 >= 3y + z = rev1(y,z) rev2(x,nil()) = 4 >= 4 = nil() rev2(x,++(y,z)) = 4z + 0 >= 4z + 0 = rev(++(x,rev(rev2(y,z)))) problem: DPs: rev2#(x,++(y,z)) -> rev#(rev2(y,z)) rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) TRS: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) -> x rev1(x,++(y,z)) -> rev1(y,z) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) Restore Modifier: DPs: rev2#(x,++(y,z)) -> rev#(rev2(y,z)) rev2#(x,++(y,z)) -> rev#(++(x,rev(rev2(y,z)))) TRS: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) -> x rev1(x,++(y,z)) -> rev1(y,z) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) SCC Processor: #sccs: 0 #rules: 0 #arcs: 8/4 DPs: rev1#(x,++(y,z)) -> rev1#(y,z) TRS: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) -> x rev1(x,++(y,z)) -> rev1(y,z) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) Subterm Criterion Processor: simple projection: pi(rev1#) = 1 problem: DPs: TRS: rev(nil()) -> nil() rev(++(x,y)) -> ++(rev1(x,y),rev2(x,y)) rev1(x,nil()) -> x rev1(x,++(y,z)) -> rev1(y,z) rev2(x,nil()) -> nil() rev2(x,++(y,z)) -> rev(++(x,rev(rev2(y,z)))) Qed