def do(self): class TimeoutException(Exception): pass if self.timeout: logging.info('CheckUnrealTask: setting timeout to %i' % self.timeout) def signal_handler(sig, _): if sig == signal.SIGALRM: raise TimeoutException("CheckUnrealTask: timeout reached") signal.signal(signal.SIGALRM, signal_handler) signal.alarm(self.timeout) solver = Z3InteractiveViaPipes(Z3_PATH) try: return elli.check_unreal(self.ltl_text, self.part_text, self.is_moore, translator_via_spot.LTLToAtmViaSpot(), solver, self.max_k, self.min_size, self.max_size, 0) except TimeoutException: return None finally: solver.die()
def do(self): solver = Z3InteractiveViaPipes(Z3_PATH) try: return elli.check_real(self.ltl_text, self.part_text, self.is_moore, translator_via_spot.LTLToAtmViaSpot(), solver, self.max_k, self.min_size, self.max_size, 0) finally: solver.die()
help='start from size') parser.add_argument('--maxsize', metavar='maxsize', type=int, default=4, required=False, help='stop at this size') parser.add_argument('-v', '--verbose', action='count', default=0) args = parser.parse_args() assert args.minsize <= args.maxsize logger = setup_logging(args.verbose) logger.info(args) with tempfile.NamedTemporaryFile(dir='./') as smt_file: smt_files_prefix = smt_file.name ltl_to_automaton = translator_via_spot.LTLToAtmViaSpot() solver_factory = Z3SolverFactory(smt_files_prefix, Z3_PATH, # we don't really need this False, True, True) elli.check_real(readfile(args.spec), readfile(args.spec.replace('.ltl', '.part')), args.moore, ltl_to_automaton, solver_factory.create(), 0, args.minsize, args.maxsize) solver_factory.down_solvers() exit(0)
def main(): """ :return: 1 if model is found, 0 otherwise """ parser = argparse.ArgumentParser( description='Bounded Synthesizer for CTL*', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('spec', metavar='spec', type=str, help='the specification file (in python format)') group = parser.add_mutually_exclusive_group() group.add_argument( '--bound', metavar='bound', type=int, default=128, required=False, help= 'upper bound on the size of the model (for unreal this specifies size of env model)' ) group.add_argument( '--size', metavar='size', type=int, default=0, required=False, help= 'search the model of this size (for unreal this specifies size of env model)' ) group = parser.add_mutually_exclusive_group() group.add_argument('--direct', action='store_true', default=True, dest='direct', help='use direct encoding') group.add_argument('--aht', action='store_false', default=False, dest='direct', help='encode via AHT') parser.add_argument('--incr', action='store_true', required=False, default=False, help='use incremental solving') parser.add_argument('--tmp', action='store_true', required=False, default=False, help='keep temporary smt2 files') parser.add_argument('--dot', metavar='dot', type=str, required=False, help='write the output into a dot graph file') parser.add_argument('--aiger', metavar='aiger', type=str, required=False, help='write the output into an AIGER format') parser.add_argument('--log', metavar='log', type=str, required=False, default=None, help='name of the log file') parser.add_argument('-v', '--verbose', action='count', default=0) args = parser.parse_args() setup_logging(args.verbose, args.log) logging.info(args) if args.incr and args.tmp: logging.warning( "--tmp --incr: incremental queries do not produce smt2 files, " "so I won't save any temporal files.") with tempfile.NamedTemporaryFile(dir='./') as smt_file: smt_files_prefix = smt_file.name ltl_to_atm = translator_via_spot.LTLToAtmViaSpot() solver_factory = Z3SolverFactory(smt_files_prefix, Z3_PATH, args.incr, False, not args.tmp) if args.size == 0: min_size, max_size = 1, args.bound else: min_size, max_size = args.size, args.size spec = parse_python_spec(args.spec) model = check_real(spec, min_size, max_size, ltl_to_atm, solver_factory, args.direct) logging.info('{status} model for {who}'.format( status=('FOUND', 'NOT FOUND')[model is None], who='sys')) if model: dot_model_str = lts_to_dot(model, ARG_MODEL_STATE, False) if args.dot: with open(args.dot, 'w') as out: out.write(dot_model_str) logging.info( 'Moore model is written to {file}'.format(file=out.name)) else: logging.info(dot_model_str) if args.aiger: with open(args.aiger, 'w') as aiger_out: aiger_out.write(lts_to_aiger(model)) solver_factory.down_solvers() return UNKNOWN if model is None else REALIZABLE