Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
Z3ExpressionAdapter.h
Go to the documentation of this file.
1#ifndef STORM_ADAPTERS_Z3EXPRESSIONADAPTER_H_
2#define STORM_ADAPTERS_Z3EXPRESSIONADAPTER_H_
3
4#include <unordered_map>
5#include <vector>
6
7#include "storm-config.h"
8
9// Include the headers of Z3 only if it is available.
10#ifdef STORM_HAVE_Z3
11#include "z3++.h"
12#include "z3.h"
13#endif
14
17
18namespace storm {
19namespace expressions {
20class BaseExpression;
21}
22
23namespace adapters {
24
25#ifdef STORM_HAVE_Z3
26class Z3ExpressionAdapter : public storm::expressions::ExpressionVisitor {
27 public:
35 Z3ExpressionAdapter(storm::expressions::ExpressionManager& manager, z3::context& context);
36
43 z3::expr translateExpression(storm::expressions::Expression const& expression);
44
51 z3::expr translateExpression(storm::expressions::Variable const& variable);
52
53 storm::expressions::Expression translateExpression(z3::expr const& expr);
54
61 storm::expressions::Variable const& getVariable(z3::func_decl z3Declaration);
62
63 virtual boost::any visit(storm::expressions::BinaryBooleanFunctionExpression const& expression, boost::any const& data) override;
64
65 virtual boost::any visit(storm::expressions::BinaryNumericalFunctionExpression const& expression, boost::any const& data) override;
66
67 virtual boost::any visit(storm::expressions::BinaryRelationExpression const& expression, boost::any const& data) override;
68
69 virtual boost::any visit(storm::expressions::BooleanLiteralExpression const& expression, boost::any const& data) override;
70
71 virtual boost::any visit(storm::expressions::RationalLiteralExpression const& expression, boost::any const& data) override;
72
73 virtual boost::any visit(storm::expressions::IntegerLiteralExpression const& expression, boost::any const& data) override;
74
75 virtual boost::any visit(storm::expressions::UnaryBooleanFunctionExpression const& expression, boost::any const& data) override;
76
77 virtual boost::any visit(storm::expressions::UnaryNumericalFunctionExpression const& expression, boost::any const& data) override;
78
79 virtual boost::any visit(storm::expressions::IfThenElseExpression const& expression, boost::any const& data) override;
80
81 virtual boost::any visit(storm::expressions::VariableExpression const& expression, boost::any const& data) override;
82
83 private:
89 z3::expr createVariable(storm::expressions::Variable const& variable);
90
91 // The manager that can be used to build expressions.
93
94 // The context that is used to translate the expressions.
95 z3::context& context;
96
97 // A vector of assertions that need to be kept separate, because they were only implicitly part of an
98 // assertion that was added.
99 std::vector<z3::expr> additionalAssertions;
100
101 // A mapping from variables to their Z3 equivalent.
102 std::unordered_map<storm::expressions::Variable, z3::expr> variableToExpressionMapping;
103
104 // A mapping from z3 declarations to the corresponding variables.
105 std::unordered_map<Z3_func_decl, storm::expressions::Variable> declarationToVariableMapping;
106
107 // A cache of already translated constraints. Only valid during the translation of one expression.
108 std::unordered_map<storm::expressions::BaseExpression const*, z3::expr> expressionCache;
109};
110#endif
111} // namespace adapters
112} // namespace storm
113
114#endif /* STORM_ADAPTERS_Z3EXPRESSIONADAPTER_H_ */
This class is responsible for managing a set of typed variables and all expressions using these varia...
SettingsManager const & manager()
Retrieves the settings manager.
LabParser.cpp.
Definition cli.cpp:18