YES Problem: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) car(.(x,y)) -> x cdr(.(x,y)) -> y null(nil()) -> true() null(.(x,y)) -> false() ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) Proof: DP Processor: DPs: rev#(.(x,y)) -> rev#(y) rev#(.(x,y)) -> ++#(rev(y),.(x,nil())) ++#(.(x,y),z) -> ++#(y,z) TRS: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) car(.(x,y)) -> x cdr(.(x,y)) -> y null(nil()) -> true() null(.(x,y)) -> false() ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) Usable Rule Processor: DPs: rev#(.(x,y)) -> rev#(y) rev#(.(x,y)) -> ++#(rev(y),.(x,nil())) ++#(.(x,y),z) -> ++#(y,z) TRS: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) ADG Processor: DPs: rev#(.(x,y)) -> rev#(y) rev#(.(x,y)) -> ++#(rev(y),.(x,nil())) ++#(.(x,y),z) -> ++#(y,z) TRS: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) graph: ++#(.(x,y),z) -> ++#(y,z) -> ++#(.(x,y),z) -> ++#(y,z) rev#(.(x,y)) -> ++#(rev(y),.(x,nil())) -> ++#(.(x,y),z) -> ++#(y,z) rev#(.(x,y)) -> rev#(y) -> rev#(.(x,y)) -> rev#(y) rev#(.(x,y)) -> rev#(y) -> rev#(.(x,y)) -> ++#(rev(y),.(x,nil())) Restore Modifier: DPs: rev#(.(x,y)) -> rev#(y) rev#(.(x,y)) -> ++#(rev(y),.(x,nil())) ++#(.(x,y),z) -> ++#(y,z) TRS: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) car(.(x,y)) -> x cdr(.(x,y)) -> y null(nil()) -> true() null(.(x,y)) -> false() ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) SCC Processor: #sccs: 2 #rules: 2 #arcs: 4/9 DPs: rev#(.(x,y)) -> rev#(y) TRS: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) car(.(x,y)) -> x cdr(.(x,y)) -> y null(nil()) -> true() null(.(x,y)) -> false() ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) Matrix Interpretation Processor: dimension: 1 interpretation: [rev#](x0) = x0 + 1, [false] = 1, [true] = 0, [null](x0) = 1, [cdr](x0) = x0, [car](x0) = x0, [++](x0, x1) = x0 + x1, [.](x0, x1) = x0 + x1 + 1, [rev](x0) = x0, [nil] = 0 orientation: rev#(.(x,y)) = x + y + 2 >= y + 1 = rev#(y) rev(nil()) = 0 >= 0 = nil() rev(.(x,y)) = x + y + 1 >= x + y + 1 = ++(rev(y),.(x,nil())) car(.(x,y)) = x + y + 1 >= x = x cdr(.(x,y)) = x + y + 1 >= y = y null(nil()) = 1 >= 0 = true() null(.(x,y)) = 1 >= 1 = false() ++(nil(),y) = y >= y = y ++(.(x,y),z) = x + y + z + 1 >= x + y + z + 1 = .(x,++(y,z)) problem: DPs: TRS: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) car(.(x,y)) -> x cdr(.(x,y)) -> y null(nil()) -> true() null(.(x,y)) -> false() ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) Qed DPs: ++#(.(x,y),z) -> ++#(y,z) TRS: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) car(.(x,y)) -> x cdr(.(x,y)) -> y null(nil()) -> true() null(.(x,y)) -> false() ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) Matrix Interpretation Processor: dimension: 1 interpretation: [++#](x0, x1) = x0 + 1, [false] = 0, [true] = 0, [null](x0) = 0, [cdr](x0) = x0, [car](x0) = x0, [++](x0, x1) = x0 + x1, [.](x0, x1) = x0 + x1 + 1, [rev](x0) = x0 + 1, [nil] = 0 orientation: ++#(.(x,y),z) = x + y + 2 >= y + 1 = ++#(y,z) rev(nil()) = 1 >= 0 = nil() rev(.(x,y)) = x + y + 2 >= x + y + 2 = ++(rev(y),.(x,nil())) car(.(x,y)) = x + y + 1 >= x = x cdr(.(x,y)) = x + y + 1 >= y = y null(nil()) = 0 >= 0 = true() null(.(x,y)) = 0 >= 0 = false() ++(nil(),y) = y >= y = y ++(.(x,y),z) = x + y + z + 1 >= x + y + z + 1 = .(x,++(y,z)) problem: DPs: TRS: rev(nil()) -> nil() rev(.(x,y)) -> ++(rev(y),.(x,nil())) car(.(x,y)) -> x cdr(.(x,y)) -> y null(nil()) -> true() null(.(x,y)) -> false() ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) Qed