def walk_bv_comp(self, formula, args, **kwargs): cond = z3.Z3_mk_eq(self.ctx.ref(), args[0], args[1]) z3.Z3_inc_ref(self.ctx.ref(), cond) then_ = z3.Z3_mk_numeral(self.ctx.ref(), "1", self.z3BitVecSort(1).ast) z3.Z3_inc_ref(self.ctx.ref(), then_) else_ = z3.Z3_mk_numeral(self.ctx.ref(), "0", self.z3BitVecSort(1).ast) z3.Z3_inc_ref(self.ctx.ref(), else_) z3term = z3.Z3_mk_ite(self.ctx.ref(), cond, then_, else_) z3.Z3_inc_ref(self.ctx.ref(), z3term) # De-Ref since this is handled internally by Z3 z3.Z3_dec_ref(self.ctx.ref(), cond) z3.Z3_dec_ref(self.ctx.ref(), then_) z3.Z3_dec_ref(self.ctx.ref(), else_) return z3term
def walk_bv_ror(self, formula, args, **kwargs): bvsort = self.z3BitVecSort(formula.bv_width()) step = z3.Z3_mk_numeral(self.ctx.ref(), str(formula.bv_rotation_step()), bvsort.ast) z3term = z3.Z3_mk_ext_rotate_right(self.ctx.ref(), args[0], step) z3.Z3_inc_ref(self.ctx.ref(), z3term) return z3term
def walk_real_constant(self, formula, **kwargs): frac = formula.constant_value() n, d = frac.numerator, frac.denominator rep = str(n) + "/" + str(d) z3term = z3.Z3_mk_numeral(self.ctx.ref(), rep, self.z3RealSort.ast) z3.Z3_inc_ref(self.ctx.ref(), z3term) return z3term
def walk_bv_constant(self, formula, **kwargs): value = formula.constant_value() z3term = z3.Z3_mk_numeral(self.ctx.ref(), str(value), self.z3BitVecSort(formula.bv_width()).ast) z3.Z3_inc_ref(self.ctx.ref(), z3term) return z3term
def walk_int_constant(self, formula, **kwargs): assert is_pysmt_integer(formula.constant_value()) const = str(formula.constant_value()) z3term = z3.Z3_mk_numeral(self.ctx.ref(), const, self.z3IntSort.ast) z3.Z3_inc_ref(self.ctx.ref(), z3term) return z3term
def walk_algebraic_constant(self, formula, **kwargs): rep = str(formula.constant_value()) z3term = z3.Z3_mk_numeral(self.ctx.ref(), rep, self.z3RealSort.ast) z3.Z3_inc_ref(self.ctx.ref(), z3term) return z3term