12#ifndef MCRL2_MODAL_FORMULA_BUILDER_H
13#define MCRL2_MODAL_FORMULA_BUILDER_H
15#include "mcrl2/lps/builder.h"
16#include "mcrl2/modal_formula/state_formula_specification.h"
25template <
typename Derived>
34 static_cast<Derived&>(*
this).enter(x);
36 static_cast<Derived&>(*
this).leave(x);
37 result = atermpp::down_cast<T>(x);
43 static_cast<Derived&>(*
this).enter(x);
45 static_cast<Derived&>(*
this).leave(x);
46 result = atermpp::down_cast<T>(x);
51template <
template <
class>
class Builder,
class Derived>
54 using super = Builder<Derived>;
63 static_cast<Derived&>(*
this).enter(x);
65 static_cast<Derived&>(*
this).leave(x);
66 result = atermpp::down_cast<T>(x);
72 static_cast<Derived&>(*
this).enter(x);
74 static_cast<Derived&>(*
this).leave(x);
75 result = atermpp::down_cast<T>(x);
81 static_cast<Derived&>(*
this).enter(x);
83 static_cast<Derived&>(*
this).leave(x);
89 static_cast<Derived&>(*
this).enter(x);
91 static_cast<Derived&>(*
this).leave(x);
97 static_cast<Derived&>(*
this).enter(x);
99 static_cast<Derived&>(*
this).leave(x);
105 static_cast<Derived&>(*
this).enter(x);
107 static_cast<Derived&>(*
this).leave(x);
113 static_cast<Derived&>(*
this).enter(x);
115 static_cast<Derived&>(*
this).leave(x);
121 static_cast<Derived&>(*
this).enter(x);
123 static_cast<Derived&>(*
this).leave(x);
129 static_cast<Derived&>(*
this).enter(x);
131 static_cast<Derived&>(*
this).leave(x);
137 static_cast<Derived&>(*
this).enter(x);
139 static_cast<Derived&>(*
this).leave(x);
145 static_cast<Derived&>(*
this).enter(x);
148 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
152 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
156 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::true_>(x));
160 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::false_>(x));
164 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::not_>(x));
168 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::and_>(x));
172 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::or_>(x));
176 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::imp>(x));
180 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::forall>(x));
184 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::exists>(x));
188 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::at>(x));
192 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::multi_action>(x));
196 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<process::untyped_multi_action>(x));
198 static_cast<Derived&>(*
this).leave(x);
204template <
typename Derived>
211template <
template <
class>
class Builder,
class Derived>
214 using super = Builder<Derived>;
223 static_cast<Derived&>(*
this).enter(x);
225 static_cast<Derived&>(*
this).leave(x);
226 result = atermpp::down_cast<T>(x);
232 static_cast<Derived&>(*
this).enter(x);
234 static_cast<Derived&>(*
this).leave(x);
235 result = atermpp::down_cast<T>(x);
241 static_cast<Derived&>(*
this).enter(x);
243 static_cast<Derived&>(*
this).leave(x);
249 static_cast<Derived&>(*
this).enter(x);
251 static_cast<Derived&>(*
this).leave(x);
257 static_cast<Derived&>(*
this).enter(x);
259 static_cast<Derived&>(*
this).leave(x);
265 static_cast<Derived&>(*
this).enter(x);
267 static_cast<Derived&>(*
this).leave(x);
273 static_cast<Derived&>(*
this).enter(x);
275 static_cast<Derived&>(*
this).leave(x);
281 static_cast<Derived&>(*
this).enter(x);
283 static_cast<Derived&>(*
this).leave(x);
289 static_cast<Derived&>(*
this).enter(x);
291 static_cast<Derived&>(*
this).leave(x);
297 static_cast<Derived&>(*
this).enter(x);
299 static_cast<Derived&>(*
this).leave(x);
305 static_cast<Derived&>(*
this).enter(x);
308 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
312 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
316 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::true_>(x));
320 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::false_>(x));
324 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::not_>(x));
328 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::and_>(x));
332 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::or_>(x));
336 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::imp>(x));
340 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::forall>(x));
344 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::exists>(x));
348 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::at>(x));
352 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::multi_action>(x));
356 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<process::untyped_multi_action>(x));
358 static_cast<Derived&>(*
this).leave(x);
364template <
typename Derived>
371template <
template <
class>
class Builder,
class Derived>
374 using super = Builder<Derived>;
383 static_cast<Derived&>(*
this).enter(x);
385 static_cast<Derived&>(*
this).leave(x);
386 result = atermpp::down_cast<T>(x);
392 static_cast<Derived&>(*
this).enter(x);
394 static_cast<Derived&>(*
this).leave(x);
395 result = atermpp::down_cast<T>(x);
401 static_cast<Derived&>(*
this).enter(x);
403 static_cast<Derived&>(*
this).leave(x);
409 static_cast<Derived&>(*
this).enter(x);
411 static_cast<Derived&>(*
this).leave(x);
417 static_cast<Derived&>(*
this).enter(x);
419 static_cast<Derived&>(*
this).leave(x);
425 static_cast<Derived&>(*
this).enter(x);
427 static_cast<Derived&>(*
this).leave(x);
433 static_cast<Derived&>(*
this).enter(x);
435 static_cast<Derived&>(*
this).leave(x);
441 static_cast<Derived&>(*
this).enter(x);
443 static_cast<Derived&>(*
this).leave(x);
449 static_cast<Derived&>(*
this).enter(x);
451 static_cast<Derived&>(*
this).leave(x);
457 static_cast<Derived&>(*
this).enter(x);
459 static_cast<Derived&>(*
this).leave(x);
465 static_cast<Derived&>(*
this).enter(x);
468 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
472 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
476 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::true_>(x));
480 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::false_>(x));
484 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::not_>(x));
488 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::and_>(x));
492 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::or_>(x));
496 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::imp>(x));
500 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::forall>(x));
504 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::exists>(x));
508 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::at>(x));
512 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::multi_action>(x));
516 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<process::untyped_multi_action>(x));
518 static_cast<Derived&>(*
this).leave(x);
524template <
typename Derived>
531template <
template <
class>
class Builder,
class Derived>
534 using super = Builder<Derived>;
543 static_cast<Derived&>(*
this).enter(x);
545 static_cast<Derived&>(*
this).leave(x);
546 result = atermpp::down_cast<T>(x);
552 static_cast<Derived&>(*
this).enter(x);
554 static_cast<Derived&>(*
this).leave(x);
555 result = atermpp::down_cast<T>(x);
561 static_cast<Derived&>(*
this).enter(x);
563 static_cast<Derived&>(*
this).leave(x);
569 static_cast<Derived&>(*
this).enter(x);
571 static_cast<Derived&>(*
this).leave(x);
577 static_cast<Derived&>(*
this).enter(x);
579 static_cast<Derived&>(*
this).leave(x);
585 static_cast<Derived&>(*
this).enter(x);
587 static_cast<Derived&>(*
this).leave(x);
593 static_cast<Derived&>(*
this).enter(x);
595 static_cast<Derived&>(*
this).leave(x);
601 static_cast<Derived&>(*
this).enter(x);
603 static_cast<Derived&>(*
this).leave(x);
609 static_cast<Derived&>(*
this).enter(x);
611 static_cast<Derived&>(*
this).leave(x);
617 static_cast<Derived&>(*
this).enter(x);
619 static_cast<Derived&>(*
this).leave(x);
620 result = atermpp::down_cast<T>(x);
626 static_cast<Derived&>(*
this).enter(x);
629 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
633 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
637 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::true_>(x));
641 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::false_>(x));
645 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::not_>(x));
649 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::and_>(x));
653 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::or_>(x));
657 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::imp>(x));
661 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::forall>(x));
665 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::exists>(x));
669 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::at>(x));
673 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::multi_action>(x));
677 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<process::untyped_multi_action>(x));
679 static_cast<Derived&>(*
this).leave(x);
685template <
typename Derived>
697template <
typename Derived>
707 static_cast<Derived&>(*
this).enter(x);
709 static_cast<Derived&>(*
this).leave(x);
710 result = atermpp::down_cast<T>(x);
717 static_cast<Derived&>(*
this).enter(x);
719 static_cast<Derived&>(*
this).leave(x);
720 result = atermpp::down_cast<T>(x);
725template <
template <
class>
class Builder,
class Derived>
728 using super = Builder<Derived>;
737 static_cast<Derived&>(*
this).enter(x);
739 static_cast<Derived&>(*
this).leave(x);
745 static_cast<Derived&>(*
this).enter(x);
747 static_cast<Derived&>(*
this).leave(x);
753 static_cast<Derived&>(*
this).enter(x);
755 static_cast<Derived&>(*
this).leave(x);
761 static_cast<Derived&>(*
this).enter(x);
763 static_cast<Derived&>(*
this).leave(x);
769 static_cast<Derived&>(*
this).enter(x);
771 static_cast<Derived&>(*
this).leave(x);
777 static_cast<Derived&>(*
this).enter(x);
780 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
784 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::action_formula>(x));
788 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::seq>(x));
792 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::alt>(x));
796 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::trans>(x));
800 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::trans_or_nil>(x));
804 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::untyped_regular_formula>(x));
806 static_cast<Derived&>(*
this).leave(x);
812template <
typename Derived>
819template <
template <
class>
class Builder,
class Derived>
822 using super = Builder<Derived>;
831 static_cast<Derived&>(*
this).enter(x);
833 static_cast<Derived&>(*
this).leave(x);
839 static_cast<Derived&>(*
this).enter(x);
841 static_cast<Derived&>(*
this).leave(x);
847 static_cast<Derived&>(*
this).enter(x);
849 static_cast<Derived&>(*
this).leave(x);
855 static_cast<Derived&>(*
this).enter(x);
857 static_cast<Derived&>(*
this).leave(x);
863 static_cast<Derived&>(*
this).enter(x);
865 static_cast<Derived&>(*
this).leave(x);
871 static_cast<Derived&>(*
this).enter(x);
874 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
878 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::action_formula>(x));
882 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::seq>(x));
886 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::alt>(x));
890 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::trans>(x));
894 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::trans_or_nil>(x));
898 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::untyped_regular_formula>(x));
900 static_cast<Derived&>(*
this).leave(x);
906template <
typename Derived>
913template <
template <
class>
class Builder,
class Derived>
916 using super = Builder<Derived>;
925 static_cast<Derived&>(*
this).enter(x);
927 static_cast<Derived&>(*
this).leave(x);
933 static_cast<Derived&>(*
this).enter(x);
935 static_cast<Derived&>(*
this).leave(x);
941 static_cast<Derived&>(*
this).enter(x);
943 static_cast<Derived&>(*
this).leave(x);
949 static_cast<Derived&>(*
this).enter(x);
951 static_cast<Derived&>(*
this).leave(x);
957 static_cast<Derived&>(*
this).enter(x);
959 static_cast<Derived&>(*
this).leave(x);
965 static_cast<Derived&>(*
this).enter(x);
968 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
972 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::action_formula>(x));
976 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::seq>(x));
980 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::alt>(x));
984 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::trans>(x));
988 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::trans_or_nil>(x));
992 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::untyped_regular_formula>(x));
994 static_cast<Derived&>(*
this).leave(x);
1000template <
typename Derived>
1007template <
template <
class>
class Builder,
class Derived>
1010 using super = Builder<Derived>;
1013 using super::update;
1019 static_cast<Derived&>(*
this).enter(x);
1021 static_cast<Derived&>(*
this).leave(x);
1027 static_cast<Derived&>(*
this).enter(x);
1029 static_cast<Derived&>(*
this).leave(x);
1035 static_cast<Derived&>(*
this).enter(x);
1037 static_cast<Derived&>(*
this).leave(x);
1043 static_cast<Derived&>(*
this).enter(x);
1045 static_cast<Derived&>(*
this).leave(x);
1051 static_cast<Derived&>(*
this).enter(x);
1053 static_cast<Derived&>(*
this).leave(x);
1059 static_cast<Derived&>(*
this).enter(x);
1062 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
1066 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<action_formulas::action_formula>(x));
1070 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::seq>(x));
1074 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::alt>(x));
1078 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::trans>(x));
1082 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::trans_or_nil>(x));
1086 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<regular_formulas::untyped_regular_formula>(x));
1088 static_cast<Derived&>(*
this).leave(x);
1094template <
typename Derived>
1106template <
typename Derived>
1115 static_cast<Derived&>(*
this).enter(x);
1117 static_cast<Derived&>(*
this).leave(x);
1118 result = atermpp::down_cast<T>(x);
1124 static_cast<Derived&>(*
this).enter(x);
1126 static_cast<Derived&>(*
this).leave(x);
1127 result = atermpp::down_cast<T>(x);
1133template <
template <
class>
class Builder,
class Derived>
1136 using super = Builder<Derived>;
1139 using super::update;
1145 static_cast<Derived&>(*
this).enter(x);
1147 static_cast<Derived&>(*
this).leave(x);
1148 result = atermpp::down_cast<T>(x);
1154 static_cast<Derived&>(*
this).enter(x);
1156 static_cast<Derived&>(*
this).leave(x);
1157 result = atermpp::down_cast<T>(x);
1163 static_cast<Derived&>(*
this).enter(x);
1165 static_cast<Derived&>(*
this).leave(x);
1171 static_cast<Derived&>(*
this).enter(x);
1173 static_cast<Derived&>(*
this).leave(x);
1179 static_cast<Derived&>(*
this).enter(x);
1181 static_cast<Derived&>(*
this).leave(x);
1187 static_cast<Derived&>(*
this).enter(x);
1189 static_cast<Derived&>(*
this).leave(x);
1195 static_cast<Derived&>(*
this).enter(x);
1197 static_cast<Derived&>(*
this).leave(x);
1203 static_cast<Derived&>(*
this).enter(x);
1205 static_cast<Derived&>(*
this).leave(x);
1211 static_cast<Derived&>(*
this).enter(x);
1213 static_cast<Derived&>(*
this).leave(x);
1219 static_cast<Derived&>(*
this).enter(x);
1221 static_cast<Derived&>(*
this).leave(x);
1227 static_cast<Derived&>(*
this).enter(x);
1229 static_cast<Derived&>(*
this).leave(x);
1235 static_cast<Derived&>(*
this).enter(x);
1237 static_cast<Derived&>(*
this).leave(x);
1243 static_cast<Derived&>(*
this).enter(x);
1245 static_cast<Derived&>(*
this).leave(x);
1251 static_cast<Derived&>(*
this).enter(x);
1253 static_cast<Derived&>(*
this).leave(x);
1259 static_cast<Derived&>(*
this).enter(x);
1261 static_cast<Derived&>(*
this).leave(x);
1267 static_cast<Derived&>(*
this).enter(x);
1269 static_cast<Derived&>(*
this).leave(x);
1275 static_cast<Derived&>(*
this).enter(x);
1277 static_cast<Derived&>(*
this).leave(x);
1283 static_cast<Derived&>(*
this).enter(x);
1285 static_cast<Derived&>(*
this).leave(x);
1286 result = atermpp::down_cast<T>(x);
1292 static_cast<Derived&>(*
this).enter(x);
1294 static_cast<Derived&>(*
this).leave(x);
1300 static_cast<Derived&>(*
this).enter(x);
1302 static_cast<Derived&>(*
this).leave(x);
1303 result = atermpp::down_cast<T>(x);
1309 static_cast<Derived&>(*
this).enter(x);
1311 static_cast<Derived&>(*
this).leave(x);
1317 static_cast<Derived&>(*
this).enter(x);
1319 static_cast<Derived&>(*
this).leave(x);
1325 static_cast<Derived&>(*
this).enter(x);
1327 static_cast<Derived&>(*
this).leave(x);
1333 static_cast<Derived&>(*
this).enter(x);
1335 static_cast<Derived&>(*
this).leave(x);
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;
1345 static_cast<Derived&>(*
this).apply(result_formula, x
.formula());
1347 static_cast<Derived&>(*
this).leave(x);
1353 static_cast<Derived&>(*
this).enter(x);
1356 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
1360 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1364 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::true_>(x));
1368 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::false_>(x));
1372 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::not_>(x));
1376 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::minus>(x));
1380 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::and_>(x));
1384 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::or_>(x));
1388 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::imp>(x));
1392 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::plus>(x));
1396 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::const_multiply>(x));
1400 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::const_multiply_alt>(x));
1404 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::forall>(x));
1408 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::exists>(x));
1412 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::infimum>(x));
1416 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::supremum>(x));
1420 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::sum>(x));
1424 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::must>(x));
1428 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::may>(x));
1432 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::yaled>(x));
1436 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::yaled_timed>(x));
1440 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::delay>(x));
1444 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::delay_timed>(x));
1448 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::variable>(x));
1452 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::nu>(x));
1456 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::mu>(x));
1458 static_cast<Derived&>(*
this).leave(x);
1464template <
typename Derived>
1471template <
template <
class>
class Builder,
class Derived>
1474 using super = Builder<Derived>;
1477 using super::update;
1483 static_cast<Derived&>(*
this).enter(x);
1485 static_cast<Derived&>(*
this).leave(x);
1486 result = atermpp::down_cast<T>(x);
1492 static_cast<Derived&>(*
this).enter(x);
1494 static_cast<Derived&>(*
this).leave(x);
1495 result = atermpp::down_cast<T>(x);
1501 static_cast<Derived&>(*
this).enter(x);
1503 static_cast<Derived&>(*
this).leave(x);
1509 static_cast<Derived&>(*
this).enter(x);
1511 static_cast<Derived&>(*
this).leave(x);
1517 static_cast<Derived&>(*
this).enter(x);
1519 static_cast<Derived&>(*
this).leave(x);
1525 static_cast<Derived&>(*
this).enter(x);
1527 static_cast<Derived&>(*
this).leave(x);
1533 static_cast<Derived&>(*
this).enter(x);
1535 static_cast<Derived&>(*
this).leave(x);
1541 static_cast<Derived&>(*
this).enter(x);
1543 static_cast<Derived&>(*
this).leave(x);
1549 static_cast<Derived&>(*
this).enter(x);
1551 static_cast<Derived&>(*
this).leave(x);
1557 static_cast<Derived&>(*
this).enter(x);
1559 static_cast<Derived&>(*
this).leave(x);
1565 static_cast<Derived&>(*
this).enter(x);
1567 static_cast<Derived&>(*
this).leave(x);
1573 static_cast<Derived&>(*
this).enter(x);
1575 static_cast<Derived&>(*
this).leave(x);
1581 static_cast<Derived&>(*
this).enter(x);
1583 static_cast<Derived&>(*
this).leave(x);
1589 static_cast<Derived&>(*
this).enter(x);
1591 static_cast<Derived&>(*
this).leave(x);
1597 static_cast<Derived&>(*
this).enter(x);
1599 static_cast<Derived&>(*
this).leave(x);
1605 static_cast<Derived&>(*
this).enter(x);
1607 static_cast<Derived&>(*
this).leave(x);
1613 static_cast<Derived&>(*
this).enter(x);
1615 static_cast<Derived&>(*
this).leave(x);
1621 static_cast<Derived&>(*
this).enter(x);
1623 static_cast<Derived&>(*
this).leave(x);
1624 result = atermpp::down_cast<T>(x);
1630 static_cast<Derived&>(*
this).enter(x);
1632 static_cast<Derived&>(*
this).leave(x);
1638 static_cast<Derived&>(*
this).enter(x);
1640 static_cast<Derived&>(*
this).leave(x);
1641 result = atermpp::down_cast<T>(x);
1647 static_cast<Derived&>(*
this).enter(x);
1649 static_cast<Derived&>(*
this).leave(x);
1655 static_cast<Derived&>(*
this).enter(x);
1657 static_cast<Derived&>(*
this).leave(x);
1663 static_cast<Derived&>(*
this).enter(x);
1665 static_cast<Derived&>(*
this).leave(x);
1671 static_cast<Derived&>(*
this).enter(x);
1673 static_cast<Derived&>(*
this).leave(x);
1678 static_cast<Derived&>(*
this).enter(x);
1680 static_cast<Derived&>(*
this).apply(result_formula, x
.formula());
1682 static_cast<Derived&>(*
this).leave(x);
1688 static_cast<Derived&>(*
this).enter(x);
1691 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
1695 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1699 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::true_>(x));
1703 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::false_>(x));
1707 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::not_>(x));
1711 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::minus>(x));
1715 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::and_>(x));
1719 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::or_>(x));
1723 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::imp>(x));
1727 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::plus>(x));
1731 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::const_multiply>(x));
1735 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::const_multiply_alt>(x));
1739 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::forall>(x));
1743 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::exists>(x));
1747 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::infimum>(x));
1751 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::supremum>(x));
1755 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::sum>(x));
1759 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::must>(x));
1763 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::may>(x));
1767 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::yaled>(x));
1771 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::yaled_timed>(x));
1775 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::delay>(x));
1779 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::delay_timed>(x));
1783 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::variable>(x));
1787 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::nu>(x));
1791 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::mu>(x));
1793 static_cast<Derived&>(*
this).leave(x);
1799template <
typename Derived>
1806template <
template <
class>
class Builder,
class Derived>
1809 using super = Builder<Derived>;
1812 using super::update;
1818 static_cast<Derived&>(*
this).enter(x);
1820 static_cast<Derived&>(*
this).leave(x);
1821 result = atermpp::down_cast<T>(x);
1827 static_cast<Derived&>(*
this).enter(x);
1829 static_cast<Derived&>(*
this).leave(x);
1830 result = atermpp::down_cast<T>(x);
1836 static_cast<Derived&>(*
this).enter(x);
1838 static_cast<Derived&>(*
this).leave(x);
1844 static_cast<Derived&>(*
this).enter(x);
1846 static_cast<Derived&>(*
this).leave(x);
1852 static_cast<Derived&>(*
this).enter(x);
1854 static_cast<Derived&>(*
this).leave(x);
1860 static_cast<Derived&>(*
this).enter(x);
1862 static_cast<Derived&>(*
this).leave(x);
1868 static_cast<Derived&>(*
this).enter(x);
1870 static_cast<Derived&>(*
this).leave(x);
1876 static_cast<Derived&>(*
this).enter(x);
1878 static_cast<Derived&>(*
this).leave(x);
1884 static_cast<Derived&>(*
this).enter(x);
1886 static_cast<Derived&>(*
this).leave(x);
1892 static_cast<Derived&>(*
this).enter(x);
1894 static_cast<Derived&>(*
this).leave(x);
1900 static_cast<Derived&>(*
this).enter(x);
1902 static_cast<Derived&>(*
this).leave(x);
1908 static_cast<Derived&>(*
this).enter(x);
1910 static_cast<Derived&>(*
this).leave(x);
1916 static_cast<Derived&>(*
this).enter(x);
1918 static_cast<Derived&>(*
this).leave(x);
1924 static_cast<Derived&>(*
this).enter(x);
1926 static_cast<Derived&>(*
this).leave(x);
1932 static_cast<Derived&>(*
this).enter(x);
1934 static_cast<Derived&>(*
this).leave(x);
1940 static_cast<Derived&>(*
this).enter(x);
1942 static_cast<Derived&>(*
this).leave(x);
1948 static_cast<Derived&>(*
this).enter(x);
1950 static_cast<Derived&>(*
this).leave(x);
1956 static_cast<Derived&>(*
this).enter(x);
1958 static_cast<Derived&>(*
this).leave(x);
1959 result = atermpp::down_cast<T>(x);
1965 static_cast<Derived&>(*
this).enter(x);
1967 static_cast<Derived&>(*
this).leave(x);
1973 static_cast<Derived&>(*
this).enter(x);
1975 static_cast<Derived&>(*
this).leave(x);
1976 result = atermpp::down_cast<T>(x);
1982 static_cast<Derived&>(*
this).enter(x);
1984 static_cast<Derived&>(*
this).leave(x);
1990 static_cast<Derived&>(*
this).enter(x);
1992 static_cast<Derived&>(*
this).leave(x);
1998 static_cast<Derived&>(*
this).enter(x);
2000 static_cast<Derived&>(*
this).leave(x);
2006 static_cast<Derived&>(*
this).enter(x);
2008 static_cast<Derived&>(*
this).leave(x);
2013 static_cast<Derived&>(*
this).enter(x);
2015 static_cast<Derived&>(*
this).apply(result_formula, x
.formula());
2017 static_cast<Derived&>(*
this).leave(x);
2023 static_cast<Derived&>(*
this).enter(x);
2026 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
2030 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
2034 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::true_>(x));
2038 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::false_>(x));
2042 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::not_>(x));
2046 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::minus>(x));
2050 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::and_>(x));
2054 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::or_>(x));
2058 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::imp>(x));
2062 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::plus>(x));
2066 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::const_multiply>(x));
2070 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::const_multiply_alt>(x));
2074 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::forall>(x));
2078 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::exists>(x));
2082 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::infimum>(x));
2086 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::supremum>(x));
2090 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::sum>(x));
2094 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::must>(x));
2098 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::may>(x));
2102 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::yaled>(x));
2106 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::yaled_timed>(x));
2110 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::delay>(x));
2114 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::delay_timed>(x));
2118 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::variable>(x));
2122 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::nu>(x));
2126 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::mu>(x));
2128 static_cast<Derived&>(*
this).leave(x);
2134template <
typename Derived>
2141template <
template <
class>
class Builder,
class Derived>
2144 using super = Builder<Derived>;
2147 using super::update;
2153 static_cast<Derived&>(*
this).enter(x);
2155 static_cast<Derived&>(*
this).leave(x);
2156 result = atermpp::down_cast<T>(x);
2162 static_cast<Derived&>(*
this).enter(x);
2164 static_cast<Derived&>(*
this).leave(x);
2165 result = atermpp::down_cast<T>(x);
2171 static_cast<Derived&>(*
this).enter(x);
2173 static_cast<Derived&>(*
this).leave(x);
2179 static_cast<Derived&>(*
this).enter(x);
2181 static_cast<Derived&>(*
this).leave(x);
2187 static_cast<Derived&>(*
this).enter(x);
2189 static_cast<Derived&>(*
this).leave(x);
2195 static_cast<Derived&>(*
this).enter(x);
2197 static_cast<Derived&>(*
this).leave(x);
2203 static_cast<Derived&>(*
this).enter(x);
2205 static_cast<Derived&>(*
this).leave(x);
2211 static_cast<Derived&>(*
this).enter(x);
2213 static_cast<Derived&>(*
this).leave(x);
2219 static_cast<Derived&>(*
this).enter(x);
2221 static_cast<Derived&>(*
this).leave(x);
2227 static_cast<Derived&>(*
this).enter(x);
2229 static_cast<Derived&>(*
this).leave(x);
2235 static_cast<Derived&>(*
this).enter(x);
2237 static_cast<Derived&>(*
this).leave(x);
2243 static_cast<Derived&>(*
this).enter(x);
2245 static_cast<Derived&>(*
this).leave(x);
2251 static_cast<Derived&>(*
this).enter(x);
2253 static_cast<Derived&>(*
this).leave(x);
2259 static_cast<Derived&>(*
this).enter(x);
2261 static_cast<Derived&>(*
this).leave(x);
2267 static_cast<Derived&>(*
this).enter(x);
2269 static_cast<Derived&>(*
this).leave(x);
2275 static_cast<Derived&>(*
this).enter(x);
2277 static_cast<Derived&>(*
this).leave(x);
2283 static_cast<Derived&>(*
this).enter(x);
2285 static_cast<Derived&>(*
this).leave(x);
2291 static_cast<Derived&>(*
this).enter(x);
2293 static_cast<Derived&>(*
this).leave(x);
2294 result = atermpp::down_cast<T>(x);
2300 static_cast<Derived&>(*
this).enter(x);
2302 static_cast<Derived&>(*
this).leave(x);
2303 result = atermpp::down_cast<T>(x);
2309 static_cast<Derived&>(*
this).enter(x);
2311 static_cast<Derived&>(*
this).leave(x);
2312 result = atermpp::down_cast<T>(x);
2318 static_cast<Derived&>(*
this).enter(x);
2320 static_cast<Derived&>(*
this).leave(x);
2321 result = atermpp::down_cast<T>(x);
2327 static_cast<Derived&>(*
this).enter(x);
2329 static_cast<Derived&>(*
this).leave(x);
2330 result = atermpp::down_cast<T>(x);
2336 static_cast<Derived&>(*
this).enter(x);
2338 static_cast<Derived&>(*
this).leave(x);
2344 static_cast<Derived&>(*
this).enter(x);
2346 static_cast<Derived&>(*
this).leave(x);
2351 static_cast<Derived&>(*
this).enter(x);
2353 static_cast<Derived&>(*
this).apply(result_formula, x
.formula());
2355 static_cast<Derived&>(*
this).leave(x);
2361 static_cast<Derived&>(*
this).enter(x);
2364 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::data_expression>(x));
2368 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
2372 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::true_>(x));
2376 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::false_>(x));
2380 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::not_>(x));
2384 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::minus>(x));
2388 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::and_>(x));
2392 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::or_>(x));
2396 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::imp>(x));
2400 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::plus>(x));
2404 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::const_multiply>(x));
2408 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::const_multiply_alt>(x));
2412 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::forall>(x));
2416 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::exists>(x));
2420 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::infimum>(x));
2424 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::supremum>(x));
2428 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::sum>(x));
2432 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::must>(x));
2436 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::may>(x));
2440 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::yaled>(x));
2444 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::yaled_timed>(x));
2448 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::delay>(x));
2452 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::delay_timed>(x));
2456 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::variable>(x));
2460 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::nu>(x));
2464 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<state_formulas::mu>(x));
2466 static_cast<Derived&>(*
this).leave(x);
2472template <
typename Derived>
aterm_string(const aterm_string &t) noexcept=default
sort_expression sort() const
Returns the sort of the data expression.
data_specification()=default
Default constructor. Generate a data specification that contains only booleans and positive numbers.
\brief An untyped parameter
Linear process specification.
\brief An untyped multi action or data application
D_ParserTables parser_tables_mcrl2
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_.
const basic_sort & bool_()
Constructor for sort expression Bool.
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.
The main namespace for the Process library.
bool is_untyped_multi_action(const atermpp::aterm &x)
expression builder that visits all sub expressions
expression traverser that visits all sub expressions