Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
    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))
Example #8
0
    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))