(VAR N X XS YS ZS )
(STRATEGY CONTEXTSENSITIVE
        (natsFrom 1) 
        (cons 1) 
        (s 1) 
        (fst 1) 
        (pair 1 2) 
        (snd 1) 
        (splitAt 1 2) 
        (0 ) 
        (nil ) 
        (u 1) 
        (head 1) 
        (tail 1) 
        (sel 1 2) 
        (afterNth 1 2) 
        (take 1 2) 
)
(RULES 
        natsFrom(N) -> cons(N, natsFrom(s(N)))
        fst(pair(XS, YS)) -> XS
        snd(pair(XS, YS)) -> YS
        splitAt(0, XS) -> pair(nil, XS)
        splitAt(s(N), cons(X, XS)) -> u(splitAt(N, XS), N, X, XS)
        u(pair(YS, ZS), N, X, XS) -> pair(cons(X, YS), ZS)
        head(cons(N, XS)) -> N
        tail(cons(N, XS)) -> XS
        sel(N, XS) -> head(afterNth(N, XS))
        take(N, XS) -> fst(splitAt(N, XS))
        afterNth(N, XS) -> snd(splitAt(N, XS))
        
)