(0) Obligation:
Runtime Complexity TRS:
The TRS R consists of the following rules:
active(natsFrom(N)) → mark(cons(N, natsFrom(s(N))))
active(fst(pair(XS, YS))) → mark(XS)
active(snd(pair(XS, YS))) → mark(YS)
active(splitAt(0, XS)) → mark(pair(nil, XS))
active(splitAt(s(N), cons(X, XS))) → mark(u(splitAt(N, XS), N, X, XS))
active(u(pair(YS, ZS), N, X, XS)) → mark(pair(cons(X, YS), ZS))
active(head(cons(N, XS))) → mark(N)
active(tail(cons(N, XS))) → mark(XS)
active(sel(N, XS)) → mark(head(afterNth(N, XS)))
active(take(N, XS)) → mark(fst(splitAt(N, XS)))
active(afterNth(N, XS)) → mark(snd(splitAt(N, XS)))
mark(natsFrom(X)) → active(natsFrom(mark(X)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(s(X)) → active(s(mark(X)))
mark(fst(X)) → active(fst(mark(X)))
mark(pair(X1, X2)) → active(pair(mark(X1), mark(X2)))
mark(snd(X)) → active(snd(mark(X)))
mark(splitAt(X1, X2)) → active(splitAt(mark(X1), mark(X2)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(u(X1, X2, X3, X4)) → active(u(mark(X1), X2, X3, X4))
mark(head(X)) → active(head(mark(X)))
mark(tail(X)) → active(tail(mark(X)))
mark(sel(X1, X2)) → active(sel(mark(X1), mark(X2)))
mark(afterNth(X1, X2)) → active(afterNth(mark(X1), mark(X2)))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
natsFrom(mark(X)) → natsFrom(X)
natsFrom(active(X)) → natsFrom(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
s(mark(X)) → s(X)
s(active(X)) → s(X)
fst(mark(X)) → fst(X)
fst(active(X)) → fst(X)
pair(mark(X1), X2) → pair(X1, X2)
pair(X1, mark(X2)) → pair(X1, X2)
pair(active(X1), X2) → pair(X1, X2)
pair(X1, active(X2)) → pair(X1, X2)
snd(mark(X)) → snd(X)
snd(active(X)) → snd(X)
splitAt(mark(X1), X2) → splitAt(X1, X2)
splitAt(X1, mark(X2)) → splitAt(X1, X2)
splitAt(active(X1), X2) → splitAt(X1, X2)
splitAt(X1, active(X2)) → splitAt(X1, X2)
u(mark(X1), X2, X3, X4) → u(X1, X2, X3, X4)
u(X1, mark(X2), X3, X4) → u(X1, X2, X3, X4)
u(X1, X2, mark(X3), X4) → u(X1, X2, X3, X4)
u(X1, X2, X3, mark(X4)) → u(X1, X2, X3, X4)
u(active(X1), X2, X3, X4) → u(X1, X2, X3, X4)
u(X1, active(X2), X3, X4) → u(X1, X2, X3, X4)
u(X1, X2, active(X3), X4) → u(X1, X2, X3, X4)
u(X1, X2, X3, active(X4)) → u(X1, X2, X3, X4)
head(mark(X)) → head(X)
head(active(X)) → head(X)
tail(mark(X)) → tail(X)
tail(active(X)) → tail(X)
sel(mark(X1), X2) → sel(X1, X2)
sel(X1, mark(X2)) → sel(X1, X2)
sel(active(X1), X2) → sel(X1, X2)
sel(X1, active(X2)) → sel(X1, X2)
afterNth(mark(X1), X2) → afterNth(X1, X2)
afterNth(X1, mark(X2)) → afterNth(X1, X2)
afterNth(active(X1), X2) → afterNth(X1, X2)
afterNth(X1, active(X2)) → afterNth(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
Rewrite Strategy: INNERMOST
(1) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID) transformation)
Converted CpxTRS to CDT
(2) Obligation:
Complexity Dependency Tuples Problem
Rules:
active(natsFrom(z0)) → mark(cons(z0, natsFrom(s(z0))))
active(fst(pair(z0, z1))) → mark(z0)
active(snd(pair(z0, z1))) → mark(z1)
active(splitAt(0, z0)) → mark(pair(nil, z0))
active(splitAt(s(z0), cons(z1, z2))) → mark(u(splitAt(z0, z2), z0, z1, z2))
active(u(pair(z0, z1), z2, z3, z4)) → mark(pair(cons(z3, z0), z1))
active(head(cons(z0, z1))) → mark(z0)
active(tail(cons(z0, z1))) → mark(z1)
active(sel(z0, z1)) → mark(head(afterNth(z0, z1)))
active(take(z0, z1)) → mark(fst(splitAt(z0, z1)))
active(afterNth(z0, z1)) → mark(snd(splitAt(z0, z1)))
mark(natsFrom(z0)) → active(natsFrom(mark(z0)))
mark(cons(z0, z1)) → active(cons(mark(z0), z1))
mark(s(z0)) → active(s(mark(z0)))
mark(fst(z0)) → active(fst(mark(z0)))
mark(pair(z0, z1)) → active(pair(mark(z0), mark(z1)))
mark(snd(z0)) → active(snd(mark(z0)))
mark(splitAt(z0, z1)) → active(splitAt(mark(z0), mark(z1)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(u(z0, z1, z2, z3)) → active(u(mark(z0), z1, z2, z3))
mark(head(z0)) → active(head(mark(z0)))
mark(tail(z0)) → active(tail(mark(z0)))
mark(sel(z0, z1)) → active(sel(mark(z0), mark(z1)))
mark(afterNth(z0, z1)) → active(afterNth(mark(z0), mark(z1)))
mark(take(z0, z1)) → active(take(mark(z0), mark(z1)))
natsFrom(mark(z0)) → natsFrom(z0)
natsFrom(active(z0)) → natsFrom(z0)
cons(mark(z0), z1) → cons(z0, z1)
cons(z0, mark(z1)) → cons(z0, z1)
cons(active(z0), z1) → cons(z0, z1)
cons(z0, active(z1)) → cons(z0, z1)
s(mark(z0)) → s(z0)
s(active(z0)) → s(z0)
fst(mark(z0)) → fst(z0)
fst(active(z0)) → fst(z0)
pair(mark(z0), z1) → pair(z0, z1)
pair(z0, mark(z1)) → pair(z0, z1)
pair(active(z0), z1) → pair(z0, z1)
pair(z0, active(z1)) → pair(z0, z1)
snd(mark(z0)) → snd(z0)
snd(active(z0)) → snd(z0)
splitAt(mark(z0), z1) → splitAt(z0, z1)
splitAt(z0, mark(z1)) → splitAt(z0, z1)
splitAt(active(z0), z1) → splitAt(z0, z1)
splitAt(z0, active(z1)) → splitAt(z0, z1)
u(mark(z0), z1, z2, z3) → u(z0, z1, z2, z3)
u(z0, mark(z1), z2, z3) → u(z0, z1, z2, z3)
u(z0, z1, mark(z2), z3) → u(z0, z1, z2, z3)
u(z0, z1, z2, mark(z3)) → u(z0, z1, z2, z3)
u(active(z0), z1, z2, z3) → u(z0, z1, z2, z3)
u(z0, active(z1), z2, z3) → u(z0, z1, z2, z3)
u(z0, z1, active(z2), z3) → u(z0, z1, z2, z3)
u(z0, z1, z2, active(z3)) → u(z0, z1, z2, z3)
head(mark(z0)) → head(z0)
head(active(z0)) → head(z0)
tail(mark(z0)) → tail(z0)
tail(active(z0)) → tail(z0)
sel(mark(z0), z1) → sel(z0, z1)
sel(z0, mark(z1)) → sel(z0, z1)
sel(active(z0), z1) → sel(z0, z1)
sel(z0, active(z1)) → sel(z0, z1)
afterNth(mark(z0), z1) → afterNth(z0, z1)
afterNth(z0, mark(z1)) → afterNth(z0, z1)
afterNth(active(z0), z1) → afterNth(z0, z1)
afterNth(z0, active(z1)) → afterNth(z0, z1)
take(mark(z0), z1) → take(z0, z1)
take(z0, mark(z1)) → take(z0, z1)
take(active(z0), z1) → take(z0, z1)
take(z0, active(z1)) → take(z0, z1)
Tuples:
ACTIVE(natsFrom(z0)) → c(MARK(cons(z0, natsFrom(s(z0)))), CONS(z0, natsFrom(s(z0))), NATSFROM(s(z0)), S(z0))
ACTIVE(fst(pair(z0, z1))) → c1(MARK(z0))
ACTIVE(snd(pair(z0, z1))) → c2(MARK(z1))
ACTIVE(splitAt(0, z0)) → c3(MARK(pair(nil, z0)), PAIR(nil, z0))
ACTIVE(splitAt(s(z0), cons(z1, z2))) → c4(MARK(u(splitAt(z0, z2), z0, z1, z2)), U(splitAt(z0, z2), z0, z1, z2), SPLITAT(z0, z2))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(MARK(pair(cons(z3, z0), z1)), PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(head(cons(z0, z1))) → c6(MARK(z0))
ACTIVE(tail(cons(z0, z1))) → c7(MARK(z1))
ACTIVE(sel(z0, z1)) → c8(MARK(head(afterNth(z0, z1))), HEAD(afterNth(z0, z1)), AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(MARK(fst(splitAt(z0, z1))), FST(splitAt(z0, z1)), SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(MARK(snd(splitAt(z0, z1))), SND(splitAt(z0, z1)), SPLITAT(z0, z1))
MARK(natsFrom(z0)) → c11(ACTIVE(natsFrom(mark(z0))), NATSFROM(mark(z0)), MARK(z0))
MARK(cons(z0, z1)) → c12(ACTIVE(cons(mark(z0), z1)), CONS(mark(z0), z1), MARK(z0))
MARK(s(z0)) → c13(ACTIVE(s(mark(z0))), S(mark(z0)), MARK(z0))
MARK(fst(z0)) → c14(ACTIVE(fst(mark(z0))), FST(mark(z0)), MARK(z0))
MARK(pair(z0, z1)) → c15(ACTIVE(pair(mark(z0), mark(z1))), PAIR(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(snd(z0)) → c16(ACTIVE(snd(mark(z0))), SND(mark(z0)), MARK(z0))
MARK(splitAt(z0, z1)) → c17(ACTIVE(splitAt(mark(z0), mark(z1))), SPLITAT(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(0) → c18(ACTIVE(0))
MARK(nil) → c19(ACTIVE(nil))
MARK(u(z0, z1, z2, z3)) → c20(ACTIVE(u(mark(z0), z1, z2, z3)), U(mark(z0), z1, z2, z3), MARK(z0))
MARK(head(z0)) → c21(ACTIVE(head(mark(z0))), HEAD(mark(z0)), MARK(z0))
MARK(tail(z0)) → c22(ACTIVE(tail(mark(z0))), TAIL(mark(z0)), MARK(z0))
MARK(sel(z0, z1)) → c23(ACTIVE(sel(mark(z0), mark(z1))), SEL(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(afterNth(z0, z1)) → c24(ACTIVE(afterNth(mark(z0), mark(z1))), AFTERNTH(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(take(z0, z1)) → c25(ACTIVE(take(mark(z0), mark(z1))), TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1))
NATSFROM(mark(z0)) → c26(NATSFROM(z0))
NATSFROM(active(z0)) → c27(NATSFROM(z0))
CONS(mark(z0), z1) → c28(CONS(z0, z1))
CONS(z0, mark(z1)) → c29(CONS(z0, z1))
CONS(active(z0), z1) → c30(CONS(z0, z1))
CONS(z0, active(z1)) → c31(CONS(z0, z1))
S(mark(z0)) → c32(S(z0))
S(active(z0)) → c33(S(z0))
FST(mark(z0)) → c34(FST(z0))
FST(active(z0)) → c35(FST(z0))
PAIR(mark(z0), z1) → c36(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c37(PAIR(z0, z1))
PAIR(active(z0), z1) → c38(PAIR(z0, z1))
PAIR(z0, active(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(active(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(active(z0), z1) → c44(SPLITAT(z0, z1))
SPLITAT(z0, active(z1)) → c45(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c46(U(z0, z1, z2, z3))
U(z0, mark(z1), z2, z3) → c47(U(z0, z1, z2, z3))
U(z0, z1, mark(z2), z3) → c48(U(z0, z1, z2, z3))
U(z0, z1, z2, mark(z3)) → c49(U(z0, z1, z2, z3))
U(active(z0), z1, z2, z3) → c50(U(z0, z1, z2, z3))
U(z0, active(z1), z2, z3) → c51(U(z0, z1, z2, z3))
U(z0, z1, active(z2), z3) → c52(U(z0, z1, z2, z3))
U(z0, z1, z2, active(z3)) → c53(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c54(HEAD(z0))
HEAD(active(z0)) → c55(HEAD(z0))
TAIL(mark(z0)) → c56(TAIL(z0))
TAIL(active(z0)) → c57(TAIL(z0))
SEL(mark(z0), z1) → c58(SEL(z0, z1))
SEL(z0, mark(z1)) → c59(SEL(z0, z1))
SEL(active(z0), z1) → c60(SEL(z0, z1))
SEL(z0, active(z1)) → c61(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c62(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c63(AFTERNTH(z0, z1))
AFTERNTH(active(z0), z1) → c64(AFTERNTH(z0, z1))
AFTERNTH(z0, active(z1)) → c65(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c66(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c67(TAKE(z0, z1))
TAKE(active(z0), z1) → c68(TAKE(z0, z1))
TAKE(z0, active(z1)) → c69(TAKE(z0, z1))
S tuples:
ACTIVE(natsFrom(z0)) → c(MARK(cons(z0, natsFrom(s(z0)))), CONS(z0, natsFrom(s(z0))), NATSFROM(s(z0)), S(z0))
ACTIVE(fst(pair(z0, z1))) → c1(MARK(z0))
ACTIVE(snd(pair(z0, z1))) → c2(MARK(z1))
ACTIVE(splitAt(0, z0)) → c3(MARK(pair(nil, z0)), PAIR(nil, z0))
ACTIVE(splitAt(s(z0), cons(z1, z2))) → c4(MARK(u(splitAt(z0, z2), z0, z1, z2)), U(splitAt(z0, z2), z0, z1, z2), SPLITAT(z0, z2))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(MARK(pair(cons(z3, z0), z1)), PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(head(cons(z0, z1))) → c6(MARK(z0))
ACTIVE(tail(cons(z0, z1))) → c7(MARK(z1))
ACTIVE(sel(z0, z1)) → c8(MARK(head(afterNth(z0, z1))), HEAD(afterNth(z0, z1)), AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(MARK(fst(splitAt(z0, z1))), FST(splitAt(z0, z1)), SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(MARK(snd(splitAt(z0, z1))), SND(splitAt(z0, z1)), SPLITAT(z0, z1))
MARK(natsFrom(z0)) → c11(ACTIVE(natsFrom(mark(z0))), NATSFROM(mark(z0)), MARK(z0))
MARK(cons(z0, z1)) → c12(ACTIVE(cons(mark(z0), z1)), CONS(mark(z0), z1), MARK(z0))
MARK(s(z0)) → c13(ACTIVE(s(mark(z0))), S(mark(z0)), MARK(z0))
MARK(fst(z0)) → c14(ACTIVE(fst(mark(z0))), FST(mark(z0)), MARK(z0))
MARK(pair(z0, z1)) → c15(ACTIVE(pair(mark(z0), mark(z1))), PAIR(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(snd(z0)) → c16(ACTIVE(snd(mark(z0))), SND(mark(z0)), MARK(z0))
MARK(splitAt(z0, z1)) → c17(ACTIVE(splitAt(mark(z0), mark(z1))), SPLITAT(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(0) → c18(ACTIVE(0))
MARK(nil) → c19(ACTIVE(nil))
MARK(u(z0, z1, z2, z3)) → c20(ACTIVE(u(mark(z0), z1, z2, z3)), U(mark(z0), z1, z2, z3), MARK(z0))
MARK(head(z0)) → c21(ACTIVE(head(mark(z0))), HEAD(mark(z0)), MARK(z0))
MARK(tail(z0)) → c22(ACTIVE(tail(mark(z0))), TAIL(mark(z0)), MARK(z0))
MARK(sel(z0, z1)) → c23(ACTIVE(sel(mark(z0), mark(z1))), SEL(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(afterNth(z0, z1)) → c24(ACTIVE(afterNth(mark(z0), mark(z1))), AFTERNTH(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(take(z0, z1)) → c25(ACTIVE(take(mark(z0), mark(z1))), TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1))
NATSFROM(mark(z0)) → c26(NATSFROM(z0))
NATSFROM(active(z0)) → c27(NATSFROM(z0))
CONS(mark(z0), z1) → c28(CONS(z0, z1))
CONS(z0, mark(z1)) → c29(CONS(z0, z1))
CONS(active(z0), z1) → c30(CONS(z0, z1))
CONS(z0, active(z1)) → c31(CONS(z0, z1))
S(mark(z0)) → c32(S(z0))
S(active(z0)) → c33(S(z0))
FST(mark(z0)) → c34(FST(z0))
FST(active(z0)) → c35(FST(z0))
PAIR(mark(z0), z1) → c36(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c37(PAIR(z0, z1))
PAIR(active(z0), z1) → c38(PAIR(z0, z1))
PAIR(z0, active(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(active(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(active(z0), z1) → c44(SPLITAT(z0, z1))
SPLITAT(z0, active(z1)) → c45(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c46(U(z0, z1, z2, z3))
U(z0, mark(z1), z2, z3) → c47(U(z0, z1, z2, z3))
U(z0, z1, mark(z2), z3) → c48(U(z0, z1, z2, z3))
U(z0, z1, z2, mark(z3)) → c49(U(z0, z1, z2, z3))
U(active(z0), z1, z2, z3) → c50(U(z0, z1, z2, z3))
U(z0, active(z1), z2, z3) → c51(U(z0, z1, z2, z3))
U(z0, z1, active(z2), z3) → c52(U(z0, z1, z2, z3))
U(z0, z1, z2, active(z3)) → c53(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c54(HEAD(z0))
HEAD(active(z0)) → c55(HEAD(z0))
TAIL(mark(z0)) → c56(TAIL(z0))
TAIL(active(z0)) → c57(TAIL(z0))
SEL(mark(z0), z1) → c58(SEL(z0, z1))
SEL(z0, mark(z1)) → c59(SEL(z0, z1))
SEL(active(z0), z1) → c60(SEL(z0, z1))
SEL(z0, active(z1)) → c61(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c62(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c63(AFTERNTH(z0, z1))
AFTERNTH(active(z0), z1) → c64(AFTERNTH(z0, z1))
AFTERNTH(z0, active(z1)) → c65(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c66(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c67(TAKE(z0, z1))
TAKE(active(z0), z1) → c68(TAKE(z0, z1))
TAKE(z0, active(z1)) → c69(TAKE(z0, z1))
K tuples:none
Defined Rule Symbols:
active, mark, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take
Defined Pair Symbols:
ACTIVE, MARK, NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
c, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69
(3) CdtUnreachableProof (EQUIVALENT transformation)
The following tuples could be removed as they are not reachable from basic start terms:
ACTIVE(natsFrom(z0)) → c(MARK(cons(z0, natsFrom(s(z0)))), CONS(z0, natsFrom(s(z0))), NATSFROM(s(z0)), S(z0))
ACTIVE(fst(pair(z0, z1))) → c1(MARK(z0))
ACTIVE(snd(pair(z0, z1))) → c2(MARK(z1))
ACTIVE(splitAt(0, z0)) → c3(MARK(pair(nil, z0)), PAIR(nil, z0))
ACTIVE(splitAt(s(z0), cons(z1, z2))) → c4(MARK(u(splitAt(z0, z2), z0, z1, z2)), U(splitAt(z0, z2), z0, z1, z2), SPLITAT(z0, z2))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(MARK(pair(cons(z3, z0), z1)), PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(head(cons(z0, z1))) → c6(MARK(z0))
ACTIVE(tail(cons(z0, z1))) → c7(MARK(z1))
ACTIVE(sel(z0, z1)) → c8(MARK(head(afterNth(z0, z1))), HEAD(afterNth(z0, z1)), AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(MARK(fst(splitAt(z0, z1))), FST(splitAt(z0, z1)), SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(MARK(snd(splitAt(z0, z1))), SND(splitAt(z0, z1)), SPLITAT(z0, z1))
MARK(natsFrom(z0)) → c11(ACTIVE(natsFrom(mark(z0))), NATSFROM(mark(z0)), MARK(z0))
MARK(cons(z0, z1)) → c12(ACTIVE(cons(mark(z0), z1)), CONS(mark(z0), z1), MARK(z0))
MARK(s(z0)) → c13(ACTIVE(s(mark(z0))), S(mark(z0)), MARK(z0))
MARK(fst(z0)) → c14(ACTIVE(fst(mark(z0))), FST(mark(z0)), MARK(z0))
MARK(pair(z0, z1)) → c15(ACTIVE(pair(mark(z0), mark(z1))), PAIR(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(snd(z0)) → c16(ACTIVE(snd(mark(z0))), SND(mark(z0)), MARK(z0))
MARK(splitAt(z0, z1)) → c17(ACTIVE(splitAt(mark(z0), mark(z1))), SPLITAT(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(u(z0, z1, z2, z3)) → c20(ACTIVE(u(mark(z0), z1, z2, z3)), U(mark(z0), z1, z2, z3), MARK(z0))
MARK(head(z0)) → c21(ACTIVE(head(mark(z0))), HEAD(mark(z0)), MARK(z0))
MARK(tail(z0)) → c22(ACTIVE(tail(mark(z0))), TAIL(mark(z0)), MARK(z0))
MARK(sel(z0, z1)) → c23(ACTIVE(sel(mark(z0), mark(z1))), SEL(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(afterNth(z0, z1)) → c24(ACTIVE(afterNth(mark(z0), mark(z1))), AFTERNTH(mark(z0), mark(z1)), MARK(z0), MARK(z1))
MARK(take(z0, z1)) → c25(ACTIVE(take(mark(z0), mark(z1))), TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1))
NATSFROM(mark(z0)) → c26(NATSFROM(z0))
NATSFROM(active(z0)) → c27(NATSFROM(z0))
CONS(mark(z0), z1) → c28(CONS(z0, z1))
CONS(z0, mark(z1)) → c29(CONS(z0, z1))
CONS(active(z0), z1) → c30(CONS(z0, z1))
CONS(z0, active(z1)) → c31(CONS(z0, z1))
S(mark(z0)) → c32(S(z0))
S(active(z0)) → c33(S(z0))
FST(mark(z0)) → c34(FST(z0))
FST(active(z0)) → c35(FST(z0))
PAIR(mark(z0), z1) → c36(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c37(PAIR(z0, z1))
PAIR(active(z0), z1) → c38(PAIR(z0, z1))
PAIR(z0, active(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(active(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(active(z0), z1) → c44(SPLITAT(z0, z1))
SPLITAT(z0, active(z1)) → c45(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c46(U(z0, z1, z2, z3))
U(z0, mark(z1), z2, z3) → c47(U(z0, z1, z2, z3))
U(z0, z1, mark(z2), z3) → c48(U(z0, z1, z2, z3))
U(z0, z1, z2, mark(z3)) → c49(U(z0, z1, z2, z3))
U(active(z0), z1, z2, z3) → c50(U(z0, z1, z2, z3))
U(z0, active(z1), z2, z3) → c51(U(z0, z1, z2, z3))
U(z0, z1, active(z2), z3) → c52(U(z0, z1, z2, z3))
U(z0, z1, z2, active(z3)) → c53(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c54(HEAD(z0))
HEAD(active(z0)) → c55(HEAD(z0))
TAIL(mark(z0)) → c56(TAIL(z0))
TAIL(active(z0)) → c57(TAIL(z0))
SEL(mark(z0), z1) → c58(SEL(z0, z1))
SEL(z0, mark(z1)) → c59(SEL(z0, z1))
SEL(active(z0), z1) → c60(SEL(z0, z1))
SEL(z0, active(z1)) → c61(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c62(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c63(AFTERNTH(z0, z1))
AFTERNTH(active(z0), z1) → c64(AFTERNTH(z0, z1))
AFTERNTH(z0, active(z1)) → c65(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c66(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c67(TAKE(z0, z1))
TAKE(active(z0), z1) → c68(TAKE(z0, z1))
TAKE(z0, active(z1)) → c69(TAKE(z0, z1))
(4) Obligation:
Complexity Dependency Tuples Problem
Rules:
active(natsFrom(z0)) → mark(cons(z0, natsFrom(s(z0))))
active(fst(pair(z0, z1))) → mark(z0)
active(snd(pair(z0, z1))) → mark(z1)
active(splitAt(0, z0)) → mark(pair(nil, z0))
active(splitAt(s(z0), cons(z1, z2))) → mark(u(splitAt(z0, z2), z0, z1, z2))
active(u(pair(z0, z1), z2, z3, z4)) → mark(pair(cons(z3, z0), z1))
active(head(cons(z0, z1))) → mark(z0)
active(tail(cons(z0, z1))) → mark(z1)
active(sel(z0, z1)) → mark(head(afterNth(z0, z1)))
active(take(z0, z1)) → mark(fst(splitAt(z0, z1)))
active(afterNth(z0, z1)) → mark(snd(splitAt(z0, z1)))
mark(natsFrom(z0)) → active(natsFrom(mark(z0)))
mark(cons(z0, z1)) → active(cons(mark(z0), z1))
mark(s(z0)) → active(s(mark(z0)))
mark(fst(z0)) → active(fst(mark(z0)))
mark(pair(z0, z1)) → active(pair(mark(z0), mark(z1)))
mark(snd(z0)) → active(snd(mark(z0)))
mark(splitAt(z0, z1)) → active(splitAt(mark(z0), mark(z1)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(u(z0, z1, z2, z3)) → active(u(mark(z0), z1, z2, z3))
mark(head(z0)) → active(head(mark(z0)))
mark(tail(z0)) → active(tail(mark(z0)))
mark(sel(z0, z1)) → active(sel(mark(z0), mark(z1)))
mark(afterNth(z0, z1)) → active(afterNth(mark(z0), mark(z1)))
mark(take(z0, z1)) → active(take(mark(z0), mark(z1)))
natsFrom(mark(z0)) → natsFrom(z0)
natsFrom(active(z0)) → natsFrom(z0)
cons(mark(z0), z1) → cons(z0, z1)
cons(z0, mark(z1)) → cons(z0, z1)
cons(active(z0), z1) → cons(z0, z1)
cons(z0, active(z1)) → cons(z0, z1)
s(mark(z0)) → s(z0)
s(active(z0)) → s(z0)
fst(mark(z0)) → fst(z0)
fst(active(z0)) → fst(z0)
pair(mark(z0), z1) → pair(z0, z1)
pair(z0, mark(z1)) → pair(z0, z1)
pair(active(z0), z1) → pair(z0, z1)
pair(z0, active(z1)) → pair(z0, z1)
snd(mark(z0)) → snd(z0)
snd(active(z0)) → snd(z0)
splitAt(mark(z0), z1) → splitAt(z0, z1)
splitAt(z0, mark(z1)) → splitAt(z0, z1)
splitAt(active(z0), z1) → splitAt(z0, z1)
splitAt(z0, active(z1)) → splitAt(z0, z1)
u(mark(z0), z1, z2, z3) → u(z0, z1, z2, z3)
u(z0, mark(z1), z2, z3) → u(z0, z1, z2, z3)
u(z0, z1, mark(z2), z3) → u(z0, z1, z2, z3)
u(z0, z1, z2, mark(z3)) → u(z0, z1, z2, z3)
u(active(z0), z1, z2, z3) → u(z0, z1, z2, z3)
u(z0, active(z1), z2, z3) → u(z0, z1, z2, z3)
u(z0, z1, active(z2), z3) → u(z0, z1, z2, z3)
u(z0, z1, z2, active(z3)) → u(z0, z1, z2, z3)
head(mark(z0)) → head(z0)
head(active(z0)) → head(z0)
tail(mark(z0)) → tail(z0)
tail(active(z0)) → tail(z0)
sel(mark(z0), z1) → sel(z0, z1)
sel(z0, mark(z1)) → sel(z0, z1)
sel(active(z0), z1) → sel(z0, z1)
sel(z0, active(z1)) → sel(z0, z1)
afterNth(mark(z0), z1) → afterNth(z0, z1)
afterNth(z0, mark(z1)) → afterNth(z0, z1)
afterNth(active(z0), z1) → afterNth(z0, z1)
afterNth(z0, active(z1)) → afterNth(z0, z1)
take(mark(z0), z1) → take(z0, z1)
take(z0, mark(z1)) → take(z0, z1)
take(active(z0), z1) → take(z0, z1)
take(z0, active(z1)) → take(z0, z1)
Tuples:
MARK(0) → c18(ACTIVE(0))
MARK(nil) → c19(ACTIVE(nil))
S tuples:
MARK(0) → c18(ACTIVE(0))
MARK(nil) → c19(ACTIVE(nil))
K tuples:none
Defined Rule Symbols:
active, mark, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take
Defined Pair Symbols:
MARK
Compound Symbols:
c18, c19
(5) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID) transformation)
Removed 2 trailing nodes:
MARK(nil) → c19(ACTIVE(nil))
MARK(0) → c18(ACTIVE(0))
(6) Obligation:
Complexity Dependency Tuples Problem
Rules:
active(natsFrom(z0)) → mark(cons(z0, natsFrom(s(z0))))
active(fst(pair(z0, z1))) → mark(z0)
active(snd(pair(z0, z1))) → mark(z1)
active(splitAt(0, z0)) → mark(pair(nil, z0))
active(splitAt(s(z0), cons(z1, z2))) → mark(u(splitAt(z0, z2), z0, z1, z2))
active(u(pair(z0, z1), z2, z3, z4)) → mark(pair(cons(z3, z0), z1))
active(head(cons(z0, z1))) → mark(z0)
active(tail(cons(z0, z1))) → mark(z1)
active(sel(z0, z1)) → mark(head(afterNth(z0, z1)))
active(take(z0, z1)) → mark(fst(splitAt(z0, z1)))
active(afterNth(z0, z1)) → mark(snd(splitAt(z0, z1)))
mark(natsFrom(z0)) → active(natsFrom(mark(z0)))
mark(cons(z0, z1)) → active(cons(mark(z0), z1))
mark(s(z0)) → active(s(mark(z0)))
mark(fst(z0)) → active(fst(mark(z0)))
mark(pair(z0, z1)) → active(pair(mark(z0), mark(z1)))
mark(snd(z0)) → active(snd(mark(z0)))
mark(splitAt(z0, z1)) → active(splitAt(mark(z0), mark(z1)))
mark(0) → active(0)
mark(nil) → active(nil)
mark(u(z0, z1, z2, z3)) → active(u(mark(z0), z1, z2, z3))
mark(head(z0)) → active(head(mark(z0)))
mark(tail(z0)) → active(tail(mark(z0)))
mark(sel(z0, z1)) → active(sel(mark(z0), mark(z1)))
mark(afterNth(z0, z1)) → active(afterNth(mark(z0), mark(z1)))
mark(take(z0, z1)) → active(take(mark(z0), mark(z1)))
natsFrom(mark(z0)) → natsFrom(z0)
natsFrom(active(z0)) → natsFrom(z0)
cons(mark(z0), z1) → cons(z0, z1)
cons(z0, mark(z1)) → cons(z0, z1)
cons(active(z0), z1) → cons(z0, z1)
cons(z0, active(z1)) → cons(z0, z1)
s(mark(z0)) → s(z0)
s(active(z0)) → s(z0)
fst(mark(z0)) → fst(z0)
fst(active(z0)) → fst(z0)
pair(mark(z0), z1) → pair(z0, z1)
pair(z0, mark(z1)) → pair(z0, z1)
pair(active(z0), z1) → pair(z0, z1)
pair(z0, active(z1)) → pair(z0, z1)
snd(mark(z0)) → snd(z0)
snd(active(z0)) → snd(z0)
splitAt(mark(z0), z1) → splitAt(z0, z1)
splitAt(z0, mark(z1)) → splitAt(z0, z1)
splitAt(active(z0), z1) → splitAt(z0, z1)
splitAt(z0, active(z1)) → splitAt(z0, z1)
u(mark(z0), z1, z2, z3) → u(z0, z1, z2, z3)
u(z0, mark(z1), z2, z3) → u(z0, z1, z2, z3)
u(z0, z1, mark(z2), z3) → u(z0, z1, z2, z3)
u(z0, z1, z2, mark(z3)) → u(z0, z1, z2, z3)
u(active(z0), z1, z2, z3) → u(z0, z1, z2, z3)
u(z0, active(z1), z2, z3) → u(z0, z1, z2, z3)
u(z0, z1, active(z2), z3) → u(z0, z1, z2, z3)
u(z0, z1, z2, active(z3)) → u(z0, z1, z2, z3)
head(mark(z0)) → head(z0)
head(active(z0)) → head(z0)
tail(mark(z0)) → tail(z0)
tail(active(z0)) → tail(z0)
sel(mark(z0), z1) → sel(z0, z1)
sel(z0, mark(z1)) → sel(z0, z1)
sel(active(z0), z1) → sel(z0, z1)
sel(z0, active(z1)) → sel(z0, z1)
afterNth(mark(z0), z1) → afterNth(z0, z1)
afterNth(z0, mark(z1)) → afterNth(z0, z1)
afterNth(active(z0), z1) → afterNth(z0, z1)
afterNth(z0, active(z1)) → afterNth(z0, z1)
take(mark(z0), z1) → take(z0, z1)
take(z0, mark(z1)) → take(z0, z1)
take(active(z0), z1) → take(z0, z1)
take(z0, active(z1)) → take(z0, z1)
Tuples:none
S tuples:none
K tuples:none
Defined Rule Symbols:
active, mark, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take
Defined Pair Symbols:none
Compound Symbols:none
(7) SIsEmptyProof (EQUIVALENT transformation)
The set S is empty
(8) BOUNDS(O(1), O(1))