""" CEGIR alg for inferring equalities """ import pdb import settings import helpers.vcommon as CM from helpers.miscs import Miscs from data.traces import Inps, Traces, DTraces from data.inv.invs import Invs, DInvs import data.inv.eqt import infer.base DBG = pdb.set_trace mlog = CM.getLogger(__name__, settings.logger_level) class Infer(infer.base.Infer): def __init__(self, symstates, prog): super().__init__(symstates, prog) self.use_rand_init = False # use symstates or random to get init inps def gen(self, deg, traces, inps): assert deg >= 1, deg assert isinstance(traces, DTraces) and traces, traces assert isinstance(inps, Inps), inps locs = traces.keys() # first obtain enough traces tasks = [(loc,
import z3 import helpers.vcommon as dig_common_helpers import data.prog as dig_prog import settings as dig_settings from data.prog import Symb, Symbs from data.traces import Inps, Inp from helpers.miscs import Z3 from utils import settings from lib import Classification mlog = dig_common_helpers.getLogger(__name__, settings.logger_level) class LoopPart(object): def __init__(self, inp_decls, cond, transrel): self.inp_decls = inp_decls self.cond = cond self.transrel = transrel class Stem(LoopPart): def get_initial_cond(self, f, config): # init_symvars = (config.symstates.init_symvars).exprs(settings.use_reals) init_f = z3.And(self.cond, self.transrel, f) # init_f_vars = Z3.get_vars(init_f) # exists_vars = init_f_vars.difference(init_symvars) # init_cond = z3.Exists(list(exists_vars), init_f) # mlog.debug("init_cond: {}".format(init_cond)) # qe_init_cond = Z3.qe(init_cond) # mlog.debug("qe_init_cond: {}".format(qe_init_cond)) return init_f