Storm
A Modern Probabilistic Model Checker
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FormulaInformationVisitor.cpp
Go to the documentation of this file.
2#include <boost/any.hpp>
3
5
6namespace storm {
7namespace logic {
9 FormulaInformationVisitor visitor(recurseIntoOperators);
10 boost::any result = f.accept(visitor, boost::any());
11 return boost::any_cast<FormulaInformation>(result);
12}
13
14FormulaInformationVisitor::FormulaInformationVisitor(bool recurseIntoOperators) : recurseIntoOperators(recurseIntoOperators) {}
15
16boost::any FormulaInformationVisitor::visit(AtomicExpressionFormula const&, boost::any const&) const {
17 return FormulaInformation();
18}
19
20boost::any FormulaInformationVisitor::visit(AtomicLabelFormula const&, boost::any const&) const {
21 return FormulaInformation();
22}
23
24boost::any FormulaInformationVisitor::visit(BinaryBooleanStateFormula const& f, boost::any const& data) const {
25 return boost::any_cast<FormulaInformation>(f.getLeftSubformula().accept(*this, data))
26 .join(boost::any_cast<FormulaInformation>(f.getRightSubformula().accept(*this)));
27}
28
29boost::any FormulaInformationVisitor::visit(BinaryBooleanPathFormula const& f, boost::any const& data) const {
30 FormulaInformation result = boost::any_cast<FormulaInformation>(f.getLeftSubformula().accept(*this, data))
31 .join(boost::any_cast<FormulaInformation>(f.getRightSubformula().accept(*this)));
32 return result.setContainsComplexPathFormula();
33}
34
35boost::any FormulaInformationVisitor::visit(BooleanLiteralFormula const&, boost::any const&) const {
36 return FormulaInformation();
37}
38
39boost::any FormulaInformationVisitor::visit(BoundedUntilFormula const& f, boost::any const& data) const {
40 FormulaInformation result;
42 for (unsigned i = 0; i < f.getDimension(); ++i) {
45 }
46 }
47
49 for (unsigned i = 0; i < f.getDimension(); ++i) {
50 result.join(boost::any_cast<FormulaInformation>(f.getLeftSubformula(i).accept(*this, data)));
51 result.join(boost::any_cast<FormulaInformation>(f.getRightSubformula(i).accept(*this, data)));
54 }
55 }
56 } else {
57 result.join(boost::any_cast<FormulaInformation>(f.getLeftSubformula().accept(*this, data)));
58 result.join(boost::any_cast<FormulaInformation>(f.getRightSubformula().accept(*this, data)));
61 }
62 }
63 return result;
64}
65
66boost::any FormulaInformationVisitor::visit(ConditionalFormula const& f, boost::any const& data) const {
67 return boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this, data))
68 .join(boost::any_cast<FormulaInformation>(f.getConditionFormula().accept(*this)));
69}
70
71boost::any FormulaInformationVisitor::visit(CumulativeRewardFormula const& f, boost::any const&) const {
72 FormulaInformation result;
74 for (unsigned i = 0; i < f.getDimension(); ++i) {
77 }
78 }
79 return result;
80}
81
82boost::any FormulaInformationVisitor::visit(EventuallyFormula const& f, boost::any const& data) const {
83 FormulaInformation result = boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this, data));
84 if (f.getSubformula().isPathFormula()) {
86 }
87 return result;
88}
89
90boost::any FormulaInformationVisitor::visit(TimeOperatorFormula const& f, boost::any const& data) const {
91 return f.getSubformula().accept(*this, data);
92}
93
94boost::any FormulaInformationVisitor::visit(GloballyFormula const& f, boost::any const& data) const {
95 FormulaInformation result = boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this, data));
96 if (f.getSubformula().isPathFormula()) {
98 }
99 return result;
100}
101
102boost::any FormulaInformationVisitor::visit(GameFormula const& f, boost::any const& data) const {
103 return f.getSubformula().accept(*this, data);
104}
105
106boost::any FormulaInformationVisitor::visit(InstantaneousRewardFormula const&, boost::any const&) const {
107 return FormulaInformation();
108}
109
110boost::any FormulaInformationVisitor::visit(LongRunAverageOperatorFormula const& f, boost::any const& data) const {
111 FormulaInformation result;
112 result.setContainsLongRunFormula(true);
113 if (recurseIntoOperators) {
114 result.join(boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this, data)));
115 }
116 return result;
117}
118
119boost::any FormulaInformationVisitor::visit(LongRunAverageRewardFormula const&, boost::any const&) const {
120 FormulaInformation result;
121 result.setContainsLongRunFormula(true);
122 return result;
123}
124
125boost::any FormulaInformationVisitor::visit(MultiObjectiveFormula const& f, boost::any const& data) const {
126 FormulaInformation result;
127 if (recurseIntoOperators) {
128 for (auto const& subF : f.getSubformulas()) {
129 result.join(boost::any_cast<FormulaInformation>(subF->accept(*this, data)));
130 }
131 }
132 return result;
133}
134
135boost::any FormulaInformationVisitor::visit(QuantileFormula const& f, boost::any const& data) const {
136 if (recurseIntoOperators) {
137 return f.getSubformula().accept(*this, data);
138 } else {
139 return FormulaInformation();
140 }
141}
142
143boost::any FormulaInformationVisitor::visit(NextFormula const& f, boost::any const& data) const {
144 FormulaInformation result = boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this, data)).setContainsNextFormula();
145 if (f.getSubformula().isPathFormula()) {
147 }
148 return result;
149}
150
151boost::any FormulaInformationVisitor::visit(ProbabilityOperatorFormula const& f, boost::any const& data) const {
152 if (recurseIntoOperators) {
153 return f.getSubformula().accept(*this, data);
154 } else {
155 return FormulaInformation();
156 }
157}
158
159boost::any FormulaInformationVisitor::visit(RewardOperatorFormula const& f, boost::any const& data) const {
160 if (recurseIntoOperators) {
161 return boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this, data)).setContainsRewardOperator();
162 } else {
163 return FormulaInformation();
164 }
165}
166
167boost::any FormulaInformationVisitor::visit(TotalRewardFormula const&, boost::any const&) const {
168 return FormulaInformation();
169}
170
171boost::any FormulaInformationVisitor::visit(UnaryBooleanStateFormula const& f, boost::any const& data) const {
172 return f.getSubformula().accept(*this, data);
173}
174
175boost::any FormulaInformationVisitor::visit(UnaryBooleanPathFormula const& f, boost::any const& data) const {
176 FormulaInformation result = boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this, data));
178 return result;
179}
180
181boost::any FormulaInformationVisitor::visit(UntilFormula const& f, boost::any const& data) const {
182 FormulaInformation result = boost::any_cast<FormulaInformation>(f.getLeftSubformula().accept(*this, data))
183 .join(boost::any_cast<FormulaInformation>(f.getRightSubformula().accept(*this)));
186 }
187 return result;
188}
189
190boost::any FormulaInformationVisitor::visit(HOAPathFormula const& f, boost::any const& data) const {
192 if (recurseIntoOperators) {
193 for (auto& mapped : f.getAPMapping()) {
194 info = info.join(boost::any_cast<FormulaInformation>(mapped.second->accept(*this, data)));
195 }
196 }
197 return info;
198}
199
200} // namespace logic
201} // namespace storm
Formula const & getRightSubformula() const
Formula const & getLeftSubformula() const
Formula const & getRightSubformula() const
Formula const & getLeftSubformula() const
TimeBoundReference const & getTimeBoundReference(unsigned i=0) const
Formula const & getConditionFormula() const
Formula const & getSubformula() const
TimeBoundReference const & getTimeBoundReference() const
virtual bool isPathFormula() const
Definition Formula.cpp:20
boost::any accept(FormulaVisitor const &visitor) const
Definition Formula.cpp:16
FormulaInformation & setContainsNextFormula(bool newValue=true)
FormulaInformation & setContainsComplexPathFormula(bool newValue=true)
FormulaInformation & setContainsCumulativeRewardFormula(bool newValue=true)
FormulaInformation join(FormulaInformation const &other)
FormulaInformation & setContainsRewardBoundedFormula(bool newValue=true)
FormulaInformation & setContainsLongRunFormula(bool newValue=true)
FormulaInformation & setContainsBoundedUntilFormula(bool newValue=true)
virtual boost::any visit(AtomicExpressionFormula const &f, boost::any const &data) const override
static FormulaInformation getInformation(Formula const &f, bool recurseIntoOperators=true)
const ap_to_formula_map & getAPMapping() const
std::vector< std::shared_ptr< Formula const > > const & getSubformulas() const
Formula const & getSubformula() const
Formula const & getSubformula() const
Formula const & getSubformula() const
LabParser.cpp.
Definition cli.cpp:18