Exemplo n.º 1
0
    return self.mgr.O(args[0])


def walk_ltl_h(self, formula, args, **kwargs):
    return self.mgr.H(args[0])


def walk_assign(self, formula, args, **kwargs):
    return self.mgr.Assign(args[0], args[1])


def walk_define(self, formula, args, **kwargs):
    return self.mgr.Define(args[0], args[1])


IdentityDagWalker.set_handler(walk_ltl_x, LTL_X)
IdentityDagWalker.set_handler(walk_ltl_f, LTL_F)
IdentityDagWalker.set_handler(walk_ltl_g, LTL_G)
IdentityDagWalker.set_handler(walk_ltl_u, LTL_U)
IdentityDagWalker.set_handler(walk_ltl_r, LTL_R)
IdentityDagWalker.set_handler(walk_ltl_o, LTL_O)
IdentityDagWalker.set_handler(walk_ltl_h, LTL_H)

IdentityDagWalker.set_handler(walk_assign, ASSIGN)
IdentityDagWalker.set_handler(walk_define, DEFINE)


def walk_simplify_assign(self, formula, args, **kwargs):
    assert len(args) == 2

    sl = args[0]
Exemplo n.º 2
0
        return args[0].set_linear(False)


#updating some walkers with third approach
from pysmt.walkers import IdentityDagWalker


def walk_sin(self, formula, args, **kwargs):
    return self.mgr.Sin(args[0])


def walk_cos(self, formula, args, **kwargs):
    return self.mgr.Cos(args[0])


IdentityDagWalker.set_handler(walk_sin, SIN)
IdentityDagWalker.set_handler(walk_cos, COS)

from pysmt.smtlib.printers import SmtPrinter


def walk_sin(self, formula):
    return self.walk_nary(formula, "sin")


def walk_cos(self, formula):
    return self.walk_nary(formula, "cos")


SmtPrinter.set_handler(walk_sin, SIN)
SmtPrinter.set_handler(walk_cos, COS)
Exemplo n.º 3
0
    return self.mgr.F(args[0])


def walk_ltl_g(self, formula, args, **kwargs):
    return self.mgr.G(args[0])


def walk_ltl_o(self, formula, args, **kwargs):
    return self.mgr.O(args[0])


def walk_ltl_h(self, formula, args, **kwargs):
    return self.mgr.H(args[0])


IdentityDagWalker.set_handler(walk_ltl_x, LTL_X)
IdentityDagWalker.set_handler(walk_ltl_y, LTL_Y)
IdentityDagWalker.set_handler(walk_ltl_u, LTL_U)
IdentityDagWalker.set_handler(walk_ltl_s, LTL_S)
IdentityDagWalker.set_handler(walk_ltl_f, LTL_F)
IdentityDagWalker.set_handler(walk_ltl_g, LTL_G)
IdentityDagWalker.set_handler(walk_ltl_o, LTL_O)
IdentityDagWalker.set_handler(walk_ltl_h, LTL_H)
# EOC IdentityDagWalker

from pysmt.environment import Environment, pop_env, get_env
from pysmt.environment import push_env as pysmt_push_env


class EnvironmentLTL(Environment):
    """Extension of pySMT environment."""
Exemplo n.º 4
0
#from pysmt.shortcuts import Iff, Equals, Symbol
from pysmt.shortcuts import Not, Equals, BVZero
from pysmt.shortcuts import get_env, substitute

#This function modifies our IdentityDagWalker to substitute known symbols in summary
symbol_table = {}


def walk_symbol(self, formula, args, **kwargs):
    symbol_subs = self.mgr.Symbol(formula.symbol_name(), formula.symbol_type())
    if formula.symbol_name() in symbol_table:
        symbol_subs = symbol_table[formula.symbol_name()]
    return symbol_subs


IdentityDagWalker.set_handler(walk_symbol, SYMBOL)


def bmc_summarize(smtin_filename="UNNAMED_in.smt2",
                  smtout_filename="UNNAMED_out.smt2"):

    parser = SmtLibParser()
    with open(smtin_filename, 'r+') as f:
        smtlib = parser.get_script(f)

    asserts = list(smtlib.filter_by_command_name([smtcmd.ASSERT]))
    defs = list(smtlib.filter_by_command_name([smtcmd.DEFINE_FUN]))
    decls = list(smtlib.filter_by_command_name([smtcmd.DECLARE_FUN]))

    #print(smtlib.get_last_formula())
    func_summary = None
Exemplo n.º 5
0
# EOC HRSerialize

# Finally, a third option is to define new methods and attach them to
# existing classes. We do so for the IdentityDagWalker
from pysmt.walkers import IdentityDagWalker

def walk_ltl_x(self, formula, args, **kwargs): return self.mgr.X(args[0])
def walk_ltl_y(self, formula, args, **kwargs): return self.mgr.Y(args[0])
def walk_ltl_u(self, formula, args, **kwargs): return self.mgr.U(args[0], args[1])
def walk_ltl_s(self, formula, args, **kwargs): return self.mgr.S(args[0], args[1])
def walk_ltl_f(self, formula, args, **kwargs): return self.mgr.F(args[0])
def walk_ltl_g(self, formula, args, **kwargs): return self.mgr.G(args[0])
def walk_ltl_o(self, formula, args, **kwargs): return self.mgr.O(args[0])
def walk_ltl_h(self, formula, args, **kwargs): return self.mgr.H(args[0])

IdentityDagWalker.set_handler(walk_ltl_x, LTL_X)
IdentityDagWalker.set_handler(walk_ltl_y, LTL_Y)
IdentityDagWalker.set_handler(walk_ltl_u, LTL_U)
IdentityDagWalker.set_handler(walk_ltl_s, LTL_S)
IdentityDagWalker.set_handler(walk_ltl_f, LTL_F)
IdentityDagWalker.set_handler(walk_ltl_g, LTL_G)
IdentityDagWalker.set_handler(walk_ltl_o, LTL_O)
IdentityDagWalker.set_handler(walk_ltl_h, LTL_H)
# EOC IdentityDagWalker

from pysmt.environment import Environment, pop_env, get_env
from pysmt.environment import push_env as pysmt_push_env

class EnvironmentLTL(Environment):
    """Extension of pySMT environment."""
    # Only specify new classes. Classes that have been extended