Problem: 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())) Proof: Fresh Variable Processor: loop length: 1 terms: uTake2(tt()) context: cons([]) substitution: N -> uTake2(tt()) Qed