(VAR x xs y z ) (RULES times(x, y) -> sum(generate(x, y)) generate(x, y) -> gen(x, y, 0) gen(x, y, z) -> if(ge(z, x), x, y, z) if(true, x, y, z) -> nil if(false, x, y, z) -> cons(y, gen(x, y, s(z))) sum(nil) -> 0 sum(cons(0, xs)) -> sum(xs) sum(cons(s(x), xs)) -> s(sum(cons(x, xs))) ge(x, 0) -> true ge(0, s(y)) -> false ge(s(x), s(y)) -> ge(x, y) )