YES Problem: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Proof: DP Processor: DPs: eq#(s(X),s(Y)) -> eq#(X,Y) rm#(N,add(M,X)) -> eq#(N,M) rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) ifrm#(true(),N,add(M,X)) -> rm#(N,X) ifrm#(false(),N,add(M,X)) -> rm#(N,X) purge#(add(N,X)) -> rm#(N,X) purge#(add(N,X)) -> purge#(rm(N,X)) TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Usable Rule Processor: DPs: eq#(s(X),s(Y)) -> eq#(X,Y) rm#(N,add(M,X)) -> eq#(N,M) rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) ifrm#(true(),N,add(M,X)) -> rm#(N,X) ifrm#(false(),N,add(M,X)) -> rm#(N,X) purge#(add(N,X)) -> rm#(N,X) purge#(add(N,X)) -> purge#(rm(N,X)) TRS: f14(x,y) -> x f14(x,y) -> y eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) TDG Processor: DPs: eq#(s(X),s(Y)) -> eq#(X,Y) rm#(N,add(M,X)) -> eq#(N,M) rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) ifrm#(true(),N,add(M,X)) -> rm#(N,X) ifrm#(false(),N,add(M,X)) -> rm#(N,X) purge#(add(N,X)) -> rm#(N,X) purge#(add(N,X)) -> purge#(rm(N,X)) TRS: f14(x,y) -> x f14(x,y) -> y eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) graph: purge#(add(N,X)) -> purge#(rm(N,X)) -> purge#(add(N,X)) -> purge#(rm(N,X)) purge#(add(N,X)) -> purge#(rm(N,X)) -> purge#(add(N,X)) -> rm#(N,X) purge#(add(N,X)) -> rm#(N,X) -> rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) purge#(add(N,X)) -> rm#(N,X) -> rm#(N,add(M,X)) -> eq#(N,M) ifrm#(false(),N,add(M,X)) -> rm#(N,X) -> rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) ifrm#(false(),N,add(M,X)) -> rm#(N,X) -> rm#(N,add(M,X)) -> eq#(N,M) ifrm#(true(),N,add(M,X)) -> rm#(N,X) -> rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) ifrm#(true(),N,add(M,X)) -> rm#(N,X) -> rm#(N,add(M,X)) -> eq#(N,M) rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) -> ifrm#(false(),N,add(M,X)) -> rm#(N,X) rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) -> ifrm#(true(),N,add(M,X)) -> rm#(N,X) rm#(N,add(M,X)) -> eq#(N,M) -> eq#(s(X),s(Y)) -> eq#(X,Y) eq#(s(X),s(Y)) -> eq#(X,Y) -> eq#(s(X),s(Y)) -> eq#(X,Y) Restore Modifier: DPs: eq#(s(X),s(Y)) -> eq#(X,Y) rm#(N,add(M,X)) -> eq#(N,M) rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) ifrm#(true(),N,add(M,X)) -> rm#(N,X) ifrm#(false(),N,add(M,X)) -> rm#(N,X) purge#(add(N,X)) -> rm#(N,X) purge#(add(N,X)) -> purge#(rm(N,X)) TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) SCC Processor: #sccs: 3 #rules: 5 #arcs: 12/49 DPs: purge#(add(N,X)) -> purge#(rm(N,X)) TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Matrix Interpretation Processor: dimension: 1 interpretation: [purge#](x0) = x0, [purge](x0) = x0 + 1, [ifrm](x0, x1, x2) = x2, [add](x0, x1) = x1 + 1, [rm](x0, x1) = x1, [nil] = 0, [false] = 0, [s](x0) = 0, [true] = 0, [eq](x0, x1) = 0, [0] = 0 orientation: purge#(add(N,X)) = X + 1 >= X = purge#(rm(N,X)) eq(0(),0()) = 0 >= 0 = true() eq(0(),s(X)) = 0 >= 0 = false() eq(s(X),0()) = 0 >= 0 = false() eq(s(X),s(Y)) = 0 >= 0 = eq(X,Y) rm(N,nil()) = 0 >= 0 = nil() rm(N,add(M,X)) = X + 1 >= X + 1 = ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) = X + 1 >= X = rm(N,X) ifrm(false(),N,add(M,X)) = X + 1 >= X + 1 = add(M,rm(N,X)) purge(nil()) = 1 >= 0 = nil() purge(add(N,X)) = X + 2 >= X + 2 = add(N,purge(rm(N,X))) problem: DPs: TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Qed DPs: rm#(N,add(M,X)) -> ifrm#(eq(N,M),N,add(M,X)) ifrm#(true(),N,add(M,X)) -> rm#(N,X) ifrm#(false(),N,add(M,X)) -> rm#(N,X) TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Matrix Interpretation Processor: dimension: 1 interpretation: [ifrm#](x0, x1, x2) = x2, [rm#](x0, x1) = x1 + 1, [purge](x0) = x0, [ifrm](x0, x1, x2) = x2, [add](x0, x1) = x1 + 1, [rm](x0, x1) = x1, [nil] = 1, [false] = 0, [s](x0) = 0, [true] = 0, [eq](x0, x1) = 0, [0] = 0 orientation: rm#(N,add(M,X)) = X + 2 >= X + 1 = ifrm#(eq(N,M),N,add(M,X)) ifrm#(true(),N,add(M,X)) = X + 1 >= X + 1 = rm#(N,X) ifrm#(false(),N,add(M,X)) = X + 1 >= X + 1 = rm#(N,X) eq(0(),0()) = 0 >= 0 = true() eq(0(),s(X)) = 0 >= 0 = false() eq(s(X),0()) = 0 >= 0 = false() eq(s(X),s(Y)) = 0 >= 0 = eq(X,Y) rm(N,nil()) = 1 >= 1 = nil() rm(N,add(M,X)) = X + 1 >= X + 1 = ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) = X + 1 >= X = rm(N,X) ifrm(false(),N,add(M,X)) = X + 1 >= X + 1 = add(M,rm(N,X)) purge(nil()) = 1 >= 1 = nil() purge(add(N,X)) = X + 1 >= X + 1 = add(N,purge(rm(N,X))) problem: DPs: ifrm#(true(),N,add(M,X)) -> rm#(N,X) ifrm#(false(),N,add(M,X)) -> rm#(N,X) TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Matrix Interpretation Processor: dimension: 1 interpretation: [ifrm#](x0, x1, x2) = x0 + 1, [rm#](x0, x1) = 0, [purge](x0) = x0, [ifrm](x0, x1, x2) = x0 + x1, [add](x0, x1) = 0, [rm](x0, x1) = x0 + 1, [nil] = 1, [false] = 1, [s](x0) = 0, [true] = 1, [eq](x0, x1) = 1, [0] = 0 orientation: ifrm#(true(),N,add(M,X)) = 2 >= 0 = rm#(N,X) ifrm#(false(),N,add(M,X)) = 2 >= 0 = rm#(N,X) eq(0(),0()) = 1 >= 1 = true() eq(0(),s(X)) = 1 >= 1 = false() eq(s(X),0()) = 1 >= 1 = false() eq(s(X),s(Y)) = 1 >= 1 = eq(X,Y) rm(N,nil()) = N + 1 >= 1 = nil() rm(N,add(M,X)) = N + 1 >= N + 1 = ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) = N + 1 >= N + 1 = rm(N,X) ifrm(false(),N,add(M,X)) = N + 1 >= 0 = add(M,rm(N,X)) purge(nil()) = 1 >= 1 = nil() purge(add(N,X)) = 0 >= 0 = add(N,purge(rm(N,X))) problem: DPs: TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Qed DPs: eq#(s(X),s(Y)) -> eq#(X,Y) TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Matrix Interpretation Processor: dimension: 1 interpretation: [eq#](x0, x1) = x1 + 1, [purge](x0) = 0, [ifrm](x0, x1, x2) = 0, [add](x0, x1) = 0, [rm](x0, x1) = 0, [nil] = 0, [false] = 0, [s](x0) = x0 + 1, [true] = 0, [eq](x0, x1) = 0, [0] = 0 orientation: eq#(s(X),s(Y)) = Y + 2 >= Y + 1 = eq#(X,Y) eq(0(),0()) = 0 >= 0 = true() eq(0(),s(X)) = 0 >= 0 = false() eq(s(X),0()) = 0 >= 0 = false() eq(s(X),s(Y)) = 0 >= 0 = eq(X,Y) rm(N,nil()) = 0 >= 0 = nil() rm(N,add(M,X)) = 0 >= 0 = ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) = 0 >= 0 = rm(N,X) ifrm(false(),N,add(M,X)) = 0 >= 0 = add(M,rm(N,X)) purge(nil()) = 0 >= 0 = nil() purge(add(N,X)) = 0 >= 0 = add(N,purge(rm(N,X))) problem: DPs: TRS: eq(0(),0()) -> true() eq(0(),s(X)) -> false() eq(s(X),0()) -> false() eq(s(X),s(Y)) -> eq(X,Y) rm(N,nil()) -> nil() rm(N,add(M,X)) -> ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) -> rm(N,X) ifrm(false(),N,add(M,X)) -> add(M,rm(N,X)) purge(nil()) -> nil() purge(add(N,X)) -> add(N,purge(rm(N,X))) Qed