The rewrite relation of the following TRS is considered.
U11(tt,N,X,XS) | → | U12(splitAt(activate(N),activate(XS)),activate(X)) | (1) |
U12(pair(YS,ZS),X) | → | pair(cons(activate(X),YS),ZS) | (2) |
afterNth(N,XS) | → | snd(splitAt(N,XS)) | (3) |
and(tt,X) | → | activate(X) | (4) |
fst(pair(X,Y)) | → | X | (5) |
head(cons(N,XS)) | → | N | (6) |
natsFrom(N) | → | cons(N,n__natsFrom(s(N))) | (7) |
sel(N,XS) | → | head(afterNth(N,XS)) | (8) |
snd(pair(X,Y)) | → | Y | (9) |
splitAt(0,XS) | → | pair(nil,XS) | (10) |
splitAt(s(N),cons(X,XS)) | → | U11(tt,N,X,activate(XS)) | (11) |
tail(cons(N,XS)) | → | activate(XS) | (12) |
take(N,XS) | → | fst(splitAt(N,XS)) | (13) |
natsFrom(X) | → | n__natsFrom(X) | (14) |
activate(n__natsFrom(X)) | → | natsFrom(X) | (15) |
activate(X) | → | X | (16) |
U11#(tt,N,X,XS) | → | U12#(splitAt(activate(N),activate(XS)),activate(X)) | (17) |
U11#(tt,N,X,XS) | → | splitAt#(activate(N),activate(XS)) | (18) |
U11#(tt,N,X,XS) | → | activate#(N) | (19) |
U11#(tt,N,X,XS) | → | activate#(XS) | (20) |
U11#(tt,N,X,XS) | → | activate#(X) | (21) |
U12#(pair(YS,ZS),X) | → | activate#(X) | (22) |
afterNth#(N,XS) | → | snd#(splitAt(N,XS)) | (23) |
afterNth#(N,XS) | → | splitAt#(N,XS) | (24) |
and#(tt,X) | → | activate#(X) | (25) |
sel#(N,XS) | → | head#(afterNth(N,XS)) | (26) |
sel#(N,XS) | → | afterNth#(N,XS) | (27) |
splitAt#(s(N),cons(X,XS)) | → | U11#(tt,N,X,activate(XS)) | (28) |
splitAt#(s(N),cons(X,XS)) | → | activate#(XS) | (29) |
tail#(cons(N,XS)) | → | activate#(XS) | (30) |
take#(N,XS) | → | fst#(splitAt(N,XS)) | (31) |
take#(N,XS) | → | splitAt#(N,XS) | (32) |
activate#(n__natsFrom(X)) | → | natsFrom#(X) | (33) |
The dependency pairs are split into 1 component.
U11#(tt,N,X,XS) | → | splitAt#(activate(N),activate(XS)) | (18) |
splitAt#(s(N),cons(X,XS)) | → | U11#(tt,N,X,activate(XS)) | (28) |
U11#(tt,n__natsFrom(x0),y1,y2) | → | splitAt#(natsFrom(x0),activate(y2)) | (34) |
U11#(tt,x0,y1,y2) | → | splitAt#(x0,activate(y2)) | (35) |
U11#(tt,n__natsFrom(x0),y1,y2) | → | splitAt#(cons(x0,n__natsFrom(s(x0))),activate(y2)) | (36) |
U11#(tt,n__natsFrom(x0),y1,y2) | → | splitAt#(n__natsFrom(x0),activate(y2)) | (37) |
The dependency pairs are split into 1 component.
U11#(tt,x0,y1,y2) | → | splitAt#(x0,activate(y2)) | (35) |
splitAt#(s(N),cons(X,XS)) | → | U11#(tt,N,X,activate(XS)) | (28) |
U11#(tt,y0,y1,n__natsFrom(x0)) | → | splitAt#(y0,natsFrom(x0)) | (38) |
U11#(tt,y0,y1,x0) | → | splitAt#(y0,x0) | (39) |
U11#(tt,y0,y1,n__natsFrom(x0)) | → | splitAt#(y0,cons(x0,n__natsFrom(s(x0)))) | (40) |
U11#(tt,y0,y1,n__natsFrom(x0)) | → | splitAt#(y0,n__natsFrom(x0)) | (41) |
The dependency pairs are split into 1 component.
U11#(tt,y0,y1,x0) | → | splitAt#(y0,x0) | (39) |
splitAt#(s(N),cons(X,XS)) | → | U11#(tt,N,X,activate(XS)) | (28) |
U11#(tt,y0,y1,n__natsFrom(x0)) | → | splitAt#(y0,cons(x0,n__natsFrom(s(x0)))) | (40) |
Using size-change termination in combination with the subterm criterion one obtains the following initial size-change graphs.
splitAt#(s(N),cons(X,XS)) | → | U11#(tt,N,X,activate(XS)) | (28) |
1 | > | 2 | |
2 | > | 3 | |
U11#(tt,y0,y1,x0) | → | splitAt#(y0,x0) | (39) |
2 | ≥ | 1 | |
4 | ≥ | 2 | |
U11#(tt,y0,y1,n__natsFrom(x0)) | → | splitAt#(y0,cons(x0,n__natsFrom(s(x0)))) | (40) |
2 | ≥ | 1 |
As there is no critical graph in the transitive closure, there are no infinite chains.