YES Termination Proof using AProVETerm Rewriting System R:
[L, X, V1, V, V2, N]
zeros -> cons(0, zeros)
U11(tt, L) -> s(length(L))
and(tt, X) -> X
isNat(0) -> tt
isNat(length(V1)) -> isNatList(V1)
isNat(s(V1)) -> isNat(V1)
isNatIList(V) -> isNatList(V)
isNatIList(zeros) -> tt
isNatIList(cons(V1, V2)) -> and(isNat(V1), isNatIList(V2))
isNatList(nil) -> tt
isNatList(cons(V1, V2)) -> and(isNat(V1), isNatList(V2))
length(nil) -> 0
length(cons(N, L)) -> U11(and(isNatList(L), isNat(N)), L)

Termination of R to be shown.



   TRS
CSR to TRS Transformation




incomplete Giesl-Middeldorp-Transformation successful.
Replacement map:
and(1, 2)
isNatList(1)
cons(1, 2)
s(1)
U11(1, 2)
length(1)
isNatIList(1)
isNat(1)

Old CSR:

zeros -> cons(0, zeros)
U11(tt, L) -> s(length(L))
and(tt, X) -> X
isNat(0) -> tt
isNat(length(V1)) -> isNatList(V1)
isNat(s(V1)) -> isNat(V1)
isNatIList(V) -> isNatList(V)
isNatIList(zeros) -> tt
isNatIList(cons(V1, V2)) -> and(isNat(V1), isNatIList(V2))
isNatList(nil) -> tt
isNatList(cons(V1, V2)) -> and(isNat(V1), isNatList(V2))
length(nil) -> 0
length(cons(N, L)) -> U11(and(isNatList(L), isNat(N)), L)

new TRS:

zeros -> cons(0, zeros)
zeros -> zeros
U11(tt, L) -> s(length(mark(L)))
U11(x0, x1) -> U11(x0, x1)
length(nil) -> 0
length(cons(N, L)) -> U11(and(isNatList(L), isNat(N)), L)
length(x0) -> length(x0)
mark(and(x0, x1)) -> and(mark(x0), x1)
mark(isNatList(x0)) -> isNatList(x0)
mark(zeros) -> zeros
mark(U11(x0, x1)) -> U11(mark(x0), x1)
mark(length(x0)) -> length(mark(x0))
mark(isNatIList(x0)) -> isNatIList(x0)
mark(isNat(x0)) -> isNat(x0)
mark(cons(x0, x1)) -> cons(mark(x0), x1)
mark(0) -> 0
mark(tt) -> tt
mark(s(x0)) -> s(mark(x0))
mark(nil) -> nil
and(tt, X) -> mark(X)
and(x0, x1) -> and(x0, x1)
isNat(0) -> tt
isNat(length(V1)) -> isNatList(V1)
isNat(s(V1)) -> isNat(V1)
isNat(x0) -> isNat(x0)
isNatList(nil) -> tt
isNatList(cons(V1, V2)) -> and(isNat(V1), isNatList(V2))
isNatList(x0) -> isNatList(x0)
isNatIList(V) -> isNatList(V)
isNatIList(zeros) -> tt
isNatIList(cons(V1, V2)) -> and(isNat(V1), isNatIList(V2))
isNatIList(x0) -> isNatIList(x0)



   TRS
CSRtoTRS
       →TRS1
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

zeros -> cons(0, zeros)
zeros -> zeros
length(nil) -> 0
mark(isNatList(x0)) -> isNatList(x0)
mark(0) -> 0
mark(tt) -> tt
mark(nil) -> nil
isNat(length(V1)) -> isNatList(V1)
isNat(x0) -> isNat(x0)
isNatList(x0) -> isNatList(x0)
isNatIList(V) -> isNatList(V)
isNatIList(cons(V1, V2)) -> and(isNat(V1), isNatIList(V2))
isNatIList(x0) -> isNatIList(x0)

