(VAR IL L M N T ) (RULES uTake2(tt) -> cons(N) uLength(tt) -> s(length(L)) and(tt, T) -> T isNatIList -> isNatList isNat -> tt isNat -> isNat isNat -> isNatList isNatIList -> tt isNatIList -> and(isNat, isNatIList) isNatList -> tt isNatList -> and(isNat, isNatList) isNatList -> and(isNat, isNatIList) zeros -> cons(0) take(0, IL) -> uTake1(isNatIList) uTake1(tt) -> nil take(s(M), cons(N)) -> uTake2(and(isNat, and(isNat, isNatIList))) length(cons(N)) -> uLength(and(isNat, isNatList)) )