Problem: splitAt(s(N),cons(X)) -> u(splitAt(N,XS)) u(pair(YS,ZS)) -> pair(cons(X),ZS) tail(cons(N)) -> XS natsFrom(N) -> cons(N) fst(pair(XS,YS)) -> XS snd(pair(XS,YS)) -> YS splitAt(0(),XS) -> pair(nil(),XS) head(cons(N)) -> N sel(N,XS) -> head(afterNth(N,XS)) take(N,XS) -> fst(splitAt(N,XS)) afterNth(N,XS) -> snd(splitAt(N,XS)) Proof: Fresh Variable Processor: loop length: 1 terms: splitAt(s(N),cons(X)) context: u(splitAt(N,[])) substitution: XS -> splitAt(s(N),cons(X)) Qed