where the Polynomial interpretation:
  POL(and(x1, x2))=  x1 + x2  
  POL(isNatList(x1))=  x1  
  POL(_length_(x1))=  x1  
  POL(_isNatList_(x1))=  1 + x1  
  POL(_isNat_(x1))=  2 + x1  
  POL(_and_(x1, x2))=  x1 + x2  
  POL(*mark*(x1))=  2 + x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  2  
  POL(0)=  0  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(cons(x1, x2))=  1 + x1 + 2·x2  
  POL(tt)=  2  
  POL(nil)=  1  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(length(x1))=  x1  
  POL(_isNatIList_(x1))=  2 + x1  
  POL(isNatIList(x1))=  x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

mark(isNatIList(x0)) -> isNatIList(x0)

where the Polynomial interpretation:
  POL(and(x1, x2))=  x1 + x2  
  POL(isNatList(x1))=  x1  
  POL(_isNatList_(x1))=  x1  
  POL(_length_(x1))=  x1  
  POL(_isNat_(x1))=  x1  
  POL(_and_(x1, x2))=  x1 + x2  
  POL(*mark*(x1))=  x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  0  
  POL(0)=  0  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(cons(x1, x2))=  x1 + 2·x2  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(length(x1))=  x1  
  POL(_isNatIList_(x1))=  x1  
  POL(isNatIList(x1))=  1 + x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS3
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

and(tt, X) -> mark(X)
U11(tt, L) -> s(length(mark(L)))

where the Polynomial interpretation:
  POL(and(x1, x2))=  x1 + x2  
  POL(isNatList(x1))=  x1  
  POL(_isNatList_(x1))=  x1  
  POL(_length_(x1))=  x1  
  POL(_isNat_(x1))=  x1  
  POL(_and_(x1, x2))=  x1 + x2  
  POL(*mark*(x1))=  x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  0  
  POL(0)=  1  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(cons(x1, x2))=  x1 + 2·x2  
  POL(tt)=  1  
  POL(nil)=  1  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(length(x1))=  x1  
  POL(_isNatIList_(x1))=  1 + x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS4
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

and(x0, x1) -> and(x0, x1)
mark(cons(x0, x1)) -> cons(mark(x0), x1)

where the Polynomial interpretation:
  POL(and(x1, x2))=  1 + x1 + x2  
  POL(isNatList(x1))=  x1  
  POL(_isNatList_(x1))=  x1  
  POL(_length_(x1))=  x1  
  POL(_isNat_(x1))=  x1  
  POL(_and_(x1, x2))=  2 + x1 + x2  
  POL(*mark*(x1))=  2·x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  0  
  POL(0)=  0  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(cons(x1, x2))=  2 + x1 + 2·x2  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(length(x1))=  x1  
  POL(_isNatIList_(x1))=  x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS5
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

mark(and(x0, x1)) -> and(mark(x0), x1)

where the Polynomial interpretation:
  POL(and(x1, x2))=  1 + x1 + x2  
  POL(isNatList(x1))=  x1  
  POL(_length_(x1))=  x1  
  POL(_isNatList_(x1))=  x1  
  POL(_isNat_(x1))=  x1  
  POL(_and_(x1, x2))=  x1 + x2  
  POL(*mark*(x1))=  x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  0  
  POL(0)=  0  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(cons(x1, x2))=  x1 + 2·x2  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(length(x1))=  x1  
  POL(_isNatIList_(x1))=  x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS6
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

isNatList(cons(V1, V2)) -> and(isNat(V1), isNatList(V2))
length(cons(N, L)) -> U11(and(isNatList(L), isNat(N)), L)

where the Polynomial interpretation:
  POL(isNatList(x1))=  x1  
  POL(_isNatList_(x1))=  x1  
  POL(_length_(x1))=  x1  
  POL(_isNat_(x1))=  x1  
  POL(_and_(x1, x2))=  x1 + x2  
  POL(*mark*(x1))=  x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  0  
  POL(0)=  0  
  POL(cons(x1, x2))=  1 + x1 + 2·x2  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(_isNatIList_(x1))=  x1  
  POL(length(x1))=  x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS7
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

isNat(0) -> tt

where the Polynomial interpretation:
  POL(_length_(x1))=  x1  
  POL(_isNatList_(x1))=  x1  
  POL(_isNat_(x1))=  x1  
  POL(*mark*(x1))=  x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  0  
  POL(0)=  1  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(_isNatIList_(x1))=  x1  
  POL(length(x1))=  x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS8
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

