NO Problem 1: (VAR v_NonEmpty:S IL:S L:S M:S N:S T:S) (RULES and(tt,T:S) -> T:S isNat -> isNat isNat -> isNatList isNat -> tt isNatIList -> and(isNat,isNatIList) isNatIList -> isNatList isNatIList -> tt isNatList -> and(isNat,isNatIList) isNatList -> and(isNat,isNatList) isNatList -> tt length(cons(N:S)) -> uLength(and(isNat,isNatList)) take(0,IL:S) -> uTake1(isNatIList) take(s(M:S),cons(N:S)) -> uTake2(and(isNat,and(isNat,isNatIList))) uLength(tt) -> s(length(L:S)) uTake1(tt) -> nil uTake2(tt) -> cons(N:S) zeros -> cons(0) ) Problem 1: Extra Variables Processor: -> Rules: and(tt,T:S) -> T:S isNat -> isNat isNat -> isNatList isNat -> tt isNatIList -> and(isNat,isNatIList) isNatIList -> isNatList isNatIList -> tt isNatList -> and(isNat,isNatIList) isNatList -> and(isNat,isNatList) isNatList -> tt length(cons(N:S)) -> uLength(and(isNat,isNatList)) take(0,IL:S) -> uTake1(isNatIList) take(s(M:S),cons(N:S)) -> uTake2(and(isNat,and(isNat,isNatIList))) uLength(tt) -> s(length(L:S)) uTake1(tt) -> nil uTake2(tt) -> cons(N:S) zeros -> cons(0) -> The system has extra variables. The problem is infinite.