Why not define gcd a b as the largest (in 'normal' order) integer d such that the set of sums of multiples of a and b {na+mb | n <- Z, m <- Z} is equal to the set of multiples of d {nd | n <- Z}? Easy to understand, no talk of division, lattices, rings, ideals etcetera, and it covers the cases with 0. Cheers, Jan de Wit