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
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
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
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
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
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