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/pbes/builder.h
10/// \brief add your file description here.
11
12#ifndef MCRL2_PBES_BUILDER_H
13#define MCRL2_PBES_BUILDER_H
14
15#include "mcrl2/data/builder.h"
16#include "mcrl2/pbes/pbes.h"
17
18namespace mcrl2::pbes_system
19{
20
21/// \brief Builder class
22template <typename Derived>
24{
25 using super = core::builder<Derived>;
26 using super::enter;
27 using super::leave;
28 using super::update;
29 using super::apply;
30
31 template <class T>
32 void apply(T& result, const data::data_expression& x)
33 {
34 result = atermpp::down_cast<T>(x);
35 }
36 template <class T>
37 void apply(T& result, const data::untyped_data_parameter& x)
38 {
39 result = atermpp::down_cast<T>(x);
40 }
41};
42
43// Adds sort expression traversal to a builder
44//--- start generated add_sort_expressions code ---//
45template <template <class> class Builder, class Derived>
46struct add_sort_expressions: public Builder<Derived>
47{
48 using super = Builder<Derived>;
49 using super::enter;
50 using super::leave;
51 using super::update;
52 using super::apply;
53
54 template <class T>
55 void apply(T& result, const pbes_system::propositional_variable& x)
56 {
57 static_cast<Derived&>(*this).enter(x);
58 pbes_system::make_propositional_variable(result, x.name(), [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.parameters()); });
59 static_cast<Derived&>(*this).leave(x);
60 }
61
63 {
64 static_cast<Derived&>(*this).enter(x);
65 propositional_variable result_variable;
66 static_cast<Derived&>(*this).apply(result_variable, x.variable());
67 x.variable() = result_variable;
68 pbes_expression result_formula;
69 static_cast<Derived&>(*this).apply(result_formula, x.formula());
70 x.formula() = result_formula;
71 static_cast<Derived&>(*this).leave(x);
72 }
73
75 {
76 static_cast<Derived&>(*this).enter(x);
77 static_cast<Derived&>(*this).update(x.global_variables());
78 static_cast<Derived&>(*this).update(x.equations());
79 propositional_variable_instantiation result_initial_state;
80 static_cast<Derived&>(*this).apply(result_initial_state, x.initial_state());
81 x.initial_state() = result_initial_state;
82 static_cast<Derived&>(*this).leave(x);
83 }
84
85 template <class T>
87 {
88 static_cast<Derived&>(*this).enter(x);
89 pbes_system::make_propositional_variable_instantiation(result, x.name(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.parameters()); });
90 static_cast<Derived&>(*this).leave(x);
91 }
92
93 template <class T>
94 void apply(T& result, const pbes_system::not_& x)
95 {
96 static_cast<Derived&>(*this).enter(x);
97 pbes_system::make_not(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
98 static_cast<Derived&>(*this).leave(x);
99 }
100
101 template <class T>
102 void apply(T& result, const pbes_system::and_& x)
103 {
104 static_cast<Derived&>(*this).enter(x);
105 pbes_system::make_and(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
106 static_cast<Derived&>(*this).leave(x);
107 }
108
109 template <class T>
110 void apply(T& result, const pbes_system::or_& x)
111 {
112 static_cast<Derived&>(*this).enter(x);
113 pbes_system::make_or(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
114 static_cast<Derived&>(*this).leave(x);
115 }
116
117 template <class T>
118 void apply(T& result, const pbes_system::imp& x)
119 {
120 static_cast<Derived&>(*this).enter(x);
121 pbes_system::make_imp(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
122 static_cast<Derived&>(*this).leave(x);
123 }
124
125 template <class T>
126 void apply(T& result, const pbes_system::forall& x)
127 {
128 static_cast<Derived&>(*this).enter(x);
129 pbes_system::make_forall(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
130 static_cast<Derived&>(*this).leave(x);
131 }
132
133 template <class T>
134 void apply(T& result, const pbes_system::exists& x)
135 {
136 static_cast<Derived&>(*this).enter(x);
137 pbes_system::make_exists(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
138 static_cast<Derived&>(*this).leave(x);
139 }
140
141 template <class T>
142 void apply(T& result, const pbes_system::pbes_expression& x)
143 {
144 static_cast<Derived&>(*this).enter(x);
146 {
147 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
148 }
150 {
151 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
152 }
154 {
155 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::propositional_variable_instantiation>(x));
156 }
157 else if (pbes_system::is_not(x))
158 {
159 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::not_>(x));
160 }
161 else if (pbes_system::is_and(x))
162 {
163 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::and_>(x));
164 }
165 else if (pbes_system::is_or(x))
166 {
167 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::or_>(x));
168 }
169 else if (pbes_system::is_imp(x))
170 {
171 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::imp>(x));
172 }
173 else if (pbes_system::is_forall(x))
174 {
175 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::forall>(x));
176 }
177 else if (pbes_system::is_exists(x))
178 {
179 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::exists>(x));
180 }
181 static_cast<Derived&>(*this).leave(x);
182 }
183
184};
185
186/// \\brief Builder class
187template <typename Derived>
189{
190};
191//--- end generated add_sort_expressions code ---//
192
193// Adds data expression traversal to a builder
194//--- start generated add_data_expressions code ---//
195template <template <class> class Builder, class Derived>
196struct add_data_expressions: public Builder<Derived>
197{
198 using super = Builder<Derived>;
199 using super::enter;
200 using super::leave;
201 using super::update;
202 using super::apply;
203
205 {
206 static_cast<Derived&>(*this).enter(x);
207 pbes_expression result_formula;
208 static_cast<Derived&>(*this).apply(result_formula, x.formula());
209 x.formula() = result_formula;
210 static_cast<Derived&>(*this).leave(x);
211 }
212
214 {
215 static_cast<Derived&>(*this).enter(x);
216 static_cast<Derived&>(*this).update(x.equations());
217 propositional_variable_instantiation result_initial_state;
218 static_cast<Derived&>(*this).apply(result_initial_state, x.initial_state());
219 x.initial_state() = result_initial_state;
220 static_cast<Derived&>(*this).leave(x);
221 }
222
223 template <class T>
225 {
226 static_cast<Derived&>(*this).enter(x);
227 pbes_system::make_propositional_variable_instantiation(result, x.name(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.parameters()); });
228 static_cast<Derived&>(*this).leave(x);
229 }
230
231 template <class T>
232 void apply(T& result, const pbes_system::not_& x)
233 {
234 static_cast<Derived&>(*this).enter(x);
235 pbes_system::make_not(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
236 static_cast<Derived&>(*this).leave(x);
237 }
238
239 template <class T>
240 void apply(T& result, const pbes_system::and_& x)
241 {
242 static_cast<Derived&>(*this).enter(x);
243 pbes_system::make_and(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
244 static_cast<Derived&>(*this).leave(x);
245 }
246
247 template <class T>
248 void apply(T& result, const pbes_system::or_& x)
249 {
250 static_cast<Derived&>(*this).enter(x);
251 pbes_system::make_or(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
252 static_cast<Derived&>(*this).leave(x);
253 }
254
255 template <class T>
256 void apply(T& result, const pbes_system::imp& x)
257 {
258 static_cast<Derived&>(*this).enter(x);
259 pbes_system::make_imp(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
260 static_cast<Derived&>(*this).leave(x);
261 }
262
263 template <class T>
264 void apply(T& result, const pbes_system::forall& x)
265 {
266 static_cast<Derived&>(*this).enter(x);
267 pbes_system::make_forall(result, x.variables(), [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
268 static_cast<Derived&>(*this).leave(x);
269 }
270
271 template <class T>
272 void apply(T& result, const pbes_system::exists& x)
273 {
274 static_cast<Derived&>(*this).enter(x);
275 pbes_system::make_exists(result, x.variables(), [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
276 static_cast<Derived&>(*this).leave(x);
277 }
278
279 template <class T>
280 void apply(T& result, const pbes_system::pbes_expression& x)
281 {
282 static_cast<Derived&>(*this).enter(x);
284 {
285 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
286 }
288 {
289 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
290 }
292 {
293 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::propositional_variable_instantiation>(x));
294 }
295 else if (pbes_system::is_not(x))
296 {
297 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::not_>(x));
298 }
299 else if (pbes_system::is_and(x))
300 {
301 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::and_>(x));
302 }
303 else if (pbes_system::is_or(x))
304 {
305 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::or_>(x));
306 }
307 else if (pbes_system::is_imp(x))
308 {
309 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::imp>(x));
310 }
311 else if (pbes_system::is_forall(x))
312 {
313 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::forall>(x));
314 }
315 else if (pbes_system::is_exists(x))
316 {
317 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::exists>(x));
318 }
319 static_cast<Derived&>(*this).leave(x);
320 }
321
322};
323
324/// \\brief Builder class
325template <typename Derived>
327{
328};
329//--- end generated add_data_expressions code ---//
330
331//--- start generated add_variables code ---//
332template <template <class> class Builder, class Derived>
333struct add_variables: public Builder<Derived>
334{
335 using super = Builder<Derived>;
336 using super::enter;
337 using super::leave;
338 using super::update;
339 using super::apply;
340
341 template <class T>
342 void apply(T& result, const pbes_system::propositional_variable& x)
343 {
344 static_cast<Derived&>(*this).enter(x);
345 pbes_system::make_propositional_variable(result, x.name(), [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.parameters()); });
346 static_cast<Derived&>(*this).leave(x);
347 }
348
350 {
351 static_cast<Derived&>(*this).enter(x);
352 propositional_variable result_variable;
353 static_cast<Derived&>(*this).apply(result_variable, x.variable());
354 x.variable() = result_variable;
355 pbes_expression result_formula;
356 static_cast<Derived&>(*this).apply(result_formula, x.formula());
357 x.formula() = result_formula;
358 static_cast<Derived&>(*this).leave(x);
359 }
360
362 {
363 static_cast<Derived&>(*this).enter(x);
364 static_cast<Derived&>(*this).update(x.global_variables());
365 static_cast<Derived&>(*this).update(x.equations());
366 propositional_variable_instantiation result_initial_state;
367 static_cast<Derived&>(*this).apply(result_initial_state, x.initial_state());
368 x.initial_state() = result_initial_state;
369 static_cast<Derived&>(*this).leave(x);
370 }
371
372 template <class T>
374 {
375 static_cast<Derived&>(*this).enter(x);
376 pbes_system::make_propositional_variable_instantiation(result, x.name(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.parameters()); });
377 static_cast<Derived&>(*this).leave(x);
378 }
379
380 template <class T>
381 void apply(T& result, const pbes_system::not_& x)
382 {
383 static_cast<Derived&>(*this).enter(x);
384 pbes_system::make_not(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
385 static_cast<Derived&>(*this).leave(x);
386 }
387
388 template <class T>
389 void apply(T& result, const pbes_system::and_& x)
390 {
391 static_cast<Derived&>(*this).enter(x);
392 pbes_system::make_and(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
393 static_cast<Derived&>(*this).leave(x);
394 }
395
396 template <class T>
397 void apply(T& result, const pbes_system::or_& x)
398 {
399 static_cast<Derived&>(*this).enter(x);
400 pbes_system::make_or(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
401 static_cast<Derived&>(*this).leave(x);
402 }
403
404 template <class T>
405 void apply(T& result, const pbes_system::imp& x)
406 {
407 static_cast<Derived&>(*this).enter(x);
408 pbes_system::make_imp(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
409 static_cast<Derived&>(*this).leave(x);
410 }
411
412 template <class T>
413 void apply(T& result, const pbes_system::forall& x)
414 {
415 static_cast<Derived&>(*this).enter(x);
416 pbes_system::make_forall(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
417 static_cast<Derived&>(*this).leave(x);
418 }
419
420 template <class T>
421 void apply(T& result, const pbes_system::exists& x)
422 {
423 static_cast<Derived&>(*this).enter(x);
424 pbes_system::make_exists(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
425 static_cast<Derived&>(*this).leave(x);
426 }
427
428 template <class T>
429 void apply(T& result, const pbes_system::pbes_expression& x)
430 {
431 static_cast<Derived&>(*this).enter(x);
433 {
434 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
435 }
437 {
438 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
439 }
441 {
442 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::propositional_variable_instantiation>(x));
443 }
444 else if (pbes_system::is_not(x))
445 {
446 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::not_>(x));
447 }
448 else if (pbes_system::is_and(x))
449 {
450 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::and_>(x));
451 }
452 else if (pbes_system::is_or(x))
453 {
454 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::or_>(x));
455 }
456 else if (pbes_system::is_imp(x))
457 {
458 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::imp>(x));
459 }
460 else if (pbes_system::is_forall(x))
461 {
462 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::forall>(x));
463 }
464 else if (pbes_system::is_exists(x))
465 {
466 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::exists>(x));
467 }
468 static_cast<Derived&>(*this).leave(x);
469 }
470
471};
472
473/// \\brief Builder class
474template <typename Derived>
476{
477};
478//--- end generated add_variables code ---//
479
480// Adds pbes expression traversal to a builder
481//--- start generated add_pbes_expressions code ---//
482template <template <class> class Builder, class Derived>
483struct add_pbes_expressions: public Builder<Derived>
484{
485 using super = Builder<Derived>;
486 using super::enter;
487 using super::leave;
488 using super::update;
489 using super::apply;
490
492 {
493 static_cast<Derived&>(*this).enter(x);
494 pbes_expression result_formula;
495 static_cast<Derived&>(*this).apply(result_formula, x.formula());
496 x.formula() = result_formula;
497 static_cast<Derived&>(*this).leave(x);
498 }
499
501 {
502 static_cast<Derived&>(*this).enter(x);
503 static_cast<Derived&>(*this).update(x.equations());
504 static_cast<Derived&>(*this).leave(x);
505 }
506
507 template <class T>
509 {
510 static_cast<Derived&>(*this).enter(x);
511 // skip
512 static_cast<Derived&>(*this).leave(x);
513 result = atermpp::down_cast<T>(x);
514 }
515
516 template <class T>
517 void apply(T& result, const pbes_system::not_& x)
518 {
519 static_cast<Derived&>(*this).enter(x);
520 pbes_system::make_not(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
521 static_cast<Derived&>(*this).leave(x);
522 }
523
524 template <class T>
525 void apply(T& result, const pbes_system::and_& x)
526 {
527 static_cast<Derived&>(*this).enter(x);
528 pbes_system::make_and(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
529 static_cast<Derived&>(*this).leave(x);
530 }
531
532 template <class T>
533 void apply(T& result, const pbes_system::or_& x)
534 {
535 static_cast<Derived&>(*this).enter(x);
536 pbes_system::make_or(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
537 static_cast<Derived&>(*this).leave(x);
538 }
539
540 template <class T>
541 void apply(T& result, const pbes_system::imp& x)
542 {
543 static_cast<Derived&>(*this).enter(x);
544 pbes_system::make_imp(result, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
545 static_cast<Derived&>(*this).leave(x);
546 }
547
548 template <class T>
549 void apply(T& result, const pbes_system::forall& x)
550 {
551 static_cast<Derived&>(*this).enter(x);
552 pbes_system::make_forall(result, x.variables(), [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
553 static_cast<Derived&>(*this).leave(x);
554 }
555
556 template <class T>
557 void apply(T& result, const pbes_system::exists& x)
558 {
559 static_cast<Derived&>(*this).enter(x);
560 pbes_system::make_exists(result, x.variables(), [&](pbes_expression& result){ static_cast<Derived&>(*this).apply(result, x.body()); });
561 static_cast<Derived&>(*this).leave(x);
562 }
563
564 template <class T>
565 void apply(T& result, const pbes_system::pbes_expression& x)
566 {
567 static_cast<Derived&>(*this).enter(x);
569 {
570 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::data_expression>(x));
571 }
573 {
574 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
575 }
577 {
578 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::propositional_variable_instantiation>(x));
579 }
580 else if (pbes_system::is_not(x))
581 {
582 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::not_>(x));
583 }
584 else if (pbes_system::is_and(x))
585 {
586 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::and_>(x));
587 }
588 else if (pbes_system::is_or(x))
589 {
590 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::or_>(x));
591 }
592 else if (pbes_system::is_imp(x))
593 {
594 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::imp>(x));
595 }
596 else if (pbes_system::is_forall(x))
597 {
598 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::forall>(x));
599 }
600 else if (pbes_system::is_exists(x))
601 {
602 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<pbes_system::exists>(x));
603 }
604 static_cast<Derived&>(*this).leave(x);
605 }
606
607};
608
609/// \\brief Builder class
610template <typename Derived>
612{
613};
614//--- end generated add_pbes_expressions code ---//
615
616} // namespace mcrl2::pbes_system
617
618#endif // MCRL2_PBES_BUILDER_H
Term containing a string.
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
A list of aterm objects.
Definition aterm_list.h:26
A unordered_map class in which aterms can be stored.
An abstraction expression.
Definition abstraction.h:23
abstraction(const atermpp::aterm &term)
Constructor.
Definition abstraction.h:32
bool is_well_typed() const
Returns true if.
Components for generating an arbitrary element of a sort.
representative_generator(const data_specification &specification)
Constructor with data specification as context.
Identifier generator that stores the identifiers of the context in a set. Using the operator()() and ...
\brief A data variable
Definition variable.h:25
\brief The and operator for pbes expressions
and_(const pbes_expression &left, const pbes_expression &right)
\brief Constructor Z14.
and_(const and_ &) noexcept=default
Move semantics.
and_(and_ &&) noexcept=default
and_ & operator=(and_ &&) noexcept=default
and_(const atermpp::aterm &term)
and_ & operator=(const and_ &) noexcept=default
const pbes_expression & left() const
const pbes_expression & right() const
and_()
\brief Default constructor X3.
\brief The existential quantification operator for pbes expressions
exists(const atermpp::aterm &term)
exists & operator=(exists &&) noexcept=default
exists(exists &&) noexcept=default
exists(const data::variable_list &variables, const pbes_expression &body)
\brief Constructor Z14.
const data::variable_list & variables() const
exists()
\brief Default constructor X3.
exists(const exists &) noexcept=default
Move semantics.
const pbes_expression & body() const
exists & operator=(const exists &) noexcept=default
static fixpoint_symbol nu()
Returns the nu symbol.
fixpoint_symbol()
\brief Default constructor X3.
fixpoint_symbol & operator=(fixpoint_symbol &&) noexcept=default
fixpoint_symbol(const fixpoint_symbol &) noexcept=default
Move semantics.
bool is_nu() const
Returns true if the symbol is nu.
bool is_mu() const
Returns true if the symbol is mu.
fixpoint_symbol(fixpoint_symbol &&) noexcept=default
static fixpoint_symbol mu()
Returns the mu symbol.
fixpoint_symbol & operator=(const fixpoint_symbol &) noexcept=default
fixpoint_symbol(const atermpp::aterm &term)
\brief The universal quantification operator for pbes expressions
forall()
\brief Default constructor X3.
const pbes_expression & body() const
forall(const data::variable_list &variables, const pbes_expression &body)
\brief Constructor Z14.
forall(const atermpp::aterm &term)
const data::variable_list & variables() const
forall & operator=(const forall &) noexcept=default
forall & operator=(forall &&) noexcept=default
forall(const forall &) noexcept=default
Move semantics.
forall(forall &&) noexcept=default
\brief The implication operator for pbes expressions
imp & operator=(imp &&) noexcept=default
imp(const imp &) noexcept=default
Move semantics.
const pbes_expression & left() const
imp(imp &&) noexcept=default
imp(const atermpp::aterm &term)
imp()
\brief Default constructor X3.
imp(const pbes_expression &left, const pbes_expression &right)
\brief Constructor Z14.
const pbes_expression & right() const
imp & operator=(const imp &) noexcept=default
\brief The not operator for pbes expressions
not_()
\brief Default constructor X3.
not_(const pbes_expression &operand)
\brief Constructor Z14.
not_(const not_ &) noexcept=default
Move semantics.
const pbes_expression & operand() const
not_ & operator=(const not_ &) noexcept=default
not_(not_ &&) noexcept=default
not_(const atermpp::aterm &term)
not_ & operator=(not_ &&) noexcept=default
\brief The or operator for pbes expressions
const pbes_expression & left() const
or_(const or_ &) noexcept=default
Move semantics.
or_(const pbes_expression &left, const pbes_expression &right)
\brief Constructor Z14.
const pbes_expression & right() const
or_(or_ &&) noexcept=default
or_ & operator=(or_ &&) noexcept=default
or_ & operator=(const or_ &) noexcept=default
or_(const atermpp::aterm &term)
or_()
\brief Default constructor X3.
const pbes_expression & formula() const
Returns the predicate formula on the right hand side of the equation.
fixpoint_symbol & symbol()
Returns the fixpoint symbol of the equation.
pbes_equation(const fixpoint_symbol &symbol, const propositional_variable &variable, const pbes_expression &expr)
Constructor.
bool is_solved() const
Returns true if the predicate formula on the right hand side contains no predicate variables.
Definition pbes.cpp:102
fixpoint_symbol m_symbol
The fixpoint symbol of the equation.
propositional_variable m_variable
The variable on the left hand side of the equation.
const fixpoint_symbol & symbol() const
Returns the fixpoint symbol of the equation.
bool operator<(const pbes_equation &other) const
A comparison operator on pbes equations.
propositional_variable & variable()
Returns the pbes variable of the equation.
pbes_expression m_formula
The expression on the right hand side of the equation.
void swap(pbes_equation &other) noexcept
Swaps the contents.
pbes_equation()=default
Constructor.
pbes_expression & formula()
Returns the predicate formula on the right hand side of the equation.
const propositional_variable & variable() const
Returns the pbes variable of the equation.
pbes_expression & operator=(pbes_expression &&) noexcept=default
pbes_expression & operator=(const pbes_expression &) noexcept=default
pbes_expression(const atermpp::aterm &term)
pbes_expression(const pbes_expression &) noexcept=default
Move semantics.
pbes_expression(const data::data_expression &x)
\brief Constructor Z6.
pbes_expression(const data::untyped_data_parameter &x)
\brief Constructor Z6.
pbes_expression()
\brief Default constructor X3.
pbes_expression(pbes_expression &&) noexcept=default
parameterized boolean equation system
Definition pbes.h:54
std::set< data::variable > & global_variables()
Returns the declared free variables of the pbes.
Definition pbes.h:180
bool is_closed() const
True if the pbes is closed.
Definition pbes.h:238
data::data_specification m_data
The data specification.
Definition pbes.h:60
pbes(const data::data_specification &data, const std::vector< pbes_equation > &equations, propositional_variable_instantiation initial_state)
Constructor.
Definition pbes.h:111
std::set< data::variable > m_global_variables
The set of global variables.
Definition pbes.h:66
std::set< propositional_variable > compute_declared_variables() const
Returns the predicate variables appearing in the left hand side of an equation.
Definition pbes.h:73
pbes(const data::data_specification &data, const std::set< data::variable > &global_variables, const std::vector< pbes_equation > &equations, propositional_variable_instantiation initial_state)
Constructor.
Definition pbes.h:129
const propositional_variable_instantiation & initial_state() const
Returns the initial state.
Definition pbes.h:187
std::set< propositional_variable > binding_variables() const
Returns the set of binding variables of the pbes. This is the set variables that occur on the left ha...
Definition pbes.h:202
std::set< propositional_variable > occurring_variables() const
Returns the set of occurring propositional variable declarations of the pbes, i.e....
Definition pbes.h:220
std::set< propositional_variable_instantiation > occurring_variable_instantiations() const
Returns the set of occurring propositional variable instantiations of the pbes. This is the set of va...
Definition pbes.cpp:107
const std::set< data::variable > & global_variables() const
Returns the declared free variables of the pbes.
Definition pbes.h:173
std::vector< pbes_equation > & equations()
Returns the equations.
Definition pbes.h:166
propositional_variable_instantiation & initial_state()
Returns the initial state.
Definition pbes.h:194
propositional_variable_instantiation m_initial_state
The initial state.
Definition pbes.h:69
pbes()=default
Constructor.
std::vector< pbes_equation > m_equations
The sequence of pbes equations.
Definition pbes.h:63
bool is_declared_in(Iter first, Iter last, const propositional_variable_instantiation &v, const data::data_specification &data_spec) const
Checks if the propositional variable instantiation v appears with the right type in the sequence of p...
Definition pbes.h:91
const std::vector< pbes_equation > & equations() const
Returns the equations.
Definition pbes.h:159
bool is_well_typed() const
Checks if the PBES is well typed.
Definition pbes.h:260
\brief A propositional variable instantiation
const data::data_expression_list & parameters() const
propositional_variable_instantiation(const propositional_variable_instantiation &) noexcept=default
Move semantics.
propositional_variable_instantiation(const std::string &name)
Constructor.
propositional_variable_instantiation(propositional_variable_instantiation &&) noexcept=default
propositional_variable_instantiation(const core::identifier_string &name, const data::data_expression_list &parameters)
Constructor.
propositional_variable_instantiation & operator=(propositional_variable_instantiation &&) noexcept=default
propositional_variable_instantiation(const core::identifier_string &name)
Constructor.
propositional_variable_instantiation & operator=(const propositional_variable_instantiation &) noexcept=default
propositional_variable_instantiation(const std::string &name, const data::data_expression_list &parameters)
Constructor.
propositional_variable_instantiation(const atermpp::aterm &term)
Constructor.
\brief A propositional variable declaration
const data::variable_list & parameters() const
propositional_variable(const std::string &name, const data::variable_list &parameters)
\brief Constructor Z1.
propositional_variable(const propositional_variable &) noexcept=default
Move semantics.
const core::identifier_string & name() const
propositional_variable & operator=(propositional_variable &&) noexcept=default
propositional_variable()
\brief Default constructor X3.
propositional_variable & operator=(const propositional_variable &) noexcept=default
propositional_variable(propositional_variable &&) noexcept=default
propositional_variable(const atermpp::aterm_string &name)
propositional_variable(const core::identifier_string &name, const data::variable_list &parameters)
\brief Constructor Z12.
D_ParserTables parser_tables_mcrl2
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
Definition logger.h:435
void warn_and_or(const parse_node &)
Prints a warning for each occurrence of 'x && y || z' in the parse tree.
bool equal_sorts(const data::variable_list &v, const data::data_expression_list &w, const data::data_specification &data_spec)
Checks if the sorts of the variables/expressions in both lists are equal.
Definition equal_sorts.h:25
Namespace for system defined sort bool_.
Definition bool.h:29
bool is_false_function_symbol(const atermpp::aterm &e)
Recogniser for function false.
Definition bool.h:116
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
Definition bool.h:342
const function_symbol & false_()
Constructor for function symbol false.
Definition bool.h:106
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
Definition bool.h:278
bool is_true_function_symbol(const atermpp::aterm &e)
Recogniser for function true.
Definition bool.h:84
bool is_not_application(const atermpp::aterm &e)
Recogniser for application of !.
Definition bool.h:214
const function_symbol & true_()
Constructor for function symbol true.
Definition bool.h:74
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
bool is_untyped_data_parameter(const atermpp::aterm &x)
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
bool is_application(const atermpp::aterm &x)
Returns true if the term t is an application.
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
The namespace for accessor functions on pbes expressions.
const pbes_expression & data_arg(const pbes_expression &t)
Returns the pbes expression argument of expressions of type not, exists and forall.
const pbes_expression & arg(const pbes_expression &t)
Returns the pbes expression argument of expressions of type not, exists and forall.
const pbes_expression & data_right(const pbes_expression &x)
Returns the left hand side of an expression of type and, or or imp.
const pbes_expression & data_left(const pbes_expression &x)
Returns the left hand side of an expression of type and, or or imp.
const pbes_expression & left(const pbes_expression &t)
Returns the left hand side of an expression of type and, or or imp.
const pbes_expression & right(const pbes_expression &t)
Returns the right hand side of an expression of type and, or or imp.
const data::data_expression_list & param(const pbes_expression &t)
Returns the parameters of a propositional variable instantiation.
const core::identifier_string & name(const pbes_expression &t)
Returns the name of a propositional variable expression.
const data::variable_list & var(const pbes_expression &t)
Returns the variables of a quantification expression.
void instantiate_global_variables(pbes &p)
Attempts to eliminate the free variables of a PBES, by substituting a constant value for them....
Definition pbes.cpp:64
bool is_bes(const pbes &x)
Returns true if a PBES is in BES form.
Definition pbes.cpp:69
untyped_pbes parse_pbes_new(const std::string &text)
Definition pbes.cpp:132
void replace_global_variables(pbes &p, const data::mutable_map_substitution<> &sigma)
Applies a global variable substitution to a PBES.
void complete_pbes(pbes &x)
Definition pbes.cpp:143
data::mutable_map_substitution instantiate_global_variables(pbes &p)
Eliminates the global variables of a PBES, by substituting a constant value for them....
bool has_propositional_variables(const pbes_expression &x)
propositional_variable parse_propositional_variable(const std::string &text)
Definition pbes.cpp:150
pbes_expression parse_pbes_expression(const std::string &text)
Definition pbes.cpp:159
bool is_well_typed(const pbes_equation &eqn)
Checks if the equation is well typed.
pbes_expression parse_pbes_expression_new(const std::string &text)
Definition pbes.cpp:121
The main namespace for the PBES library.
bool is_pbes_exists(const pbes_expression &t)
Returns true if the term t is an existential quantification.
std::ostream & operator<<(std::ostream &out, const exists &x)
std::ostream & operator<<(std::ostream &out, const pbes_equation &x)
bool is_universal_or(const pbes_expression &t)
Test for a disjunction.
std::set< data::variable > find_free_variables(const pbes_system::pbes_equation &x)
Definition pbes.cpp:55
std::string pp(const pbes_system::propositional_variable_list &x, bool arg0)
Definition pbes.cpp:30
std::string pp(const pbes_system::or_ &x, bool arg0)
Definition pbes.cpp:40
void make_and(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_data(const pbes_expression &t)
Returns true if the term t is a data expression.
bool operator!=(const pbes_equation &x, const pbes_equation &y)
void swap(propositional_variable_instantiation &t1, propositional_variable_instantiation &t2) noexcept
\brief swap overload
std::set< data::variable > find_free_variables(const pbes_system::pbes &x)
Definition pbes.cpp:53
void make_optimized_and(pbes_expression &result, const pbes_expression &p, const pbes_expression &q)
Make a conjunction.
void normalize_sorts(pbes_system::pbes_equation_vector &x, const data::sort_specification &sortspec)
Definition pbes.cpp:46
std::string pp(const pbes_system::imp &x, bool arg0)
Definition pbes.cpp:38
std::string pp(const pbes_system::propositional_variable_instantiation_list &x, bool arg0)
Definition pbes.cpp:32
void make_propositional_variable(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_propositional_variable(const atermpp::aterm &x)
pbes_expression optimized_or(const pbes_expression &p, const pbes_expression &q)
Make a disjunction.
pbes_system::pbes_expression normalize_sorts(const pbes_system::pbes_expression &x, const data::sort_specification &sortspec)
Definition pbes.cpp:48
std::set< data::sort_expression > find_sort_expressions(const pbes_system::pbes &x)
Definition pbes.cpp:51
bool is_universal_and(const pbes_expression &t)
Test for a conjunction.
bool is_pbes_expression(const atermpp::aterm &x)
bool is_pbes_not(const pbes_expression &t)
Returns true if the term t is a not expression.
std::string pp(const pbes_system::pbes_equation_vector &x, bool arg0)
Definition pbes.cpp:27
const pbes_expression & true_()
bool is_pbes_forall(const pbes_expression &t)
Returns true if the term t is a universal quantification.
std::string pp(const pbes_system::pbes_expression_list &x, bool arg0)
Definition pbes.cpp:28
std::ostream & operator<<(std::ostream &out, const not_ &x)
bool is_not(const atermpp::aterm &x)
std::set< pbes_system::propositional_variable_instantiation > find_propositional_variable_instantiations(const pbes_system::pbes_expression &x)
Definition pbes.cpp:57
void make_or(atermpp::aterm &t, const ARGUMENTS &... args)
T replace_variables_capture_avoiding(const T &x, Substitution &sigma, data::set_identifier_generator &id_generator)
void replace_variables_capture_avoiding(T &x, Substitution &sigma, data::set_identifier_generator &id_generator)
bool is_exists(const atermpp::aterm &x)
data::variable_list free_variables(const pbes_expression &x)
std::ostream & operator<<(std::ostream &out, const forall &x)
std::ostream & operator<<(std::ostream &out, const fixpoint_symbol &x)
bool operator==(const pbes_equation &x, const pbes_equation &y)
bool is_constant(const pbes_expression &x)
void normalize_sorts(pbes_system::pbes &x, const data::sort_specification &)
Definition pbes.cpp:47
std::ostream & operator<<(std::ostream &out, const pbes &x)
Definition pbes.h:297
bool is_or(const atermpp::aterm &x)
void make_optimized_forall(pbes_expression &result, const data::variable_list &l, const pbes_expression &p, bool remove_variables=false)
Make a universal quantification If l is empty, p is returned.
const data::variable_list & quantifier_variables(const pbes_expression &x)
std::ostream & operator<<(std::ostream &out, const and_ &x)
pbes_expression optimized_imp(const pbes_expression &p, const pbes_expression &q)
Make a disjunction.
void make_optimized_not(pbes_expression &result, const pbes_expression &p)
Make a negation.
bool is_well_typed_pbes(const std::set< data::sort_expression > &declared_sorts, const std::set< data::variable > &declared_global_variables, const std::set< data::variable > &occurring_global_variables, const std::set< propositional_variable > &declared_variables, const std::set< propositional_variable_instantiation > &occ, const propositional_variable_instantiation &init, const data::data_specification &data_spec)
Definition pbes.cpp:90
std::set< data::function_symbol > find_function_symbols(const pbes_system::pbes &x)
Definition pbes.cpp:56
bool has_propositional_variables(const pbes_expression &x)
void make_optimized_or(pbes_expression &result, const pbes_expression &p, const pbes_expression &q)
Make a disjunction.
bool is_forall(const atermpp::aterm &x)
void typecheck_pbes(pbes &pbesspec)
Type check a parsed mCRL2 pbes specification. Throws an exception if something went wrong.
Definition typecheck.h:272
std::ostream & operator<<(std::ostream &out, const or_ &x)
void swap(not_ &t1, not_ &t2) noexcept
\brief swap overload
void make_propositional_variable_instantiation(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const pbes_system::propositional_variable &x, bool arg0)
Definition pbes.cpp:44
std::string pp(const pbes_system::exists &x, bool arg0)
Definition pbes.cpp:35
pbes_expression optimized_and(const pbes_expression &p, const pbes_expression &q)
Make a conjunction.
std::string pp(const pbes_system::pbes_expression &x, bool arg0)
Definition pbes.cpp:43
atermpp::aterm pbes_to_aterm(const pbes &p)
Conversion to atermappl.
Definition io.cpp:315
bool is_universal_not(const pbes_expression &t)
Test for a conjunction.
bool operator==(const pbes &p1, const pbes &p2)
Equality operator on PBESs.
Definition pbes.h:318
void swap(pbes_equation &t1, pbes_equation &t2) noexcept
\brief swap overload
bool is_well_typed(const pbes_equation &eqn)
Definition pbes.cpp:76
std::ostream & operator<<(std::ostream &out, const propositional_variable_instantiation &x)
T replace_sort_expressions(const T &x, const Substitution &sigma, bool innermost)
Definition replace.h:102
void swap(exists &t1, exists &t2) noexcept
\brief swap overload
std::set< data::variable > find_free_variables(const pbes_system::pbes_expression &x)
Definition pbes.cpp:54
void swap(or_ &t1, or_ &t2) noexcept
\brief swap overload
pbes_system::pbes_expression translate_user_notation(const pbes_system::pbes_expression &x)
Definition pbes.cpp:50
bool is_pbes_or(const pbes_expression &t)
Returns true if the term t is an or expression.
bool is_false(const pbes_expression &t)
Test for the value false.
bool is_pbes_imp(const pbes_expression &t)
Returns true if the term t is an imp expression.
void swap(forall &t1, forall &t2) noexcept
\brief swap overload
bool is_pbes_and(const pbes_expression &t)
Returns true if the term t is an and expression.
void swap(propositional_variable &t1, propositional_variable &t2) noexcept
\brief swap overload
atermpp::aterm pbes_equation_to_aterm(const pbes_equation &eqn)
Conversion to atermaPpl.
bool search_variable(const pbes_system::pbes_expression &x, const data::variable &v)
Definition pbes.cpp:59
void make_optimized_exists(pbes_expression &result, const data::variable_list &l, const pbes_expression &p, bool remove_variables=false)
Make an optimized existential quantification. If l is empty, p is returned.
std::set< data::variable > find_all_variables(const pbes_system::pbes &x)
Definition pbes.cpp:52
std::string pp(const pbes_system::not_ &x, bool arg0)
Definition pbes.cpp:39
void complete_data_specification(pbes &)
Adds all sorts that appear in the PBES p to the data specification of p.
Definition pbes.h:307
pbes_expression optimized_exists(const data::variable_list &l, const pbes_expression &p, bool remove_variables=false)
Make an existential quantification If l is empty, p is returned.
void swap(pbes_expression &t1, pbes_expression &t2) noexcept
\brief swap overload
pbes_expression optimized_not(const pbes_expression &p)
Make a negation.
void make_not(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const pbes_system::pbes_equation &x, bool arg0)
Definition pbes.cpp:42
void swap(imp &t1, imp &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const pbes_expression &x)
void make_exists(atermpp::aterm &t, const ARGUMENTS &... args)
std::set< core::identifier_string > find_identifiers(const pbes_system::pbes_expression &x)
Definition pbes.cpp:58
std::ostream & operator<<(std::ostream &out, const imp &x)
bool is_propositional_variable_instantiation(const atermpp::aterm &x)
bool is_well_typed_equation(const pbes_equation &eqn, const std::set< data::sort_expression > &declared_sorts, const std::set< data::variable > &declared_global_variables, const data::data_specification &data_spec)
Definition pbes.cpp:81
std::string pp(const pbes_system::propositional_variable_instantiation &x, bool arg0)
Definition pbes.cpp:45
bool is_and(const atermpp::aterm &x)
std::string pp(const pbes_equation_vector &x)
void make_optimized_imp(pbes_expression &result, const pbes_expression &p, const pbes_expression &q)
Make an implication.
void swap(and_ &t1, and_ &t2) noexcept
\brief swap overload
void translate_user_notation(pbes_system::pbes &x)
Definition pbes.cpp:49
void swap(fixpoint_symbol &t1, fixpoint_symbol &t2) noexcept
\brief swap overload
std::string pp(const pbes_system::pbes &x, bool arg0)
Definition pbes.cpp:41
bool is_imp(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const propositional_variable &x)
void make_imp(atermpp::aterm &t, const ARGUMENTS &... args)
pbes_expression optimized_forall(const data::variable_list &l, const pbes_expression &p, bool remove_variables=false)
Make a universal quantification If l is empty, p is returned.
void replace_sort_expressions(T &x, const Substitution &sigma, bool innermost)
Definition replace.h:92
bool is_true(const pbes_expression &t)
Test for the value true.
const pbes_expression & false_()
std::string pp(const pbes_system::and_ &x, bool arg0)
Definition pbes.cpp:34
std::string pp(const pbes_system::fixpoint_symbol &x, bool arg0)
Definition pbes.cpp:36
void make_forall(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const pbes_system::forall &x, bool arg0)
Definition pbes.cpp:37
expression builder that visits all sub expressions
Definition builder.h:32
static const atermpp::aterm PBESForall
static const atermpp::aterm PBExpr
static const atermpp::aterm PBESOr
static const atermpp::aterm PBESExists
static const atermpp::aterm PBESImp
static const atermpp::aterm PBESNot
static const atermpp::aterm FixPoint
static const atermpp::aterm PropVarInst
static const atermpp::aterm PropVarDecl
static const atermpp::aterm PBESAnd
expression traverser that visits all sub expressions
Definition traverser.h:29
void apply(T &result, const pbes_system::imp &x)
Definition builder.h:256
void apply(T &result, const pbes_system::forall &x)
Definition builder.h:264
void apply(T &result, const pbes_system::and_ &x)
Definition builder.h:240
void apply(T &result, const pbes_system::pbes_expression &x)
Definition builder.h:280
void apply(T &result, const pbes_system::or_ &x)
Definition builder.h:248
void update(pbes_system::pbes_equation &x)
Definition builder.h:204
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Definition builder.h:224
void update(pbes_system::pbes &x)
Definition builder.h:213
void apply(T &result, const pbes_system::exists &x)
Definition builder.h:272
void apply(T &result, const pbes_system::not_ &x)
Definition builder.h:232
void update(pbes_system::pbes &x)
Definition builder.h:500
void apply(T &result, const pbes_system::pbes_expression &x)
Definition builder.h:565
void apply(T &result, const pbes_system::forall &x)
Definition builder.h:549
void update(pbes_system::pbes_equation &x)
Definition builder.h:491
void apply(T &result, const pbes_system::not_ &x)
Definition builder.h:517
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Definition builder.h:508
void apply(T &result, const pbes_system::and_ &x)
Definition builder.h:525
void apply(T &result, const pbes_system::imp &x)
Definition builder.h:541
void apply(T &result, const pbes_system::exists &x)
Definition builder.h:557
void apply(T &result, const pbes_system::or_ &x)
Definition builder.h:533
void apply(T &result, const pbes_system::exists &x)
Definition builder.h:134
void apply(T &result, const pbes_system::and_ &x)
Definition builder.h:102
void apply(T &result, const pbes_system::or_ &x)
Definition builder.h:110
void apply(T &result, const pbes_system::forall &x)
Definition builder.h:126
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Definition builder.h:86
void apply(T &result, const pbes_system::propositional_variable &x)
Definition builder.h:55
void apply(T &result, const pbes_system::imp &x)
Definition builder.h:118
void update(pbes_system::pbes_equation &x)
Definition builder.h:62
void update(pbes_system::pbes &x)
Definition builder.h:74
void apply(T &result, const pbes_system::pbes_expression &x)
Definition builder.h:142
void apply(T &result, const pbes_system::not_ &x)
Definition builder.h:94
void apply(const pbes_system::imp &x)
Definition traverser.h:236
void apply(const pbes_system::not_ &x)
Definition traverser.h:213
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:206
void apply(const pbes_system::exists &x)
Definition traverser.h:251
void apply(const pbes_system::pbes &x)
Definition traverser.h:198
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:191
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:258
void apply(const pbes_system::or_ &x)
Definition traverser.h:228
void apply(const pbes_system::and_ &x)
Definition traverser.h:220
void apply(const pbes_system::forall &x)
Definition traverser.h:244
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:662
void apply(const pbes_system::exists &x)
Definition traverser.h:654
void apply(const pbes_system::propositional_variable &x)
Definition traverser.h:582
void apply(const pbes_system::forall &x)
Definition traverser.h:646
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:590
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:607
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:332
void apply(const pbes_system::and_ &x)
Definition traverser.h:346
void apply(const pbes_system::forall &x)
Definition traverser.h:370
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:318
void apply(const pbes_system::or_ &x)
Definition traverser.h:354
void apply(const pbes_system::imp &x)
Definition traverser.h:362
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:384
void apply(const pbes_system::exists &x)
Definition traverser.h:377
void apply(const pbes_system::not_ &x)
Definition traverser.h:339
void apply(const pbes_system::pbes &x)
Definition traverser.h:325
void apply(const pbes_system::exists &x)
Definition traverser.h:123
void apply(const pbes_system::or_ &x)
Definition traverser.h:99
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:77
void apply(const pbes_system::propositional_variable &x)
Definition traverser.h:53
void apply(const pbes_system::imp &x)
Definition traverser.h:107
void apply(const pbes_system::and_ &x)
Definition traverser.h:91
void apply(const pbes_system::pbes &x)
Definition traverser.h:68
void apply(const pbes_system::forall &x)
Definition traverser.h:115
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:60
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:131
void apply(const pbes_system::not_ &x)
Definition traverser.h:84
void apply(const pbes_system::pbes &x)
Definition traverser.h:459
void apply(const pbes_system::propositional_variable &x)
Definition traverser.h:444
void apply(const pbes_system::or_ &x)
Definition traverser.h:490
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:468
void apply(const pbes_system::not_ &x)
Definition traverser.h:475
void apply(const pbes_system::exists &x)
Definition traverser.h:514
void apply(const pbes_system::and_ &x)
Definition traverser.h:482
void apply(const pbes_system::imp &x)
Definition traverser.h:498
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:522
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:451
void apply(const pbes_system::forall &x)
Definition traverser.h:506
void apply(T &result, const pbes_system::imp &x)
Definition builder.h:405
void update(pbes_system::pbes &x)
Definition builder.h:361
void apply(T &result, const pbes_system::pbes_expression &x)
Definition builder.h:429
void apply(T &result, const pbes_system::forall &x)
Definition builder.h:413
void apply(T &result, const pbes_system::propositional_variable &x)
Definition builder.h:342
void apply(T &result, const pbes_system::not_ &x)
Definition builder.h:381
void apply(T &result, const pbes_system::and_ &x)
Definition builder.h:389
void apply(T &result, const pbes_system::or_ &x)
Definition builder.h:397
void update(pbes_system::pbes_equation &x)
Definition builder.h:349
void apply(T &result, const pbes_system::exists &x)
Definition builder.h:421
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Definition builder.h:373
add_capture_avoiding_replacement(data::detail::capture_avoiding_substitution_updater< Substitution > &sigma)
pbes_system::propositional_variable parse_PropVarDecl(const core::parse_node &node) const
Definition parse_impl.h:47
pbes_actions(const core::parser &parser_)
Definition parse_impl.h:25
untyped_pbes parse_PbesSpec(const core::parse_node &node) const
Definition parse_impl.h:84
pbes_system::pbes_expression parse_PbesExpr(const core::parse_node &node) const
Definition parse_impl.h:29
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:37
void apply(T &result, const data::data_expression &x)
Definition builder.h:32
Traversal class for pbes_expressions. Used as a base class for pbes_expression_traverser.
Definition traverser.h:23
void apply(const data::data_expression &x)
Definition traverser.h:29
void apply(const data::untyped_data_parameter &x)
Definition traverser.h:36
std::size_t operator()(const mcrl2::pbes_system::pbes_expression &x) const
std::size_t operator()(const mcrl2::pbes_system::propositional_variable_instantiation &x) const