1#include "storm-config.h"
10TEST(MathsatExpressionAdapter, StormToMathsatBasic) {
11 msat_config config = msat_create_config();
12 msat_env env = msat_create_env(config);
13 ASSERT_FALSE(MSAT_ERROR_ENV(env));
14 msat_destroy_config(config);
17 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
20 msat_term msatTrue = msat_make_true(env);
22 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, msatTrue, adapter.translateExpression(exprTrue))));
23 msat_assert_formula(env, conjecture);
24 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
28 msat_term msatFalse = msat_make_false(env);
29 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprFalse), msatFalse)));
30 msat_assert_formula(env, conjecture);
31 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
37 msat_term msatConjunction = msat_make_and(env, msat_make_constant(env, msat_declare_function(env,
"x", msat_get_bool_type(env))),
38 msat_make_constant(env, msat_declare_function(env,
"y", msat_get_bool_type(env))));
40 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprConjunction), msatConjunction)));
41 msat_assert_formula(env, conjecture);
42 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
46 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))),
47 msat_make_constant(env, msat_declare_function(env,
"y", msat_get_bool_type(env)))));
48 ASSERT_NO_THROW(adapter.translateExpression(exprNor));
49 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprNor), msatNor)));
50 msat_assert_formula(env, conjecture);
51 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
55TEST(MathsatExpressionAdapter, StormToMathsatInteger) {
56 msat_config config = msat_create_config();
57 msat_env env = msat_create_env(config);
58 ASSERT_FALSE(MSAT_ERROR_ENV(env));
59 msat_destroy_config(config);
62 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
68 msat_decl xDecl = msat_declare_function(env,
"x", msat_get_integer_type(env));
69 msat_term xVar = msat_make_constant(env, xDecl);
70 msat_decl yDecl = msat_declare_function(env,
"y", msat_get_integer_type(env));
71 msat_term yVar = msat_make_constant(env, yDecl);
72 msat_term minusY = msat_make_times(env, msat_make_number(env,
"-1"), yVar);
73 msat_term msatAdd = msat_make_plus(env, xVar, yVar);
74 msat_term msatLess = msat_make_and(env, msat_make_leq(env, msatAdd, minusY), msat_make_not(env, msat_make_equal(env, msatAdd, minusY)));
76 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprAdd), msatLess)));
77 msat_assert_formula(env, conjecture);
78 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
82 msat_term msatTimes = msat_make_times(env, xVar, yVar);
83 msat_term msatNotEqual = msat_make_not(env, msat_make_equal(env, msatTimes, yVar));
84 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprMult), msatNotEqual)));
85 msat_assert_formula(env, conjecture);
86 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
90TEST(MathsatExpressionAdapter, StormToMathsatReal) {
91 msat_config config = msat_create_config();
92 msat_env env = msat_create_env(config);
93 ASSERT_FALSE(MSAT_ERROR_ENV(env));
94 msat_destroy_config(config);
97 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
103 msat_decl xDecl = msat_declare_function(env,
"x", msat_get_rational_type(env));
104 msat_term xVar = msat_make_constant(env, xDecl);
105 msat_decl yDecl = msat_declare_function(env,
"y", msat_get_rational_type(env));
106 msat_term yVar = msat_make_constant(env, yDecl);
107 msat_term minusY = msat_make_times(env, msat_make_number(env,
"-1"), yVar);
108 msat_term msatAdd = msat_make_plus(env, xVar, yVar);
109 msat_term msatLess = msat_make_and(env, msat_make_leq(env, msatAdd, minusY), msat_make_not(env, msat_make_equal(env, msatAdd, minusY)));
110 msat_term conjecture;
111 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprAdd), msatLess)));
112 msat_assert_formula(env, conjecture);
113 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
117 msat_term msatTimes = msat_make_times(env, xVar, yVar);
118 msat_term msatNotEqual = msat_make_not(env, msat_make_equal(env, msatTimes, yVar));
119 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprMult), msatNotEqual)));
120 msat_assert_formula(env, conjecture);
121 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
125TEST(MathsatExpressionAdapter, StormToMathsatFloorCeil) {
126 msat_config config = msat_create_config();
127 msat_env env = msat_create_env(config);
128 ASSERT_FALSE(MSAT_ERROR_ENV(env));
129 msat_destroy_config(config);
132 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
138 msat_decl iDecl = msat_declare_function(env,
"i", msat_get_integer_type(env));
139 msat_term iVar = msat_make_constant(env, iDecl);
140 msat_term msatEqualsFour = msat_make_equal(env, msat_make_number(env,
"4"), iVar);
141 msat_term conjecture;
142 msat_term translatedExpr = adapter.translateExpression(exprFloor);
143 msat_term msatIff = msat_make_iff(env, translatedExpr, msatEqualsFour);
144 ASSERT_NO_THROW(conjecture = msat_make_not(env, msatIff));
145 msat_assert_formula(env, conjecture);
148 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_SAT);
150 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_or(env, msat_make_not(env, adapter.translateExpression(exprFloor)), msatEqualsFour)));
151 msat_assert_formula(env, conjecture);
154 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_UNSAT);
158 msat_term msatEqualsFive = msat_make_equal(env, msat_make_number(env,
"5"), iVar);
160 ASSERT_NO_THROW(conjecture = msat_make_not(env, msat_make_iff(env, adapter.translateExpression(exprFloor), msatEqualsFive)));
161 msat_assert_formula(env, conjecture);
164 ASSERT_TRUE(msat_solve(env) == msat_result::MSAT_SAT);
166 ASSERT_NO_THROW(conjecture = msat_make_or(env, msat_make_not(env, adapter.translateExpression(exprFloor)), msatEqualsFive));
167 msat_assert_formula(env, conjecture);
171TEST(MathsatExpressionAdapter, MathsatToStormBasic) {
172 msat_config config = msat_create_config();
173 msat_env env = msat_create_env(config);
174 ASSERT_FALSE(MSAT_ERROR_ENV(env));
175 msat_destroy_config(config);
178 manager->declareBooleanVariable(
"x");
179 manager->declareBooleanVariable(
"y");
180 storm::adapters::MathsatExpressionAdapter adapter(*manager, env);
182 msat_term msatTrue = msat_make_true(env);
184 ASSERT_NO_THROW(exprTrue = adapter.translateExpression(msatTrue));
185 ASSERT_TRUE(exprTrue.
isTrue());
187 msat_term msatFalse = msat_make_false(env);
189 ASSERT_NO_THROW(exprTrue = adapter.translateExpression(msatFalse));
190 ASSERT_TRUE(exprTrue.
isFalse());
192 msat_decl xDecl = msat_declare_function(env,
"x", msat_get_bool_type(env));
193 msat_term x = msat_make_constant(env, xDecl);
194 msat_decl yDecl = msat_declare_function(env,
"y", msat_get_bool_type(env));
195 msat_term y = msat_make_constant(env, yDecl);
196 msat_term msatConjunction = msat_make_and(env, x, y);
198 ASSERT_NO_THROW(exprConjunction = adapter.translateExpression(msatConjunction));
205 msat_term msatNor = msat_make_not(env, msat_make_or(env, x, y));
207 ASSERT_NO_THROW(exprNor = adapter.translateExpression(msatNor));
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.