(0) Obligation:

Q restricted rewrite system:
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))

Q is empty.

(1) DependencyPairsProof (EQUIVALENT transformation)

Using Dependency Pairs [AG00,LPAR04] we result in the following initial DP problem.

(2) Obligation:

Q DP problem:
The TRS P consists of the following rules:

ACTIVE(natsFrom(N)) → CONS(N, natsFrom(s(N)))
ACTIVE(natsFrom(N)) → NATSFROM(s(N))
ACTIVE(natsFrom(N)) → S(N)
ACTIVE(splitAt(0, XS)) → PAIR(nil, XS)
ACTIVE(splitAt(s(N), cons(X, XS))) → U(splitAt(N, XS), N, X, XS)
ACTIVE(splitAt(s(N), cons(X, XS))) → SPLITAT(N, XS)
ACTIVE(u(pair(YS, ZS), N, X, XS)) → PAIR(cons(X, YS), ZS)
ACTIVE(u(pair(YS, ZS), N, X, XS)) → CONS(X, YS)
ACTIVE(sel(N, XS)) → HEAD(afterNth(N, XS))
ACTIVE(sel(N, XS)) → AFTERNTH(N, XS)
ACTIVE(take(N, XS)) → FST(splitAt(N, XS))
ACTIVE(take(N, XS)) → SPLITAT(N, XS)
ACTIVE(afterNth(N, XS)) → SND(splitAt(N, XS))
ACTIVE(afterNth(N, XS)) → SPLITAT(N, XS)
ACTIVE(natsFrom(X)) → NATSFROM(active(X))
ACTIVE(natsFrom(X)) → ACTIVE(X)
ACTIVE(cons(X1, X2)) → CONS(active(X1), X2)
ACTIVE(cons(X1, X2)) → ACTIVE(X1)
ACTIVE(s(X)) → S(active(X))
ACTIVE(s(X)) → ACTIVE(X)
ACTIVE(fst(X)) → FST(active(X))
ACTIVE(fst(X)) → ACTIVE(X)
ACTIVE(pair(X1, X2)) → PAIR(active(X1), X2)
ACTIVE(pair(X1, X2)) → ACTIVE(X1)
ACTIVE(pair(X1, X2)) → PAIR(X1, active(X2))
ACTIVE(pair(X1, X2)) → ACTIVE(X2)
ACTIVE(snd(X)) → SND(active(X))
ACTIVE(snd(X)) → ACTIVE(X)
ACTIVE(splitAt(X1, X2)) → SPLITAT(active(X1), X2)
ACTIVE(splitAt(X1, X2)) → ACTIVE(X1)
ACTIVE(splitAt(X1, X2)) → SPLITAT(X1, active(X2))
ACTIVE(splitAt(X1, X2)) → ACTIVE(X2)
ACTIVE(u(X1, X2, X3, X4)) → U(active(X1), X2, X3, X4)
ACTIVE(u(X1, X2, X3, X4)) → ACTIVE(X1)
ACTIVE(head(X)) → HEAD(active(X))
ACTIVE(head(X)) → ACTIVE(X)
ACTIVE(tail(X)) → TAIL(active(X))
ACTIVE(tail(X)) → ACTIVE(X)
ACTIVE(sel(X1, X2)) → SEL(active(X1), X2)
ACTIVE(sel(X1, X2)) → ACTIVE(X1)
ACTIVE(sel(X1, X2)) → SEL(X1, active(X2))
ACTIVE(sel(X1, X2)) → ACTIVE(X2)
ACTIVE(afterNth(X1, X2)) → AFTERNTH(active(X1), X2)
ACTIVE(afterNth(X1, X2)) → ACTIVE(X1)
ACTIVE(afterNth(X1, X2)) → AFTERNTH(X1, active(X2))
ACTIVE(afterNth(X1, X2)) → ACTIVE(X2)
ACTIVE(take(X1, X2)) → TAKE(active(X1), X2)
ACTIVE(take(X1, X2)) → ACTIVE(X1)
ACTIVE(take(X1, X2)) → TAKE(X1, active(X2))
ACTIVE(take(X1, X2)) → ACTIVE(X2)
NATSFROM(mark(X)) → NATSFROM(X)
CONS(mark(X1), X2) → CONS(X1, X2)
S(mark(X)) → S(X)
FST(mark(X)) → FST(X)
PAIR(mark(X1), X2) → PAIR(X1, X2)
PAIR(X1, mark(X2)) → PAIR(X1, X2)
SND(mark(X)) → SND(X)
SPLITAT(mark(X1), X2) → SPLITAT(X1, X2)
SPLITAT(X1, mark(X2)) → SPLITAT(X1, X2)
U(mark(X1), X2, X3, X4) → U(X1, X2, X3, X4)
HEAD(mark(X)) → HEAD(X)
TAIL(mark(X)) → TAIL(X)
SEL(mark(X1), X2) → SEL(X1, X2)
SEL(X1, mark(X2)) → SEL(X1, X2)
AFTERNTH(mark(X1), X2) → AFTERNTH(X1, X2)
AFTERNTH(X1, mark(X2)) → AFTERNTH(X1, X2)
TAKE(mark(X1), X2) → TAKE(X1, X2)
TAKE(X1, mark(X2)) → TAKE(X1, X2)
PROPER(natsFrom(X)) → NATSFROM(proper(X))
PROPER(natsFrom(X)) → PROPER(X)
PROPER(cons(X1, X2)) → CONS(proper(X1), proper(X2))
PROPER(cons(X1, X2)) → PROPER(X1)
PROPER(cons(X1, X2)) → PROPER(X2)
PROPER(s(X)) → S(proper(X))
PROPER(s(X)) → PROPER(X)
PROPER(fst(X)) → FST(proper(X))
PROPER(fst(X)) → PROPER(X)
PROPER(pair(X1, X2)) → PAIR(proper(X1), proper(X2))
PROPER(pair(X1, X2)) → PROPER(X1)
PROPER(pair(X1, X2)) → PROPER(X2)
PROPER(snd(X)) → SND(proper(X))
PROPER(snd(X)) → PROPER(X)
PROPER(splitAt(X1, X2)) → SPLITAT(proper(X1), proper(X2))
PROPER(splitAt(X1, X2)) → PROPER(X1)
PROPER(splitAt(X1, X2)) → PROPER(X2)
PROPER(u(X1, X2, X3, X4)) → U(proper(X1), proper(X2), proper(X3), proper(X4))
PROPER(u(X1, X2, X3, X4)) → PROPER(X1)
PROPER(u(X1, X2, X3, X4)) → PROPER(X2)
PROPER(u(X1, X2, X3, X4)) → PROPER(X3)
PROPER(u(X1, X2, X3, X4)) → PROPER(X4)
PROPER(head(X)) → HEAD(proper(X))
PROPER(head(X)) → PROPER(X)
PROPER(tail(X)) → TAIL(proper(X))
PROPER(tail(X)) → PROPER(X)
PROPER(sel(X1, X2)) → SEL(proper(X1), proper(X2))
PROPER(sel(X1, X2)) → PROPER(X1)
PROPER(sel(X1, X2)) → PROPER(X2)
PROPER(afterNth(X1, X2)) → AFTERNTH(proper(X1), proper(X2))
PROPER(afterNth(X1, X2)) → PROPER(X1)
PROPER(afterNth(X1, X2)) → PROPER(X2)
PROPER(take(X1, X2)) → TAKE(proper(X1), proper(X2))
PROPER(take(X1, X2)) → PROPER(X1)
PROPER(take(X1, X2)) → PROPER(X2)
NATSFROM(ok(X)) → NATSFROM(X)
CONS(ok(X1), ok(X2)) → CONS(X1, X2)
S(ok(X)) → S(X)
FST(ok(X)) → FST(X)
PAIR(ok(X1), ok(X2)) → PAIR(X1, X2)
SND(ok(X)) → SND(X)
SPLITAT(ok(X1), ok(X2)) → SPLITAT(X1, X2)
U(ok(X1), ok(X2), ok(X3), ok(X4)) → U(X1, X2, X3, X4)
HEAD(ok(X)) → HEAD(X)
TAIL(ok(X)) → TAIL(X)
SEL(ok(X1), ok(X2)) → SEL(X1, X2)
AFTERNTH(ok(X1), ok(X2)) → AFTERNTH(X1, X2)
TAKE(ok(X1), ok(X2)) → TAKE(X1, X2)
TOP(mark(X)) → TOP(proper(X))
TOP(mark(X)) → PROPER(X)
TOP(ok(X)) → TOP(active(X))
TOP(ok(X)) → ACTIVE(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(3) DependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 16 SCCs with 47 less nodes.

(4) Complex Obligation (AND)

(5) Obligation:

Q DP problem:
The TRS P consists of the following rules:

TAKE(X1, mark(X2)) → TAKE(X1, X2)
TAKE(mark(X1), X2) → TAKE(X1, X2)
TAKE(ok(X1), ok(X2)) → TAKE(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(6) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


TAKE(ok(X1), ok(X2)) → TAKE(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
TAKE(x1, x2)  =  TAKE(x2)
mark(x1)  =  x1
ok(x1)  =  ok(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  fst(x1)
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  x2
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  x2
take(x1, x2)  =  take(x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
top > proper1 > [active1, u2, head1] > cons2 > [TAKE1, ok1, s1, snd1] > nil
top > proper1 > [active1, u2, head1] > [fst1, take1] > [TAKE1, ok1, s1, snd1] > nil
top > proper1 > [active1, u2, head1] > pair2 > [TAKE1, ok1, s1, snd1] > nil
top > proper1 > [active1, u2, head1] > tail1 > [TAKE1, ok1, s1, snd1] > nil
top > proper1 > [active1, u2, head1] > sel1 > [TAKE1, ok1, s1, snd1] > nil
top > proper1 > 0 > pair2 > [TAKE1, ok1, s1, snd1] > nil

Status:
TAKE1: multiset
ok1: multiset
active1: [1]
cons2: multiset
s1: multiset
fst1: multiset
pair2: multiset
snd1: multiset
0: multiset
nil: multiset
u2: [2,1]
head1: [1]
tail1: [1]
sel1: multiset
take1: multiset
proper1: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(7) Obligation:

Q DP problem:
The TRS P consists of the following rules:

TAKE(X1, mark(X2)) → TAKE(X1, X2)
TAKE(mark(X1), X2) → TAKE(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(8) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


TAKE(X1, mark(X2)) → TAKE(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
TAKE(x1, x2)  =  TAKE(x2)
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  fst(x1)
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, snd1, nil, afterNth2, top] > [cons2, s1, pair2, splitAt2, u3] > [mark1, 0, head1, ok]
[active1, snd1, nil, afterNth2, top] > fst1 > [mark1, 0, head1, ok]
[active1, snd1, nil, afterNth2, top] > sel2 > [mark1, 0, head1, ok]
[active1, snd1, nil, afterNth2, top] > take2 > [mark1, 0, head1, ok]

Status:
TAKE1: multiset
mark1: [1]
active1: [1]
cons2: [2,1]
s1: multiset
fst1: [1]
pair2: [2,1]
snd1: [1]
splitAt2: multiset
0: multiset
nil: multiset
u3: [2,3,1]
head1: [1]
sel2: multiset
afterNth2: [1,2]
take2: [2,1]
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(9) Obligation:

Q DP problem:
The TRS P consists of the following rules:

TAKE(mark(X1), X2) → TAKE(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(10) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


TAKE(mark(X1), X2) → TAKE(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
TAKE(x1, x2)  =  TAKE(x1)
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  x1
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [pair2, snd1, nil, u3, afterNth2, proper1, top] > [natsFrom1, cons2] > splitAt2 > mark1
active1 > [pair2, snd1, nil, u3, afterNth2, proper1, top] > 0 > mark1
active1 > [pair2, snd1, nil, u3, afterNth2, proper1, top] > sel2 > mark1
active1 > [pair2, snd1, nil, u3, afterNth2, proper1, top] > take2 > mark1

Status:
TAKE1: multiset
mark1: multiset
active1: [1]
natsFrom1: multiset
cons2: multiset
pair2: [2,1]
snd1: [1]
splitAt2: [2,1]
0: multiset
nil: multiset
u3: [1,3,2]
sel2: multiset
afterNth2: [1,2]
take2: [2,1]
proper1: [1]
top: []


The following usable rules [FROCOS05] were oriented:

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))

(11) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(12) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(13) TRUE

(14) Obligation:

Q DP problem:
The TRS P consists of the following rules:

AFTERNTH(X1, mark(X2)) → AFTERNTH(X1, X2)
AFTERNTH(mark(X1), X2) → AFTERNTH(X1, X2)
AFTERNTH(ok(X1), ok(X2)) → AFTERNTH(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(15) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


AFTERNTH(ok(X1), ok(X2)) → AFTERNTH(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
AFTERNTH(x1, x2)  =  AFTERNTH(x1, x2)
mark(x1)  =  x1
ok(x1)  =  ok(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, natsFrom1, tail1, take2, proper1] > 0 > nil
[active1, natsFrom1, tail1, take2, proper1] > sel2 > afterNth2 > snd1 > [ok1, s1] > AFTERNTH2 > nil
[active1, natsFrom1, tail1, take2, proper1] > sel2 > afterNth2 > splitAt2 > pair2 > [cons2, u3] > [ok1, s1] > AFTERNTH2 > nil
top > nil

Status:
AFTERNTH2: [1,2]
ok1: multiset
active1: [1]
natsFrom1: [1]
cons2: multiset
s1: multiset
pair2: multiset
snd1: [1]
splitAt2: multiset
0: multiset
nil: multiset
u3: multiset
tail1: [1]
sel2: [2,1]
afterNth2: multiset
take2: [2,1]
proper1: [1]
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(16) Obligation:

Q DP problem:
The TRS P consists of the following rules:

AFTERNTH(X1, mark(X2)) → AFTERNTH(X1, X2)
AFTERNTH(mark(X1), X2) → AFTERNTH(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(17) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


AFTERNTH(mark(X1), X2) → AFTERNTH(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
AFTERNTH(x1, x2)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x2, x3, x4)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
0 > nil > ok > [active1, pair2, u4, sel2] > cons2 > [splitAt2, take2] > mark1 > top
0 > nil > ok > [active1, pair2, u4, sel2] > s1 > [splitAt2, take2] > mark1 > top
0 > nil > ok > [active1, pair2, u4, sel2] > tail1 > mark1 > top
0 > nil > ok > [active1, pair2, u4, sel2] > afterNth2 > [splitAt2, take2] > mark1 > top
proper1 > ok > [active1, pair2, u4, sel2] > cons2 > [splitAt2, take2] > mark1 > top
proper1 > ok > [active1, pair2, u4, sel2] > s1 > [splitAt2, take2] > mark1 > top
proper1 > ok > [active1, pair2, u4, sel2] > tail1 > mark1 > top
proper1 > ok > [active1, pair2, u4, sel2] > afterNth2 > [splitAt2, take2] > mark1 > top

Status:
mark1: [1]
active1: [1]
cons2: multiset
s1: multiset
pair2: [2,1]
splitAt2: multiset
0: multiset
nil: multiset
u4: [1,4,2,3]
tail1: multiset
sel2: [1,2]
afterNth2: [2,1]
take2: [2,1]
proper1: [1]
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(18) Obligation:

Q DP problem:
The TRS P consists of the following rules:

AFTERNTH(X1, mark(X2)) → AFTERNTH(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(19) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


AFTERNTH(X1, mark(X2)) → AFTERNTH(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
AFTERNTH(x1, x2)  =  x2
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x2, x3, x4)
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [cons2, u4] > ok > s1 > splitAt2 > mark1
active1 > [cons2, u4] > ok > pair2 > mark1
active1 > [cons2, u4] > ok > snd1 > mark1
active1 > [cons2, u4] > ok > sel2 > afterNth2 > splitAt2 > mark1
active1 > [cons2, u4] > ok > take2 > splitAt2 > mark1
active1 > [cons2, u4] > ok > top > mark1
active1 > nil > ok > s1 > splitAt2 > mark1
active1 > nil > ok > pair2 > mark1
active1 > nil > ok > snd1 > mark1
active1 > nil > ok > sel2 > afterNth2 > splitAt2 > mark1
active1 > nil > ok > take2 > splitAt2 > mark1
active1 > nil > ok > top > mark1
0 > nil > ok > s1 > splitAt2 > mark1
0 > nil > ok > pair2 > mark1
0 > nil > ok > snd1 > mark1
0 > nil > ok > sel2 > afterNth2 > splitAt2 > mark1
0 > nil > ok > take2 > splitAt2 > mark1
0 > nil > ok > top > mark1

Status:
mark1: multiset
active1: multiset
cons2: [1,2]
s1: [1]
pair2: [1,2]
snd1: [1]
splitAt2: multiset
0: multiset
nil: multiset
u4: [3,1,2,4]
sel2: [2,1]
afterNth2: multiset
take2: [2,1]
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(20) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(21) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(22) TRUE

(23) Obligation:

Q DP problem:
The TRS P consists of the following rules:

SEL(X1, mark(X2)) → SEL(X1, X2)
SEL(mark(X1), X2) → SEL(X1, X2)
SEL(ok(X1), ok(X2)) → SEL(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(24) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


SEL(ok(X1), ok(X2)) → SEL(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
SEL(x1, x2)  =  SEL(x1, x2)
mark(x1)  =  x1
ok(x1)  =  ok(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, natsFrom1, tail1, take2, proper1] > 0 > nil
[active1, natsFrom1, tail1, take2, proper1] > sel2 > afterNth2 > snd1 > [ok1, s1] > SEL2 > nil
[active1, natsFrom1, tail1, take2, proper1] > sel2 > afterNth2 > splitAt2 > pair2 > [cons2, u3] > [ok1, s1] > SEL2 > nil
top > nil

Status:
SEL2: [1,2]
ok1: multiset
active1: [1]
natsFrom1: [1]
cons2: multiset
s1: multiset
pair2: multiset
snd1: [1]
splitAt2: multiset
0: multiset
nil: multiset
u3: multiset
tail1: [1]
sel2: [2,1]
afterNth2: multiset
take2: [2,1]
proper1: [1]
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(25) Obligation:

Q DP problem:
The TRS P consists of the following rules:

SEL(X1, mark(X2)) → SEL(X1, X2)
SEL(mark(X1), X2) → SEL(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(26) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


SEL(mark(X1), X2) → SEL(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
SEL(x1, x2)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x2, x3, x4)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
0 > nil > ok > [active1, pair2, u4, sel2] > cons2 > [splitAt2, take2] > mark1 > top
0 > nil > ok > [active1, pair2, u4, sel2] > s1 > [splitAt2, take2] > mark1 > top
0 > nil > ok > [active1, pair2, u4, sel2] > tail1 > mark1 > top
0 > nil > ok > [active1, pair2, u4, sel2] > afterNth2 > [splitAt2, take2] > mark1 > top
proper1 > ok > [active1, pair2, u4, sel2] > cons2 > [splitAt2, take2] > mark1 > top
proper1 > ok > [active1, pair2, u4, sel2] > s1 > [splitAt2, take2] > mark1 > top
proper1 > ok > [active1, pair2, u4, sel2] > tail1 > mark1 > top
proper1 > ok > [active1, pair2, u4, sel2] > afterNth2 > [splitAt2, take2] > mark1 > top

Status:
mark1: [1]
active1: [1]
cons2: multiset
s1: multiset
pair2: [2,1]
splitAt2: multiset
0: multiset
nil: multiset
u4: [1,4,2,3]
tail1: multiset
sel2: [1,2]
afterNth2: [2,1]
take2: [2,1]
proper1: [1]
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(27) Obligation:

Q DP problem:
The TRS P consists of the following rules:

SEL(X1, mark(X2)) → SEL(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(28) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


SEL(X1, mark(X2)) → SEL(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
SEL(x1, x2)  =  x2
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x2, x3, x4)
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [cons2, u4] > ok > s1 > splitAt2 > mark1
active1 > [cons2, u4] > ok > pair2 > mark1
active1 > [cons2, u4] > ok > snd1 > mark1
active1 > [cons2, u4] > ok > sel2 > afterNth2 > splitAt2 > mark1
active1 > [cons2, u4] > ok > take2 > splitAt2 > mark1
active1 > [cons2, u4] > ok > top > mark1
active1 > nil > ok > s1 > splitAt2 > mark1
active1 > nil > ok > pair2 > mark1
active1 > nil > ok > snd1 > mark1
active1 > nil > ok > sel2 > afterNth2 > splitAt2 > mark1
active1 > nil > ok > take2 > splitAt2 > mark1
active1 > nil > ok > top > mark1
0 > nil > ok > s1 > splitAt2 > mark1
0 > nil > ok > pair2 > mark1
0 > nil > ok > snd1 > mark1
0 > nil > ok > sel2 > afterNth2 > splitAt2 > mark1
0 > nil > ok > take2 > splitAt2 > mark1
0 > nil > ok > top > mark1

Status:
mark1: multiset
active1: multiset
cons2: [1,2]
s1: [1]
pair2: [1,2]
snd1: [1]
splitAt2: multiset
0: multiset
nil: multiset
u4: [3,1,2,4]
sel2: [2,1]
afterNth2: multiset
take2: [2,1]
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(29) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(30) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(31) TRUE

(32) Obligation:

Q DP problem:
The TRS P consists of the following rules:

TAIL(ok(X)) → TAIL(X)
TAIL(mark(X)) → TAIL(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(33) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


TAIL(ok(X)) → TAIL(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
TAIL(x1)  =  x1
ok(x1)  =  ok(x1)
mark(x1)  =  x1
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  x2
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [snd1, u2, proper1] > 0 > [cons2, pair2] > [splitAt1, take2] > ok1
active1 > [snd1, u2, proper1] > tail1 > ok1
active1 > [snd1, u2, proper1] > sel1 > ok1
active1 > nil > ok1
top > ok1

Status:
ok1: multiset
active1: multiset
cons2: multiset
pair2: multiset
snd1: multiset
splitAt1: multiset
0: multiset
nil: multiset
u2: multiset
tail1: [1]
sel1: multiset
take2: multiset
proper1: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(34) Obligation:

Q DP problem:
The TRS P consists of the following rules:

TAIL(mark(X)) → TAIL(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(35) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


TAIL(mark(X)) → TAIL(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
TAIL(x1)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > afterNth2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > afterNth2 > mark1
0 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
0 > [s1, nil, sel2, ok] > afterNth2 > mark1

Status:
mark1: multiset
active1: [1]
cons2: [1,2]
s1: [1]
pair2: [2,1]
splitAt2: [1,2]
0: multiset
nil: multiset
u2: [1,2]
head1: [1]
sel2: [2,1]
afterNth2: multiset
take2: [1,2]
proper1: [1]
ok: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(36) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(37) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(38) TRUE

(39) Obligation:

Q DP problem:
The TRS P consists of the following rules:

HEAD(ok(X)) → HEAD(X)
HEAD(mark(X)) → HEAD(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(40) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


HEAD(ok(X)) → HEAD(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
HEAD(x1)  =  x1
ok(x1)  =  ok(x1)
mark(x1)  =  x1
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  x2
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [snd1, u2, proper1] > 0 > [cons2, pair2] > [splitAt1, take2] > ok1
active1 > [snd1, u2, proper1] > tail1 > ok1
active1 > [snd1, u2, proper1] > sel1 > ok1
active1 > nil > ok1
top > ok1

Status:
ok1: multiset
active1: multiset
cons2: multiset
pair2: multiset
snd1: multiset
splitAt1: multiset
0: multiset
nil: multiset
u2: multiset
tail1: [1]
sel1: multiset
take2: multiset
proper1: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(41) Obligation:

Q DP problem:
The TRS P consists of the following rules:

HEAD(mark(X)) → HEAD(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(42) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


HEAD(mark(X)) → HEAD(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
HEAD(x1)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > afterNth2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > afterNth2 > mark1
0 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
0 > [s1, nil, sel2, ok] > afterNth2 > mark1

Status:
mark1: multiset
active1: [1]
cons2: [1,2]
s1: [1]
pair2: [2,1]
splitAt2: [1,2]
0: multiset
nil: multiset
u2: [1,2]
head1: [1]
sel2: [2,1]
afterNth2: multiset
take2: [1,2]
proper1: [1]
ok: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(43) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(44) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(45) TRUE

(46) Obligation:

Q DP problem:
The TRS P consists of the following rules:

U(ok(X1), ok(X2), ok(X3), ok(X4)) → U(X1, X2, X3, X4)
U(mark(X1), X2, X3, X4) → U(X1, X2, X3, X4)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(47) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U(ok(X1), ok(X2), ok(X3), ok(X4)) → U(X1, X2, X3, X4)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U(x1, x2, x3, x4)  =  U(x1, x3, x4)
ok(x1)  =  ok(x1)
mark(x1)  =  x1
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > natsFrom1 > [cons2, u3] > splitAt1 > ok1
active1 > pair2 > [cons2, u3] > splitAt1 > ok1
active1 > [snd1, afterNth2] > splitAt1 > ok1
active1 > nil > ok1
active1 > sel2 > head1 > ok1
active1 > take2 > splitAt1 > ok1
proper1 > natsFrom1 > [cons2, u3] > splitAt1 > ok1
proper1 > pair2 > [cons2, u3] > splitAt1 > ok1
proper1 > [snd1, afterNth2] > splitAt1 > ok1
proper1 > 0 > ok1
proper1 > nil > ok1
proper1 > sel2 > head1 > ok1
proper1 > take2 > splitAt1 > ok1

Status:
U3: multiset
ok1: [1]
active1: multiset
natsFrom1: multiset
cons2: multiset
pair2: multiset
snd1: [1]
splitAt1: [1]
0: multiset
nil: multiset
u3: multiset
head1: multiset
sel2: multiset
afterNth2: [1,2]
take2: multiset
proper1: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(48) Obligation:

Q DP problem:
The TRS P consists of the following rules:

U(mark(X1), X2, X3, X4) → U(X1, X2, X3, X4)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(49) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U(mark(X1), X2, X3, X4) → U(X1, X2, X3, X4)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U(x1, x2, x3, x4)  =  U(x1)
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  fst(x1)
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  x1
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
U1 > mark1
active1 > natsFrom1 > cons2 > mark1
active1 > s1 > [pair2, u3] > cons2 > mark1
active1 > fst1 > mark1
active1 > snd1 > mark1
active1 > splitAt2 > [pair2, u3] > cons2 > mark1
active1 > splitAt2 > nil > mark1
active1 > tail1 > mark1
active1 > [sel2, afterNth2] > mark1
active1 > take2 > mark1
0 > [pair2, u3] > cons2 > mark1
0 > nil > mark1
top > mark1

Status:
U1: multiset
mark1: multiset
active1: multiset
natsFrom1: multiset
cons2: [1,2]
s1: [1]
fst1: [1]
pair2: multiset
snd1: multiset
splitAt2: multiset
0: multiset
nil: multiset
u3: multiset
tail1: multiset
sel2: [1,2]
afterNth2: [1,2]
take2: [1,2]
top: []


The following usable rules [FROCOS05] were oriented:

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))

(50) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(51) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(52) TRUE

(53) Obligation:

Q DP problem:
The TRS P consists of the following rules:

SPLITAT(X1, mark(X2)) → SPLITAT(X1, X2)
SPLITAT(mark(X1), X2) → SPLITAT(X1, X2)
SPLITAT(ok(X1), ok(X2)) → SPLITAT(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(54) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


SPLITAT(ok(X1), ok(X2)) → SPLITAT(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
SPLITAT(x1, x2)  =  SPLITAT(x2)
mark(x1)  =  x1
ok(x1)  =  ok(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  fst(x1)
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  x2
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  afterNth(x2)
take(x1, x2)  =  take(x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, head1, tail1, sel1, proper1, top] > [cons2, pair2, u2] > [SPLITAT1, ok1, s1, 0]
[active1, head1, tail1, sel1, proper1, top] > [fst1, take1] > [SPLITAT1, ok1, s1, 0]
[active1, head1, tail1, sel1, proper1, top] > nil > [SPLITAT1, ok1, s1, 0]
[active1, head1, tail1, sel1, proper1, top] > afterNth1 > snd1 > [SPLITAT1, ok1, s1, 0]

Status:
SPLITAT1: multiset
ok1: multiset
active1: multiset
cons2: [2,1]
s1: multiset
fst1: [1]
pair2: [1,2]
snd1: [1]
0: multiset
nil: multiset
u2: [2,1]
head1: multiset
tail1: multiset
sel1: multiset
afterNth1: multiset
take1: [1]
proper1: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(55) Obligation:

Q DP problem:
The TRS P consists of the following rules:

SPLITAT(X1, mark(X2)) → SPLITAT(X1, X2)
SPLITAT(mark(X1), X2) → SPLITAT(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(56) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


SPLITAT(mark(X1), X2) → SPLITAT(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
SPLITAT(x1, x2)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, nil, take2] > s1 > u3 > [0, ok] > natsFrom1 > mark1
[active1, nil, take2] > s1 > u3 > [0, ok] > [cons2, pair2, splitAt2] > mark1
[active1, nil, take2] > sel2 > head1 > [0, ok] > natsFrom1 > mark1
[active1, nil, take2] > sel2 > head1 > [0, ok] > [cons2, pair2, splitAt2] > mark1
[active1, nil, take2] > sel2 > afterNth2 > [0, ok] > natsFrom1 > mark1
[active1, nil, take2] > sel2 > afterNth2 > [0, ok] > [cons2, pair2, splitAt2] > mark1

Status:
mark1: multiset
active1: [1]
natsFrom1: multiset
cons2: [1,2]
s1: [1]
pair2: [1,2]
splitAt2: [2,1]
0: multiset
nil: multiset
u3: multiset
head1: multiset
sel2: multiset
afterNth2: [1,2]
take2: [2,1]
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(57) Obligation:

Q DP problem:
The TRS P consists of the following rules:

SPLITAT(X1, mark(X2)) → SPLITAT(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(58) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


SPLITAT(X1, mark(X2)) → SPLITAT(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
SPLITAT(x1, x2)  =  SPLITAT(x1, x2)
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x2, x3, x4)
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, top] > sel2 > [splitAt2, afterNth2] > [cons2, pair2, nil, u4, take2, ok] > mark1 > SPLITAT2
0 > [cons2, pair2, nil, u4, take2, ok] > mark1 > SPLITAT2

Status:
SPLITAT2: multiset
mark1: [1]
active1: multiset
cons2: [2,1]
pair2: [1,2]
splitAt2: multiset
0: multiset
nil: multiset
u4: [4,3,2,1]
sel2: multiset
afterNth2: multiset
take2: multiset
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(59) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(60) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(61) TRUE

(62) Obligation:

Q DP problem:
The TRS P consists of the following rules:

SND(ok(X)) → SND(X)
SND(mark(X)) → SND(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(63) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


SND(ok(X)) → SND(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
SND(x1)  =  x1
ok(x1)  =  ok(x1)
mark(x1)  =  x1
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  x2
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [snd1, u2, proper1] > 0 > [cons2, pair2] > [splitAt1, take2] > ok1
active1 > [snd1, u2, proper1] > tail1 > ok1
active1 > [snd1, u2, proper1] > sel1 > ok1
active1 > nil > ok1
top > ok1

Status:
ok1: multiset
active1: multiset
cons2: multiset
pair2: multiset
snd1: multiset
splitAt1: multiset
0: multiset
nil: multiset
u2: multiset
tail1: [1]
sel1: multiset
take2: multiset
proper1: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(64) Obligation:

Q DP problem:
The TRS P consists of the following rules:

SND(mark(X)) → SND(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(65) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


SND(mark(X)) → SND(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
SND(x1)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > afterNth2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > afterNth2 > mark1
0 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
0 > [s1, nil, sel2, ok] > afterNth2 > mark1

Status:
mark1: multiset
active1: [1]
cons2: [1,2]
s1: [1]
pair2: [2,1]
splitAt2: [1,2]
0: multiset
nil: multiset
u2: [1,2]
head1: [1]
sel2: [2,1]
afterNth2: multiset
take2: [1,2]
proper1: [1]
ok: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(66) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(67) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(68) TRUE

(69) Obligation:

Q DP problem:
The TRS P consists of the following rules:

PAIR(X1, mark(X2)) → PAIR(X1, X2)
PAIR(mark(X1), X2) → PAIR(X1, X2)
PAIR(ok(X1), ok(X2)) → PAIR(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(70) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


PAIR(ok(X1), ok(X2)) → PAIR(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
PAIR(x1, x2)  =  PAIR(x2)
mark(x1)  =  x1
ok(x1)  =  ok(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  fst(x1)
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  x2
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  afterNth(x2)
take(x1, x2)  =  take(x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, head1, tail1, sel1, proper1, top] > [cons2, pair2, u2] > [PAIR1, ok1, s1, 0]
[active1, head1, tail1, sel1, proper1, top] > [fst1, take1] > [PAIR1, ok1, s1, 0]
[active1, head1, tail1, sel1, proper1, top] > nil > [PAIR1, ok1, s1, 0]
[active1, head1, tail1, sel1, proper1, top] > afterNth1 > snd1 > [PAIR1, ok1, s1, 0]

Status:
PAIR1: multiset
ok1: multiset
active1: multiset
cons2: [2,1]
s1: multiset
fst1: [1]
pair2: [1,2]
snd1: [1]
0: multiset
nil: multiset
u2: [2,1]
head1: multiset
tail1: multiset
sel1: multiset
afterNth1: multiset
take1: [1]
proper1: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(71) Obligation:

Q DP problem:
The TRS P consists of the following rules:

PAIR(X1, mark(X2)) → PAIR(X1, X2)
PAIR(mark(X1), X2) → PAIR(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(72) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


PAIR(mark(X1), X2) → PAIR(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
PAIR(x1, x2)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, nil, take2] > s1 > u3 > [0, ok] > natsFrom1 > mark1
[active1, nil, take2] > s1 > u3 > [0, ok] > [cons2, pair2, splitAt2] > mark1
[active1, nil, take2] > sel2 > head1 > [0, ok] > natsFrom1 > mark1
[active1, nil, take2] > sel2 > head1 > [0, ok] > [cons2, pair2, splitAt2] > mark1
[active1, nil, take2] > sel2 > afterNth2 > [0, ok] > natsFrom1 > mark1
[active1, nil, take2] > sel2 > afterNth2 > [0, ok] > [cons2, pair2, splitAt2] > mark1

Status:
mark1: multiset
active1: [1]
natsFrom1: multiset
cons2: [1,2]
s1: [1]
pair2: [1,2]
splitAt2: [2,1]
0: multiset
nil: multiset
u3: multiset
head1: multiset
sel2: multiset
afterNth2: [1,2]
take2: [2,1]
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(73) Obligation:

Q DP problem:
The TRS P consists of the following rules:

PAIR(X1, mark(X2)) → PAIR(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(74) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


PAIR(X1, mark(X2)) → PAIR(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
PAIR(x1, x2)  =  PAIR(x1, x2)
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x2, x3, x4)
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, top] > sel2 > [splitAt2, afterNth2] > [cons2, pair2, nil, u4, take2, ok] > mark1 > PAIR2
0 > [cons2, pair2, nil, u4, take2, ok] > mark1 > PAIR2

Status:
PAIR2: multiset
mark1: [1]
active1: multiset
cons2: [2,1]
pair2: [1,2]
splitAt2: multiset
0: multiset
nil: multiset
u4: [4,3,2,1]
sel2: multiset
afterNth2: multiset
take2: multiset
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(75) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(76) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(77) TRUE

(78) Obligation:

Q DP problem:
The TRS P consists of the following rules:

FST(ok(X)) → FST(X)
FST(mark(X)) → FST(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(79) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


FST(ok(X)) → FST(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
FST(x1)  =  x1
ok(x1)  =  ok(x1)
mark(x1)  =  x1
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  x2
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [snd1, u2, proper1] > 0 > [cons2, pair2] > [splitAt1, take2] > ok1
active1 > [snd1, u2, proper1] > tail1 > ok1
active1 > [snd1, u2, proper1] > sel1 > ok1
active1 > nil > ok1
top > ok1

Status:
ok1: multiset
active1: multiset
cons2: multiset
pair2: multiset
snd1: multiset
splitAt1: multiset
0: multiset
nil: multiset
u2: multiset
tail1: [1]
sel1: multiset
take2: multiset
proper1: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(80) Obligation:

Q DP problem:
The TRS P consists of the following rules:

FST(mark(X)) → FST(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(81) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


FST(mark(X)) → FST(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
FST(x1)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > afterNth2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > afterNth2 > mark1
0 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
0 > [s1, nil, sel2, ok] > afterNth2 > mark1

Status:
mark1: multiset
active1: [1]
cons2: [1,2]
s1: [1]
pair2: [2,1]
splitAt2: [1,2]
0: multiset
nil: multiset
u2: [1,2]
head1: [1]
sel2: [2,1]
afterNth2: multiset
take2: [1,2]
proper1: [1]
ok: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(82) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(83) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(84) TRUE

(85) Obligation:

Q DP problem:
The TRS P consists of the following rules:

S(ok(X)) → S(X)
S(mark(X)) → S(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(86) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


S(ok(X)) → S(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
S(x1)  =  x1
ok(x1)  =  ok(x1)
mark(x1)  =  x1
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  x2
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [snd1, u2, proper1] > 0 > [cons2, pair2] > [splitAt1, take2] > ok1
active1 > [snd1, u2, proper1] > tail1 > ok1
active1 > [snd1, u2, proper1] > sel1 > ok1
active1 > nil > ok1
top > ok1

Status:
ok1: multiset
active1: multiset
cons2: multiset
pair2: multiset
snd1: multiset
splitAt1: multiset
0: multiset
nil: multiset
u2: multiset
tail1: [1]
sel1: multiset
take2: multiset
proper1: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(87) Obligation:

Q DP problem:
The TRS P consists of the following rules:

S(mark(X)) → S(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(88) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


S(mark(X)) → S(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
S(x1)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > afterNth2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > afterNth2 > mark1
0 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
0 > [s1, nil, sel2, ok] > afterNth2 > mark1

Status:
mark1: multiset
active1: [1]
cons2: [1,2]
s1: [1]
pair2: [2,1]
splitAt2: [1,2]
0: multiset
nil: multiset
u2: [1,2]
head1: [1]
sel2: [2,1]
afterNth2: multiset
take2: [1,2]
proper1: [1]
ok: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(89) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(90) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(91) TRUE

(92) Obligation:

Q DP problem:
The TRS P consists of the following rules:

CONS(ok(X1), ok(X2)) → CONS(X1, X2)
CONS(mark(X1), X2) → CONS(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(93) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


CONS(ok(X1), ok(X2)) → CONS(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
CONS(x1, x2)  =  CONS(x2)
ok(x1)  =  ok(x1)
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
top > [0, proper1] > [active1, pair2] > u2 > cons2 > [splitAt2, afterNth2] > [ok1, natsFrom1] > mark1
top > [0, proper1] > [active1, pair2] > u2 > cons2 > [splitAt2, afterNth2] > nil
top > [0, proper1] > [active1, pair2] > sel2 > [splitAt2, afterNth2] > [ok1, natsFrom1] > mark1
top > [0, proper1] > [active1, pair2] > sel2 > [splitAt2, afterNth2] > nil
top > [0, proper1] > [active1, pair2] > take2 > [splitAt2, afterNth2] > [ok1, natsFrom1] > mark1
top > [0, proper1] > [active1, pair2] > take2 > [splitAt2, afterNth2] > nil

Status:
CONS1: multiset
ok1: [1]
mark1: [1]
active1: [1]
natsFrom1: [1]
cons2: multiset
pair2: [1,2]
splitAt2: [2,1]
0: multiset
nil: multiset
u2: multiset
sel2: [2,1]
afterNth2: [1,2]
take2: multiset
proper1: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(94) Obligation:

Q DP problem:
The TRS P consists of the following rules:

CONS(mark(X1), X2) → CONS(X1, X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(95) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


CONS(mark(X1), X2) → CONS(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
CONS(x1, x2)  =  CONS(x1, x2)
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3, x4)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
CONS2 > [mark1, head1, ok]
0 > pair2 > cons2 > [mark1, head1, ok]
0 > nil > [mark1, head1, ok]
top > [active1, afterNth2] > s1 > [splitAt2, u3] > cons2 > [mark1, head1, ok]
top > [active1, afterNth2] > s1 > [splitAt2, u3] > nil > [mark1, head1, ok]
top > [active1, afterNth2] > pair2 > cons2 > [mark1, head1, ok]
top > [active1, afterNth2] > snd1 > [mark1, head1, ok]
top > [active1, afterNth2] > sel2 > [mark1, head1, ok]
top > [active1, afterNth2] > take2 > [mark1, head1, ok]

Status:
CONS2: [1,2]
mark1: [1]
active1: [1]
cons2: [1,2]
s1: multiset
pair2: [2,1]
snd1: multiset
splitAt2: [1,2]
0: multiset
nil: multiset
u3: multiset
head1: [1]
sel2: multiset
afterNth2: [2,1]
take2: multiset
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(96) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(97) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(98) TRUE

(99) Obligation:

Q DP problem:
The TRS P consists of the following rules:

NATSFROM(ok(X)) → NATSFROM(X)
NATSFROM(mark(X)) → NATSFROM(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(100) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


NATSFROM(ok(X)) → NATSFROM(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
NATSFROM(x1)  =  x1
ok(x1)  =  ok(x1)
mark(x1)  =  x1
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  x1
tail(x1)  =  tail(x1)
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  x2
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > [snd1, u2, proper1] > 0 > [cons2, pair2] > [splitAt1, take2] > ok1
active1 > [snd1, u2, proper1] > tail1 > ok1
active1 > [snd1, u2, proper1] > sel1 > ok1
active1 > nil > ok1
top > ok1

Status:
ok1: multiset
active1: multiset
cons2: multiset
pair2: multiset
snd1: multiset
splitAt1: multiset
0: multiset
nil: multiset
u2: multiset
tail1: [1]
sel1: multiset
take2: multiset
proper1: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(101) Obligation:

Q DP problem:
The TRS P consists of the following rules:

NATSFROM(mark(X)) → NATSFROM(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(102) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


NATSFROM(mark(X)) → NATSFROM(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
NATSFROM(x1)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
s(x1)  =  s(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > [cons2, u2] > [s1, nil, sel2, ok] > afterNth2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
[active1, take2, proper1, top] > head1 > [s1, nil, sel2, ok] > afterNth2 > mark1
0 > [s1, nil, sel2, ok] > splitAt2 > pair2 > mark1
0 > [s1, nil, sel2, ok] > afterNth2 > mark1

Status:
mark1: multiset
active1: [1]
cons2: [1,2]
s1: [1]
pair2: [2,1]
splitAt2: [1,2]
0: multiset
nil: multiset
u2: [1,2]
head1: [1]
sel2: [2,1]
afterNth2: multiset
take2: [1,2]
proper1: [1]
ok: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(103) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(104) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(105) TRUE

(106) Obligation:

Q DP problem:
The TRS P consists of the following rules:

PROPER(cons(X1, X2)) → PROPER(X1)
PROPER(natsFrom(X)) → PROPER(X)
PROPER(cons(X1, X2)) → PROPER(X2)
PROPER(s(X)) → PROPER(X)
PROPER(fst(X)) → PROPER(X)
PROPER(pair(X1, X2)) → PROPER(X1)
PROPER(pair(X1, X2)) → PROPER(X2)
PROPER(snd(X)) → PROPER(X)
PROPER(splitAt(X1, X2)) → PROPER(X1)
PROPER(splitAt(X1, X2)) → PROPER(X2)
PROPER(u(X1, X2, X3, X4)) → PROPER(X1)
PROPER(u(X1, X2, X3, X4)) → PROPER(X2)
PROPER(u(X1, X2, X3, X4)) → PROPER(X3)
PROPER(u(X1, X2, X3, X4)) → PROPER(X4)
PROPER(head(X)) → PROPER(X)
PROPER(tail(X)) → PROPER(X)
PROPER(sel(X1, X2)) → PROPER(X1)
PROPER(sel(X1, X2)) → PROPER(X2)
PROPER(afterNth(X1, X2)) → PROPER(X1)
PROPER(afterNth(X1, X2)) → PROPER(X2)
PROPER(take(X1, X2)) → PROPER(X1)
PROPER(take(X1, X2)) → PROPER(X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(107) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


PROPER(cons(X1, X2)) → PROPER(X1)
PROPER(cons(X1, X2)) → PROPER(X2)
PROPER(pair(X1, X2)) → PROPER(X1)
PROPER(pair(X1, X2)) → PROPER(X2)
PROPER(splitAt(X1, X2)) → PROPER(X1)
PROPER(splitAt(X1, X2)) → PROPER(X2)
PROPER(u(X1, X2, X3, X4)) → PROPER(X1)
PROPER(u(X1, X2, X3, X4)) → PROPER(X2)
PROPER(u(X1, X2, X3, X4)) → PROPER(X3)
PROPER(u(X1, X2, X3, X4)) → PROPER(X4)
PROPER(sel(X1, X2)) → PROPER(X1)
PROPER(sel(X1, X2)) → PROPER(X2)
PROPER(afterNth(X1, X2)) → PROPER(X1)
PROPER(afterNth(X1, X2)) → PROPER(X2)
PROPER(take(X1, X2)) → PROPER(X1)
PROPER(take(X1, X2)) → PROPER(X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
PROPER(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
natsFrom(x1)  =  x1
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
u(x1, x2, x3, x4)  =  u(x1, x2, x3, x4)
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
active(x1)  =  active(x1)
mark(x1)  =  mark
0  =  0
nil  =  nil
proper(x1)  =  proper(x1)
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
active1 > sel2 > [splitAt2, afterNth2, take2, mark] > [cons2, pair2, u4] > [nil, ok] > top
proper1 > sel2 > [splitAt2, afterNth2, take2, mark] > [cons2, pair2, u4] > [nil, ok] > top
proper1 > 0

Status:
cons2: [2,1]
pair2: [1,2]
splitAt2: multiset
u4: multiset
sel2: multiset
afterNth2: multiset
take2: multiset
active1: [1]
mark: multiset
0: multiset
nil: multiset
proper1: multiset
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(108) Obligation:

Q DP problem:
The TRS P consists of the following rules:

PROPER(natsFrom(X)) → PROPER(X)
PROPER(s(X)) → PROPER(X)
PROPER(fst(X)) → PROPER(X)
PROPER(snd(X)) → PROPER(X)
PROPER(head(X)) → PROPER(X)
PROPER(tail(X)) → PROPER(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(109) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


PROPER(fst(X)) → PROPER(X)
PROPER(head(X)) → PROPER(X)
PROPER(tail(X)) → PROPER(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
PROPER(x1)  =  PROPER(x1)
natsFrom(x1)  =  x1
s(x1)  =  x1
fst(x1)  =  fst(x1)
snd(x1)  =  x1
head(x1)  =  head(x1)
tail(x1)  =  tail(x1)
active(x1)  =  x1
mark(x1)  =  mark
cons(x1, x2)  =  cons(x1, x2)
pair(x1, x2)  =  pair(x1, x2)
splitAt(x1, x2)  =  splitAt(x1)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u
sel(x1, x2)  =  x2
afterNth(x1, x2)  =  x2
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  x1
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
0 > nil > [PROPER1, fst1, head1, tail1, mark, cons2, pair2, u]
top > [splitAt1, take2, proper1] > [PROPER1, fst1, head1, tail1, mark, cons2, pair2, u]

Status:
PROPER1: multiset
fst1: multiset
head1: multiset
tail1: multiset
mark: multiset
cons2: multiset
pair2: multiset
splitAt1: multiset
0: multiset
nil: multiset
u: multiset
take2: multiset
proper1: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(110) Obligation:

Q DP problem:
The TRS P consists of the following rules:

PROPER(natsFrom(X)) → PROPER(X)
PROPER(s(X)) → PROPER(X)
PROPER(snd(X)) → PROPER(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(111) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


PROPER(natsFrom(X)) → PROPER(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
PROPER(x1)  =  PROPER(x1)
natsFrom(x1)  =  natsFrom(x1)
s(x1)  =  x1
snd(x1)  =  x1
active(x1)  =  active(x1)
mark(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  x1
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[active1, take2, proper1] > [sel2, afterNth2] > splitAt1 > pair2 > cons2 > u2 > [PROPER1, natsFrom1]
[active1, take2, proper1] > [sel2, afterNth2] > splitAt1 > nil > [PROPER1, natsFrom1]
0 > pair2 > cons2 > u2 > [PROPER1, natsFrom1]
0 > nil > [PROPER1, natsFrom1]
top > [PROPER1, natsFrom1]

Status:
PROPER1: [1]
natsFrom1: multiset
active1: [1]
cons2: [1,2]
pair2: multiset
splitAt1: multiset
0: multiset
nil: multiset
u2: multiset
sel2: multiset
afterNth2: multiset
take2: [2,1]
proper1: [1]
top: []


The following usable rules [FROCOS05] were oriented:

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))

(112) Obligation:

Q DP problem:
The TRS P consists of the following rules:

PROPER(s(X)) → PROPER(X)
PROPER(snd(X)) → PROPER(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(113) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


PROPER(snd(X)) → PROPER(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
PROPER(x1)  =  PROPER(x1)
s(x1)  =  x1
snd(x1)  =  snd(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom
mark(x1)  =  mark
cons(x1, x2)  =  cons(x1)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1)
splitAt(x1, x2)  =  splitAt(x1, x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  x1
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
natsFrom > [active1, head1, top] > [cons1, pair1] > u > [mark, take2] > snd1
natsFrom > [active1, head1, top] > [cons1, pair1] > u > [mark, take2] > splitAt2
natsFrom > [active1, head1, top] > [cons1, pair1] > u > [mark, take2] > sel2
natsFrom > [active1, head1, top] > nil
natsFrom > [active1, head1, top] > afterNth2 > [mark, take2] > snd1
natsFrom > [active1, head1, top] > afterNth2 > [mark, take2] > splitAt2
natsFrom > [active1, head1, top] > afterNth2 > [mark, take2] > sel2

Status:
PROPER1: multiset
snd1: [1]
active1: multiset
natsFrom: multiset
mark: []
cons1: [1]
pair1: multiset
splitAt2: multiset
0: multiset
nil: multiset
u: []
head1: multiset
sel2: [2,1]
afterNth2: [2,1]
take2: [1,2]
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(114) Obligation:

Q DP problem:
The TRS P consists of the following rules:

PROPER(s(X)) → PROPER(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(115) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


PROPER(s(X)) → PROPER(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
PROPER(x1)  =  x1
s(x1)  =  s(x1)
active(x1)  =  active(x1)
natsFrom(x1)  =  natsFrom(x1)
mark(x1)  =  x1
cons(x1, x2)  =  cons(x1, x2)
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  snd(x1)
splitAt(x1, x2)  =  splitAt(x2)
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x1, x3)
head(x1)  =  head(x1)
tail(x1)  =  x1
sel(x1, x2)  =  sel(x2)
afterNth(x1, x2)  =  afterNth(x2)
take(x1, x2)  =  x2
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
0 > [active1, natsFrom1, snd1, nil, head1] > [cons2, splitAt1, sel1, afterNth1] > [s1, pair2, u2, ok]
top > [active1, natsFrom1, snd1, nil, head1] > [cons2, splitAt1, sel1, afterNth1] > [s1, pair2, u2, ok]

Status:
s1: multiset
active1: [1]
natsFrom1: [1]
cons2: [1,2]
pair2: multiset
snd1: [1]
splitAt1: multiset
0: multiset
nil: multiset
u2: multiset
head1: [1]
sel1: multiset
afterNth1: multiset
ok: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(116) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(117) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(118) TRUE

(119) Obligation:

Q DP problem:
The TRS P consists of the following rules:

ACTIVE(cons(X1, X2)) → ACTIVE(X1)
ACTIVE(natsFrom(X)) → ACTIVE(X)
ACTIVE(s(X)) → ACTIVE(X)
ACTIVE(fst(X)) → ACTIVE(X)
ACTIVE(pair(X1, X2)) → ACTIVE(X1)
ACTIVE(pair(X1, X2)) → ACTIVE(X2)
ACTIVE(snd(X)) → ACTIVE(X)
ACTIVE(splitAt(X1, X2)) → ACTIVE(X1)
ACTIVE(splitAt(X1, X2)) → ACTIVE(X2)
ACTIVE(u(X1, X2, X3, X4)) → ACTIVE(X1)
ACTIVE(head(X)) → ACTIVE(X)
ACTIVE(tail(X)) → ACTIVE(X)
ACTIVE(sel(X1, X2)) → ACTIVE(X1)
ACTIVE(sel(X1, X2)) → ACTIVE(X2)
ACTIVE(afterNth(X1, X2)) → ACTIVE(X1)
ACTIVE(afterNth(X1, X2)) → ACTIVE(X2)
ACTIVE(take(X1, X2)) → ACTIVE(X1)
ACTIVE(take(X1, X2)) → ACTIVE(X2)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(120) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(pair(X1, X2)) → ACTIVE(X1)
ACTIVE(pair(X1, X2)) → ACTIVE(X2)
ACTIVE(splitAt(X1, X2)) → ACTIVE(X1)
ACTIVE(splitAt(X1, X2)) → ACTIVE(X2)
ACTIVE(sel(X1, X2)) → ACTIVE(X1)
ACTIVE(sel(X1, X2)) → ACTIVE(X2)
ACTIVE(afterNth(X1, X2)) → ACTIVE(X1)
ACTIVE(afterNth(X1, X2)) → ACTIVE(X2)
ACTIVE(take(X1, X2)) → ACTIVE(X1)
ACTIVE(take(X1, X2)) → ACTIVE(X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ACTIVE(x1)  =  x1
cons(x1, x2)  =  x1
natsFrom(x1)  =  x1
s(x1)  =  x1
fst(x1)  =  x1
pair(x1, x2)  =  pair(x1, x2)
snd(x1)  =  x1
splitAt(x1, x2)  =  splitAt(x1, x2)
u(x1, x2, x3, x4)  =  x1
head(x1)  =  x1
tail(x1)  =  x1
sel(x1, x2)  =  sel(x1, x2)
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
active(x1)  =  x1
mark(x1)  =  mark
0  =  0
nil  =  nil
proper(x1)  =  proper(x1)
ok(x1)  =  x1
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[splitAt2, sel2, nil, proper1, top] > afterNth2 > [pair2, mark, 0]
[splitAt2, sel2, nil, proper1, top] > take2 > [pair2, mark, 0]

Status:
pair2: [2,1]
splitAt2: [2,1]
sel2: [2,1]
afterNth2: [1,2]
take2: [1,2]
mark: multiset
0: multiset
nil: multiset
proper1: [1]
top: []


The following usable rules [FROCOS05] were oriented:

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))

(121) Obligation:

Q DP problem:
The TRS P consists of the following rules:

ACTIVE(cons(X1, X2)) → ACTIVE(X1)
ACTIVE(natsFrom(X)) → ACTIVE(X)
ACTIVE(s(X)) → ACTIVE(X)
ACTIVE(fst(X)) → ACTIVE(X)
ACTIVE(snd(X)) → ACTIVE(X)
ACTIVE(u(X1, X2, X3, X4)) → ACTIVE(X1)
ACTIVE(head(X)) → ACTIVE(X)
ACTIVE(tail(X)) → ACTIVE(X)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(122) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(natsFrom(X)) → ACTIVE(X)
ACTIVE(s(X)) → ACTIVE(X)
ACTIVE(fst(X)) → ACTIVE(X)
ACTIVE(head(X)) → ACTIVE(X)
ACTIVE(tail(X)) → ACTIVE(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ACTIVE(x1)  =  ACTIVE(x1)
cons(x1, x2)  =  x1
natsFrom(x1)  =  natsFrom(x1)
s(x1)  =  s(x1)
fst(x1)  =  fst(x1)
snd(x1)  =  x1
u(x1, x2, x3, x4)  =  x1
head(x1)  =  head(x1)
tail(x1)  =  tail(x1)
active(x1)  =  active(x1)
mark(x1)  =  mark
pair(x1, x2)  =  pair(x1)
splitAt(x1, x2)  =  x2
0  =  0
nil  =  nil
sel(x1, x2)  =  x2
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  proper(x1)
ok(x1)  =  x1
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
ACTIVE1 > [tail1, mark]
[active1, top] > [natsFrom1, head1, afterNth2, proper1] > s1 > [tail1, mark]
[active1, top] > [natsFrom1, head1, afterNth2, proper1] > [fst1, take2] > [tail1, mark]
[active1, top] > [natsFrom1, head1, afterNth2, proper1] > pair1 > [tail1, mark]
[active1, top] > [natsFrom1, head1, afterNth2, proper1] > 0 > nil > [tail1, mark]

Status:
ACTIVE1: [1]
natsFrom1: multiset
s1: multiset
fst1: multiset
head1: multiset
tail1: multiset
active1: [1]
mark: []
pair1: multiset
0: multiset
nil: multiset
afterNth2: multiset
take2: [2,1]
proper1: multiset
top: multiset


The following usable rules [FROCOS05] were oriented:

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))

(123) Obligation:

Q DP problem:
The TRS P consists of the following rules:

ACTIVE(cons(X1, X2)) → ACTIVE(X1)
ACTIVE(snd(X)) → ACTIVE(X)
ACTIVE(u(X1, X2, X3, X4)) → ACTIVE(X1)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(124) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(snd(X)) → ACTIVE(X)
ACTIVE(u(X1, X2, X3, X4)) → ACTIVE(X1)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ACTIVE(x1)  =  ACTIVE(x1)
cons(x1, x2)  =  x1
snd(x1)  =  snd(x1)
u(x1, x2, x3, x4)  =  u(x1)
active(x1)  =  x1
natsFrom(x1)  =  x1
mark(x1)  =  mark
s(x1)  =  s
fst(x1)  =  x1
pair(x1, x2)  =  x1
splitAt(x1, x2)  =  x2
0  =  0
nil  =  nil
head(x1)  =  x1
tail(x1)  =  tail
sel(x1, x2)  =  x1
afterNth(x1, x2)  =  afterNth(x1, x2)
take(x1, x2)  =  x2
proper(x1)  =  x1
ok(x1)  =  x1
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
[ACTIVE1, snd1, u1] > [mark, s]
0 > [mark, s]
nil > [mark, s]
tail > [mark, s]
afterNth2 > [mark, s]
top > [mark, s]

Status:
ACTIVE1: multiset
snd1: [1]
u1: [1]
mark: multiset
s: multiset
0: multiset
nil: multiset
tail: []
afterNth2: [1,2]
top: []


The following usable rules [FROCOS05] were oriented:

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))

(125) Obligation:

Q DP problem:
The TRS P consists of the following rules:

ACTIVE(cons(X1, X2)) → ACTIVE(X1)

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(126) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(cons(X1, X2)) → ACTIVE(X1)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ACTIVE(x1)  =  ACTIVE(x1)
cons(x1, x2)  =  cons(x1)
active(x1)  =  x1
natsFrom(x1)  =  natsFrom
mark(x1)  =  mark
s(x1)  =  x1
fst(x1)  =  fst(x1)
pair(x1, x2)  =  x2
snd(x1)  =  snd
splitAt(x1, x2)  =  splitAt
0  =  0
nil  =  nil
u(x1, x2, x3, x4)  =  u(x4)
head(x1)  =  x1
tail(x1)  =  tail
sel(x1, x2)  =  x2
afterNth(x1, x2)  =  afterNth
take(x1, x2)  =  take(x1, x2)
proper(x1)  =  x1
ok(x1)  =  ok
top(x1)  =  top

Recursive path order with status [RPO].
Quasi-Precedence:
ACTIVE1 > mark
cons1 > u1 > [nil, tail, afterNth, ok] > fst1 > mark
natsFrom > [nil, tail, afterNth, ok] > fst1 > mark
snd > [nil, tail, afterNth, ok] > fst1 > mark
splitAt > u1 > [nil, tail, afterNth, ok] > fst1 > mark
0 > [nil, tail, afterNth, ok] > fst1 > mark
take2 > [nil, tail, afterNth, ok] > fst1 > mark
top > mark

Status:
ACTIVE1: [1]
cons1: multiset
natsFrom: multiset
mark: []
fst1: [1]
snd: multiset
splitAt: multiset
0: multiset
nil: multiset
u1: multiset
tail: multiset
afterNth: multiset
take2: [2,1]
ok: multiset
top: []


The following usable rules [FROCOS05] were oriented:

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))

(127) Obligation:

Q DP problem:
P is empty.
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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(128) PisEmptyProof (EQUIVALENT transformation)

The TRS P is empty. Hence, there is no (P,Q,R) chain.

(129) TRUE

(130) Obligation:

Q DP problem:
The TRS P consists of the following rules:

TOP(ok(X)) → TOP(active(X))
TOP(mark(X)) → TOP(proper(X))

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))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.