def test_msat_converter_on_msat_error(self): import mathsat import _mathsat from pysmt.solvers.msat import MathSAT5Solver, MSatConverter env = get_env() msat = MathSAT5Solver(env, logic=QF_UFLIRA) new_converter = MSatConverter(env, msat.msat_env) def walk_plus(formula, args): res = mathsat.MSAT_MAKE_ERROR_TERM() return res # Replace the function used to compute the Plus() # with one that returns a msat_error new_converter.set_function(walk_plus, op.PLUS) r, s = FreshSymbol(REAL), FreshSymbol(REAL) f1 = GT(r, s) f2 = Plus(r, s) t1 = new_converter.convert(f1) self.assertFalse(mathsat.MSAT_ERROR_TERM(t1)) with self.assertRaises(InternalSolverError): new_converter.convert(f2)
def test_msat_back_formulae(self): from pysmt.solvers.msat import MathSAT5Solver, MSatConverter env = get_env() msat = MathSAT5Solver(environment=env, logic=QF_UFLIRA) new_converter = MSatConverter(env, msat.msat_env) for formula, _, _, logic in get_example_formulae(): if logic.quantifier_free: term = new_converter.convert(formula) res = new_converter.back(term) self.assertTrue(is_valid(Iff(formula, res), logic=QF_UFLIRA))
def test_msat_back_not_identical(self): from pysmt.solvers.msat import MathSAT5Solver, MSatConverter env = get_env() msat = MathSAT5Solver(environment=env, logic=QF_UFLIRA) new_converter = MSatConverter(env, msat.msat_env) r, s = FreshSymbol(REAL), FreshSymbol(REAL) # r + 1 > s + 1 f = GT(Plus(r, Real(1)), Plus(s, Real(1))) term = new_converter.convert(f) res = new_converter.back(term) self.assertFalse(f == res)
def test_msat_back_simple(self): from pysmt.solvers.msat import MathSAT5Solver, MSatConverter env = get_env() msat = MathSAT5Solver(environment=env, logic=QF_UFLIRA) new_converter = MSatConverter(env, msat.msat_env) r, s = FreshSymbol(REAL), FreshSymbol(INT) f1 = GT(r, Real(1)) f2 = LE(Plus(s, Int(2)), Int(3)) f3 = LE(Int(2), Int(3)) f = And(f1, f2, f3) term = new_converter.convert(f) res = new_converter.back(term) # Checking equality is not enough: MathSAT can change the # shape of the formula into a logically equivalent form. self.assertTrue(is_valid(Iff(f, res), logic=QF_UFLIRA))
def test_msat_converter_on_msat_error(self): import mathsat from pysmt.solvers.msat import MathSAT5Solver, MSatConverter env = get_env() msat = MathSAT5Solver(env, logic=QF_UFLIRA) class NewConverter(MSatConverter): def walk_plus(self, formula, args, **kwargs): res = mathsat.MSAT_MAKE_ERROR_TERM() return res new_converter = NewConverter(env, msat.msat_env) r, s = FreshSymbol(REAL), FreshSymbol(REAL) f1 = GT(r, s) f2 = Plus(r, s) t1 = new_converter.convert(f1) self.assertFalse(mathsat.MSAT_ERROR_TERM(t1)) with self.assertRaises(InternalSolverError): new_converter.convert(f2)