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)
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()
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 = []
#!/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