We can merge unless the merge results in an empty set -- a
        contradiction

def merge(self, other):
        """
        We can merge unless the merge results in an empty set -- a
        contradiction
        """
        other = self.coerce(other)
        if self.is_equal(other):
            # pick among dependencies
            return self
        elif self.is_contradictory(other):
            raise Contradiction("Cannot merge set with %s" % (str(other)))
        else:
            # self may be a subset of other 
            # or other may be a subset of self
            # merge mutual information
            if self.values:
                self.values = self.values.union(other.values)
            else:
                self.values = other.values.copy()
        return self