Exemplo n.º 1
0
 def __init__(self, model_check_timeout: float):
     smt_tactic = z3.TryFor(z3.Tactic('smt'),
                            1 + int(model_check_timeout * 1000))
     self.solver = smt_tactic.solver()
     self.solver.set(mbqi=True)
     # turn off every randomization thing we can think of:
     self.solver.set('random-seed', 42)
     self.solver.set('smt.random-seed', 42)
     #self.solver.set('randomize', False)
     self.choices_made: List[SearchTreeNode] = []
     self.running_framework_code = False
     self.heaps: List[List[Tuple[z3.ExprRef, Type, object]]] = [[]]
     self.next_uniq = 1
     self.type_repo = SmtTypeRepository(self.solver)
Exemplo n.º 2
0
    def mk(cls, using_nla=False, myseed=None):
        if using_nla:
            int_theory = 'qfnia'  # qfnra
            real_theory = 'qfnra'
        else:
            int_theory = 'qflia'  # qflia
            real_theory = 'qflra'

        ti = z3.Tactic(int_theory)
        tr = z3.Tactic(real_theory)

        if myseed:
            z3.set_param('smt.arith.random_initial_value', True)
            p = z3.ParamsRef()
            p.set("random-seed", myseed)
            ti = z3.WithParams(ti, p)
            tr = z3.WithParams(tr, p)

        t = z3.ParOr(ti, tr)
        t = z3.TryFor(t, settings.SOLVER_TIMEOUT)
        return t.solver()
Exemplo n.º 3
0
    def __init__(
        self,
        execution_deadline: float,
        model_check_timeout: float,
        search_root: SinglePathNode,
    ):
        smt_tactic = z3.TryFor(z3.Tactic("smt"),
                               1 + int(model_check_timeout * 1000))
        self.solver = smt_tactic.solver()
        self.solver.set(mbqi=True)
        # turn off every randomization thing we can think of:
        self.solver.set("random-seed", 42)
        self.solver.set("smt.random-seed", 42)
        # self.solver.set('randomize', False)
        self.choices_made: List[SearchTreeNode] = []
        self.running_framework_code = False
        self.heaps: List[List[Tuple[z3.ExprRef, Type, object]]] = [[]]
        self.next_uniq = 1
        self.type_repo = SymbolicTypeRepository(self.solver)

        self.execution_deadline = execution_deadline
        self._random = search_root._random
        _, self.search_position = search_root.choose()
        self._deferred_assumptions = []
Exemplo n.º 4
0
#!/usr/bin/python3

import pycparser as pycp
import z3
import sys
import random

t = z3.Repeat(
    z3.Then("propagate-values", "propagate-ineqs", "unit-subsume-simplify",
            "propagate-bv-bounds", "simplify"))
t_qe = z3.OrElse(z3.Then(z3.TryFor('qe', 1000), z3.TryFor('qe2', 1000)),
                 'skip')


def gen_smt_expr(ast):
    if isinstance(ast, pycp.c_ast.Constant):
        return z3.BitVecVal(ast.value, 32)
    elif isinstance(ast, pycp.c_ast.ID):
        return vars[ast.name]
    elif isinstance(ast, pycp.c_ast.UnaryOp):
        if ast.op == "-":
            return "-" + gen_smt_expr(ast.expr)
        if ast.op == "!":
            return z3.Not(gen_smt_expr(ast.expr))
    elif isinstance(ast, pycp.c_ast.BinaryOp):
        lexp = gen_smt_expr(ast.left)
        rexp = gen_smt_expr(ast.right)
        if ast.op == "+":
            return lexp + rexp
        if ast.op == "-":
            return lexp - rexp