def reuse_if_untouched(expr, args, evaluate=False):
    """
    Reconstruct `expr` iff any of the provided `args` is different than
    the corresponding arg in `expr.args`.
    """
    if all(a is b for a, b in zip(expr.args, args)):
        return expr
    else:
        return expr.func(*args, evaluate=evaluate)