(VAR b x y z ) (RULES le(0, y) -> true le(s(x), 0) -> false le(s(x), s(y)) -> le(x, y) minus(x, x) -> 0 minus(x, 0) -> x minus(0, x) -> 0 minus(s(x), s(y)) -> minus(x, y) isZero(0) -> true isZero(s(x)) -> false mod(x, y) -> if_mod(isZero(y), le(y, x), x, y, minus(x, y)) if_mod(true, b, x, y, z) -> divByZeroError if_mod(false, false, x, y, z) -> x if_mod(false, true, x, y, z) -> mod(z, y) )