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