(0) Obligation:

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

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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(zeros) → MARK(cons(0, zeros))
ACTIVE(zeros) → CONS(0, zeros)
ACTIVE(U11(tt)) → MARK(tt)
ACTIVE(U21(tt)) → MARK(tt)
ACTIVE(U31(tt)) → MARK(tt)
ACTIVE(U41(tt, V2)) → MARK(U42(isNatIList(V2)))
ACTIVE(U41(tt, V2)) → U421(isNatIList(V2))
ACTIVE(U41(tt, V2)) → ISNATILIST(V2)
ACTIVE(U42(tt)) → MARK(tt)
ACTIVE(U51(tt, V2)) → MARK(U52(isNatList(V2)))
ACTIVE(U51(tt, V2)) → U521(isNatList(V2))
ACTIVE(U51(tt, V2)) → ISNATLIST(V2)
ACTIVE(U52(tt)) → MARK(tt)
ACTIVE(U61(tt, L, N)) → MARK(U62(isNat(N), L))
ACTIVE(U61(tt, L, N)) → U621(isNat(N), L)
ACTIVE(U61(tt, L, N)) → ISNAT(N)
ACTIVE(U62(tt, L)) → MARK(s(length(L)))
ACTIVE(U62(tt, L)) → S(length(L))
ACTIVE(U62(tt, L)) → LENGTH(L)
ACTIVE(isNat(0)) → MARK(tt)
ACTIVE(isNat(length(V1))) → MARK(U11(isNatList(V1)))
ACTIVE(isNat(length(V1))) → U111(isNatList(V1))
ACTIVE(isNat(length(V1))) → ISNATLIST(V1)
ACTIVE(isNat(s(V1))) → MARK(U21(isNat(V1)))
ACTIVE(isNat(s(V1))) → U211(isNat(V1))
ACTIVE(isNat(s(V1))) → ISNAT(V1)
ACTIVE(isNatIList(V)) → MARK(U31(isNatList(V)))
ACTIVE(isNatIList(V)) → U311(isNatList(V))
ACTIVE(isNatIList(V)) → ISNATLIST(V)
ACTIVE(isNatIList(zeros)) → MARK(tt)
ACTIVE(isNatIList(cons(V1, V2))) → MARK(U41(isNat(V1), V2))
ACTIVE(isNatIList(cons(V1, V2))) → U411(isNat(V1), V2)
ACTIVE(isNatIList(cons(V1, V2))) → ISNAT(V1)
ACTIVE(isNatList(nil)) → MARK(tt)
ACTIVE(isNatList(cons(V1, V2))) → MARK(U51(isNat(V1), V2))
ACTIVE(isNatList(cons(V1, V2))) → U511(isNat(V1), V2)
ACTIVE(isNatList(cons(V1, V2))) → ISNAT(V1)
ACTIVE(length(nil)) → MARK(0)
ACTIVE(length(cons(N, L))) → MARK(U61(isNatList(L), L, N))
ACTIVE(length(cons(N, L))) → U611(isNatList(L), L, N)
ACTIVE(length(cons(N, L))) → ISNATLIST(L)
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(0) → ACTIVE(0)
MARK(U11(X)) → ACTIVE(U11(mark(X)))
MARK(U11(X)) → U111(mark(X))
MARK(U11(X)) → MARK(X)
MARK(tt) → ACTIVE(tt)
MARK(U21(X)) → ACTIVE(U21(mark(X)))
MARK(U21(X)) → U211(mark(X))
MARK(U21(X)) → MARK(X)
MARK(U31(X)) → ACTIVE(U31(mark(X)))
MARK(U31(X)) → U311(mark(X))
MARK(U31(X)) → MARK(X)
MARK(U41(X1, X2)) → ACTIVE(U41(mark(X1), X2))
MARK(U41(X1, X2)) → U411(mark(X1), X2)
MARK(U41(X1, X2)) → MARK(X1)
MARK(U42(X)) → ACTIVE(U42(mark(X)))
MARK(U42(X)) → U421(mark(X))
MARK(U42(X)) → MARK(X)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
MARK(U51(X1, X2)) → ACTIVE(U51(mark(X1), X2))
MARK(U51(X1, X2)) → U511(mark(X1), X2)
MARK(U51(X1, X2)) → MARK(X1)
MARK(U52(X)) → ACTIVE(U52(mark(X)))
MARK(U52(X)) → U521(mark(X))
MARK(U52(X)) → MARK(X)
MARK(isNatList(X)) → ACTIVE(isNatList(X))
MARK(U61(X1, X2, X3)) → ACTIVE(U61(mark(X1), X2, X3))
MARK(U61(X1, X2, X3)) → U611(mark(X1), X2, X3)
MARK(U61(X1, X2, X3)) → MARK(X1)
MARK(U62(X1, X2)) → ACTIVE(U62(mark(X1), X2))
MARK(U62(X1, X2)) → U621(mark(X1), X2)
MARK(U62(X1, X2)) → MARK(X1)
MARK(isNat(X)) → ACTIVE(isNat(X))
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(nil) → ACTIVE(nil)
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)
U111(mark(X)) → U111(X)
U111(active(X)) → U111(X)
U211(mark(X)) → U211(X)
U211(active(X)) → U211(X)
U311(mark(X)) → U311(X)
U311(active(X)) → U311(X)
U411(mark(X1), X2) → U411(X1, X2)
U411(X1, mark(X2)) → U411(X1, X2)
U411(active(X1), X2) → U411(X1, X2)
U411(X1, active(X2)) → U411(X1, X2)
U421(mark(X)) → U421(X)
U421(active(X)) → U421(X)
ISNATILIST(mark(X)) → ISNATILIST(X)
ISNATILIST(active(X)) → ISNATILIST(X)
U511(mark(X1), X2) → U511(X1, X2)
U511(X1, mark(X2)) → U511(X1, X2)
U511(active(X1), X2) → U511(X1, X2)
U511(X1, active(X2)) → U511(X1, X2)
U521(mark(X)) → U521(X)
U521(active(X)) → U521(X)
ISNATLIST(mark(X)) → ISNATLIST(X)
ISNATLIST(active(X)) → ISNATLIST(X)
U611(mark(X1), X2, X3) → U611(X1, X2, X3)
U611(X1, mark(X2), X3) → U611(X1, X2, X3)
U611(X1, X2, mark(X3)) → U611(X1, X2, X3)
U611(active(X1), X2, X3) → U611(X1, X2, X3)
U611(X1, active(X2), X3) → U611(X1, X2, X3)
U611(X1, X2, active(X3)) → U611(X1, X2, X3)
U621(mark(X1), X2) → U621(X1, X2)
U621(X1, mark(X2)) → U621(X1, X2)
U621(active(X1), X2) → U621(X1, X2)
U621(X1, active(X2)) → U621(X1, X2)
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)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(3) DependencyGraphProof (EQUIVALENT transformation)

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

(4) Complex Obligation (AND)

