12#ifndef MCRL2_PROCESS_BUILDER_H
13#define MCRL2_PROCESS_BUILDER_H
28template <
template <
class>
class Builder,
class Derived>
41 static_cast<Derived&
>(*this).enter(x);
43 static_cast<Derived&
>(*this).leave(x);
48 static_cast<Derived&
>(*this).enter(x);
50 static_cast<Derived&
>(*this).apply(result_action_labels, x.
action_labels());
53 static_cast<Derived&
>(*this).update(x.
equations());
55 static_cast<Derived&
>(*this).apply(result_init, x.
init());
56 x.
init() = result_init;
57 static_cast<Derived&
>(*this).leave(x);
64 static_cast<Derived&
>(*this).enter(x);
66 static_cast<Derived&
>(*this).leave(x);
73 static_cast<Derived&
>(*this).enter(x);
75 static_cast<Derived&
>(*this).leave(x);
82 static_cast<Derived&
>(*this).enter(x);
84 static_cast<Derived&
>(*this).leave(x);
91 static_cast<Derived&
>(*this).enter(x);
93 static_cast<Derived&
>(*this).leave(x);
100 static_cast<Derived&
>(*this).enter(x);
102 static_cast<Derived&
>(*this).leave(x);
109 static_cast<Derived&
>(*this).enter(x);
111 static_cast<Derived&
>(*this).leave(x);
119 static_cast<Derived&
>(*this).enter(x);
121 static_cast<Derived&
>(*this).leave(x);
130 static_cast<Derived&
>(*this).enter(x);
132 static_cast<Derived&
>(*this).leave(x);
140 static_cast<Derived&
>(*this).enter(x);
142 static_cast<Derived&
>(*this).leave(x);
149 static_cast<Derived&
>(*this).enter(x);
151 static_cast<Derived&
>(*this).leave(x);
158 static_cast<Derived&
>(*this).enter(x);
160 static_cast<Derived&
>(*this).leave(x);
167 static_cast<Derived&
>(*this).enter(x);
169 static_cast<Derived&
>(*this).leave(x);
176 static_cast<Derived&
>(*this).enter(x);
178 static_cast<Derived&
>(*this).leave(x);
185 static_cast<Derived&
>(*this).enter(x);
187 static_cast<Derived&
>(*this).leave(x);
194 static_cast<Derived&
>(*this).enter(x);
196 static_cast<Derived&
>(*this).leave(x);
203 static_cast<Derived&
>(*this).enter(x);
205 static_cast<Derived&
>(*this).leave(x);
212 static_cast<Derived&
>(*this).enter(x);
214 static_cast<Derived&
>(*this).leave(x);
221 static_cast<Derived&
>(*this).enter(x);
223 static_cast<Derived&
>(*this).leave(x);
230 static_cast<Derived&
>(*this).enter(x);
232 static_cast<Derived&
>(*this).leave(x);
239 static_cast<Derived&
>(*this).enter(x);
241 static_cast<Derived&
>(*this).leave(x);
248 static_cast<Derived&
>(*this).enter(x);
250 static_cast<Derived&
>(*this).leave(x);
257 static_cast<Derived&
>(*this).enter(x);
259 static_cast<Derived&
>(*this).leave(x);
266 static_cast<Derived&
>(*this).enter(x);
268 static_cast<Derived&
>(*this).leave(x);
275 static_cast<Derived&
>(*this).enter(x);
277 static_cast<Derived&
>(*this).leave(x);
284 static_cast<Derived&
>(*this).enter(x);
286 static_cast<Derived&
>(*this).leave(x);
293 static_cast<Derived&
>(*this).enter(x);
296 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
300 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::action>(x));
304 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
308 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
312 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::delta>(x));
316 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::tau>(x));
320 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sum>(x));
324 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::block>(x));
328 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::hide>(x));
332 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::rename>(x));
336 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::comm>(x));
340 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::allow>(x));
344 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sync>(x));
348 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::at>(x));
352 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::seq>(x));
356 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
360 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
364 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
368 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::merge>(x));
372 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
376 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::choice>(x));
380 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
384 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
386 static_cast<Derived&
>(*this).leave(x);
392template <
typename Derived>
400template <
template <
class>
class Builder,
class Derived>
411 static_cast<Derived&
>(*this).enter(x);
412 static_cast<Derived&
>(*this).update(x.
equations());
414 static_cast<Derived&
>(*this).apply(result_init, x.
init());
415 x.
init() = result_init;
416 static_cast<Derived&
>(*this).leave(x);
423 static_cast<Derived&
>(*this).enter(x);
425 static_cast<Derived&
>(*this).leave(x);
432 static_cast<Derived&
>(*this).enter(x);
434 static_cast<Derived&
>(*this).leave(x);
441 static_cast<Derived&
>(*this).enter(x);
443 static_cast<Derived&
>(*this).leave(x);
450 static_cast<Derived&
>(*this).enter(x);
452 static_cast<Derived&
>(*this).leave(x);
459 static_cast<Derived&
>(*this).enter(x);
461 static_cast<Derived&
>(*this).leave(x);
469 static_cast<Derived&
>(*this).enter(x);
471 static_cast<Derived&
>(*this).leave(x);
480 static_cast<Derived&
>(*this).enter(x);
482 static_cast<Derived&
>(*this).leave(x);
490 static_cast<Derived&
>(*this).enter(x);
492 static_cast<Derived&
>(*this).leave(x);
499 static_cast<Derived&
>(*this).enter(x);
501 static_cast<Derived&
>(*this).leave(x);
508 static_cast<Derived&
>(*this).enter(x);
510 static_cast<Derived&
>(*this).leave(x);
517 static_cast<Derived&
>(*this).enter(x);
519 static_cast<Derived&
>(*this).leave(x);
526 static_cast<Derived&
>(*this).enter(x);
528 static_cast<Derived&
>(*this).leave(x);
535 static_cast<Derived&
>(*this).enter(x);
537 static_cast<Derived&
>(*this).leave(x);
544 static_cast<Derived&
>(*this).enter(x);
546 static_cast<Derived&
>(*this).leave(x);
553 static_cast<Derived&
>(*this).enter(x);
555 static_cast<Derived&
>(*this).leave(x);
562 static_cast<Derived&
>(*this).enter(x);
564 static_cast<Derived&
>(*this).leave(x);
571 static_cast<Derived&
>(*this).enter(x);
573 static_cast<Derived&
>(*this).leave(x);
580 static_cast<Derived&
>(*this).enter(x);
582 static_cast<Derived&
>(*this).leave(x);
589 static_cast<Derived&
>(*this).enter(x);
591 static_cast<Derived&
>(*this).leave(x);
598 static_cast<Derived&
>(*this).enter(x);
600 static_cast<Derived&
>(*this).leave(x);
607 static_cast<Derived&
>(*this).enter(x);
609 static_cast<Derived&
>(*this).leave(x);
616 static_cast<Derived&
>(*this).enter(x);
618 static_cast<Derived&
>(*this).leave(x);
625 static_cast<Derived&
>(*this).enter(x);
627 static_cast<Derived&
>(*this).leave(x);
634 static_cast<Derived&
>(*this).enter(x);
636 static_cast<Derived&
>(*this).leave(x);
643 static_cast<Derived&
>(*this).enter(x);
646 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
650 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::action>(x));
654 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
658 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
662 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::delta>(x));
666 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::tau>(x));
670 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sum>(x));
674 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::block>(x));
678 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::hide>(x));
682 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::rename>(x));
686 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::comm>(x));
690 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::allow>(x));
694 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sync>(x));
698 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::at>(x));
702 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::seq>(x));
706 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
710 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
714 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
718 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::merge>(x));
722 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
726 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::choice>(x));
730 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
734 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
736 static_cast<Derived&
>(*this).leave(x);
742template <
typename Derived>
749template <
template <
class>
class Builder,
class Derived>
760 static_cast<Derived&
>(*this).enter(x);
762 static_cast<Derived&
>(*this).update(x.
equations());
764 static_cast<Derived&
>(*this).apply(result_init, x.
init());
765 x.
init() = result_init;
766 static_cast<Derived&
>(*this).leave(x);
773 static_cast<Derived&
>(*this).enter(x);
775 static_cast<Derived&
>(*this).leave(x);
782 static_cast<Derived&
>(*this).enter(x);
784 static_cast<Derived&
>(*this).leave(x);
791 static_cast<Derived&
>(*this).enter(x);
793 static_cast<Derived&
>(*this).leave(x);
800 static_cast<Derived&
>(*this).enter(x);
802 static_cast<Derived&
>(*this).leave(x);
809 static_cast<Derived&
>(*this).enter(x);
811 static_cast<Derived&
>(*this).leave(x);
818 static_cast<Derived&
>(*this).enter(x);
820 static_cast<Derived&
>(*this).leave(x);
828 static_cast<Derived&
>(*this).enter(x);
830 static_cast<Derived&
>(*this).leave(x);
839 static_cast<Derived&
>(*this).enter(x);
841 static_cast<Derived&
>(*this).leave(x);
849 static_cast<Derived&
>(*this).enter(x);
851 static_cast<Derived&
>(*this).leave(x);
858 static_cast<Derived&
>(*this).enter(x);
860 static_cast<Derived&
>(*this).leave(x);
867 static_cast<Derived&
>(*this).enter(x);
869 static_cast<Derived&
>(*this).leave(x);
876 static_cast<Derived&
>(*this).enter(x);
878 static_cast<Derived&
>(*this).leave(x);
885 static_cast<Derived&
>(*this).enter(x);
887 static_cast<Derived&
>(*this).leave(x);
894 static_cast<Derived&
>(*this).enter(x);
896 static_cast<Derived&
>(*this).leave(x);
903 static_cast<Derived&
>(*this).enter(x);
905 static_cast<Derived&
>(*this).leave(x);
912 static_cast<Derived&
>(*this).enter(x);
914 static_cast<Derived&
>(*this).leave(x);
921 static_cast<Derived&
>(*this).enter(x);
923 static_cast<Derived&
>(*this).leave(x);
930 static_cast<Derived&
>(*this).enter(x);
932 static_cast<Derived&
>(*this).leave(x);
939 static_cast<Derived&
>(*this).enter(x);
941 static_cast<Derived&
>(*this).leave(x);
948 static_cast<Derived&
>(*this).enter(x);
950 static_cast<Derived&
>(*this).leave(x);
957 static_cast<Derived&
>(*this).enter(x);
959 static_cast<Derived&
>(*this).leave(x);
966 static_cast<Derived&
>(*this).enter(x);
968 static_cast<Derived&
>(*this).leave(x);
975 static_cast<Derived&
>(*this).enter(x);
977 static_cast<Derived&
>(*this).leave(x);
984 static_cast<Derived&
>(*this).enter(x);
986 static_cast<Derived&
>(*this).leave(x);
993 static_cast<Derived&
>(*this).enter(x);
995 static_cast<Derived&
>(*this).leave(x);
1002 static_cast<Derived&
>(*this).enter(x);
1005 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1009 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::action>(x));
1013 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
1017 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
1021 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::delta>(x));
1025 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::tau>(x));
1029 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sum>(x));
1033 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::block>(x));
1037 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::hide>(x));
1041 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::rename>(x));
1045 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::comm>(x));
1049 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::allow>(x));
1053 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sync>(x));
1057 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::at>(x));
1061 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::seq>(x));
1065 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
1069 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
1073 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
1077 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::merge>(x));
1081 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
1085 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::choice>(x));
1089 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
1093 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
1095 static_cast<Derived&
>(*this).leave(x);
1101template <
typename Derived>
1109template <
template <
class>
class Builder,
class Derived>
1115 using super::update;
1120 static_cast<Derived&
>(*this).enter(x);
1121 static_cast<Derived&
>(*this).update(x.
equations());
1123 static_cast<Derived&
>(*this).apply(result_init, x.
init());
1124 x.
init() = result_init;
1125 static_cast<Derived&
>(*this).leave(x);
1132 static_cast<Derived&
>(*this).enter(x);
1134 static_cast<Derived&
>(*this).leave(x);
1142 static_cast<Derived&
>(*this).enter(x);
1144 static_cast<Derived&
>(*this).leave(x);
1153 static_cast<Derived&
>(*this).enter(x);
1155 static_cast<Derived&
>(*this).leave(x);
1164 static_cast<Derived&
>(*this).enter(x);
1166 static_cast<Derived&
>(*this).leave(x);
1175 static_cast<Derived&
>(*this).enter(x);
1177 static_cast<Derived&
>(*this).leave(x);
1186 static_cast<Derived&
>(*this).enter(x);
1188 static_cast<Derived&
>(*this).leave(x);
1196 static_cast<Derived&
>(*this).enter(x);
1198 static_cast<Derived&
>(*this).leave(x);
1205 static_cast<Derived&
>(*this).enter(x);
1207 static_cast<Derived&
>(*this).leave(x);
1214 static_cast<Derived&
>(*this).enter(x);
1216 static_cast<Derived&
>(*this).leave(x);
1223 static_cast<Derived&
>(*this).enter(x);
1225 static_cast<Derived&
>(*this).leave(x);
1232 static_cast<Derived&
>(*this).enter(x);
1234 static_cast<Derived&
>(*this).leave(x);
1241 static_cast<Derived&
>(*this).enter(x);
1243 static_cast<Derived&
>(*this).leave(x);
1250 static_cast<Derived&
>(*this).enter(x);
1252 static_cast<Derived&
>(*this).leave(x);
1259 static_cast<Derived&
>(*this).enter(x);
1261 static_cast<Derived&
>(*this).leave(x);
1268 static_cast<Derived&
>(*this).enter(x);
1270 static_cast<Derived&
>(*this).leave(x);
1277 static_cast<Derived&
>(*this).enter(x);
1279 static_cast<Derived&
>(*this).leave(x);
1286 static_cast<Derived&
>(*this).enter(x);
1288 static_cast<Derived&
>(*this).leave(x);
1295 static_cast<Derived&
>(*this).enter(x);
1297 static_cast<Derived&
>(*this).leave(x);
1304 static_cast<Derived&
>(*this).enter(x);
1306 static_cast<Derived&
>(*this).leave(x);
1313 static_cast<Derived&
>(*this).enter(x);
1315 static_cast<Derived&
>(*this).leave(x);
1322 static_cast<Derived&
>(*this).enter(x);
1324 static_cast<Derived&
>(*this).leave(x);
1331 static_cast<Derived&
>(*this).enter(x);
1333 static_cast<Derived&
>(*this).leave(x);
1341 static_cast<Derived&
>(*this).enter(x);
1343 static_cast<Derived&
>(*this).leave(x);
1351 static_cast<Derived&
>(*this).enter(x);
1354 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1358 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::action>(x));
1362 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
1366 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
1370 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::delta>(x));
1374 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::tau>(x));
1378 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sum>(x));
1382 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::block>(x));
1386 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::hide>(x));
1390 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::rename>(x));
1394 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::comm>(x));
1398 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::allow>(x));
1402 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sync>(x));
1406 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::at>(x));
1410 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::seq>(x));
1414 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
1418 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
1422 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
1426 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::merge>(x));
1430 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
1434 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::choice>(x));
1438 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
1442 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
1444 static_cast<Derived&
>(*this).leave(x);
1450template <
typename Derived>
1457template <
template <
class>
class Builder,
class Derived>
1463 using super::update;
1468 static_cast<Derived&
>(*this).enter(x);
1469 static_cast<Derived&
>(*this).update(x.
equations());
1471 static_cast<Derived&
>(*this).apply(result_init, x.
init());
1472 x.
init() = result_init;
1473 static_cast<Derived&
>(*this).leave(x);
1481 static_cast<Derived&
>(*this).enter(x);
1483 static_cast<Derived&
>(*this).leave(x);
1491 static_cast<Derived&
>(*this).enter(x);
1493 static_cast<Derived&
>(*this).leave(x);
1501 static_cast<Derived&
>(*this).enter(x);
1503 static_cast<Derived&
>(*this).leave(x);
1511 static_cast<Derived&
>(*this).enter(x);
1513 static_cast<Derived&
>(*this).leave(x);
1520 static_cast<Derived&
>(*this).enter(x);
1522 static_cast<Derived&
>(*this).leave(x);
1530 static_cast<Derived&
>(*this).enter(x);
1532 static_cast<Derived&
>(*this).leave(x);
1541 static_cast<Derived&
>(*this).enter(x);
1543 static_cast<Derived&
>(*this).leave(x);
1551 static_cast<Derived&
>(*this).enter(x);
1553 static_cast<Derived&
>(*this).leave(x);
1560 static_cast<Derived&
>(*this).enter(x);
1562 static_cast<Derived&
>(*this).leave(x);
1569 static_cast<Derived&
>(*this).enter(x);
1571 static_cast<Derived&
>(*this).leave(x);
1578 static_cast<Derived&
>(*this).enter(x);
1580 static_cast<Derived&
>(*this).leave(x);
1587 static_cast<Derived&
>(*this).enter(x);
1589 static_cast<Derived&
>(*this).leave(x);
1596 static_cast<Derived&
>(*this).enter(x);
1598 static_cast<Derived&
>(*this).leave(x);
1605 static_cast<Derived&
>(*this).enter(x);
1607 static_cast<Derived&
>(*this).leave(x);
1614 static_cast<Derived&
>(*this).enter(x);
1616 static_cast<Derived&
>(*this).leave(x);
1623 static_cast<Derived&
>(*this).enter(x);
1625 static_cast<Derived&
>(*this).leave(x);
1632 static_cast<Derived&
>(*this).enter(x);
1634 static_cast<Derived&
>(*this).leave(x);
1641 static_cast<Derived&
>(*this).enter(x);
1643 static_cast<Derived&
>(*this).leave(x);
1650 static_cast<Derived&
>(*this).enter(x);
1652 static_cast<Derived&
>(*this).leave(x);
1659 static_cast<Derived&
>(*this).enter(x);
1661 static_cast<Derived&
>(*this).leave(x);
1668 static_cast<Derived&
>(*this).enter(x);
1670 static_cast<Derived&
>(*this).leave(x);
1677 static_cast<Derived&
>(*this).enter(x);
1679 static_cast<Derived&
>(*this).leave(x);
1686 static_cast<Derived&
>(*this).enter(x);
1688 static_cast<Derived&
>(*this).leave(x);
1696 static_cast<Derived&
>(*this).enter(x);
1698 static_cast<Derived&
>(*this).leave(x);
1706 static_cast<Derived&
>(*this).enter(x);
1709 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1713 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::action>(x));
1717 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
1721 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
1725 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::delta>(x));
1729 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::tau>(x));
1733 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sum>(x));
1737 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::block>(x));
1741 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::hide>(x));
1745 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::rename>(x));
1749 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::comm>(x));
1753 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::allow>(x));
1757 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::sync>(x));
1761 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::at>(x));
1765 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::seq>(x));
1769 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
1773 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
1777 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
1781 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::merge>(x));
1785 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
1789 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::choice>(x));
1793 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
1797 static_cast<Derived&
>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
1799 static_cast<Derived&
>(*this).leave(x);
1805template <
typename Derived>
const core::identifier_string & name() const
const data::data_expression_list & arguments() const
const action_label & label() const
\brief The allow operator
const action_name_multiset_list & allow_set() const
const data::data_expression & time_stamp() const
const process_expression & operand() const
\brief The block operator
const core::identifier_string_list & block_set() const
\brief The bounded initialization
const process_expression & right() const
const process_expression & left() const
\brief The choice operator
const process_expression & left() const
const process_expression & right() const
\brief The communication operator
const communication_expression_list & comm_set() const
const core::identifier_string_list & hide_set() const
\brief The if-then-else operator
const process_expression & else_case() const
const process_expression & then_case() const
const data::data_expression & condition() const
\brief The if-then operator
const process_expression & then_case() const
const data::data_expression & condition() const
\brief The left merge operator
const process_expression & right() const
const process_expression & left() const
\brief The merge operator
const process_expression & right() const
const process_expression & left() const
\brief A process equation
const data::variable_list & formal_parameters() const
const process_identifier & identifier() const
const process_expression & expression() const
\brief A process expression
\brief A process identifier
const core::identifier_string & name() const
\brief A process assignment
const data::assignment_list & assignments() const
const process_identifier & identifier() const
const data::data_expression_list & actual_parameters() const
const process_identifier & identifier() const
Process specification consisting of a data specification, action labels, a sequence of process equati...
const std::vector< process_equation > & equations() const
Returns the equations of the process specification.
const process_expression & init() const
Returns the initialization of the process specification.
const process::action_label_list & action_labels() const
Returns the action label specification.
const std::set< data::variable > & global_variables() const
Returns the declared free variables of the process specification.
\brief The rename operator
const rename_expression_list & rename_set() const
\brief The sequential composition
const process_expression & right() const
const process_expression & left() const
\brief The distribution operator
const data::variable_list & variables() const
const data::data_expression & distribution() const
const process_expression & operand() const
const process_expression & operand() const
const data::variable_list & variables() const
\brief The synchronization operator
const process_expression & left() const
const process_expression & right() const
\brief An untyped multi action or data application
const data::untyped_data_parameter_list & actions() const
\brief An untyped process assginment
const core::identifier_string & name() const
add your file description here.
bool is_untyped_data_parameter(const atermpp::aterm &x)
bool is_at(const atermpp::aterm &x)
void make_allow(atermpp::aterm &t, const ARGUMENTS &... args)
void make_choice(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_identifier(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_process_instance(const atermpp::aterm &x)
void make_merge(atermpp::aterm &t, const ARGUMENTS &... args)
void make_at(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_process_instance_assignment(const atermpp::aterm &x)
bool is_tau(const atermpp::aterm &x)
void make_action(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_seq(const atermpp::aterm &x)
void make_sync(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_merge(const atermpp::aterm &x)
void make_if_then_else(atermpp::aterm &t, const ARGUMENTS &... args)
void make_hide(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_allow(const atermpp::aterm &x)
void make_if_then(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_bounded_init(const atermpp::aterm &x)
bool is_delta(const atermpp::aterm &x)
void make_block(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sum(const atermpp::aterm &x)
bool is_block(const atermpp::aterm &x)
bool is_if_then_else(const atermpp::aterm &x)
void make_action_label(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_comm(const atermpp::aterm &x)
bool is_action(const atermpp::aterm &x)
bool is_left_merge(const atermpp::aterm &x)
void make_stochastic_operator(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_instance(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_hide(const atermpp::aterm &x)
bool is_if_then(const atermpp::aterm &x)
void make_untyped_process_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_instance_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_choice(const atermpp::aterm &x)
void make_comm(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_stochastic_operator(const atermpp::aterm &x)
void make_untyped_multi_action(atermpp::aterm &t, const ARGUMENTS &... args)
void make_bounded_init(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_equation(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_rename(const atermpp::aterm &x)
bool is_untyped_process_assignment(const atermpp::aterm &x)
void make_rename(atermpp::aterm &t, const ARGUMENTS &... args)
void make_seq(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sync(const atermpp::aterm &x)
void make_sum(atermpp::aterm &t, const ARGUMENTS &... args)
void make_left_merge(atermpp::aterm &t, const ARGUMENTS &... args)
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
void apply(T &result, const process::process_equation &x)
void apply(T &result, const process::rename &x)
void apply(T &result, const process::left_merge &x)
void apply(T &result, const process::bounded_init &x)
void apply(T &result, const process::process_expression &x)
void apply(T &result, const process::block &x)
void apply(T &result, const process::merge &x)
void apply(T &result, const process::sync &x)
void apply(T &result, const process::choice &x)
void apply(T &result, const process::if_then &x)
void apply(T &result, const process::action &x)
void apply(T &result, const process::delta &x)
void apply(T &result, const process::process_instance_assignment &x)
void apply(T &result, const process::untyped_process_assignment &x)
void apply(T &result, const process::stochastic_operator &x)
void update(process::process_specification &x)
void apply(T &result, const process::allow &x)
void apply(T &result, const process::at &x)
void apply(T &result, const process::sum &x)
void apply(T &result, const process::seq &x)
void apply(T &result, const process::tau &x)
void apply(T &result, const process::comm &x)
void apply(T &result, const process::untyped_multi_action &x)
void apply(T &result, const process::hide &x)
void apply(T &result, const process::if_then_else &x)
void apply(T &result, const process::process_instance &x)
void apply(T &result, const process::sync &x)
void apply(T &result, const process::rename &x)
void apply(T &result, const process::if_then_else &x)
void apply(T &result, const process::process_equation &x)
void apply(T &result, const process::bounded_init &x)
void apply(T &result, const process::at &x)
void apply(T &result, const process::if_then &x)
void apply(T &result, const process::choice &x)
void apply(T &result, const process::tau &x)
void apply(T &result, const process::merge &x)
void apply(T &result, const process::left_merge &x)
void apply(T &result, const process::sum &x)
void apply(T &result, const process::seq &x)
void apply(T &result, const process::untyped_process_assignment &x)
void apply(T &result, const process::block &x)
void apply(T &result, const process::allow &x)
void apply(T &result, const process::action &x)
void apply(T &result, const process::hide &x)
void apply(T &result, const process::process_expression &x)
void apply(T &result, const process::process_instance_assignment &x)
void apply(T &result, const process::comm &x)
void apply(T &result, const process::delta &x)
void apply(T &result, const process::process_instance &x)
void update(process::process_specification &x)
void apply(T &result, const process::stochastic_operator &x)
void apply(T &result, const process::process_expression &x)
void apply(T &result, const process::process_identifier &x)
void apply(T &result, const process::process_instance &x)
void apply(T &result, const process::delta &x)
void apply(T &result, const process::process_instance_assignment &x)
void apply(T &result, const process::stochastic_operator &x)
void apply(T &result, const process::choice &x)
void apply(T &result, const process::at &x)
void apply(T &result, const process::merge &x)
void apply(T &result, const process::if_then &x)
void apply(T &result, const process::comm &x)
void apply(T &result, const process::process_equation &x)
void apply(T &result, const process::left_merge &x)
void apply(T &result, const process::sync &x)
void apply(T &result, const process::tau &x)
void update(process::process_specification &x)
void apply(T &result, const process::hide &x)
void apply(T &result, const process::if_then_else &x)
void apply(T &result, const process::untyped_process_assignment &x)
void apply(T &result, const process::rename &x)
void apply(T &result, const process::seq &x)
void apply(T &result, const process::block &x)
void apply(T &result, const process::sum &x)
void apply(T &result, const process::bounded_init &x)
void apply(T &result, const process::action &x)
void apply(T &result, const process::allow &x)
void update(process::process_specification &x)
void apply(T &result, const process::sync &x)
void apply(T &result, const process::choice &x)
void apply(T &result, const process::process_instance_assignment &x)
void apply(T &result, const process::process_instance &x)
void apply(T &result, const process::merge &x)
void apply(T &result, const process::seq &x)
void apply(T &result, const process::if_then &x)
void apply(T &result, const process::untyped_multi_action &x)
void apply(T &result, const process::stochastic_operator &x)
void apply(T &result, const process::action &x)
void apply(T &result, const process::delta &x)
void apply(T &result, const process::if_then_else &x)
void apply(T &result, const process::left_merge &x)
void apply(T &result, const process::process_equation &x)
void apply(T &result, const process::hide &x)
void apply(T &result, const process::allow &x)
void apply(T &result, const process::rename &x)
void apply(T &result, const process::comm &x)
void apply(T &result, const process::sum &x)
void apply(T &result, const process::bounded_init &x)
void apply(T &result, const process::action_label &x)
void apply(T &result, const process::block &x)
void apply(T &result, const process::at &x)
void apply(T &result, const process::tau &x)
void apply(T &result, const process::process_identifier &x)
void apply(T &result, const process::process_expression &x)
void apply(T &result, const process::untyped_process_assignment &x)
void apply(T &result, const process::process_instance &x)
void apply(T &result, const process::choice &x)
void apply(T &result, const process::sync &x)
void apply(T &result, const process::sum &x)
void apply(T &result, const process::stochastic_operator &x)
void apply(T &result, const process::untyped_process_assignment &x)
void apply(T &result, const process::allow &x)
void apply(T &result, const process::bounded_init &x)
void apply(T &result, const process::comm &x)
void apply(T &result, const process::block &x)
void apply(T &result, const process::tau &x)
void apply(T &result, const process::action &x)
void apply(T &result, const process::left_merge &x)
void apply(T &result, const process::untyped_multi_action &x)
void apply(T &result, const process::merge &x)
void apply(T &result, const process::seq &x)
void apply(T &result, const process::delta &x)
void apply(T &result, const process::hide &x)
void apply(T &result, const process::at &x)
void apply(T &result, const process::process_identifier &x)
void apply(T &result, const process::if_then_else &x)
void update(process::process_specification &x)
void apply(T &result, const process::process_equation &x)
void apply(T &result, const process::process_instance_assignment &x)
void apply(T &result, const process::rename &x)
void apply(T &result, const process::if_then &x)
void apply(T &result, const process::process_expression &x)
add your file description here.