(0) Obligation:

Q restricted rewrite system:
The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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(and(tt, T)) → MARK(T)
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
ACTIVE(isNatIList(IL)) → ISNATLIST(IL)
ACTIVE(isNat(0)) → MARK(tt)
ACTIVE(isNat(s(N))) → MARK(isNat(N))
ACTIVE(isNat(s(N))) → ISNAT(N)
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
ACTIVE(isNat(length(L))) → ISNATLIST(L)
ACTIVE(isNatIList(zeros)) → MARK(tt)
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
ACTIVE(isNatIList(cons(N, IL))) → AND(isNat(N), isNatIList(IL))
ACTIVE(isNatIList(cons(N, IL))) → ISNAT(N)
ACTIVE(isNatIList(cons(N, IL))) → ISNATILIST(IL)
ACTIVE(isNatList(nil)) → MARK(tt)
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
ACTIVE(isNatList(cons(N, L))) → AND(isNat(N), isNatList(L))
ACTIVE(isNatList(cons(N, L))) → ISNAT(N)
ACTIVE(isNatList(cons(N, L))) → ISNATLIST(L)
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
ACTIVE(isNatList(take(N, IL))) → AND(isNat(N), isNatIList(IL))
ACTIVE(isNatList(take(N, IL))) → ISNAT(N)
ACTIVE(isNatList(take(N, IL))) → ISNATILIST(IL)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(zeros) → CONS(0, zeros)
ACTIVE(take(0, IL)) → MARK(uTake1(isNatIList(IL)))
ACTIVE(take(0, IL)) → UTAKE1(isNatIList(IL))
ACTIVE(take(0, IL)) → ISNATILIST(IL)
ACTIVE(uTake1(tt)) → MARK(nil)
ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
ACTIVE(take(s(M), cons(N, IL))) → UTAKE2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)
ACTIVE(take(s(M), cons(N, IL))) → AND(isNat(M), and(isNat(N), isNatIList(IL)))
ACTIVE(take(s(M), cons(N, IL))) → ISNAT(M)
ACTIVE(take(s(M), cons(N, IL))) → AND(isNat(N), isNatIList(IL))
ACTIVE(take(s(M), cons(N, IL))) → ISNAT(N)
ACTIVE(take(s(M), cons(N, IL))) → ISNATILIST(IL)
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
ACTIVE(uTake2(tt, M, N, IL)) → CONS(N, take(M, IL))
ACTIVE(uTake2(tt, M, N, IL)) → TAKE(M, IL)
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(length(cons(N, L))) → ULENGTH(and(isNat(N), isNatList(L)), L)
ACTIVE(length(cons(N, L))) → AND(isNat(N), isNatList(L))
ACTIVE(length(cons(N, L))) → ISNAT(N)
ACTIVE(length(cons(N, L))) → ISNATLIST(L)
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))
ACTIVE(uLength(tt, L)) → S(length(L))
ACTIVE(uLength(tt, L)) → LENGTH(L)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → AND(mark(X1), mark(X2))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(tt) → ACTIVE(tt)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
MARK(isNat(X)) → ACTIVE(isNat(X))
MARK(0) → ACTIVE(0)
MARK(s(X)) → ACTIVE(s(mark(X)))
MARK(s(X)) → S(mark(X))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(length(X)) → LENGTH(mark(X))
MARK(length(X)) → MARK(X)
MARK(zeros) → ACTIVE(zeros)
MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
MARK(cons(X1, X2)) → CONS(mark(X1), X2)
MARK(cons(X1, X2)) → MARK(X1)
MARK(nil) → ACTIVE(nil)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
MARK(take(X1, X2)) → TAKE(mark(X1), mark(X2))
MARK(take(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → MARK(X2)
MARK(uTake1(X)) → ACTIVE(uTake1(mark(X)))
MARK(uTake1(X)) → UTAKE1(mark(X))
MARK(uTake1(X)) → MARK(X)
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
MARK(uTake2(X1, X2, X3, X4)) → UTAKE2(mark(X1), X2, X3, X4)
MARK(uTake2(X1, X2, X3, X4)) → MARK(X1)
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
MARK(uLength(X1, X2)) → ULENGTH(mark(X1), X2)
MARK(uLength(X1, X2)) → MARK(X1)
AND(mark(X1), X2) → AND(X1, X2)
AND(X1, mark(X2)) → AND(X1, X2)
AND(active(X1), X2) → AND(X1, X2)
AND(X1, active(X2)) → AND(X1, X2)
ISNATILIST(mark(X)) → ISNATILIST(X)
ISNATILIST(active(X)) → ISNATILIST(X)
ISNATLIST(mark(X)) → ISNATLIST(X)
ISNATLIST(active(X)) → ISNATLIST(X)
ISNAT(mark(X)) → ISNAT(X)
ISNAT(active(X)) → ISNAT(X)
S(mark(X)) → S(X)
S(active(X)) → S(X)
LENGTH(mark(X)) → LENGTH(X)
LENGTH(active(X)) → LENGTH(X)
CONS(mark(X1), X2) → CONS(X1, X2)
CONS(X1, mark(X2)) → CONS(X1, X2)
CONS(active(X1), X2) → CONS(X1, X2)
CONS(X1, active(X2)) → CONS(X1, X2)
TAKE(mark(X1), X2) → TAKE(X1, X2)
TAKE(X1, mark(X2)) → TAKE(X1, X2)
TAKE(active(X1), X2) → TAKE(X1, X2)
TAKE(X1, active(X2)) → TAKE(X1, X2)
UTAKE1(mark(X)) → UTAKE1(X)
UTAKE1(active(X)) → UTAKE1(X)
UTAKE2(mark(X1), X2, X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, mark(X2), X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, mark(X3), X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, X3, mark(X4)) → UTAKE2(X1, X2, X3, X4)
UTAKE2(active(X1), X2, X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, active(X2), X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, active(X3), X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, X3, active(X4)) → UTAKE2(X1, X2, X3, X4)
ULENGTH(mark(X1), X2) → ULENGTH(X1, X2)
ULENGTH(X1, mark(X2)) → ULENGTH(X1, X2)
ULENGTH(active(X1), X2) → ULENGTH(X1, X2)
ULENGTH(X1, active(X2)) → ULENGTH(X1, X2)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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 12 SCCs with 44 less nodes.

(4) Complex Obligation (AND)

(5) Obligation:

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

ULENGTH(X1, mark(X2)) → ULENGTH(X1, X2)
ULENGTH(mark(X1), X2) → ULENGTH(X1, X2)
ULENGTH(active(X1), X2) → ULENGTH(X1, X2)
ULENGTH(X1, active(X2)) → ULENGTH(X1, X2)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(6) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(7) Obligation:

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

ULENGTH(X1, mark(X2)) → ULENGTH(X1, X2)
ULENGTH(mark(X1), X2) → ULENGTH(X1, X2)
ULENGTH(active(X1), X2) → ULENGTH(X1, X2)
ULENGTH(X1, active(X2)) → ULENGTH(X1, X2)

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

(8) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • ULENGTH(X1, mark(X2)) → ULENGTH(X1, X2)
    The graph contains the following edges 1 >= 1, 2 > 2

  • ULENGTH(mark(X1), X2) → ULENGTH(X1, X2)
    The graph contains the following edges 1 > 1, 2 >= 2

  • ULENGTH(active(X1), X2) → ULENGTH(X1, X2)
    The graph contains the following edges 1 > 1, 2 >= 2

  • ULENGTH(X1, active(X2)) → ULENGTH(X1, X2)
    The graph contains the following edges 1 >= 1, 2 > 2

(9) TRUE

(10) Obligation:

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

UTAKE2(X1, mark(X2), X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(mark(X1), X2, X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, mark(X3), X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, X3, mark(X4)) → UTAKE2(X1, X2, X3, X4)
UTAKE2(active(X1), X2, X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, active(X2), X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, active(X3), X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, X3, active(X4)) → UTAKE2(X1, X2, X3, X4)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(11) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(12) Obligation:

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

UTAKE2(X1, mark(X2), X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(mark(X1), X2, X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, mark(X3), X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, X3, mark(X4)) → UTAKE2(X1, X2, X3, X4)
UTAKE2(active(X1), X2, X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, active(X2), X3, X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, active(X3), X4) → UTAKE2(X1, X2, X3, X4)
UTAKE2(X1, X2, X3, active(X4)) → UTAKE2(X1, X2, X3, X4)

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

(13) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • UTAKE2(X1, mark(X2), X3, X4) → UTAKE2(X1, X2, X3, X4)
    The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4

  • UTAKE2(mark(X1), X2, X3, X4) → UTAKE2(X1, X2, X3, X4)
    The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4

  • UTAKE2(X1, X2, mark(X3), X4) → UTAKE2(X1, X2, X3, X4)
    The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4

  • UTAKE2(X1, X2, X3, mark(X4)) → UTAKE2(X1, X2, X3, X4)
    The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4

  • UTAKE2(active(X1), X2, X3, X4) → UTAKE2(X1, X2, X3, X4)
    The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4

  • UTAKE2(X1, active(X2), X3, X4) → UTAKE2(X1, X2, X3, X4)
    The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4

  • UTAKE2(X1, X2, active(X3), X4) → UTAKE2(X1, X2, X3, X4)
    The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4

  • UTAKE2(X1, X2, X3, active(X4)) → UTAKE2(X1, X2, X3, X4)
    The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4

(14) TRUE

(15) Obligation:

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

UTAKE1(active(X)) → UTAKE1(X)
UTAKE1(mark(X)) → UTAKE1(X)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(16) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(17) Obligation:

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

UTAKE1(active(X)) → UTAKE1(X)
UTAKE1(mark(X)) → UTAKE1(X)

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

(18) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • UTAKE1(active(X)) → UTAKE1(X)
    The graph contains the following edges 1 > 1

  • UTAKE1(mark(X)) → UTAKE1(X)
    The graph contains the following edges 1 > 1

(19) TRUE

(20) 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(active(X1), X2) → TAKE(X1, X2)
TAKE(X1, active(X2)) → TAKE(X1, X2)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(21) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(22) 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(active(X1), X2) → TAKE(X1, X2)
TAKE(X1, active(X2)) → TAKE(X1, X2)

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

(23) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • TAKE(X1, mark(X2)) → TAKE(X1, X2)
    The graph contains the following edges 1 >= 1, 2 > 2

  • TAKE(mark(X1), X2) → TAKE(X1, X2)
    The graph contains the following edges 1 > 1, 2 >= 2

  • TAKE(active(X1), X2) → TAKE(X1, X2)
    The graph contains the following edges 1 > 1, 2 >= 2

  • TAKE(X1, active(X2)) → TAKE(X1, X2)
    The graph contains the following edges 1 >= 1, 2 > 2

(24) TRUE

(25) Obligation:

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

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

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(26) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(27) Obligation:

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

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

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

(28) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • CONS(X1, mark(X2)) → CONS(X1, X2)
    The graph contains the following edges 1 >= 1, 2 > 2

  • CONS(mark(X1), X2) → CONS(X1, X2)
    The graph contains the following edges 1 > 1, 2 >= 2

  • CONS(active(X1), X2) → CONS(X1, X2)
    The graph contains the following edges 1 > 1, 2 >= 2

  • CONS(X1, active(X2)) → CONS(X1, X2)
    The graph contains the following edges 1 >= 1, 2 > 2

(29) TRUE

(30) Obligation:

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

LENGTH(active(X)) → LENGTH(X)
LENGTH(mark(X)) → LENGTH(X)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(31) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(32) Obligation:

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

LENGTH(active(X)) → LENGTH(X)
LENGTH(mark(X)) → LENGTH(X)

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

(33) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • LENGTH(active(X)) → LENGTH(X)
    The graph contains the following edges 1 > 1

  • LENGTH(mark(X)) → LENGTH(X)
    The graph contains the following edges 1 > 1

(34) TRUE

(35) Obligation:

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

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

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(36) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(37) Obligation:

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

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

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

(38) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • S(active(X)) → S(X)
    The graph contains the following edges 1 > 1

  • S(mark(X)) → S(X)
    The graph contains the following edges 1 > 1

(39) TRUE

(40) Obligation:

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

ISNAT(active(X)) → ISNAT(X)
ISNAT(mark(X)) → ISNAT(X)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(41) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(42) Obligation:

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

ISNAT(active(X)) → ISNAT(X)
ISNAT(mark(X)) → ISNAT(X)

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

(43) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • ISNAT(active(X)) → ISNAT(X)
    The graph contains the following edges 1 > 1

  • ISNAT(mark(X)) → ISNAT(X)
    The graph contains the following edges 1 > 1

(44) TRUE

(45) Obligation:

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

ISNATLIST(active(X)) → ISNATLIST(X)
ISNATLIST(mark(X)) → ISNATLIST(X)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(46) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(47) Obligation:

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

ISNATLIST(active(X)) → ISNATLIST(X)
ISNATLIST(mark(X)) → ISNATLIST(X)

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

(48) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • ISNATLIST(active(X)) → ISNATLIST(X)
    The graph contains the following edges 1 > 1

  • ISNATLIST(mark(X)) → ISNATLIST(X)
    The graph contains the following edges 1 > 1

(49) TRUE

(50) Obligation:

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

ISNATILIST(active(X)) → ISNATILIST(X)
ISNATILIST(mark(X)) → ISNATILIST(X)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(51) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(52) Obligation:

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

ISNATILIST(active(X)) → ISNATILIST(X)
ISNATILIST(mark(X)) → ISNATILIST(X)

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

(53) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • ISNATILIST(active(X)) → ISNATILIST(X)
    The graph contains the following edges 1 > 1

  • ISNATILIST(mark(X)) → ISNATILIST(X)
    The graph contains the following edges 1 > 1

(54) TRUE

(55) Obligation:

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

AND(X1, mark(X2)) → AND(X1, X2)
AND(mark(X1), X2) → AND(X1, X2)
AND(active(X1), X2) → AND(X1, X2)
AND(X1, active(X2)) → AND(X1, X2)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(56) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(57) Obligation:

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

AND(X1, mark(X2)) → AND(X1, X2)
AND(mark(X1), X2) → AND(X1, X2)
AND(active(X1), X2) → AND(X1, X2)
AND(X1, active(X2)) → AND(X1, X2)

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

(58) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem.

From the DPs we obtained the following set of size-change graphs:

  • AND(X1, mark(X2)) → AND(X1, X2)
    The graph contains the following edges 1 >= 1, 2 > 2

  • AND(mark(X1), X2) → AND(X1, X2)
    The graph contains the following edges 1 > 1, 2 >= 2

  • AND(active(X1), X2) → AND(X1, X2)
    The graph contains the following edges 1 > 1, 2 >= 2

  • AND(X1, active(X2)) → AND(X1, X2)
    The graph contains the following edges 1 >= 1, 2 > 2

(59) TRUE

(60) Obligation:

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

MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
MARK(s(X)) → ACTIVE(s(mark(X)))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(length(X)) → MARK(X)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(take(0, IL)) → MARK(uTake1(isNatIList(IL)))
MARK(take(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → MARK(X2)
MARK(uTake1(X)) → ACTIVE(uTake1(mark(X)))
ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
MARK(uTake1(X)) → MARK(X)
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
MARK(uTake2(X1, X2, X3, X4)) → MARK(X1)
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
MARK(uLength(X1, X2)) → MARK(X1)
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(61) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(s(X)) → ACTIVE(s(mark(X)))
MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
MARK(uTake1(X)) → ACTIVE(uTake1(mark(X)))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = 1   
POL(active(x1)) = 0   
POL(and(x1, x2)) = 1   
POL(cons(x1, x2)) = 0   
POL(isNat(x1)) = 1   
POL(isNatIList(x1)) = 1   
POL(isNatList(x1)) = 1   
POL(length(x1)) = 1   
POL(mark(x1)) = 0   
POL(nil) = 0   
POL(s(x1)) = 0   
POL(take(x1, x2)) = 1   
POL(tt) = 0   
POL(uLength(x1, x2)) = 1   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 1   
POL(zeros) = 1   

The following usable rules [FROCOS05] were oriented:

uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
s(active(X)) → s(X)
s(mark(X)) → s(X)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)

(62) Obligation:

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

MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(length(X)) → MARK(X)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(take(0, IL)) → MARK(uTake1(isNatIList(IL)))
MARK(take(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → MARK(X2)
ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
MARK(uTake1(X)) → MARK(X)
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
MARK(uTake2(X1, X2, X3, X4)) → MARK(X1)
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
MARK(uLength(X1, X2)) → MARK(X1)
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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.


ACTIVE(take(0, IL)) → MARK(uTake1(isNatIList(IL)))
MARK(take(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → MARK(X2)
MARK(uTake2(X1, X2, X3, X4)) → MARK(X1)
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = x1 + x2   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = x1   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = 1 + x1 + x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = x1 + x2   
POL(uTake1(x1)) = x1   
POL(uTake2(x1, x2, x3, x4)) = 1 + x1 + x2 + x3 + x4   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
active(isNatList(nil)) → mark(tt)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
s(active(X)) → s(X)
s(mark(X)) → s(X)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
mark(tt) → active(tt)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
mark(nil) → active(nil)

(64) Obligation:

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

MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(length(X)) → MARK(X)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
MARK(uTake1(X)) → MARK(X)
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
MARK(uLength(X1, X2)) → MARK(X1)
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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.


MARK(length(X)) → MARK(X)
MARK(uLength(X1, X2)) → MARK(X1)
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = x1 + x2   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = 1 + x1   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = 1 + x1 + x2   
POL(uTake1(x1)) = x1   
POL(uTake2(x1, x2, x3, x4)) = x3 + x4   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
active(isNatList(nil)) → mark(tt)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
s(active(X)) → s(X)
s(mark(X)) → s(X)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
mark(tt) → active(tt)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
mark(nil) → active(nil)

(66) Obligation:

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

MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
MARK(uTake1(X)) → MARK(X)
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(67) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(zeros) → MARK(cons(0, zeros))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = x1   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = 0   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = 0   
POL(uTake1(x1)) = x1   
POL(uTake2(x1, x2, x3, x4)) = x3   
POL(zeros) = 1   

The following usable rules [FROCOS05] were oriented:

active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
active(isNatList(nil)) → mark(tt)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
s(active(X)) → s(X)
s(mark(X)) → s(X)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
mark(tt) → active(tt)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
mark(nil) → active(nil)

(68) Obligation:

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

MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(zeros) → ACTIVE(zeros)
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
MARK(uTake1(X)) → MARK(X)
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(69) DependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.

(70) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(uTake1(X)) → MARK(X)
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(71) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(uTake1(X)) → MARK(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 1   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = x1   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = 0   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = x1 + x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = 0   
POL(uTake1(x1)) = 1 + x1   
POL(uTake2(x1, x2, x3, x4)) = x3   
POL(zeros) = 1   

The following usable rules [FROCOS05] were oriented:

active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
active(isNatList(nil)) → mark(tt)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
s(active(X)) → s(X)
s(mark(X)) → s(X)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
mark(tt) → active(tt)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
mark(nil) → active(nil)

(72) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(73) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(take(s(M), cons(N, IL))) → MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = x1   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = 0   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = 1 + x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = 0   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = x3   
POL(zeros) = 1   

The following usable rules [FROCOS05] were oriented:

active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
active(isNatList(nil)) → mark(tt)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
s(active(X)) → s(X)
s(mark(X)) → s(X)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
mark(tt) → active(tt)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
mark(nil) → active(nil)

(74) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(75) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(cons(X1, X2)) → MARK(X1)
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = 1 + x1   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = 0   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = x1 + x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = 0   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 1 + x3   
POL(zeros) = 1   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(76) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(77) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(uTake2(tt, M, N, IL)) → MARK(cons(N, take(M, IL)))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = 0   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = 0   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = 1   
POL(tt) = 0   
POL(uLength(x1, x2)) = 0   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 1   
POL(zeros) = 1   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(78) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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.


ACTIVE(isNatList(take(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = x1 + x2   
POL(isNat(x1)) = x1   
POL(isNatIList(x1)) = x1   
POL(isNatList(x1)) = x1   
POL(length(x1)) = x1   
POL(mark(x1)) = x1   
POL(nil) = 1   
POL(s(x1)) = x1   
POL(take(x1, x2)) = 1 + x1 + x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = x2   
POL(uTake1(x1)) = 1   
POL(uTake2(x1, x2, x3, x4)) = 1 + x2 + x3 + x4   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(80) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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.


ACTIVE(isNatIList(IL)) → MARK(isNatList(IL))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = x1 + x2   
POL(isNat(x1)) = x1   
POL(isNatIList(x1)) = 1 + x1   
POL(isNatList(x1)) = x1   
POL(length(x1)) = x1   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = 1 + x1 + x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = x2   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 1 + x2 + x3 + x4   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(82) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNat(length(L))) → MARK(isNatList(L))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(83) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(isNat(length(L))) → MARK(isNatList(L))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = x1 + x2   
POL(isNat(x1)) = x1   
POL(isNatIList(x1)) = x1   
POL(isNatList(x1)) = x1   
POL(length(x1)) = 1 + x1   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = x1   
POL(take(x1, x2)) = x1 + x2   
POL(tt) = 0   
POL(uLength(x1, x2)) = 1 + x2   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = x2 + x3 + x4   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(84) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(85) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(take(X1, X2)) → ACTIVE(take(mark(X1), mark(X2)))
MARK(uTake2(X1, X2, X3, X4)) → ACTIVE(uTake2(mark(X1), X2, X3, X4))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = 1   
POL(active(x1)) = 0   
POL(and(x1, x2)) = 1   
POL(cons(x1, x2)) = 0   
POL(isNat(x1)) = 1   
POL(isNatIList(x1)) = 1   
POL(isNatList(x1)) = 1   
POL(length(x1)) = 1   
POL(mark(x1)) = 0   
POL(nil) = 0   
POL(s(x1)) = 0   
POL(take(x1, x2)) = 0   
POL(tt) = 0   
POL(uLength(x1, x2)) = 1   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 0   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)

(86) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNat(s(N))) → MARK(isNat(N))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(87) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(isNat(s(N))) → MARK(isNat(N))
The remaining pairs can at least be oriented weakly.
Used ordering: Matrix interpretation [MATRO]:

POL(ACTIVE(x1)) =
/0\
\0/
+
/10\
\00/
·x1

POL(and(x1, x2)) =
/0\
\0/
+
/10\
\00/
·x1 +
/10\
\01/
·x2

POL(tt) =
/0\
\1/

POL(MARK(x1)) =
/0\
\0/
+
/10\
\00/
·x1

POL(mark(x1)) =
/0\
\0/
+
/10\
\01/
·x1

POL(isNatIList(x1)) =
/0\
\1/
+
/01\
\10/
·x1

POL(isNat(x1)) =
/0\
\0/
+
/01\
\11/
·x1

POL(s(x1)) =
/0\
\1/
+
/10\
\01/
·x1

POL(isNatList(x1)) =
/0\
\0/
+
/01\
\10/
·x1

POL(cons(x1, x2)) =
/0\
\0/
+
/00\
\01/
·x1 +
/10\
\11/
·x2

POL(length(x1)) =
/0\
\0/
+
/00\
\11/
·x1

POL(uLength(x1, x2)) =
/0\
\0/
+
/00\
\01/
·x1 +
/00\
\11/
·x2

POL(active(x1)) =
/0\
\0/
+
/10\
\01/
·x1

POL(uTake1(x1)) =
/0\
\0/
+
/01\
\00/
·x1

POL(nil) =
/1\
\0/

POL(0) =
/1\
\0/

POL(zeros) =
/0\
\0/

POL(take(x1, x2)) =
/1\
\0/
+
/00\
\01/
·x1 +
/10\
\01/
·x2

POL(uTake2(x1, x2, x3, x4)) =
/1\
\1/
+
/00\
\00/
·x1 +
/00\
\01/
·x2 +
/00\
\01/
·x3 +
/10\
\11/
·x4

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(88) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
MARK(isNat(X)) → ACTIVE(isNat(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(89) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(isNat(X)) → ACTIVE(isNat(X))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = 1   
POL(active(x1)) = 0   
POL(and(x1, x2)) = 1   
POL(cons(x1, x2)) = 0   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 1   
POL(isNatList(x1)) = 1   
POL(length(x1)) = 1   
POL(mark(x1)) = 0   
POL(nil) = 0   
POL(s(x1)) = 0   
POL(take(x1, x2)) = 0   
POL(tt) = 0   
POL(uLength(x1, x2)) = 1   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 0   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)

(90) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(91) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(s(X)) → MARK(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Matrix interpretation [MATRO]:

POL(ACTIVE(x1)) =
/0\
\0/
+
/01\
\00/
·x1

POL(and(x1, x2)) =
/0\
\0/
+
/00\
\01/
·x1 +
/10\
\01/
·x2

POL(tt) =
/1\
\0/

POL(MARK(x1)) =
/0\
\0/
+
/01\
\00/
·x1

POL(mark(x1)) =
/0\
\0/
+
/10\
\01/
·x1

POL(isNatIList(x1)) =
/1\
\0/
+
/10\
\00/
·x1

POL(isNatList(x1)) =
/0\
\0/
+
/10\
\00/
·x1

POL(cons(x1, x2)) =
/0\
\0/
+
/00\
\00/
·x1 +
/10\
\11/
·x2

POL(isNat(x1)) =
/0\
\0/
+
/10\
\00/
·x1

POL(s(x1)) =
/0\
\1/
+
/10\
\01/
·x1

POL(length(x1)) =
/0\
\0/
+
/10\
\01/
·x1

POL(uLength(x1, x2)) =
/0\
\0/
+
/00\
\10/
·x1 +
/10\
\01/
·x2

POL(active(x1)) =
/0\
\0/
+
/10\
\01/
·x1

POL(uTake1(x1)) =
/0\
\0/
+
/11\
\00/
·x1

POL(nil) =
/1\
\0/

POL(0) =
/1\
\0/

POL(zeros) =
/0\
\0/

POL(take(x1, x2)) =
/1\
\0/
+
/00\
\01/
·x1 +
/10\
\01/
·x2

POL(uTake2(x1, x2, x3, x4)) =
/1\
\1/
+
/00\
\00/
·x1 +
/00\
\01/
·x2 +
/00\
\00/
·x3 +
/10\
\11/
·x4

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(92) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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.


ACTIVE(length(cons(N, L))) → MARK(uLength(and(isNat(N), isNatList(L)), L))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = 1   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = x1   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = 0   
POL(take(x1, x2)) = 1 + x1   
POL(tt) = 0   
POL(uLength(x1, x2)) = 0   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 1 + x1   
POL(zeros) = 1   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(94) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
ACTIVE(uLength(tt, L)) → MARK(s(length(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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.


ACTIVE(uLength(tt, L)) → MARK(s(length(L)))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = x1   
POL(active(x1)) = x1   
POL(and(x1, x2)) = x1 + x2   
POL(cons(x1, x2)) = 1   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = x1   
POL(mark(x1)) = x1   
POL(nil) = 0   
POL(s(x1)) = 0   
POL(take(x1, x2)) = 1 + x1   
POL(tt) = 0   
POL(uLength(x1, x2)) = 1   
POL(uTake1(x1)) = x1   
POL(uTake2(x1, x2, x3, x4)) = 1 + x1   
POL(zeros) = 1   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
active(uTake1(tt)) → mark(nil)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
active(isNat(0)) → mark(tt)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(96) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
MARK(length(X)) → ACTIVE(length(mark(X)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(97) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(uLength(X1, X2)) → ACTIVE(uLength(mark(X1), X2))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = 1   
POL(active(x1)) = 0   
POL(and(x1, x2)) = 1   
POL(cons(x1, x2)) = 0   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 1   
POL(isNatList(x1)) = 1   
POL(length(x1)) = 0   
POL(mark(x1)) = 0   
POL(nil) = 0   
POL(s(x1)) = 0   
POL(take(x1, x2)) = 0   
POL(tt) = 0   
POL(uLength(x1, x2)) = 0   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 0   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)

(98) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X1)
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(99) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(and(X1, X2)) → MARK(X1)
The remaining pairs can at least be oriented weakly.
Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]:

POL(ACTIVE(x1)) = -I + 0A·x1

POL(and(x1, x2)) = -I + 1A·x1 + 0A·x2

POL(tt) = 0A

POL(MARK(x1)) = -I + 0A·x1

POL(mark(x1)) = -I + 0A·x1

POL(isNatIList(x1)) = -I + 0A·x1

POL(isNatList(x1)) = -I + 0A·x1

POL(cons(x1, x2)) = -I + 1A·x1 + 0A·x2

POL(isNat(x1)) = -I + 0A·x1

POL(active(x1)) = -I + 0A·x1

POL(uLength(x1, x2)) = -I + -I·x1 + 0A·x2

POL(uTake1(x1)) = 1A + -I·x1

POL(nil) = 0A

POL(length(x1)) = -I + 0A·x1

POL(0) = 0A

POL(zeros) = 1A

POL(s(x1)) = -I + 0A·x1

POL(take(x1, x2)) = 0A + 1A·x1 + 0A·x2

POL(uTake2(x1, x2, x3, x4)) = 0A + 0A·x1 + 1A·x2 + 1A·x3 + 0A·x4

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(uTake1(tt)) → mark(nil)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(100) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(101) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ACTIVE(isNatIList(cons(N, IL))) → MARK(and(isNat(N), isNatIList(IL)))
ACTIVE(isNatList(cons(N, L))) → MARK(and(isNat(N), isNatList(L)))
The remaining pairs can at least be oriented weakly.
Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]:

POL(ACTIVE(x1)) = -I + 0A·x1

POL(and(x1, x2)) = 1A + -I·x1 + 0A·x2

POL(tt) = 0A

POL(MARK(x1)) = -I + 0A·x1

POL(mark(x1)) = 1A + 0A·x1

POL(isNatIList(x1)) = -I + 1A·x1

POL(isNatList(x1)) = 0A + 1A·x1

POL(cons(x1, x2)) = 1A + -I·x1 + 1A·x2

POL(isNat(x1)) = -I + 1A·x1

POL(active(x1)) = 1A + 0A·x1

POL(uLength(x1, x2)) = -I + 0A·x1 + 0A·x2

POL(uTake1(x1)) = 0A + -I·x1

POL(nil) = 0A

POL(length(x1)) = -I + 0A·x1

POL(0) = 0A

POL(zeros) = 0A

POL(s(x1)) = -I + 0A·x1

POL(take(x1, x2)) = -I + -I·x1 + 0A·x2

POL(uTake2(x1, x2, x3, x4)) = -I + -I·x1 + -I·x2 + -I·x3 + 1A·x4

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(uTake1(tt)) → mark(nil)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(102) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X2)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(103) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(isNatList(X)) → ACTIVE(isNatList(X))
The remaining pairs can at least be oriented weakly.
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(ACTIVE(x1)) = x1   
POL(MARK(x1)) = 1   
POL(active(x1)) = 0   
POL(and(x1, x2)) = 1   
POL(cons(x1, x2)) = 0   
POL(isNat(x1)) = 0   
POL(isNatIList(x1)) = 0   
POL(isNatList(x1)) = 0   
POL(length(x1)) = 0   
POL(mark(x1)) = 0   
POL(nil) = 0   
POL(s(x1)) = 0   
POL(take(x1, x2)) = 0   
POL(tt) = 0   
POL(uLength(x1, x2)) = 0   
POL(uTake1(x1)) = 0   
POL(uTake2(x1, x2, x3, x4)) = 0   
POL(zeros) = 0   

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)

(104) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))
MARK(and(X1, X2)) → MARK(X2)

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(105) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(and(X1, X2)) → MARK(X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]:

POL(ACTIVE(x1)) = 4A + 1A·x1

POL(and(x1, x2)) = 2A + -I·x1 + 1A·x2

POL(tt) = 3A

POL(MARK(x1)) = -I + 2A·x1

POL(mark(x1)) = 1A + 0A·x1

POL(isNatList(x1)) = -I + 1A·x1

POL(active(x1)) = 1A + 0A·x1

POL(isNatIList(x1)) = 0A + 3A·x1

POL(uLength(x1, x2)) = -I + 0A·x1 + 2A·x2

POL(uTake1(x1)) = 4A + 0A·x1

POL(nil) = 2A

POL(cons(x1, x2)) = 1A + 0A·x1 + 1A·x2

POL(length(x1)) = 2A + 1A·x1

POL(isNat(x1)) = -I + 2A·x1

POL(0) = 1A

POL(zeros) = 0A

POL(s(x1)) = 3A + 1A·x1

POL(take(x1, x2)) = 4A + 2A·x1 + 3A·x2

POL(uTake2(x1, x2, x3, x4)) = 5A + -I·x1 + 3A·x2 + 1A·x3 + 4A·x4

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(uTake1(tt)) → mark(nil)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(106) Obligation:

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

ACTIVE(and(tt, T)) → MARK(T)
MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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.


ACTIVE(and(tt, T)) → MARK(T)
The remaining pairs can at least be oriented weakly.
Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]:

POL(ACTIVE(x1)) = -I + 3A·x1

POL(and(x1, x2)) = 2A + -I·x1 + 1A·x2

POL(tt) = 3A

POL(MARK(x1)) = 2A + 3A·x1

POL(mark(x1)) = 1A + 0A·x1

POL(isNatList(x1)) = -I + 1A·x1

POL(active(x1)) = 1A + 0A·x1

POL(isNatIList(x1)) = -I + 3A·x1

POL(uLength(x1, x2)) = -I + 0A·x1 + 2A·x2

POL(uTake1(x1)) = 4A + 0A·x1

POL(nil) = 2A

POL(cons(x1, x2)) = 1A + -I·x1 + 1A·x2

POL(length(x1)) = 2A + 1A·x1

POL(isNat(x1)) = 3A + 0A·x1

POL(0) = 0A

POL(zeros) = 0A

POL(s(x1)) = 3A + 1A·x1

POL(take(x1, x2)) = 4A + 2A·x1 + 3A·x2

POL(uTake2(x1, x2, x3, x4)) = 5A + -I·x1 + 3A·x2 + -I·x3 + 4A·x4

The following usable rules [FROCOS05] were oriented:

isNatList(active(X)) → isNatList(X)
isNatList(mark(X)) → isNatList(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
active(uTake1(tt)) → mark(nil)
and(X1, mark(X2)) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
and(mark(X1), X2) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
length(active(X)) → length(X)
length(mark(X)) → length(X)
active(isNat(0)) → mark(tt)
active(isNatIList(zeros)) → mark(tt)
s(active(X)) → s(X)
s(mark(X)) → s(X)
active(isNatList(nil)) → mark(tt)
isNat(active(X)) → isNat(X)
isNat(mark(X)) → isNat(X)
mark(0) → active(0)
uTake1(active(X)) → uTake1(X)
uTake1(mark(X)) → uTake1(X)
mark(tt) → active(tt)
take(X1, mark(X2)) → take(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
mark(zeros) → active(zeros)
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(zeros) → mark(cons(0, zeros))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(isNatList(X)) → active(isNatList(X))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(isNatIList(X)) → active(isNatIList(X))
mark(uTake1(X)) → active(uTake1(mark(X)))
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(length(L))) → mark(isNatList(L))
active(and(tt, T)) → mark(T)
mark(length(X)) → active(length(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
mark(s(X)) → active(s(mark(X)))
active(isNat(s(N))) → mark(isNat(N))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
mark(nil) → active(nil)

(108) Obligation:

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

MARK(and(X1, X2)) → ACTIVE(and(mark(X1), mark(X2)))

The TRS R consists of the following rules:

active(and(tt, T)) → mark(T)
active(isNatIList(IL)) → mark(isNatList(IL))
active(isNat(0)) → mark(tt)
active(isNat(s(N))) → mark(isNat(N))
active(isNat(length(L))) → mark(isNatList(L))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(N, L))) → mark(and(isNat(N), isNatList(L)))
active(isNatList(take(N, IL))) → mark(and(isNat(N), isNatIList(IL)))
active(zeros) → mark(cons(0, zeros))
active(take(0, IL)) → mark(uTake1(isNatIList(IL)))
active(uTake1(tt)) → mark(nil)
active(take(s(M), cons(N, IL))) → mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL))
active(uTake2(tt, M, N, IL)) → mark(cons(N, take(M, IL)))
active(length(cons(N, L))) → mark(uLength(and(isNat(N), isNatList(L)), L))
active(uLength(tt, L)) → mark(s(length(L)))
mark(and(X1, X2)) → active(and(mark(X1), mark(X2)))
mark(tt) → active(tt)
mark(isNatIList(X)) → active(isNatIList(X))
mark(isNatList(X)) → active(isNatList(X))
mark(isNat(X)) → active(isNat(X))
mark(0) → active(0)
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(nil) → active(nil)
mark(take(X1, X2)) → active(take(mark(X1), mark(X2)))
mark(uTake1(X)) → active(uTake1(mark(X)))
mark(uTake2(X1, X2, X3, X4)) → active(uTake2(mark(X1), X2, X3, X4))
mark(uLength(X1, X2)) → active(uLength(mark(X1), X2))
and(mark(X1), X2) → and(X1, X2)
and(X1, mark(X2)) → and(X1, X2)
and(active(X1), X2) → and(X1, X2)
and(X1, active(X2)) → and(X1, X2)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
isNat(mark(X)) → isNat(X)
isNat(active(X)) → isNat(X)
s(mark(X)) → s(X)
s(active(X)) → s(X)
length(mark(X)) → length(X)
length(active(X)) → length(X)
cons(mark(X1), X2) → cons(X1, X2)
cons(X1, mark(X2)) → cons(X1, X2)
cons(active(X1), X2) → cons(X1, X2)
cons(X1, active(X2)) → cons(X1, X2)
take(mark(X1), X2) → take(X1, X2)
take(X1, mark(X2)) → take(X1, X2)
take(active(X1), X2) → take(X1, X2)
take(X1, active(X2)) → take(X1, X2)
uTake1(mark(X)) → uTake1(X)
uTake1(active(X)) → uTake1(X)
uTake2(mark(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, mark(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, mark(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, mark(X4)) → uTake2(X1, X2, X3, X4)
uTake2(active(X1), X2, X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, active(X2), X3, X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, active(X3), X4) → uTake2(X1, X2, X3, X4)
uTake2(X1, X2, X3, active(X4)) → uTake2(X1, X2, X3, X4)
uLength(mark(X1), X2) → uLength(X1, X2)
uLength(X1, mark(X2)) → uLength(X1, X2)
uLength(active(X1), X2) → uLength(X1, X2)
uLength(X1, active(X2)) → uLength(X1, X2)

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

(109) DependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(110) TRUE