Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
MathsatExpressionAdapter.h
Go to the documentation of this file.
1#pragma once
2
3#include "storm-config.h"
4
5#include <unordered_map>
6#include <vector>
7
8#ifdef STORM_HAVE_MATHSAT
9#include <mathsat.h>
10#endif
11
14
15#ifdef STORM_HAVE_MATHSAT
16namespace std {
17// Define hashing operator for MathSAT's declarations.
18template<>
19struct hash<msat_decl> {
20 size_t operator()(msat_decl const& declaration) const {
21 return hash<void*>()(declaration.repr);
22 }
23};
24} // namespace std
25
26// Define equality operator to make hashing work.
27bool operator==(msat_decl decl1, msat_decl decl2);
28#endif
29
30namespace storm {
31namespace expressions {
32class Expression;
34} // namespace expressions
35
36namespace adapters {
37
38#ifdef STORM_HAVE_MATHSAT
39
40class MathsatExpressionAdapter : public storm::expressions::ExpressionVisitor {
41 public:
48 MathsatExpressionAdapter(storm::expressions::ExpressionManager& manager, msat_env& env);
49
56 msat_term translateExpression(storm::expressions::Expression const& expression);
57
64 msat_term translateExpression(storm::expressions::Variable const& variable);
65
66 bool hasAdditionalConstraints() const;
67
71 std::vector<msat_term> const& getAdditionalConstraints() const;
72
79 storm::expressions::Variable const& getVariable(msat_decl msatVariableDeclaration) const;
80
81 std::unordered_map<storm::expressions::Variable, msat_decl> const& getAllDeclaredVariables() const;
82
83 virtual boost::any visit(storm::expressions::BinaryBooleanFunctionExpression const& expression, boost::any const& data) override;
84
85 virtual boost::any visit(storm::expressions::BinaryNumericalFunctionExpression const& expression, boost::any const& data) override;
86
87 virtual boost::any visit(storm::expressions::BinaryRelationExpression const& expression, boost::any const& data) override;
88
89 virtual boost::any visit(storm::expressions::IfThenElseExpression const& expression, boost::any const& data) override;
90
91 virtual boost::any visit(storm::expressions::BooleanLiteralExpression const& expression, boost::any const& data) override;
92
93 virtual boost::any visit(storm::expressions::RationalLiteralExpression const& expression, boost::any const& data) override;
94
95 virtual boost::any visit(storm::expressions::IntegerLiteralExpression const& expression, boost::any const& data) override;
96
97 virtual boost::any visit(storm::expressions::UnaryBooleanFunctionExpression const& expression, boost::any const& data) override;
98
99 virtual boost::any visit(storm::expressions::UnaryNumericalFunctionExpression const& expression, boost::any const& data) override;
100
101 virtual boost::any visit(storm::expressions::VariableExpression const& expression, boost::any const& data) override;
102
103 storm::expressions::Expression translateExpression(msat_term const& term);
104
105 private:
111 msat_decl createVariable(storm::expressions::Variable const& variable);
112
113 // The expression manager to use.
114 storm::expressions::ExpressionManager& manager;
115
116 // The MathSAT environment used.
117 msat_env& env;
118
119 // A vector of constraints that need to be kept separate, because they were only implicitly part of an
120 // assertion that was added.
121 std::vector<msat_term> additionalConstraints;
122
123 // A mapping of variable names to their declaration in the MathSAT environment.
124 std::unordered_map<storm::expressions::Variable, msat_decl> variableToDeclarationMapping;
125
126 // A mapping from MathSAT variable declarations to our variables.
127 std::unordered_map<msat_decl, storm::expressions::Variable> declarationToVariableMapping;
128};
129#endif
130} // namespace adapters
131} // namespace storm
This class is responsible for managing a set of typed variables and all expressions using these varia...
bool operator==(BEColourClass< ValueType > const &lhs, BEColourClass< ValueType > const &rhs)
SettingsManager const & manager()
Retrieves the settings manager.