Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
Cvc5ExpressionAdapter.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <unordered_map>
5#include <vector>
6
7#include "storm-config.h"
8
9// Include the headers of cvc5 only if it is available.
10#ifdef STORM_HAVE_CVC5
11#include <cvc5/cvc5.h>
12#endif
13
17
18namespace storm::expressions {
19class BaseExpression;
20}
21
22namespace storm::adapters {
23
24#ifdef STORM_HAVE_CVC5
25class Cvc5ExpressionAdapter : public storm::expressions::ExpressionVisitor {
26 public:
35 Cvc5ExpressionAdapter(storm::expressions::ExpressionManager& manager, cvc5::Solver& solver);
36
43 cvc5::Term translateExpression(storm::expressions::Expression const& expression);
44
51 cvc5::Term translateExpression(storm::expressions::Variable const& variable);
52
59 storm::expressions::Expression translateExpression(cvc5::Term const& term);
60
67 storm::expressions::Variable const& getVariable(cvc5::Term const& constant);
68
69 virtual boost::any visit(storm::expressions::BinaryBooleanFunctionExpression const& expression, boost::any const& data) override;
70
71 virtual boost::any visit(storm::expressions::BinaryNumericalFunctionExpression const& expression, boost::any const& data) override;
72
73 virtual boost::any visit(storm::expressions::BinaryRelationExpression const& expression, boost::any const& data) override;
74
75 virtual boost::any visit(storm::expressions::BooleanLiteralExpression const& expression, boost::any const& data) override;
76
77 virtual boost::any visit(storm::expressions::RationalLiteralExpression const& expression, boost::any const& data) override;
78
79 virtual boost::any visit(storm::expressions::IntegerLiteralExpression const& expression, boost::any const& data) override;
80
81 virtual boost::any visit(storm::expressions::UnaryBooleanFunctionExpression const& expression, boost::any const& data) override;
82
83 virtual boost::any visit(storm::expressions::UnaryNumericalFunctionExpression const& expression, boost::any const& data) override;
84
85 virtual boost::any visit(storm::expressions::IfThenElseExpression const& expression, boost::any const& data) override;
86
87 virtual boost::any visit(storm::expressions::VariableExpression const& expression, boost::any const& data) override;
88
89 private:
95 cvc5::Term createVariable(storm::expressions::Variable const& variable);
96
100 cvc5::Term createRational(storm::RationalNumber const& value);
101
112 cvc5::Term convertToRealIfExpected(cvc5::Term const& term, bool const& isRealExpected) const;
113
123 void unifyNumericalTypes(cvc5::Term& leftTerm, cvc5::Term& rightTerm) const;
124
125 // The manager that can be used to build expressions.
126 storm::expressions::ExpressionManager& manager;
127
128 // The manager of the solver the adapter translates for, which is where terms and sorts are built.
129 cvc5::TermManager& termManager;
130
131 // A mapping from variables to their cvc5 equivalent.
132 std::unordered_map<storm::expressions::Variable, cvc5::Term> variableToExpressionMapping;
133
134 // A mapping from cvc5 constants to the corresponding variables.
135 std::unordered_map<cvc5::Term, storm::expressions::Variable> expressionToVariableMapping;
136
137 // A cache of already translated constraints. Only valid during the translation of one expression.
138 std::unordered_map<storm::expressions::BaseExpression const*, cvc5::Term> expressionCache;
139};
140#endif
141} // namespace storm::adapters
The base class of all expression classes.
SettingsManager const & manager()
Retrieves the settings manager.