mark(length(x0)) -> length(mark(x0))

where the Polynomial interpretation:
  POL(_length_(x1))=  1 + x1  
  POL(_isNatList_(x1))=  x1  
  POL(_isNat_(x1))=  x1  
  POL(*mark*(x1))=  2·x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  0  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(_isNatIList_(x1))=  x1  
  POL(length(x1))=  1 + x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS9
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

length(x0) -> length(x0)

where the Polynomial interpretation:
  POL(_isNatList_(x1))=  x1  
  POL(_length_(x1))=  1 + x1  
  POL(_isNat_(x1))=  x1  
  POL(*mark*(x1))=  x1  
  POL(U11(x1, x2))=  x1 + x2  
  POL(isNat(x1))=  x1  
  POL(_zeros_)=  0  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(_isNatIList_(x1))=  x1  
  POL(length(x1))=  x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS10
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

mark(isNat(x0)) -> isNat(x0)

where the Polynomial interpretation:
  POL(_zeros_)=  0  
  POL(_isNatList_(x1))=  x1  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(_isNat_(x1))=  x1  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(*mark*(x1))=  x1  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(U11(x1, x2))=  x1 + x2  
  POL(_isNatIList_(x1))=  x1  
  POL(isNat(x1))=  1 + x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS11
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

isNatIList(zeros) -> tt

where the Polynomial interpretation:
  POL(_zeros_)=  0  
  POL(_isNatList_(x1))=  x1  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(_isNat_(x1))=  x1  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(*mark*(x1))=  x1  
  POL(s(x1))=  x1  
  POL(zeros)=  0  
  POL(U11(x1, x2))=  x1 + x2  
  POL(_isNatIList_(x1))=  1 + x1  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS12
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

mark(zeros) -> zeros

where the Polynomial interpretation:
  POL(_isNatList_(x1))=  x1  
  POL(_zeros_)=  0  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(_isNat_(x1))=  x1  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(*mark*(x1))=  x1  
  POL(s(x1))=  x1  
  POL(zeros)=  1  
  POL(U11(x1, x2))=  x1 + x2  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS13
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

U11(x0, x1) -> U11(x0, x1)

where the Polynomial interpretation:
  POL(_isNatList_(x1))=  x1  
  POL(_U11_(x1, x2))=  2 + x1 + x2  
  POL(_isNat_(x1))=  x1  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(*mark*(x1))=  2·x1  
  POL(s(x1))=  x1  
  POL(U11(x1, x2))=  1 + x1 + x2  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS14
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

mark(s(x0)) -> s(mark(x0))
isNat(s(V1)) -> isNat(V1)

where the Polynomial interpretation:
  POL(_isNatList_(x1))=  x1  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(_isNat_(x1))=  x1  
  POL(tt)=  0  
  POL(nil)=  0  
  POL(*mark*(x1))=  2·x1  
  POL(s(x1))=  1 + x1  
  POL(U11(x1, x2))=  x1 + x2  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS15
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

isNatList(nil) -> tt

where the Polynomial interpretation:
  POL(_isNatList_(x1))=  x1  
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(tt)=  0  
  POL(nil)=  1  
  POL(*mark*(x1))=  x1  
  POL(U11(x1, x2))=  x1 + x2  
was used.

Not all Rules of R can be deleted, so we still have to regard a part of R.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS16
Removing Redundant Rules



Removing the following rules from R which fullfill a polynomial ordering:

mark(U11(x0, x1)) -> U11(mark(x0), x1)

where the Polynomial interpretation:
  POL(_U11_(x1, x2))=  x1 + x2  
  POL(*mark*(x1))=  x1  
  POL(U11(x1, x2))=  1 + x1 + x2  
was used.

All Rules of R can be deleted.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS17
Overlay and local confluence Check



The TRS is overlay and locally confluent (all critical pairs are trivially joinable).Hence, we can switch to innermost.


   TRS
CSRtoTRS
       →TRS1
RRRPolo
           →TRS2
RRRPolo
             ...
               →TRS18
Dependency Pair Analysis



R contains no Dependency Pairs and therefore no SCCs.

Termination of R successfully shown.
Duration:
0:06 minutes