mCRL2
Loading...
Searching...
No Matches
builder.h
Go to the documentation of this file.
1// Author(s): Wieger Wesselink
2// Copyright: see the accompanying file COPYING or copy at
3// https://github.com/mCRL2org/mCRL2/blob/master/COPYING
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
9/// \file mcrl2/modal_formula/builder.h
10/// \brief add your file description here.
11
12#ifndef MCRL2_MODAL_FORMULA_BUILDER_H
13#define MCRL2_MODAL_FORMULA_BUILDER_H
14
15#include "mcrl2/lps/builder.h"
16#include "mcrl2/modal_formula/state_formula_specification.h"
17
18namespace mcrl2
19{
20
21namespace action_formulas
22{
23
24/// \brief Base class for action_formula_builder.
25template <typename Derived>
27{
28 using super = core::builder<Derived>;
29 using super::apply;
30
31 template <class T>
32 void apply(T& result, const data::data_expression& x)
33 {
34 static_cast<Derived&>(*this).enter(x);
35 // skip
36 static_cast<Derived&>(*this).leave(x);
37 result = atermpp::down_cast<T>(x);
38 }
39
40 template <class T>
41 void apply(T& result, const data::untyped_data_parameter& x)
42 {
43 static_cast<Derived&>(*this).enter(x);
44 // skip
45 static_cast<Derived&>(*this).leave(x);
46 result = atermpp::down_cast<T>(x);
47 }
48};
49
50//--- start generated action_formulas::add_sort_expressions code ---//
51template <template <class> class Builder, class Derived>
52struct add_sort_expressions: public Builder<Derived>
53{
54 using super = Builder<Derived>;
55 using super::enter;
56 using super::leave;
57 using super::update;
58 using super::apply;
59
60 template <class T>
61 void apply(T& result, const action_formulas::true_& x)
62 {
63 static_cast<Derived&>(*this).enter(x);
64 // skip
65 static_cast<Derived&>(*this).leave(x);
66 result = atermpp::down_cast<T>(x);
67 }
68
69 template <class T>
70 void apply(T& result, const action_formulas::false_& x)
71 {
72 static_cast<Derived&>(*this).enter(x);
73 // skip
74 static_cast<Derived&>(*this).leave(x);
75 result = atermpp::down_cast<T>(x);
76 }
77
78 template <class T>
79 void apply(T& result, const action_formulas::not_& x)
80 {
81 static_cast<Derived&>(*this).enter(x);
82 action_formulas::make_not(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
83 static_cast<Derived&>(*this).leave(x);
84 }
85
86 template <class T>
87 void apply(T& result, const action_formulas::and_& x)
88 {
89 static_cast<Derived&>(*this).enter(x);
90 action_formulas::make_and(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
91 static_cast<Derived&>(*this).leave(x);
92 }
93
94 template <class T>
95 void apply(T& result, const action_formulas::or_& x)
96 {
97 static_cast<Derived&>(*this).enter(x);
98 action_formulas::make_or(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
99 static_cast<Derived&>(*this).leave(x);
100 }
101
102 template <class T>
103 void apply(T& result, const action_formulas::imp& x)
104 {
105 static_cast<Derived&>(*this).enter(x);
106 action_formulas::make_imp(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
107 static_cast<Derived&>(*this).leave(x);
108 }
109
110 template <class T>
111 void apply(T& result, const action_formulas::forall& x)
112 {
113 static_cast<Derived&>(*this).enter(x);
114 action_formulas::make_forall(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
115 static_cast<Derived&>(*this).leave(x);
116 }
117
118 template <class T>
119 void apply(T& result, const action_formulas::exists& x)
120 {
121 static_cast<Derived&>(*this).enter(x);
122 action_formulas::make_exists(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
123 static_cast<Derived&>(*this).leave(x);
124 }
125
126 template <class T>
127 void apply(T& result, const action_formulas::at& x)
128 {
129 static_cast<Derived&>(*this).enter(x);
130 action_formulas::make_at(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
131 static_cast<Derived&>(*this).leave(x);
132 }
133
134 template <class T>
135 void apply(T& result, const action_formulas::multi_action& x)
136 {
137 static_cast<Derived&>(*this).enter(x);
138 action_formulas::make_multi_action(result, [&](process::action_list& result){ static_cast<Derived&>(*this).apply(result, x.actions()); });
139 static_cast<Derived&>(*this).leave(x);
140 }
141
142 template <class T>
143 void apply(T& result, const action_formulas::action_formula& x)
144 {
145 static_cast<Derived&>(*this).enter(x);
147 {
148 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
149 }
151 {
152 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
153 }
155 {
156 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::true_>(x));
157 }
159 {
160 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::false_>(x));
161 }
163 {
164 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::not_>(x));
165 }
167 {
168 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::and_>(x));
169 }
170 else if (action_formulas::is_or(x))
171 {
172 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::or_>(x));
173 }
175 {
176 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::imp>(x));
177 }
179 {
180 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::forall>(x));
181 }
183 {
184 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::exists>(x));
185 }
186 else if (action_formulas::is_at(x))
187 {
188 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::at>(x));
189 }
191 {
192 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::multi_action>(x));
193 }
195 {
196 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_multi_action>(x));
197 }
198 static_cast<Derived&>(*this).leave(x);
199 }
200
201};
202
203/// \\brief Builder class
204template <typename Derived>
206{
207};
208//--- end generated action_formulas::add_sort_expressions code ---//
209
210//--- start generated action_formulas::add_data_expressions code ---//
211template <template <class> class Builder, class Derived>
212struct add_data_expressions: public Builder<Derived>
213{
214 using super = Builder<Derived>;
215 using super::enter;
216 using super::leave;
217 using super::update;
218 using super::apply;
219
220 template <class T>
221 void apply(T& result, const action_formulas::true_& x)
222 {
223 static_cast<Derived&>(*this).enter(x);
224 // skip
225 static_cast<Derived&>(*this).leave(x);
226 result = atermpp::down_cast<T>(x);
227 }
228
229 template <class T>
230 void apply(T& result, const action_formulas::false_& x)
231 {
232 static_cast<Derived&>(*this).enter(x);
233 // skip
234 static_cast<Derived&>(*this).leave(x);
235 result = atermpp::down_cast<T>(x);
236 }
237
238 template <class T>
239 void apply(T& result, const action_formulas::not_& x)
240 {
241 static_cast<Derived&>(*this).enter(x);
242 action_formulas::make_not(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
243 static_cast<Derived&>(*this).leave(x);
244 }
245
246 template <class T>
247 void apply(T& result, const action_formulas::and_& x)
248 {
249 static_cast<Derived&>(*this).enter(x);
250 action_formulas::make_and(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
251 static_cast<Derived&>(*this).leave(x);
252 }
253
254 template <class T>
255 void apply(T& result, const action_formulas::or_& x)
256 {
257 static_cast<Derived&>(*this).enter(x);
258 action_formulas::make_or(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
259 static_cast<Derived&>(*this).leave(x);
260 }
261
262 template <class T>
263 void apply(T& result, const action_formulas::imp& x)
264 {
265 static_cast<Derived&>(*this).enter(x);
266 action_formulas::make_imp(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
267 static_cast<Derived&>(*this).leave(x);
268 }
269
270 template <class T>
271 void apply(T& result, const action_formulas::forall& x)
272 {
273 static_cast<Derived&>(*this).enter(x);
274 action_formulas::make_forall(result, x.variables(), [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
275 static_cast<Derived&>(*this).leave(x);
276 }
277
278 template <class T>
279 void apply(T& result, const action_formulas::exists& x)
280 {
281 static_cast<Derived&>(*this).enter(x);
282 action_formulas::make_exists(result, x.variables(), [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
283 static_cast<Derived&>(*this).leave(x);
284 }
285
286 template <class T>
287 void apply(T& result, const action_formulas::at& x)
288 {
289 static_cast<Derived&>(*this).enter(x);
290 action_formulas::make_at(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
291 static_cast<Derived&>(*this).leave(x);
292 }
293
294 template <class T>
295 void apply(T& result, const action_formulas::multi_action& x)
296 {
297 static_cast<Derived&>(*this).enter(x);
298 action_formulas::make_multi_action(result, [&](process::action_list& result){ static_cast<Derived&>(*this).apply(result, x.actions()); });
299 static_cast<Derived&>(*this).leave(x);
300 }
301
302 template <class T>
303 void apply(T& result, const action_formulas::action_formula& x)
304 {
305 static_cast<Derived&>(*this).enter(x);
307 {
308 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
309 }
311 {
312 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
313 }
315 {
316 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::true_>(x));
317 }
319 {
320 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::false_>(x));
321 }
323 {
324 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::not_>(x));
325 }
327 {
328 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::and_>(x));
329 }
330 else if (action_formulas::is_or(x))
331 {
332 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::or_>(x));
333 }
335 {
336 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::imp>(x));
337 }
339 {
340 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::forall>(x));
341 }
343 {
344 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::exists>(x));
345 }
346 else if (action_formulas::is_at(x))
347 {
348 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::at>(x));
349 }
351 {
352 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::multi_action>(x));
353 }
355 {
356 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_multi_action>(x));
357 }
358 static_cast<Derived&>(*this).leave(x);
359 }
360
361};
362
363/// \\brief Builder class
364template <typename Derived>
366{
367};
368//--- end generated action_formulas::add_data_expressions code ---//
369
370//--- start generated action_formulas::add_variables code ---//
371template <template <class> class Builder, class Derived>
372struct add_variables: public Builder<Derived>
373{
374 using super = Builder<Derived>;
375 using super::enter;
376 using super::leave;
377 using super::update;
378 using super::apply;
379
380 template <class T>
381 void apply(T& result, const action_formulas::true_& x)
382 {
383 static_cast<Derived&>(*this).enter(x);
384 // skip
385 static_cast<Derived&>(*this).leave(x);
386 result = atermpp::down_cast<T>(x);
387 }
388
389 template <class T>
390 void apply(T& result, const action_formulas::false_& x)
391 {
392 static_cast<Derived&>(*this).enter(x);
393 // skip
394 static_cast<Derived&>(*this).leave(x);
395 result = atermpp::down_cast<T>(x);
396 }
397
398 template <class T>
399 void apply(T& result, const action_formulas::not_& x)
400 {
401 static_cast<Derived&>(*this).enter(x);
402 action_formulas::make_not(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
403 static_cast<Derived&>(*this).leave(x);
404 }
405
406 template <class T>
407 void apply(T& result, const action_formulas::and_& x)
408 {
409 static_cast<Derived&>(*this).enter(x);
410 action_formulas::make_and(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
411 static_cast<Derived&>(*this).leave(x);
412 }
413
414 template <class T>
415 void apply(T& result, const action_formulas::or_& x)
416 {
417 static_cast<Derived&>(*this).enter(x);
418 action_formulas::make_or(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
419 static_cast<Derived&>(*this).leave(x);
420 }
421
422 template <class T>
423 void apply(T& result, const action_formulas::imp& x)
424 {
425 static_cast<Derived&>(*this).enter(x);
426 action_formulas::make_imp(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
427 static_cast<Derived&>(*this).leave(x);
428 }
429
430 template <class T>
431 void apply(T& result, const action_formulas::forall& x)
432 {
433 static_cast<Derived&>(*this).enter(x);
434 action_formulas::make_forall(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
435 static_cast<Derived&>(*this).leave(x);
436 }
437
438 template <class T>
439 void apply(T& result, const action_formulas::exists& x)
440 {
441 static_cast<Derived&>(*this).enter(x);
442 action_formulas::make_exists(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
443 static_cast<Derived&>(*this).leave(x);
444 }
445
446 template <class T>
447 void apply(T& result, const action_formulas::at& x)
448 {
449 static_cast<Derived&>(*this).enter(x);
450 action_formulas::make_at(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
451 static_cast<Derived&>(*this).leave(x);
452 }
453
454 template <class T>
455 void apply(T& result, const action_formulas::multi_action& x)
456 {
457 static_cast<Derived&>(*this).enter(x);
458 action_formulas::make_multi_action(result, [&](process::action_list& result){ static_cast<Derived&>(*this).apply(result, x.actions()); });
459 static_cast<Derived&>(*this).leave(x);
460 }
461
462 template <class T>
463 void apply(T& result, const action_formulas::action_formula& x)
464 {
465 static_cast<Derived&>(*this).enter(x);
467 {
468 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
469 }
471 {
472 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
473 }
475 {
476 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::true_>(x));
477 }
479 {
480 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::false_>(x));
481 }
483 {
484 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::not_>(x));
485 }
487 {
488 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::and_>(x));
489 }
490 else if (action_formulas::is_or(x))
491 {
492 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::or_>(x));
493 }
495 {
496 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::imp>(x));
497 }
499 {
500 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::forall>(x));
501 }
503 {
504 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::exists>(x));
505 }
506 else if (action_formulas::is_at(x))
507 {
508 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::at>(x));
509 }
511 {
512 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::multi_action>(x));
513 }
515 {
516 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_multi_action>(x));
517 }
518 static_cast<Derived&>(*this).leave(x);
519 }
520
521};
522
523/// \\brief Builder class
524template <typename Derived>
526{
527};
528//--- end generated action_formulas::add_variables code ---//
529
530//--- start generated action_formulas::add_action_formula_expressions code ---//
531template <template <class> class Builder, class Derived>
532struct add_action_formula_expressions: public Builder<Derived>
533{
534 using super = Builder<Derived>;
535 using super::enter;
536 using super::leave;
537 using super::update;
538 using super::apply;
539
540 template <class T>
541 void apply(T& result, const action_formulas::true_& x)
542 {
543 static_cast<Derived&>(*this).enter(x);
544 // skip
545 static_cast<Derived&>(*this).leave(x);
546 result = atermpp::down_cast<T>(x);
547 }
548
549 template <class T>
550 void apply(T& result, const action_formulas::false_& x)
551 {
552 static_cast<Derived&>(*this).enter(x);
553 // skip
554 static_cast<Derived&>(*this).leave(x);
555 result = atermpp::down_cast<T>(x);
556 }
557
558 template <class T>
559 void apply(T& result, const action_formulas::not_& x)
560 {
561 static_cast<Derived&>(*this).enter(x);
562 action_formulas::make_not(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
563 static_cast<Derived&>(*this).leave(x);
564 }
565
566 template <class T>
567 void apply(T& result, const action_formulas::and_& x)
568 {
569 static_cast<Derived&>(*this).enter(x);
570 action_formulas::make_and(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
571 static_cast<Derived&>(*this).leave(x);
572 }
573
574 template <class T>
575 void apply(T& result, const action_formulas::or_& x)
576 {
577 static_cast<Derived&>(*this).enter(x);
578 action_formulas::make_or(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
579 static_cast<Derived&>(*this).leave(x);
580 }
581
582 template <class T>
583 void apply(T& result, const action_formulas::imp& x)
584 {
585 static_cast<Derived&>(*this).enter(x);
586 action_formulas::make_imp(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
587 static_cast<Derived&>(*this).leave(x);
588 }
589
590 template <class T>
591 void apply(T& result, const action_formulas::forall& x)
592 {
593 static_cast<Derived&>(*this).enter(x);
594 action_formulas::make_forall(result, x.variables(), [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
595 static_cast<Derived&>(*this).leave(x);
596 }
597
598 template <class T>
599 void apply(T& result, const action_formulas::exists& x)
600 {
601 static_cast<Derived&>(*this).enter(x);
602 action_formulas::make_exists(result, x.variables(), [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
603 static_cast<Derived&>(*this).leave(x);
604 }
605
606 template <class T>
607 void apply(T& result, const action_formulas::at& x)
608 {
609 static_cast<Derived&>(*this).enter(x);
610 action_formulas::make_at(result, [&](action_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, x.time_stamp());
611 static_cast<Derived&>(*this).leave(x);
612 }
613
614 template <class T>
615 void apply(T& result, const action_formulas::multi_action& x)
616 {
617 static_cast<Derived&>(*this).enter(x);
618 // skip
619 static_cast<Derived&>(*this).leave(x);
620 result = atermpp::down_cast<T>(x);
621 }
622
623 template <class T>
624 void apply(T& result, const action_formulas::action_formula& x)
625 {
626 static_cast<Derived&>(*this).enter(x);
628 {
629 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
630 }
632 {
633 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
634 }
636 {
637 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::true_>(x));
638 }
640 {
641 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::false_>(x));
642 }
644 {
645 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::not_>(x));
646 }
648 {
649 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::and_>(x));
650 }
651 else if (action_formulas::is_or(x))
652 {
653 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::or_>(x));
654 }
656 {
657 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::imp>(x));
658 }
660 {
661 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::forall>(x));
662 }
664 {
665 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::exists>(x));
666 }
667 else if (action_formulas::is_at(x))
668 {
669 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::at>(x));
670 }
672 {
673 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::multi_action>(x));
674 }
676 {
677 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_multi_action>(x));
678 }
679 static_cast<Derived&>(*this).leave(x);
680 }
681
682};
683
684/// \\brief Builder class
685template <typename Derived>
687{
688};
689//--- end generated action_formulas::add_action_formula_expressions code ---//
690
691} // namespace action_formulas
692
693namespace regular_formulas
694{
695
696/// \brief Builder class for regular_formula_builder. Used as a base class for pbes_expression_builder.
697template <typename Derived>
699{
700 using super = core::builder<Derived>;
701 using super::apply;
702
703 template <class T>
704 void apply(T& result, const data::data_expression& x)
705 // void apply(regular_formula& result, const data::data_expression& x)
706 {
707 static_cast<Derived&>(*this).enter(x);
708 // skip
709 static_cast<Derived&>(*this).leave(x);
710 result = atermpp::down_cast<T>(x);
711 }
712
713 template <class T>
714 void apply(T& result, const action_formulas::action_formula& x)
715 // void apply(regular_formula& result, const action_formulas::action_formula& x)
716 {
717 static_cast<Derived&>(*this).enter(x);
718 // skip
719 static_cast<Derived&>(*this).leave(x);
720 result = atermpp::down_cast<T>(x);
721 }
722};
723
724//--- start generated regular_formulas::add_sort_expressions code ---//
725template <template <class> class Builder, class Derived>
726struct add_sort_expressions: public Builder<Derived>
727{
728 using super = Builder<Derived>;
729 using super::enter;
730 using super::leave;
731 using super::update;
732 using super::apply;
733
734 template <class T>
735 void apply(T& result, const regular_formulas::seq& x)
736 {
737 static_cast<Derived&>(*this).enter(x);
738 regular_formulas::make_seq(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
739 static_cast<Derived&>(*this).leave(x);
740 }
741
742 template <class T>
743 void apply(T& result, const regular_formulas::alt& x)
744 {
745 static_cast<Derived&>(*this).enter(x);
746 regular_formulas::make_alt(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
747 static_cast<Derived&>(*this).leave(x);
748 }
749
750 template <class T>
751 void apply(T& result, const regular_formulas::trans& x)
752 {
753 static_cast<Derived&>(*this).enter(x);
754 regular_formulas::make_trans(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
755 static_cast<Derived&>(*this).leave(x);
756 }
757
758 template <class T>
759 void apply(T& result, const regular_formulas::trans_or_nil& x)
760 {
761 static_cast<Derived&>(*this).enter(x);
762 regular_formulas::make_trans_or_nil(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
763 static_cast<Derived&>(*this).leave(x);
764 }
765
766 template <class T>
768 {
769 static_cast<Derived&>(*this).enter(x);
770 regular_formulas::make_untyped_regular_formula(result, x.name(), [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
771 static_cast<Derived&>(*this).leave(x);
772 }
773
774 template <class T>
775 void apply(T& result, const regular_formulas::regular_formula& x)
776 {
777 static_cast<Derived&>(*this).enter(x);
779 {
780 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
781 }
783 {
784 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::action_formula>(x));
785 }
787 {
788 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::seq>(x));
789 }
791 {
792 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::alt>(x));
793 }
795 {
796 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::trans>(x));
797 }
799 {
800 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::trans_or_nil>(x));
801 }
803 {
804 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::untyped_regular_formula>(x));
805 }
806 static_cast<Derived&>(*this).leave(x);
807 }
808
809};
810
811/// \\brief Builder class
812template <typename Derived>
814{
815};
816//--- end generated regular_formulas::add_sort_expressions code ---//
817
818//--- start generated regular_formulas::add_data_expressions code ---//
819template <template <class> class Builder, class Derived>
820struct add_data_expressions: public Builder<Derived>
821{
822 using super = Builder<Derived>;
823 using super::enter;
824 using super::leave;
825 using super::update;
826 using super::apply;
827
828 template <class T>
829 void apply(T& result, const regular_formulas::seq& x)
830 {
831 static_cast<Derived&>(*this).enter(x);
832 regular_formulas::make_seq(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
833 static_cast<Derived&>(*this).leave(x);
834 }
835
836 template <class T>
837 void apply(T& result, const regular_formulas::alt& x)
838 {
839 static_cast<Derived&>(*this).enter(x);
840 regular_formulas::make_alt(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
841 static_cast<Derived&>(*this).leave(x);
842 }
843
844 template <class T>
845 void apply(T& result, const regular_formulas::trans& x)
846 {
847 static_cast<Derived&>(*this).enter(x);
848 regular_formulas::make_trans(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
849 static_cast<Derived&>(*this).leave(x);
850 }
851
852 template <class T>
853 void apply(T& result, const regular_formulas::trans_or_nil& x)
854 {
855 static_cast<Derived&>(*this).enter(x);
856 regular_formulas::make_trans_or_nil(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
857 static_cast<Derived&>(*this).leave(x);
858 }
859
860 template <class T>
862 {
863 static_cast<Derived&>(*this).enter(x);
864 regular_formulas::make_untyped_regular_formula(result, x.name(), [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
865 static_cast<Derived&>(*this).leave(x);
866 }
867
868 template <class T>
869 void apply(T& result, const regular_formulas::regular_formula& x)
870 {
871 static_cast<Derived&>(*this).enter(x);
873 {
874 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
875 }
877 {
878 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::action_formula>(x));
879 }
881 {
882 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::seq>(x));
883 }
885 {
886 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::alt>(x));
887 }
889 {
890 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::trans>(x));
891 }
893 {
894 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::trans_or_nil>(x));
895 }
897 {
898 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::untyped_regular_formula>(x));
899 }
900 static_cast<Derived&>(*this).leave(x);
901 }
902
903};
904
905/// \\brief Builder class
906template <typename Derived>
908{
909};
910//--- end generated regular_formulas::add_data_expressions code ---//
911
912//--- start generated regular_formulas::add_variables code ---//
913template <template <class> class Builder, class Derived>
914struct add_variables: public Builder<Derived>
915{
916 using super = Builder<Derived>;
917 using super::enter;
918 using super::leave;
919 using super::update;
920 using super::apply;
921
922 template <class T>
923 void apply(T& result, const regular_formulas::seq& x)
924 {
925 static_cast<Derived&>(*this).enter(x);
926 regular_formulas::make_seq(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
927 static_cast<Derived&>(*this).leave(x);
928 }
929
930 template <class T>
931 void apply(T& result, const regular_formulas::alt& x)
932 {
933 static_cast<Derived&>(*this).enter(x);
934 regular_formulas::make_alt(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
935 static_cast<Derived&>(*this).leave(x);
936 }
937
938 template <class T>
939 void apply(T& result, const regular_formulas::trans& x)
940 {
941 static_cast<Derived&>(*this).enter(x);
942 regular_formulas::make_trans(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
943 static_cast<Derived&>(*this).leave(x);
944 }
945
946 template <class T>
947 void apply(T& result, const regular_formulas::trans_or_nil& x)
948 {
949 static_cast<Derived&>(*this).enter(x);
950 regular_formulas::make_trans_or_nil(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
951 static_cast<Derived&>(*this).leave(x);
952 }
953
954 template <class T>
956 {
957 static_cast<Derived&>(*this).enter(x);
958 regular_formulas::make_untyped_regular_formula(result, x.name(), [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
959 static_cast<Derived&>(*this).leave(x);
960 }
961
962 template <class T>
963 void apply(T& result, const regular_formulas::regular_formula& x)
964 {
965 static_cast<Derived&>(*this).enter(x);
967 {
968 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
969 }
971 {
972 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::action_formula>(x));
973 }
975 {
976 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::seq>(x));
977 }
979 {
980 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::alt>(x));
981 }
983 {
984 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::trans>(x));
985 }
987 {
988 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::trans_or_nil>(x));
989 }
991 {
992 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::untyped_regular_formula>(x));
993 }
994 static_cast<Derived&>(*this).leave(x);
995 }
996
997};
998
999/// \\brief Builder class
1000template <typename Derived>
1002{
1003};
1004//--- end generated regular_formulas::add_variables code ---//
1005
1006//--- start generated regular_formulas::add_regular_formula_expressions code ---//
1007template <template <class> class Builder, class Derived>
1008struct add_regular_formula_expressions: public Builder<Derived>
1009{
1010 using super = Builder<Derived>;
1011 using super::enter;
1012 using super::leave;
1013 using super::update;
1014 using super::apply;
1015
1016 template <class T>
1017 void apply(T& result, const regular_formulas::seq& x)
1018 {
1019 static_cast<Derived&>(*this).enter(x);
1020 regular_formulas::make_seq(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1021 static_cast<Derived&>(*this).leave(x);
1022 }
1023
1024 template <class T>
1025 void apply(T& result, const regular_formulas::alt& x)
1026 {
1027 static_cast<Derived&>(*this).enter(x);
1028 regular_formulas::make_alt(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1029 static_cast<Derived&>(*this).leave(x);
1030 }
1031
1032 template <class T>
1033 void apply(T& result, const regular_formulas::trans& x)
1034 {
1035 static_cast<Derived&>(*this).enter(x);
1036 regular_formulas::make_trans(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1037 static_cast<Derived&>(*this).leave(x);
1038 }
1039
1040 template <class T>
1041 void apply(T& result, const regular_formulas::trans_or_nil& x)
1042 {
1043 static_cast<Derived&>(*this).enter(x);
1044 regular_formulas::make_trans_or_nil(result, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1045 static_cast<Derived&>(*this).leave(x);
1046 }
1047
1048 template <class T>
1050 {
1051 static_cast<Derived&>(*this).enter(x);
1052 regular_formulas::make_untyped_regular_formula(result, x.name(), [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1053 static_cast<Derived&>(*this).leave(x);
1054 }
1055
1056 template <class T>
1057 void apply(T& result, const regular_formulas::regular_formula& x)
1058 {
1059 static_cast<Derived&>(*this).enter(x);
1061 {
1062 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
1063 }
1065 {
1066 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<action_formulas::action_formula>(x));
1067 }
1069 {
1070 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::seq>(x));
1071 }
1073 {
1074 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::alt>(x));
1075 }
1077 {
1078 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::trans>(x));
1079 }
1081 {
1082 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::trans_or_nil>(x));
1083 }
1085 {
1086 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<regular_formulas::untyped_regular_formula>(x));
1087 }
1088 static_cast<Derived&>(*this).leave(x);
1089 }
1090
1091};
1092
1093/// \\brief Builder class
1094template <typename Derived>
1096{
1097};
1098//--- end generated regular_formulas::add_regular_formula_expressions code ---//
1099
1100} // namespace regular_formulas
1101
1102namespace state_formulas
1103{
1104
1105/// \brief Builder class for pbes_expressions. Used as a base class for pbes_expression_builder.
1106template <typename Derived>
1108{
1109 using super = core::builder<Derived>;
1110 using super::apply;
1111
1112 template <class T>
1113 void apply(T& result, const data::data_expression& x)
1114 {
1115 static_cast<Derived&>(*this).enter(x);
1116 // skip
1117 static_cast<Derived&>(*this).leave(x);
1118 result = atermpp::down_cast<T>(x);
1119 }
1120
1121 template <class T>
1122 void apply(T& result, const data::untyped_data_parameter& x)
1123 {
1124 static_cast<Derived&>(*this).enter(x);
1125 // skip
1126 static_cast<Derived&>(*this).leave(x);
1127 result = atermpp::down_cast<T>(x);
1128 }
1129
1130};
1131
1132//--- start generated state_formulas::add_sort_expressions code ---//
1133template <template <class> class Builder, class Derived>
1134struct add_sort_expressions: public Builder<Derived>
1135{
1136 using super = Builder<Derived>;
1137 using super::enter;
1138 using super::leave;
1139 using super::update;
1140 using super::apply;
1141
1142 template <class T>
1143 void apply(T& result, const state_formulas::true_& x)
1144 {
1145 static_cast<Derived&>(*this).enter(x);
1146 // skip
1147 static_cast<Derived&>(*this).leave(x);
1148 result = atermpp::down_cast<T>(x);
1149 }
1150
1151 template <class T>
1152 void apply(T& result, const state_formulas::false_& x)
1153 {
1154 static_cast<Derived&>(*this).enter(x);
1155 // skip
1156 static_cast<Derived&>(*this).leave(x);
1157 result = atermpp::down_cast<T>(x);
1158 }
1159
1160 template <class T>
1161 void apply(T& result, const state_formulas::not_& x)
1162 {
1163 static_cast<Derived&>(*this).enter(x);
1164 state_formulas::make_not(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1165 static_cast<Derived&>(*this).leave(x);
1166 }
1167
1168 template <class T>
1169 void apply(T& result, const state_formulas::minus& x)
1170 {
1171 static_cast<Derived&>(*this).enter(x);
1172 state_formulas::make_minus(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1173 static_cast<Derived&>(*this).leave(x);
1174 }
1175
1176 template <class T>
1177 void apply(T& result, const state_formulas::and_& x)
1178 {
1179 static_cast<Derived&>(*this).enter(x);
1180 state_formulas::make_and(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1181 static_cast<Derived&>(*this).leave(x);
1182 }
1183
1184 template <class T>
1185 void apply(T& result, const state_formulas::or_& x)
1186 {
1187 static_cast<Derived&>(*this).enter(x);
1188 state_formulas::make_or(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1189 static_cast<Derived&>(*this).leave(x);
1190 }
1191
1192 template <class T>
1193 void apply(T& result, const state_formulas::imp& x)
1194 {
1195 static_cast<Derived&>(*this).enter(x);
1196 state_formulas::make_imp(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1197 static_cast<Derived&>(*this).leave(x);
1198 }
1199
1200 template <class T>
1201 void apply(T& result, const state_formulas::plus& x)
1202 {
1203 static_cast<Derived&>(*this).enter(x);
1204 state_formulas::make_plus(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1205 static_cast<Derived&>(*this).leave(x);
1206 }
1207
1208 template <class T>
1209 void apply(T& result, const state_formulas::const_multiply& x)
1210 {
1211 static_cast<Derived&>(*this).enter(x);
1212 state_formulas::make_const_multiply(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1213 static_cast<Derived&>(*this).leave(x);
1214 }
1215
1216 template <class T>
1217 void apply(T& result, const state_formulas::const_multiply_alt& x)
1218 {
1219 static_cast<Derived&>(*this).enter(x);
1220 state_formulas::make_const_multiply_alt(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1221 static_cast<Derived&>(*this).leave(x);
1222 }
1223
1224 template <class T>
1225 void apply(T& result, const state_formulas::forall& x)
1226 {
1227 static_cast<Derived&>(*this).enter(x);
1228 state_formulas::make_forall(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1229 static_cast<Derived&>(*this).leave(x);
1230 }
1231
1232 template <class T>
1233 void apply(T& result, const state_formulas::exists& x)
1234 {
1235 static_cast<Derived&>(*this).enter(x);
1236 state_formulas::make_exists(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1237 static_cast<Derived&>(*this).leave(x);
1238 }
1239
1240 template <class T>
1241 void apply(T& result, const state_formulas::infimum& x)
1242 {
1243 static_cast<Derived&>(*this).enter(x);
1244 state_formulas::make_infimum(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1245 static_cast<Derived&>(*this).leave(x);
1246 }
1247
1248 template <class T>
1249 void apply(T& result, const state_formulas::supremum& x)
1250 {
1251 static_cast<Derived&>(*this).enter(x);
1252 state_formulas::make_supremum(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1253 static_cast<Derived&>(*this).leave(x);
1254 }
1255
1256 template <class T>
1257 void apply(T& result, const state_formulas::sum& x)
1258 {
1259 static_cast<Derived&>(*this).enter(x);
1260 state_formulas::make_sum(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1261 static_cast<Derived&>(*this).leave(x);
1262 }
1263
1264 template <class T>
1265 void apply(T& result, const state_formulas::must& x)
1266 {
1267 static_cast<Derived&>(*this).enter(x);
1268 state_formulas::make_must(result, [&](regular_formulas::regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.formula()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1269 static_cast<Derived&>(*this).leave(x);
1270 }
1271
1272 template <class T>
1273 void apply(T& result, const state_formulas::may& x)
1274 {
1275 static_cast<Derived&>(*this).enter(x);
1276 state_formulas::make_may(result, [&](regular_formulas::regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.formula()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1277 static_cast<Derived&>(*this).leave(x);
1278 }
1279
1280 template <class T>
1281 void apply(T& result, const state_formulas::yaled& x)
1282 {
1283 static_cast<Derived&>(*this).enter(x);
1284 // skip
1285 static_cast<Derived&>(*this).leave(x);
1286 result = atermpp::down_cast<T>(x);
1287 }
1288
1289 template <class T>
1290 void apply(T& result, const state_formulas::yaled_timed& x)
1291 {
1292 static_cast<Derived&>(*this).enter(x);
1293 state_formulas::make_yaled_timed(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
1294 static_cast<Derived&>(*this).leave(x);
1295 }
1296
1297 template <class T>
1298 void apply(T& result, const state_formulas::delay& x)
1299 {
1300 static_cast<Derived&>(*this).enter(x);
1301 // skip
1302 static_cast<Derived&>(*this).leave(x);
1303 result = atermpp::down_cast<T>(x);
1304 }
1305
1306 template <class T>
1307 void apply(T& result, const state_formulas::delay_timed& x)
1308 {
1309 static_cast<Derived&>(*this).enter(x);
1310 state_formulas::make_delay_timed(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
1311 static_cast<Derived&>(*this).leave(x);
1312 }
1313
1314 template <class T>
1315 void apply(T& result, const state_formulas::variable& x)
1316 {
1317 static_cast<Derived&>(*this).enter(x);
1318 state_formulas::make_variable(result, x.name(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.arguments()); });
1319 static_cast<Derived&>(*this).leave(x);
1320 }
1321
1322 template <class T>
1323 void apply(T& result, const state_formulas::nu& x)
1324 {
1325 static_cast<Derived&>(*this).enter(x);
1326 state_formulas::make_nu(result, x.name(), [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1327 static_cast<Derived&>(*this).leave(x);
1328 }
1329
1330 template <class T>
1331 void apply(T& result, const state_formulas::mu& x)
1332 {
1333 static_cast<Derived&>(*this).enter(x);
1334 state_formulas::make_mu(result, x.name(), [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1335 static_cast<Derived&>(*this).leave(x);
1336 }
1337
1339 {
1340 static_cast<Derived&>(*this).enter(x);
1341 process::action_label_list result_action_labels;
1342 static_cast<Derived&>(*this).apply(result_action_labels, x.action_labels());
1343 x.action_labels() = result_action_labels;
1344 state_formula result_formula;
1345 static_cast<Derived&>(*this).apply(result_formula, x.formula());
1346 x.formula() = result_formula;
1347 static_cast<Derived&>(*this).leave(x);
1348 }
1349
1350 template <class T>
1351 void apply(T& result, const state_formulas::state_formula& x)
1352 {
1353 static_cast<Derived&>(*this).enter(x);
1355 {
1356 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
1357 }
1359 {
1360 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1361 }
1362 else if (state_formulas::is_true(x))
1363 {
1364 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::true_>(x));
1365 }
1367 {
1368 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::false_>(x));
1369 }
1370 else if (state_formulas::is_not(x))
1371 {
1372 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::not_>(x));
1373 }
1375 {
1376 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::minus>(x));
1377 }
1378 else if (state_formulas::is_and(x))
1379 {
1380 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::and_>(x));
1381 }
1382 else if (state_formulas::is_or(x))
1383 {
1384 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::or_>(x));
1385 }
1386 else if (state_formulas::is_imp(x))
1387 {
1388 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::imp>(x));
1389 }
1390 else if (state_formulas::is_plus(x))
1391 {
1392 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::plus>(x));
1393 }
1395 {
1396 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::const_multiply>(x));
1397 }
1399 {
1400 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::const_multiply_alt>(x));
1401 }
1403 {
1404 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::forall>(x));
1405 }
1407 {
1408 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::exists>(x));
1409 }
1411 {
1412 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::infimum>(x));
1413 }
1415 {
1416 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::supremum>(x));
1417 }
1418 else if (state_formulas::is_sum(x))
1419 {
1420 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::sum>(x));
1421 }
1422 else if (state_formulas::is_must(x))
1423 {
1424 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::must>(x));
1425 }
1426 else if (state_formulas::is_may(x))
1427 {
1428 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::may>(x));
1429 }
1431 {
1432 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::yaled>(x));
1433 }
1435 {
1436 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::yaled_timed>(x));
1437 }
1439 {
1440 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::delay>(x));
1441 }
1443 {
1444 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::delay_timed>(x));
1445 }
1447 {
1448 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::variable>(x));
1449 }
1450 else if (state_formulas::is_nu(x))
1451 {
1452 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::nu>(x));
1453 }
1454 else if (state_formulas::is_mu(x))
1455 {
1456 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::mu>(x));
1457 }
1458 static_cast<Derived&>(*this).leave(x);
1459 }
1460
1461};
1462
1463/// \\brief Builder class
1464template <typename Derived>
1466{
1467};
1468//--- end generated state_formulas::add_sort_expressions code ---//
1469
1470//--- start generated state_formulas::add_data_expressions code ---//
1471template <template <class> class Builder, class Derived>
1472struct add_data_expressions: public Builder<Derived>
1473{
1474 using super = Builder<Derived>;
1475 using super::enter;
1476 using super::leave;
1477 using super::update;
1478 using super::apply;
1479
1480 template <class T>
1481 void apply(T& result, const state_formulas::true_& x)
1482 {
1483 static_cast<Derived&>(*this).enter(x);
1484 // skip
1485 static_cast<Derived&>(*this).leave(x);
1486 result = atermpp::down_cast<T>(x);
1487 }
1488
1489 template <class T>
1490 void apply(T& result, const state_formulas::false_& x)
1491 {
1492 static_cast<Derived&>(*this).enter(x);
1493 // skip
1494 static_cast<Derived&>(*this).leave(x);
1495 result = atermpp::down_cast<T>(x);
1496 }
1497
1498 template <class T>
1499 void apply(T& result, const state_formulas::not_& x)
1500 {
1501 static_cast<Derived&>(*this).enter(x);
1502 state_formulas::make_not(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1503 static_cast<Derived&>(*this).leave(x);
1504 }
1505
1506 template <class T>
1507 void apply(T& result, const state_formulas::minus& x)
1508 {
1509 static_cast<Derived&>(*this).enter(x);
1510 state_formulas::make_minus(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1511 static_cast<Derived&>(*this).leave(x);
1512 }
1513
1514 template <class T>
1515 void apply(T& result, const state_formulas::and_& x)
1516 {
1517 static_cast<Derived&>(*this).enter(x);
1518 state_formulas::make_and(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1519 static_cast<Derived&>(*this).leave(x);
1520 }
1521
1522 template <class T>
1523 void apply(T& result, const state_formulas::or_& x)
1524 {
1525 static_cast<Derived&>(*this).enter(x);
1526 state_formulas::make_or(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1527 static_cast<Derived&>(*this).leave(x);
1528 }
1529
1530 template <class T>
1531 void apply(T& result, const state_formulas::imp& x)
1532 {
1533 static_cast<Derived&>(*this).enter(x);
1534 state_formulas::make_imp(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1535 static_cast<Derived&>(*this).leave(x);
1536 }
1537
1538 template <class T>
1539 void apply(T& result, const state_formulas::plus& x)
1540 {
1541 static_cast<Derived&>(*this).enter(x);
1542 state_formulas::make_plus(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1543 static_cast<Derived&>(*this).leave(x);
1544 }
1545
1546 template <class T>
1547 void apply(T& result, const state_formulas::const_multiply& x)
1548 {
1549 static_cast<Derived&>(*this).enter(x);
1550 state_formulas::make_const_multiply(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1551 static_cast<Derived&>(*this).leave(x);
1552 }
1553
1554 template <class T>
1555 void apply(T& result, const state_formulas::const_multiply_alt& x)
1556 {
1557 static_cast<Derived&>(*this).enter(x);
1558 state_formulas::make_const_multiply_alt(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1559 static_cast<Derived&>(*this).leave(x);
1560 }
1561
1562 template <class T>
1563 void apply(T& result, const state_formulas::forall& x)
1564 {
1565 static_cast<Derived&>(*this).enter(x);
1566 state_formulas::make_forall(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1567 static_cast<Derived&>(*this).leave(x);
1568 }
1569
1570 template <class T>
1571 void apply(T& result, const state_formulas::exists& x)
1572 {
1573 static_cast<Derived&>(*this).enter(x);
1574 state_formulas::make_exists(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1575 static_cast<Derived&>(*this).leave(x);
1576 }
1577
1578 template <class T>
1579 void apply(T& result, const state_formulas::infimum& x)
1580 {
1581 static_cast<Derived&>(*this).enter(x);
1582 state_formulas::make_infimum(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1583 static_cast<Derived&>(*this).leave(x);
1584 }
1585
1586 template <class T>
1587 void apply(T& result, const state_formulas::supremum& x)
1588 {
1589 static_cast<Derived&>(*this).enter(x);
1590 state_formulas::make_supremum(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1591 static_cast<Derived&>(*this).leave(x);
1592 }
1593
1594 template <class T>
1595 void apply(T& result, const state_formulas::sum& x)
1596 {
1597 static_cast<Derived&>(*this).enter(x);
1598 state_formulas::make_sum(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1599 static_cast<Derived&>(*this).leave(x);
1600 }
1601
1602 template <class T>
1603 void apply(T& result, const state_formulas::must& x)
1604 {
1605 static_cast<Derived&>(*this).enter(x);
1606 state_formulas::make_must(result, [&](regular_formulas::regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.formula()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1607 static_cast<Derived&>(*this).leave(x);
1608 }
1609
1610 template <class T>
1611 void apply(T& result, const state_formulas::may& x)
1612 {
1613 static_cast<Derived&>(*this).enter(x);
1614 state_formulas::make_may(result, [&](regular_formulas::regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.formula()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1615 static_cast<Derived&>(*this).leave(x);
1616 }
1617
1618 template <class T>
1619 void apply(T& result, const state_formulas::yaled& x)
1620 {
1621 static_cast<Derived&>(*this).enter(x);
1622 // skip
1623 static_cast<Derived&>(*this).leave(x);
1624 result = atermpp::down_cast<T>(x);
1625 }
1626
1627 template <class T>
1628 void apply(T& result, const state_formulas::yaled_timed& x)
1629 {
1630 static_cast<Derived&>(*this).enter(x);
1631 state_formulas::make_yaled_timed(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
1632 static_cast<Derived&>(*this).leave(x);
1633 }
1634
1635 template <class T>
1636 void apply(T& result, const state_formulas::delay& x)
1637 {
1638 static_cast<Derived&>(*this).enter(x);
1639 // skip
1640 static_cast<Derived&>(*this).leave(x);
1641 result = atermpp::down_cast<T>(x);
1642 }
1643
1644 template <class T>
1645 void apply(T& result, const state_formulas::delay_timed& x)
1646 {
1647 static_cast<Derived&>(*this).enter(x);
1648 state_formulas::make_delay_timed(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
1649 static_cast<Derived&>(*this).leave(x);
1650 }
1651
1652 template <class T>
1653 void apply(T& result, const state_formulas::variable& x)
1654 {
1655 static_cast<Derived&>(*this).enter(x);
1656 state_formulas::make_variable(result, x.name(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.arguments()); });
1657 static_cast<Derived&>(*this).leave(x);
1658 }
1659
1660 template <class T>
1661 void apply(T& result, const state_formulas::nu& x)
1662 {
1663 static_cast<Derived&>(*this).enter(x);
1664 state_formulas::make_nu(result, x.name(), [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1665 static_cast<Derived&>(*this).leave(x);
1666 }
1667
1668 template <class T>
1669 void apply(T& result, const state_formulas::mu& x)
1670 {
1671 static_cast<Derived&>(*this).enter(x);
1672 state_formulas::make_mu(result, x.name(), [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1673 static_cast<Derived&>(*this).leave(x);
1674 }
1675
1677 {
1678 static_cast<Derived&>(*this).enter(x);
1679 state_formula result_formula;
1680 static_cast<Derived&>(*this).apply(result_formula, x.formula());
1681 x.formula() = result_formula;
1682 static_cast<Derived&>(*this).leave(x);
1683 }
1684
1685 template <class T>
1686 void apply(T& result, const state_formulas::state_formula& x)
1687 {
1688 static_cast<Derived&>(*this).enter(x);
1690 {
1691 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
1692 }
1694 {
1695 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1696 }
1697 else if (state_formulas::is_true(x))
1698 {
1699 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::true_>(x));
1700 }
1702 {
1703 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::false_>(x));
1704 }
1705 else if (state_formulas::is_not(x))
1706 {
1707 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::not_>(x));
1708 }
1710 {
1711 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::minus>(x));
1712 }
1713 else if (state_formulas::is_and(x))
1714 {
1715 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::and_>(x));
1716 }
1717 else if (state_formulas::is_or(x))
1718 {
1719 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::or_>(x));
1720 }
1721 else if (state_formulas::is_imp(x))
1722 {
1723 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::imp>(x));
1724 }
1725 else if (state_formulas::is_plus(x))
1726 {
1727 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::plus>(x));
1728 }
1730 {
1731 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::const_multiply>(x));
1732 }
1734 {
1735 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::const_multiply_alt>(x));
1736 }
1738 {
1739 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::forall>(x));
1740 }
1742 {
1743 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::exists>(x));
1744 }
1746 {
1747 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::infimum>(x));
1748 }
1750 {
1751 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::supremum>(x));
1752 }
1753 else if (state_formulas::is_sum(x))
1754 {
1755 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::sum>(x));
1756 }
1757 else if (state_formulas::is_must(x))
1758 {
1759 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::must>(x));
1760 }
1761 else if (state_formulas::is_may(x))
1762 {
1763 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::may>(x));
1764 }
1766 {
1767 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::yaled>(x));
1768 }
1770 {
1771 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::yaled_timed>(x));
1772 }
1774 {
1775 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::delay>(x));
1776 }
1778 {
1779 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::delay_timed>(x));
1780 }
1782 {
1783 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::variable>(x));
1784 }
1785 else if (state_formulas::is_nu(x))
1786 {
1787 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::nu>(x));
1788 }
1789 else if (state_formulas::is_mu(x))
1790 {
1791 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::mu>(x));
1792 }
1793 static_cast<Derived&>(*this).leave(x);
1794 }
1795
1796};
1797
1798/// \\brief Builder class
1799template <typename Derived>
1801{
1802};
1803//--- end generated state_formulas::add_data_expressions code ---//
1804
1805//--- start generated state_formulas::add_variables code ---//
1806template <template <class> class Builder, class Derived>
1807struct add_variables: public Builder<Derived>
1808{
1809 using super = Builder<Derived>;
1810 using super::enter;
1811 using super::leave;
1812 using super::update;
1813 using super::apply;
1814
1815 template <class T>
1816 void apply(T& result, const state_formulas::true_& x)
1817 {
1818 static_cast<Derived&>(*this).enter(x);
1819 // skip
1820 static_cast<Derived&>(*this).leave(x);
1821 result = atermpp::down_cast<T>(x);
1822 }
1823
1824 template <class T>
1825 void apply(T& result, const state_formulas::false_& x)
1826 {
1827 static_cast<Derived&>(*this).enter(x);
1828 // skip
1829 static_cast<Derived&>(*this).leave(x);
1830 result = atermpp::down_cast<T>(x);
1831 }
1832
1833 template <class T>
1834 void apply(T& result, const state_formulas::not_& x)
1835 {
1836 static_cast<Derived&>(*this).enter(x);
1837 state_formulas::make_not(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1838 static_cast<Derived&>(*this).leave(x);
1839 }
1840
1841 template <class T>
1842 void apply(T& result, const state_formulas::minus& x)
1843 {
1844 static_cast<Derived&>(*this).enter(x);
1845 state_formulas::make_minus(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1846 static_cast<Derived&>(*this).leave(x);
1847 }
1848
1849 template <class T>
1850 void apply(T& result, const state_formulas::and_& x)
1851 {
1852 static_cast<Derived&>(*this).enter(x);
1853 state_formulas::make_and(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1854 static_cast<Derived&>(*this).leave(x);
1855 }
1856
1857 template <class T>
1858 void apply(T& result, const state_formulas::or_& x)
1859 {
1860 static_cast<Derived&>(*this).enter(x);
1861 state_formulas::make_or(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1862 static_cast<Derived&>(*this).leave(x);
1863 }
1864
1865 template <class T>
1866 void apply(T& result, const state_formulas::imp& x)
1867 {
1868 static_cast<Derived&>(*this).enter(x);
1869 state_formulas::make_imp(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1870 static_cast<Derived&>(*this).leave(x);
1871 }
1872
1873 template <class T>
1874 void apply(T& result, const state_formulas::plus& x)
1875 {
1876 static_cast<Derived&>(*this).enter(x);
1877 state_formulas::make_plus(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1878 static_cast<Derived&>(*this).leave(x);
1879 }
1880
1881 template <class T>
1882 void apply(T& result, const state_formulas::const_multiply& x)
1883 {
1884 static_cast<Derived&>(*this).enter(x);
1885 state_formulas::make_const_multiply(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1886 static_cast<Derived&>(*this).leave(x);
1887 }
1888
1889 template <class T>
1890 void apply(T& result, const state_formulas::const_multiply_alt& x)
1891 {
1892 static_cast<Derived&>(*this).enter(x);
1893 state_formulas::make_const_multiply_alt(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1894 static_cast<Derived&>(*this).leave(x);
1895 }
1896
1897 template <class T>
1898 void apply(T& result, const state_formulas::forall& x)
1899 {
1900 static_cast<Derived&>(*this).enter(x);
1901 state_formulas::make_forall(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1902 static_cast<Derived&>(*this).leave(x);
1903 }
1904
1905 template <class T>
1906 void apply(T& result, const state_formulas::exists& x)
1907 {
1908 static_cast<Derived&>(*this).enter(x);
1909 state_formulas::make_exists(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1910 static_cast<Derived&>(*this).leave(x);
1911 }
1912
1913 template <class T>
1914 void apply(T& result, const state_formulas::infimum& x)
1915 {
1916 static_cast<Derived&>(*this).enter(x);
1917 state_formulas::make_infimum(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1918 static_cast<Derived&>(*this).leave(x);
1919 }
1920
1921 template <class T>
1922 void apply(T& result, const state_formulas::supremum& x)
1923 {
1924 static_cast<Derived&>(*this).enter(x);
1925 state_formulas::make_supremum(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1926 static_cast<Derived&>(*this).leave(x);
1927 }
1928
1929 template <class T>
1930 void apply(T& result, const state_formulas::sum& x)
1931 {
1932 static_cast<Derived&>(*this).enter(x);
1933 state_formulas::make_sum(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
1934 static_cast<Derived&>(*this).leave(x);
1935 }
1936
1937 template <class T>
1938 void apply(T& result, const state_formulas::must& x)
1939 {
1940 static_cast<Derived&>(*this).enter(x);
1941 state_formulas::make_must(result, [&](regular_formulas::regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.formula()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1942 static_cast<Derived&>(*this).leave(x);
1943 }
1944
1945 template <class T>
1946 void apply(T& result, const state_formulas::may& x)
1947 {
1948 static_cast<Derived&>(*this).enter(x);
1949 state_formulas::make_may(result, [&](regular_formulas::regular_formula& result){ static_cast<Derived&>(*this).apply(result, x.formula()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1950 static_cast<Derived&>(*this).leave(x);
1951 }
1952
1953 template <class T>
1954 void apply(T& result, const state_formulas::yaled& x)
1955 {
1956 static_cast<Derived&>(*this).enter(x);
1957 // skip
1958 static_cast<Derived&>(*this).leave(x);
1959 result = atermpp::down_cast<T>(x);
1960 }
1961
1962 template <class T>
1963 void apply(T& result, const state_formulas::yaled_timed& x)
1964 {
1965 static_cast<Derived&>(*this).enter(x);
1966 state_formulas::make_yaled_timed(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
1967 static_cast<Derived&>(*this).leave(x);
1968 }
1969
1970 template <class T>
1971 void apply(T& result, const state_formulas::delay& x)
1972 {
1973 static_cast<Derived&>(*this).enter(x);
1974 // skip
1975 static_cast<Derived&>(*this).leave(x);
1976 result = atermpp::down_cast<T>(x);
1977 }
1978
1979 template <class T>
1980 void apply(T& result, const state_formulas::delay_timed& x)
1981 {
1982 static_cast<Derived&>(*this).enter(x);
1983 state_formulas::make_delay_timed(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
1984 static_cast<Derived&>(*this).leave(x);
1985 }
1986
1987 template <class T>
1988 void apply(T& result, const state_formulas::variable& x)
1989 {
1990 static_cast<Derived&>(*this).enter(x);
1991 state_formulas::make_variable(result, x.name(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.arguments()); });
1992 static_cast<Derived&>(*this).leave(x);
1993 }
1994
1995 template <class T>
1996 void apply(T& result, const state_formulas::nu& x)
1997 {
1998 static_cast<Derived&>(*this).enter(x);
1999 state_formulas::make_nu(result, x.name(), [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
2000 static_cast<Derived&>(*this).leave(x);
2001 }
2002
2003 template <class T>
2004 void apply(T& result, const state_formulas::mu& x)
2005 {
2006 static_cast<Derived&>(*this).enter(x);
2007 state_formulas::make_mu(result, x.name(), [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
2008 static_cast<Derived&>(*this).leave(x);
2009 }
2010
2012 {
2013 static_cast<Derived&>(*this).enter(x);
2014 state_formula result_formula;
2015 static_cast<Derived&>(*this).apply(result_formula, x.formula());
2016 x.formula() = result_formula;
2017 static_cast<Derived&>(*this).leave(x);
2018 }
2019
2020 template <class T>
2021 void apply(T& result, const state_formulas::state_formula& x)
2022 {
2023 static_cast<Derived&>(*this).enter(x);
2025 {
2026 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
2027 }
2029 {
2030 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
2031 }
2032 else if (state_formulas::is_true(x))
2033 {
2034 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::true_>(x));
2035 }
2037 {
2038 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::false_>(x));
2039 }
2040 else if (state_formulas::is_not(x))
2041 {
2042 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::not_>(x));
2043 }
2045 {
2046 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::minus>(x));
2047 }
2048 else if (state_formulas::is_and(x))
2049 {
2050 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::and_>(x));
2051 }
2052 else if (state_formulas::is_or(x))
2053 {
2054 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::or_>(x));
2055 }
2056 else if (state_formulas::is_imp(x))
2057 {
2058 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::imp>(x));
2059 }
2060 else if (state_formulas::is_plus(x))
2061 {
2062 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::plus>(x));
2063 }
2065 {
2066 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::const_multiply>(x));
2067 }
2069 {
2070 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::const_multiply_alt>(x));
2071 }
2073 {
2074 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::forall>(x));
2075 }
2077 {
2078 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::exists>(x));
2079 }
2081 {
2082 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::infimum>(x));
2083 }
2085 {
2086 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::supremum>(x));
2087 }
2088 else if (state_formulas::is_sum(x))
2089 {
2090 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::sum>(x));
2091 }
2092 else if (state_formulas::is_must(x))
2093 {
2094 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::must>(x));
2095 }
2096 else if (state_formulas::is_may(x))
2097 {
2098 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::may>(x));
2099 }
2101 {
2102 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::yaled>(x));
2103 }
2105 {
2106 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::yaled_timed>(x));
2107 }
2109 {
2110 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::delay>(x));
2111 }
2113 {
2114 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::delay_timed>(x));
2115 }
2117 {
2118 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::variable>(x));
2119 }
2120 else if (state_formulas::is_nu(x))
2121 {
2122 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::nu>(x));
2123 }
2124 else if (state_formulas::is_mu(x))
2125 {
2126 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::mu>(x));
2127 }
2128 static_cast<Derived&>(*this).leave(x);
2129 }
2130
2131};
2132
2133/// \\brief Builder class
2134template <typename Derived>
2136{
2137};
2138//--- end generated state_formulas::add_variables code ---//
2139
2140//--- start generated state_formulas::add_state_formula_expressions code ---//
2141template <template <class> class Builder, class Derived>
2142struct add_state_formula_expressions: public Builder<Derived>
2143{
2144 using super = Builder<Derived>;
2145 using super::enter;
2146 using super::leave;
2147 using super::update;
2148 using super::apply;
2149
2150 template <class T>
2151 void apply(T& result, const state_formulas::true_& x)
2152 {
2153 static_cast<Derived&>(*this).enter(x);
2154 // skip
2155 static_cast<Derived&>(*this).leave(x);
2156 result = atermpp::down_cast<T>(x);
2157 }
2158
2159 template <class T>
2160 void apply(T& result, const state_formulas::false_& x)
2161 {
2162 static_cast<Derived&>(*this).enter(x);
2163 // skip
2164 static_cast<Derived&>(*this).leave(x);
2165 result = atermpp::down_cast<T>(x);
2166 }
2167
2168 template <class T>
2169 void apply(T& result, const state_formulas::not_& x)
2170 {
2171 static_cast<Derived&>(*this).enter(x);
2172 state_formulas::make_not(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
2173 static_cast<Derived&>(*this).leave(x);
2174 }
2175
2176 template <class T>
2177 void apply(T& result, const state_formulas::minus& x)
2178 {
2179 static_cast<Derived&>(*this).enter(x);
2180 state_formulas::make_minus(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
2181 static_cast<Derived&>(*this).leave(x);
2182 }
2183
2184 template <class T>
2185 void apply(T& result, const state_formulas::and_& x)
2186 {
2187 static_cast<Derived&>(*this).enter(x);
2188 state_formulas::make_and(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
2189 static_cast<Derived&>(*this).leave(x);
2190 }
2191
2192 template <class T>
2193 void apply(T& result, const state_formulas::or_& x)
2194 {
2195 static_cast<Derived&>(*this).enter(x);
2196 state_formulas::make_or(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
2197 static_cast<Derived&>(*this).leave(x);
2198 }
2199
2200 template <class T>
2201 void apply(T& result, const state_formulas::imp& x)
2202 {
2203 static_cast<Derived&>(*this).enter(x);
2204 state_formulas::make_imp(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
2205 static_cast<Derived&>(*this).leave(x);
2206 }
2207
2208 template <class T>
2209 void apply(T& result, const state_formulas::plus& x)
2210 {
2211 static_cast<Derived&>(*this).enter(x);
2212 state_formulas::make_plus(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
2213 static_cast<Derived&>(*this).leave(x);
2214 }
2215
2216 template <class T>
2217 void apply(T& result, const state_formulas::const_multiply& x)
2218 {
2219 static_cast<Derived&>(*this).enter(x);
2220 state_formulas::make_const_multiply(result, x.left(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
2221 static_cast<Derived&>(*this).leave(x);
2222 }
2223
2224 template <class T>
2225 void apply(T& result, const state_formulas::const_multiply_alt& x)
2226 {
2227 static_cast<Derived&>(*this).enter(x);
2228 state_formulas::make_const_multiply_alt(result, [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, x.right());
2229 static_cast<Derived&>(*this).leave(x);
2230 }
2231
2232 template <class T>
2233 void apply(T& result, const state_formulas::forall& x)
2234 {
2235 static_cast<Derived&>(*this).enter(x);
2236 state_formulas::make_forall(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
2237 static_cast<Derived&>(*this).leave(x);
2238 }
2239
2240 template <class T>
2241 void apply(T& result, const state_formulas::exists& x)
2242 {
2243 static_cast<Derived&>(*this).enter(x);
2244 state_formulas::make_exists(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
2245 static_cast<Derived&>(*this).leave(x);
2246 }
2247
2248 template <class T>
2249 void apply(T& result, const state_formulas::infimum& x)
2250 {
2251 static_cast<Derived&>(*this).enter(x);
2252 state_formulas::make_infimum(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
2253 static_cast<Derived&>(*this).leave(x);
2254 }
2255
2256 template <class T>
2257 void apply(T& result, const state_formulas::supremum& x)
2258 {
2259 static_cast<Derived&>(*this).enter(x);
2260 state_formulas::make_supremum(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
2261 static_cast<Derived&>(*this).leave(x);
2262 }
2263
2264 template <class T>
2265 void apply(T& result, const state_formulas::sum& x)
2266 {
2267 static_cast<Derived&>(*this).enter(x);
2268 state_formulas::make_sum(result, x.variables(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
2269 static_cast<Derived&>(*this).leave(x);
2270 }
2271
2272 template <class T>
2273 void apply(T& result, const state_formulas::must& x)
2274 {
2275 static_cast<Derived&>(*this).enter(x);
2276 state_formulas::make_must(result, x.formula(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
2277 static_cast<Derived&>(*this).leave(x);
2278 }
2279
2280 template <class T>
2281 void apply(T& result, const state_formulas::may& x)
2282 {
2283 static_cast<Derived&>(*this).enter(x);
2284 state_formulas::make_may(result, x.formula(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
2285 static_cast<Derived&>(*this).leave(x);
2286 }
2287
2288 template <class T>
2289 void apply(T& result, const state_formulas::yaled& x)
2290 {
2291 static_cast<Derived&>(*this).enter(x);
2292 // skip
2293 static_cast<Derived&>(*this).leave(x);
2294 result = atermpp::down_cast<T>(x);
2295 }
2296
2297 template <class T>
2298 void apply(T& result, const state_formulas::yaled_timed& x)
2299 {
2300 static_cast<Derived&>(*this).enter(x);
2301 // skip
2302 static_cast<Derived&>(*this).leave(x);
2303 result = atermpp::down_cast<T>(x);
2304 }
2305
2306 template <class T>
2307 void apply(T& result, const state_formulas::delay& x)
2308 {
2309 static_cast<Derived&>(*this).enter(x);
2310 // skip
2311 static_cast<Derived&>(*this).leave(x);
2312 result = atermpp::down_cast<T>(x);
2313 }
2314
2315 template <class T>
2316 void apply(T& result, const state_formulas::delay_timed& x)
2317 {
2318 static_cast<Derived&>(*this).enter(x);
2319 // skip
2320 static_cast<Derived&>(*this).leave(x);
2321 result = atermpp::down_cast<T>(x);
2322 }
2323
2324 template <class T>
2325 void apply(T& result, const state_formulas::variable& x)
2326 {
2327 static_cast<Derived&>(*this).enter(x);
2328 // skip
2329 static_cast<Derived&>(*this).leave(x);
2330 result = atermpp::down_cast<T>(x);
2331 }
2332
2333 template <class T>
2334 void apply(T& result, const state_formulas::nu& x)
2335 {
2336 static_cast<Derived&>(*this).enter(x);
2337 state_formulas::make_nu(result, x.name(), x.assignments(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
2338 static_cast<Derived&>(*this).leave(x);
2339 }
2340
2341 template <class T>
2342 void apply(T& result, const state_formulas::mu& x)
2343 {
2344 static_cast<Derived&>(*this).enter(x);
2345 state_formulas::make_mu(result, x.name(), x.assignments(), [&](state_formula& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
2346 static_cast<Derived&>(*this).leave(x);
2347 }
2348
2350 {
2351 static_cast<Derived&>(*this).enter(x);
2352 state_formula result_formula;
2353 static_cast<Derived&>(*this).apply(result_formula, x.formula());
2354 x.formula() = result_formula;
2355 static_cast<Derived&>(*this).leave(x);
2356 }
2357
2358 template <class T>
2359 void apply(T& result, const state_formulas::state_formula& x)
2360 {
2361 static_cast<Derived&>(*this).enter(x);
2363 {
2364 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
2365 }
2367 {
2368 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
2369 }
2370 else if (state_formulas::is_true(x))
2371 {
2372 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::true_>(x));
2373 }
2375 {
2376 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::false_>(x));
2377 }
2378 else if (state_formulas::is_not(x))
2379 {
2380 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::not_>(x));
2381 }
2383 {
2384 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::minus>(x));
2385 }
2386 else if (state_formulas::is_and(x))
2387 {
2388 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::and_>(x));
2389 }
2390 else if (state_formulas::is_or(x))
2391 {
2392 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::or_>(x));
2393 }
2394 else if (state_formulas::is_imp(x))
2395 {
2396 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::imp>(x));
2397 }
2398 else if (state_formulas::is_plus(x))
2399 {
2400 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::plus>(x));
2401 }
2403 {
2404 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::const_multiply>(x));
2405 }
2407 {
2408 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::const_multiply_alt>(x));
2409 }
2411 {
2412 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::forall>(x));
2413 }
2415 {
2416 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::exists>(x));
2417 }
2419 {
2420 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::infimum>(x));
2421 }
2423 {
2424 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::supremum>(x));
2425 }
2426 else if (state_formulas::is_sum(x))
2427 {
2428 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::sum>(x));
2429 }
2430 else if (state_formulas::is_must(x))
2431 {
2432 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::must>(x));
2433 }
2434 else if (state_formulas::is_may(x))
2435 {
2436 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::may>(x));
2437 }
2439 {
2440 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::yaled>(x));
2441 }
2443 {
2444 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::yaled_timed>(x));
2445 }
2447 {
2448 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::delay>(x));
2449 }
2451 {
2452 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::delay_timed>(x));
2453 }
2455 {
2456 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::variable>(x));
2457 }
2458 else if (state_formulas::is_nu(x))
2459 {
2460 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::nu>(x));
2461 }
2462 else if (state_formulas::is_mu(x))
2463 {
2464 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<state_formulas::mu>(x));
2465 }
2466 static_cast<Derived&>(*this).leave(x);
2467 }
2468
2469};
2470
2471/// \\brief Builder class
2472template <typename Derived>
2474{
2475};
2476//--- end generated state_formulas::add_state_formula_expressions code ---//
2477
2478} // namespace state_formulas
2479
2480} // namespace mcrl2
2481
2482#endif // MCRL2_MODAL_FORMULA_BUILDER_H
aterm_string(const aterm_string &t) noexcept=default
\brief The and operator for action formulas
const action_formula & left() const
const action_formula & right() const
\brief The at operator for action formulas
const data::data_expression & time_stamp() const
const action_formula & operand() const
\brief The existential quantification operator for action formulas
const data::variable_list & variables() const
const action_formula & body() const
\brief The value false for action formulas
\brief The universal quantification operator for action formulas
const action_formula & body() const
const data::variable_list & variables() const
\brief The implication operator for action formulas
const action_formula & left() const
const action_formula & right() const
\brief The multi action for action formulas
const process::action_list & actions() const
\brief The not operator for action formulas
const action_formula & operand() const
\brief The or operator for action formulas
const action_formula & right() const
const action_formula & left() const
\brief The value true for action formulas
sort_expression sort() const
Returns the sort of the data expression.
Definition data.cpp:107
data_specification()=default
Default constructor. Generate a data specification that contains only booleans and positive numbers.
\brief An untyped multi action or data application
\brief The alt operator for regular formulas
const regular_formula & right() const
const regular_formula & left() const
\brief The seq operator for regular formulas
const regular_formula & right() const
const regular_formula & left() const
\brief The 'trans or nil' operator for regular formulas
const regular_formula & operand() const
\brief The trans operator for regular formulas
const regular_formula & operand() const
\brief An untyped regular formula or action formula
const core::identifier_string & name() const
\brief The and operator for state formulas
const state_formula & right() const
const state_formula & left() const
\brief The multiply operator for state formulas with values
const state_formula & left() const
const data::data_expression & right() const
\brief The multiply operator for state formulas with values
const data::data_expression & left() const
const state_formula & right() const
\brief The timed delay operator for state formulas
const data::data_expression & time_stamp() const
\brief The delay operator for state formulas
delay()
\brief Default constructor X3.
\brief The existential quantification operator for state formulas
const state_formula & body() const
const data::variable_list & variables() const
\brief The value false for state formulas
false_()
\brief Default constructor X3.
\brief The universal quantification operator for state formulas
const state_formula & body() const
const data::variable_list & variables() const
\brief The implication operator for state formulas
const state_formula & left() const
const state_formula & right() const
\brief The infimum over a data type for state formulas
const data::variable_list & variables() const
const state_formula & body() const
\brief The may operator for state formulas
const state_formula & operand() const
const regular_formulas::regular_formula & formula() const
\brief The minus operator for state formulas
minus(const state_formula &operand)
\brief Constructor Z14.
const state_formula & operand() const
\brief The mu operator for state formulas
const core::identifier_string & name() const
const data::assignment_list & assignments() const
const state_formula & operand() const
\brief The must operator for state formulas
const regular_formulas::regular_formula & formula() const
const state_formula & operand() const
\brief The not operator for state formulas
const state_formula & operand() const
not_(const state_formula &operand)
\brief Constructor Z14.
\brief The nu operator for state formulas
const core::identifier_string & name() const
const state_formula & operand() const
const data::assignment_list & assignments() const
\brief The or operator for state formulas
or_(const state_formula &left, const state_formula &right)
\brief Constructor Z14.
const state_formula & right() const
const state_formula & left() const
\brief The plus operator for state formulas with values
const state_formula & left() const
const state_formula & right() const
process::action_label_list m_action_labels
The action specification of the specification.
const state_formula & formula() const
Returns the formula of the state formula specification.
state_formula_specification(const state_formula &formula, const data::data_specification &data=data::data_specification(), const process::action_label_list &action_labels={})
Constructor of a state formula specification.
state_formula m_formula
The formula of the specification.
data::data_specification m_data
The data specification of the specification.
state_formula & formula()
Returns the formula of the state formula specification.
const process::action_label_list & action_labels() const
Returns the action label specification.
process::action_label_list & action_labels()
Returns the action label specification.
state_formula(const state_formula &) noexcept=default
Move semantics.
state_formula & operator=(const state_formula &) noexcept=default
\brief The sum over a data type for state formulas
const data::variable_list & variables() const
const state_formula & body() const
\brief The supremum over a data type for state formulas
const state_formula & body() const
const data::variable_list & variables() const
\brief The value true for state formulas
true_()
\brief Default constructor X3.
\brief The state formula variable
const core::identifier_string & name() const
const data::data_expression_list & arguments() const
\brief The timed yaled operator for state formulas
const data::data_expression & time_stamp() const
\brief The yaled operator for state formulas
yaled()
\brief Default constructor X3.
D_ParserTables parser_tables_mcrl2
action_formula parse_action_formula(const std::string &text)
std::string pp(const action_formulas::exists &x, bool arg0)
bool is_at(const atermpp::aterm &x)
std::string pp(const action_formulas::imp &x, bool arg0)
std::string pp(const action_formulas::at &x, bool arg0)
std::string pp(const action_formulas::forall &x, bool arg0)
std::string pp(const action_formulas::or_ &x, bool arg0)
std::string pp(const action_formulas::action_formula &x, bool arg0)
std::string pp(const action_formulas::true_ &x, bool arg0)
std::set< data::variable > find_all_variables(const action_formulas::action_formula &x)
bool is_or(const atermpp::aterm &x)
bool is_true(const atermpp::aterm &x)
bool is_forall(const atermpp::aterm &x)
std::string pp(const action_formulas::not_ &x, bool arg0)
bool is_false(const atermpp::aterm &x)
bool is_not(const atermpp::aterm &x)
bool is_imp(const atermpp::aterm &x)
bool is_and(const atermpp::aterm &x)
bool is_multi_action(const atermpp::aterm &x)
std::string pp(const action_formulas::multi_action &x, bool arg0)
std::string pp(const action_formulas::false_ &x, bool arg0)
bool is_exists(const atermpp::aterm &x)
std::string pp(const action_formulas::and_ &x, bool arg0)
bool is_action_formula(const atermpp::aterm &x)
void warn_left_merge_merge(const parse_node &)
Prints a warning for each occurrence of 'x ||_ y || z' in the parse tree.
void warn_and_or(const parse_node &)
Prints a warning for each occurrence of 'x && y || z' in the parse tree.
Namespace for system defined sort bool_.
Definition bool.h:29
const basic_sort & bool_()
Constructor for sort expression Bool.
Definition bool.h:41
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
bool is_untyped_data_parameter(const atermpp::aterm &x)
The main namespace for the LPS library.
Definition constelm.h:18
The main namespace for the Process library.
bool is_untyped_multi_action(const atermpp::aterm &x)
regular_formula parse_regular_formula(const std::string &text)
bool is_alt(const atermpp::aterm &x)
bool is_untyped_regular_formula(const atermpp::aterm &x)
bool is_trans(const atermpp::aterm &x)
std::string pp(const regular_formulas::trans &x, bool arg0)
std::string pp(const regular_formulas::alt &x, bool arg0)
bool is_trans_or_nil(const atermpp::aterm &x)
bool is_seq(const atermpp::aterm &x)
std::string pp(const regular_formulas::untyped_regular_formula &x, bool arg0)
std::string pp(const regular_formulas::seq &x, bool arg0)
std::string pp(const regular_formulas::trans_or_nil &x, bool arg0)
std::string pp(const regular_formulas::regular_formula &x, bool arg0)
state_formula_specification parse_state_formula_specification(const std::string &text, const bool formula_is_quantitative)
Parses a state formula specification from text.
state_formula normalize(const state_formula &x)
Normalizes a state formula, i.e. removes any occurrences of ! or =>.
bool is_normalized(const state_formula &x)
Checks if a state formula is normalized.
state_formula parse_state_formula(std::istream &in, lps::stochastic_specification &lpsspec, const bool formula_is_quantitative)
Parses a state formula from an input stream.
state_formula normalize(const state_formula &x, bool quantitative=false, bool negated=false)
bool is_monotonous(const state_formula &f)
Returns true if the state formula is monotonous.
state_formula parse_state_formula(const std::string &text, lps::stochastic_specification &lpsspec, const bool formula_is_quantitative)
Parses a state formula from text.
state_formula_specification parse_state_formula_specification(std::istream &in, const bool formula_is_quantitative)
Parses a state formula specification from an input stream.
state_formula_specification parse_state_formula_specification(const std::string &text, lps::stochastic_specification &lpsspec, const bool formula_is_quantitative)
Parses a state formula specification from text.
bool is_timed(const state_formula &x)
std::set< core::identifier_string > find_state_variable_names(const state_formula &x)
Returns the names of the state variables that occur in x.
state_formula_specification parse_state_formula_specification(std::istream &in, lps::stochastic_specification &lpsspec, const bool formula_is_quantitative)
Parses a state formula specification from an input stream.
state_formula_specification parse_state_formula_specification(const std::string &text)
state_formula parse_state_formula(const std::string &text)
bool is_infimum(const atermpp::aterm &x)
std::string pp(const state_formulas::nu &x, bool arg0)
std::string pp(const state_formulas::exists &x, bool arg0)
std::string pp(const state_formulas::not_ &x, bool arg0)
bool is_and(const atermpp::aterm &x)
std::string pp(const state_formulas::supremum &x, bool arg0)
bool is_delay_timed(const atermpp::aterm &x)
bool is_const_multiply(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const state_formula_specification &x)
std::string pp(const state_formulas::must &x, bool arg0)
bool is_minus(const atermpp::aterm &x)
bool is_exists(const atermpp::aterm &x)
bool is_not(const atermpp::aterm &x)
std::string pp(const state_formulas::minus &x, bool arg0)
bool is_supremum(const atermpp::aterm &x)
bool is_must(const atermpp::aterm &x)
std::set< data::variable > find_all_variables(const state_formulas::state_formula &x)
bool is_yaled(const atermpp::aterm &x)
bool is_normalized(const T &x)
Checks if a state formula is normalized.
Definition normalize.h:407
std::set< data::variable > find_free_variables(const state_formulas::state_formula &x)
bool is_true(const atermpp::aterm &x)
std::string pp(const state_formulas::true_ &x, bool arg0)
std::string pp(const state_formulas::state_formula &x, bool arg0)
std::string pp(const state_formulas::const_multiply &x, bool arg0)
std::string pp(const state_formulas::delay_timed &x, bool arg0)
bool is_variable(const atermpp::aterm &x)
bool is_may(const atermpp::aterm &x)
bool is_yaled_timed(const atermpp::aterm &x)
bool is_imp(const atermpp::aterm &x)
bool is_timed(const state_formula &x)
Checks if a state formula is timed.
Definition is_timed.h:71
std::string pp(const state_formulas::imp &x, bool arg0)
std::string pp(const state_formulas::mu &x, bool arg0)
bool is_monotonous(const state_formula &f)
Returns true if the state formula is monotonous.
bool is_sum(const atermpp::aterm &x)
state_formulas::state_formula translate_user_notation(const state_formulas::state_formula &x)
state_formulas::state_formula normalize_sorts(const state_formulas::state_formula &x, const data::sort_specification &sortspec)
bool is_nu(const atermpp::aterm &x)
std::string pp(const state_formulas::delay &x, bool arg0)
std::string pp(const state_formulas::forall &x, bool arg0)
std::string pp(const state_formulas::sum &x, bool arg0)
std::string pp(const state_formulas::yaled &x, bool arg0)
bool is_delay(const atermpp::aterm &x)
std::string pp(const state_formulas::infimum &x, bool arg0)
std::string pp(const state_formulas::or_ &x, bool arg0)
std::string pp(const state_formulas::may &x, bool arg0)
bool is_false(const atermpp::aterm &x)
state_formula negate_variables(const core::identifier_string &name, bool quantitative, const state_formula &x)
Negates variable instantiations in a state formula with a given name.
bool is_plus(const atermpp::aterm &x)
std::string pp(const state_formulas::and_ &x, bool arg0)
std::string pp(const state_formulas::false_ &x, bool arg0)
std::string pp(const state_formulas::const_multiply_alt &x, bool arg0)
bool is_mu(const atermpp::aterm &x)
bool is_forall(const atermpp::aterm &x)
std::string pp(const state_formulas::state_formula_specification &x, bool arg0)
bool is_const_multiply_alt(const atermpp::aterm &x)
std::string pp(const state_formulas::yaled_timed &x, bool arg0)
std::string pp(const state_formulas::plus &x, bool arg0)
bool is_or(const atermpp::aterm &x)
std::string pp(const state_formulas::variable &x, bool arg0)
std::set< data::sort_expression > find_sort_expressions(const state_formulas::state_formula &x)
std::set< process::action_label > find_action_labels(const state_formulas::state_formula &x)
std::set< core::identifier_string > find_identifiers(const state_formulas::state_formula &x)
Base class for action_formula_builder.
Definition builder.h:27
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:41
void apply(T &result, const data::data_expression &x)
Definition builder.h:32
Base class for action_formula_traverser.
Definition traverser.h:27
void apply(const data::data_expression &x)
Definition traverser.h:33
void apply(const process::untyped_multi_action &x)
Definition traverser.h:47
void apply(const data::untyped_data_parameter &x)
Definition traverser.h:40
void apply(T &result, const action_formulas::forall &x)
Definition builder.h:591
void apply(T &result, const action_formulas::not_ &x)
Definition builder.h:559
void apply(T &result, const action_formulas::at &x)
Definition builder.h:607
void apply(T &result, const action_formulas::multi_action &x)
Definition builder.h:615
void apply(T &result, const action_formulas::and_ &x)
Definition builder.h:567
void apply(T &result, const action_formulas::exists &x)
Definition builder.h:599
void apply(T &result, const action_formulas::imp &x)
Definition builder.h:583
void apply(T &result, const action_formulas::action_formula &x)
Definition builder.h:624
void apply(T &result, const action_formulas::true_ &x)
Definition builder.h:541
void apply(T &result, const action_formulas::or_ &x)
Definition builder.h:575
void apply(T &result, const action_formulas::false_ &x)
Definition builder.h:550
void apply(T &result, const action_formulas::action_formula &x)
Definition builder.h:303
void apply(T &result, const action_formulas::and_ &x)
Definition builder.h:247
void apply(T &result, const action_formulas::exists &x)
Definition builder.h:279
void apply(T &result, const action_formulas::false_ &x)
Definition builder.h:230
void apply(T &result, const action_formulas::at &x)
Definition builder.h:287
void apply(T &result, const action_formulas::or_ &x)
Definition builder.h:255
void apply(T &result, const action_formulas::multi_action &x)
Definition builder.h:295
void apply(T &result, const action_formulas::true_ &x)
Definition builder.h:221
void apply(T &result, const action_formulas::not_ &x)
Definition builder.h:239
void apply(T &result, const action_formulas::imp &x)
Definition builder.h:263
void apply(T &result, const action_formulas::forall &x)
Definition builder.h:271
void apply(T &result, const action_formulas::exists &x)
Definition builder.h:119
void apply(T &result, const action_formulas::forall &x)
Definition builder.h:111
void apply(T &result, const action_formulas::true_ &x)
Definition builder.h:61
void apply(T &result, const action_formulas::or_ &x)
Definition builder.h:95
void apply(T &result, const action_formulas::false_ &x)
Definition builder.h:70
void apply(T &result, const action_formulas::at &x)
Definition builder.h:127
void apply(T &result, const action_formulas::and_ &x)
Definition builder.h:87
void apply(T &result, const action_formulas::imp &x)
Definition builder.h:103
void apply(T &result, const action_formulas::not_ &x)
Definition builder.h:79
void apply(T &result, const action_formulas::action_formula &x)
Definition builder.h:143
void apply(T &result, const action_formulas::multi_action &x)
Definition builder.h:135
void apply(const action_formulas::action_formula &x)
Definition traverser.h:439
void apply(const action_formulas::multi_action &x)
Definition traverser.h:432
void apply(const action_formulas::forall &x)
Definition traverser.h:864
void apply(const action_formulas::false_ &x)
Definition traverser.h:826
void apply(const action_formulas::true_ &x)
Definition traverser.h:819
void apply(const action_formulas::not_ &x)
Definition traverser.h:833
void apply(const action_formulas::at &x)
Definition traverser.h:878
void apply(const action_formulas::action_formula &x)
Definition traverser.h:892
void apply(const action_formulas::multi_action &x)
Definition traverser.h:885
void apply(const action_formulas::exists &x)
Definition traverser.h:871
void apply(const action_formulas::imp &x)
Definition traverser.h:856
void apply(const action_formulas::and_ &x)
Definition traverser.h:840
void apply(const action_formulas::or_ &x)
Definition traverser.h:848
void apply(const action_formulas::multi_action &x)
Definition traverser.h:283
void apply(const action_formulas::at &x)
Definition traverser.h:275
void apply(const action_formulas::exists &x)
Definition traverser.h:268
void apply(const action_formulas::action_formula &x)
Definition traverser.h:290
void apply(const action_formulas::forall &x)
Definition traverser.h:261
void apply(const action_formulas::not_ &x)
Definition traverser.h:230
void apply(const action_formulas::false_ &x)
Definition traverser.h:223
void apply(const action_formulas::or_ &x)
Definition traverser.h:245
void apply(const action_formulas::true_ &x)
Definition traverser.h:216
void apply(const action_formulas::and_ &x)
Definition traverser.h:237
void apply(const action_formulas::imp &x)
Definition traverser.h:253
void apply(const action_formulas::forall &x)
Definition traverser.h:712
void apply(const action_formulas::or_ &x)
Definition traverser.h:696
void apply(const action_formulas::false_ &x)
Definition traverser.h:674
void apply(const action_formulas::and_ &x)
Definition traverser.h:688
void apply(const action_formulas::action_formula &x)
Definition traverser.h:743
void apply(const action_formulas::multi_action &x)
Definition traverser.h:736
void apply(const action_formulas::true_ &x)
Definition traverser.h:667
void apply(const action_formulas::imp &x)
Definition traverser.h:704
void apply(const action_formulas::not_ &x)
Definition traverser.h:681
void apply(const action_formulas::exists &x)
Definition traverser.h:720
void apply(const action_formulas::action_formula &x)
Definition traverser.h:140
void apply(const action_formulas::true_ &x)
Definition traverser.h:64
void apply(const action_formulas::or_ &x)
Definition traverser.h:93
void apply(const action_formulas::multi_action &x)
Definition traverser.h:133
void apply(const action_formulas::forall &x)
Definition traverser.h:109
void apply(const action_formulas::and_ &x)
Definition traverser.h:85
void apply(const action_formulas::false_ &x)
Definition traverser.h:71
void apply(const action_formulas::at &x)
Definition traverser.h:125
void apply(const action_formulas::not_ &x)
Definition traverser.h:78
void apply(const action_formulas::imp &x)
Definition traverser.h:101
void apply(const action_formulas::exists &x)
Definition traverser.h:117
void apply(const action_formulas::imp &x)
Definition traverser.h:552
void apply(const action_formulas::and_ &x)
Definition traverser.h:536
void apply(const action_formulas::or_ &x)
Definition traverser.h:544
void apply(const action_formulas::forall &x)
Definition traverser.h:560
void apply(const action_formulas::at &x)
Definition traverser.h:576
void apply(const action_formulas::multi_action &x)
Definition traverser.h:584
void apply(const action_formulas::true_ &x)
Definition traverser.h:515
void apply(const action_formulas::action_formula &x)
Definition traverser.h:591
void apply(const action_formulas::exists &x)
Definition traverser.h:568
void apply(const action_formulas::not_ &x)
Definition traverser.h:529
void apply(const action_formulas::false_ &x)
Definition traverser.h:522
void apply(T &result, const action_formulas::action_formula &x)
Definition builder.h:463
void apply(T &result, const action_formulas::not_ &x)
Definition builder.h:399
void apply(T &result, const action_formulas::true_ &x)
Definition builder.h:381
void apply(T &result, const action_formulas::or_ &x)
Definition builder.h:415
void apply(T &result, const action_formulas::exists &x)
Definition builder.h:439
void apply(T &result, const action_formulas::and_ &x)
Definition builder.h:407
void apply(T &result, const action_formulas::imp &x)
Definition builder.h:423
void apply(T &result, const action_formulas::at &x)
Definition builder.h:447
void apply(T &result, const action_formulas::false_ &x)
Definition builder.h:390
void apply(T &result, const action_formulas::forall &x)
Definition builder.h:431
void apply(T &result, const action_formulas::multi_action &x)
Definition builder.h:455
action_formula_actions(const core::parser &parser_)
Definition parse_impl.h:27
action_formulas::action_formula parse_ActFrm(const core::parse_node &node) const
Definition parse_impl.h:31
expression builder that visits all sub expressions
Definition builder.h:32
expression traverser that visits all sub expressions
Definition traverser.h:29
void apply(T &result, const regular_formulas::trans &x)
Definition builder.h:845
void apply(T &result, const regular_formulas::trans_or_nil &x)
Definition builder.h:853
void apply(T &result, const regular_formulas::seq &x)
Definition builder.h:829
void apply(T &result, const regular_formulas::regular_formula &x)
Definition builder.h:869
void apply(T &result, const regular_formulas::alt &x)
Definition builder.h:837
void apply(T &result, const regular_formulas::untyped_regular_formula &x)
Definition builder.h:861
void apply(T &result, const regular_formulas::trans_or_nil &x)
Definition builder.h:1041
void apply(T &result, const regular_formulas::seq &x)
Definition builder.h:1017
void apply(T &result, const regular_formulas::regular_formula &x)
Definition builder.h:1057
void apply(T &result, const regular_formulas::untyped_regular_formula &x)
Definition builder.h:1049
void apply(T &result, const regular_formulas::trans &x)
Definition builder.h:1033
void apply(T &result, const regular_formulas::alt &x)
Definition builder.h:1025
void apply(T &result, const regular_formulas::trans &x)
Definition builder.h:751
void apply(T &result, const regular_formulas::seq &x)
Definition builder.h:735
void apply(T &result, const regular_formulas::regular_formula &x)
Definition builder.h:775
void apply(T &result, const regular_formulas::untyped_regular_formula &x)
Definition builder.h:767
void apply(T &result, const regular_formulas::alt &x)
Definition builder.h:743
void apply(T &result, const regular_formulas::trans_or_nil &x)
Definition builder.h:759
void apply(const regular_formulas::alt &x)
Definition traverser.h:1456
void apply(const regular_formulas::trans_or_nil &x)
Definition traverser.h:1471
void apply(const regular_formulas::untyped_regular_formula &x)
Definition traverser.h:1478
void apply(const regular_formulas::trans &x)
Definition traverser.h:1464
void apply(const regular_formulas::seq &x)
Definition traverser.h:1448
void apply(const regular_formulas::regular_formula &x)
Definition traverser.h:1486
void apply(const regular_formulas::trans_or_nil &x)
Definition traverser.h:1110
void apply(const regular_formulas::regular_formula &x)
Definition traverser.h:1125
void apply(const regular_formulas::seq &x)
Definition traverser.h:1087
void apply(const regular_formulas::alt &x)
Definition traverser.h:1095
void apply(const regular_formulas::untyped_regular_formula &x)
Definition traverser.h:1117
void apply(const regular_formulas::trans &x)
Definition traverser.h:1103
void apply(const regular_formulas::untyped_regular_formula &x)
Definition traverser.h:1387
void apply(const regular_formulas::regular_formula &x)
Definition traverser.h:1396
void apply(const regular_formulas::trans &x)
Definition traverser.h:1373
void apply(const regular_formulas::trans_or_nil &x)
Definition traverser.h:1380
void apply(const regular_formulas::untyped_regular_formula &x)
Definition traverser.h:1207
void apply(const regular_formulas::regular_formula &x)
Definition traverser.h:1215
void apply(const regular_formulas::trans_or_nil &x)
Definition traverser.h:1200
void apply(const regular_formulas::trans &x)
Definition traverser.h:1013
void apply(const regular_formulas::alt &x)
Definition traverser.h:1005
void apply(const regular_formulas::untyped_regular_formula &x)
Definition traverser.h:1027
void apply(const regular_formulas::trans_or_nil &x)
Definition traverser.h:1020
void apply(const regular_formulas::regular_formula &x)
Definition traverser.h:1035
void apply(const regular_formulas::seq &x)
Definition traverser.h:997
void apply(const regular_formulas::trans_or_nil &x)
Definition traverser.h:1290
void apply(const regular_formulas::regular_formula &x)
Definition traverser.h:1305
void apply(const regular_formulas::alt &x)
Definition traverser.h:1275
void apply(const regular_formulas::untyped_regular_formula &x)
Definition traverser.h:1297
void apply(const regular_formulas::seq &x)
Definition traverser.h:1267
void apply(const regular_formulas::trans &x)
Definition traverser.h:1283
void apply(T &result, const regular_formulas::untyped_regular_formula &x)
Definition builder.h:955
void apply(T &result, const regular_formulas::trans_or_nil &x)
Definition builder.h:947
void apply(T &result, const regular_formulas::seq &x)
Definition builder.h:923
void apply(T &result, const regular_formulas::trans &x)
Definition builder.h:939
void apply(T &result, const regular_formulas::alt &x)
Definition builder.h:931
void apply(T &result, const regular_formulas::regular_formula &x)
Definition builder.h:963
regular_formulas::regular_formula parse_RegFrm(const core::parse_node &node) const
Definition parse_impl.h:61
Builder class for regular_formula_builder. Used as a base class for pbes_expression_builder.
Definition builder.h:699
void apply(T &result, const data::data_expression &x)
Definition builder.h:704
void apply(T &result, const action_formulas::action_formula &x)
Definition builder.h:714
Traversal class for regular_formula_traverser. Used as a base class for pbes_expression_traverser.
Definition traverser.h:967
void apply(const action_formulas::action_formula &x)
Definition traverser.h:980
void apply(const data::data_expression &x)
Definition traverser.h:973
void apply(T &result, const state_formulas::nu &x)
Definition builder.h:1661
void apply(T &result, const state_formulas::supremum &x)
Definition builder.h:1587
void apply(T &result, const state_formulas::imp &x)
Definition builder.h:1531
void apply(T &result, const state_formulas::state_formula &x)
Definition builder.h:1686
void apply(T &result, const state_formulas::plus &x)
Definition builder.h:1539
void apply(T &result, const state_formulas::yaled &x)
Definition builder.h:1619
void apply(T &result, const state_formulas::false_ &x)
Definition builder.h:1490
void apply(T &result, const state_formulas::yaled_timed &x)
Definition builder.h:1628
void apply(T &result, const state_formulas::const_multiply &x)
Definition builder.h:1547
void apply(T &result, const state_formulas::and_ &x)
Definition builder.h:1515
void apply(T &result, const state_formulas::exists &x)
Definition builder.h:1571
void apply(T &result, const state_formulas::may &x)
Definition builder.h:1611
void apply(T &result, const state_formulas::minus &x)
Definition builder.h:1507
void apply(T &result, const state_formulas::infimum &x)
Definition builder.h:1579
void apply(T &result, const state_formulas::or_ &x)
Definition builder.h:1523
void apply(T &result, const state_formulas::sum &x)
Definition builder.h:1595
void apply(T &result, const state_formulas::mu &x)
Definition builder.h:1669
void apply(T &result, const state_formulas::must &x)
Definition builder.h:1603
void apply(T &result, const state_formulas::variable &x)
Definition builder.h:1653
void apply(T &result, const state_formulas::not_ &x)
Definition builder.h:1499
void update(state_formulas::state_formula_specification &x)
Definition builder.h:1676
void apply(T &result, const state_formulas::delay &x)
Definition builder.h:1636
void apply(T &result, const state_formulas::true_ &x)
Definition builder.h:1481
void apply(T &result, const state_formulas::const_multiply_alt &x)
Definition builder.h:1555
void apply(T &result, const state_formulas::forall &x)
Definition builder.h:1563
void apply(T &result, const state_formulas::delay_timed &x)
Definition builder.h:1645
void apply(T &result, const state_formulas::supremum &x)
Definition builder.h:1249
void apply(T &result, const state_formulas::yaled &x)
Definition builder.h:1281
void apply(T &result, const state_formulas::true_ &x)
Definition builder.h:1143
void apply(T &result, const state_formulas::const_multiply &x)
Definition builder.h:1209
void apply(T &result, const state_formulas::false_ &x)
Definition builder.h:1152
void apply(T &result, const state_formulas::const_multiply_alt &x)
Definition builder.h:1217
void apply(T &result, const state_formulas::sum &x)
Definition builder.h:1257
void apply(T &result, const state_formulas::not_ &x)
Definition builder.h:1161
void apply(T &result, const state_formulas::may &x)
Definition builder.h:1273
void apply(T &result, const state_formulas::forall &x)
Definition builder.h:1225
void apply(T &result, const state_formulas::exists &x)
Definition builder.h:1233
void apply(T &result, const state_formulas::delay_timed &x)
Definition builder.h:1307
void apply(T &result, const state_formulas::yaled_timed &x)
Definition builder.h:1290
void apply(T &result, const state_formulas::mu &x)
Definition builder.h:1331
void apply(T &result, const state_formulas::delay &x)
Definition builder.h:1298
void apply(T &result, const state_formulas::must &x)
Definition builder.h:1265
void apply(T &result, const state_formulas::infimum &x)
Definition builder.h:1241
void apply(T &result, const state_formulas::imp &x)
Definition builder.h:1193
void update(state_formulas::state_formula_specification &x)
Definition builder.h:1338
void apply(T &result, const state_formulas::state_formula &x)
Definition builder.h:1351
void apply(T &result, const state_formulas::nu &x)
Definition builder.h:1323
void apply(T &result, const state_formulas::and_ &x)
Definition builder.h:1177
void apply(T &result, const state_formulas::minus &x)
Definition builder.h:1169
void apply(T &result, const state_formulas::variable &x)
Definition builder.h:1315
void apply(T &result, const state_formulas::plus &x)
Definition builder.h:1201
void apply(T &result, const state_formulas::or_ &x)
Definition builder.h:1185
void apply(T &result, const state_formulas::exists &x)
Definition builder.h:2241
void apply(T &result, const state_formulas::yaled &x)
Definition builder.h:2289
void apply(T &result, const state_formulas::plus &x)
Definition builder.h:2209
void apply(T &result, const state_formulas::delay_timed &x)
Definition builder.h:2316
void apply(T &result, const state_formulas::must &x)
Definition builder.h:2273
void apply(T &result, const state_formulas::sum &x)
Definition builder.h:2265
void apply(T &result, const state_formulas::infimum &x)
Definition builder.h:2249
void apply(T &result, const state_formulas::const_multiply &x)
Definition builder.h:2217
void update(state_formulas::state_formula_specification &x)
Definition builder.h:2349
void apply(T &result, const state_formulas::may &x)
Definition builder.h:2281
void apply(T &result, const state_formulas::false_ &x)
Definition builder.h:2160
void apply(T &result, const state_formulas::or_ &x)
Definition builder.h:2193
void apply(T &result, const state_formulas::imp &x)
Definition builder.h:2201
void apply(T &result, const state_formulas::not_ &x)
Definition builder.h:2169
void apply(T &result, const state_formulas::variable &x)
Definition builder.h:2325
void apply(T &result, const state_formulas::forall &x)
Definition builder.h:2233
void apply(T &result, const state_formulas::delay &x)
Definition builder.h:2307
void apply(T &result, const state_formulas::yaled_timed &x)
Definition builder.h:2298
void apply(T &result, const state_formulas::supremum &x)
Definition builder.h:2257
void apply(T &result, const state_formulas::const_multiply_alt &x)
Definition builder.h:2225
void apply(T &result, const state_formulas::nu &x)
Definition builder.h:2334
void apply(T &result, const state_formulas::and_ &x)
Definition builder.h:2185
void apply(T &result, const state_formulas::minus &x)
Definition builder.h:2177
void apply(T &result, const state_formulas::mu &x)
Definition builder.h:2342
void apply(T &result, const state_formulas::true_ &x)
Definition builder.h:2151
void apply(T &result, const state_formulas::state_formula &x)
Definition builder.h:2359
void apply(const state_formulas::mu &x)
Definition traverser.h:3929
void apply(const state_formulas::state_formula &x)
Definition traverser.h:3944
void apply(const state_formulas::delay &x)
Definition traverser.h:3901
void apply(const state_formulas::variable &x)
Definition traverser.h:3915
void apply(const state_formulas::infimum &x)
Definition traverser.h:3850
void apply(const state_formulas::minus &x)
Definition traverser.h:3783
void apply(const state_formulas::false_ &x)
Definition traverser.h:3769
void apply(const state_formulas::sum &x)
Definition traverser.h:3864
void apply(const state_formulas::const_multiply &x)
Definition traverser.h:3822
void apply(const state_formulas::delay_timed &x)
Definition traverser.h:3908
void apply(const state_formulas::must &x)
Definition traverser.h:3871
void apply(const state_formulas::plus &x)
Definition traverser.h:3814
void apply(const state_formulas::imp &x)
Definition traverser.h:3806
void apply(const state_formulas::yaled_timed &x)
Definition traverser.h:3894
void apply(const state_formulas::nu &x)
Definition traverser.h:3922
void apply(const state_formulas::exists &x)
Definition traverser.h:3843
void apply(const state_formulas::supremum &x)
Definition traverser.h:3857
void apply(const state_formulas::true_ &x)
Definition traverser.h:3762
void apply(const state_formulas::not_ &x)
Definition traverser.h:3776
void apply(const state_formulas::const_multiply_alt &x)
Definition traverser.h:3829
void apply(const state_formulas::state_formula_specification &x)
Definition traverser.h:3936
void apply(const state_formulas::and_ &x)
Definition traverser.h:3790
void apply(const state_formulas::or_ &x)
Definition traverser.h:3798
void apply(const state_formulas::may &x)
Definition traverser.h:3879
void apply(const state_formulas::yaled &x)
Definition traverser.h:3887
void apply(const state_formulas::forall &x)
Definition traverser.h:3836
void apply(const state_formulas::plus &x)
Definition traverser.h:1938
void apply(const state_formulas::supremum &x)
Definition traverser.h:1983
void apply(const state_formulas::and_ &x)
Definition traverser.h:1914
void apply(const state_formulas::sum &x)
Definition traverser.h:1990
void apply(const state_formulas::variable &x)
Definition traverser.h:2041
void apply(const state_formulas::not_ &x)
Definition traverser.h:1900
void apply(const state_formulas::state_formula_specification &x)
Definition traverser.h:2064
void apply(const state_formulas::may &x)
Definition traverser.h:2005
void apply(const state_formulas::forall &x)
Definition traverser.h:1962
void apply(const state_formulas::or_ &x)
Definition traverser.h:1922
void apply(const state_formulas::exists &x)
Definition traverser.h:1969
void apply(const state_formulas::false_ &x)
Definition traverser.h:1893
void apply(const state_formulas::yaled_timed &x)
Definition traverser.h:2020
void apply(const state_formulas::true_ &x)
Definition traverser.h:1886
void apply(const state_formulas::delay_timed &x)
Definition traverser.h:2034
void apply(const state_formulas::must &x)
Definition traverser.h:1997
void apply(const state_formulas::yaled &x)
Definition traverser.h:2013
void apply(const state_formulas::state_formula &x)
Definition traverser.h:2071
void apply(const state_formulas::imp &x)
Definition traverser.h:1930
void apply(const state_formulas::delay &x)
Definition traverser.h:2027
void apply(const state_formulas::const_multiply_alt &x)
Definition traverser.h:1954
void apply(const state_formulas::minus &x)
Definition traverser.h:1907
void apply(const state_formulas::const_multiply &x)
Definition traverser.h:1946
void apply(const state_formulas::infimum &x)
Definition traverser.h:1976
void apply(const state_formulas::plus &x)
Definition traverser.h:3183
void apply(const state_formulas::variable &x)
Definition traverser.h:3291
void apply(const state_formulas::supremum &x)
Definition traverser.h:3231
void apply(const state_formulas::const_multiply &x)
Definition traverser.h:3191
void apply(const state_formulas::delay &x)
Definition traverser.h:3277
void apply(const state_formulas::exists &x)
Definition traverser.h:3215
void apply(const state_formulas::yaled &x)
Definition traverser.h:3263
void apply(const state_formulas::yaled_timed &x)
Definition traverser.h:3270
void apply(const state_formulas::false_ &x)
Definition traverser.h:3138
void apply(const state_formulas::state_formula &x)
Definition traverser.h:3325
void apply(const state_formulas::and_ &x)
Definition traverser.h:3159
void apply(const state_formulas::const_multiply_alt &x)
Definition traverser.h:3199
void apply(const state_formulas::state_formula_specification &x)
Definition traverser.h:3317
void apply(const state_formulas::minus &x)
Definition traverser.h:3152
void apply(const state_formulas::must &x)
Definition traverser.h:3247
void apply(const state_formulas::delay_timed &x)
Definition traverser.h:3284
void apply(const state_formulas::forall &x)
Definition traverser.h:3207
void apply(const state_formulas::infimum &x)
Definition traverser.h:3223
void apply(const state_formulas::not_ &x)
Definition traverser.h:3145
void apply(const state_formulas::true_ &x)
Definition traverser.h:3131
void apply(const state_formulas::state_formula_specification &x)
Definition traverser.h:3627
void apply(const state_formulas::yaled_timed &x)
Definition traverser.h:3585
void apply(const state_formulas::const_multiply &x)
Definition traverser.h:3513
void apply(const state_formulas::delay_timed &x)
Definition traverser.h:3599
void apply(const state_formulas::state_formula &x)
Definition traverser.h:3634
void apply(const state_formulas::const_multiply_alt &x)
Definition traverser.h:3520
void apply(const state_formulas::yaled &x)
Definition traverser.h:1699
void apply(const state_formulas::const_multiply &x)
Definition traverser.h:1627
void apply(const state_formulas::variable &x)
Definition traverser.h:1727
void apply(const state_formulas::state_formula &x)
Definition traverser.h:1758
void apply(const state_formulas::delay_timed &x)
Definition traverser.h:1720
void apply(const state_formulas::plus &x)
Definition traverser.h:1619
void apply(const state_formulas::supremum &x)
Definition traverser.h:1667
void apply(const state_formulas::and_ &x)
Definition traverser.h:1595
void apply(const state_formulas::must &x)
Definition traverser.h:1683
void apply(const state_formulas::exists &x)
Definition traverser.h:1651
void apply(const state_formulas::false_ &x)
Definition traverser.h:1574
void apply(const state_formulas::delay &x)
Definition traverser.h:1713
void apply(const state_formulas::not_ &x)
Definition traverser.h:1581
void apply(const state_formulas::const_multiply_alt &x)
Definition traverser.h:1635
void apply(const state_formulas::may &x)
Definition traverser.h:1691
void apply(const state_formulas::forall &x)
Definition traverser.h:1643
void apply(const state_formulas::yaled_timed &x)
Definition traverser.h:1706
void apply(const state_formulas::infimum &x)
Definition traverser.h:1659
void apply(const state_formulas::or_ &x)
Definition traverser.h:1603
void apply(const state_formulas::true_ &x)
Definition traverser.h:1567
void apply(const state_formulas::state_formula_specification &x)
Definition traverser.h:1750
void apply(const state_formulas::imp &x)
Definition traverser.h:1611
void apply(const state_formulas::minus &x)
Definition traverser.h:1588
void apply(const state_formulas::sum &x)
Definition traverser.h:1675
void apply(const state_formulas::const_multiply &x)
Definition traverser.h:2259
void apply(const state_formulas::yaled_timed &x)
Definition traverser.h:2329
void apply(const state_formulas::const_multiply_alt &x)
Definition traverser.h:2266
void apply(const state_formulas::state_formula &x)
Definition traverser.h:2378
void apply(const state_formulas::delay_timed &x)
Definition traverser.h:2343
void apply(const state_formulas::state_formula_specification &x)
Definition traverser.h:2371
void apply(const state_formulas::delay &x)
Definition traverser.h:2961
void apply(const state_formulas::variable &x)
Definition traverser.h:2975
void apply(const state_formulas::may &x)
Definition traverser.h:2940
void apply(const state_formulas::infimum &x)
Definition traverser.h:2912
void apply(const state_formulas::and_ &x)
Definition traverser.h:2852
void apply(const state_formulas::state_formula &x)
Definition traverser.h:3003
void apply(const state_formulas::exists &x)
Definition traverser.h:2905
void apply(const state_formulas::mu &x)
Definition traverser.h:2989
void apply(const state_formulas::false_ &x)
Definition traverser.h:2831
void apply(const state_formulas::or_ &x)
Definition traverser.h:2860
void apply(const state_formulas::const_multiply &x)
Definition traverser.h:2884
void apply(const state_formulas::yaled_timed &x)
Definition traverser.h:2954
void apply(const state_formulas::not_ &x)
Definition traverser.h:2838
void apply(const state_formulas::true_ &x)
Definition traverser.h:2824
void apply(const state_formulas::imp &x)
Definition traverser.h:2868
void apply(const state_formulas::sum &x)
Definition traverser.h:2926
void apply(const state_formulas::plus &x)
Definition traverser.h:2876
void apply(const state_formulas::state_formula_specification &x)
Definition traverser.h:2996
void apply(const state_formulas::must &x)
Definition traverser.h:2933
void apply(const state_formulas::yaled &x)
Definition traverser.h:2947
void apply(const state_formulas::forall &x)
Definition traverser.h:2898
void apply(const state_formulas::const_multiply_alt &x)
Definition traverser.h:2891
void apply(const state_formulas::minus &x)
Definition traverser.h:2845
void apply(const state_formulas::delay_timed &x)
Definition traverser.h:2968
void apply(const state_formulas::nu &x)
Definition traverser.h:2982
void apply(const state_formulas::supremum &x)
Definition traverser.h:2919
void apply(const state_formulas::false_ &x)
Definition traverser.h:2513
void apply(const state_formulas::const_multiply_alt &x)
Definition traverser.h:2574
void apply(const state_formulas::true_ &x)
Definition traverser.h:2506
void apply(const state_formulas::and_ &x)
Definition traverser.h:2534
void apply(const state_formulas::exists &x)
Definition traverser.h:2590
void apply(const state_formulas::or_ &x)
Definition traverser.h:2542
void apply(const state_formulas::infimum &x)
Definition traverser.h:2598
void apply(const state_formulas::yaled &x)
Definition traverser.h:2638
void apply(const state_formulas::yaled_timed &x)
Definition traverser.h:2645
void apply(const state_formulas::plus &x)
Definition traverser.h:2558
void apply(const state_formulas::sum &x)
Definition traverser.h:2614
void apply(const state_formulas::delay_timed &x)
Definition traverser.h:2659
void apply(const state_formulas::must &x)
Definition traverser.h:2622
void apply(const state_formulas::forall &x)
Definition traverser.h:2582
void apply(const state_formulas::mu &x)
Definition traverser.h:2681
void apply(const state_formulas::delay &x)
Definition traverser.h:2652
void apply(const state_formulas::state_formula_specification &x)
Definition traverser.h:2689
void apply(const state_formulas::const_multiply &x)
Definition traverser.h:2566
void apply(const state_formulas::variable &x)
Definition traverser.h:2666
void apply(const state_formulas::supremum &x)
Definition traverser.h:2606
void apply(const state_formulas::may &x)
Definition traverser.h:2630
void apply(const state_formulas::state_formula &x)
Definition traverser.h:2696
void apply(const state_formulas::nu &x)
Definition traverser.h:2673
void apply(const state_formulas::imp &x)
Definition traverser.h:2550
void apply(const state_formulas::minus &x)
Definition traverser.h:2527
void apply(const state_formulas::not_ &x)
Definition traverser.h:2520
void apply(T &result, const state_formulas::true_ &x)
Definition builder.h:1816
void apply(T &result, const state_formulas::may &x)
Definition builder.h:1946
void apply(T &result, const state_formulas::not_ &x)
Definition builder.h:1834
void apply(T &result, const state_formulas::and_ &x)
Definition builder.h:1850
void apply(T &result, const state_formulas::minus &x)
Definition builder.h:1842
void apply(T &result, const state_formulas::delay &x)
Definition builder.h:1971
void apply(T &result, const state_formulas::plus &x)
Definition builder.h:1874
void apply(T &result, const state_formulas::yaled &x)
Definition builder.h:1954
void apply(T &result, const state_formulas::exists &x)
Definition builder.h:1906
void apply(T &result, const state_formulas::variable &x)
Definition builder.h:1988
void apply(T &result, const state_formulas::sum &x)
Definition builder.h:1930
void apply(T &result, const state_formulas::forall &x)
Definition builder.h:1898
void apply(T &result, const state_formulas::infimum &x)
Definition builder.h:1914
void apply(T &result, const state_formulas::mu &x)
Definition builder.h:2004
void apply(T &result, const state_formulas::yaled_timed &x)
Definition builder.h:1963
void apply(T &result, const state_formulas::supremum &x)
Definition builder.h:1922
void apply(T &result, const state_formulas::false_ &x)
Definition builder.h:1825
void apply(T &result, const state_formulas::or_ &x)
Definition builder.h:1858
void apply(T &result, const state_formulas::delay_timed &x)
Definition builder.h:1980
void apply(T &result, const state_formulas::const_multiply &x)
Definition builder.h:1882
void apply(T &result, const state_formulas::state_formula &x)
Definition builder.h:2021
void update(state_formulas::state_formula_specification &x)
Definition builder.h:2011
void apply(T &result, const state_formulas::must &x)
Definition builder.h:1938
void apply(T &result, const state_formulas::imp &x)
Definition builder.h:1866
void apply(T &result, const state_formulas::const_multiply_alt &x)
Definition builder.h:1890
void apply(T &result, const state_formulas::nu &x)
Definition builder.h:1996
Function that determines if a state formula is time dependent.
Definition is_timed.h:25
void apply(const process::untyped_multi_action &)
Definition is_timed.h:43
void enter(const action_formulas::at &)
Definition is_timed.h:58
void apply(const data::data_expression &)
Definition is_timed.h:33
void apply(const data::untyped_data_parameter &)
Definition is_timed.h:38
untyped_state_formula_specification parse_StateFrmSpec(const core::parse_node &node) const
Definition parse_impl.h:204
state_formula_actions(const core::parser &parser_)
Definition parse_impl.h:95
state_formulas::state_formula parse_StateFrm(const core::parse_node &node) const
Definition parse_impl.h:133
Visitor that negates propositional variable instantiations with a given name.
state_variable_negator(const core::identifier_string &name, bool quantitative)
void apply(T &result, const variable &x)
Visit variable node.
Builder class for pbes_expressions. Used as a base class for pbes_expression_builder.
Definition builder.h:1108
void apply(T &result, const data::data_expression &x)
Definition builder.h:1113
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:1122
Traversal class for pbes_expressions. Used as a base class for pbes_expression_traverser.
Definition traverser.h:1537
void apply(const data::data_expression &x)
Definition traverser.h:1543
void apply(const data::untyped_data_parameter &x)
Definition traverser.h:1550