예제 #1
0
def test_next():
    reset_env()
    arrtype = ArrayType(BVType(3), BVType(4))
    arr = Symbol("arr", arrtype)
    idx = Symbol("idx", BVType(3))
    parser = StringParser()
    [(_, f, _)] = parser.parse_formulae(["next(arr)[idx]"])
    assert (f.args()[1] == idx)
예제 #2
0
def run_problems(problems_config: ProblemsManager):

    if sys.version_info[0] < 3:
        if config.devel:
            Logger.warning(
                "This software is not tested for Python 2, we recommend to use Python 3 instead"
            )
        else:
            Logger.error(
                "This software is not tested for Python 2, please use Python 3 instead. To avoid this error run in developer mode"
            )

    reset_env()

    # Named tuple representing all the general configuration options
    # (things that don't change between problems)
    general_config = problems_config.general_config
    Logger.verbosity = general_config.verbosity
    Logger.time = general_config.time

    psol = ProblemSolver()
    psol.solve_problems(problems_config)

    global_status = 0
    traces = []

    if len(problems_config.problems) > 0:
        Logger.log("\n*** SUMMARY ***", 0)
    else:
        if not general_config.translate:
            Logger.log("No problems to solve", 0)
            return 0

    formulae = []
    for pbm in problems_config.problems:
        (status, trace) = print_problem_result(pbm, problems_config)

        if status != 0:
            global_status = status
        traces += trace
        formulae.append(pbm.properties)

    if len(traces) > 0:
        Logger.log("\n*** TRACES ***\n", 0)
        for trace in traces:
            Logger.log("[%d]:\t%s" % (traces.index(trace) + 1, trace), 0)

    if general_config.translate:
        translate(problems_config.hts, general_config, formulae)

    if global_status != 0:
        Logger.log("", 0)
        Logger.warning("Verifications with unexpected result")

    return global_status
예제 #3
0
def run_problems(problems_file, config, problems=None):

    if sys.version_info[0] < 3:
        if config.devel:
            Logger.warning(
                "This software is not tested for Python 2, we recommend to use Python 3 instead"
            )
        else:
            Logger.error(
                "This software is not tested for Python 2, please use Python 3 instead. To avoid this error run in developer mode"
            )

    reset_env()
    Logger.verbosity = config.verbosity
    Logger.time = config.time

    psol = ProblemSolver()
    if problems is None:
        problems = Problems()
        problems.load_problems(problems_file)

    psol.solve_problems(problems, config)

    global_status = 0
    traces = []

    if len(problems.problems) > 0:
        Logger.log("\n*** SUMMARY ***", 0)
    else:
        if not config.translate:
            Logger.log("No problems to solve", 0)
            return 0

    formulae = []
    for pbm in problems.problems:
        (status, trace) = print_problem_result(pbm, config, len(traces) + 1)
        if status != 0:
            global_status = status
        traces += trace
        formulae.append(pbm.formula)

    if len(traces) > 0:
        Logger.log("\n*** TRACES ***\n", 0)
        for trace in traces:
            Logger.log("[%d]:\t%s" % (traces.index(trace) + 1, trace), 0)

    if config.translate:
        translate(problems.get_hts(), config, formulae)

    if global_status != 0:
        Logger.log("", 0)
        Logger.warning("Verifications with unexpected result")

    return global_status
예제 #4
0
def runtest(problem_file):
    reset_env()

    config = Config()

    config.safety = True
    config.verbosity = 2
    config.solver_name = "msat"
    config.prove = True
    config.vcd = True
    config.force_expected = True
    config.translate = "file.ssts"

    status = run_problems(problem_file, config)
    with open(config.translate, "r") as f:
        print(f.read())

    assert status == 0
    return status
예제 #5
0
def runtest(problem_file):
    reset_env()
    translate_file = 'file.ssts'
    problems_manager = cosa_option_manager.read_problem_file(
        problem_file,
        verbosity=2,
        solver_name='msat',
        prove=True,
        vcd=True,
        translate=translate_file)

    # run option handling code then freeze problem manager
    # TODO: Update this to make a better API
    # problems_manager modified in place
    cosa_option_manager._option_handling(problems_manager)
    problems_manager.freeze()

    status = run_problems(problems_manager)
    with open(translate_file, "r") as f:
        print(f.read())

    assert status == 0
    return status
예제 #6
0
def run_verification(config):
    reset_env()
    Logger.verbosity = config.verbosity

    problems = Problems()

    problems.assumptions = config.assumptions
    problems.bmc_length = config.bmc_length
    problems.bmc_length_min = config.bmc_length_min
    problems.full_trace = config.full_trace
    problems.generators = config.generators
    problems.clock_behaviors = config.clock_behaviors
    problems.incremental = config.incremental
    problems.lemmas = config.lemmas
    problems.model_file = config.strfiles
    problems.prefix = config.prefix
    problems.prove = config.prove
    problems.skip_solving = config.skip_solving
    problems.smt2_tracing = config.smt2file
    problems.solver_name = config.solver_name
    problems.strategy = config.strategy
    problems.symbolic_init = config.symbolic_init
    problems.zero_init = config.zero_init
    problems.time = config.time
    problems.trace_all_vars = config.trace_all_vars
    problems.trace_vars_change = config.trace_vars_change
    problems.vcd = config.vcd
    problems.verbosity = config.verbosity

    problems.model_file = config.strfiles
    problems.boolean = config.boolean
    problems.add_clock = config.add_clock
    problems.abstract_clock = config.abstract_clock
    problems.run_coreir_passes = config.run_passes
    problems.relative_path = "./"

    problem = problems.new_problem()

    if config.safety:
        problem.verification = VerificationType.SAFETY
    elif config.ltl:
        problem.verification = VerificationType.LTL
    elif config.equivalence is not None:
        problem.verification = VerificationType.EQUIVALENCE
        problem.equivalence = config.equivalence
    elif config.simulate:
        problem.verification = VerificationType.SIMULATION
    elif config.parametric:
        problem.verification = VerificationType.PARAMETRIC
    elif config.fsm_check:
        problem.verification = VerificationType.EQUIVALENCE
        problem.equivalence = config.strfiles

    if not problem.verification == VerificationType.EQUIVALENCE:
        problem.formula = config.properties

    problem.name = VerificationType.to_string(problem.verification)

    if problem.formula or problem.verification:
        problems.add_problem(problem)

    return run_problems(None, config, problems)