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"])
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"])
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
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