Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ArrayEliminator.h
Go to the documentation of this file.
1#pragma once
2
3#include <boost/variant.hpp>
4
7
8namespace storm {
9namespace expressions {
10class Expression;
11}
12
13namespace jani {
14class Model;
15class Property;
16
19 public:
20 Replacement(storm::jani::Variable const& variable);
21 Replacement(std::vector<Replacement>&& replacements = {});
22 bool isVariable() const;
24 std::vector<Replacement> const& getReplacements() const;
25 Replacement const& at(std::size_t const& index) const;
26 Replacement& at(std::size_t const& index);
27 Replacement const& at(std::vector<std::size_t> const& indices) const;
28 Replacement& at(std::vector<std::size_t> const& indices);
29 std::size_t size() const;
30 void grow(std::size_t const& minimumSize);
31
32 private:
33 boost::variant<storm::jani::Variable const*, std::vector<Replacement>> data;
34 };
35 std::vector<std::shared_ptr<Variable>> eliminatedArrayVariables;
36 std::unordered_map<storm::expressions::Variable, Replacement> replacements;
37
38 // Transforms the given expression (which might contain array expressions) to an equivalent expression without array variables.
40 // Transforms the given property (which might contain array expressions) to an equivalent property without array variables.
41 void transformProperty(storm::jani::Property& property) const;
42};
43
45 public:
46 ArrayEliminator() = default;
47
52 ArrayEliminatorData eliminate(Model& model, bool keepNonTrivialArrayAccess = false);
53};
54} // namespace jani
55} // namespace storm
Replacement const & at(std::size_t const &index) const
std::vector< Replacement > const & getReplacements() const
storm::jani::Variable const & getVariable() const
std::size_t size() const
equivalent to .at(i_1).at(i_2). ... .at(i_n) if indices = {i_1,i_2, ... i_n}
void grow(std::size_t const &minimumSize)
assumes this is not a variable
ArrayEliminatorData eliminate(Model &model, bool keepNonTrivialArrayAccess=false)
Eliminates all array references in the given model by replacing them with basic variables.
LabParser.cpp.
Definition cli.cpp:18
storm::expressions::Expression transformExpression(storm::expressions::Expression const &arrayExpression) const
std::unordered_map< storm::expressions::Variable, Replacement > replacements
void transformProperty(storm::jani::Property &property) const
std::vector< std::shared_ptr< Variable > > eliminatedArrayVariables