def _fp(funct, start):
    """
    Return the fixpoint of funct, as a BDD, starting with start BDD.
    
    mu Z.f(Z) least fixpoint is implemented with _fp(funct, false).
    nu Z.f(Z) greatest fixpoint is implemented with _fp(funct, true).
    """
    old = start
    new = funct(start)
    while old != new:
        old = new
        new = funct(old)
    return old
