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))) 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: 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))) 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) 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))) KBO Processor: argument filtering: pi(0) = [] pi(eq) = [1] pi(true) = [] pi(s) = 0 pi(false) = [] pi(nil) = [] pi(rm) = 1 pi(add) = [1] pi(ifrm) = 2 pi(purge) = 0 pi(purge#) = [0] weight function: w0 = 1 w(purge#) = w(nil) = w(false) = w(true) = w(eq) = w(0) = 1 w(purge) = w(ifrm) = w(add) = w(rm) = w(s) = 0 precedence: s > purge# ~ purge ~ ifrm ~ add ~ rm ~ nil ~ false ~ true ~ eq ~ 0 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: dim=1 interpretation: [ifrm#](x0, x1, x2) = 1/2x0 + x2 + 7/2, [rm#](x0, x1) = 2x1 + 5/2, [purge](x0) = x0, [ifrm](x0, x1, x2) = x2, [add](x0, x1) = 1/2x0 + 7/2x1 + 2, [rm](x0, x1) = x1, [nil] = 5/2, [false] = 3, [s](x0) = 2x0 + 3, [true] = 0, [eq](x0, x1) = x1 + 1, [0] = 5/2 orientation: rm#(N,add(M,X)) = M + 7X + 13/2 >= M + 7/2X + 6 = ifrm#(eq(N,M),N,add(M,X)) ifrm#(true(),N,add(M,X)) = 1/2M + 7/2X + 11/2 >= 2X + 5/2 = rm#(N,X) ifrm#(false(),N,add(M,X)) = 1/2M + 7/2X + 7 >= 2X + 5/2 = rm#(N,X) eq(0(),0()) = 7/2 >= 0 = true() eq(0(),s(X)) = 2X + 4 >= 3 = false() eq(s(X),0()) = 7/2 >= 3 = false() eq(s(X),s(Y)) = 2Y + 4 >= Y + 1 = eq(X,Y) rm(N,nil()) = 5/2 >= 5/2 = nil() rm(N,add(M,X)) = 1/2M + 7/2X + 2 >= 1/2M + 7/2X + 2 = ifrm(eq(N,M),N,add(M,X)) ifrm(true(),N,add(M,X)) = 1/2M + 7/2X + 2 >= X = rm(N,X) ifrm(false(),N,add(M,X)) = 1/2M + 7/2X + 2 >= 1/2M + 7/2X + 2 = add(M,rm(N,X)) purge(nil()) = 5/2 >= 5/2 = nil() purge(add(N,X)) = 1/2N + 7/2X + 2 >= 1/2N + 7/2X + 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: 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))) KBO Processor: argument filtering: pi(0) = [] pi(eq) = [1] pi(true) = [] pi(s) = [0] pi(false) = [] pi(nil) = [] pi(rm) = 1 pi(add) = 1 pi(ifrm) = 2 pi(purge) = 0 pi(eq#) = 1 weight function: w0 = 1 w(eq#) = w(purge) = w(ifrm) = w(add) = w(rm) = w(nil) = w(false) = w( s) = w(true) = w(eq) = w(0) = 1 precedence: eq# ~ purge ~ ifrm ~ add ~ rm ~ nil ~ false ~ s ~ true ~ eq ~ 0 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