(VAR f x xs y ys ) (RULES le(0, y) -> true le(s(x), 0) -> false le(s(x), s(y)) -> le(x, y) minus(x, 0) -> x minus(s(x), s(y)) -> minus(x, y) gcd(0, y) -> 0 gcd(s(x), 0) -> 0 gcd(s(x), s(y)) -> if(le(y, x), s(x), s(y)) if(true, s(x), s(y)) -> gcd(minus(x, y), s(y)) if(false, s(x), s(y)) -> gcd(minus(y, x), s(x)) zipWith(f, xs, nil) -> nil zipWith(f, nil, ys) -> nil zipWith(f, cons(x, xs), cons(y, ys)) -> cons(, zipWith(f, xs, ys)) gcdlists(xs, ys) -> zipWith(, xs, ys) )