def least_fixpoint(transitions, bdd):
    """Return ancestor nodes."""
    target = bdd.add_expr('!x0 & x1')
    q = bdd.false
    qold = None
    prime = {'x0': "x0'", 'x1': "x1'"}
    qvars = {"x0'", "x1'"}
    while q != qold:
        qold = q
        next_q = bdd.let(prime, q)
        u = transitions & next_q
        pred = bdd.exist(qvars, u)
        q = q | pred | target
    return q
