Ejemplo n.º 1
0
 def test_nc_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")
     
     # nC<c1,c2> ~c3.payer
     ncs = nc(fsm, ["c1", "c2"], c3h)
     self.assertTrue(ncs.isnot_false())
     state = fsm.pick_one_state(ncs)
     witness = explain_nc(fsm, state, ["c1", "c2"], c3h)
     self.assertTrue(witness[0] == state)
     for (s, ag, sp) in zip(witness[::2], witness[1::2], witness[2::2]):
         self.assertTrue(s.isnot_false())
         self.assertTrue(ag in [{"c1"}, {"c2"}])
         self.assertTrue(sp.isnot_false())
         self.assertTrue((sp <= fsm.equivalent_states(s, {"c1"})) |
                         (sp <= fsm.equivalent_states(s, {"c2"})))
         
     self.assertTrue(witness[-1] <= c3h)
Ejemplo n.º 2
0
    def test_nc_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")

        # nC<c1,c2> ~c3.payer
        ncs = nc(fsm, ["c1", "c2"], c3h)
        self.assertTrue(ncs.isnot_false())
        state = fsm.pick_one_state(ncs)
        witness = explain_nc(fsm, state, ["c1", "c2"], c3h)
        self.assertTrue(witness[0] == state)
        for (s, ag, sp) in zip(witness[::2], witness[1::2], witness[2::2]):
            self.assertTrue(s.isnot_false())
            self.assertTrue(ag in [{"c1"}, {"c2"}])
            self.assertTrue(sp.isnot_false())
            self.assertTrue((sp <= fsm.equivalent_states(s, {"c1"}))
                            | (sp <= fsm.equivalent_states(s, {"c2"})))

        self.assertTrue(witness[-1] <= c3h)
Ejemplo n.º 3
0
 def test_nc_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 |= nc<at, af> ~lt & ~lf & ~g
     ncs = nc(fsm, ["at"], ~lt & ~lf & g)
     self.assertTrue(ncs.isnot_false())
     state = fsm.pick_one_state(~lt & lf & g)
     self.assertTrue(state <= ncs)
     witness = explain_nc(fsm, state, ["at"], ~lt & ~lf & g)
     self.assertTrue(witness[0] == state)
     for (s, ag, sp) in zip(witness[::2], witness[1::2], witness[2::2]):
         self.assertTrue(s.isnot_false())
         self.assertTrue(ag in [{"at"}])           
         self.assertTrue(sp.isnot_false())
         self.assertTrue(sp <= fsm.equivalent_states(s, {"at"}))
         
     self.assertTrue(witness[-1] <= ~lt & ~lf & g)
Ejemplo n.º 4
0
    def test_nc_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 |= nc<at, af> ~lt & ~lf & ~g
        ncs = nc(fsm, ["at"], ~lt & ~lf & g)
        self.assertTrue(ncs.isnot_false())
        state = fsm.pick_one_state(~lt & lf & g)
        self.assertTrue(state <= ncs)
        witness = explain_nc(fsm, state, ["at"], ~lt & ~lf & g)
        self.assertTrue(witness[0] == state)
        for (s, ag, sp) in zip(witness[::2], witness[1::2], witness[2::2]):
            self.assertTrue(s.isnot_false())
            self.assertTrue(ag in [{"at"}])
            self.assertTrue(sp.isnot_false())
            self.assertTrue(sp <= fsm.equivalent_states(s, {"at"}))

        self.assertTrue(witness[-1] <= ~lt & ~lf & g)