'Both the antecedent and consequent of \'self\' and \'other\' must unify.
:param other: ``ImpExpression``
:param bindings: ``BindingDict`` A dictionary of all current bindings
:return: ``BindingDict`` A new combined dictionary of of \'bindings\' and any new bindings
:raise UnificationException: If \'self\' and \'other\' cannot be unified in the context of \'bindings\''

def unify(self, other, bindings):

    assert isinstance(other, ImpExpression)
    try:
        return ((bindings + self.antecedent.unify(other.antecedent, bindings)) + self.consequent.unify(other.consequent, bindings))
    except VariableBindingException:
        raise UnificationException(self, other, bindings)
