1#include "storm-config.h"
4#ifdef STORM_HAVE_MATHSAT
12TEST(MathsatExpressionAdapter, StormToMathsatBasic) {
13 msat_config config = msat_create_config();
14 msat_env env = msat_create_env(config);
15 ASSERT_FALSE(MSAT_ERROR_ENV(env));
16 msat_destroy_config(config);
19 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
22 msat_term msatTrue = msat_make_true(env);
24 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, msatTrue, adapter.translateExpression(exprTrue))));
25 msat_assert_formula(env, conjecture);
26 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
30 msat_term msatFalse = msat_make_false(env);
31 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprFalse), msatFalse)));
32 msat_assert_formula(env, conjecture);
33 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
39 msat_term msatConjunction = msat_make_and(env, msat_make_constant(env, msat_declare_function(env,
"x", msat_get_bool_type(env))),
40 msat_make_constant(env, msat_declare_function(env,
"y", msat_get_bool_type(env))));
42 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprConjunction), msatConjunction)));
43 msat_assert_formula(env, conjecture);
44 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
48 msat_term msatNor = msat_make_not(env, msat_make_or(env, msat_make_constant(env, msat_declare_function(env,
"x", msat_get_bool_type(env))),
49 msat_make_constant(env, msat_declare_function(env,
"y", msat_get_bool_type(env)))));
50 ASSERT_NO_THROW(adapter.translateExpression(exprNor));
51 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprNor), msatNor)));
52 msat_assert_formula(env, conjecture);
53 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
57TEST(MathsatExpressionAdapter, StormToMathsatInteger) {
58 msat_config config = msat_create_config();
59 msat_env env = msat_create_env(config);
60 ASSERT_FALSE(MSAT_ERROR_ENV(env));
61 msat_destroy_config(config);
64 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
70 msat_decl xDecl = msat_declare_function(env,
"x", msat_get_integer_type(env));
71 msat_term xVar = msat_make_constant(env, xDecl);
72 msat_decl yDecl = msat_declare_function(env,
"y", msat_get_integer_type(env));
73 msat_term yVar = msat_make_constant(env, yDecl);
74 msat_term minusY = msat_make_times(env, msat_make_number(env,
"-1"), yVar);
75 msat_term msatAdd = msat_make_plus(env, xVar, yVar);
76 msat_term msatLess = msat_make_and(env, msat_make_leq(env, msatAdd, minusY), msat_make_not(env, msat_make_equal(env, msatAdd, minusY)));
78 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprAdd), msatLess)));
79 msat_assert_formula(env, conjecture);
80 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
84 msat_term msatTimes = msat_make_times(env, xVar, yVar);
85 msat_term msatNotEqual = msat_make_not(env, msat_make_equal(env, msatTimes, yVar));
86 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprMult), msatNotEqual)));
87 msat_assert_formula(env, conjecture);
88 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
92TEST(MathsatExpressionAdapter, StormToMathsatReal) {
93 msat_config config = msat_create_config();
94 msat_env env = msat_create_env(config);
95 ASSERT_FALSE(MSAT_ERROR_ENV(env));
96 msat_destroy_config(config);
99 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
105 msat_decl xDecl = msat_declare_function(env,
"x", msat_get_rational_type(env));
106 msat_term xVar = msat_make_constant(env, xDecl);
107 msat_decl yDecl = msat_declare_function(env,
"y", msat_get_rational_type(env));
108 msat_term yVar = msat_make_constant(env, yDecl);
109 msat_term minusY = msat_make_times(env, msat_make_number(env,
"-1"), yVar);
110 msat_term msatAdd = msat_make_plus(env, xVar, yVar);
111 msat_term msatLess = msat_make_and(env, msat_make_leq(env, msatAdd, minusY), msat_make_not(env, msat_make_equal(env, msatAdd, minusY)));
112 msat_term conjecture;
113 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprAdd), msatLess)));
114 msat_assert_formula(env, conjecture);
115 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
119 msat_term msatTimes = msat_make_times(env, xVar, yVar);
120 msat_term msatNotEqual = msat_make_not(env, msat_make_equal(env, msatTimes, yVar));
121 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprMult), msatNotEqual)));
122 msat_assert_formula(env, conjecture);
123 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
127TEST(MathsatExpressionAdapter, StormToMathsatFloorCeil) {
128 msat_config config = msat_create_config();
129 msat_env env = msat_create_env(config);
130 ASSERT_FALSE(MSAT_ERROR_ENV(env));
131 msat_destroy_config(config);
134 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
140 msat_decl iDecl = msat_declare_function(env,
"i", msat_get_integer_type(env));
141 msat_term iVar = msat_make_constant(env, iDecl);
142 msat_term msatEqualsFour = msat_make_equal(env, msat_make_number(env,
"4"), iVar);
143 msat_term conjecture;
144 msat_term translatedExpr = adapter.translateExpression(exprFloor);
145 msat_term msatIff = msat_make_iff(env, translatedExpr, msatEqualsFour);
146 ASSERT_NO_THROW(conjecture = msat_make_not(env, msatIff));
147 msat_assert_formula(env, conjecture);
150 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_SAT);
152 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_or(env, msat_make_not(env, adapter.translateExpression(exprFloor)), msatEqualsFour)));
153 msat_assert_formula(env, conjecture);
156 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
160 msat_term msatEqualsFive = msat_make_equal(env, msat_make_number(env,
"5"), iVar);
162 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprFloor), msatEqualsFive)));
163 msat_assert_formula(env, conjecture);
166 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_SAT);
168 ASSERT_NO_THROW(conjecture = msat_make_or(env, msat_make_not(env, adapter.translateExpression(exprFloor)), msatEqualsFive));
169 msat_assert_formula(env, conjecture);
173TEST(MathsatExpressionAdapter, MathsatToStormBasic) {
174 msat_config config = msat_create_config();
175 msat_env env = msat_create_env(config);
176 ASSERT_FALSE(MSAT_ERROR_ENV(env));
177 msat_destroy_config(config);
180 manager->declareBooleanVariable(
"x");
181 manager->declareBooleanVariable(
"y");
182 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
184 msat_term msatTrue = msat_make_true(env);
186 ASSERT_NO_THROW(exprTrue = adapter.translateExpression(msatTrue));
187 ASSERT_TRUE(exprTrue.
isTrue());
189 msat_term msatFalse = msat_make_false(env);
191 ASSERT_NO_THROW(exprTrue = adapter.translateExpression(msatFalse));
192 ASSERT_TRUE(exprTrue.
isFalse());
194 msat_decl xDecl = msat_declare_function(env,
"x", msat_get_bool_type(env));
195 msat_term x = msat_make_constant(env, xDecl);
196 msat_decl yDecl = msat_declare_function(env,
"y", msat_get_bool_type(env));
197 msat_term y = msat_make_constant(env, yDecl);
198 msat_term msatConjunction = msat_make_and(env, x, y);
200 ASSERT_NO_THROW(exprConjunction = adapter.translateExpression(msatConjunction));
207 msat_term msatNor = msat_make_not(env, msat_make_or(env, x, y));
209 ASSERT_NO_THROW(exprNor = adapter.translateExpression(msatNor));
TEST(RegionConstraintCheckerTest, AffineConstraintHoldsThroughout)
bool isVariable() const
Retrieves whether the expression is a variable.
OperatorType getOperator() const
Retrieves the operator of a function application.
Expression getOperand(uint_fast64_t operandIndex) const
Retrieves the given operand from the expression.
std::string const & getIdentifier() const
Retrieves the identifier associated with this expression.
bool isFalse() const
Checks if the expression is equal to the boolean literal false.
bool isTrue() const
Checks if the expression is equal to the boolean literal true.
This class is responsible for managing a set of typed variables and all expressions using these varia...
Expression ceil(Expression const &first)
Expression floor(Expression const &first)
SettingsManager const & manager()
Retrieves the settings manager.