Exemple #1
0
"""
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,
Exemple #2
0
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