Exemple #1
0
 def test_explain(self):
     fsm = self.init_model()
     
     initState = fsm.pick_one_state(fsm.init)
     adminNone = eval_ctl_spec(fsm, atom("admin = none"))
     adminAlice = eval_ctl_spec(fsm, atom("admin = alice"))
     egAlice = eval_ctl_spec(fsm, eg(atom("admin = alice")))
     euNoneUAlice = eval_ctl_spec(fsm, eu(atom("admin = none"),
                                          atom("admin = alice")))
     
     spec = Spec(parse_ctl_spec("EX admin = none"))
     path = explain(fsm, initState, spec)
     self.assertEqual(initState, path[0])
     self.assertTrue(path[2] <= adminNone)
     
     state = fsm.pick_one_state(egAlice)
     spec = Spec(parse_ctl_spec("EG admin = alice"))
     path = explain(fsm, state, spec)
     self.assertEqual(state, path[0])
     self.assertIn(path[-1], path[:-1])
     for i in range(0,len(path), 2):
         self.assertTrue(path[i] <= adminAlice)
     self.assertTrue(path[-1] <= adminAlice)
     self.assertTrue(initState <= euNoneUAlice)
     
     spec = Spec(parse_ctl_spec("E[admin = none U admin = alice]"))
     path = explain(fsm, initState, spec)
     self.assertEqual(initState, path[0])
     for i in range(2,len(path)-2,2):
         self.assertTrue(path[i] <= adminNone)
     self.assertTrue(path[-1] <= adminAlice)
Exemple #2
0
    def test_explain_atom(self):
        fsm = self.init_model()
        manager = fsm.bddEnc.DDmanager
        init = fsm.init

        initState = fsm.pick_one_state(init)

        spec = Spec(parse_ctl_spec("admin = none"))

        path = explain(fsm, initState, spec)
        self.assertEqual(initState, path[0])
        self.assertEqual(len(path), 1)
Exemple #3
0
def run_model_in_nusmv(filename, get_path=False):
    init_nusmv()
    load_from_file(filename)
    compute_model(keep_single_enum=True)
    fsm = prop_database().master.bddFsm
    propDb = prop_database()

    for prop in propDb:
        spec = prop.expr
        status = check_ctl_spec(
            fsm,
            spec) if prop.type == propTypes['CTL'] else check_ltl_spec(spec)
        if status is False:
            print('Specification', str(spec), 'is', str(status))
            if get_path:
                explanation = explain(fsm, fsm.init, spec)
                print_specification_explanation(explanation)

    deinit_nusmv()
Exemple #4
0
spec = prop.expr
print(spec)
# print(fsm.count_states(fsm.init))
# for state in fsm.pick_all_states(fsm.init):
#     print(state.get_str_values())

# for state in fsm.pick_all_states(fsm.post(fsm.init)):
#     print(state.get_str_values())

# trans = BddTrans.from_string(fsm.bddEnc.symbTable,"next(time) = 0")
# for state in fsm.pick_all_states(trans.post(fsm.init)):
#     print(state.get_str_values())

bdd = pynusmv.mc.eval_ctl_spec(fsm, spec)  # & fsm.reachable_states
explanation = explain(fsm, fsm.init & ~eval_ctl_spec(fsm, spec), spec)
# print(explanation)
for state, inputs in zip(explanation[::2], explanation[1::2]):
    if state == explanation[-1]:
        print("-- Loop starts here")
    print(state.get_str_values())
    print(inputs.get_str_values())

# satstates = fsm.pick_all_states(bdd)
# # print(satstates)
#
# for state in satstates:
#    print(state.get_str_values())

# trans = BddTrans.from_string(fsm.bddEnc.symbTable)
# for state in fsm.pick_all_states(trans.post(fsm.init)):