(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)))
active(natsFrom(X)) → natsFrom(active(X))
active(cons(X1, X2)) → cons(active(X1), X2)
active(s(X)) → s(active(X))
active(fst(X)) → fst(active(X))
active(pair(X1, X2)) → pair(active(X1), X2)
active(pair(X1, X2)) → pair(X1, active(X2))
active(snd(X)) → snd(active(X))
active(splitAt(X1, X2)) → splitAt(active(X1), X2)
active(splitAt(X1, X2)) → splitAt(X1, active(X2))
active(u(X1, X2, X3, X4)) → u(active(X1), X2, X3, X4)
active(head(X)) → head(active(X))
active(tail(X)) → tail(active(X))
active(sel(X1, X2)) → sel(active(X1), X2)
active(sel(X1, X2)) → sel(X1, active(X2))
active(afterNth(X1, X2)) → afterNth(active(X1), X2)
active(afterNth(X1, X2)) → afterNth(X1, active(X2))
active(take(X1, X2)) → take(active(X1), X2)
active(take(X1, X2)) → take(X1, active(X2))
natsFrom(mark(X)) → mark(natsFrom(X))
cons(mark(X1), X2) → mark(cons(X1, X2))
s(mark(X)) → mark(s(X))
fst(mark(X)) → mark(fst(X))
pair(mark(X1), X2) → mark(pair(X1, X2))
pair(X1, mark(X2)) → mark(pair(X1, X2))
snd(mark(X)) → mark(snd(X))
splitAt(mark(X1), X2) → mark(splitAt(X1, X2))
splitAt(X1, mark(X2)) → mark(splitAt(X1, X2))
u(mark(X1), X2, X3, X4) → mark(u(X1, X2, X3, X4))
head(mark(X)) → mark(head(X))
tail(mark(X)) → mark(tail(X))
sel(mark(X1), X2) → mark(sel(X1, X2))
sel(X1, mark(X2)) → mark(sel(X1, X2))
afterNth(mark(X1), X2) → mark(afterNth(X1, X2))
afterNth(X1, mark(X2)) → mark(afterNth(X1, X2))
take(mark(X1), X2) → mark(take(X1, X2))
take(X1, mark(X2)) → mark(take(X1, X2))
proper(natsFrom(X)) → natsFrom(proper(X))
proper(cons(X1, X2)) → cons(proper(X1), proper(X2))
proper(s(X)) → s(proper(X))
proper(fst(X)) → fst(proper(X))
proper(pair(X1, X2)) → pair(proper(X1), proper(X2))
proper(snd(X)) → snd(proper(X))
proper(splitAt(X1, X2)) → splitAt(proper(X1), proper(X2))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(X1, X2, X3, X4)) → u(proper(X1), proper(X2), proper(X3), proper(X4))
proper(head(X)) → head(proper(X))
proper(tail(X)) → tail(proper(X))
proper(sel(X1, X2)) → sel(proper(X1), proper(X2))
proper(afterNth(X1, X2)) → afterNth(proper(X1), proper(X2))
proper(take(X1, X2)) → take(proper(X1), proper(X2))
natsFrom(ok(X)) → ok(natsFrom(X))
cons(ok(X1), ok(X2)) → ok(cons(X1, X2))
s(ok(X)) → ok(s(X))
fst(ok(X)) → ok(fst(X))
pair(ok(X1), ok(X2)) → ok(pair(X1, X2))
snd(ok(X)) → ok(snd(X))
splitAt(ok(X1), ok(X2)) → ok(splitAt(X1, X2))
u(ok(X1), ok(X2), ok(X3), ok(X4)) → ok(u(X1, X2, X3, X4))
head(ok(X)) → ok(head(X))
tail(ok(X)) → ok(tail(X))
sel(ok(X1), ok(X2)) → ok(sel(X1, X2))
afterNth(ok(X1), ok(X2)) → ok(afterNth(X1, X2))
take(ok(X1), ok(X2)) → ok(take(X1, X2))
top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))
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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
ACTIVE(natsFrom(z0)) → c(CONS(z0, natsFrom(s(z0))), NATSFROM(s(z0)), S(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(splitAt(s(z0), cons(z1, z2))) → c4(U(splitAt(z0, z2), z0, z1, z2), SPLITAT(z0, z2))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(sel(z0, z1)) → c8(HEAD(afterNth(z0, z1)), AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(FST(splitAt(z0, z1)), SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SND(splitAt(z0, z1)), SPLITAT(z0, z1))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
S tuples:
ACTIVE(natsFrom(z0)) → c(CONS(z0, natsFrom(s(z0))), NATSFROM(s(z0)), S(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(splitAt(s(z0), cons(z1, z2))) → c4(U(splitAt(z0, z2), z0, z1, z2), SPLITAT(z0, z2))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(sel(z0, z1)) → c8(HEAD(afterNth(z0, z1)), AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(FST(splitAt(z0, z1)), SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SND(splitAt(z0, z1)), SPLITAT(z0, z1))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
ACTIVE, NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, PROPER, TOP
Compound Symbols:
c, c3, c4, c5, 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, c69, c70, c71, c72, c73, c74, c75, c76
(3) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID) transformation)
Removed 5 trailing tuple parts
(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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(splitAt(s(z0), cons(z1, z2))) → c4(U(splitAt(z0, z2), z0, z1, z2), SPLITAT(z0, z2))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(splitAt(s(z0), cons(z1, z2))) → c4(U(splitAt(z0, z2), z0, z1, z2), SPLITAT(z0, z2))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
ACTIVE, NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, PROPER, TOP
Compound Symbols:
c3, c4, c5, 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, c69, c70, c71, c72, c73, c74, c75, c76, c, c8, c9, c10
(5) CdtNarrowingProof (BOTH BOUNDS(ID, ID) transformation)
Use narrowing to replace
ACTIVE(
splitAt(
s(
z0),
cons(
z1,
z2))) →
c4(
U(
splitAt(
z0,
z2),
z0,
z1,
z2),
SPLITAT(
z0,
z2)) by
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
ACTIVE(splitAt(s(mark(z0)), cons(x1, z1))) → c4(U(mark(splitAt(z0, z1)), mark(z0), x1, z1), SPLITAT(mark(z0), z1))
ACTIVE(splitAt(s(ok(z0)), cons(x1, ok(z1)))) → c4(U(ok(splitAt(z0, z1)), ok(z0), x1, ok(z1)), SPLITAT(ok(z0), ok(z1)))
ACTIVE(splitAt(s(x0), cons(x1, x2))) → c4
(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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
ACTIVE(splitAt(s(mark(z0)), cons(x1, z1))) → c4(U(mark(splitAt(z0, z1)), mark(z0), x1, z1), SPLITAT(mark(z0), z1))
ACTIVE(splitAt(s(ok(z0)), cons(x1, ok(z1)))) → c4(U(ok(splitAt(z0, z1)), ok(z0), x1, ok(z1)), SPLITAT(ok(z0), ok(z1)))
ACTIVE(splitAt(s(x0), cons(x1, x2))) → c4
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
ACTIVE(splitAt(s(mark(z0)), cons(x1, z1))) → c4(U(mark(splitAt(z0, z1)), mark(z0), x1, z1), SPLITAT(mark(z0), z1))
ACTIVE(splitAt(s(ok(z0)), cons(x1, ok(z1)))) → c4(U(ok(splitAt(z0, z1)), ok(z0), x1, ok(z1)), SPLITAT(ok(z0), ok(z1)))
ACTIVE(splitAt(s(x0), cons(x1, x2))) → c4
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
ACTIVE, NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, PROPER, TOP
Compound Symbols:
c3, c5, 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, c69, c70, c71, c72, c73, c74, c75, c76, c, c8, c9, c10, c4, c4
(7) CdtUnreachableProof (EQUIVALENT transformation)
The following tuples could be removed as they are not reachable from basic start terms:
ACTIVE(splitAt(s(mark(z0)), cons(x1, z1))) → c4(U(mark(splitAt(z0, z1)), mark(z0), x1, z1), SPLITAT(mark(z0), z1))
ACTIVE(splitAt(s(ok(z0)), cons(x1, ok(z1)))) → c4(U(ok(splitAt(z0, z1)), ok(z0), x1, ok(z1)), SPLITAT(ok(z0), ok(z1)))
(8) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
ACTIVE(splitAt(s(x0), cons(x1, x2))) → c4
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
ACTIVE(splitAt(s(x0), cons(x1, x2))) → c4
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, TOP, ACTIVE, PROPER
Compound Symbols:
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, c75, c76, c3, c5, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c, c8, c9, c10, c4, c4, c60, c61, c62, c63, c64, c65, c66, c69, c70, c71, c72, c73, c74
(9) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID) transformation)
Removed 1 trailing nodes:
ACTIVE(splitAt(s(x0), cons(x1, x2))) → c4
(10) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(z0)) → c75(TOP(proper(z0)), PROPER(z0))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, TOP, ACTIVE, PROPER
Compound Symbols:
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, c75, c76, c3, c5, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c, c8, c9, c10, c4, c60, c61, c62, c63, c64, c65, c66, c69, c70, c71, c72, c73, c74
(11) CdtNarrowingProof (BOTH BOUNDS(ID, ID) transformation)
Use narrowing to replace
TOP(
mark(
z0)) →
c75(
TOP(
proper(
z0)),
PROPER(
z0)) by
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)), PROPER(0))
TOP(mark(nil)) → c75(TOP(ok(nil)), PROPER(nil))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(x0)) → c75
(12) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)), PROPER(0))
TOP(mark(nil)) → c75(TOP(ok(nil)), PROPER(nil))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(x0)) → c75
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)), PROPER(0))
TOP(mark(nil)) → c75(TOP(ok(nil)), PROPER(nil))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(x0)) → c75
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, TOP, ACTIVE, PROPER
Compound Symbols:
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, c76, c3, c5, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c, c8, c9, c10, c4, c60, c61, c62, c63, c64, c65, c66, c69, c70, c71, c72, c73, c74, c75, c75
(13) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID) transformation)
Removed 1 trailing nodes:
TOP(mark(x0)) → c75
(14) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)), PROPER(0))
TOP(mark(nil)) → c75(TOP(ok(nil)), PROPER(nil))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)), PROPER(0))
TOP(mark(nil)) → c75(TOP(ok(nil)), PROPER(nil))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, TOP, ACTIVE, PROPER
Compound Symbols:
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, c76, c3, c5, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c, c8, c9, c10, c4, c60, c61, c62, c63, c64, c65, c66, c69, c70, c71, c72, c73, c74, c75
(15) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID) transformation)
Removed 2 trailing tuple parts
(16) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(mark(nil)) → c75(TOP(ok(nil)))
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(mark(nil)) → c75(TOP(ok(nil)))
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, TOP, ACTIVE, PROPER
Compound Symbols:
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, c76, c3, c5, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c, c8, c9, c10, c4, c60, c61, c62, c63, c64, c65, c66, c69, c70, c71, c72, c73, c74, c75, c75
(17) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
TOP(mark(nil)) → c75(TOP(ok(nil)))
We considered the (Usable) Rules:
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(mark(nil)) → c75(TOP(ok(nil)))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(0) = [1]
POL(ACTIVE(x1)) = 0
POL(AFTERNTH(x1, x2)) = 0
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = 0
POL(PROPER(x1)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(TOP(x1)) = [2]x1
POL(U(x1, x2, x3, x4)) = 0
POL(active(x1)) = x1
POL(afterNth(x1, x2)) = [1]
POL(c(x1)) = x1
POL(c10(x1)) = x1
POL(c11(x1, x2)) = x1 + x2
POL(c12(x1, x2)) = x1 + x2
POL(c13(x1, x2)) = x1 + x2
POL(c14(x1, x2)) = x1 + x2
POL(c15(x1, x2)) = x1 + x2
POL(c16(x1, x2)) = x1 + x2
POL(c17(x1, x2)) = x1 + x2
POL(c18(x1, x2)) = x1 + x2
POL(c19(x1, x2)) = x1 + x2
POL(c20(x1, x2)) = x1 + x2
POL(c21(x1, x2)) = x1 + x2
POL(c22(x1, x2)) = x1 + x2
POL(c23(x1, x2)) = x1 + x2
POL(c24(x1, x2)) = x1 + x2
POL(c25(x1, x2)) = x1 + x2
POL(c26(x1, x2)) = x1 + x2
POL(c27(x1, x2)) = x1 + x2
POL(c28(x1, x2)) = x1 + x2
POL(c29(x1)) = x1
POL(c3(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c4(x1, x2)) = x1 + x2
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c5(x1, x2)) = x1 + x2
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(c60(x1, x2)) = x1 + x2
POL(c61(x1, x2, x3)) = x1 + x2 + x3
POL(c62(x1, x2)) = x1 + x2
POL(c63(x1, x2)) = x1 + x2
POL(c64(x1, x2, x3)) = x1 + x2 + x3
POL(c65(x1, x2)) = x1 + x2
POL(c66(x1, x2, x3)) = x1 + x2 + x3
POL(c69(x1, x2, x3, x4, x5)) = x1 + x2 + x3 + x4 + x5
POL(c70(x1, x2)) = x1 + x2
POL(c71(x1, x2)) = x1 + x2
POL(c72(x1, x2, x3)) = x1 + x2 + x3
POL(c73(x1, x2, x3)) = x1 + x2 + x3
POL(c74(x1, x2, x3)) = x1 + x2 + x3
POL(c75(x1)) = x1
POL(c75(x1, x2)) = x1 + x2
POL(c76(x1, x2)) = x1 + x2
POL(c8(x1)) = x1
POL(c9(x1)) = x1
POL(cons(x1, x2)) = [1]
POL(fst(x1)) = [1]
POL(head(x1)) = [1]
POL(mark(x1)) = [1]
POL(natsFrom(x1)) = [1]
POL(nil) = 0
POL(ok(x1)) = x1
POL(pair(x1, x2)) = [1]
POL(proper(x1)) = 0
POL(s(x1)) = [1]
POL(sel(x1, x2)) = [1]
POL(snd(x1)) = [1]
POL(splitAt(x1, x2)) = [1]
POL(tail(x1)) = [1]
POL(take(x1, x2)) = [1]
POL(u(x1, x2, x3, x4)) = [1]
(18) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(mark(nil)) → c75(TOP(ok(nil)))
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)))
K tuples:
TOP(mark(nil)) → c75(TOP(ok(nil)))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, TOP, ACTIVE, PROPER
Compound Symbols:
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, c76, c3, c5, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c, c8, c9, c10, c4, c60, c61, c62, c63, c64, c65, c66, c69, c70, c71, c72, c73, c74, c75, c75
(19) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
TOP(mark(0)) → c75(TOP(ok(0)))
We considered the (Usable) Rules:
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(mark(nil)) → c75(TOP(ok(nil)))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(0) = 0
POL(ACTIVE(x1)) = 0
POL(AFTERNTH(x1, x2)) = 0
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = 0
POL(PROPER(x1)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(TOP(x1)) = x1
POL(U(x1, x2, x3, x4)) = 0
POL(active(x1)) = x1
POL(afterNth(x1, x2)) = [1]
POL(c(x1)) = x1
POL(c10(x1)) = x1
POL(c11(x1, x2)) = x1 + x2
POL(c12(x1, x2)) = x1 + x2
POL(c13(x1, x2)) = x1 + x2
POL(c14(x1, x2)) = x1 + x2
POL(c15(x1, x2)) = x1 + x2
POL(c16(x1, x2)) = x1 + x2
POL(c17(x1, x2)) = x1 + x2
POL(c18(x1, x2)) = x1 + x2
POL(c19(x1, x2)) = x1 + x2
POL(c20(x1, x2)) = x1 + x2
POL(c21(x1, x2)) = x1 + x2
POL(c22(x1, x2)) = x1 + x2
POL(c23(x1, x2)) = x1 + x2
POL(c24(x1, x2)) = x1 + x2
POL(c25(x1, x2)) = x1 + x2
POL(c26(x1, x2)) = x1 + x2
POL(c27(x1, x2)) = x1 + x2
POL(c28(x1, x2)) = x1 + x2
POL(c29(x1)) = x1
POL(c3(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c4(x1, x2)) = x1 + x2
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c5(x1, x2)) = x1 + x2
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(c60(x1, x2)) = x1 + x2
POL(c61(x1, x2, x3)) = x1 + x2 + x3
POL(c62(x1, x2)) = x1 + x2
POL(c63(x1, x2)) = x1 + x2
POL(c64(x1, x2, x3)) = x1 + x2 + x3
POL(c65(x1, x2)) = x1 + x2
POL(c66(x1, x2, x3)) = x1 + x2 + x3
POL(c69(x1, x2, x3, x4, x5)) = x1 + x2 + x3 + x4 + x5
POL(c70(x1, x2)) = x1 + x2
POL(c71(x1, x2)) = x1 + x2
POL(c72(x1, x2, x3)) = x1 + x2 + x3
POL(c73(x1, x2, x3)) = x1 + x2 + x3
POL(c74(x1, x2, x3)) = x1 + x2 + x3
POL(c75(x1)) = x1
POL(c75(x1, x2)) = x1 + x2
POL(c76(x1, x2)) = x1 + x2
POL(c8(x1)) = x1
POL(c9(x1)) = x1
POL(cons(x1, x2)) = [1]
POL(fst(x1)) = [1]
POL(head(x1)) = [1]
POL(mark(x1)) = [1]
POL(natsFrom(x1)) = [1]
POL(nil) = 0
POL(ok(x1)) = x1
POL(pair(x1, x2)) = [1]
POL(proper(x1)) = 0
POL(s(x1)) = [1]
POL(sel(x1, x2)) = [1]
POL(snd(x1)) = [1]
POL(splitAt(x1, x2)) = [1]
POL(tail(x1)) = [1]
POL(take(x1, x2)) = [1]
POL(u(x1, x2, x3, x4)) = [1]
(20) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(mark(nil)) → c75(TOP(ok(nil)))
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(ok(z0)) → c76(TOP(active(z0)), ACTIVE(z0))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
K tuples:
TOP(mark(nil)) → c75(TOP(ok(nil)))
TOP(mark(0)) → c75(TOP(ok(0)))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, TOP, ACTIVE, PROPER
Compound Symbols:
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, c76, c3, c5, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c, c8, c9, c10, c4, c60, c61, c62, c63, c64, c65, c66, c69, c70, c71, c72, c73, c74, c75, c75
(21) CdtNarrowingProof (BOTH BOUNDS(ID, ID) transformation)
Use narrowing to replace
TOP(
ok(
z0)) →
c76(
TOP(
active(
z0)),
ACTIVE(
z0)) by
TOP(ok(natsFrom(z0))) → c76(TOP(mark(cons(z0, natsFrom(s(z0))))), ACTIVE(natsFrom(z0)))
TOP(ok(fst(pair(z0, z1)))) → c76(TOP(mark(z0)), ACTIVE(fst(pair(z0, z1))))
TOP(ok(snd(pair(z0, z1)))) → c76(TOP(mark(z1)), ACTIVE(snd(pair(z0, z1))))
TOP(ok(splitAt(0, z0))) → c76(TOP(mark(pair(nil, z0))), ACTIVE(splitAt(0, z0)))
TOP(ok(splitAt(s(z0), cons(z1, z2)))) → c76(TOP(mark(u(splitAt(z0, z2), z0, z1, z2))), ACTIVE(splitAt(s(z0), cons(z1, z2))))
TOP(ok(u(pair(z0, z1), z2, z3, z4))) → c76(TOP(mark(pair(cons(z3, z0), z1))), ACTIVE(u(pair(z0, z1), z2, z3, z4)))
TOP(ok(head(cons(z0, z1)))) → c76(TOP(mark(z0)), ACTIVE(head(cons(z0, z1))))
TOP(ok(tail(cons(z0, z1)))) → c76(TOP(mark(z1)), ACTIVE(tail(cons(z0, z1))))
TOP(ok(sel(z0, z1))) → c76(TOP(mark(head(afterNth(z0, z1)))), ACTIVE(sel(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(mark(fst(splitAt(z0, z1)))), ACTIVE(take(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(mark(snd(splitAt(z0, z1)))), ACTIVE(afterNth(z0, z1)))
TOP(ok(natsFrom(z0))) → c76(TOP(natsFrom(active(z0))), ACTIVE(natsFrom(z0)))
TOP(ok(cons(z0, z1))) → c76(TOP(cons(active(z0), z1)), ACTIVE(cons(z0, z1)))
TOP(ok(s(z0))) → c76(TOP(s(active(z0))), ACTIVE(s(z0)))
TOP(ok(fst(z0))) → c76(TOP(fst(active(z0))), ACTIVE(fst(z0)))
TOP(ok(pair(z0, z1))) → c76(TOP(pair(active(z0), z1)), ACTIVE(pair(z0, z1)))
TOP(ok(pair(z0, z1))) → c76(TOP(pair(z0, active(z1))), ACTIVE(pair(z0, z1)))
TOP(ok(snd(z0))) → c76(TOP(snd(active(z0))), ACTIVE(snd(z0)))
TOP(ok(splitAt(z0, z1))) → c76(TOP(splitAt(active(z0), z1)), ACTIVE(splitAt(z0, z1)))
TOP(ok(splitAt(z0, z1))) → c76(TOP(splitAt(z0, active(z1))), ACTIVE(splitAt(z0, z1)))
TOP(ok(u(z0, z1, z2, z3))) → c76(TOP(u(active(z0), z1, z2, z3)), ACTIVE(u(z0, z1, z2, z3)))
TOP(ok(head(z0))) → c76(TOP(head(active(z0))), ACTIVE(head(z0)))
TOP(ok(tail(z0))) → c76(TOP(tail(active(z0))), ACTIVE(tail(z0)))
TOP(ok(sel(z0, z1))) → c76(TOP(sel(active(z0), z1)), ACTIVE(sel(z0, z1)))
TOP(ok(sel(z0, z1))) → c76(TOP(sel(z0, active(z1))), ACTIVE(sel(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(afterNth(active(z0), z1)), ACTIVE(afterNth(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(afterNth(z0, active(z1))), ACTIVE(afterNth(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(take(active(z0), z1)), ACTIVE(take(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(take(z0, active(z1))), ACTIVE(take(z0, z1)))
TOP(ok(x0)) → c76
(22) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(mark(nil)) → c75(TOP(ok(nil)))
TOP(ok(natsFrom(z0))) → c76(TOP(mark(cons(z0, natsFrom(s(z0))))), ACTIVE(natsFrom(z0)))
TOP(ok(fst(pair(z0, z1)))) → c76(TOP(mark(z0)), ACTIVE(fst(pair(z0, z1))))
TOP(ok(snd(pair(z0, z1)))) → c76(TOP(mark(z1)), ACTIVE(snd(pair(z0, z1))))
TOP(ok(splitAt(0, z0))) → c76(TOP(mark(pair(nil, z0))), ACTIVE(splitAt(0, z0)))
TOP(ok(splitAt(s(z0), cons(z1, z2)))) → c76(TOP(mark(u(splitAt(z0, z2), z0, z1, z2))), ACTIVE(splitAt(s(z0), cons(z1, z2))))
TOP(ok(u(pair(z0, z1), z2, z3, z4))) → c76(TOP(mark(pair(cons(z3, z0), z1))), ACTIVE(u(pair(z0, z1), z2, z3, z4)))
TOP(ok(head(cons(z0, z1)))) → c76(TOP(mark(z0)), ACTIVE(head(cons(z0, z1))))
TOP(ok(tail(cons(z0, z1)))) → c76(TOP(mark(z1)), ACTIVE(tail(cons(z0, z1))))
TOP(ok(sel(z0, z1))) → c76(TOP(mark(head(afterNth(z0, z1)))), ACTIVE(sel(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(mark(fst(splitAt(z0, z1)))), ACTIVE(take(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(mark(snd(splitAt(z0, z1)))), ACTIVE(afterNth(z0, z1)))
TOP(ok(natsFrom(z0))) → c76(TOP(natsFrom(active(z0))), ACTIVE(natsFrom(z0)))
TOP(ok(cons(z0, z1))) → c76(TOP(cons(active(z0), z1)), ACTIVE(cons(z0, z1)))
TOP(ok(s(z0))) → c76(TOP(s(active(z0))), ACTIVE(s(z0)))
TOP(ok(fst(z0))) → c76(TOP(fst(active(z0))), ACTIVE(fst(z0)))
TOP(ok(pair(z0, z1))) → c76(TOP(pair(active(z0), z1)), ACTIVE(pair(z0, z1)))
TOP(ok(pair(z0, z1))) → c76(TOP(pair(z0, active(z1))), ACTIVE(pair(z0, z1)))
TOP(ok(snd(z0))) → c76(TOP(snd(active(z0))), ACTIVE(snd(z0)))
TOP(ok(splitAt(z0, z1))) → c76(TOP(splitAt(active(z0), z1)), ACTIVE(splitAt(z0, z1)))
TOP(ok(splitAt(z0, z1))) → c76(TOP(splitAt(z0, active(z1))), ACTIVE(splitAt(z0, z1)))
TOP(ok(u(z0, z1, z2, z3))) → c76(TOP(u(active(z0), z1, z2, z3)), ACTIVE(u(z0, z1, z2, z3)))
TOP(ok(head(z0))) → c76(TOP(head(active(z0))), ACTIVE(head(z0)))
TOP(ok(tail(z0))) → c76(TOP(tail(active(z0))), ACTIVE(tail(z0)))
TOP(ok(sel(z0, z1))) → c76(TOP(sel(active(z0), z1)), ACTIVE(sel(z0, z1)))
TOP(ok(sel(z0, z1))) → c76(TOP(sel(z0, active(z1))), ACTIVE(sel(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(afterNth(active(z0), z1)), ACTIVE(afterNth(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(afterNth(z0, active(z1))), ACTIVE(afterNth(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(take(active(z0), z1)), ACTIVE(take(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(take(z0, active(z1))), ACTIVE(take(z0, z1)))
TOP(ok(x0)) → c76
S tuples:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(ok(natsFrom(z0))) → c76(TOP(mark(cons(z0, natsFrom(s(z0))))), ACTIVE(natsFrom(z0)))
TOP(ok(fst(pair(z0, z1)))) → c76(TOP(mark(z0)), ACTIVE(fst(pair(z0, z1))))
TOP(ok(snd(pair(z0, z1)))) → c76(TOP(mark(z1)), ACTIVE(snd(pair(z0, z1))))
TOP(ok(splitAt(0, z0))) → c76(TOP(mark(pair(nil, z0))), ACTIVE(splitAt(0, z0)))
TOP(ok(splitAt(s(z0), cons(z1, z2)))) → c76(TOP(mark(u(splitAt(z0, z2), z0, z1, z2))), ACTIVE(splitAt(s(z0), cons(z1, z2))))
TOP(ok(u(pair(z0, z1), z2, z3, z4))) → c76(TOP(mark(pair(cons(z3, z0), z1))), ACTIVE(u(pair(z0, z1), z2, z3, z4)))
TOP(ok(head(cons(z0, z1)))) → c76(TOP(mark(z0)), ACTIVE(head(cons(z0, z1))))
TOP(ok(tail(cons(z0, z1)))) → c76(TOP(mark(z1)), ACTIVE(tail(cons(z0, z1))))
TOP(ok(sel(z0, z1))) → c76(TOP(mark(head(afterNth(z0, z1)))), ACTIVE(sel(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(mark(fst(splitAt(z0, z1)))), ACTIVE(take(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(mark(snd(splitAt(z0, z1)))), ACTIVE(afterNth(z0, z1)))
TOP(ok(natsFrom(z0))) → c76(TOP(natsFrom(active(z0))), ACTIVE(natsFrom(z0)))
TOP(ok(cons(z0, z1))) → c76(TOP(cons(active(z0), z1)), ACTIVE(cons(z0, z1)))
TOP(ok(s(z0))) → c76(TOP(s(active(z0))), ACTIVE(s(z0)))
TOP(ok(fst(z0))) → c76(TOP(fst(active(z0))), ACTIVE(fst(z0)))
TOP(ok(pair(z0, z1))) → c76(TOP(pair(active(z0), z1)), ACTIVE(pair(z0, z1)))
TOP(ok(pair(z0, z1))) → c76(TOP(pair(z0, active(z1))), ACTIVE(pair(z0, z1)))
TOP(ok(snd(z0))) → c76(TOP(snd(active(z0))), ACTIVE(snd(z0)))
TOP(ok(splitAt(z0, z1))) → c76(TOP(splitAt(active(z0), z1)), ACTIVE(splitAt(z0, z1)))
TOP(ok(splitAt(z0, z1))) → c76(TOP(splitAt(z0, active(z1))), ACTIVE(splitAt(z0, z1)))
TOP(ok(u(z0, z1, z2, z3))) → c76(TOP(u(active(z0), z1, z2, z3)), ACTIVE(u(z0, z1, z2, z3)))
TOP(ok(head(z0))) → c76(TOP(head(active(z0))), ACTIVE(head(z0)))
TOP(ok(tail(z0))) → c76(TOP(tail(active(z0))), ACTIVE(tail(z0)))
TOP(ok(sel(z0, z1))) → c76(TOP(sel(active(z0), z1)), ACTIVE(sel(z0, z1)))
TOP(ok(sel(z0, z1))) → c76(TOP(sel(z0, active(z1))), ACTIVE(sel(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(afterNth(active(z0), z1)), ACTIVE(afterNth(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(afterNth(z0, active(z1))), ACTIVE(afterNth(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(take(active(z0), z1)), ACTIVE(take(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(take(z0, active(z1))), ACTIVE(take(z0, z1)))
TOP(ok(x0)) → c76
K tuples:
TOP(mark(nil)) → c75(TOP(ok(nil)))
TOP(mark(0)) → c75(TOP(ok(0)))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, ACTIVE, PROPER, TOP
Compound Symbols:
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, c3, c5, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c, c8, c9, c10, c4, c60, c61, c62, c63, c64, c65, c66, c69, c70, c71, c72, c73, c74, c75, c75, c76, c76
(23) CdtUnreachableProof (EQUIVALENT transformation)
The following tuples could be removed as they are not reachable from basic start terms:
ACTIVE(splitAt(0, z0)) → c3(PAIR(nil, z0))
ACTIVE(u(pair(z0, z1), z2, z3, z4)) → c5(PAIR(cons(z3, z0), z1), CONS(z3, z0))
ACTIVE(natsFrom(z0)) → c11(NATSFROM(active(z0)), ACTIVE(z0))
ACTIVE(cons(z0, z1)) → c12(CONS(active(z0), z1), ACTIVE(z0))
ACTIVE(s(z0)) → c13(S(active(z0)), ACTIVE(z0))
ACTIVE(fst(z0)) → c14(FST(active(z0)), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c15(PAIR(active(z0), z1), ACTIVE(z0))
ACTIVE(pair(z0, z1)) → c16(PAIR(z0, active(z1)), ACTIVE(z1))
ACTIVE(snd(z0)) → c17(SND(active(z0)), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c18(SPLITAT(active(z0), z1), ACTIVE(z0))
ACTIVE(splitAt(z0, z1)) → c19(SPLITAT(z0, active(z1)), ACTIVE(z1))
ACTIVE(u(z0, z1, z2, z3)) → c20(U(active(z0), z1, z2, z3), ACTIVE(z0))
ACTIVE(head(z0)) → c21(HEAD(active(z0)), ACTIVE(z0))
ACTIVE(tail(z0)) → c22(TAIL(active(z0)), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c23(SEL(active(z0), z1), ACTIVE(z0))
ACTIVE(sel(z0, z1)) → c24(SEL(z0, active(z1)), ACTIVE(z1))
ACTIVE(afterNth(z0, z1)) → c25(AFTERNTH(active(z0), z1), ACTIVE(z0))
ACTIVE(afterNth(z0, z1)) → c26(AFTERNTH(z0, active(z1)), ACTIVE(z1))
ACTIVE(take(z0, z1)) → c27(TAKE(active(z0), z1), ACTIVE(z0))
ACTIVE(take(z0, z1)) → c28(TAKE(z0, active(z1)), ACTIVE(z1))
ACTIVE(natsFrom(z0)) → c(S(z0))
ACTIVE(sel(z0, z1)) → c8(AFTERNTH(z0, z1))
ACTIVE(take(z0, z1)) → c9(SPLITAT(z0, z1))
ACTIVE(afterNth(z0, z1)) → c10(SPLITAT(z0, z1))
ACTIVE(splitAt(s(z0), cons(x1, mark(z1)))) → c4(U(mark(splitAt(z0, z1)), z0, x1, mark(z1)), SPLITAT(z0, mark(z1)))
PROPER(natsFrom(z0)) → c60(NATSFROM(proper(z0)), PROPER(z0))
PROPER(cons(z0, z1)) → c61(CONS(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(s(z0)) → c62(S(proper(z0)), PROPER(z0))
PROPER(fst(z0)) → c63(FST(proper(z0)), PROPER(z0))
PROPER(pair(z0, z1)) → c64(PAIR(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(snd(z0)) → c65(SND(proper(z0)), PROPER(z0))
PROPER(splitAt(z0, z1)) → c66(SPLITAT(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(u(z0, z1, z2, z3)) → c69(U(proper(z0), proper(z1), proper(z2), proper(z3)), PROPER(z0), PROPER(z1), PROPER(z2), PROPER(z3))
PROPER(head(z0)) → c70(HEAD(proper(z0)), PROPER(z0))
PROPER(tail(z0)) → c71(TAIL(proper(z0)), PROPER(z0))
PROPER(sel(z0, z1)) → c72(SEL(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(afterNth(z0, z1)) → c73(AFTERNTH(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
PROPER(take(z0, z1)) → c74(TAKE(proper(z0), proper(z1)), PROPER(z0), PROPER(z1))
TOP(mark(natsFrom(z0))) → c75(TOP(natsFrom(proper(z0))), PROPER(natsFrom(z0)))
TOP(mark(cons(z0, z1))) → c75(TOP(cons(proper(z0), proper(z1))), PROPER(cons(z0, z1)))
TOP(mark(s(z0))) → c75(TOP(s(proper(z0))), PROPER(s(z0)))
TOP(mark(fst(z0))) → c75(TOP(fst(proper(z0))), PROPER(fst(z0)))
TOP(mark(pair(z0, z1))) → c75(TOP(pair(proper(z0), proper(z1))), PROPER(pair(z0, z1)))
TOP(mark(snd(z0))) → c75(TOP(snd(proper(z0))), PROPER(snd(z0)))
TOP(mark(splitAt(z0, z1))) → c75(TOP(splitAt(proper(z0), proper(z1))), PROPER(splitAt(z0, z1)))
TOP(mark(u(z0, z1, z2, z3))) → c75(TOP(u(proper(z0), proper(z1), proper(z2), proper(z3))), PROPER(u(z0, z1, z2, z3)))
TOP(mark(head(z0))) → c75(TOP(head(proper(z0))), PROPER(head(z0)))
TOP(mark(tail(z0))) → c75(TOP(tail(proper(z0))), PROPER(tail(z0)))
TOP(mark(sel(z0, z1))) → c75(TOP(sel(proper(z0), proper(z1))), PROPER(sel(z0, z1)))
TOP(mark(afterNth(z0, z1))) → c75(TOP(afterNth(proper(z0), proper(z1))), PROPER(afterNth(z0, z1)))
TOP(mark(take(z0, z1))) → c75(TOP(take(proper(z0), proper(z1))), PROPER(take(z0, z1)))
TOP(ok(natsFrom(z0))) → c76(TOP(mark(cons(z0, natsFrom(s(z0))))), ACTIVE(natsFrom(z0)))
TOP(ok(fst(pair(z0, z1)))) → c76(TOP(mark(z0)), ACTIVE(fst(pair(z0, z1))))
TOP(ok(snd(pair(z0, z1)))) → c76(TOP(mark(z1)), ACTIVE(snd(pair(z0, z1))))
TOP(ok(splitAt(0, z0))) → c76(TOP(mark(pair(nil, z0))), ACTIVE(splitAt(0, z0)))
TOP(ok(splitAt(s(z0), cons(z1, z2)))) → c76(TOP(mark(u(splitAt(z0, z2), z0, z1, z2))), ACTIVE(splitAt(s(z0), cons(z1, z2))))
TOP(ok(u(pair(z0, z1), z2, z3, z4))) → c76(TOP(mark(pair(cons(z3, z0), z1))), ACTIVE(u(pair(z0, z1), z2, z3, z4)))
TOP(ok(head(cons(z0, z1)))) → c76(TOP(mark(z0)), ACTIVE(head(cons(z0, z1))))
TOP(ok(tail(cons(z0, z1)))) → c76(TOP(mark(z1)), ACTIVE(tail(cons(z0, z1))))
TOP(ok(sel(z0, z1))) → c76(TOP(mark(head(afterNth(z0, z1)))), ACTIVE(sel(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(mark(fst(splitAt(z0, z1)))), ACTIVE(take(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(mark(snd(splitAt(z0, z1)))), ACTIVE(afterNth(z0, z1)))
TOP(ok(natsFrom(z0))) → c76(TOP(natsFrom(active(z0))), ACTIVE(natsFrom(z0)))
TOP(ok(cons(z0, z1))) → c76(TOP(cons(active(z0), z1)), ACTIVE(cons(z0, z1)))
TOP(ok(s(z0))) → c76(TOP(s(active(z0))), ACTIVE(s(z0)))
TOP(ok(fst(z0))) → c76(TOP(fst(active(z0))), ACTIVE(fst(z0)))
TOP(ok(pair(z0, z1))) → c76(TOP(pair(active(z0), z1)), ACTIVE(pair(z0, z1)))
TOP(ok(pair(z0, z1))) → c76(TOP(pair(z0, active(z1))), ACTIVE(pair(z0, z1)))
TOP(ok(snd(z0))) → c76(TOP(snd(active(z0))), ACTIVE(snd(z0)))
TOP(ok(splitAt(z0, z1))) → c76(TOP(splitAt(active(z0), z1)), ACTIVE(splitAt(z0, z1)))
TOP(ok(splitAt(z0, z1))) → c76(TOP(splitAt(z0, active(z1))), ACTIVE(splitAt(z0, z1)))
TOP(ok(u(z0, z1, z2, z3))) → c76(TOP(u(active(z0), z1, z2, z3)), ACTIVE(u(z0, z1, z2, z3)))
TOP(ok(head(z0))) → c76(TOP(head(active(z0))), ACTIVE(head(z0)))
TOP(ok(tail(z0))) → c76(TOP(tail(active(z0))), ACTIVE(tail(z0)))
TOP(ok(sel(z0, z1))) → c76(TOP(sel(active(z0), z1)), ACTIVE(sel(z0, z1)))
TOP(ok(sel(z0, z1))) → c76(TOP(sel(z0, active(z1))), ACTIVE(sel(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(afterNth(active(z0), z1)), ACTIVE(afterNth(z0, z1)))
TOP(ok(afterNth(z0, z1))) → c76(TOP(afterNth(z0, active(z1))), ACTIVE(afterNth(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(take(active(z0), z1)), ACTIVE(take(z0, z1)))
TOP(ok(take(z0, z1))) → c76(TOP(take(z0, active(z1))), ACTIVE(take(z0, z1)))
(24) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(mark(nil)) → c75(TOP(ok(nil)))
TOP(ok(x0)) → c76
S tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
TOP(ok(x0)) → c76
K tuples:
TOP(mark(nil)) → c75(TOP(ok(nil)))
TOP(mark(0)) → c75(TOP(ok(0)))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE, TOP
Compound Symbols:
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, c75, c76
(25) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID) transformation)
Removed 3 trailing nodes:
TOP(mark(nil)) → c75(TOP(ok(nil)))
TOP(mark(0)) → c75(TOP(ok(0)))
TOP(ok(x0)) → c76
(26) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
K tuples:none
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(27) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = 0
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = x1
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(U(x1, x2, x3, x4)) = 0
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [2] + x1
POL(ok(x1)) = [4] + x1
(28) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(29) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = 0
POL(CONS(x1, x2)) = [4]x2
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(U(x1, x2, x3, x4)) = 0
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = 0
POL(ok(x1)) = [2] + x1
(30) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(31) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = x2
POL(CONS(x1, x2)) = [2]x1 + [2]x2
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = x1
POL(PAIR(x1, x2)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(U(x1, x2, x3, x4)) = 0
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [4] + x1
POL(ok(x1)) = [1] + x1
(32) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(33) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = 0
POL(CONS(x1, x2)) = [2]x2
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(U(x1, x2, x3, x4)) = [2]x2
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [3]
POL(ok(x1)) = [2] + x1
(34) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(35) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [2]x2
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = [2]x1
POL(PAIR(x1, x2)) = [2]x2
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(U(x1, x2, x3, x4)) = [3]x2 + [3]x3
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [1] + x1
POL(ok(x1)) = x1
(36) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(37) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = 0
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = [4]x1
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = [4]x2
POL(S(x1)) = 0
POL(SEL(x1, x2)) = [4]x1
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(U(x1, x2, x3, x4)) = [2]x2 + [4]x4
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [4] + x1
POL(ok(x1)) = x1
(38) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(ok(z0)) → c36(FST(z0))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(39) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [4]x2
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = [4]x1
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = x2
POL(U(x1, x2, x3, x4)) = [2]x2
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [1] + x1
POL(ok(x1)) = [2] + x1
(40) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(ok(z0)) → c36(FST(z0))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(41) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [4]x1 + [4]x2
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = 0
POL(HEAD(x1)) = [2]x1
POL(NATSFROM(x1)) = [4]x1
POL(PAIR(x1, x2)) = [2]x1
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = [2]x2
POL(U(x1, x2, x3, x4)) = [4]x3 + x4
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [2] + x1
POL(ok(x1)) = x1
(42) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(ok(z0)) → c36(FST(z0))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(43) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = 0
POL(CONS(x1, x2)) = x2
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = x1
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = x1
POL(TAKE(x1, x2)) = [2]x2
POL(U(x1, x2, x3, x4)) = 0
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [1] + x1
POL(ok(x1)) = [1] + x1
(44) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(ok(z0)) → c36(FST(z0))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(45) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [4]x2
POL(CONS(x1, x2)) = [2]x2
POL(FST(x1)) = [4]x1
POL(HEAD(x1)) = [4]x1
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = [2]x1
POL(S(x1)) = 0
POL(SEL(x1, x2)) = [3]x1 + [4]x2
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = [3]x1
POL(TAKE(x1, x2)) = [4]x2
POL(U(x1, x2, x3, x4)) = [4]x2 + [3]x3 + [2]x4
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [1] + x1
POL(ok(x1)) = [4] + x1
(46) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(47) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [2]x1 + [4]x2
POL(CONS(x1, x2)) = [2]x2
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = [4]x2
POL(S(x1)) = 0
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = [3]x1
POL(TAKE(x1, x2)) = [4]x1 + [2]x2
POL(U(x1, x2, x3, x4)) = x3 + [2]x4
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [2] + x1
POL(ok(x1)) = [3] + x1
(48) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(49) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
SND(ok(z0)) → c41(SND(z0))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [4]x2
POL(CONS(x1, x2)) = x2
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = [4]x1
POL(SND(x1)) = [4]x1
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = [4]x1
POL(TAKE(x1, x2)) = [4]x1 + [4]x2
POL(U(x1, x2, x3, x4)) = 0
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = x1
POL(ok(x1)) = [4] + x1
(50) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
SND(mark(z0)) → c40(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
SND(ok(z0)) → c41(SND(z0))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(51) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
S(ok(z0)) → c34(S(z0))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [2]x1 + [2]x2
POL(CONS(x1, x2)) = [3]x1
POL(FST(x1)) = 0
POL(HEAD(x1)) = [2]x1
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = [4]x1
POL(S(x1)) = [4]x1
POL(SEL(x1, x2)) = [2]x1 + [4]x2
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = [4]x1
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = [2]x1
POL(U(x1, x2, x3, x4)) = [3]x2 + [2]x4
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = x1
POL(ok(x1)) = [4] + x1
(52) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
SND(mark(z0)) → c40(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
SND(ok(z0)) → c41(SND(z0))
S(ok(z0)) → c34(S(z0))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(53) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [4]x2
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = [2]x1
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = x2
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = 0
POL(U(x1, x2, x3, x4)) = [2]x3
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [1] + x1
POL(ok(x1)) = x1
(54) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
SND(mark(z0)) → c40(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
SND(ok(z0)) → c41(SND(z0))
S(ok(z0)) → c34(S(z0))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(55) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
SND(mark(z0)) → c40(SND(z0))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [4]x1 + [3]x2
POL(CONS(x1, x2)) = [2]x2
POL(FST(x1)) = 0
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = [2]x1
POL(PAIR(x1, x2)) = 0
POL(S(x1)) = 0
POL(SEL(x1, x2)) = [3]x1 + [4]x2
POL(SND(x1)) = x1
POL(SPLITAT(x1, x2)) = 0
POL(TAIL(x1)) = x1
POL(TAKE(x1, x2)) = [4]x1 + [2]x2
POL(U(x1, x2, x3, x4)) = [2]x3 + [3]x4
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [1] + x1
POL(ok(x1)) = x1
(56) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
SND(ok(z0)) → c41(SND(z0))
S(ok(z0)) → c34(S(z0))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SND(mark(z0)) → c40(SND(z0))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(57) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [4]x1
POL(CONS(x1, x2)) = 0
POL(FST(x1)) = [3]x1
POL(HEAD(x1)) = x1
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = x2
POL(S(x1)) = 0
POL(SEL(x1, x2)) = [2]x1
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = x1 + [4]x2
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = [4]x1 + [3]x2
POL(U(x1, x2, x3, x4)) = x2 + [3]x4
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [4] + x1
POL(ok(x1)) = x1
(58) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
S(mark(z0)) → c33(S(z0))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
SND(ok(z0)) → c41(SND(z0))
S(ok(z0)) → c34(S(z0))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(59) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
S(mark(z0)) → c33(S(z0))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [3]x1
POL(CONS(x1, x2)) = [2]x2
POL(FST(x1)) = [3]x1
POL(HEAD(x1)) = 0
POL(NATSFROM(x1)) = [2]x1
POL(PAIR(x1, x2)) = [4]x2
POL(S(x1)) = x1
POL(SEL(x1, x2)) = 0
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = [3]x1 + [3]x2
POL(TAIL(x1)) = [4]x1
POL(TAKE(x1, x2)) = [2]x2
POL(U(x1, x2, x3, x4)) = [3]x2 + [2]x3
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [1] + x1
POL(ok(x1)) = x1
(60) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
SND(ok(z0)) → c41(SND(z0))
S(ok(z0)) → c34(S(z0))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
S(mark(z0)) → c33(S(z0))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(61) CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^1))) transformation)
Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
We considered the (Usable) Rules:none
And the Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
The order we found is given by the following interpretation:
Polynomial interpretation :
POL(AFTERNTH(x1, x2)) = [4]x1
POL(CONS(x1, x2)) = [2]x1 + x2
POL(FST(x1)) = 0
POL(HEAD(x1)) = [4]x1
POL(NATSFROM(x1)) = 0
POL(PAIR(x1, x2)) = [2]x2
POL(S(x1)) = [3]x1
POL(SEL(x1, x2)) = [3]x2
POL(SND(x1)) = 0
POL(SPLITAT(x1, x2)) = [4]x1 + [3]x2
POL(TAIL(x1)) = 0
POL(TAKE(x1, x2)) = [4]x1 + [4]x2
POL(U(x1, x2, x3, x4)) = [4]x1 + [2]x3
POL(c29(x1)) = x1
POL(c30(x1)) = x1
POL(c31(x1)) = x1
POL(c32(x1)) = x1
POL(c33(x1)) = x1
POL(c34(x1)) = x1
POL(c35(x1)) = x1
POL(c36(x1)) = x1
POL(c37(x1)) = x1
POL(c38(x1)) = x1
POL(c39(x1)) = x1
POL(c40(x1)) = x1
POL(c41(x1)) = x1
POL(c42(x1)) = x1
POL(c43(x1)) = x1
POL(c44(x1)) = x1
POL(c45(x1)) = x1
POL(c46(x1)) = x1
POL(c47(x1)) = x1
POL(c48(x1)) = x1
POL(c49(x1)) = x1
POL(c50(x1)) = x1
POL(c51(x1)) = x1
POL(c52(x1)) = x1
POL(c53(x1)) = x1
POL(c54(x1)) = x1
POL(c55(x1)) = x1
POL(c56(x1)) = x1
POL(c57(x1)) = x1
POL(c58(x1)) = x1
POL(c59(x1)) = x1
POL(mark(x1)) = [1] + x1
POL(ok(x1)) = x1
(62) 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)))
active(natsFrom(z0)) → natsFrom(active(z0))
active(cons(z0, z1)) → cons(active(z0), z1)
active(s(z0)) → s(active(z0))
active(fst(z0)) → fst(active(z0))
active(pair(z0, z1)) → pair(active(z0), z1)
active(pair(z0, z1)) → pair(z0, active(z1))
active(snd(z0)) → snd(active(z0))
active(splitAt(z0, z1)) → splitAt(active(z0), z1)
active(splitAt(z0, z1)) → splitAt(z0, active(z1))
active(u(z0, z1, z2, z3)) → u(active(z0), z1, z2, z3)
active(head(z0)) → head(active(z0))
active(tail(z0)) → tail(active(z0))
active(sel(z0, z1)) → sel(active(z0), z1)
active(sel(z0, z1)) → sel(z0, active(z1))
active(afterNth(z0, z1)) → afterNth(active(z0), z1)
active(afterNth(z0, z1)) → afterNth(z0, active(z1))
active(take(z0, z1)) → take(active(z0), z1)
active(take(z0, z1)) → take(z0, active(z1))
natsFrom(mark(z0)) → mark(natsFrom(z0))
natsFrom(ok(z0)) → ok(natsFrom(z0))
cons(mark(z0), z1) → mark(cons(z0, z1))
cons(ok(z0), ok(z1)) → ok(cons(z0, z1))
s(mark(z0)) → mark(s(z0))
s(ok(z0)) → ok(s(z0))
fst(mark(z0)) → mark(fst(z0))
fst(ok(z0)) → ok(fst(z0))
pair(mark(z0), z1) → mark(pair(z0, z1))
pair(z0, mark(z1)) → mark(pair(z0, z1))
pair(ok(z0), ok(z1)) → ok(pair(z0, z1))
snd(mark(z0)) → mark(snd(z0))
snd(ok(z0)) → ok(snd(z0))
splitAt(mark(z0), z1) → mark(splitAt(z0, z1))
splitAt(z0, mark(z1)) → mark(splitAt(z0, z1))
splitAt(ok(z0), ok(z1)) → ok(splitAt(z0, z1))
u(mark(z0), z1, z2, z3) → mark(u(z0, z1, z2, z3))
u(ok(z0), ok(z1), ok(z2), ok(z3)) → ok(u(z0, z1, z2, z3))
head(mark(z0)) → mark(head(z0))
head(ok(z0)) → ok(head(z0))
tail(mark(z0)) → mark(tail(z0))
tail(ok(z0)) → ok(tail(z0))
sel(mark(z0), z1) → mark(sel(z0, z1))
sel(z0, mark(z1)) → mark(sel(z0, z1))
sel(ok(z0), ok(z1)) → ok(sel(z0, z1))
afterNth(mark(z0), z1) → mark(afterNth(z0, z1))
afterNth(z0, mark(z1)) → mark(afterNth(z0, z1))
afterNth(ok(z0), ok(z1)) → ok(afterNth(z0, z1))
take(mark(z0), z1) → mark(take(z0, z1))
take(z0, mark(z1)) → mark(take(z0, z1))
take(ok(z0), ok(z1)) → ok(take(z0, z1))
proper(natsFrom(z0)) → natsFrom(proper(z0))
proper(cons(z0, z1)) → cons(proper(z0), proper(z1))
proper(s(z0)) → s(proper(z0))
proper(fst(z0)) → fst(proper(z0))
proper(pair(z0, z1)) → pair(proper(z0), proper(z1))
proper(snd(z0)) → snd(proper(z0))
proper(splitAt(z0, z1)) → splitAt(proper(z0), proper(z1))
proper(0) → ok(0)
proper(nil) → ok(nil)
proper(u(z0, z1, z2, z3)) → u(proper(z0), proper(z1), proper(z2), proper(z3))
proper(head(z0)) → head(proper(z0))
proper(tail(z0)) → tail(proper(z0))
proper(sel(z0, z1)) → sel(proper(z0), proper(z1))
proper(afterNth(z0, z1)) → afterNth(proper(z0), proper(z1))
proper(take(z0, z1)) → take(proper(z0), proper(z1))
top(mark(z0)) → top(proper(z0))
top(ok(z0)) → top(active(z0))
Tuples:
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
S(mark(z0)) → c33(S(z0))
S(ok(z0)) → c34(S(z0))
FST(mark(z0)) → c35(FST(z0))
FST(ok(z0)) → c36(FST(z0))
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SND(ok(z0)) → c41(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
HEAD(mark(z0)) → c47(HEAD(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
S tuples:none
K tuples:
PAIR(mark(z0), z1) → c37(PAIR(z0, z1))
PAIR(ok(z0), ok(z1)) → c39(PAIR(z0, z1))
CONS(ok(z0), ok(z1)) → c32(CONS(z0, z1))
NATSFROM(mark(z0)) → c29(NATSFROM(z0))
NATSFROM(ok(z0)) → c30(NATSFROM(z0))
CONS(mark(z0), z1) → c31(CONS(z0, z1))
AFTERNTH(z0, mark(z1)) → c55(AFTERNTH(z0, z1))
AFTERNTH(ok(z0), ok(z1)) → c56(AFTERNTH(z0, z1))
U(ok(z0), ok(z1), ok(z2), ok(z3)) → c46(U(z0, z1, z2, z3))
PAIR(z0, mark(z1)) → c38(PAIR(z0, z1))
FST(mark(z0)) → c35(FST(z0))
SEL(mark(z0), z1) → c51(SEL(z0, z1))
TAKE(z0, mark(z1)) → c58(TAKE(z0, z1))
TAKE(ok(z0), ok(z1)) → c59(TAKE(z0, z1))
HEAD(mark(z0)) → c47(HEAD(z0))
AFTERNTH(mark(z0), z1) → c54(AFTERNTH(z0, z1))
TAIL(mark(z0)) → c49(TAIL(z0))
TAIL(ok(z0)) → c50(TAIL(z0))
SEL(ok(z0), ok(z1)) → c53(SEL(z0, z1))
FST(ok(z0)) → c36(FST(z0))
HEAD(ok(z0)) → c48(HEAD(z0))
SEL(z0, mark(z1)) → c52(SEL(z0, z1))
TAKE(mark(z0), z1) → c57(TAKE(z0, z1))
SND(ok(z0)) → c41(SND(z0))
S(ok(z0)) → c34(S(z0))
SPLITAT(ok(z0), ok(z1)) → c44(SPLITAT(z0, z1))
SPLITAT(z0, mark(z1)) → c43(SPLITAT(z0, z1))
SND(mark(z0)) → c40(SND(z0))
SPLITAT(mark(z0), z1) → c42(SPLITAT(z0, z1))
S(mark(z0)) → c33(S(z0))
U(mark(z0), z1, z2, z3) → c45(U(z0, z1, z2, z3))
Defined Rule Symbols:
active, natsFrom, cons, s, fst, pair, snd, splitAt, u, head, tail, sel, afterNth, take, proper, top
Defined Pair Symbols:
NATSFROM, CONS, S, FST, PAIR, SND, SPLITAT, U, HEAD, TAIL, SEL, AFTERNTH, TAKE
Compound Symbols:
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
(63) SIsEmptyProof (EQUIVALENT transformation)
The set S is empty
(64) BOUNDS(O(1), O(1))