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]))
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]))
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]))
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]))