Beispiel #1
0
def _parse_ite(expr):
    """
    This method takes in any expression EXPR and parses it into
    a F, G, H expressions such that expr is the same as ite(F,G,H).
    This is possible because every boolean function can be represented
    in ite form. See Bryant's paper for formulas.
    """
    if expr["type"] == "const":
        v = expr["value"]
        return pbb.mk_const_expr(v),pbb.mk_const_expr(v),pbb.mk_const_expr(v)

    if expr["type"] == "var":
        return expr, pbb.mk_const_expr(True), pbb.mk_const_expr(False)

    if expr["type"] == "neg":
        return expr["expr"], pbb.mk_const_expr(False), pbb.mk_const_expr(True)

    if expr["type"] == "and":
        return expr["expr1"], expr["expr2"], pbb.mk_const_expr(False)

    if expr["type"] == "or":
        return expr["expr1"], pbb.mk_const_expr(True), expr["expr2"]

    if expr["type"] == "impl":
        return expr["expr1"], expr["expr2"], pbb.mk_const_expr(True)

    if expr["type"] == "xor":
        return expr["expr1"], pbb.mk_neg_expr(expr["expr2"]), expr["expr2"]

    if expr["type"] == "eqv":
        return expr["expr1"], expr["expr2"], pbb.mk_neg_expr(expr["expr2"])
Beispiel #2
0
def _parse_ite(expr):
    """
    This method takes in any expression EXPR and parses it into
    a F, G, H expressions such that expr is the same as ite(F,G,H).
    This is possible because every boolean function can be represented
    in ite form. See Bryant's paper for formulas.
    """
    if expr["type"] == "const":
        v = expr["value"]
        return pbb.mk_const_expr(v), pbb.mk_const_expr(v), pbb.mk_const_expr(v)

    if expr["type"] == "var":
        return expr, pbb.mk_const_expr(True), pbb.mk_const_expr(False)

    if expr["type"] == "neg":
        return expr["expr"], pbb.mk_const_expr(False), pbb.mk_const_expr(True)

    if expr["type"] == "and":
        return expr["expr1"], expr["expr2"], pbb.mk_const_expr(False)

    if expr["type"] == "or":
        return expr["expr1"], pbb.mk_const_expr(True), expr["expr2"]

    if expr["type"] == "impl":
        return expr["expr1"], expr["expr2"], pbb.mk_const_expr(True)

    if expr["type"] == "xor":
        return expr["expr1"], pbb.mk_neg_expr(expr["expr2"]), expr["expr2"]

    if expr["type"] == "eqv":
        return expr["expr1"], expr["expr2"], pbb.mk_neg_expr(expr["expr2"])
Beispiel #3
0
def simplify(expr):
    """
    Tries to simplify expressions very niavely.
    """
    expr = propagate(expr, (None, True))
    if type(expr) == bool:
        return PBB.mk_const_expr(expr)
    return expr
Beispiel #4
0
def propagate(expr, tup):
    """
    Propagae the assignment TUP (string variable name, boolean value)
    through expression EXPR
    """
    expr = PBA.propagate(expr, tup)
    if type(expr) == bool:
        return PBB.mk_const_expr(expr)
    return expr
def simplify(expr):
    expr = propagate(expr, (None, True))
    if type(expr) == bool:
        return PBB.mk_const_expr(expr)
    return expr