-- This function is not well handled by
-- regular-grammar based inversion.
reverse(x) = rev(x,Nil)

rev(Nil,      y) = y
rev(Cons(a,x),y) = rev(x,Cons(a,y))
