Пример #1
0
def image(source, aut):
    bdd = aut.bdd
    n = len(aut.players)
    ivar = '_i'
    pre = bdd.false
    for i, p in aut.turns.iteritems():
        assert i < n, (i, n)
        assert p in aut.players, (p, aut.players)
        ip = (i + 1) % n
        (action,) = aut.action[p]
        qvars = aut.prime[p]
        u = symbolic.cofactor(source, ivar, i, bdd, aut.vars)
        u = bdd.apply('and', action, u)
        u = bdd.quantify(u, qvars, forall=False)
        u = _bdd.rename(u, bdd, aut.unprime[p])
        s = '{ivar} = {ip}'.format(ivar=ivar, ip=ip)
        turn = aut.add_expr(s)
        u = bdd.apply('and', turn, u)
        pre = bdd.apply('or', pre, u)
    return pre
Пример #2
0
def image(source, aut):
    bdd = aut.bdd
    n = len(aut.players)
    ivar = '_i'
    pre = bdd.false
    for i, p in aut.turns.items():
        assert i < n, (i, n)
        assert p in aut.players, (p, aut.players)
        ip = (i + 1) % n
        (action, ) = aut.action[p]
        qvars = aut.prime[p]
        u = symbolic.cofactor(source, ivar, i, bdd, aut.vars)
        u = bdd.apply('and', action, u)
        u = bdd.quantify(u, qvars, forall=False)
        u = _bdd.rename(u, bdd, aut.unprime[p])
        s = '{ivar} = {ip}'.format(ivar=ivar, ip=ip)
        turn = aut.add_expr(s)
        u = bdd.apply('and', turn, u)
        pre = bdd.apply('or', pre, u)
    return pre
Пример #3
0
def ue_preimage(target, team, aut):
    bdd = aut.bdd
    n = len(aut.players)
    ivar = '_i'
    pre = bdd.false
    for i, p in aut.turns.iteritems():
        assert i < n, (i, n)
        assert p in aut.players, (p, aut.players)
        ip = (i + 1) % n
        u = symbolic.cofactor(target, ivar, ip, bdd, aut.vars)
        u = _bdd.rename(u, bdd, aut.prime[p])
        (action,) = aut.action[p]
        if p not in team:
            u = bdd.apply('not', u)
        u = bdd.apply('and', action, u)
        u = bdd.quantify(u, aut.unprime[p], forall=False)
        if p not in team:
            u = bdd.apply('not', u)
        s = '{ivar} = {i}'.format(ivar=ivar, i=i)
        turn = aut.add_expr(s)
        u = bdd.apply('and', turn, u)
        pre = bdd.apply('or', pre, u)
    return pre
Пример #4
0
def preimage(target, aut):
    """Predecessors with interleaving repr."""
    bdd = aut.bdd
    n = len(aut.players)
    ivar = '_i'
    # needed to force extra steps outside
    pre = bdd.false
    for i, p in aut.turns.iteritems():
        assert i < n, (i, n)
        assert p in aut.players, (p, aut.players)
        ip = (i + 1) % n
        u = symbolic.cofactor(target, ivar, ip, bdd, aut.vars)
        (action,) = aut.action[p]
        u = _bdd.rename(u, bdd, aut.prime[p])
        u = bdd.apply('and', action, u)
        qvars = aut.unprime[p]
        u = bdd.quantify(u, qvars, forall=False)
        s = '{ivar} = {i}'.format(ivar=ivar, i=i)
        turn = aut.add_expr(s)
        u = bdd.apply('and', turn, u)
        # TODO: revisit the index behavior
        pre = bdd.apply('or', pre, u)
    return pre
Пример #5
0
def ue_preimage(target, team, aut):
    bdd = aut.bdd
    n = len(aut.players)
    ivar = '_i'
    pre = bdd.false
    for i, p in aut.turns.items():
        assert i < n, (i, n)
        assert p in aut.players, (p, aut.players)
        ip = (i + 1) % n
        u = symbolic.cofactor(target, ivar, ip, bdd, aut.vars)
        u = _bdd.rename(u, bdd, aut.prime[p])
        (action, ) = aut.action[p]
        if p not in team:
            u = bdd.apply('not', u)
        u = bdd.apply('and', action, u)
        u = bdd.quantify(u, aut.unprime[p], forall=False)
        if p not in team:
            u = bdd.apply('not', u)
        s = '{ivar} = {i}'.format(ivar=ivar, i=i)
        turn = aut.add_expr(s)
        u = bdd.apply('and', turn, u)
        pre = bdd.apply('or', pre, u)
    return pre
Пример #6
0
def preimage(target, aut):
    """Predecessors with interleaving repr."""
    bdd = aut.bdd
    n = len(aut.players)
    ivar = '_i'
    # needed to force extra steps outside
    pre = bdd.false
    for i, p in aut.turns.items():
        assert i < n, (i, n)
        assert p in aut.players, (p, aut.players)
        ip = (i + 1) % n
        u = symbolic.cofactor(target, ivar, ip, bdd, aut.vars)
        (action, ) = aut.action[p]
        u = _bdd.rename(u, bdd, aut.prime[p])
        u = bdd.apply('and', action, u)
        qvars = aut.unprime[p]
        u = bdd.quantify(u, qvars, forall=False)
        s = '{ivar} = {i}'.format(ivar=ivar, i=i)
        turn = aut.add_expr(s)
        u = bdd.apply('and', turn, u)
        # TODO: revisit the index behavior
        pre = bdd.apply('or', pre, u)
    return pre