difference operation implementation