def test_nfair_si_nfair_model(self): fsm = self.nfair_model() s0 = eval_simple_expression(fsm, "state = s0") s1 = eval_simple_expression(fsm, "state = s1") s2 = eval_simple_expression(fsm, "state = s2") a0 = eval_simple_expression(fsm, "a.a = 0") a1 = eval_simple_expression(fsm, "a.a = 1") a2 = eval_simple_expression(fsm, "a.a = 2") b0 = eval_simple_expression(fsm, "b.a = 0") b1 = eval_simple_expression(fsm, "b.a = 1") true = eval_simple_expression(fsm, "TRUE") false = eval_simple_expression(fsm, "FALSE") nfgsia = nfair_gamma_si(fsm, {'a'}) nfgsib = nfair_gamma_si(fsm, {'b'}) self.assertTrue(s0 & a1 & fsm.protocol({'a'}) <= nfgsia) self.assertTrue(s1 & a0 & fsm.protocol({'a'}) <= nfgsia) self.assertEqual( (s0 & a1 & fsm.protocol({'a'})) | (s1 & a0 & fsm.protocol({'a'})), nfgsia) self.assertEqual(s1 & b0 & fsm.protocol({'b'}), nfgsib)
def test_nfair_si_nfair_model(self): fsm = self.nfair_model() s0 = eval_simple_expression(fsm, "state = s0") s1 = eval_simple_expression(fsm, "state = s1") s2 = eval_simple_expression(fsm, "state = s2") a0 = eval_simple_expression(fsm, "a.a = 0") a1 = eval_simple_expression(fsm, "a.a = 1") a2 = eval_simple_expression(fsm, "a.a = 2") b0 = eval_simple_expression(fsm, "b.a = 0") b1 = eval_simple_expression(fsm, "b.a = 1") true = eval_simple_expression(fsm, "TRUE") false = eval_simple_expression(fsm, "FALSE") nfgsia = nfair_gamma_si(fsm, {"a"}) nfgsib = nfair_gamma_si(fsm, {"b"}) self.assertTrue(s0 & a1 & fsm.protocol({"a"}) <= nfgsia) self.assertTrue(s1 & a0 & fsm.protocol({"a"}) <= nfgsia) self.assertEqual((s0 & a1 & fsm.protocol({"a"})) | (s1 & a0 & fsm.protocol({"a"})), nfgsia) self.assertEqual(s1 & b0 & fsm.protocol({"b"}), nfgsib)
def test_nfair_gamma_si(self): fsm = self.cardgame_post_fair() s0 = eval_simple_expression(fsm, "step = 0") s1 = eval_simple_expression(fsm, "step = 1") s2 = eval_simple_expression(fsm, "step = 2") pa = eval_simple_expression(fsm, "pcard = Ac") pk = eval_simple_expression(fsm, "pcard = K") pq = eval_simple_expression(fsm, "pcard = Q") da = eval_simple_expression(fsm, "dcard = Ac") dk = eval_simple_expression(fsm, "dcard = K") dq = eval_simple_expression(fsm, "dcard = Q") dda = eval_simple_expression(fsm, "ddcard = Ac") ddk = eval_simple_expression(fsm, "ddcard = K") ddq = eval_simple_expression(fsm, "ddcard = Q") pan = eval_simple_expression(fsm, "player.action = none") pak = eval_simple_expression(fsm, "player.action = keep") pas = eval_simple_expression(fsm, "player.action = swap") dan = eval_simple_expression(fsm, "dealer.action = none") win = eval_simple_expression(fsm, "win") lose = eval_simple_expression(fsm, "lose") true = eval_simple_expression(fsm, "TRUE") false = eval_simple_expression(fsm, "FALSE") agents = {'dealer'} strats = split(fsm, fsm.protocol(agents), agents) strat = strats.pop() nf = ~fsm.fairness_constraints[0] & fsm.bddEnc.statesInputsMask self.assertEqual( nf & fsm.pre_strat_si(BDD.true(fsm.bddEnc.DDmanager), agents, strat), nf & fsm.pre_strat_si(BDD.true(fsm.bddEnc.DDmanager), agents, strat) & fsm.bddEnc.statesInputsMask) nfp = nfair_gamma_si(fsm, {'player'}) nfd = nfair_gamma_si(fsm, {'dealer'}) self.assertTrue(nfp.is_false()) self.assertTrue(fsm.protocol({'dealer'}) <= nfd)
def test_nfair_gamma_si(self): fsm = self.cardgame_post_fair() s0 = eval_simple_expression(fsm, "step = 0") s1 = eval_simple_expression(fsm, "step = 1") s2 = eval_simple_expression(fsm, "step = 2") pa = eval_simple_expression(fsm, "pcard = Ac") pk = eval_simple_expression(fsm, "pcard = K") pq = eval_simple_expression(fsm, "pcard = Q") da = eval_simple_expression(fsm, "dcard = Ac") dk = eval_simple_expression(fsm, "dcard = K") dq = eval_simple_expression(fsm, "dcard = Q") dda = eval_simple_expression(fsm, "ddcard = Ac") ddk = eval_simple_expression(fsm, "ddcard = K") ddq = eval_simple_expression(fsm, "ddcard = Q") pan = eval_simple_expression(fsm, "player.action = none") pak = eval_simple_expression(fsm, "player.action = keep") pas = eval_simple_expression(fsm, "player.action = swap") dan = eval_simple_expression(fsm, "dealer.action = none") win = eval_simple_expression(fsm, "win") lose = eval_simple_expression(fsm, "lose") true = eval_simple_expression(fsm, "TRUE") false = eval_simple_expression(fsm, "FALSE") agents = {"dealer"} strats = split(fsm, fsm.protocol(agents), agents) strat = strats.pop() nf = ~fsm.fairness_constraints[0] & fsm.bddEnc.statesInputsMask self.assertEqual( nf & fsm.pre_strat_si(BDD.true(fsm.bddEnc.DDmanager), agents, strat), nf & fsm.pre_strat_si(BDD.true(fsm.bddEnc.DDmanager), agents, strat) & fsm.bddEnc.statesInputsMask, ) nfp = nfair_gamma_si(fsm, {"player"}) nfd = nfair_gamma_si(fsm, {"dealer"}) self.assertTrue(nfp.is_false()) self.assertTrue(fsm.protocol({"dealer"}) <= nfd)
def test_nfair_gamma_si_transmission_post_fair(self): fsm = self.transmission_post_fair() transmit = eval_simple_expression(fsm, "transmitter.action = transmit") block = eval_simple_expression(fsm, "transmitter.action = block") wait = eval_simple_expression(fsm, "sender.action = wait") send = eval_simple_expression(fsm, "sender.action = send") received = eval_simple_expression(fsm, "received") sent = eval_simple_expression(fsm, "sent") waited = eval_simple_expression(fsm, "waited") transmitted = eval_simple_expression(fsm, "transmitted") blocked = eval_simple_expression(fsm, "blocked") true = eval_simple_expression(fsm, "TRUE") false = eval_simple_expression(fsm, "FALSE") nfgsit = nfair_gamma_si(fsm, {'transmitter'}) self.assertTrue(fsm.protocol({'transmitter'}) <= nfgsit) nfgsis = nfair_gamma_si(fsm, {'sender'}) self.assertEqual(false, nfgsis)
def test_nfair_gamma_si_transmission_post_fair(self): fsm = self.transmission_post_fair() transmit = eval_simple_expression(fsm, "transmitter.action = transmit") block = eval_simple_expression(fsm, "transmitter.action = block") wait = eval_simple_expression(fsm, "sender.action = wait") send = eval_simple_expression(fsm, "sender.action = send") received = eval_simple_expression(fsm, "received") sent = eval_simple_expression(fsm, "sent") waited = eval_simple_expression(fsm, "waited") transmitted = eval_simple_expression(fsm, "transmitted") blocked = eval_simple_expression(fsm, "blocked") true = eval_simple_expression(fsm, "TRUE") false = eval_simple_expression(fsm, "FALSE") nfgsit = nfair_gamma_si(fsm, {"transmitter"}) self.assertTrue(fsm.protocol({"transmitter"}) <= nfgsit) nfgsis = nfair_gamma_si(fsm, {"sender"}) self.assertEqual(false, nfgsis)
def test_cex_si(self): fsm = self.cardgame() s0 = eval_simple_expression(fsm, "step = 0") s1 = eval_simple_expression(fsm, "step = 1") s2 = eval_simple_expression(fsm, "step = 2") pa = eval_simple_expression(fsm, "pcard = Ac") pk = eval_simple_expression(fsm, "pcard = K") pq = eval_simple_expression(fsm, "pcard = Q") da = eval_simple_expression(fsm, "dcard = Ac") dk = eval_simple_expression(fsm, "dcard = K") dq = eval_simple_expression(fsm, "dcard = Q") dda = eval_simple_expression(fsm, "ddcard = Ac") ddk = eval_simple_expression(fsm, "ddcard = K") ddq = eval_simple_expression(fsm, "ddcard = Q") pan = eval_simple_expression(fsm, "player.action = none") pak = eval_simple_expression(fsm, "player.action = keep") pas = eval_simple_expression(fsm, "player.action = swap") dan = eval_simple_expression(fsm, "dealer.action = none") daak = eval_simple_expression(fsm, "dealer.action = dealAK") win = eval_simple_expression(fsm, "win") lose = eval_simple_expression(fsm, "lose") true = eval_simple_expression(fsm, "TRUE") false = eval_simple_expression(fsm, "FALSE") dealercube = fsm.inputs_cube_for_agents({'dealer'}) playercube = fsm.inputs_cube_for_agents({'player'}) self.assertTrue(pk & dq & s2 & pan & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si( fsm, {'player'}, fsm.reachable_states & win)) self.assertTrue( pk & dq & s2 & pan & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si( fsm, {'player'}, fsm.reachable_states & win, pk & dq & pan)) self.assertTrue(pk & dq & s1 & pak & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si( fsm, {'player'}, fsm.reachable_states & win, pak)) self.assertFalse(pk & dq & s1 & pas & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si( fsm, {'player'}, fsm.reachable_states & win, pak)) self.assertTrue(pa & dq & s1 & pas & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si( fsm, {'player'}, fsm.reachable_states & win)) self.assertFalse(pa & dq & s1 & pas & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si( fsm, {'player'}, fsm.reachable_states & win, pak)) strat = (s0 & daak & fsm.protocol({'dealer'})) | ( (s2) & fsm.protocol({'dealer'})) self.assertTrue(nfair_gamma_si(fsm, {'dealer'}, strat).is_false()) self.assertEqual(pa, nfair_gamma_si(fsm, {'dealer'}, strat) | pa) cexsi = cex_si(fsm, {'dealer'}, fsm.reachable_states & pa, strat) self.assertTrue(fsm.init <= cexsi.forsome(fsm.bddEnc.inputsCube))
def test_cex_si(self): fsm = self.cardgame() s0 = eval_simple_expression(fsm, "step = 0") s1 = eval_simple_expression(fsm, "step = 1") s2 = eval_simple_expression(fsm, "step = 2") pa = eval_simple_expression(fsm, "pcard = Ac") pk = eval_simple_expression(fsm, "pcard = K") pq = eval_simple_expression(fsm, "pcard = Q") da = eval_simple_expression(fsm, "dcard = Ac") dk = eval_simple_expression(fsm, "dcard = K") dq = eval_simple_expression(fsm, "dcard = Q") dda = eval_simple_expression(fsm, "ddcard = Ac") ddk = eval_simple_expression(fsm, "ddcard = K") ddq = eval_simple_expression(fsm, "ddcard = Q") pan = eval_simple_expression(fsm, "player.action = none") pak = eval_simple_expression(fsm, "player.action = keep") pas = eval_simple_expression(fsm, "player.action = swap") dan = eval_simple_expression(fsm, "dealer.action = none") daak = eval_simple_expression(fsm, "dealer.action = dealAK") win = eval_simple_expression(fsm, "win") lose = eval_simple_expression(fsm, "lose") true = eval_simple_expression(fsm, "TRUE") false = eval_simple_expression(fsm, "FALSE") dealercube = fsm.inputs_cube_for_agents({"dealer"}) playercube = fsm.inputs_cube_for_agents({"player"}) self.assertTrue( pk & dq & s2 & pan & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si(fsm, {"player"}, fsm.reachable_states & win) ) self.assertTrue( pk & dq & s2 & pan & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si(fsm, {"player"}, fsm.reachable_states & win, pk & dq & pan) ) self.assertTrue( pk & dq & s1 & pak & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si(fsm, {"player"}, fsm.reachable_states & win, pak) ) self.assertFalse( pk & dq & s1 & pas & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si(fsm, {"player"}, fsm.reachable_states & win, pak) ) self.assertTrue( pa & dq & s1 & pas & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si(fsm, {"player"}, fsm.reachable_states & win) ) self.assertFalse( pa & dq & s1 & pas & fsm.reachable_states & fsm.bddEnc.statesInputsMask <= cex_si(fsm, {"player"}, fsm.reachable_states & win, pak) ) strat = (s0 & daak & fsm.protocol({"dealer"})) | ((s2) & fsm.protocol({"dealer"})) self.assertTrue(nfair_gamma_si(fsm, {"dealer"}, strat).is_false()) self.assertEqual(pa, nfair_gamma_si(fsm, {"dealer"}, strat) | pa) cexsi = cex_si(fsm, {"dealer"}, fsm.reachable_states & pa, strat) self.assertTrue(fsm.init <= cexsi.forsome(fsm.bddEnc.inputsCube))