def test_cardgame_post_fair_pre_filtering(self):
        fsm = self.cardgame_post_fair()

        self.assertTrue(
            check(fsm,
                  parseATLK(
                      "K<'player'>'pcard=none' & K<'player'>'dcard=none'")[0],
                  implementation="symbolic",
                  pre_filtering=True))
        self.assertTrue(
            check(
                fsm,
                parseATLK(
                    "AG('step = 1' -> ~(K<'player'> 'dcard=Ac' | K<'player'> 'dcard=K' | K<'player'> 'dcard=Q'))"
                )[0],
                implementation="symbolic",
                pre_filtering=True))

        self.assertTrue(
            check(fsm,
                  parseATLK("AG('step = 1' -> ~<'player'> X 'win')")[0],
                  implementation="symbolic",
                  pre_filtering=True))
        self.assertTrue(
            check(fsm,
                  parseATLK("['player'] X 'pcard=Ac'")[0],
                  implementation="symbolic",
                  pre_filtering=True))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> X 'pcard=Ac'")[0],
                  implementation="symbolic",
                  pre_filtering=True))
Example #2
0
    def test_counters_FSF(self):
        fsm = self.counters()

        from pynusmv_tools.atlkPO.evalGen import split
        agents = {'a1', 'a2'}
        strats = split(fsm,
                       fsm.protocol(agents) & fsm.reachable_states,
                       agents,
                       semantics='individual')
        self.assertEqual(len(list(strats)), 16)

        config.partial.filtering = True
        self.assertTrue(
            check(fsm,
                  parseATLK("<'a1', 'a2'> F 'v1 & v2'")[0],
                  semantics="individual",
                  implem="partialSI"))
        self.assertFalse(
            check(fsm,
                  parseATLK("<'a1', 'a2'> G '!v1 & !v2'")[0],
                  semantics="individual",
                  implem="partialSI"))
        self.assertTrue(
            check(
                fsm,
                parseATLK("AG('!v1 & !v2' -> <'a1', 'a2'> G '!v1 | !v2')")[0],
                semantics="individual",
                implem="partialSI"))
        config.partial.filtering = False
Example #3
0
    def test_coins(self):
        fsm = self.coins()

        from pynusmv_tools.atlkPO.evalGen import split
        agents = {'a1', 'a2'}
        strats = split(fsm,
                       fsm.protocol(agents) & fsm.reachable_states,
                       agents,
                       semantics='individual')
        self.assertEqual(len(list(strats)), 64)

        self.assertFalse(
            check(fsm,
                  parseATLK("<'a1', 'a2'> F 'result = win'")[0],
                  semantics="individual"))
        self.assertFalse(
            check(fsm,
                  parseATLK("<'a1', 'a2'> F 'result = win'")[0],
                  semantics="individual",
                  variant="FSF"))
        self.assertFalse(
            check(fsm,
                  parseATLK("<'a1', 'a2'> F 'result = win'")[0],
                  semantics="individual",
                  variant="FS"))
Example #4
0
 def test_fail(self):
     kos = ["", "'test", "A<'test'>H 'q'", "O", "A<'a'>E<'e'>G 'true'",
            "E<'ac'>[A<'ac'>['a' E<'ac'>['b' W 'c'] W 'd'] "
            "U A<'ac'>['e' U 'f']]", "A<'t't'>G 'q'"]
     
     for s in kos:
         with self.assertRaises(ParseException):
             parseATLK(s)
    def test_cardgame(self):
        fsm = self.cardgame()

        self.assertTrue(check(fsm, parseATLK("<'dealer'> X 'pcard=Ac'")[0]))
        self.assertFalse(check(fsm, parseATLK("<'dealer'> G ~'win'")[0]))
        self.assertTrue(check(fsm, parseATLK("['player'] X 'pcard=Ac'")[0]))
        self.assertTrue(check(fsm, parseATLK("['dealer'] F 'win'")[0]))
        self.assertTrue(check(fsm, parseATLK("<'player'> F 'win'")[0]))
Example #6
0
    def test_tpfni_partial_vs_normal(self):
        fsm = self.transmission_post_fair()

        self.assertTrue(check(fsm, parseATLK("<'sender'> F 'received'")[0]))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'sender'> F 'received'")[0],
                  implem="partial"))
    def test_cardgame_post_fair_pre_filtering(self):
        fsm = self.cardgame_post_fair()

        self.assertTrue(
            check(fsm,
                  parseATLK(
                      "K<'player'>'pcard=none' & K<'player'>'dcard=none'")[0],
                  implementation="naive",
                  pre_filtering=True))
        self.assertTrue(
            check(
                fsm,
                parseATLK(
                    "AG('step = 1' -> ~(K<'player'> 'dcard=Ac' | K<'player'> 'dcard=K' | K<'player'> 'dcard=Q'))"
                )[0],
                implementation="naive",
                pre_filtering=True))

        self.assertTrue(
            check(fsm,
                  parseATLK("AG('step = 1' -> ~<'player'> X 'win')")[0],
                  implementation="naive",
                  pre_filtering=True))
        self.assertFalse(
            check(fsm,
                  parseATLK("['dealer'] F 'win'")[0],
                  implementation="naive",
                  pre_filtering=True))
        self.assertTrue(
            check(fsm,
                  parseATLK("['player'] X 'pcard=Ac'")[0],
                  implementation="naive",
                  pre_filtering=True))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> X 'pcard=Ac'")[0],
                  implementation="naive",
                  pre_filtering=True))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> G ~'win'")[0],
                  implementation="naive",
                  pre_filtering=True))

        # Player can win
        self.assertTrue(
            check(fsm,
                  parseATLK("<'player'> F 'win'")[0],
                  implementation="naive",
                  pre_filtering=True))
        # Dealer can avoid fairness
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> F 'FALSE'")[0],
                  implementation="naive",
                  pre_filtering=True))
