YES Time: 0.006254 TRS: { purge nil() -> nil(), purge .(x, y) -> .(x, purge remove(x, y)), remove(x, nil()) -> nil(), remove(x, .(y, z)) -> if(=(x, y), remove(x, z), .(y, remove(x, z)))} DP: DP: { purge# .(x, y) -> purge# remove(x, y), purge# .(x, y) -> remove#(x, y), remove#(x, .(y, z)) -> remove#(x, z)} TRS: { purge nil() -> nil(), purge .(x, y) -> .(x, purge remove(x, y)), remove(x, nil()) -> nil(), remove(x, .(y, z)) -> if(=(x, y), remove(x, z), .(y, remove(x, z)))} UR: { remove(x, nil()) -> nil(), remove(x, .(y, z)) -> if(=(x, y), remove(x, z), .(y, remove(x, z))), a(w, v) -> w, a(w, v) -> v} EDG: {(remove#(x, .(y, z)) -> remove#(x, z), remove#(x, .(y, z)) -> remove#(x, z)) (purge# .(x, y) -> remove#(x, y), remove#(x, .(y, z)) -> remove#(x, z))} STATUS: arrows: 0.777778 SCCS (1): Scc: {remove#(x, .(y, z)) -> remove#(x, z)} SCC (1): Strict: {remove#(x, .(y, z)) -> remove#(x, z)} Weak: { purge nil() -> nil(), purge .(x, y) -> .(x, purge remove(x, y)), remove(x, nil()) -> nil(), remove(x, .(y, z)) -> if(=(x, y), remove(x, z), .(y, remove(x, z)))} POLY: Mode: weak, max_in=1, output_bits=-1, dnum=1, ur=true Interpretation: [if](x0, x1, x2) = x0 + 1, [.](x0, x1) = x0 + 1, [remove](x0, x1) = 1, [=](x0, x1) = 0, [purge](x0) = x0 + 1, [nil] = 1, [remove#](x0, x1) = x0 Strict: remove#(x, .(y, z)) -> remove#(x, z) 1 + 0x + 0y + 1z >= 0 + 0x + 1z Weak: remove(x, .(y, z)) -> if(=(x, y), remove(x, z), .(y, remove(x, z))) 1 + 0x + 0y + 0z >= 2 + 0x + 0y + 0z remove(x, nil()) -> nil() 1 + 0x >= 1 purge .(x, y) -> .(x, purge remove(x, y)) 2 + 0x + 1y >= 3 + 0x + 0y purge nil() -> nil() 2 >= 1 Qed