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