Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SmtConstraint.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4
6
7namespace storm::dft {
8namespace modelchecker {
9
11 public:
12 virtual ~SmtConstraint() {}
13
19 virtual std::string toSmtlib2(std::vector<std::string> const &varNames) const = 0;
20
27 virtual storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
28 std::shared_ptr<storm::expressions::ExpressionManager> manager) const = 0;
29
30 virtual std::string description() const {
31 return descript;
32 }
33
34 void setDescription(std::string const &descr) {
35 descript = descr;
36 }
37
38 private:
39 std::string descript;
40};
41
42/*
43 * Variable[VarIndex] is the maximum of the others
44 */
45class IsMaximum : public SmtConstraint {
46 public:
47 IsMaximum(uint64_t varIndex, std::vector<uint64_t> const &varIndices) : varIndex(varIndex), varIndices(varIndices) {}
48
49 virtual ~IsMaximum() {}
50
51 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
52
53 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
54 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
55
56 private:
57 uint64_t varIndex;
58 std::vector<uint64_t> varIndices;
59};
60
61/*
62 * First is the minimum of the others
63 */
64class IsMinimum : public SmtConstraint {
65 public:
66 IsMinimum(uint64_t varIndex, std::vector<uint64_t> const &varIndices) : varIndex(varIndex), varIndices(varIndices) {}
67
68 virtual ~IsMinimum() {}
69
70 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
71
72 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
73 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
74
75 private:
76 uint64_t varIndex;
77 std::vector<uint64_t> varIndices;
78};
79
81 public:
82 BetweenValues(uint64_t varIndex, uint64_t lower, uint64_t upper) : varIndex(varIndex), upperBound(upper), lowerBound(lower) {}
83
84 virtual ~BetweenValues() {}
85
86 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
87
88 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
89 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
90
91 private:
92 uint64_t varIndex;
93 uint64_t upperBound;
94 uint64_t lowerBound;
95};
96
97class And : public SmtConstraint {
98 public:
99 And(std::vector<std::shared_ptr<SmtConstraint>> const &constraints) : constraints(constraints) {}
100
101 virtual ~And() {}
102
103 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
104
105 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
106 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
107
108 private:
109 std::vector<std::shared_ptr<SmtConstraint>> constraints;
110};
111
112class Or : public SmtConstraint {
113 public:
114 Or(std::vector<std::shared_ptr<SmtConstraint>> const &constraints) : constraints(constraints) {}
115
116 virtual ~Or() {}
117
118 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
119
120 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
121 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
122
123 private:
124 std::vector<std::shared_ptr<SmtConstraint>> constraints;
125};
126
127class Implies : public SmtConstraint {
128 public:
129 Implies(std::shared_ptr<SmtConstraint> l, std::shared_ptr<SmtConstraint> r) : lhs(l), rhs(r) {}
130
131 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
132
133 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
134 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
135
136 private:
137 std::shared_ptr<SmtConstraint> lhs;
138 std::shared_ptr<SmtConstraint> rhs;
139};
140
141class Iff : public SmtConstraint {
142 public:
143 Iff(std::shared_ptr<SmtConstraint> l, std::shared_ptr<SmtConstraint> r) : lhs(l), rhs(r) {}
144
145 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
146
147 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
148 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
149
150 private:
151 std::shared_ptr<SmtConstraint> lhs;
152 std::shared_ptr<SmtConstraint> rhs;
153};
154
155class IsTrue : public SmtConstraint {
156 public:
157 IsTrue(bool val) : value(val) {}
158
159 virtual ~IsTrue() {}
160
161 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
162
163 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
164 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
165
166 private:
167 bool value;
168};
169
171 public:
172 IsBoolValue(uint64_t varIndex, bool val) : varIndex(varIndex), value(val) {}
173
174 virtual ~IsBoolValue() {}
175
176 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
177
178 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
179 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
180
181 private:
182 uint64_t varIndex;
183 bool value;
184};
185
187 public:
188 IsConstantValue(uint64_t varIndex, uint64_t val) : varIndex(varIndex), value(val) {}
189
190 virtual ~IsConstantValue() {}
191
192 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
193
194 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
195 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
196
197 private:
198 uint64_t varIndex;
199 uint64_t value;
200};
201
203 public:
204 IsNotConstantValue(uint64_t varIndex, uint64_t val) : varIndex(varIndex), value(val) {}
205
207
208 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
209
210 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
211 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
212
213 private:
214 uint64_t varIndex;
215 uint64_t value;
216};
217
219 public:
220 IsLessConstant(uint64_t varIndex, uint64_t val) : varIndex(varIndex), value(val) {}
221
222 virtual ~IsLessConstant() {}
223
224 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
225
226 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
227 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
228
229 private:
230 uint64_t varIndex;
231 uint64_t value;
232};
233
235 public:
236 IsLessEqualConstant(uint64_t varIndex, uint64_t val) : varIndex(varIndex), value(val) {}
237
239
240 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
241
242 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
243 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
244
245 private:
246 uint64_t varIndex;
247 uint64_t value;
248};
249
250class IsEqual : public SmtConstraint {
251 public:
252 IsEqual(uint64_t varIndex1, uint64_t varIndex2) : var1Index(varIndex1), var2Index(varIndex2) {}
253
254 virtual ~IsEqual() {}
255
256 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
257
258 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
259 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
260
261 private:
262 uint64_t var1Index;
263 uint64_t var2Index;
264};
265
266class IsUnequal : public SmtConstraint {
267 public:
268 IsUnequal(uint64_t varIndex1, uint64_t varIndex2) : var1Index(varIndex1), var2Index(varIndex2) {}
269
270 virtual ~IsUnequal() {}
271
272 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
273
274 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
275 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
276
277 private:
278 uint64_t var1Index;
279 uint64_t var2Index;
280};
281
282class IsLess : public SmtConstraint {
283 public:
284 IsLess(uint64_t varIndex1, uint64_t varIndex2) : var1Index(varIndex1), var2Index(varIndex2) {}
285
286 virtual ~IsLess() {}
287
288 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
289
290 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
291 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
292
293 private:
294 uint64_t var1Index;
295 uint64_t var2Index;
296};
297
299 public:
300 IsLessEqual(uint64_t varIndex1, uint64_t varIndex2) : var1Index(varIndex1), var2Index(varIndex2) {}
301
302 virtual ~IsLessEqual() {}
303
304 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
305
306 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
307 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
308
309 private:
310 uint64_t var1Index;
311 uint64_t var2Index;
312};
313
315 public:
316 PairwiseDifferent(std::vector<uint64_t> const &indices) : varIndices(indices) {}
317
319
320 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
321
322 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
323 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
324
325 private:
326 std::vector<uint64_t> varIndices;
327};
328
329class Sorted : public SmtConstraint {
330 public:
331 Sorted(std::vector<uint64_t> varIndices) : varIndices(varIndices) {}
332
333 virtual ~Sorted() {}
334
335 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
336
337 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
338 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
339
340 private:
341 std::vector<uint64_t> varIndices;
342};
343
344class IfThenElse : public SmtConstraint {
345 public:
346 IfThenElse(std::shared_ptr<SmtConstraint> ifC, std::shared_ptr<SmtConstraint> thenC, std::shared_ptr<SmtConstraint> elseC)
347 : ifConstraint(ifC), thenConstraint(thenC), elseConstraint(elseC) {}
348
349 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
350
351 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
352 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
353
354 private:
355 std::shared_ptr<SmtConstraint> ifConstraint;
356 std::shared_ptr<SmtConstraint> thenConstraint;
357 std::shared_ptr<SmtConstraint> elseConstraint;
358};
359
361 public:
362 FalseCountIsEqualConstant(std::vector<uint64_t> varIndices, uint64_t val) : varIndices(varIndices), value(val) {}
363
364 std::string toSmtlib2(std::vector<std::string> const &varNames) const override;
365
366 storm::expressions::Expression toExpression(std::vector<std::string> const &varNames,
367 std::shared_ptr<storm::expressions::ExpressionManager> manager) const override;
368
369 private:
370 std::vector<uint64_t> varIndices;
371 uint64_t value;
372};
373
374} // namespace modelchecker
375} // namespace storm::dft
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
And(std::vector< std::shared_ptr< SmtConstraint > > const &constraints)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
BetweenValues(uint64_t varIndex, uint64_t lower, uint64_t upper)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
FalseCountIsEqualConstant(std::vector< uint64_t > varIndices, uint64_t val)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
IfThenElse(std::shared_ptr< SmtConstraint > ifC, std::shared_ptr< SmtConstraint > thenC, std::shared_ptr< SmtConstraint > elseC)
Iff(std::shared_ptr< SmtConstraint > l, std::shared_ptr< SmtConstraint > r)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
Implies(std::shared_ptr< SmtConstraint > l, std::shared_ptr< SmtConstraint > r)
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
IsBoolValue(uint64_t varIndex, bool val)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
IsConstantValue(uint64_t varIndex, uint64_t val)
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
IsEqual(uint64_t varIndex1, uint64_t varIndex2)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
IsLessConstant(uint64_t varIndex, uint64_t val)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
IsLessEqualConstant(uint64_t varIndex, uint64_t val)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
IsLessEqual(uint64_t varIndex1, uint64_t varIndex2)
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
IsLess(uint64_t varIndex1, uint64_t varIndex2)
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
IsMaximum(uint64_t varIndex, std::vector< uint64_t > const &varIndices)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
IsMinimum(uint64_t varIndex, std::vector< uint64_t > const &varIndices)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
IsNotConstantValue(uint64_t varIndex, uint64_t val)
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
IsUnequal(uint64_t varIndex1, uint64_t varIndex2)
Or(std::vector< std::shared_ptr< SmtConstraint > > const &constraints)
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
PairwiseDifferent(std::vector< uint64_t > const &indices)
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.
virtual std::string toSmtlib2(std::vector< std::string > const &varNames) const =0
Generate a string describing the constraint in Smtlib2 format.
void setDescription(std::string const &descr)
virtual std::string description() const
virtual storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const =0
Generate an expression describing the constraint in Storm format.
Sorted(std::vector< uint64_t > varIndices)
std::string toSmtlib2(std::vector< std::string > const &varNames) const override
Generate a string describing the constraint in Smtlib2 format.
storm::expressions::Expression toExpression(std::vector< std::string > const &varNames, std::shared_ptr< storm::expressions::ExpressionManager > manager) const override
Generate an expression describing the constraint in Storm format.