(5) 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(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(6) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


LENGTH(mark(X)) → LENGTH(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
LENGTH(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(7) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(8) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


LENGTH(active(X)) → LENGTH(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
LENGTH(x1)  =  LENGTH(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > LENGTH1 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > LENGTH1 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(9) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(10) PisEmptyProof (EQUIVALENT transformation)

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

(11) TRUE

(12) 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(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(13) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


S(mark(X)) → S(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
S(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(14) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(15) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


S(active(X)) → S(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
S(x1)  =  S(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > S1 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > S1 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(16) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(17) PisEmptyProof (EQUIVALENT transformation)

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

(18) TRUE

(19) 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(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(20) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ISNAT(mark(X)) → ISNAT(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ISNAT(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(21) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(22) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ISNAT(active(X)) → ISNAT(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ISNAT(x1)  =  ISNAT(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > ISNAT1 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > ISNAT1 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(23) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(24) PisEmptyProof (EQUIVALENT transformation)

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

(25) TRUE

(26) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(27) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U621(X1, mark(X2)) → U621(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U621(x1, x2)  =  U621(x2)
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat(x1)
s(x1)  =  s
length(x1)  =  x1
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > U51 > U52 > [U62^11, mark1, U311] > 0 > tt > s
zeros > cons > U51 > U52 > [U62^11, mark1, U311] > isNatList1 > tt > s
zeros > cons > U61 > U62 > [U62^11, mark1, U311] > 0 > tt > s
zeros > cons > U61 > U62 > [U62^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > U42 > [U62^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > U42 > [U62^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > isNat1 > U11 > [U62^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > isNat1 > U11 > [U62^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > isNat1 > U21 > [U62^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > isNat1 > U21 > [U62^11, mark1, U311] > isNatList1 > tt > s
nil > [U62^11, mark1, U311] > 0 > tt > s
nil > [U62^11, mark1, U311] > isNatList1 > tt > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(28) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(29) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U621(mark(X1), X2) → U621(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U621(x1, x2)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [mark1, s] > [tt, nil] > 0
isNatIList1 > U31 > [mark1, s] > [tt, nil] > 0
isNatIList1 > U41 > U42 > [mark1, s] > [tt, nil] > 0
isNat > U11 > [mark1, s] > [tt, nil] > 0
isNat > U21 > [mark1, s] > [tt, nil] > 0
isNat > isNatList1 > U51 > U52 > [mark1, s] > [tt, nil] > 0
length > U11 > [mark1, s] > [tt, nil] > 0
length > isNatList1 > U51 > U52 > [mark1, s] > [tt, nil] > 0
length > U61 > U62 > [mark1, s] > [tt, nil] > 0


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(30) Obligation:

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

U621(active(X1), X2) → U621(X1, X2)
U621(X1, active(X2)) → U621(X1, X2)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(31) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U621(X1, active(X2)) → U621(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U621(x1, x2)  =  U621(x2)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  x2
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat(x1)
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
U62^11 > [tt, U21, U31, U42, U52, U61, U62, s, nil]
[0, length] > [active1, zeros, mark1, isNatList1] > U11 > [tt, U21, U31, U42, U52, U61, U62, s, nil]
[0, length] > [active1, zeros, mark1, isNatList1] > isNat1 > [tt, U21, U31, U42, U52, U61, U62, s, nil]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(32) Obligation:

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

U621(active(X1), X2) → U621(X1, X2)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(33) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U621(active(X1), X2) → U621(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U621(x1, x2)  =  U621(x1, x2)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
U62^12 > s
zeros > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
zeros > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
zeros > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(34) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(35) PisEmptyProof (EQUIVALENT transformation)

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

(36) TRUE

(37) Obligation:

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

U611(X1, mark(X2), X3) → U611(X1, X2, X3)
U611(mark(X1), X2, X3) → U611(X1, X2, X3)
U611(X1, X2, mark(X3)) → U611(X1, X2, X3)
U611(active(X1), X2, X3) → U611(X1, X2, X3)
U611(X1, active(X2), X3) → U611(X1, X2, X3)
U611(X1, X2, active(X3)) → U611(X1, X2, X3)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(38) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U611(X1, mark(X2), X3) → U611(X1, X2, X3)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U611(x1, x2, x3)  =  x2
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  x1
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > mark1 > tt > s
zeros > mark1 > nil > 0
[isNatIList1, isNat] > U11 > mark1 > tt > s
[isNatIList1, isNat] > U11 > mark1 > nil > 0
[isNatIList1, isNat] > U21 > mark1 > tt > s
[isNatIList1, isNat] > U21 > mark1 > nil > 0
[isNatIList1, isNat] > U31 > mark1 > tt > s
[isNatIList1, isNat] > U31 > mark1 > nil > 0
[isNatIList1, isNat] > U41 > U42 > mark1 > tt > s
[isNatIList1, isNat] > U41 > U42 > mark1 > nil > 0
[isNatIList1, isNat] > isNatList > U51 > U52 > mark1 > tt > s
[isNatIList1, isNat] > isNatList > U51 > U52 > mark1 > nil > 0
length > U11 > mark1 > tt > s
length > U11 > mark1 > nil > 0
length > isNatList > U51 > U52 > mark1 > tt > s
length > isNatList > U51 > U52 > mark1 > nil > 0
length > U61 > U62 > mark1 > tt > s
length > U61 > U62 > mark1 > nil > 0


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(39) Obligation:

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

U611(mark(X1), X2, X3) → U611(X1, X2, X3)
U611(X1, X2, mark(X3)) → U611(X1, X2, X3)
U611(active(X1), X2, X3) → U611(X1, X2, X3)
U611(X1, active(X2), X3) → U611(X1, X2, X3)
U611(X1, X2, active(X3)) → U611(X1, X2, X3)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(40) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U611(X1, X2, mark(X3)) → U611(X1, X2, X3)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U611(x1, x2, x3)  =  x3
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  x1
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > mark1 > [tt, nil] > 0
zeros > mark1 > [tt, nil] > s
[U41, isNatIList1, isNat] > U11 > mark1 > [tt, nil] > 0
[U41, isNatIList1, isNat] > U11 > mark1 > [tt, nil] > s
[U41, isNatIList1, isNat] > U21 > mark1 > [tt, nil] > 0
[U41, isNatIList1, isNat] > U21 > mark1 > [tt, nil] > s
[U41, isNatIList1, isNat] > U31 > mark1 > [tt, nil] > 0
[U41, isNatIList1, isNat] > U31 > mark1 > [tt, nil] > s
[U41, isNatIList1, isNat] > U42 > mark1 > [tt, nil] > 0
[U41, isNatIList1, isNat] > U42 > mark1 > [tt, nil] > s
[U41, isNatIList1, isNat] > [U51, isNatList1] > U52 > mark1 > [tt, nil] > 0
[U41, isNatIList1, isNat] > [U51, isNatList1] > U52 > mark1 > [tt, nil] > s
length > U11 > mark1 > [tt, nil] > 0
length > U11 > mark1 > [tt, nil] > s
length > [U51, isNatList1] > U52 > mark1 > [tt, nil] > 0
length > [U51, isNatList1] > U52 > mark1 > [tt, nil] > s
length > U61 > U62 > mark1 > [tt, nil] > 0
length > U61 > U62 > mark1 > [tt, nil] > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(41) Obligation:

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

U611(mark(X1), X2, X3) → U611(X1, X2, X3)
U611(active(X1), X2, X3) → U611(X1, X2, X3)
U611(X1, active(X2), X3) → U611(X1, X2, X3)
U611(X1, X2, active(X3)) → U611(X1, X2, X3)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(42) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U611(mark(X1), X2, X3) → U611(X1, X2, X3)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U611(x1, x2, x3)  =  U611(x1, x3)
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [U41, isNatIList1] > U31 > mark1 > U61^12
zeros > cons > [U41, isNatIList1] > U31 > mark1 > nil > tt
zeros > cons > [U41, isNatIList1] > U42 > mark1 > U61^12
zeros > cons > [U41, isNatIList1] > U42 > mark1 > nil > tt
[isNatList, length] > 0 > mark1 > U61^12
[isNatList, length] > 0 > mark1 > nil > tt
[isNatList, length] > U51 > U52 > mark1 > U61^12
[isNatList, length] > U51 > U52 > mark1 > nil > tt
[isNatList, length] > U61 > U62 > [U21, s] > mark1 > U61^12
[isNatList, length] > U61 > U62 > [U21, s] > mark1 > nil > tt
[isNatList, length] > U61 > isNat > U11 > mark1 > U61^12
[isNatList, length] > U61 > isNat > U11 > mark1 > nil > tt
[isNatList, length] > U61 > isNat > [U21, s] > mark1 > U61^12
[isNatList, length] > U61 > isNat > [U21, s] > mark1 > nil > tt


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(43) Obligation:

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

U611(active(X1), X2, X3) → U611(X1, X2, X3)
U611(X1, active(X2), X3) → U611(X1, X2, X3)
U611(X1, X2, active(X3)) → U611(X1, X2, X3)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(44) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U611(active(X1), X2, X3) → U611(X1, X2, X3)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U611(x1, x2, x3)  =  x1
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
[U41, isNatIList] > U31 > [active1, mark1] > zeros > cons
[U41, isNatIList] > U31 > [active1, mark1] > zeros > 0
[U41, isNatIList] > U31 > [active1, mark1] > zeros > [tt, U21, U52] > U62 > s
[U41, isNatIList] > U31 > [active1, mark1] > U51 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > U31 > [active1, mark1] > isNat > U11 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > U31 > [active1, mark1] > length > 0
[U41, isNatIList] > U31 > [active1, mark1] > length > U11 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > U31 > [active1, mark1] > length > U61 > U62 > s
[U41, isNatIList] > U31 > [active1, mark1] > nil > 0
[U41, isNatIList] > U42 > [active1, mark1] > zeros > cons
[U41, isNatIList] > U42 > [active1, mark1] > zeros > 0
[U41, isNatIList] > U42 > [active1, mark1] > zeros > [tt, U21, U52] > U62 > s
[U41, isNatIList] > U42 > [active1, mark1] > U51 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > U42 > [active1, mark1] > isNat > U11 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > U42 > [active1, mark1] > length > 0
[U41, isNatIList] > U42 > [active1, mark1] > length > U11 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > U42 > [active1, mark1] > length > U61 > U62 > s
[U41, isNatIList] > U42 > [active1, mark1] > nil > 0
[U41, isNatIList] > isNatList1 > [active1, mark1] > zeros > cons
[U41, isNatIList] > isNatList1 > [active1, mark1] > zeros > 0
[U41, isNatIList] > isNatList1 > [active1, mark1] > zeros > [tt, U21, U52] > U62 > s
[U41, isNatIList] > isNatList1 > [active1, mark1] > U51 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > isNatList1 > [active1, mark1] > isNat > U11 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > isNatList1 > [active1, mark1] > length > 0
[U41, isNatIList] > isNatList1 > [active1, mark1] > length > U11 > [tt, U21, U52] > U62 > s
[U41, isNatIList] > isNatList1 > [active1, mark1] > length > U61 > U62 > s
[U41, isNatIList] > isNatList1 > [active1, mark1] > nil > 0


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(45) Obligation:

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

U611(X1, active(X2), X3) → U611(X1, X2, X3)
U611(X1, X2, active(X3)) → U611(X1, X2, X3)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(46) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U611(X1, active(X2), X3) → U611(X1, X2, X3)
U611(X1, X2, active(X3)) → U611(X1, X2, X3)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U611(x1, x2, x3)  =  U611(x1, x2, x3)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  x1
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [cons, U21, isNat] > [active1, mark1] > U11 > [U61^13, tt, U31, U51, U52, U62, s]
zeros > [cons, U21, isNat] > [active1, mark1] > U41 > U42 > [U61^13, tt, U31, U51, U52, U62, s]
zeros > [cons, U21, isNat] > [active1, mark1] > length > 0 > [U61^13, tt, U31, U51, U52, U62, s]
zeros > [cons, U21, isNat] > [active1, mark1] > length > U61 > [U61^13, tt, U31, U51, U52, U62, s]
isNatIList > [active1, mark1] > U11 > [U61^13, tt, U31, U51, U52, U62, s]
isNatIList > [active1, mark1] > U41 > U42 > [U61^13, tt, U31, U51, U52, U62, s]
isNatIList > [active1, mark1] > length > 0 > [U61^13, tt, U31, U51, U52, U62, s]
isNatIList > [active1, mark1] > length > U61 > [U61^13, tt, U31, U51, U52, U62, s]
nil > [active1, mark1] > U11 > [U61^13, tt, U31, U51, U52, U62, s]
nil > [active1, mark1] > U41 > U42 > [U61^13, tt, U31, U51, U52, U62, s]
nil > [active1, mark1] > length > 0 > [U61^13, tt, U31, U51, U52, U62, s]
nil > [active1, mark1] > length > U61 > [U61^13, tt, U31, U51, U52, U62, s]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(47) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(48) PisEmptyProof (EQUIVALENT transformation)

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

(49) TRUE

(50) 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(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(51) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ISNATLIST(mark(X)) → ISNATLIST(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ISNATLIST(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(52) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(53) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ISNATLIST(active(X)) → ISNATLIST(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ISNATLIST(x1)  =  ISNATLIST(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > ISNATLIST1 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > ISNATLIST1 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(54) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(55) PisEmptyProof (EQUIVALENT transformation)

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

(56) TRUE

(57) Obligation:

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

U521(active(X)) → U521(X)
U521(mark(X)) → U521(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(58) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U521(mark(X)) → U521(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U521(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(59) Obligation:

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

U521(active(X)) → U521(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(60) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U521(active(X)) → U521(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U521(x1)  =  U521(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > U52^11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > U52^11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(61) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(62) PisEmptyProof (EQUIVALENT transformation)

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

(63) TRUE

(64) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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.


U511(X1, mark(X2)) → U511(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U511(x1, x2)  =  U511(x2)
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat(x1)
s(x1)  =  s
length(x1)  =  x1
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > U51 > U52 > [U51^11, mark1, U311] > 0 > tt > s
zeros > cons > U51 > U52 > [U51^11, mark1, U311] > isNatList1 > tt > s
zeros > cons > U61 > U62 > [U51^11, mark1, U311] > 0 > tt > s
zeros > cons > U61 > U62 > [U51^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > U42 > [U51^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > U42 > [U51^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > isNat1 > U11 > [U51^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > isNat1 > U11 > [U51^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > isNat1 > U21 > [U51^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > isNat1 > U21 > [U51^11, mark1, U311] > isNatList1 > tt > s
nil > [U51^11, mark1, U311] > 0 > tt > s
nil > [U51^11, mark1, U311] > isNatList1 > tt > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(66) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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.


U511(mark(X1), X2) → U511(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U511(x1, x2)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [mark1, s] > [tt, nil] > 0
isNatIList1 > U31 > [mark1, s] > [tt, nil] > 0
isNatIList1 > U41 > U42 > [mark1, s] > [tt, nil] > 0
isNat > U11 > [mark1, s] > [tt, nil] > 0
isNat > U21 > [mark1, s] > [tt, nil] > 0
isNat > isNatList1 > U51 > U52 > [mark1, s] > [tt, nil] > 0
length > U11 > [mark1, s] > [tt, nil] > 0
length > isNatList1 > U51 > U52 > [mark1, s] > [tt, nil] > 0
length > U61 > U62 > [mark1, s] > [tt, nil] > 0


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(68) Obligation:

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

U511(active(X1), X2) → U511(X1, X2)
U511(X1, active(X2)) → U511(X1, X2)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(69) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U511(X1, active(X2)) → U511(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U511(x1, x2)  =  U511(x2)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  x2
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat(x1)
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
U51^11 > [tt, U21, U31, U42, U52, U61, U62, s, nil]
[0, length] > [active1, zeros, mark1, isNatList1] > U11 > [tt, U21, U31, U42, U52, U61, U62, s, nil]
[0, length] > [active1, zeros, mark1, isNatList1] > isNat1 > [tt, U21, U31, U42, U52, U61, U62, s, nil]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(70) Obligation:

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

U511(active(X1), X2) → U511(X1, X2)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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.


U511(active(X1), X2) → U511(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U511(x1, x2)  =  U511(x1, x2)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
U51^12 > s
zeros > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
zeros > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
zeros > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(72) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(73) PisEmptyProof (EQUIVALENT transformation)

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

(74) TRUE

(75) 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(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(76) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ISNATILIST(mark(X)) → ISNATILIST(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ISNATILIST(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(77) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(78) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


ISNATILIST(active(X)) → ISNATILIST(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ISNATILIST(x1)  =  ISNATILIST(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > ISNATILIST1 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > ISNATILIST1 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(79) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(80) PisEmptyProof (EQUIVALENT transformation)

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

(81) TRUE

(82) Obligation:

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

U421(active(X)) → U421(X)
U421(mark(X)) → U421(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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.


U421(mark(X)) → U421(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U421(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(84) Obligation:

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

U421(active(X)) → U421(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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.


U421(active(X)) → U421(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U421(x1)  =  U421(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > U42^11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > U42^11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(86) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(87) PisEmptyProof (EQUIVALENT transformation)

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

(88) TRUE

(89) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(90) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U411(X1, mark(X2)) → U411(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U411(x1, x2)  =  U411(x2)
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat(x1)
s(x1)  =  s
length(x1)  =  x1
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > U51 > U52 > [U41^11, mark1, U311] > 0 > tt > s
zeros > cons > U51 > U52 > [U41^11, mark1, U311] > isNatList1 > tt > s
zeros > cons > U61 > U62 > [U41^11, mark1, U311] > 0 > tt > s
zeros > cons > U61 > U62 > [U41^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > U42 > [U41^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > U42 > [U41^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > isNat1 > U11 > [U41^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > isNat1 > U11 > [U41^11, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > isNat1 > U21 > [U41^11, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > isNat1 > U21 > [U41^11, mark1, U311] > isNatList1 > tt > s
nil > [U41^11, mark1, U311] > 0 > tt > s
nil > [U41^11, mark1, U311] > isNatList1 > tt > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(91) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(92) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U411(mark(X1), X2) → U411(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U411(x1, x2)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [mark1, s] > [tt, nil] > 0
isNatIList1 > U31 > [mark1, s] > [tt, nil] > 0
isNatIList1 > U41 > U42 > [mark1, s] > [tt, nil] > 0
isNat > U11 > [mark1, s] > [tt, nil] > 0
isNat > U21 > [mark1, s] > [tt, nil] > 0
isNat > isNatList1 > U51 > U52 > [mark1, s] > [tt, nil] > 0
length > U11 > [mark1, s] > [tt, nil] > 0
length > isNatList1 > U51 > U52 > [mark1, s] > [tt, nil] > 0
length > U61 > U62 > [mark1, s] > [tt, nil] > 0


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(93) Obligation:

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

U411(active(X1), X2) → U411(X1, X2)
U411(X1, active(X2)) → U411(X1, X2)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(94) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U411(X1, active(X2)) → U411(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U411(x1, x2)  =  U411(x2)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  x2
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat(x1)
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
U41^11 > [tt, U21, U31, U42, U52, U61, U62, s, nil]
[0, length] > [active1, zeros, mark1, isNatList1] > U11 > [tt, U21, U31, U42, U52, U61, U62, s, nil]
[0, length] > [active1, zeros, mark1, isNatList1] > isNat1 > [tt, U21, U31, U42, U52, U61, U62, s, nil]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(95) Obligation:

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

U411(active(X1), X2) → U411(X1, X2)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(96) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U411(active(X1), X2) → U411(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U411(x1, x2)  =  U411(x1, x2)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
U41^12 > s
zeros > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
zeros > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
zeros > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(97) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(98) PisEmptyProof (EQUIVALENT transformation)

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

(99) TRUE

(100) Obligation:

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

U311(active(X)) → U311(X)
U311(mark(X)) → U311(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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.


U311(mark(X)) → U311(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U311(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(102) Obligation:

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

U311(active(X)) → U311(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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.


U311(active(X)) → U311(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U311(x1)  =  U311(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > U31^11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > U31^11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(104) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(105) PisEmptyProof (EQUIVALENT transformation)

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

(106) TRUE

(107) Obligation:

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

U211(active(X)) → U211(X)
U211(mark(X)) → U211(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(108) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U211(mark(X)) → U211(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U211(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(109) Obligation:

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

U211(active(X)) → U211(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(110) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U211(active(X)) → U211(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U211(x1)  =  U211(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > U21^11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > U21^11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(111) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(112) PisEmptyProof (EQUIVALENT transformation)

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

(113) TRUE

(114) Obligation:

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

U111(active(X)) → U111(X)
U111(mark(X)) → U111(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(115) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U111(mark(X)) → U111(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U111(x1)  =  x1
active(x1)  =  x1
mark(x1)  =  mark(x1)
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length(x1)
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [isNatIList1, isNatList] > U41 > U42 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > U51 > U52 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > [isNatIList1, isNatList] > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > U62 > s > U21 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U11 > [mark1, U311] > [tt, length1]
zeros > cons > U61 > isNat > U21 > [mark1, U311] > [tt, length1]
zeros > 0 > [mark1, U311] > [tt, length1]
nil > 0 > [mark1, U311] > [tt, length1]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(116) Obligation:

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

U111(active(X)) → U111(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(117) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


U111(active(X)) → U111(X)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
U111(x1)  =  U111(x1)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > [active1, mark1, isNatList1, U62] > U11^11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
zeros > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > U11^11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > 0 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > [U21, isNat] > U11 > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > s > [tt, U31, U41, U42, U52]
[U61, length] > [active1, mark1, isNatList1, U62] > nil > [tt, U31, U41, U42, U52]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(118) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(119) PisEmptyProof (EQUIVALENT transformation)

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

(120) TRUE

(121) 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(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(122) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


CONS(X1, mark(X2)) → CONS(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
CONS(x1, x2)  =  CONS(x2)
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31(x1)
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat(x1)
s(x1)  =  s
length(x1)  =  x1
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > U51 > U52 > [CONS1, mark1, U311] > 0 > tt > s
zeros > cons > U51 > U52 > [CONS1, mark1, U311] > isNatList1 > tt > s
zeros > cons > U61 > U62 > [CONS1, mark1, U311] > 0 > tt > s
zeros > cons > U61 > U62 > [CONS1, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > U42 > [CONS1, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > U42 > [CONS1, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > isNat1 > U11 > [CONS1, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > isNat1 > U11 > [CONS1, mark1, U311] > isNatList1 > tt > s
[U41, isNatIList1] > isNat1 > U21 > [CONS1, mark1, U311] > 0 > tt > s
[U41, isNatIList1] > isNat1 > U21 > [CONS1, mark1, U311] > isNatList1 > tt > s
nil > [CONS1, mark1, U311] > 0 > tt > s
nil > [CONS1, mark1, U311] > isNatList1 > tt > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(123) Obligation:

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

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(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(124) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


CONS(mark(X1), X2) → CONS(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
CONS(x1, x2)  =  x1
mark(x1)  =  mark(x1)
active(x1)  =  x1
zeros  =  zeros
cons(x1, x2)  =  cons
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList(x1)
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
zeros > cons > [mark1, s] > [tt, nil] > 0
isNatIList1 > U31 > [mark1, s] > [tt, nil] > 0
isNatIList1 > U41 > U42 > [mark1, s] > [tt, nil] > 0
isNat > U11 > [mark1, s] > [tt, nil] > 0
isNat > U21 > [mark1, s] > [tt, nil] > 0
isNat > isNatList1 > U51 > U52 > [mark1, s] > [tt, nil] > 0
length > U11 > [mark1, s] > [tt, nil] > 0
length > isNatList1 > U51 > U52 > [mark1, s] > [tt, nil] > 0
length > U61 > U62 > [mark1, s] > [tt, nil] > 0


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(125) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(126) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


CONS(X1, active(X2)) → CONS(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
CONS(x1, x2)  =  CONS(x2)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  x2
U42(x1)  =  U42
isNatIList(x1)  =  x1
U51(x1, x2)  =  x2
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat(x1)
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
CONS1 > [tt, U21, U31, U42, U52, U61, U62, s, nil]
[0, length] > [active1, zeros, mark1, isNatList1] > U11 > [tt, U21, U31, U42, U52, U61, U62, s, nil]
[0, length] > [active1, zeros, mark1, isNatList1] > isNat1 > [tt, U21, U31, U42, U52, U61, U62, s, nil]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(127) Obligation:

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

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

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(128) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


CONS(active(X1), X2) → CONS(X1, X2)
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
CONS(x1, x2)  =  CONS(x1, x2)
active(x1)  =  active(x1)
zeros  =  zeros
mark(x1)  =  mark(x1)
cons(x1, x2)  =  x2
0  =  0
U11(x1)  =  U11
tt  =  tt
U21(x1)  =  U21
U31(x1)  =  U31
U41(x1, x2)  =  U41
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList(x1)
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
s(x1)  =  s
length(x1)  =  length
nil  =  nil

Recursive Path Order [RPO].
Precedence:
CONS2 > s
zeros > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
zeros > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
zeros > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
isNatIList > [U41, U42] > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
[U61, length] > isNatList1 > U51 > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > 0 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > U31 > [U11, tt, U21, isNat, nil] > s
[U61, length] > U62 > [active1, mark1] > U52 > [U11, tt, U21, isNat, nil] > s


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(129) Obligation:

Q DP problem:
P is empty.
The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(130) PisEmptyProof (EQUIVALENT transformation)

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

(131) TRUE

(132) Obligation:

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

MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
ACTIVE(U41(tt, V2)) → MARK(U42(isNatIList(V2)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
MARK(U11(X)) → ACTIVE(U11(mark(X)))
ACTIVE(U51(tt, V2)) → MARK(U52(isNatList(V2)))
MARK(U11(X)) → MARK(X)
MARK(U21(X)) → ACTIVE(U21(mark(X)))
ACTIVE(U61(tt, L, N)) → MARK(U62(isNat(N), L))
MARK(U21(X)) → MARK(X)
MARK(U31(X)) → ACTIVE(U31(mark(X)))
ACTIVE(U62(tt, L)) → MARK(s(length(L)))
MARK(U31(X)) → MARK(X)
MARK(U41(X1, X2)) → ACTIVE(U41(mark(X1), X2))
ACTIVE(isNat(length(V1))) → MARK(U11(isNatList(V1)))
MARK(U41(X1, X2)) → MARK(X1)
MARK(U42(X)) → ACTIVE(U42(mark(X)))
ACTIVE(isNat(s(V1))) → MARK(U21(isNat(V1)))
MARK(U42(X)) → MARK(X)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(V)) → MARK(U31(isNatList(V)))
MARK(U51(X1, X2)) → ACTIVE(U51(mark(X1), X2))
ACTIVE(isNatIList(cons(V1, V2))) → MARK(U41(isNat(V1), V2))
MARK(U51(X1, X2)) → MARK(X1)
MARK(U52(X)) → ACTIVE(U52(mark(X)))
ACTIVE(isNatList(cons(V1, V2))) → MARK(U51(isNat(V1), V2))
MARK(U52(X)) → MARK(X)
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(length(cons(N, L))) → MARK(U61(isNatList(L), L, N))
MARK(U61(X1, X2, X3)) → ACTIVE(U61(mark(X1), X2, X3))
MARK(U61(X1, X2, X3)) → MARK(X1)
MARK(U62(X1, X2)) → ACTIVE(U62(mark(X1), X2))
MARK(U62(X1, X2)) → MARK(X1)
MARK(isNat(X)) → ACTIVE(isNat(X))
MARK(s(X)) → ACTIVE(s(mark(X)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(length(X)) → MARK(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(133) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(U21(X)) → ACTIVE(U21(mark(X)))
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
MARK(x1)  =  MARK
cons(x1, x2)  =  cons
ACTIVE(x1)  =  x1
mark(x1)  =  mark
U41(x1, x2)  =  U41
tt  =  tt
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
zeros  =  zeros
0  =  0
U11(x1)  =  U11
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U21(x1)  =  U21
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
U31(x1)  =  U31
s(x1)  =  s
length(x1)  =  length
active(x1)  =  active
nil  =  nil

Recursive Path Order [RPO].
Precedence:
[MARK, cons, U41, U42, isNatIList, zeros, U11, U51, U52, isNatList, U61, U62, isNat, U31, s, length] > [mark, active, nil] > tt
[MARK, cons, U41, U42, isNatIList, zeros, U11, U51, U52, isNatList, U61, U62, isNat, U31, s, length] > [mark, active, nil] > 0
[MARK, cons, U41, U42, isNatIList, zeros, U11, U51, U52, isNatList, U61, U62, isNat, U31, s, length] > [mark, active, nil] > U21


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(134) Obligation:

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

MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
ACTIVE(U41(tt, V2)) → MARK(U42(isNatIList(V2)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
MARK(U11(X)) → ACTIVE(U11(mark(X)))
ACTIVE(U51(tt, V2)) → MARK(U52(isNatList(V2)))
MARK(U11(X)) → MARK(X)
ACTIVE(U61(tt, L, N)) → MARK(U62(isNat(N), L))
MARK(U21(X)) → MARK(X)
MARK(U31(X)) → ACTIVE(U31(mark(X)))
ACTIVE(U62(tt, L)) → MARK(s(length(L)))
MARK(U31(X)) → MARK(X)
MARK(U41(X1, X2)) → ACTIVE(U41(mark(X1), X2))
ACTIVE(isNat(length(V1))) → MARK(U11(isNatList(V1)))
MARK(U41(X1, X2)) → MARK(X1)
MARK(U42(X)) → ACTIVE(U42(mark(X)))
ACTIVE(isNat(s(V1))) → MARK(U21(isNat(V1)))
MARK(U42(X)) → MARK(X)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(V)) → MARK(U31(isNatList(V)))
MARK(U51(X1, X2)) → ACTIVE(U51(mark(X1), X2))
ACTIVE(isNatIList(cons(V1, V2))) → MARK(U41(isNat(V1), V2))
MARK(U51(X1, X2)) → MARK(X1)
MARK(U52(X)) → ACTIVE(U52(mark(X)))
ACTIVE(isNatList(cons(V1, V2))) → MARK(U51(isNat(V1), V2))
MARK(U52(X)) → MARK(X)
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(length(cons(N, L))) → MARK(U61(isNatList(L), L, N))
MARK(U61(X1, X2, X3)) → ACTIVE(U61(mark(X1), X2, X3))
MARK(U61(X1, X2, X3)) → MARK(X1)
MARK(U62(X1, X2)) → ACTIVE(U62(mark(X1), X2))
MARK(U62(X1, X2)) → MARK(X1)
MARK(isNat(X)) → ACTIVE(isNat(X))
MARK(s(X)) → ACTIVE(s(mark(X)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(length(X)) → MARK(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(135) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(cons(X1, X2)) → ACTIVE(cons(mark(X1), X2))
MARK(U11(X)) → ACTIVE(U11(mark(X)))
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
MARK(x1)  =  MARK
cons(x1, x2)  =  cons
ACTIVE(x1)  =  x1
mark(x1)  =  mark
U41(x1, x2)  =  U41
tt  =  tt
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
zeros  =  zeros
0  =  0
U11(x1)  =  U11
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
U21(x1)  =  U21
U31(x1)  =  U31
s(x1)  =  s
length(x1)  =  length
active(x1)  =  active
nil  =  nil

Recursive Path Order [RPO].
Precedence:
0 > [mark, active] > U21 > [MARK, U41, U42, isNatIList, zeros, U51, U52, isNatList, U61, U62, isNat, U31, s, length] > cons
0 > [mark, active] > U21 > [MARK, U41, U42, isNatIList, zeros, U51, U52, isNatList, U61, U62, isNat, U31, s, length] > U11 > [tt, nil]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(136) Obligation:

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

ACTIVE(U41(tt, V2)) → MARK(U42(isNatIList(V2)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(U51(tt, V2)) → MARK(U52(isNatList(V2)))
MARK(U11(X)) → MARK(X)
ACTIVE(U61(tt, L, N)) → MARK(U62(isNat(N), L))
MARK(U21(X)) → MARK(X)
MARK(U31(X)) → ACTIVE(U31(mark(X)))
ACTIVE(U62(tt, L)) → MARK(s(length(L)))
MARK(U31(X)) → MARK(X)
MARK(U41(X1, X2)) → ACTIVE(U41(mark(X1), X2))
ACTIVE(isNat(length(V1))) → MARK(U11(isNatList(V1)))
MARK(U41(X1, X2)) → MARK(X1)
MARK(U42(X)) → ACTIVE(U42(mark(X)))
ACTIVE(isNat(s(V1))) → MARK(U21(isNat(V1)))
MARK(U42(X)) → MARK(X)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(V)) → MARK(U31(isNatList(V)))
MARK(U51(X1, X2)) → ACTIVE(U51(mark(X1), X2))
ACTIVE(isNatIList(cons(V1, V2))) → MARK(U41(isNat(V1), V2))
MARK(U51(X1, X2)) → MARK(X1)
MARK(U52(X)) → ACTIVE(U52(mark(X)))
ACTIVE(isNatList(cons(V1, V2))) → MARK(U51(isNat(V1), V2))
MARK(U52(X)) → MARK(X)
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(length(cons(N, L))) → MARK(U61(isNatList(L), L, N))
MARK(U61(X1, X2, X3)) → ACTIVE(U61(mark(X1), X2, X3))
MARK(U61(X1, X2, X3)) → MARK(X1)
MARK(U62(X1, X2)) → ACTIVE(U62(mark(X1), X2))
MARK(U62(X1, X2)) → MARK(X1)
MARK(isNat(X)) → ACTIVE(isNat(X))
MARK(s(X)) → ACTIVE(s(mark(X)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(length(X)) → MARK(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(137) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(U31(X)) → ACTIVE(U31(mark(X)))
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ACTIVE(x1)  =  x1
U41(x1, x2)  =  U41
tt  =  tt
MARK(x1)  =  MARK
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
cons(x1, x2)  =  cons
zeros  =  zeros
0  =  0
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U11(x1)  =  U11
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
U21(x1)  =  U21
U31(x1)  =  U31
mark(x1)  =  mark
s(x1)  =  s
length(x1)  =  length
active(x1)  =  active
nil  =  nil

Recursive Path Order [RPO].
Precedence:
[U41, MARK, U42, isNatIList, cons, zeros, U51, U52, isNatList, U61, U62, isNat, s, length] > [mark, active] > U21 > tt > [U11, U31]
[U41, MARK, U42, isNatIList, cons, zeros, U51, U52, isNatList, U61, U62, isNat, s, length] > [mark, active] > nil > tt > [U11, U31]
0 > [mark, active] > U21 > tt > [U11, U31]
0 > [mark, active] > nil > tt > [U11, U31]


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(138) Obligation:

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

ACTIVE(U41(tt, V2)) → MARK(U42(isNatIList(V2)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(U51(tt, V2)) → MARK(U52(isNatList(V2)))
MARK(U11(X)) → MARK(X)
ACTIVE(U61(tt, L, N)) → MARK(U62(isNat(N), L))
MARK(U21(X)) → MARK(X)
ACTIVE(U62(tt, L)) → MARK(s(length(L)))
MARK(U31(X)) → MARK(X)
MARK(U41(X1, X2)) → ACTIVE(U41(mark(X1), X2))
ACTIVE(isNat(length(V1))) → MARK(U11(isNatList(V1)))
MARK(U41(X1, X2)) → MARK(X1)
MARK(U42(X)) → ACTIVE(U42(mark(X)))
ACTIVE(isNat(s(V1))) → MARK(U21(isNat(V1)))
MARK(U42(X)) → MARK(X)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(V)) → MARK(U31(isNatList(V)))
MARK(U51(X1, X2)) → ACTIVE(U51(mark(X1), X2))
ACTIVE(isNatIList(cons(V1, V2))) → MARK(U41(isNat(V1), V2))
MARK(U51(X1, X2)) → MARK(X1)
MARK(U52(X)) → ACTIVE(U52(mark(X)))
ACTIVE(isNatList(cons(V1, V2))) → MARK(U51(isNat(V1), V2))
MARK(U52(X)) → MARK(X)
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(length(cons(N, L))) → MARK(U61(isNatList(L), L, N))
MARK(U61(X1, X2, X3)) → ACTIVE(U61(mark(X1), X2, X3))
MARK(U61(X1, X2, X3)) → MARK(X1)
MARK(U62(X1, X2)) → ACTIVE(U62(mark(X1), X2))
MARK(U62(X1, X2)) → MARK(X1)
MARK(isNat(X)) → ACTIVE(isNat(X))
MARK(s(X)) → ACTIVE(s(mark(X)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(length(X)) → MARK(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(139) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(U52(X)) → ACTIVE(U52(mark(X)))
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ACTIVE(x1)  =  x1
U41(x1, x2)  =  U41
tt  =  tt
MARK(x1)  =  MARK
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
cons(x1, x2)  =  cons
zeros  =  zeros
0  =  0
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U11(x1)  =  U11
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
U21(x1)  =  U21
s(x1)  =  s
length(x1)  =  length
U31(x1)  =  U31
mark(x1)  =  mark
active(x1)  =  active
nil  =  nil

Recursive Path Order [RPO].
Precedence:
[cons, U11, mark, active] > [U41, tt, MARK, U42, isNatIList, zeros, 0, U51, isNatList, U61, U62, isNat, s, length, nil] > U21 > U52
[cons, U11, mark, active] > [U41, tt, MARK, U42, isNatIList, zeros, 0, U51, isNatList, U61, U62, isNat, s, length, nil] > U31 > U52


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(140) Obligation:

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

ACTIVE(U41(tt, V2)) → MARK(U42(isNatIList(V2)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(U51(tt, V2)) → MARK(U52(isNatList(V2)))
MARK(U11(X)) → MARK(X)
ACTIVE(U61(tt, L, N)) → MARK(U62(isNat(N), L))
MARK(U21(X)) → MARK(X)
ACTIVE(U62(tt, L)) → MARK(s(length(L)))
MARK(U31(X)) → MARK(X)
MARK(U41(X1, X2)) → ACTIVE(U41(mark(X1), X2))
ACTIVE(isNat(length(V1))) → MARK(U11(isNatList(V1)))
MARK(U41(X1, X2)) → MARK(X1)
MARK(U42(X)) → ACTIVE(U42(mark(X)))
ACTIVE(isNat(s(V1))) → MARK(U21(isNat(V1)))
MARK(U42(X)) → MARK(X)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(V)) → MARK(U31(isNatList(V)))
MARK(U51(X1, X2)) → ACTIVE(U51(mark(X1), X2))
ACTIVE(isNatIList(cons(V1, V2))) → MARK(U41(isNat(V1), V2))
MARK(U51(X1, X2)) → MARK(X1)
ACTIVE(isNatList(cons(V1, V2))) → MARK(U51(isNat(V1), V2))
MARK(U52(X)) → MARK(X)
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(length(cons(N, L))) → MARK(U61(isNatList(L), L, N))
MARK(U61(X1, X2, X3)) → ACTIVE(U61(mark(X1), X2, X3))
MARK(U61(X1, X2, X3)) → MARK(X1)
MARK(U62(X1, X2)) → ACTIVE(U62(mark(X1), X2))
MARK(U62(X1, X2)) → MARK(X1)
MARK(isNat(X)) → ACTIVE(isNat(X))
MARK(s(X)) → ACTIVE(s(mark(X)))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(length(X)) → MARK(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(141) 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)))
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ACTIVE(x1)  =  x1
U41(x1, x2)  =  U41
tt  =  tt
MARK(x1)  =  MARK
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
cons(x1, x2)  =  cons
zeros  =  zeros
0  =  0
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U11(x1)  =  U11
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
U21(x1)  =  U21
s(x1)  =  s
length(x1)  =  length
U31(x1)  =  U31
mark(x1)  =  mark
active(x1)  =  active
nil  =  nil

Recursive Path Order [RPO].
Precedence:
[cons, 0, mark, active] > U52 > [U41, MARK, U42, isNatIList, zeros, U51, isNatList, U61, U62, isNat, length, U31] > U11 > tt
[cons, 0, mark, active] > U52 > [U41, MARK, U42, isNatIList, zeros, U51, isNatList, U61, U62, isNat, length, U31] > s > U21 > tt
[cons, 0, mark, active] > nil > tt


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(142) Obligation:

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

ACTIVE(U41(tt, V2)) → MARK(U42(isNatIList(V2)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(U51(tt, V2)) → MARK(U52(isNatList(V2)))
MARK(U11(X)) → MARK(X)
ACTIVE(U61(tt, L, N)) → MARK(U62(isNat(N), L))
MARK(U21(X)) → MARK(X)
ACTIVE(U62(tt, L)) → MARK(s(length(L)))
MARK(U31(X)) → MARK(X)
MARK(U41(X1, X2)) → ACTIVE(U41(mark(X1), X2))
ACTIVE(isNat(length(V1))) → MARK(U11(isNatList(V1)))
MARK(U41(X1, X2)) → MARK(X1)
MARK(U42(X)) → ACTIVE(U42(mark(X)))
ACTIVE(isNat(s(V1))) → MARK(U21(isNat(V1)))
MARK(U42(X)) → MARK(X)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(V)) → MARK(U31(isNatList(V)))
MARK(U51(X1, X2)) → ACTIVE(U51(mark(X1), X2))
ACTIVE(isNatIList(cons(V1, V2))) → MARK(U41(isNat(V1), V2))
MARK(U51(X1, X2)) → MARK(X1)
ACTIVE(isNatList(cons(V1, V2))) → MARK(U51(isNat(V1), V2))
MARK(U52(X)) → MARK(X)
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(length(cons(N, L))) → MARK(U61(isNatList(L), L, N))
MARK(U61(X1, X2, X3)) → ACTIVE(U61(mark(X1), X2, X3))
MARK(U61(X1, X2, X3)) → MARK(X1)
MARK(U62(X1, X2)) → ACTIVE(U62(mark(X1), X2))
MARK(U62(X1, X2)) → MARK(X1)
MARK(isNat(X)) → ACTIVE(isNat(X))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(length(X)) → MARK(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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

(143) QDPOrderProof (EQUIVALENT transformation)

We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


MARK(U42(X)) → ACTIVE(U42(mark(X)))
The remaining pairs can at least be oriented weakly.
Used ordering: Combined order from the following AFS and order.
ACTIVE(x1)  =  x1
U41(x1, x2)  =  U41
tt  =  tt
MARK(x1)  =  MARK
U42(x1)  =  U42
isNatIList(x1)  =  isNatIList
cons(x1, x2)  =  cons
zeros  =  zeros
0  =  0
U51(x1, x2)  =  U51
U52(x1)  =  U52
isNatList(x1)  =  isNatList
U11(x1)  =  U11
U61(x1, x2, x3)  =  U61
U62(x1, x2)  =  U62
isNat(x1)  =  isNat
U21(x1)  =  U21
s(x1)  =  s
length(x1)  =  length
U31(x1)  =  U31
mark(x1)  =  mark
active(x1)  =  active
nil  =  nil

Recursive Path Order [RPO].
Precedence:
[U41, MARK, isNatIList, zeros, 0, U51, isNatList, U61, U62, isNat, length, nil] > U52 > [U42, mark, active] > [tt, U31]
[U41, MARK, isNatIList, zeros, 0, U51, isNatList, U61, U62, isNat, length, nil] > U52 > [U42, mark, active] > cons
[U41, MARK, isNatIList, zeros, 0, U51, isNatList, U61, U62, isNat, length, nil] > U52 > [U42, mark, active] > U11
[U41, MARK, isNatIList, zeros, 0, U51, isNatList, U61, U62, isNat, length, nil] > U52 > [U42, mark, active] > s > U21


The following usable rules [FROCOS05] were oriented:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

(144) Obligation:

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

ACTIVE(U41(tt, V2)) → MARK(U42(isNatIList(V2)))
MARK(cons(X1, X2)) → MARK(X1)
MARK(zeros) → ACTIVE(zeros)
ACTIVE(zeros) → MARK(cons(0, zeros))
ACTIVE(U51(tt, V2)) → MARK(U52(isNatList(V2)))
MARK(U11(X)) → MARK(X)
ACTIVE(U61(tt, L, N)) → MARK(U62(isNat(N), L))
MARK(U21(X)) → MARK(X)
ACTIVE(U62(tt, L)) → MARK(s(length(L)))
MARK(U31(X)) → MARK(X)
MARK(U41(X1, X2)) → ACTIVE(U41(mark(X1), X2))
ACTIVE(isNat(length(V1))) → MARK(U11(isNatList(V1)))
MARK(U41(X1, X2)) → MARK(X1)
ACTIVE(isNat(s(V1))) → MARK(U21(isNat(V1)))
MARK(U42(X)) → MARK(X)
MARK(isNatIList(X)) → ACTIVE(isNatIList(X))
ACTIVE(isNatIList(V)) → MARK(U31(isNatList(V)))
MARK(U51(X1, X2)) → ACTIVE(U51(mark(X1), X2))
ACTIVE(isNatIList(cons(V1, V2))) → MARK(U41(isNat(V1), V2))
MARK(U51(X1, X2)) → MARK(X1)
ACTIVE(isNatList(cons(V1, V2))) → MARK(U51(isNat(V1), V2))
MARK(U52(X)) → MARK(X)
MARK(isNatList(X)) → ACTIVE(isNatList(X))
ACTIVE(length(cons(N, L))) → MARK(U61(isNatList(L), L, N))
MARK(U61(X1, X2, X3)) → ACTIVE(U61(mark(X1), X2, X3))
MARK(U61(X1, X2, X3)) → MARK(X1)
MARK(U62(X1, X2)) → ACTIVE(U62(mark(X1), X2))
MARK(U62(X1, X2)) → MARK(X1)
MARK(isNat(X)) → ACTIVE(isNat(X))
MARK(s(X)) → MARK(X)
MARK(length(X)) → ACTIVE(length(mark(X)))
MARK(length(X)) → MARK(X)

The TRS R consists of the following rules:

active(zeros) → mark(cons(0, zeros))
active(U11(tt)) → mark(tt)
active(U21(tt)) → mark(tt)
active(U31(tt)) → mark(tt)
active(U41(tt, V2)) → mark(U42(isNatIList(V2)))
active(U42(tt)) → mark(tt)
active(U51(tt, V2)) → mark(U52(isNatList(V2)))
active(U52(tt)) → mark(tt)
active(U61(tt, L, N)) → mark(U62(isNat(N), L))
active(U62(tt, L)) → mark(s(length(L)))
active(isNat(0)) → mark(tt)
active(isNat(length(V1))) → mark(U11(isNatList(V1)))
active(isNat(s(V1))) → mark(U21(isNat(V1)))
active(isNatIList(V)) → mark(U31(isNatList(V)))
active(isNatIList(zeros)) → mark(tt)
active(isNatIList(cons(V1, V2))) → mark(U41(isNat(V1), V2))
active(isNatList(nil)) → mark(tt)
active(isNatList(cons(V1, V2))) → mark(U51(isNat(V1), V2))
active(length(nil)) → mark(0)
active(length(cons(N, L))) → mark(U61(isNatList(L), L, N))
mark(zeros) → active(zeros)
mark(cons(X1, X2)) → active(cons(mark(X1), X2))
mark(0) → active(0)
mark(U11(X)) → active(U11(mark(X)))
mark(tt) → active(tt)
mark(U21(X)) → active(U21(mark(X)))
mark(U31(X)) → active(U31(mark(X)))
mark(U41(X1, X2)) → active(U41(mark(X1), X2))
mark(U42(X)) → active(U42(mark(X)))
mark(isNatIList(X)) → active(isNatIList(X))
mark(U51(X1, X2)) → active(U51(mark(X1), X2))
mark(U52(X)) → active(U52(mark(X)))
mark(isNatList(X)) → active(isNatList(X))
mark(U61(X1, X2, X3)) → active(U61(mark(X1), X2, X3))
mark(U62(X1, X2)) → active(U62(mark(X1), X2))
mark(isNat(X)) → active(isNat(X))
mark(s(X)) → active(s(mark(X)))
mark(length(X)) → active(length(mark(X)))
mark(nil) → active(nil)
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)
U11(mark(X)) → U11(X)
U11(active(X)) → U11(X)
U21(mark(X)) → U21(X)
U21(active(X)) → U21(X)
U31(mark(X)) → U31(X)
U31(active(X)) → U31(X)
U41(mark(X1), X2) → U41(X1, X2)
U41(X1, mark(X2)) → U41(X1, X2)
U41(active(X1), X2) → U41(X1, X2)
U41(X1, active(X2)) → U41(X1, X2)
U42(mark(X)) → U42(X)
U42(active(X)) → U42(X)
isNatIList(mark(X)) → isNatIList(X)
isNatIList(active(X)) → isNatIList(X)
U51(mark(X1), X2) → U51(X1, X2)
U51(X1, mark(X2)) → U51(X1, X2)
U51(active(X1), X2) → U51(X1, X2)
U51(X1, active(X2)) → U51(X1, X2)
U52(mark(X)) → U52(X)
U52(active(X)) → U52(X)
isNatList(mark(X)) → isNatList(X)
isNatList(active(X)) → isNatList(X)
U61(mark(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, mark(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, mark(X3)) → U61(X1, X2, X3)
U61(active(X1), X2, X3) → U61(X1, X2, X3)
U61(X1, active(X2), X3) → U61(X1, X2, X3)
U61(X1, X2, active(X3)) → U61(X1, X2, X3)
U62(mark(X1), X2) → U62(X1, X2)
U62(X1, mark(X2)) → U62(X1, X2)
U62(active(X1), X2) → U62(X1, X2)
U62(X1, active(X2)) → U62(X1, X2)
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)

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