Example #8
0
    def test_cardgame_post_fair_not_improved(self):
        fsm = self.cardgame_post_fair()

        self.assertTrue(
            check(fsm,
                  parseATLK(
                      "K<'player'>'pcard=none' & K<'player'>'dcard=none'")[0],
                  implem="partialSI",
                  semantics="individual"))
        self.assertTrue(
            check(
                fsm,
                parseATLK(
                    "AG('step = 1' -> ~(K<'player'> 'dcard=Ac' | K<'player'> 'dcard=K' | K<'player'> 'dcard=Q'))"
                )[0],
                implem="partialSI",
                semantics="individual"))

        self.assertTrue(
            check(fsm,
                  parseATLK("AG('step = 1' -> ~<'player'> X 'win')")[0],
                  implem="partialSI",
                  semantics="individual"))
        self.assertFalse(
            check(fsm,
                  parseATLK("['dealer'] F 'win'")[0],
                  implem="partialSI",
                  semantics="individual"))
        self.assertTrue(
            check(fsm,
                  parseATLK("['player'] X 'pcard=Ac'")[0],
                  implem="partialSI",
                  semantics="individual"))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> X 'pcard=Ac'")[0],
                  implem="partialSI",
                  semantics="individual"))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> G ~'win'")[0],
                  implem="partialSI",
                  semantics="individual"))

        # Player can win
        self.assertTrue(
            check(fsm,
                  parseATLK("<'player'> F 'win'")[0],
                  implem="partialSI",
                  semantics="individual"))
        # Dealer can avoid fairness
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> F 'FALSE'")[0],
                  implem="partialSI",
                  semantics="individual"))
    def test_cardgame_post_fair_others_pre_filtering(self):
        fsm = self.cardgame_post_fair()

        # Player can win
        self.assertTrue(
            check(fsm,
                  parseATLK("<'player'> F 'win'")[0],
                  implementation="symbolic",
                  pre_filtering=True))
        # Dealer can avoid fairness
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> F 'FALSE'")[0],
                  implementation="symbolic",
                  pre_filtering=True))
