YES(?,O(n^1)) We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , fst(pair(XS, YS)) -> XS , snd(pair(XS, YS)) -> YS , splitAt(s(N), cons(X, XS)) -> u(splitAt(N, activate(XS)), N, X, activate(XS)) , splitAt(0(), XS) -> pair(nil(), XS) , u(pair(YS, ZS), N, X, XS) -> pair(cons(activate(X), YS), ZS) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) , head(cons(N, XS)) -> N , tail(cons(N, XS)) -> activate(XS) , sel(N, XS) -> head(afterNth(N, XS)) , afterNth(N, XS) -> snd(splitAt(N, XS)) , take(N, XS) -> fst(splitAt(N, XS)) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) We add following dependency tuples: Strict DPs: { natsFrom^#(N) -> c_1() , natsFrom^#(X) -> c_2() , fst^#(pair(XS, YS)) -> c_3() , snd^#(pair(XS, YS)) -> c_4() , splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , splitAt^#(0(), XS) -> c_6() , u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , activate^#(X) -> c_8() , activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , head^#(cons(N, XS)) -> c_10() , tail^#(cons(N, XS)) -> c_11(activate^#(XS)) , sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) } and mark the set of starting terms. We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { natsFrom^#(N) -> c_1() , natsFrom^#(X) -> c_2() , fst^#(pair(XS, YS)) -> c_3() , snd^#(pair(XS, YS)) -> c_4() , splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , splitAt^#(0(), XS) -> c_6() , u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , activate^#(X) -> c_8() , activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , head^#(cons(N, XS)) -> c_10() , tail^#(cons(N, XS)) -> c_11(activate^#(XS)) , sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , fst(pair(XS, YS)) -> XS , snd(pair(XS, YS)) -> YS , splitAt(s(N), cons(X, XS)) -> u(splitAt(N, activate(XS)), N, X, activate(XS)) , splitAt(0(), XS) -> pair(nil(), XS) , u(pair(YS, ZS), N, X, XS) -> pair(cons(activate(X), YS), ZS) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) , head(cons(N, XS)) -> N , tail(cons(N, XS)) -> activate(XS) , sel(N, XS) -> head(afterNth(N, XS)) , afterNth(N, XS) -> snd(splitAt(N, XS)) , take(N, XS) -> fst(splitAt(N, XS)) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) We estimate the number of application of {1,2,3,4,6,8,10} by applications of Pre({1,2,3,4,6,8,10}) = {5,7,9,11,12,13,14}. Here rules are labeled as follows: DPs: { 1: natsFrom^#(N) -> c_1() , 2: natsFrom^#(X) -> c_2() , 3: fst^#(pair(XS, YS)) -> c_3() , 4: snd^#(pair(XS, YS)) -> c_4() , 5: splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , 6: splitAt^#(0(), XS) -> c_6() , 7: u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , 8: activate^#(X) -> c_8() , 9: activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , 10: head^#(cons(N, XS)) -> c_10() , 11: tail^#(cons(N, XS)) -> c_11(activate^#(XS)) , 12: sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , 13: afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , 14: take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) } We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , tail^#(cons(N, XS)) -> c_11(activate^#(XS)) , sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) } Weak DPs: { natsFrom^#(N) -> c_1() , natsFrom^#(X) -> c_2() , fst^#(pair(XS, YS)) -> c_3() , snd^#(pair(XS, YS)) -> c_4() , splitAt^#(0(), XS) -> c_6() , activate^#(X) -> c_8() , head^#(cons(N, XS)) -> c_10() } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , fst(pair(XS, YS)) -> XS , snd(pair(XS, YS)) -> YS , splitAt(s(N), cons(X, XS)) -> u(splitAt(N, activate(XS)), N, X, activate(XS)) , splitAt(0(), XS) -> pair(nil(), XS) , u(pair(YS, ZS), N, X, XS) -> pair(cons(activate(X), YS), ZS) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) , head(cons(N, XS)) -> N , tail(cons(N, XS)) -> activate(XS) , sel(N, XS) -> head(afterNth(N, XS)) , afterNth(N, XS) -> snd(splitAt(N, XS)) , take(N, XS) -> fst(splitAt(N, XS)) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) We estimate the number of application of {3} by applications of Pre({3}) = {1,2,4}. Here rules are labeled as follows: DPs: { 1: splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , 2: u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , 3: activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , 4: tail^#(cons(N, XS)) -> c_11(activate^#(XS)) , 5: sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , 6: afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , 7: take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) , 8: natsFrom^#(N) -> c_1() , 9: natsFrom^#(X) -> c_2() , 10: fst^#(pair(XS, YS)) -> c_3() , 11: snd^#(pair(XS, YS)) -> c_4() , 12: splitAt^#(0(), XS) -> c_6() , 13: activate^#(X) -> c_8() , 14: head^#(cons(N, XS)) -> c_10() } We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , tail^#(cons(N, XS)) -> c_11(activate^#(XS)) , sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) } Weak DPs: { natsFrom^#(N) -> c_1() , natsFrom^#(X) -> c_2() , fst^#(pair(XS, YS)) -> c_3() , snd^#(pair(XS, YS)) -> c_4() , splitAt^#(0(), XS) -> c_6() , activate^#(X) -> c_8() , activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , head^#(cons(N, XS)) -> c_10() } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , fst(pair(XS, YS)) -> XS , snd(pair(XS, YS)) -> YS , splitAt(s(N), cons(X, XS)) -> u(splitAt(N, activate(XS)), N, X, activate(XS)) , splitAt(0(), XS) -> pair(nil(), XS) , u(pair(YS, ZS), N, X, XS) -> pair(cons(activate(X), YS), ZS) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) , head(cons(N, XS)) -> N , tail(cons(N, XS)) -> activate(XS) , sel(N, XS) -> head(afterNth(N, XS)) , afterNth(N, XS) -> snd(splitAt(N, XS)) , take(N, XS) -> fst(splitAt(N, XS)) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) We estimate the number of application of {2,3} by applications of Pre({2,3}) = {1}. Here rules are labeled as follows: DPs: { 1: splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , 2: u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , 3: tail^#(cons(N, XS)) -> c_11(activate^#(XS)) , 4: sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , 5: afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , 6: take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) , 7: natsFrom^#(N) -> c_1() , 8: natsFrom^#(X) -> c_2() , 9: fst^#(pair(XS, YS)) -> c_3() , 10: snd^#(pair(XS, YS)) -> c_4() , 11: splitAt^#(0(), XS) -> c_6() , 12: activate^#(X) -> c_8() , 13: activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , 14: head^#(cons(N, XS)) -> c_10() } We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) } Weak DPs: { natsFrom^#(N) -> c_1() , natsFrom^#(X) -> c_2() , fst^#(pair(XS, YS)) -> c_3() , snd^#(pair(XS, YS)) -> c_4() , splitAt^#(0(), XS) -> c_6() , u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , activate^#(X) -> c_8() , activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , head^#(cons(N, XS)) -> c_10() , tail^#(cons(N, XS)) -> c_11(activate^#(XS)) } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , fst(pair(XS, YS)) -> XS , snd(pair(XS, YS)) -> YS , splitAt(s(N), cons(X, XS)) -> u(splitAt(N, activate(XS)), N, X, activate(XS)) , splitAt(0(), XS) -> pair(nil(), XS) , u(pair(YS, ZS), N, X, XS) -> pair(cons(activate(X), YS), ZS) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) , head(cons(N, XS)) -> N , tail(cons(N, XS)) -> activate(XS) , sel(N, XS) -> head(afterNth(N, XS)) , afterNth(N, XS) -> snd(splitAt(N, XS)) , take(N, XS) -> fst(splitAt(N, XS)) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { natsFrom^#(N) -> c_1() , natsFrom^#(X) -> c_2() , fst^#(pair(XS, YS)) -> c_3() , snd^#(pair(XS, YS)) -> c_4() , splitAt^#(0(), XS) -> c_6() , u^#(pair(YS, ZS), N, X, XS) -> c_7(activate^#(X)) , activate^#(X) -> c_8() , activate^#(n__natsFrom(X)) -> c_9(natsFrom^#(X)) , head^#(cons(N, XS)) -> c_10() , tail^#(cons(N, XS)) -> c_11(activate^#(XS)) } We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , fst(pair(XS, YS)) -> XS , snd(pair(XS, YS)) -> YS , splitAt(s(N), cons(X, XS)) -> u(splitAt(N, activate(XS)), N, X, activate(XS)) , splitAt(0(), XS) -> pair(nil(), XS) , u(pair(YS, ZS), N, X, XS) -> pair(cons(activate(X), YS), ZS) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) , head(cons(N, XS)) -> N , tail(cons(N, XS)) -> activate(XS) , sel(N, XS) -> head(afterNth(N, XS)) , afterNth(N, XS) -> snd(splitAt(N, XS)) , take(N, XS) -> fst(splitAt(N, XS)) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) Due to missing edges in the dependency-graph, the right-hand sides of following rules could be simplified: { splitAt^#(s(N), cons(X, XS)) -> c_5(u^#(splitAt(N, activate(XS)), N, X, activate(XS)), splitAt^#(N, activate(XS)), activate^#(XS), activate^#(XS)) , sel^#(N, XS) -> c_12(head^#(afterNth(N, XS)), afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_13(snd^#(splitAt(N, XS)), splitAt^#(N, XS)) , take^#(N, XS) -> c_14(fst^#(splitAt(N, XS)), splitAt^#(N, XS)) } We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) , sel^#(N, XS) -> c_2(afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_3(splitAt^#(N, XS)) , take^#(N, XS) -> c_4(splitAt^#(N, XS)) } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , fst(pair(XS, YS)) -> XS , snd(pair(XS, YS)) -> YS , splitAt(s(N), cons(X, XS)) -> u(splitAt(N, activate(XS)), N, X, activate(XS)) , splitAt(0(), XS) -> pair(nil(), XS) , u(pair(YS, ZS), N, X, XS) -> pair(cons(activate(X), YS), ZS) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) , head(cons(N, XS)) -> N , tail(cons(N, XS)) -> activate(XS) , sel(N, XS) -> head(afterNth(N, XS)) , afterNth(N, XS) -> snd(splitAt(N, XS)) , take(N, XS) -> fst(splitAt(N, XS)) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) We replace rewrite rules by usable rules: Weak Usable Rules: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) } We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) , sel^#(N, XS) -> c_2(afterNth^#(N, XS)) , afterNth^#(N, XS) -> c_3(splitAt^#(N, XS)) , take^#(N, XS) -> c_4(splitAt^#(N, XS)) } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) Consider the dependency graph 1: splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) -->_1 splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) :1 2: sel^#(N, XS) -> c_2(afterNth^#(N, XS)) -->_1 afterNth^#(N, XS) -> c_3(splitAt^#(N, XS)) :3 3: afterNth^#(N, XS) -> c_3(splitAt^#(N, XS)) -->_1 splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) :1 4: take^#(N, XS) -> c_4(splitAt^#(N, XS)) -->_1 splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) :1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). { sel^#(N, XS) -> c_2(afterNth^#(N, XS)) , take^#(N, XS) -> c_4(splitAt^#(N, XS)) } We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) , afterNth^#(N, XS) -> c_3(splitAt^#(N, XS)) } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) Consider the dependency graph 1: splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) -->_1 splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) :1 2: afterNth^#(N, XS) -> c_3(splitAt^#(N, XS)) -->_1 splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) :1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). { afterNth^#(N, XS) -> c_3(splitAt^#(N, XS)) } We are left with following problem, upon which TcT provides the certificate YES(?,O(n^1)). Strict DPs: { splitAt^#(s(N), cons(X, XS)) -> c_1(splitAt^#(N, activate(XS))) } Weak Trs: { natsFrom(N) -> cons(N, n__natsFrom(s(N))) , natsFrom(X) -> n__natsFrom(X) , activate(X) -> X , activate(n__natsFrom(X)) -> natsFrom(X) } Obligation: innermost runtime complexity Answer: YES(?,O(n^1)) The following argument positions are usable: Uargs(c_1) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA). [natsFrom](x1) = [3] x1 + [0] [cons](x1, x2) = [1] x1 + [0] [n__natsFrom](x1) = [1] x1 + [0] [s](x1) = [1] x1 + [2] [activate](x1) = [0] [splitAt^#](x1, x2) = [2] x1 + [0] [c_1](x1) = [1] x1 + [3] This order satisfies following ordering constraints: [splitAt^#(s(N), cons(X, XS))] = [2] N + [4] > [2] N + [3] = [c_1(splitAt^#(N, activate(XS)))] Hurray, we answered YES(?,O(n^1))