(VAR N X XS Y YS ZS ) (RULES U12(tt) -> snd(splitAt(N, XS)) U22(tt) -> X U32(tt) -> N U42(tt) -> head(afterNth(N, XS)) U52(tt) -> Y U63(tt) -> U64(splitAt(N, XS)) U64(pair(YS, ZS)) -> pair(cons(X), ZS) U72(tt) -> XS U82(tt) -> fst(splitAt(N, XS)) U11(tt) -> U12(tt) U21(tt) -> U22(tt) U31(tt) -> U32(tt) U41(tt) -> U42(tt) U51(tt) -> U52(tt) U61(tt) -> U62(tt) U62(tt) -> U63(tt) U71(tt) -> U72(tt) U81(tt) -> U82(tt) afterNth(N, XS) -> U11(tt) fst(pair(X, Y)) -> U21(tt) head(cons(N)) -> U31(tt) natsFrom(N) -> cons(N) sel(N, XS) -> U41(tt) snd(pair(X, Y)) -> U51(tt) splitAt(0, XS) -> pair(nil, XS) splitAt(s(N), cons(X)) -> U61(tt) tail(cons(N)) -> U71(tt) take(N, XS) -> U81(tt) )