We are left with following problem, upon which TcT provides the certificate YES(?,POLY). Strict Trs: { U11(tt(), N, XS) -> U12(tt(), activate(N), activate(XS)) , U12(tt(), N, XS) -> snd(splitAt(activate(N), activate(XS))) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(activate(X)) , activate(n__s(X)) -> s(activate(X)) , snd(pair(X, Y)) -> U51(tt(), Y) , splitAt(0(), XS) -> pair(nil(), XS) , splitAt(s(N), cons(X, XS)) -> U61(tt(), N, X, activate(XS)) , U21(tt(), X) -> U22(tt(), activate(X)) , U22(tt(), X) -> activate(X) , U31(tt(), N) -> U32(tt(), activate(N)) , U32(tt(), N) -> activate(N) , U41(tt(), N, XS) -> U42(tt(), activate(N), activate(XS)) , U42(tt(), N, XS) -> head(afterNth(activate(N), activate(XS))) , head(cons(N, XS)) -> U31(tt(), N) , afterNth(N, XS) -> U11(tt(), N, XS) , U51(tt(), Y) -> U52(tt(), activate(Y)) , U52(tt(), Y) -> activate(Y) , U61(tt(), N, X, XS) -> U62(tt(), activate(N), activate(X), activate(XS)) , U62(tt(), N, X, XS) -> U63(tt(), activate(N), activate(X), activate(XS)) , U63(tt(), N, X, XS) -> U64(splitAt(activate(N), activate(XS)), activate(X)) , U64(pair(YS, ZS), X) -> pair(cons(activate(X), YS), ZS) , U71(tt(), XS) -> U72(tt(), activate(XS)) , U72(tt(), XS) -> activate(XS) , U81(tt(), N, XS) -> U82(tt(), activate(N), activate(XS)) , U82(tt(), N, XS) -> fst(splitAt(activate(N), activate(XS))) , fst(pair(X, Y)) -> U21(tt(), X) , natsFrom(N) -> cons(N, n__natsFrom(n__s(N))) , natsFrom(X) -> n__natsFrom(X) , sel(N, XS) -> U41(tt(), N, XS) , s(X) -> n__s(X) , tail(cons(N, XS)) -> U71(tt(), activate(XS)) , take(N, XS) -> U81(tt(), N, XS) } Obligation: innermost runtime complexity Answer: YES(?,POLY) Arguments of following rules are not normal-forms: { splitAt(s(N), cons(X, XS)) -> U61(tt(), N, X, activate(XS)) } All above mentioned rules can be savely removed. We are left with following problem, upon which TcT provides the certificate YES(?,POLY). Strict Trs: { U11(tt(), N, XS) -> U12(tt(), activate(N), activate(XS)) , U12(tt(), N, XS) -> snd(splitAt(activate(N), activate(XS))) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(activate(X)) , activate(n__s(X)) -> s(activate(X)) , snd(pair(X, Y)) -> U51(tt(), Y) , splitAt(0(), XS) -> pair(nil(), XS) , U21(tt(), X) -> U22(tt(), activate(X)) , U22(tt(), X) -> activate(X) , U31(tt(), N) -> U32(tt(), activate(N)) , U32(tt(), N) -> activate(N) , U41(tt(), N, XS) -> U42(tt(), activate(N), activate(XS)) , U42(tt(), N, XS) -> head(afterNth(activate(N), activate(XS))) , head(cons(N, XS)) -> U31(tt(), N) , afterNth(N, XS) -> U11(tt(), N, XS) , U51(tt(), Y) -> U52(tt(), activate(Y)) , U52(tt(), Y) -> activate(Y) , U61(tt(), N, X, XS) -> U62(tt(), activate(N), activate(X), activate(XS)) , U62(tt(), N, X, XS) -> U63(tt(), activate(N), activate(X), activate(XS)) , U63(tt(), N, X, XS) -> U64(splitAt(activate(N), activate(XS)), activate(X)) , U64(pair(YS, ZS), X) -> pair(cons(activate(X), YS), ZS) , U71(tt(), XS) -> U72(tt(), activate(XS)) , U72(tt(), XS) -> activate(XS) , U81(tt(), N, XS) -> U82(tt(), activate(N), activate(XS)) , U82(tt(), N, XS) -> fst(splitAt(activate(N), activate(XS))) , fst(pair(X, Y)) -> U21(tt(), X) , natsFrom(N) -> cons(N, n__natsFrom(n__s(N))) , natsFrom(X) -> n__natsFrom(X) , sel(N, XS) -> U41(tt(), N, XS) , s(X) -> n__s(X) , tail(cons(N, XS)) -> U71(tt(), activate(XS)) , take(N, XS) -> U81(tt(), N, XS) } Obligation: innermost runtime complexity Answer: YES(?,POLY) The input was oriented with the instance of 'Polynomial Path Order (PS)' as induced by the safe mapping safe(U11) = {}, safe(tt) = {}, safe(U12) = {}, safe(activate) = {}, safe(snd) = {}, safe(splitAt) = {2}, safe(U21) = {1}, safe(U22) = {}, safe(U31) = {1}, safe(U32) = {}, safe(U41) = {}, safe(U42) = {}, safe(head) = {}, safe(afterNth) = {}, safe(U51) = {1}, safe(U52) = {}, safe(U61) = {}, safe(U62) = {}, safe(U63) = {1}, safe(U64) = {}, safe(pair) = {1, 2}, safe(cons) = {1, 2}, safe(U71) = {1}, safe(U72) = {}, safe(U81) = {}, safe(U82) = {}, safe(fst) = {}, safe(natsFrom) = {1}, safe(n__natsFrom) = {1}, safe(n__s) = {1}, safe(sel) = {}, safe(0) = {}, safe(nil) = {}, safe(s) = {1}, safe(tail) = {}, safe(take) = {} and precedence U11 > U12, U11 > activate, U12 > activate, U12 > snd, U12 > splitAt, activate > natsFrom, activate > s, snd > U51, U21 > activate, U21 > U22, U22 > activate, U31 > activate, U31 > U32, U32 > activate, U41 > activate, U41 > U42, U42 > activate, U42 > head, U42 > afterNth, head > U31, afterNth > U11, U51 > activate, U51 > U52, U52 > activate, U61 > activate, U61 > U62, U62 > activate, U62 > U63, U63 > activate, U63 > splitAt, U63 > U64, U71 > activate, U71 > U72, U72 > activate, U81 > activate, U81 > U82, U82 > activate, U82 > splitAt, U82 > fst, fst > U21, sel > U41, tail > activate, tail > U71, take > U81, activate ~ U64 . Following symbols are considered recursive: {U11, activate, snd, U21, U22, U31, U32, U42, head, afterNth, U51, U52, U62, U64, U72, fst, natsFrom, sel, s, tail, take} The recursion depth is 9. For your convenience, here are the satisfied ordering constraints: U11(tt(), N, XS;) > U12(tt(), activate(N;), activate(XS;);) U12(tt(), N, XS;) > snd(splitAt(activate(N;); activate(XS;));) activate(X;) > X activate(n__natsFrom(; X);) > natsFrom(; activate(X;)) activate(n__s(; X);) > s(; activate(X;)) snd(pair(; X, Y);) > U51(Y; tt()) splitAt(0(); XS) > pair(; nil(), XS) U21(X; tt()) > U22(tt(), activate(X;);) U22(tt(), X;) > activate(X;) U31(N; tt()) > U32(tt(), activate(N;);) U32(tt(), N;) > activate(N;) U41(tt(), N, XS;) > U42(tt(), activate(N;), activate(XS;);) U42(tt(), N, XS;) > head(afterNth(activate(N;), activate(XS;););) head(cons(; N, XS);) > U31(N; tt()) afterNth(N, XS;) > U11(tt(), N, XS;) U51(Y; tt()) > U52(tt(), activate(Y;);) U52(tt(), Y;) > activate(Y;) U61(tt(), N, X, XS;) > U62(tt(), activate(N;), activate(X;), activate(XS;);) U62(tt(), N, X, XS;) > U63(activate(N;), activate(X;), activate(XS;); tt()) U63(N, X, XS; tt()) > U64(splitAt(activate(N;); activate(XS;)), activate(X;);) U64(pair(; YS, ZS), X;) > pair(; cons(; activate(X;), YS), ZS) U71(XS; tt()) > U72(tt(), activate(XS;);) U72(tt(), XS;) > activate(XS;) U81(tt(), N, XS;) > U82(tt(), activate(N;), activate(XS;);) U82(tt(), N, XS;) > fst(splitAt(activate(N;); activate(XS;));) fst(pair(; X, Y);) > U21(X; tt()) natsFrom(; N) > cons(; N, n__natsFrom(; n__s(; N))) natsFrom(; X) > n__natsFrom(; X) sel(N, XS;) > U41(tt(), N, XS;) s(; X) > n__s(; X) tail(cons(; N, XS);) > U71(activate(XS;); tt()) take(N, XS;) > U81(tt(), N, XS;) Hurray, we answered YES(?,POLY)