(VAR X Y ) (RULES +(X, 0) -> X +(X, s(Y)) -> s(+(X, Y)) double(X) -> +(X, X) f(0, s(0), X) -> f(X, double(X), X) g(X, Y) -> X g(X, Y) -> Y )