(VAR x y z) (RULES @(nil, y) -> y @(.(x,y), z) -> .(x, @(y,z)) rev(nil) -> nil rev(.(x,y)) -> @(rev(y), .(x, nil)) rev(rev(x)) -> x )