'Replace every instance of \'variable\' with \'expression\'
:param variable: ``Variable`` The variable to replace
:param expression: ``Expression`` The expression with which to replace it
:param replace_bound: bool Should bound variables be replaced?
:param alpha_convert: bool Alpha convert automatically to avoid name clashes?'

def replace(self, variable, expression, replace_bound=False, alpha_convert=True):

    assert isinstance(variable, Variable), (u'%s    is    not    a    Variable' % variable)
    assert isinstance(expression, Expression), (u'%s    is    not    an    Expression' % expression)
    return self.visit_structured((lambda e: e.replace(variable, expression, replace_bound, alpha_convert)), self.__class__)
