(from AG01 3.12) (VAR x y n) (RULES app(nil,y) -> y app(add(n,x),y) -> add(n,app(x,y)) reverse(nil) -> nil reverse(add(n,x)) -> app(reverse(x),add(n,nil)) shuffle(nil) -> nil shuffle(add(n,x)) -> add(n,shuffle(reverse(x))) )