Exemple #1
0
def multiple_env_actions_check(solver='omega'):
    """Two env players, 3 states controlled by sys.

    sys wins marginally, due to assumption on
    next combination of actions by env players.
    """
    # 1 <---> 2
    # 1  ---> 3

    env_actions = [
        {
            'name': 'env_alice',
            'values': transys.MathSet({'left', 'right'})
        },
        {
            'name': 'env_bob',
            'values': transys.MathSet({'bleft', 'bright'})
        }
    ]

    sys = transys.FTS(env_actions)
    sys.states.add_from({'s1', 's2', 's3'})
    sys.states.initial.add_from({'s1'})

    sys.add_edge('s1', 's2', env_alice='left', env_bob='bright')
    sys.add_edge('s2', 's1', env_alice='left', env_bob='bright')
    # at state 3 sys loses
    sys.add_edge('s1', 's3', env_alice='right', env_bob='bleft')

    logging.debug(sys)

    env_safe = {('(loc = "s1") -> X( (env_alice = "left") && '
                 '(env_bob = "bright") )')}
    sys_prog = {'loc = "s1"', 'loc = "s2"'}

    specs = spec.GRSpec(
        env_safety=env_safe,
        sys_prog=sys_prog,
        moore=False,
        plus_one=False,
        qinit='\A \E')
    r = synth.is_realizable(specs, sys=sys, solver=solver)
    assert r
    # slightly relax assumption
    specs = spec.GRSpec(
        sys_prog=sys_prog,
        moore=False,
        plus_one=False,
        qinit='\A \E')
    r = synth.is_realizable(specs, sys=sys, solver=solver)
    assert not r
Exemple #2
0
def fill_fts(fts):
    """Add a trap state and direct all outgoing actions to it"""
    fts.add_node('trap')
    for node in fts.nodes():
        actions = transys.MathSet(attr['sys_actions']
                                  for _, _, attr in fts.transitions.find(node))
        for action in fts.sys_actions:
            if action not in actions:
                fts.add_edge(node, 'trap', sys_actions=action)