code: def is_contradictory(self, other):
          
          if not self.is_domain_equal(other):
              return True
          # what would happen if the two were combined? 
          test_lower = self.lower.union(other.lower)
          test_upper = self.upper.union(other.upper)
          # if there is a path from lower to upper nodes, we're in trouble:
          domain = self.get_domain()
          for low in test_lower:
              for high in test_upper:
                  if low != high and has_path(domain, low, high):
                      return True
          # lastly, build a merged ordering and see if it has 0 members
          test = self.__class__()
          test.lower = test_lower
          test.upper = test_upper
          return len(test) == 0
docs: Does the merge yield the empty set?