Example #10
0
    def test_cardgame_post_fair_improved_symbolic(self):
        fsm = self.cardgame_post_fair()

        self.assertFalse(
            check(fsm,
                  parseATLK("<'player'> X 'win'")[0],
                  implem="symbolic",
                  variant="FSF"))

        self.assertTrue(
            check(fsm,
                  parseATLK(
                      "K<'player'>'pcard=none' & K<'player'>'dcard=none'")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #11
0
 def test_cardgame_no_x_win_pre_filtering(self):
     fsm = self.cardgame()
     self.assertTrue(
         check(fsm,
               parseATLK("AG('step = 1' -> ~<'player'> X 'win')")[0],
               implementation="early",
               pre_filtering=True))
Example #12
0
 def test_cardgame_dealer_x_pcard_pre_filtering(self):
     fsm = self.cardgame()
     self.assertTrue(
         check(fsm,
               parseATLK("<'dealer'> X 'pcard=Ac'")[0],
               implementation="early",
               pre_filtering=True))
Example #13
0
 def test_cardgame_dealer_not_win_pre_filtering(self):
     fsm = self.cardgame()
     self.assertFalse(
         check(fsm,
               parseATLK("<'dealer'> G ~'win'")[0],
               implementation="early",
               pre_filtering=True))
 def test_cardgame_post_fair_dealer_f_win_pre_filtering(self):
     fsm = self.cardgame_post_fair()
     self.assertFalse(
         check(fsm,
               parseATLK("['dealer'] F 'win'")[0],
               implementation="symbolic",
               pre_filtering=True))
 def test_cardgame_post_fair_player_x_pcard_pre_filtering(self):
     fsm = self.cardgame_post_fair()
     self.assertTrue(
         check(fsm,
               parseATLK("['player'] X 'pcard=Ac'")[0],
               implementation="symbolic",
               pre_filtering=True))
 def test_cardgame_player_win_pre_filtering(self):
     fsm = self.cardgame()
     self.assertFalse(
         check(fsm,
               parseATLK("<'player'> F 'win'")[0],
               implementation="symbolic",
               pre_filtering=True))
 def test_cardgame_dealer_x_pcard(self):
     fsm = self.cardgame()
     self.assertTrue(
         check(fsm,
               parseATLK("<'dealer'> X 'pcard=Ac'")[0],
               implementation="symbolic",
               pre_filtering=False))
 def test_transmission_with_know_transmitter_never_received(self):
     fsm = self.transmission_with_knowledge()
     self.assertTrue(
         check(fsm,
               parseATLK("<'transmitter'> G ~'received'")[0],
               implementation="symbolic",
               pre_filtering=False))
Example #19
0
    def test_cardgame_post_fair_improved_symbolic4(self):
        fsm = self.cardgame_post_fair()

        self.assertTrue(
            check(fsm,
                  parseATLK("['player'] X 'pcard=Ac'")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #20
0
    def test_cardgame_post_fair_improved_symbolic12(self):
        fsm = self.cardgame_post_fair()

        self.assertFalse(
            check(fsm,
                  parseATLK("['dealer'] F 'win'")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #21
0
    def test_cardgame_post_fair_improved_symbolic11(self):
        fsm = self.cardgame_post_fair()

        self.assertTrue(
            check(fsm,
                  parseATLK("<'player'> F <'player'>[~'lose' U 'win']")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #22
0
    def test_cardgame_post_fair_improved_symbolic6(self):
        fsm = self.cardgame_post_fair()

        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> G ~'win'")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #23
0
    def test_cardgame_post_fair_improved_symbolic3(self):
        fsm = self.cardgame_post_fair()

        self.assertTrue(
            check(fsm,
                  parseATLK("AG('step = 1' -> ~<'player'> X 'win')")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #24
0
    def test_little2(self):
        fsm = self.little2()

        self.assertTrue(fsm.check_mas())
        self.assertTrue(
            check(fsm,
                  parseATLK("<'agent'> F 'o = 3'")[0],
                  implementation="naive"))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'agent'> F 'o = 3'")[0],
                  implementation="partial"))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'agent'> F 'o = 3'")[0],
                  implementation="early"))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'agent'> F 'o = 3'")[0],
                  implementation="naive",
                  pre_filtering=True))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'agent'> F 'o = 3'")[0],
                  implementation="partial",
                  pre_filtering=True))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'agent'> F 'o = 3'")[0],
                  implementation="early",
                  pre_filtering=True))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'agent'> F 'o = 3'")[0],
                  implementation="backward"))
Example #25
0
 def test_atom(self):
     s = "'c <= 3'"
     asts = parseATLK(s)
     self.assertEqual(len(asts), 1)
     
     ast = asts[0]
     self.assertTrue(isinstance(ast, Spec))
     self.assertTrue(isinstance(ast, Atom))
     self.assertEqual(ast.value, "c <= 3")
    def test_cardgame_ctl(self):
        fsm = self.cardgame()

        self.assertTrue(
            check(fsm,
                  parseATLK("EG ~'win'")[0],
                  implementation="symbolic",
                  pre_filtering=False))
        self.assertTrue(
            check(fsm,
                  parseATLK("EF 'win'")[0],
                  implementation="symbolic",
                  pre_filtering=False))
        self.assertFalse(
            check(fsm,
                  parseATLK("AF 'win'")[0],
                  implementation="symbolic",
                  pre_filtering=False))
Example #27
0
    def test_cardgame_post_fair_improved_symbolic9(self):
        fsm = self.cardgame_post_fair()

        self.assertTrue(
            check(fsm,
                  parseATLK("EG ~'win'")[0],
                  implem="symbolic",
                  variant="FSF"))
        self.assertTrue(
            check(fsm,
                  parseATLK("EF 'win'")[0],
                  implem="symbolic",
                  variant="FSF"))
        self.assertFalse(
            check(fsm,
                  parseATLK("AF 'win'")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #28
0
    def test_cardgame_post_fair_improved_symbolic8(self):
        fsm = self.cardgame_post_fair()

        # Dealer can avoid fairness
        self.assertTrue(
            check(fsm,
                  parseATLK("<'dealer'> F 'FALSE'")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #29
0
    def test_cardgame_post_fair_improved_symbolic7(self):
        fsm = self.cardgame_post_fair()

        # Player can win
        self.assertTrue(
            check(fsm,
                  parseATLK("<'player'> F 'win'")[0],
                  implem="symbolic",
                  variant="FSF"))
Example #30
0
    def test_transmission_with_know(self):
        fsm = self.transmission_with_knowledge()

        self.assertFalse(
            check(fsm,
                  parseATLK("<'sender'> F 'received'")[0],
                  implementation="backward"))
        self.assertFalse(
            check(fsm,
                  parseATLK("<'sender'> X 'received'")[0],
                  implementation="backward"))
        self.assertTrue(
            check(fsm,
                  parseATLK("<'transmitter'> X ~'received'")[0],
                  implementation="backward"))
        self.assertFalse(
            check(fsm,
                  parseATLK("<'transmitter'> F 'received'")[0],
                  implementation="backward"))