YES Problem: merge(x,nil()) -> x merge(nil(),y) -> y merge(++(x,y),++(u(),v())) -> ++(x,merge(y,++(u(),v()))) merge(++(x,y),++(u(),v())) -> ++(u(),merge(++(x,y),v())) Proof: DP Processor: DPs: merge#(++(x,y),++(u(),v())) -> merge#(y,++(u(),v())) merge#(++(x,y),++(u(),v())) -> merge#(++(x,y),v()) TRS: merge(x,nil()) -> x merge(nil(),y) -> y merge(++(x,y),++(u(),v())) -> ++(x,merge(y,++(u(),v()))) merge(++(x,y),++(u(),v())) -> ++(u(),merge(++(x,y),v())) Usable Rule Processor: DPs: merge#(++(x,y),++(u(),v())) -> merge#(y,++(u(),v())) merge#(++(x,y),++(u(),v())) -> merge#(++(x,y),v()) TRS: Matrix Interpretation Processor: dim=4 usable rules: interpretation: [merge#](x0, x1) = [1 1 1 1]x0 + [0 0 1 0]x1 + [1], [1] [1] [v] = [0] [1], [1] [1] [u] = [0] [0], [1 1 0 0] [1 0 1 0] [0] [0 0 0 0] [0 1 1 1] [1] [++](x0, x1) = [0 0 0 0]x0 + [1 0 0 0]x1 + [0] [1 1 0 0] [0 1 0 0] [0] orientation: merge#(++(x,y),++(u(),v())) = [2 2 0 0]x + [2 2 2 1]y + [3] >= [1 1 1 1]y + [2] = merge#(y,++(u(),v())) merge#(++(x,y),++(u(),v())) = [2 2 0 0]x + [2 2 2 1]y + [3] >= [2 2 0 0]x + [2 2 2 1]y + [2] = merge#(++(x,y),v()) problem: DPs: TRS: Qed