implement set operations