Beispiel #1
0
 def test_ex_dincry(self):
     fsm = self.model()
     
     c1p = eval_simple_expression(fsm, "c1.payer")
     c2p = eval_simple_expression(fsm, "c2.payer")
     c3p = eval_simple_expression(fsm, "c3.payer")
     c1h = eval_simple_expression(fsm, "c1.coin = head")
     c2h = eval_simple_expression(fsm, "c2.coin = head")
     c3h = eval_simple_expression(fsm, "c3.coin = head")
     odd = eval_simple_expression(fsm, "countsay = odd")
     even = eval_simple_expression(fsm, "countsay = even")
     unk = eval_simple_expression(fsm, "countsay = unknown")
     true = eval_simple_expression(fsm, "TRUE")
     false = eval_simple_expression(fsm, "FALSE")
     
     # unknown & c1h & c2h & c3h |= odd
     # because (unk & c1h & c2h & c3h & c1p & !c2p & !c3p,
     #          odd & c1h & c2h & c3h & c1p & !c2p & !c3p)
     state = fsm.pick_one_state(unk & c1h & c2h & c3h & c1p)
     self.assertTrue(state <= ex(fsm, odd))
     self.assertTrue(state <= (unk & c1h & c2h & c3h & c1p))
     self.assertTrue(state <= fsm.init)
     witness = explain_ex(fsm, state, odd)
     self.assertTrue(witness[0] == state)
     self.assertTrue(witness[1].isnot_false())
     self.assertTrue(witness[2] <= odd)
     self.assertTrue(witness[2] <= odd & c1p)
     self.assertTrue(fsm.get_inputs_between_states(state, witness[2])
                                                              .isnot_false())
     self.assertTrue(witness[1] <= fsm.get_inputs_between_states(state,
                                                                 witness[2]))
Beispiel #2
0
    def test_ex_dincry(self):
        fsm = self.model()

        c1p = eval_simple_expression(fsm, "c1.payer")
        c2p = eval_simple_expression(fsm, "c2.payer")
        c3p = eval_simple_expression(fsm, "c3.payer")
        c1h = eval_simple_expression(fsm, "c1.coin = head")
        c2h = eval_simple_expression(fsm, "c2.coin = head")
        c3h = eval_simple_expression(fsm, "c3.coin = head")
        odd = eval_simple_expression(fsm, "countsay = odd")
        even = eval_simple_expression(fsm, "countsay = even")
        unk = eval_simple_expression(fsm, "countsay = unknown")
        true = eval_simple_expression(fsm, "TRUE")
        false = eval_simple_expression(fsm, "FALSE")

        # unknown & c1h & c2h & c3h |= odd
        # because (unk & c1h & c2h & c3h & c1p & !c2p & !c3p,
        #          odd & c1h & c2h & c3h & c1p & !c2p & !c3p)
        state = fsm.pick_one_state(unk & c1h & c2h & c3h & c1p)
        self.assertTrue(state <= ex(fsm, odd))
        self.assertTrue(state <= (unk & c1h & c2h & c3h & c1p))
        self.assertTrue(state <= fsm.init)
        witness = explain_ex(fsm, state, odd)
        self.assertTrue(witness[0] == state)
        self.assertTrue(witness[1].isnot_false())
        self.assertTrue(witness[2] <= odd)
        self.assertTrue(witness[2] <= odd & c1p)
        self.assertTrue(
            fsm.get_inputs_between_states(state, witness[2]).isnot_false())
        self.assertTrue(
            witness[1] <= fsm.get_inputs_between_states(state, witness[2]))
Beispiel #3
0
 def test_ex_simple(self):
     fsm = self.simplemodel()
     
     lt = eval_simple_expression(fsm, "at.local")
     lf = eval_simple_expression(fsm, "af.local")
     g = eval_simple_expression(fsm, "global")
     true = eval_simple_expression(fsm, "TRUE")
     false = eval_simple_expression(fsm, "FALSE")
     
     # lt & lf & g |= EX !lt
     # because (lt & lf & g, !lt & lf (g | !g))
     state = fsm.pick_one_state(lt & lf & g)
     witness = explain_ex(fsm, state, ~lt)
     self.assertTrue(witness[0] == state)
     self.assertTrue(witness[2] <= ~lt)
     self.assertTrue(witness[2] <= ~lt & lf)
     self.assertTrue((witness[2] == ~lt & lf & g) |
                     (witness[2] == ~lt & lf & ~g))
     self.assertTrue(fsm.get_inputs_between_states(state, witness[2])
                                                              .isnot_false())
     self.assertTrue(witness[1] <= fsm.get_inputs_between_states(state,
                                                                 witness[2]))
Beispiel #4
0
    def test_ex_simple(self):
        fsm = self.simplemodel()

        lt = eval_simple_expression(fsm, "at.local")
        lf = eval_simple_expression(fsm, "af.local")
        g = eval_simple_expression(fsm, "global")
        true = eval_simple_expression(fsm, "TRUE")
        false = eval_simple_expression(fsm, "FALSE")

        # lt & lf & g |= EX !lt
        # because (lt & lf & g, !lt & lf (g | !g))
        state = fsm.pick_one_state(lt & lf & g)
        witness = explain_ex(fsm, state, ~lt)
        self.assertTrue(witness[0] == state)
        self.assertTrue(witness[2] <= ~lt)
        self.assertTrue(witness[2] <= ~lt & lf)
        self.assertTrue((witness[2] == ~lt & lf & g)
                        | (witness[2] == ~lt & lf & ~g))
        self.assertTrue(
            fsm.get_inputs_between_states(state, witness[2]).isnot_false())
        self.assertTrue(
            witness[1] <= fsm.get_inputs_between_states(state, witness[2]))