mCRL2
Loading...
Searching...
No Matches
bag1.h
Go to the documentation of this file.
1// Author(s): Jeroen Keiren
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/data/bag.h
10/// \brief The standard sort bag.
11///
12/// This file was generated from the data sort specification
13/// mcrl2/data/build/bag.spec.
14
15#ifndef MCRL2_DATA_BAG1_H
16#define MCRL2_DATA_BAG1_H
17
18#include "functional" // std::function
19#include "mcrl2/utilities/exception.h"
20#include "mcrl2/data/basic_sort.h"
21#include "mcrl2/data/function_sort.h"
22#include "mcrl2/data/function_symbol.h"
23#include "mcrl2/data/application.h"
24#include "mcrl2/data/data_equation.h"
25#include "mcrl2/data/standard.h"
26#include "mcrl2/data/forall.h"
27#include "mcrl2/data/container_sort.h"
28#include "mcrl2/data/nat1.h"
29#include "mcrl2/data/fbag1.h"
30#include "mcrl2/data/fset1.h"
31#include "mcrl2/data/set1.h"
32
33/// \brief Namespace for system defined sort bag.
34namespace mcrl2::data::sort_bag
35{
36
37 /// \brief Constructor for sort expression Bag(S)
38 /// \param s A sort expression
39 /// \return Sort expression bag(s)
40 inline
42 {
44 return bag;
45 }
46
47 /// \brief Recogniser for sort expression Bag(s)
48 /// \param e A sort expression
49 /// \return true iff e is a container sort of which the name matches
50 /// bag
51 inline
52 bool is_bag(const sort_expression& e)
53 {
55 {
57 }
58 return false;
59 }
60
61
62 /// \brief Generate identifier \@bag.
63 /// \return Identifier \@bag.
64 inline
65 const core::identifier_string& constructor_name()
66 {
67 static core::identifier_string constructor_name = core::identifier_string("@bag");
68 return constructor_name;
69 }
70
71 /// \brief Constructor for function symbol \@bag.
72 /// \param s A sort expression.
73 /// \return Function symbol constructor.
74 inline
76 {
78 return constructor;
79 }
80
81 /// \brief Recogniser for function \@bag.
82 /// \param e A data expression.
83 /// \return true iff e is the function symbol matching \@bag.
84 inline
86 {
88 {
89 return atermpp::down_cast<function_symbol>(e).name() == constructor_name();
90 }
91 return false;
92 }
93
94 /// \brief Application of function symbol \@bag.
95 /// \param[in] s A sort expression.
96 /// \param[in] arg0 A data expression.
97 /// \param[in] arg1 A data expression.
98 /// \return Application of \@bag to a number of arguments.
99 inline
100 application constructor(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
101 {
102 return sort_bag::constructor(s)(arg0, arg1);
103 }
104
105 /// \brief Make an application of function symbol \@bag.
106 /// \param[out] result The data expression where the \@bag expression is put.
107 /// \param[in] s A sort expression.
108 /// \param[in] arg0 A data expression.
109 /// \param[in] arg1 A data expression.
110 inline
111 void make_constructor(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
112 {
113 make_application(result, sort_bag::constructor(s),arg0, arg1);
114 }
115
116 /// \brief Recogniser for application of \@bag.
117 /// \param e A data expression.
118 /// \return true iff e is an application of function symbol constructor to a
119 /// number of arguments.
120 inline
122 {
123 return is_application(e) && is_constructor_function_symbol(atermpp::down_cast<application>(e).head());
124 }
125 /// \brief Give all system defined constructors for bag.
126 /// \param s A sort expression.
127 /// \return All system defined constructors for bag.
128 inline
130 {
131 function_symbol_vector result;
132 result.push_back(sort_bag::constructor(s));
133
134 return result;
135 }
136 /// \brief Give all defined constructors which can be used in mCRL2 specs for bag.
137 /// \param s A sort expression.
138 /// \return All system defined constructors that can be used in an mCRL2 specification for bag.
139 inline
141 {
142 function_symbol_vector result;
143 result.push_back(sort_bag::constructor(s));
144
145 return result;
146 }
147 // The typedef is the sort that maps a function symbol to an function that rewrites it as well as a string of a function that can be used to implement it
149 /// \brief Give all system defined constructors which have an implementation in C++ and not in rewrite rules for bag.
150 /// \param s A sort expression.
151 /// \return All system defined constructors that are to be implemented in C++ for bag.
152 inline
154 {
155 implementation_map result;
156 return result;
157 }
158
159 /// \brief Generate identifier \@bagfbag.
160 /// \return Identifier \@bagfbag.
161 inline
162 const core::identifier_string& bag_fbag_name()
163 {
164 static core::identifier_string bag_fbag_name = core::identifier_string("@bagfbag");
165 return bag_fbag_name;
166 }
167
168 /// \brief Constructor for function symbol \@bagfbag.
169 /// \param s A sort expression.
170 /// \return Function symbol bag_fbag.
171 inline
173 {
175 return bag_fbag;
176 }
177
178 /// \brief Recogniser for function \@bagfbag.
179 /// \param e A data expression.
180 /// \return true iff e is the function symbol matching \@bagfbag.
181 inline
183 {
185 {
186 return atermpp::down_cast<function_symbol>(e).name() == bag_fbag_name();
187 }
188 return false;
189 }
190
191 /// \brief Application of function symbol \@bagfbag.
192 /// \param[in] s A sort expression.
193 /// \param[in] arg0 A data expression.
194 /// \return Application of \@bagfbag to a number of arguments.
195 inline
196 application bag_fbag(const sort_expression& s, const data_expression& arg0)
197 {
198 return sort_bag::bag_fbag(s)(arg0);
199 }
200
201 /// \brief Make an application of function symbol \@bagfbag.
202 /// \param[out] result The data expression where the \@bagfbag expression is put.
203 /// \param[in] s A sort expression.
204 /// \param[in] arg0 A data expression.
205 inline
207 {
208 make_application(result, sort_bag::bag_fbag(s),arg0);
209 }
210
211 /// \brief Recogniser for application of \@bagfbag.
212 /// \param e A data expression.
213 /// \return true iff e is an application of function symbol bag_fbag to a
214 /// number of arguments.
215 inline
217 {
218 return is_application(e) && is_bag_fbag_function_symbol(atermpp::down_cast<application>(e).head());
219 }
220
221 /// \brief Generate identifier \@bagcomp.
222 /// \return Identifier \@bagcomp.
223 inline
224 const core::identifier_string& bag_comprehension_name()
225 {
226 static core::identifier_string bag_comprehension_name = core::identifier_string("@bagcomp");
227 return bag_comprehension_name;
228 }
229
230 /// \brief Constructor for function symbol \@bagcomp.
231 /// \param s A sort expression.
232 /// \return Function symbol bag_comprehension.
233 inline
235 {
237 return bag_comprehension;
238 }
239
240 /// \brief Recogniser for function \@bagcomp.
241 /// \param e A data expression.
242 /// \return true iff e is the function symbol matching \@bagcomp.
243 inline
245 {
247 {
248 return atermpp::down_cast<function_symbol>(e).name() == bag_comprehension_name();
249 }
250 return false;
251 }
252
253 /// \brief Application of function symbol \@bagcomp.
254 /// \param[in] s A sort expression.
255 /// \param[in] arg0 A data expression.
256 /// \return Application of \@bagcomp to a number of arguments.
257 inline
258 application bag_comprehension(const sort_expression& s, const data_expression& arg0)
259 {
261 }
262
263 /// \brief Make an application of function symbol \@bagcomp.
264 /// \param[out] result The data expression where the \@bagcomp expression is put.
265 /// \param[in] s A sort expression.
266 /// \param[in] arg0 A data expression.
267 inline
269 {
270 make_application(result, sort_bag::bag_comprehension(s),arg0);
271 }
272
273 /// \brief Recogniser for application of \@bagcomp.
274 /// \param e A data expression.
275 /// \return true iff e is an application of function symbol bag_comprehension to a
276 /// number of arguments.
277 inline
279 {
280 return is_application(e) && is_bag_comprehension_function_symbol(atermpp::down_cast<application>(e).head());
281 }
282
283 /// \brief Generate identifier count.
284 /// \return Identifier count.
285 inline
286 const core::identifier_string& count_name()
287 {
288 static core::identifier_string count_name = core::identifier_string("count");
289 return count_name;
290 }
291
292 // This function is not intended for public use and therefore not documented in Doxygen.
293 inline
295 {
298 return count;
299 }
300
301 /// \brief Recogniser for function count.
302 /// \param e A data expression.
303 /// \return true iff e is the function symbol matching count.
304 inline
306 {
308 {
309 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
310 return f.name() == count_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2;
311 }
312 return false;
313 }
314
315 /// \brief Application of function symbol count.
316 /// \param[in] s A sort expression.
317 /// \param[in] arg0 A data expression.
318 /// \param[in] arg1 A data expression.
319 /// \return Application of count to a number of arguments.
320 inline
321 application count(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
322 {
323 return sort_bag::count(s, arg0.sort(), arg1.sort())(arg0, arg1);
324 }
325
326 /// \brief Make an application of function symbol count.
327 /// \param[out] result The data expression where the count expression is put.
328 /// \param[in] s A sort expression.
329 /// \param[in] arg0 A data expression.
330 /// \param[in] arg1 A data expression.
331 inline
332 void make_count(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
333 {
334 make_application(result, sort_bag::count(s, arg0.sort(), arg1.sort()),arg0, arg1);
335 }
336
337 /// \brief Recogniser for application of count.
338 /// \param e A data expression.
339 /// \return true iff e is an application of function symbol count to a
340 /// number of arguments.
341 inline
343 {
344 return is_application(e) && is_count_function_symbol(atermpp::down_cast<application>(e).head());
345 }
346
347 /// \brief Generate identifier in.
348 /// \return Identifier in.
349 inline
350 const core::identifier_string& in_name()
351 {
352 static core::identifier_string in_name = core::identifier_string("in");
353 return in_name;
354 }
355
356 // This function is not intended for public use and therefore not documented in Doxygen.
357 inline
359 {
362 return in;
363 }
364
365 /// \brief Recogniser for function in.
366 /// \param e A data expression.
367 /// \return true iff e is the function symbol matching in.
368 inline
370 {
372 {
373 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
374 return f.name() == in_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2;
375 }
376 return false;
377 }
378
379 /// \brief Application of function symbol in.
380 /// \param[in] s A sort expression.
381 /// \param[in] arg0 A data expression.
382 /// \param[in] arg1 A data expression.
383 /// \return Application of in to a number of arguments.
384 inline
385 application in(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
386 {
387 return sort_bag::in(s, arg0.sort(), arg1.sort())(arg0, arg1);
388 }
389
390 /// \brief Make an application of function symbol in.
391 /// \param[out] result The data expression where the in expression is put.
392 /// \param[in] s A sort expression.
393 /// \param[in] arg0 A data expression.
394 /// \param[in] arg1 A data expression.
395 inline
396 void make_in(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
397 {
398 make_application(result, sort_bag::in(s, arg0.sort(), arg1.sort()),arg0, arg1);
399 }
400
401 /// \brief Recogniser for application of in.
402 /// \param e A data expression.
403 /// \return true iff e is an application of function symbol in to a
404 /// number of arguments.
405 inline
407 {
408 return is_application(e) && is_in_function_symbol(atermpp::down_cast<application>(e).head());
409 }
410
411 /// \brief Generate identifier +.
412 /// \return Identifier +.
413 inline
414 const core::identifier_string& union_name()
415 {
416 static core::identifier_string union_name = core::identifier_string("+");
417 return union_name;
418 }
419
420 // This function is not intended for public use and therefore not documented in Doxygen.
421 inline
423 {
424 sort_expression target_sort;
425 if (s0 == bag(s) && s1 == bag(s))
426 {
427 target_sort = bag(s);
428 }
429 else if (s0 == sort_set::set_(s) && s1 == sort_set::set_(s))
430 {
431 target_sort = sort_set::set_(s);
432 }
433 else if (s0 == sort_fset::fset(s) && s1 == sort_fset::fset(s))
434 {
435 target_sort = sort_fset::fset(s);
436 }
437 else if (s0 == sort_fbag::fbag(s) && s1 == sort_fbag::fbag(s))
438 {
439 target_sort = sort_fbag::fbag(s);
440 }
441 else
442 {
443 throw mcrl2::runtime_error("Cannot compute target sort for union_ with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
444 }
445
447 return union_;
448 }
449
450 /// \brief Recogniser for function +.
451 /// \param e A data expression.
452 /// \return true iff e is the function symbol matching +.
453 inline
455 {
457 {
458 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
459 return f.name() == union_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2;
460 }
461 return false;
462 }
463
464 /// \brief Application of function symbol +.
465 /// \param[in] s A sort expression.
466 /// \param[in] arg0 A data expression.
467 /// \param[in] arg1 A data expression.
468 /// \return Application of + to a number of arguments.
469 inline
470 application union_(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
471 {
472 return sort_bag::union_(s, arg0.sort(), arg1.sort())(arg0, arg1);
473 }
474
475 /// \brief Make an application of function symbol +.
476 /// \param[out] result The data expression where the + expression is put.
477 /// \param[in] s A sort expression.
478 /// \param[in] arg0 A data expression.
479 /// \param[in] arg1 A data expression.
480 inline
481 void make_union(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
482 {
483 make_application(result, sort_bag::union_(s, arg0.sort(), arg1.sort()),arg0, arg1);
484 }
485
486 /// \brief Recogniser for application of +.
487 /// \param e A data expression.
488 /// \return true iff e is an application of function symbol union_ to a
489 /// number of arguments.
490 inline
492 {
493 return is_application(e) && is_union_function_symbol(atermpp::down_cast<application>(e).head());
494 }
495
496 /// \brief Generate identifier *.
497 /// \return Identifier *.
498 inline
499 const core::identifier_string& intersection_name()
500 {
501 static core::identifier_string intersection_name = core::identifier_string("*");
502 return intersection_name;
503 }
504
505 // This function is not intended for public use and therefore not documented in Doxygen.
506 inline
508 {
509 sort_expression target_sort;
510 if (s0 == bag(s) && s1 == bag(s))
511 {
512 target_sort = bag(s);
513 }
514 else if (s0 == sort_fbag::fbag(s) && s1 == bag(s))
515 {
516 target_sort = sort_fbag::fbag(s);
517 }
518 else if (s0 == bag(s) && s1 == sort_fbag::fbag(s))
519 {
520 target_sort = sort_fbag::fbag(s);
521 }
522 else if (s0 == sort_set::set_(s) && s1 == sort_set::set_(s))
523 {
524 target_sort = sort_set::set_(s);
525 }
526 else if (s0 == sort_fset::fset(s) && s1 == sort_set::set_(s))
527 {
528 target_sort = sort_fset::fset(s);
529 }
530 else if (s0 == sort_set::set_(s) && s1 == sort_fset::fset(s))
531 {
532 target_sort = sort_fset::fset(s);
533 }
534 else if (s0 == sort_fset::fset(s) && s1 == sort_fset::fset(s))
535 {
536 target_sort = sort_fset::fset(s);
537 }
538 else if (s0 == sort_fbag::fbag(s) && s1 == sort_fbag::fbag(s))
539 {
540 target_sort = sort_fbag::fbag(s);
541 }
542 else
543 {
544 throw mcrl2::runtime_error("Cannot compute target sort for intersection with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
545 }
546
548 return intersection;
549 }
550
551 /// \brief Recogniser for function *.
552 /// \param e A data expression.
553 /// \return true iff e is the function symbol matching *.
554 inline
556 {
558 {
559 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
560 return f.name() == intersection_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2;
561 }
562 return false;
563 }
564
565 /// \brief Application of function symbol *.
566 /// \param[in] s A sort expression.
567 /// \param[in] arg0 A data expression.
568 /// \param[in] arg1 A data expression.
569 /// \return Application of * to a number of arguments.
570 inline
571 application intersection(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
572 {
574 }
575
576 /// \brief Make an application of function symbol *.
577 /// \param[out] result The data expression where the * expression is put.
578 /// \param[in] s A sort expression.
579 /// \param[in] arg0 A data expression.
580 /// \param[in] arg1 A data expression.
581 inline
582 void make_intersection(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
583 {
584 make_application(result, sort_bag::intersection(s, arg0.sort(), arg1.sort()),arg0, arg1);
585 }
586
587 /// \brief Recogniser for application of *.
588 /// \param e A data expression.
589 /// \return true iff e is an application of function symbol intersection to a
590 /// number of arguments.
591 inline
593 {
594 return is_application(e) && is_intersection_function_symbol(atermpp::down_cast<application>(e).head());
595 }
596
597 /// \brief Generate identifier -.
598 /// \return Identifier -.
599 inline
600 const core::identifier_string& difference_name()
601 {
602 static core::identifier_string difference_name = core::identifier_string("-");
603 return difference_name;
604 }
605
606 // This function is not intended for public use and therefore not documented in Doxygen.
607 inline
609 {
610 sort_expression target_sort;
611 if (s0 == bag(s) && s1 == bag(s))
612 {
613 target_sort = bag(s);
614 }
615 else if (s0 == sort_fbag::fbag(s) && s1 == bag(s))
616 {
617 target_sort = sort_fbag::fbag(s);
618 }
619 else if (s0 == sort_set::set_(s) && s1 == sort_set::set_(s))
620 {
621 target_sort = sort_set::set_(s);
622 }
623 else if (s0 == sort_fset::fset(s) && s1 == sort_set::set_(s))
624 {
625 target_sort = sort_fset::fset(s);
626 }
627 else if (s0 == sort_fset::fset(s) && s1 == sort_fset::fset(s))
628 {
629 target_sort = sort_fset::fset(s);
630 }
631 else if (s0 == sort_fbag::fbag(s) && s1 == sort_fbag::fbag(s))
632 {
633 target_sort = sort_fbag::fbag(s);
634 }
635 else
636 {
637 throw mcrl2::runtime_error("Cannot compute target sort for difference with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
638 }
639
641 return difference;
642 }
643
644 /// \brief Recogniser for function -.
645 /// \param e A data expression.
646 /// \return true iff e is the function symbol matching -.
647 inline
649 {
651 {
652 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
653 return f.name() == difference_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2;
654 }
655 return false;
656 }
657
658 /// \brief Application of function symbol -.
659 /// \param[in] s A sort expression.
660 /// \param[in] arg0 A data expression.
661 /// \param[in] arg1 A data expression.
662 /// \return Application of - to a number of arguments.
663 inline
664 application difference(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
665 {
667 }
668
669 /// \brief Make an application of function symbol -.
670 /// \param[out] result The data expression where the - expression is put.
671 /// \param[in] s A sort expression.
672 /// \param[in] arg0 A data expression.
673 /// \param[in] arg1 A data expression.
674 inline
675 void make_difference(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
676 {
677 make_application(result, sort_bag::difference(s, arg0.sort(), arg1.sort()),arg0, arg1);
678 }
679
680 /// \brief Recogniser for application of -.
681 /// \param e A data expression.
682 /// \return true iff e is an application of function symbol difference to a
683 /// number of arguments.
684 inline
686 {
687 return is_application(e) && is_difference_function_symbol(atermpp::down_cast<application>(e).head());
688 }
689
690 /// \brief Generate identifier Bag2Set.
691 /// \return Identifier Bag2Set.
692 inline
693 const core::identifier_string& bag2set_name()
694 {
695 static core::identifier_string bag2set_name = core::identifier_string("Bag2Set");
696 return bag2set_name;
697 }
698
699 /// \brief Constructor for function symbol Bag2Set.
700 /// \param s A sort expression.
701 /// \return Function symbol bag2set.
702 inline
704 {
706 return bag2set;
707 }
708
709 /// \brief Recogniser for function Bag2Set.
710 /// \param e A data expression.
711 /// \return true iff e is the function symbol matching Bag2Set.
712 inline
714 {
716 {
717 return atermpp::down_cast<function_symbol>(e).name() == bag2set_name();
718 }
719 return false;
720 }
721
722 /// \brief Application of function symbol Bag2Set.
723 /// \param[in] s A sort expression.
724 /// \param[in] arg0 A data expression.
725 /// \return Application of Bag2Set to a number of arguments.
726 inline
727 application bag2set(const sort_expression& s, const data_expression& arg0)
728 {
729 return sort_bag::bag2set(s)(arg0);
730 }
731
732 /// \brief Make an application of function symbol Bag2Set.
733 /// \param[out] result The data expression where the Bag2Set expression is put.
734 /// \param[in] s A sort expression.
735 /// \param[in] arg0 A data expression.
736 inline
737 void make_bag2set(data_expression& result, const sort_expression& s, const data_expression& arg0)
738 {
739 make_application(result, sort_bag::bag2set(s),arg0);
740 }
741
742 /// \brief Recogniser for application of Bag2Set.
743 /// \param e A data expression.
744 /// \return true iff e is an application of function symbol bag2set to a
745 /// number of arguments.
746 inline
748 {
749 return is_application(e) && is_bag2set_function_symbol(atermpp::down_cast<application>(e).head());
750 }
751
752 /// \brief Generate identifier Set2Bag.
753 /// \return Identifier Set2Bag.
754 inline
755 const core::identifier_string& set2bag_name()
756 {
757 static core::identifier_string set2bag_name = core::identifier_string("Set2Bag");
758 return set2bag_name;
759 }
760
761 /// \brief Constructor for function symbol Set2Bag.
762 /// \param s A sort expression.
763 /// \return Function symbol set2bag.
764 inline
766 {
768 return set2bag;
769 }
770
771 /// \brief Recogniser for function Set2Bag.
772 /// \param e A data expression.
773 /// \return true iff e is the function symbol matching Set2Bag.
774 inline
776 {
778 {
779 return atermpp::down_cast<function_symbol>(e).name() == set2bag_name();
780 }
781 return false;
782 }
783
784 /// \brief Application of function symbol Set2Bag.
785 /// \param[in] s A sort expression.
786 /// \param[in] arg0 A data expression.
787 /// \return Application of Set2Bag to a number of arguments.
788 inline
789 application set2bag(const sort_expression& s, const data_expression& arg0)
790 {
791 return sort_bag::set2bag(s)(arg0);
792 }
793
794 /// \brief Make an application of function symbol Set2Bag.
795 /// \param[out] result The data expression where the Set2Bag expression is put.
796 /// \param[in] s A sort expression.
797 /// \param[in] arg0 A data expression.
798 inline
799 void make_set2bag(data_expression& result, const sort_expression& s, const data_expression& arg0)
800 {
801 make_application(result, sort_bag::set2bag(s),arg0);
802 }
803
804 /// \brief Recogniser for application of Set2Bag.
805 /// \param e A data expression.
806 /// \return true iff e is an application of function symbol set2bag to a
807 /// number of arguments.
808 inline
810 {
811 return is_application(e) && is_set2bag_function_symbol(atermpp::down_cast<application>(e).head());
812 }
813
814 /// \brief Generate identifier \@zero_.
815 /// \return Identifier \@zero_.
816 inline
817 const core::identifier_string& zero_function_name()
818 {
819 static core::identifier_string zero_function_name = core::identifier_string("@zero_");
820 return zero_function_name;
821 }
822
823 /// \brief Constructor for function symbol \@zero_.
824 /// \param s A sort expression.
825 /// \return Function symbol zero_function.
826 inline
828 {
830 return zero_function;
831 }
832
833 /// \brief Recogniser for function \@zero_.
834 /// \param e A data expression.
835 /// \return true iff e is the function symbol matching \@zero_.
836 inline
838 {
840 {
841 return atermpp::down_cast<function_symbol>(e).name() == zero_function_name();
842 }
843 return false;
844 }
845
846 /// \brief Application of function symbol \@zero_.
847 /// \param[in] s A sort expression.
848 /// \param[in] arg0 A data expression.
849 /// \return Application of \@zero_ to a number of arguments.
850 inline
851 application zero_function(const sort_expression& s, const data_expression& arg0)
852 {
853 return sort_bag::zero_function(s)(arg0);
854 }
855
856 /// \brief Make an application of function symbol \@zero_.
857 /// \param[out] result The data expression where the \@zero_ expression is put.
858 /// \param[in] s A sort expression.
859 /// \param[in] arg0 A data expression.
860 inline
862 {
863 make_application(result, sort_bag::zero_function(s),arg0);
864 }
865
866 /// \brief Recogniser for application of \@zero_.
867 /// \param e A data expression.
868 /// \return true iff e is an application of function symbol zero_function to a
869 /// number of arguments.
870 inline
872 {
873 return is_application(e) && is_zero_function_function_symbol(atermpp::down_cast<application>(e).head());
874 }
875
876 /// \brief Generate identifier \@one_.
877 /// \return Identifier \@one_.
878 inline
879 const core::identifier_string& one_function_name()
880 {
881 static core::identifier_string one_function_name = core::identifier_string("@one_");
882 return one_function_name;
883 }
884
885 /// \brief Constructor for function symbol \@one_.
886 /// \param s A sort expression.
887 /// \return Function symbol one_function.
888 inline
890 {
892 return one_function;
893 }
894
895 /// \brief Recogniser for function \@one_.
896 /// \param e A data expression.
897 /// \return true iff e is the function symbol matching \@one_.
898 inline
900 {
902 {
903 return atermpp::down_cast<function_symbol>(e).name() == one_function_name();
904 }
905 return false;
906 }
907
908 /// \brief Application of function symbol \@one_.
909 /// \param[in] s A sort expression.
910 /// \param[in] arg0 A data expression.
911 /// \return Application of \@one_ to a number of arguments.
912 inline
913 application one_function(const sort_expression& s, const data_expression& arg0)
914 {
915 return sort_bag::one_function(s)(arg0);
916 }
917
918 /// \brief Make an application of function symbol \@one_.
919 /// \param[out] result The data expression where the \@one_ expression is put.
920 /// \param[in] s A sort expression.
921 /// \param[in] arg0 A data expression.
922 inline
924 {
925 make_application(result, sort_bag::one_function(s),arg0);
926 }
927
928 /// \brief Recogniser for application of \@one_.
929 /// \param e A data expression.
930 /// \return true iff e is an application of function symbol one_function to a
931 /// number of arguments.
932 inline
934 {
935 return is_application(e) && is_one_function_function_symbol(atermpp::down_cast<application>(e).head());
936 }
937
938 /// \brief Generate identifier \@add_.
939 /// \return Identifier \@add_.
940 inline
941 const core::identifier_string& add_function_name()
942 {
943 static core::identifier_string add_function_name = core::identifier_string("@add_");
944 return add_function_name;
945 }
946
947 /// \brief Constructor for function symbol \@add_.
948 /// \param s A sort expression.
949 /// \return Function symbol add_function.
950 inline
952 {
954 return add_function;
955 }
956
957 /// \brief Recogniser for function \@add_.
958 /// \param e A data expression.
959 /// \return true iff e is the function symbol matching \@add_.
960 inline
962 {
964 {
965 return atermpp::down_cast<function_symbol>(e).name() == add_function_name();
966 }
967 return false;
968 }
969
970 /// \brief Application of function symbol \@add_.
971 /// \param[in] s A sort expression.
972 /// \param[in] arg0 A data expression.
973 /// \param[in] arg1 A data expression.
974 /// \return Application of \@add_ to a number of arguments.
975 inline
976 application add_function(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
977 {
978 return sort_bag::add_function(s)(arg0, arg1);
979 }
980
981 /// \brief Make an application of function symbol \@add_.
982 /// \param[out] result The data expression where the \@add_ expression is put.
983 /// \param[in] s A sort expression.
984 /// \param[in] arg0 A data expression.
985 /// \param[in] arg1 A data expression.
986 inline
987 void make_add_function(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
988 {
989 make_application(result, sort_bag::add_function(s),arg0, arg1);
990 }
991
992 /// \brief Recogniser for application of \@add_.
993 /// \param e A data expression.
994 /// \return true iff e is an application of function symbol add_function to a
995 /// number of arguments.
996 inline
998 {
999 return is_application(e) && is_add_function_function_symbol(atermpp::down_cast<application>(e).head());
1000 }
1001
1002 /// \brief Generate identifier \@min_.
1003 /// \return Identifier \@min_.
1004 inline
1005 const core::identifier_string& min_function_name()
1006 {
1007 static core::identifier_string min_function_name = core::identifier_string("@min_");
1008 return min_function_name;
1009 }
1010
1011 /// \brief Constructor for function symbol \@min_.
1012 /// \param s A sort expression.
1013 /// \return Function symbol min_function.
1014 inline
1016 {
1018 return min_function;
1019 }
1020
1021 /// \brief Recogniser for function \@min_.
1022 /// \param e A data expression.
1023 /// \return true iff e is the function symbol matching \@min_.
1024 inline
1026 {
1028 {
1029 return atermpp::down_cast<function_symbol>(e).name() == min_function_name();
1030 }
1031 return false;
1032 }
1033
1034 /// \brief Application of function symbol \@min_.
1035 /// \param[in] s A sort expression.
1036 /// \param[in] arg0 A data expression.
1037 /// \param[in] arg1 A data expression.
1038 /// \return Application of \@min_ to a number of arguments.
1039 inline
1040 application min_function(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
1041 {
1042 return sort_bag::min_function(s)(arg0, arg1);
1043 }
1044
1045 /// \brief Make an application of function symbol \@min_.
1046 /// \param[out] result The data expression where the \@min_ expression is put.
1047 /// \param[in] s A sort expression.
1048 /// \param[in] arg0 A data expression.
1049 /// \param[in] arg1 A data expression.
1050 inline
1051 void make_min_function(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
1052 {
1053 make_application(result, sort_bag::min_function(s),arg0, arg1);
1054 }
1055
1056 /// \brief Recogniser for application of \@min_.
1057 /// \param e A data expression.
1058 /// \return true iff e is an application of function symbol min_function to a
1059 /// number of arguments.
1060 inline
1062 {
1063 return is_application(e) && is_min_function_function_symbol(atermpp::down_cast<application>(e).head());
1064 }
1065
1066 /// \brief Generate identifier \@monus_.
1067 /// \return Identifier \@monus_.
1068 inline
1069 const core::identifier_string& monus_function_name()
1070 {
1071 static core::identifier_string monus_function_name = core::identifier_string("@monus_");
1072 return monus_function_name;
1073 }
1074
1075 /// \brief Constructor for function symbol \@monus_.
1076 /// \param s A sort expression.
1077 /// \return Function symbol monus_function.
1078 inline
1080 {
1082 return monus_function;
1083 }
1084
1085 /// \brief Recogniser for function \@monus_.
1086 /// \param e A data expression.
1087 /// \return true iff e is the function symbol matching \@monus_.
1088 inline
1090 {
1092 {
1093 return atermpp::down_cast<function_symbol>(e).name() == monus_function_name();
1094 }
1095 return false;
1096 }
1097
1098 /// \brief Application of function symbol \@monus_.
1099 /// \param[in] s A sort expression.
1100 /// \param[in] arg0 A data expression.
1101 /// \param[in] arg1 A data expression.
1102 /// \return Application of \@monus_ to a number of arguments.
1103 inline
1104 application monus_function(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
1105 {
1106 return sort_bag::monus_function(s)(arg0, arg1);
1107 }
1108
1109 /// \brief Make an application of function symbol \@monus_.
1110 /// \param[out] result The data expression where the \@monus_ expression is put.
1111 /// \param[in] s A sort expression.
1112 /// \param[in] arg0 A data expression.
1113 /// \param[in] arg1 A data expression.
1114 inline
1116 {
1117 make_application(result, sort_bag::monus_function(s),arg0, arg1);
1118 }
1119
1120 /// \brief Recogniser for application of \@monus_.
1121 /// \param e A data expression.
1122 /// \return true iff e is an application of function symbol monus_function to a
1123 /// number of arguments.
1124 inline
1126 {
1127 return is_application(e) && is_monus_function_function_symbol(atermpp::down_cast<application>(e).head());
1128 }
1129
1130 /// \brief Generate identifier \@Nat2Bool_.
1131 /// \return Identifier \@Nat2Bool_.
1132 inline
1133 const core::identifier_string& nat2bool_function_name()
1134 {
1135 static core::identifier_string nat2bool_function_name = core::identifier_string("@Nat2Bool_");
1136 return nat2bool_function_name;
1137 }
1138
1139 /// \brief Constructor for function symbol \@Nat2Bool_.
1140 /// \param s A sort expression.
1141 /// \return Function symbol nat2bool_function.
1142 inline
1144 {
1146 return nat2bool_function;
1147 }
1148
1149 /// \brief Recogniser for function \@Nat2Bool_.
1150 /// \param e A data expression.
1151 /// \return true iff e is the function symbol matching \@Nat2Bool_.
1152 inline
1154 {
1156 {
1157 return atermpp::down_cast<function_symbol>(e).name() == nat2bool_function_name();
1158 }
1159 return false;
1160 }
1161
1162 /// \brief Application of function symbol \@Nat2Bool_.
1163 /// \param[in] s A sort expression.
1164 /// \param[in] arg0 A data expression.
1165 /// \return Application of \@Nat2Bool_ to a number of arguments.
1166 inline
1167 application nat2bool_function(const sort_expression& s, const data_expression& arg0)
1168 {
1170 }
1171
1172 /// \brief Make an application of function symbol \@Nat2Bool_.
1173 /// \param[out] result The data expression where the \@Nat2Bool_ expression is put.
1174 /// \param[in] s A sort expression.
1175 /// \param[in] arg0 A data expression.
1176 inline
1178 {
1179 make_application(result, sort_bag::nat2bool_function(s),arg0);
1180 }
1181
1182 /// \brief Recogniser for application of \@Nat2Bool_.
1183 /// \param e A data expression.
1184 /// \return true iff e is an application of function symbol nat2bool_function to a
1185 /// number of arguments.
1186 inline
1188 {
1189 return is_application(e) && is_nat2bool_function_function_symbol(atermpp::down_cast<application>(e).head());
1190 }
1191
1192 /// \brief Generate identifier \@Bool2Nat_.
1193 /// \return Identifier \@Bool2Nat_.
1194 inline
1195 const core::identifier_string& bool2nat_function_name()
1196 {
1197 static core::identifier_string bool2nat_function_name = core::identifier_string("@Bool2Nat_");
1198 return bool2nat_function_name;
1199 }
1200
1201 /// \brief Constructor for function symbol \@Bool2Nat_.
1202 /// \param s A sort expression.
1203 /// \return Function symbol bool2nat_function.
1204 inline
1206 {
1208 return bool2nat_function;
1209 }
1210
1211 /// \brief Recogniser for function \@Bool2Nat_.
1212 /// \param e A data expression.
1213 /// \return true iff e is the function symbol matching \@Bool2Nat_.
1214 inline
1216 {
1218 {
1219 return atermpp::down_cast<function_symbol>(e).name() == bool2nat_function_name();
1220 }
1221 return false;
1222 }
1223
1224 /// \brief Application of function symbol \@Bool2Nat_.
1225 /// \param[in] s A sort expression.
1226 /// \param[in] arg0 A data expression.
1227 /// \return Application of \@Bool2Nat_ to a number of arguments.
1228 inline
1229 application bool2nat_function(const sort_expression& s, const data_expression& arg0)
1230 {
1232 }
1233
1234 /// \brief Make an application of function symbol \@Bool2Nat_.
1235 /// \param[out] result The data expression where the \@Bool2Nat_ expression is put.
1236 /// \param[in] s A sort expression.
1237 /// \param[in] arg0 A data expression.
1238 inline
1240 {
1241 make_application(result, sort_bag::bool2nat_function(s),arg0);
1242 }
1243
1244 /// \brief Recogniser for application of \@Bool2Nat_.
1245 /// \param e A data expression.
1246 /// \return true iff e is an application of function symbol bool2nat_function to a
1247 /// number of arguments.
1248 inline
1250 {
1251 return is_application(e) && is_bool2nat_function_function_symbol(atermpp::down_cast<application>(e).head());
1252 }
1253
1254 /// \brief Generate identifier \@fbag_join.
1255 /// \return Identifier \@fbag_join.
1256 inline
1257 const core::identifier_string& fbag_join_name()
1258 {
1259 static core::identifier_string fbag_join_name = core::identifier_string("@fbag_join");
1260 return fbag_join_name;
1261 }
1262
1263 /// \brief Constructor for function symbol \@fbag_join.
1264 /// \param s A sort expression.
1265 /// \return Function symbol fbag_join.
1266 inline
1268 {
1270 return fbag_join;
1271 }
1272
1273 /// \brief Recogniser for function \@fbag_join.
1274 /// \param e A data expression.
1275 /// \return true iff e is the function symbol matching \@fbag_join.
1276 inline
1278 {
1280 {
1281 return atermpp::down_cast<function_symbol>(e).name() == fbag_join_name();
1282 }
1283 return false;
1284 }
1285
1286 /// \brief Application of function symbol \@fbag_join.
1287 /// \param[in] s A sort expression.
1288 /// \param[in] arg0 A data expression.
1289 /// \param[in] arg1 A data expression.
1290 /// \param[in] arg2 A data expression.
1291 /// \param[in] arg3 A data expression.
1292 /// \return Application of \@fbag_join to a number of arguments.
1293 inline
1294 application fbag_join(const sort_expression& s, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1295 {
1296 return sort_bag::fbag_join(s)(arg0, arg1, arg2, arg3);
1297 }
1298
1299 /// \brief Make an application of function symbol \@fbag_join.
1300 /// \param[out] result The data expression where the \@fbag_join expression is put.
1301 /// \param[in] s A sort expression.
1302 /// \param[in] arg0 A data expression.
1303 /// \param[in] arg1 A data expression.
1304 /// \param[in] arg2 A data expression.
1305 /// \param[in] arg3 A data expression.
1306 inline
1307 void make_fbag_join(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1308 {
1309 make_application(result, sort_bag::fbag_join(s),arg0, arg1, arg2, arg3);
1310 }
1311
1312 /// \brief Recogniser for application of \@fbag_join.
1313 /// \param e A data expression.
1314 /// \return true iff e is an application of function symbol fbag_join to a
1315 /// number of arguments.
1316 inline
1318 {
1319 return is_application(e) && is_fbag_join_function_symbol(atermpp::down_cast<application>(e).head());
1320 }
1321
1322 /// \brief Generate identifier \@fbag_inter.
1323 /// \return Identifier \@fbag_inter.
1324 inline
1325 const core::identifier_string& fbag_intersect_name()
1326 {
1327 static core::identifier_string fbag_intersect_name = core::identifier_string("@fbag_inter");
1328 return fbag_intersect_name;
1329 }
1330
1331 /// \brief Constructor for function symbol \@fbag_inter.
1332 /// \param s A sort expression.
1333 /// \return Function symbol fbag_intersect.
1334 inline
1336 {
1338 return fbag_intersect;
1339 }
1340
1341 /// \brief Recogniser for function \@fbag_inter.
1342 /// \param e A data expression.
1343 /// \return true iff e is the function symbol matching \@fbag_inter.
1344 inline
1346 {
1348 {
1349 return atermpp::down_cast<function_symbol>(e).name() == fbag_intersect_name();
1350 }
1351 return false;
1352 }
1353
1354 /// \brief Application of function symbol \@fbag_inter.
1355 /// \param[in] s A sort expression.
1356 /// \param[in] arg0 A data expression.
1357 /// \param[in] arg1 A data expression.
1358 /// \param[in] arg2 A data expression.
1359 /// \param[in] arg3 A data expression.
1360 /// \return Application of \@fbag_inter to a number of arguments.
1361 inline
1362 application fbag_intersect(const sort_expression& s, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1363 {
1364 return sort_bag::fbag_intersect(s)(arg0, arg1, arg2, arg3);
1365 }
1366
1367 /// \brief Make an application of function symbol \@fbag_inter.
1368 /// \param[out] result The data expression where the \@fbag_inter expression is put.
1369 /// \param[in] s A sort expression.
1370 /// \param[in] arg0 A data expression.
1371 /// \param[in] arg1 A data expression.
1372 /// \param[in] arg2 A data expression.
1373 /// \param[in] arg3 A data expression.
1374 inline
1375 void make_fbag_intersect(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1376 {
1377 make_application(result, sort_bag::fbag_intersect(s),arg0, arg1, arg2, arg3);
1378 }
1379
1380 /// \brief Recogniser for application of \@fbag_inter.
1381 /// \param e A data expression.
1382 /// \return true iff e is an application of function symbol fbag_intersect to a
1383 /// number of arguments.
1384 inline
1386 {
1387 return is_application(e) && is_fbag_intersect_function_symbol(atermpp::down_cast<application>(e).head());
1388 }
1389
1390 /// \brief Generate identifier \@fbag_diff.
1391 /// \return Identifier \@fbag_diff.
1392 inline
1393 const core::identifier_string& fbag_difference_name()
1394 {
1395 static core::identifier_string fbag_difference_name = core::identifier_string("@fbag_diff");
1396 return fbag_difference_name;
1397 }
1398
1399 /// \brief Constructor for function symbol \@fbag_diff.
1400 /// \param s A sort expression.
1401 /// \return Function symbol fbag_difference.
1402 inline
1404 {
1406 return fbag_difference;
1407 }
1408
1409 /// \brief Recogniser for function \@fbag_diff.
1410 /// \param e A data expression.
1411 /// \return true iff e is the function symbol matching \@fbag_diff.
1412 inline
1414 {
1416 {
1417 return atermpp::down_cast<function_symbol>(e).name() == fbag_difference_name();
1418 }
1419 return false;
1420 }
1421
1422 /// \brief Application of function symbol \@fbag_diff.
1423 /// \param[in] s A sort expression.
1424 /// \param[in] arg0 A data expression.
1425 /// \param[in] arg1 A data expression.
1426 /// \param[in] arg2 A data expression.
1427 /// \param[in] arg3 A data expression.
1428 /// \return Application of \@fbag_diff to a number of arguments.
1429 inline
1430 application fbag_difference(const sort_expression& s, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1431 {
1432 return sort_bag::fbag_difference(s)(arg0, arg1, arg2, arg3);
1433 }
1434
1435 /// \brief Make an application of function symbol \@fbag_diff.
1436 /// \param[out] result The data expression where the \@fbag_diff expression is put.
1437 /// \param[in] s A sort expression.
1438 /// \param[in] arg0 A data expression.
1439 /// \param[in] arg1 A data expression.
1440 /// \param[in] arg2 A data expression.
1441 /// \param[in] arg3 A data expression.
1442 inline
1443 void make_fbag_difference(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1444 {
1445 make_application(result, sort_bag::fbag_difference(s),arg0, arg1, arg2, arg3);
1446 }
1447
1448 /// \brief Recogniser for application of \@fbag_diff.
1449 /// \param e A data expression.
1450 /// \return true iff e is an application of function symbol fbag_difference to a
1451 /// number of arguments.
1452 inline
1454 {
1455 return is_application(e) && is_fbag_difference_function_symbol(atermpp::down_cast<application>(e).head());
1456 }
1457
1458 /// \brief Generate identifier \@fbag2fset.
1459 /// \return Identifier \@fbag2fset.
1460 inline
1461 const core::identifier_string& fbag2fset_name()
1462 {
1463 static core::identifier_string fbag2fset_name = core::identifier_string("@fbag2fset");
1464 return fbag2fset_name;
1465 }
1466
1467 /// \brief Constructor for function symbol \@fbag2fset.
1468 /// \param s A sort expression.
1469 /// \return Function symbol fbag2fset.
1470 inline
1472 {
1474 return fbag2fset;
1475 }
1476
1477 /// \brief Recogniser for function \@fbag2fset.
1478 /// \param e A data expression.
1479 /// \return true iff e is the function symbol matching \@fbag2fset.
1480 inline
1482 {
1484 {
1485 return atermpp::down_cast<function_symbol>(e).name() == fbag2fset_name();
1486 }
1487 return false;
1488 }
1489
1490 /// \brief Application of function symbol \@fbag2fset.
1491 /// \param[in] s A sort expression.
1492 /// \param[in] arg0 A data expression.
1493 /// \param[in] arg1 A data expression.
1494 /// \return Application of \@fbag2fset to a number of arguments.
1495 inline
1496 application fbag2fset(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
1497 {
1498 return sort_bag::fbag2fset(s)(arg0, arg1);
1499 }
1500
1501 /// \brief Make an application of function symbol \@fbag2fset.
1502 /// \param[out] result The data expression where the \@fbag2fset expression is put.
1503 /// \param[in] s A sort expression.
1504 /// \param[in] arg0 A data expression.
1505 /// \param[in] arg1 A data expression.
1506 inline
1507 void make_fbag2fset(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
1508 {
1509 make_application(result, sort_bag::fbag2fset(s),arg0, arg1);
1510 }
1511
1512 /// \brief Recogniser for application of \@fbag2fset.
1513 /// \param e A data expression.
1514 /// \return true iff e is an application of function symbol fbag2fset to a
1515 /// number of arguments.
1516 inline
1518 {
1519 return is_application(e) && is_fbag2fset_function_symbol(atermpp::down_cast<application>(e).head());
1520 }
1521 /// \brief Give all system defined mappings for bag
1522 /// \param s A sort expression
1523 /// \return All system defined mappings for bag
1524 inline
1526 {
1527 function_symbol_vector result;
1528 result.push_back(sort_bag::bag_fbag(s));
1529 result.push_back(sort_bag::bag_comprehension(s));
1530 result.push_back(sort_bag::count(s, s, bag(s)));
1531 result.push_back(sort_bag::in(s, s, bag(s)));
1532 result.push_back(sort_bag::union_(s, bag(s), bag(s)));
1533 result.push_back(sort_bag::intersection(s, bag(s), bag(s)));
1534 result.push_back(sort_bag::intersection(s, sort_fbag::fbag(s), bag(s)));
1535 result.push_back(sort_bag::intersection(s, bag(s), sort_fbag::fbag(s)));
1536 result.push_back(sort_bag::difference(s, bag(s), bag(s)));
1537 result.push_back(sort_bag::difference(s, sort_fbag::fbag(s), bag(s)));
1538 result.push_back(sort_bag::bag2set(s));
1539 result.push_back(sort_bag::set2bag(s));
1540 result.push_back(sort_bag::zero_function(s));
1541 result.push_back(sort_bag::one_function(s));
1542 result.push_back(sort_bag::add_function(s));
1543 result.push_back(sort_bag::min_function(s));
1544 result.push_back(sort_bag::monus_function(s));
1545 result.push_back(sort_bag::nat2bool_function(s));
1546 result.push_back(sort_bag::bool2nat_function(s));
1547 result.push_back(sort_bag::fbag_join(s));
1548 result.push_back(sort_bag::fbag_intersect(s));
1549 result.push_back(sort_bag::fbag_difference(s));
1550 result.push_back(sort_bag::fbag2fset(s));
1551 return result;
1552 }
1553
1554 /// \brief Give all system defined mappings and constructors for bag
1555 /// \param s A sort expression
1556 /// \return All system defined mappings for bag
1557 inline
1559 {
1560 function_symbol_vector result=bag_generate_functions_code(s);
1561 for(const function_symbol& f: bag_generate_constructors_code(s))
1562 {
1563 result.push_back(f);
1564 }
1565 return result;
1566 }
1567
1568 /// \brief Give all system defined mappings that can be used in mCRL2 specs for bag
1569 /// \param s A sort expression
1570 /// \return All system defined mappings for that can be used in mCRL2 specificationis bag
1571 inline
1573 {
1574 function_symbol_vector result;
1575 result.push_back(sort_bag::bag_fbag(s));
1576 result.push_back(sort_bag::bag_comprehension(s));
1577 result.push_back(sort_bag::count(s, s, bag(s)));
1578 result.push_back(sort_bag::in(s, s, bag(s)));
1579 result.push_back(sort_bag::union_(s, bag(s), bag(s)));
1580 result.push_back(sort_bag::intersection(s, bag(s), bag(s)));
1581 result.push_back(sort_bag::intersection(s, sort_fbag::fbag(s), bag(s)));
1582 result.push_back(sort_bag::intersection(s, bag(s), sort_fbag::fbag(s)));
1583 result.push_back(sort_bag::difference(s, bag(s), bag(s)));
1584 result.push_back(sort_bag::difference(s, sort_fbag::fbag(s), bag(s)));
1585 result.push_back(sort_bag::bag2set(s));
1586 result.push_back(sort_bag::set2bag(s));
1587 result.push_back(sort_bag::zero_function(s));
1588 result.push_back(sort_bag::one_function(s));
1589 result.push_back(sort_bag::add_function(s));
1590 result.push_back(sort_bag::min_function(s));
1591 result.push_back(sort_bag::monus_function(s));
1592 result.push_back(sort_bag::nat2bool_function(s));
1593 result.push_back(sort_bag::bool2nat_function(s));
1594 result.push_back(sort_bag::fbag_join(s));
1595 result.push_back(sort_bag::fbag_intersect(s));
1596 result.push_back(sort_bag::fbag_difference(s));
1597 result.push_back(sort_bag::fbag2fset(s));
1598 return result;
1599 }
1600
1601
1602 // The typedef is the sort that maps a function symbol to an function that rewrites it as well as a string of a function that can be used to implement it
1604 /// \brief Give all system defined mappings that are to be implemented in C++ code for bag
1605 /// \param s A sort expression
1606 /// \return A mapping from C++ implementable function symbols to system defined mappings implemented in C++ code for bag
1607 inline
1609 {
1610 implementation_map result;
1611 return result;
1612 }
1613 ///\brief Function for projecting out argument.
1614 /// left from an application.
1615 /// \param e A data expression.
1616 /// \pre left is defined for e.
1617 /// \return The argument of e that corresponds to left.
1618 inline
1620 {
1622 return atermpp::down_cast<application>(e)[0];
1623 }
1624
1625 ///\brief Function for projecting out argument.
1626 /// right from an application.
1627 /// \param e A data expression.
1628 /// \pre right is defined for e.
1629 /// \return The argument of e that corresponds to right.
1630 inline
1632 {
1634 return atermpp::down_cast<application>(e)[1];
1635 }
1636
1637 ///\brief Function for projecting out argument.
1638 /// arg from an application.
1639 /// \param e A data expression.
1640 /// \pre arg is defined for e.
1641 /// \return The argument of e that corresponds to arg.
1642 inline
1644 {
1646 return atermpp::down_cast<application>(e)[0];
1647 }
1648
1649 ///\brief Function for projecting out argument.
1650 /// arg1 from an application.
1651 /// \param e A data expression.
1652 /// \pre arg1 is defined for e.
1653 /// \return The argument of e that corresponds to arg1.
1654 inline
1656 {
1658 return atermpp::down_cast<application>(e)[0];
1659 }
1660
1661 ///\brief Function for projecting out argument.
1662 /// arg2 from an application.
1663 /// \param e A data expression.
1664 /// \pre arg2 is defined for e.
1665 /// \return The argument of e that corresponds to arg2.
1666 inline
1668 {
1670 return atermpp::down_cast<application>(e)[1];
1671 }
1672
1673 ///\brief Function for projecting out argument.
1674 /// arg3 from an application.
1675 /// \param e A data expression.
1676 /// \pre arg3 is defined for e.
1677 /// \return The argument of e that corresponds to arg3.
1678 inline
1680 {
1682 return atermpp::down_cast<application>(e)[2];
1683 }
1684
1685 ///\brief Function for projecting out argument.
1686 /// arg4 from an application.
1687 /// \param e A data expression.
1688 /// \pre arg4 is defined for e.
1689 /// \return The argument of e that corresponds to arg4.
1690 inline
1692 {
1694 return atermpp::down_cast<application>(e)[3];
1695 }
1696
1697 /// \brief Give all system defined equations for bag
1698 /// \param s A sort expression
1699 /// \return All system defined equations for sort bag
1700 inline
1702 {
1703 variable vb("b",sort_fbag::fbag(s));
1704 variable vc("c",sort_fbag::fbag(s));
1705 variable vd("d",s);
1706 variable ve("e",s);
1710 variable vp("p",sort_pos::pos());
1711 variable vq("q",sort_pos::pos());
1712 variable vs("s",sort_fset::fset(s));
1713 variable vx("x",bag(s));
1714 variable vy("y",bag(s));
1715 variable vw("w",sort_fbag::fbag(s));
1716 variable vz("z",sort_fbag::fbag(s));
1717
1718 data_equation_vector result;
1719 result.emplace_back(variable_list({vb}), bag_fbag(s, vb), constructor(s, zero_function(s), vb));
1720 result.emplace_back(variable_list({vf}), sort_bag::bag_comprehension(s, vf), constructor(s, vf, sort_fbag::empty(s)));
1721 result.emplace_back(variable_list({vb, ve, vf}), count(s, ve, constructor(s, vf, vb)), sort_nat::swap_zero(vf(ve), count(s, ve, vb)));
1722 result.emplace_back(variable_list({ve, vx}), in(s, ve, vx), greater(count(s, ve, vx), sort_nat::c0()));
1723 result.emplace_back(variable_list({vb, vc, vf, vg}), equal_to(constructor(s, vf, vb), constructor(s, vg, vc)), if_(equal_to(vf, vg), equal_to(vb, vc), forall(variable_list({vd}), equal_to(count(s, vd, constructor(s, vf, vb)), count(s, vd, constructor(s, vg, vc))))));
1724 result.emplace_back(variable_list({vx, vy}), less(vx, vy), sort_bool::and_(less_equal(vx, vy), not_equal_to(vx, vy)));
1725 result.emplace_back(variable_list({vx, vy}), less_equal(vx, vy), equal_to(intersection(s, vx, vy), vx));
1726 result.emplace_back(variable_list({vb, vc, vf, vg}), less_total(constructor(s, vf, vb), constructor(s, vg, vc)), sort_bool::or_(less_total(vb, vc), sort_bool::and_(equal_to(vb, vc), less_total(vf, vg))));
1727 result.emplace_back(variable_list({vb, vc, vf, vg}), union_(s, constructor(s, vf, vb), constructor(s, vg, vc)), constructor(s, add_function(s, vf, vg), fbag_join(s, vf, vg, vb, vc)));
1728 result.emplace_back(variable_list({vx}), intersection(s, vx, vx), vx);
1729 result.emplace_back(variable_list({vx, vy}), intersection(s, vx, intersection(s, vx, vy)), intersection(s, vx, vy));
1730 result.emplace_back(variable_list({vx, vy}), intersection(s, vx, intersection(s, vy, vx)), intersection(s, vy, vx));
1731 result.emplace_back(variable_list({vx, vy}), intersection(s, intersection(s, vx, vy), vx), intersection(s, vx, vy));
1732 result.emplace_back(variable_list({vx, vy}), intersection(s, intersection(s, vy, vx), vx), intersection(s, vy, vx));
1733 result.emplace_back(variable_list({vb, vc, vf, vg}), intersection(s, constructor(s, vf, vb), constructor(s, vg, vc)), constructor(s, min_function(s, vf, vg), fbag_intersect(s, vf, vg, vb, vc)));
1734 result.emplace_back(variable_list({vx}), intersection(s, sort_fbag::empty(s), vx), sort_fbag::empty(s));
1735 result.emplace_back(variable_list({vb, vd, vp, vx}), intersection(s, sort_fbag::cons_(s, vd, vp, vb), vx), if_(in(s, vd, vx), sort_fbag::cons_(s, vd, sort_nat::minimum(vp, sort_nat::nat2pos(count(s, vd, vx))), intersection(s, vb, vx)), intersection(s, vb, vx)));
1736 result.emplace_back(variable_list({vb, vx}), intersection(s, vx, vb), intersection(s, vb, vx));
1737 result.emplace_back(variable_list({vb, vc, vf, vg}), difference(s, constructor(s, vf, vb), constructor(s, vg, vc)), constructor(s, monus_function(s, vf, vg), fbag_difference(s, vf, vg, vb, vc)));
1738 result.emplace_back(variable_list({vx}), difference(s, sort_fbag::empty(s), vx), sort_fbag::empty(s));
1739 result.emplace_back(variable_list({vb, vd, vp, vx}), difference(s, sort_fbag::cons_(s, vd, vp, vb), vx), if_(greater(sort_nat::pos2nat(vp), count(s, vd, vx)), sort_fbag::cons_(s, vd, sort_nat::nat2pos(sort_nat::monus(sort_nat::pos2nat(vp), count(s, vd, vx))), difference(s, vb, vx)), difference(s, vb, vx)));
1740 result.emplace_back(variable_list({vb, vf}), bag2set(s, constructor(s, vf, vb)), sort_set::constructor(s, nat2bool_function(s, vf), fbag2fset(s, vf, vb)));
1741 result.emplace_back(variable_list({vh, vs}), set2bag(s, sort_set::constructor(s, vh, vs)), constructor(s, bool2nat_function(s, vh), sort_fbag::fset2fbag(s, vs)));
1742 result.emplace_back(variable_list({ve}), zero_function(s, ve), sort_nat::c0());
1743 result.emplace_back(variable_list({ve}), one_function(s, ve), sort_nat::cnat(sort_pos::c1()));
1744 result.emplace_back(variable_list(), equal_to(zero_function(s), one_function(s)), sort_bool::false_());
1745 result.emplace_back(variable_list(), equal_to(one_function(s), zero_function(s)), sort_bool::false_());
1746 result.emplace_back(variable_list({ve, vf, vg}), add_function(s, vf, vg)(ve), sort_nat::plus(vf(ve), vg(ve)));
1747 result.emplace_back(variable_list({vf}), add_function(s, vf, zero_function(s)), vf);
1748 result.emplace_back(variable_list({vf}), add_function(s, zero_function(s), vf), vf);
1749 result.emplace_back(variable_list({ve, vf, vg}), min_function(s, vf, vg)(ve), sort_nat::minimum(vf(ve), vg(ve)));
1750 result.emplace_back(variable_list({vf}), min_function(s, vf, vf), vf);
1751 result.emplace_back(variable_list({vf}), min_function(s, vf, zero_function(s)), zero_function(s));
1752 result.emplace_back(variable_list({vf}), min_function(s, zero_function(s), vf), zero_function(s));
1753 result.emplace_back(variable_list({ve, vf, vg}), monus_function(s, vf, vg)(ve), sort_nat::monus(vf(ve), vg(ve)));
1754 result.emplace_back(variable_list({vf}), monus_function(s, vf, vf), zero_function(s));
1755 result.emplace_back(variable_list({vf}), monus_function(s, vf, zero_function(s)), vf);
1756 result.emplace_back(variable_list({vf}), monus_function(s, zero_function(s), vf), zero_function(s));
1757 result.emplace_back(variable_list({ve, vf}), nat2bool_function(s, vf)(ve), greater(vf(ve), sort_nat::c0()));
1758 result.emplace_back(variable_list(), nat2bool_function(s, zero_function(s)), sort_set::false_function(s));
1759 result.emplace_back(variable_list(), nat2bool_function(s, one_function(s)), sort_set::true_function(s));
1760 result.emplace_back(variable_list({ve, vh}), bool2nat_function(s, vh)(ve), if_(vh(ve), sort_nat::cnat(sort_pos::c1()), sort_nat::c0()));
1761 result.emplace_back(variable_list(), bool2nat_function(s, sort_set::false_function(s)), zero_function(s));
1762 result.emplace_back(variable_list(), bool2nat_function(s, sort_set::true_function(s)), one_function(s));
1763 result.emplace_back(variable_list({vw, vz}), fbag_join(s, zero_function(s), zero_function(s), vw, vz), union_(s, vw, vz));
1764 result.emplace_back(variable_list({vf, vg}), fbag_join(s, vf, vg, sort_fbag::empty(s), sort_fbag::empty(s)), sort_fbag::empty(s));
1765 result.emplace_back(variable_list({vb, vd, vf, vg, vp}), fbag_join(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::empty(s)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_add(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::c0()), fbag_join(s, vf, vg, vb, sort_fbag::empty(s))));
1766 result.emplace_back(variable_list({vc, ve, vf, vg, vq}), fbag_join(s, vf, vg, sort_fbag::empty(s), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, ve, sort_nat::swap_zero_add(vf(ve), vg(ve), sort_nat::c0(), sort_nat::cnat(vq)), fbag_join(s, vf, vg, sort_fbag::empty(s), vc)));
1767 result.emplace_back(variable_list({vb, vc, vd, vf, vg, vp, vq}), fbag_join(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, vd, vq, vc)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_add(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::cnat(vq)), fbag_join(s, vf, vg, vb, vc)));
1768 result.emplace_back(variable_list({vb, vc, vd, ve, vf, vg, vp, vq}), less_total(vd, ve), fbag_join(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_add(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::c0()), fbag_join(s, vf, vg, vb, sort_fbag::cons_(s, ve, vq, vc))));
1769 result.emplace_back(variable_list({vb, vc, vd, ve, vf, vg, vp, vq}), less_total(ve, vd), fbag_join(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, ve, sort_nat::swap_zero_add(vf(ve), vg(ve), sort_nat::c0(), sort_nat::cnat(vq)), fbag_join(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), vc)));
1770 result.emplace_back(variable_list({vf, vg}), fbag_intersect(s, vf, vg, sort_fbag::empty(s), sort_fbag::empty(s)), sort_fbag::empty(s));
1771 result.emplace_back(variable_list({vb, vd, vf, vg, vp}), fbag_intersect(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::empty(s)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_min(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::c0()), fbag_intersect(s, vf, vg, vb, sort_fbag::empty(s))));
1772 result.emplace_back(variable_list({vc, ve, vf, vg, vq}), fbag_intersect(s, vf, vg, sort_fbag::empty(s), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, ve, sort_nat::swap_zero_min(vf(ve), vg(ve), sort_nat::c0(), sort_nat::cnat(vq)), fbag_intersect(s, vf, vg, sort_fbag::empty(s), vc)));
1773 result.emplace_back(variable_list({vb, vc, vd, vf, vg, vp, vq}), fbag_intersect(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, vd, vq, vc)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_min(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::cnat(vq)), fbag_intersect(s, vf, vg, vb, vc)));
1774 result.emplace_back(variable_list({vb, vc, vd, ve, vf, vg, vp, vq}), less_total(vd, ve), fbag_intersect(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_min(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::c0()), fbag_intersect(s, vf, vg, vb, sort_fbag::cons_(s, ve, vq, vc))));
1775 result.emplace_back(variable_list({vb, vc, vd, ve, vf, vg, vp, vq}), less_total(ve, vd), fbag_intersect(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, ve, sort_nat::swap_zero_min(vf(ve), vg(ve), sort_nat::c0(), sort_nat::cnat(vq)), fbag_intersect(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), vc)));
1776 result.emplace_back(variable_list({vf, vg}), fbag_difference(s, vf, vg, sort_fbag::empty(s), sort_fbag::empty(s)), sort_fbag::empty(s));
1777 result.emplace_back(variable_list({vb, vd, vf, vg, vp}), fbag_difference(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::empty(s)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_monus(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::c0()), fbag_difference(s, vf, vg, vb, sort_fbag::empty(s))));
1778 result.emplace_back(variable_list({vc, ve, vf, vg, vq}), fbag_difference(s, vf, vg, sort_fbag::empty(s), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, ve, sort_nat::swap_zero_monus(vf(ve), vg(ve), sort_nat::c0(), sort_nat::cnat(vq)), fbag_difference(s, vf, vg, sort_fbag::empty(s), vc)));
1779 result.emplace_back(variable_list({vb, vc, vd, vf, vg, vp, vq}), fbag_difference(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, vd, vq, vc)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_monus(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::cnat(vq)), fbag_difference(s, vf, vg, vb, vc)));
1780 result.emplace_back(variable_list({vb, vc, vd, ve, vf, vg, vp, vq}), less_total(vd, ve), fbag_difference(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, vd, sort_nat::swap_zero_monus(vf(vd), vg(vd), sort_nat::cnat(vp), sort_nat::c0()), fbag_difference(s, vf, vg, vb, sort_fbag::cons_(s, ve, vq, vc))));
1781 result.emplace_back(variable_list({vb, vc, vd, ve, vf, vg, vp, vq}), less_total(ve, vd), fbag_difference(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), sort_fbag::cons_(s, ve, vq, vc)), sort_fbag::cinsert(s, ve, sort_nat::swap_zero_monus(vf(ve), vg(ve), sort_nat::c0(), sort_nat::cnat(vq)), fbag_difference(s, vf, vg, sort_fbag::cons_(s, vd, vp, vb), vc)));
1782 result.emplace_back(variable_list({vf}), fbag2fset(s, vf, sort_fbag::empty(s)), sort_fset::empty(s));
1783 result.emplace_back(variable_list({vb, vd, vf, vp}), fbag2fset(s, vf, sort_fbag::cons_(s, vd, vp, vb)), sort_fset::cinsert(s, vd, equal_to(equal_to(vf(vd), sort_nat::cnat(vp)), greater(vf(vd), sort_nat::c0())), fbag2fset(s, vf, vb)));
1784 return result;
1785 }
1786
1787} // namespace mcrl2::data::sort_bag
1788
1789#endif // MCRL2_DATA_BAG1_H
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.
apply_builder_arg1(const Arg1 &arg1)
Definition builder.h:120
apply_builder_arg2(const Arg1 &arg1, const Arg2 &arg2)
Definition builder.h:144
update_apply_builder_arg1(const Function &f, const Arg1 &arg1)
Definition builder.h:212
void apply(T &result, const argument_type &x)
Definition builder.h:207
An abstraction expression.
Definition abstraction.h:23
const variable_list & variables() const
Definition abstraction.h:60
const data_expression & body() const
Definition abstraction.h:65
\brief A sort alias
Definition alias.h:23
alias()
\brief Default constructor X3.
Definition alias.h:26
alias(const alias &) noexcept=default
Move semantics.
alias & operator=(const alias &) noexcept=default
alias(const basic_sort &name, const sort_expression &reference)
\brief Constructor Z12.
Definition alias.h:39
alias(alias &&) noexcept=default
alias(const atermpp::aterm &term)
Definition alias.h:32
alias & operator=(alias &&) noexcept=default
const basic_sort & name() const
Definition alias.h:49
const sort_expression & reference() const
Definition alias.h:54
\brief Assignment expression
Definition assignment.h:24
\brief Assignment of a data expression to a variable
Definition assignment.h:88
const data_expression & rhs() const
Definition assignment.h:119
const variable & lhs() const
Definition assignment.h:114
universal quantification.
\brief Container type for bags
bag_container()
\brief Default constructor X3.
\brief A basic sort
Definition basic_sort.h:25
basic_sort(const basic_sort &) noexcept=default
Move semantics.
basic_sort()
\brief Default constructor X3.
Definition basic_sort.h:28
basic_sort & operator=(const basic_sort &) noexcept=default
const core::identifier_string & name() const
Definition basic_sort.h:56
basic_sort(basic_sort &&) noexcept=default
basic_sort(const core::identifier_string &name)
\brief Constructor Z14.
Definition basic_sort.h:41
basic_sort(const std::string &name)
\brief Constructor Z2.
Definition basic_sort.h:46
basic_sort & operator=(basic_sort &&) noexcept=default
basic_sort(const atermpp::aterm &term)
Definition basic_sort.h:34
\brief A container sort
container_sort(const container_type &container_name, const sort_expression &element_sort)
\brief Constructor Z14.
const container_type & container_name() const
const sort_expression & element_sort() const
container_sort(const atermpp::aterm &term)
\brief A data equation
const data_expression & lhs() const
const data_expression & condition() const
const data_expression & rhs() const
const variable_list & variables() const
application operator()(const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4) const
Apply a data expression to four data expressions.
application operator()(const data_expression &e1, const data_expression &e2) const
Apply a data expression to two data expressions.
sort_expression sort() const
Returns the sort of the data expression.
Definition data.cpp:107
application operator()(const data_expression &e) const
Apply a data expression to a data expression.
existential quantification.
Definition exists.h:23
universal quantification.
Definition forall.h:25
\brief A function sort
const sort_expression & codomain() const
const sort_expression_list & domain() const
\brief A function symbol
function_symbol(const core::identifier_string &name, const sort_expression &sort)
Constructor.
const core::identifier_string & name() const
const sort_expression & sort() const
function symbol.
Definition lambda.h:24
\brief A machine number
universal quantification.
\brief A sort expression
sort_expression & operator=(const sort_expression &) noexcept=default
sort_expression(const sort_expression &) noexcept=default
Move semantics.
sort_expression & operator=(sort_expression &&) noexcept=default
const sort_expression & target_sort() const
Returns the target sort of this expression.
sort_expression(sort_expression &&) noexcept=default
sort_expression()
\brief Default constructor X3.
sort_expression(const atermpp::aterm &term)
\brief An argument of a constructor of a structured sort
\brief A constructor for a structured sort
const core::identifier_string & name() const
const core::identifier_string & recogniser() const
const structured_sort_constructor_argument_list & arguments() const
const structured_sort_constructor_list & constructors() const
const core::identifier_string & name() const
const data_expression_list & arguments() const
\brief Assignment of a data expression to a string
Definition assignment.h:179
const core::identifier_string & lhs() const
Definition assignment.h:210
const data_expression & rhs() const
Definition assignment.h:215
\brief An untyped identifier
const sort_expression_list & sorts() const
\brief Unknown sort expression
untyped_sort()
\brief Default constructor X3.
\brief A data variable
Definition variable.h:25
const core::identifier_string & name() const
Definition variable.h:35
const sort_expression & sort() const
Definition variable.h:40
\brief A where expression
const data_expression & body() const
const assignment_expression_list & declarations() const
D_ParserTables parser_tables_mcrl2
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
Definition logger.h:435
const aterm_string & empty_string()
Returns the empty aterm_string.
bool check_term_PREqnSpec(const Term &t)
bool check_term_MapSpec(const Term &t)
bool check_term_PBESTrue(const Term &t)
bool check_term_Seq(const Term &t)
bool check_term_DataVarIdInit(const Term &t)
bool check_rule_DataVarIdInit(const Term &t)
bool check_term_Action(const Term &t)
bool check_term_PRESOr(const Term &t)
bool check_term_SortId(const Term &t)
bool check_term_Sum(const Term &t)
bool check_term_Whr(const Term &t)
bool check_term_ActAt(const Term &t)
bool check_rule_WhrDecl(const Term &t)
bool check_term_StateInfimum(const Term &t)
bool check_term_CommExpr(const Term &t)
bool check_rule_ActSpec(const Term &t)
bool check_term_UntypedSortUnknown(const Term &t)
bool check_term_ActFalse(const Term &t)
bool check_term_ActId(const Term &t)
bool check_term_RegTrans(const Term &t)
bool check_rule_Distribution(const Term &t)
bool check_term_LinearProcessSummand(const Term &t)
bool check_rule_Number(const Term &t)
bool check_term_StateFalse(const Term &t)
bool check_term_argument(const Term &t, CheckFunction f)
bool check_term_UntypedSortVariable(const Term &t)
bool check_rule_ActFrm(const Term &t)
bool check_term_MultAct(const Term &t)
bool check_term_Tau(const Term &t)
bool check_rule_ActId(const Term &t)
bool check_term_UntypedProcessAssignment(const Term &t)
bool check_term_StateDelayTimed(const Term &t)
bool check_term_Delta(const Term &t)
bool check_rule_PBEqn(const Term &t)
bool check_rule_Action(const Term &t)
bool check_term_PRESTrue(const Term &t)
bool check_rule_ActionRenameSpec(const Term &t)
bool check_rule_FixPoint(const Term &t)
bool check_list_argument(const Term &t, CheckFunction f, unsigned int minimum_size)
bool check_rule_DataEqn(const Term &t)
bool check_rule_LinProcSpec(const Term &t)
bool check_term_PRES(const Term &t)
bool check_rule_SortDecl(const Term &t)
bool check_rule_RenameExpr(const Term &t)
bool check_term_ActImp(const Term &t)
bool check_term_Allow(const Term &t)
bool check_term_Choice(const Term &t)
bool check_term_LinProcSpec(const Term &t)
bool check_rule_SortId(const Term &t)
bool check_term_PBESNot(const Term &t)
bool check_term_Sync(const Term &t)
bool check_rule_String(const Term &t)
bool check_term_ActMultAct(const Term &t)
bool check_term_PRESCondEq(const Term &t)
bool check_term_RegTransOrNil(const Term &t)
bool check_term_GlobVarSpec(const Term &t)
bool check_term_StateSupremum(const Term &t)
bool check_term_Mu(const Term &t)
bool check_rule_BindingOperator(const Term &t)
bool check_rule_CommExpr(const Term &t)
bool check_term_UntypedIdentifierAssignment(const Term &t)
bool check_term_RegNil(const Term &t)
bool check_term_DataEqn(const Term &t)
bool check_term_UntypedIdentifier(const Term &t)
bool check_term_StateMust(const Term &t)
bool check_rule_StructProj(const Term &t)
bool check_rule_ConsSpec(const Term &t)
bool check_term_ProcEqnSpec(const Term &t)
bool check_term_LMerge(const Term &t)
bool check_term_ConsSpec(const Term &t)
bool check_rule_SortConsType(const Term &t)
bool check_term_SortSet(const Term &t)
bool check_rule_SortSpec(const Term &t)
bool check_rule_PRES(const Term &t)
bool check_term_Binder(const Term &t)
bool check_term_SortArrow(const Term &t)
bool check_rule_DataExpr(const Term &t)
bool check_term_StateSum(const Term &t)
bool check_term_DataVarId(const Term &t)
bool check_term_UntypedDataParameter(const Term &t)
bool check_term_PRESConstantMultiply(const Term &t)
bool check_term_PBESForall(const Term &t)
bool check_rule_DataEqnSpec(const Term &t)
bool check_term_ActTrue(const Term &t)
bool check_rule_MultActOrDelta(const Term &t)
bool check_rule_LinearProcess(const Term &t)
bool check_term_ProcessInit(const Term &t)
bool check_term_BagComp(const Term &t)
bool check_rule_ProcVarId(const Term &t)
bool check_term_SortFBag(const Term &t)
bool check_rule_PRExpr(const Term &t)
bool check_term_StateYaled(const Term &t)
bool check_term_MultActName(const Term &t)
bool check_term_Nu(const Term &t)
bool check_term_PBESExists(const Term &t)
bool check_term_BInit(const Term &t)
bool check_term_ProcessAssignment(const Term &t)
bool check_term_Lambda(const Term &t)
bool check_term_StateMay(const Term &t)
bool check_term_PRESAnd(const Term &t)
bool check_term_StateVar(const Term &t)
bool check_term_SortRef(const Term &t)
bool check_term_PRESEqInf(const Term &t)
bool check_rule_StateFrm(const Term &t)
bool check_term_ProcSpec(const Term &t)
bool check_term_SortBag(const Term &t)
bool check_term_ProcEqn(const Term &t)
bool check_rule_MultActName(const Term &t)
bool check_term_StatePlus(const Term &t)
bool check_term_TimedMultAct(const Term &t)
bool check_term_PRESInfimum(const Term &t)
bool check_term_Rename(const Term &t)
bool check_rule_MapSpec(const Term &t)
bool check_rule_ProcEqnSpec(const Term &t)
bool check_rule_ProcEqn(const Term &t)
bool check_rule_PREqn(const Term &t)
bool check_term_StateYaledTimed(const Term &t)
bool check_term_StateImp(const Term &t)
bool check_term_StateConstantMultiply(const Term &t)
bool check_rule_DataVarId(const Term &t)
bool check_rule_UntypedIdentifierAssignment(const Term &t)
bool check_term_SortCons(const Term &t)
bool check_term_PRESSupremum(const Term &t)
bool check_term_PropVarInst(const Term &t)
bool check_term_UntypedRegFrm(const Term &t)
bool check_rule_PBES(const Term &t)
bool check_term_IfThen(const Term &t)
bool check_term_ActForall(const Term &t)
bool check_term_StateTrue(const Term &t)
bool check_term_SortSpec(const Term &t)
bool check_term_StateOr(const Term &t)
bool check_term_Forall(const Term &t)
bool check_term_UntypedSetBagComp(const Term &t)
bool check_term_LinearProcess(const Term &t)
bool check_term_PBInit(const Term &t)
bool check_rule_ProcExpr(const Term &t)
bool check_term_Comm(const Term &t)
bool check_term_StateAnd(const Term &t)
bool check_term_PBESOr(const Term &t)
bool check_term_StateMinus(const Term &t)
bool check_term_RenameExpr(const Term &t)
bool check_term_ActExists(const Term &t)
bool check_term_LinearProcessInit(const Term &t)
bool check_rule_SortExpr(const Term &t)
bool check_term_PREqn(const Term &t)
bool check_term_UntypedMultiAction(const Term &t)
bool check_term_PBES(const Term &t)
bool check_rule_GlobVarSpec(const Term &t)
bool check_rule_ActionRenameRuleRHS(const Term &t)
bool check_term_ActAnd(const Term &t)
bool check_rule_DataSpec(const Term &t)
bool check_term_AtTime(const Term &t)
bool check_term_ActSpec(const Term &t)
bool check_term_StateMu(const Term &t)
bool check_rule_LinearProcessSummand(const Term &t)
bool check_rule_StringOrEmpty(const Term &t)
bool check_term_StateNu(const Term &t)
bool check_term_PBEqn(const Term &t)
bool check_term_PRESSum(const Term &t)
bool check_term_ActionRenameSpec(const Term &t)
bool check_term_StateDelay(const Term &t)
bool check_rule_PBEqnSpec(const Term &t)
bool check_term_SortStruct(const Term &t)
bool check_rule_RegFrm(const Term &t)
bool check_rule_ActionRenameRules(const Term &t)
bool check_term_StochasticOperator(const Term &t)
bool check_rule_ProcSpec(const Term &t)
bool check_term_PBESImp(const Term &t)
bool gsIsDataAppl(const atermpp::aterm &Term)
bool check_rule_PropVarDecl(const Term &t)
bool check_term_StateForall(const Term &t)
bool check_term_PRInit(const Term &t)
bool check_term_DataEqnSpec(const Term &t)
bool check_term_StructCons(const Term &t)
bool check_rule_ParamIdOrAction(const Term &t)
bool check_term_ProcVarId(const Term &t)
bool check_term_PRESConstantMultiplyAlt(const Term &t)
bool check_term_DataSpec(const Term &t)
bool check_term_Process(const Term &t)
bool check_term_ActionRenameRule(const Term &t)
bool check_rule_ActionRenameRule(const Term &t)
bool check_rule_PBExpr(const Term &t)
bool check_term_StateNot(const Term &t)
bool check_term_PRESFalse(const Term &t)
bool check_rule_UntypedMultiAction(const Term &t)
bool check_term_OpId(const Term &t)
bool check_term_Distribution(const Term &t)
bool check_term_ActNot(const Term &t)
bool check_term_PRESEqNInf(const Term &t)
bool check_term_UntypedSortsPossible(const Term &t)
bool check_rule_UntypedDataParameter(const Term &t)
bool check_term_Hide(const Term &t)
bool check_rule_PREqnSpec(const Term &t)
bool check_rule_TimedMultAct(const Term &t)
bool check_term_Merge(const Term &t)
bool check_rule_PropVarInst(const Term &t)
bool check_term_Exists(const Term &t)
bool check_term_SetComp(const Term &t)
bool check_term_ActOr(const Term &t)
bool check_term_StructProj(const Term &t)
bool check_term_PRESMinus(const Term &t)
bool check_rule_MultAct(const Term &t)
bool check_term_SortList(const Term &t)
bool check_term_PBEqnSpec(const Term &t)
bool check_rule_LinearProcessInit(const Term &t)
bool check_rule_PBInit(const Term &t)
bool check_term_IfThenElse(const Term &t)
bool check_term_PBESAnd(const Term &t)
bool check_rule_ProcInit(const Term &t)
bool check_term_PBESFalse(const Term &t)
bool check_rule_StructCons(const Term &t)
bool check_term_PRESPlus(const Term &t)
bool check_rule_OpId(const Term &t)
bool check_term_PropVarDecl(const Term &t)
bool check_term_SortFSet(const Term &t)
bool check_term_PRESCondSm(const Term &t)
bool check_term_Block(const Term &t)
bool check_term_StateExists(const Term &t)
bool check_term_ActionRenameRules(const Term &t)
bool check_term_StateConstantMultiplyAlt(const Term &t)
bool check_term_DataAppl(const Term &t)
bool check_term_RegSeq(const Term &t)
bool check_term_PRESImp(const Term &t)
bool check_term_RegAlt(const Term &t)
bool check_rule_PRInit(const Term &t)
apply_builder< Builder > make_apply_builder()
Definition builder.h:103
update_apply_builder_arg1< Builder, Function, Arg1 > make_update_apply_builder_arg1(const Function &f)
Definition builder.h:220
void warn_and_or(const parse_node &)
Prints a warning for each occurrence of 'x && y || z' in the parse tree.
apply_builder_arg1< Builder, Arg1 > make_apply_builder_arg1(const Arg1 &arg1)
Definition builder.h:127
update_apply_builder< Builder, Function > make_update_apply_builder(const Function &f)
Definition builder.h:186
apply_builder_arg2< Builder, Arg1, Arg2 > make_apply_builder_arg2(const Arg1 &arg1, const Arg2 &arg2)
Definition builder.h:151
data_expression parse_data_expression(const std::string &text)
Definition data.cpp:217
data_specification parse_data_specification_new(const std::string &text)
Definition data.cpp:228
variable_list parse_variable_declaration_list(const std::string &text)
Definition data.cpp:239
variable_list parse_variables(const std::string &text)
Definition data.cpp:206
sort_expression parse_sort_expression(const std::string &text)
Definition data.cpp:196
Namespace for system defined sort bag.
Definition bag1.h:35
function_symbol fbag2fset(const sort_expression &s)
Constructor for function symbol @fbag2fset.
Definition bag1.h:1471
bool is_bag2set_application(const atermpp::aterm &e)
Recogniser for application of Bag2Set.
Definition bag1.h:747
bool is_intersection_function_symbol(const atermpp::aterm &e)
Recogniser for function *.
Definition bag1.h:555
void make_bool2nat_function(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @Bool2Nat_.
Definition bag1.h:1239
application difference(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol -.
Definition bag1.h:664
const core::identifier_string & fbag2fset_name()
Generate identifier @fbag2fset.
Definition bag1.h:1461
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
Definition bag1.h:1631
bool is_min_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @min_.
Definition bag1.h:1025
function_symbol bag_fbag(const sort_expression &s)
Constructor for function symbol @bagfbag.
Definition bag1.h:172
bool is_min_function_application(const atermpp::aterm &e)
Recogniser for application of @min_.
Definition bag1.h:1061
function_symbol monus_function(const sort_expression &s)
Constructor for function symbol @monus_.
Definition bag1.h:1079
const core::identifier_string & fbag_intersect_name()
Generate identifier @fbag_inter.
Definition bag1.h:1325
void make_bag2set(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol Bag2Set.
Definition bag1.h:737
bool is_fbag_difference_function_symbol(const atermpp::aterm &e)
Recogniser for function @fbag_diff.
Definition bag1.h:1413
bool is_fbag_join_function_symbol(const atermpp::aterm &e)
Recogniser for function @fbag_join.
Definition bag1.h:1277
void make_count(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol count.
Definition bag1.h:332
function_symbol_vector bag_generate_functions_code(const sort_expression &s)
Give all system defined mappings for bag.
Definition bag1.h:1525
application zero_function(const sort_expression &s, const data_expression &arg0)
Application of function symbol @zero_.
Definition bag1.h:851
const core::identifier_string & bool2nat_function_name()
Generate identifier @Bool2Nat_.
Definition bag1.h:1195
void make_one_function(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @one_.
Definition bag1.h:923
const data_expression & arg3(const data_expression &e)
Function for projecting out argument. arg3 from an application.
Definition bag1.h:1679
bool is_difference_application(const atermpp::aterm &e)
Recogniser for application of -.
Definition bag1.h:685
function_symbol difference(const sort_expression &s, const sort_expression &s0, const sort_expression &s1)
Definition bag1.h:608
const core::identifier_string & set2bag_name()
Generate identifier Set2Bag.
Definition bag1.h:755
bool is_bag_fbag_application(const atermpp::aterm &e)
Recogniser for application of @bagfbag.
Definition bag1.h:216
application fbag2fset(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @fbag2fset.
Definition bag1.h:1496
function_symbol_vector bag_generate_constructors_and_functions_code(const sort_expression &s)
Give all system defined mappings and constructors for bag.
Definition bag1.h:1558
void make_add_function(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @add_.
Definition bag1.h:987
data_equation_vector bag_generate_equations_code(const sort_expression &s)
Give all system defined equations for bag.
Definition bag1.h:1701
bool is_fbag_difference_application(const atermpp::aterm &e)
Recogniser for application of @fbag_diff.
Definition bag1.h:1453
bool is_bag_fbag_function_symbol(const atermpp::aterm &e)
Recogniser for function @bagfbag.
Definition bag1.h:182
const core::identifier_string & zero_function_name()
Generate identifier @zero_.
Definition bag1.h:817
const core::identifier_string & add_function_name()
Generate identifier @add_.
Definition bag1.h:941
application bag2set(const sort_expression &s, const data_expression &arg0)
Application of function symbol Bag2Set.
Definition bag1.h:727
application in(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol in.
Definition bag1.h:385
function_symbol_vector bag_mCRL2_usable_constructors(const sort_expression &s)
Give all defined constructors which can be used in mCRL2 specs for bag.
Definition bag1.h:140
bool is_fbag2fset_function_symbol(const atermpp::aterm &e)
Recogniser for function @fbag2fset.
Definition bag1.h:1481
bool is_union_application(const atermpp::aterm &e)
Recogniser for application of +.
Definition bag1.h:491
function_symbol bag2set(const sort_expression &s)
Constructor for function symbol Bag2Set.
Definition bag1.h:703
bool is_monus_function_application(const atermpp::aterm &e)
Recogniser for application of @monus_.
Definition bag1.h:1125
const core::identifier_string & nat2bool_function_name()
Generate identifier @Nat2Bool_.
Definition bag1.h:1133
function_symbol intersection(const sort_expression &s, const sort_expression &s0, const sort_expression &s1)
Definition bag1.h:507
bool is_zero_function_application(const atermpp::aterm &e)
Recogniser for application of @zero_.
Definition bag1.h:871
const core::identifier_string & fbag_difference_name()
Generate identifier @fbag_diff.
Definition bag1.h:1393
void make_monus_function(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @monus_.
Definition bag1.h:1115
bool is_count_function_symbol(const atermpp::aterm &e)
Recogniser for function count.
Definition bag1.h:305
function_symbol count(const sort_expression &, const sort_expression &s0, const sort_expression &s1)
Definition bag1.h:294
function_symbol add_function(const sort_expression &s)
Constructor for function symbol @add_.
Definition bag1.h:951
bool is_nat2bool_function_application(const atermpp::aterm &e)
Recogniser for application of @Nat2Bool_.
Definition bag1.h:1187
function_symbol fbag_intersect(const sort_expression &s)
Constructor for function symbol @fbag_inter.
Definition bag1.h:1335
void make_fbag_intersect(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @fbag_inter.
Definition bag1.h:1375
bool is_union_function_symbol(const atermpp::aterm &e)
Recogniser for function +.
Definition bag1.h:454
void make_nat2bool_function(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @Nat2Bool_.
Definition bag1.h:1177
application bag_fbag(const sort_expression &s, const data_expression &arg0)
Application of function symbol @bagfbag.
Definition bag1.h:196
bool is_fbag_intersect_application(const atermpp::aterm &e)
Recogniser for application of @fbag_inter.
Definition bag1.h:1385
bool is_in_application(const atermpp::aterm &e)
Recogniser for application of in.
Definition bag1.h:406
function_symbol fbag_difference(const sort_expression &s)
Constructor for function symbol @fbag_diff.
Definition bag1.h:1403
bool is_in_function_symbol(const atermpp::aterm &e)
Recogniser for function in.
Definition bag1.h:369
application bool2nat_function(const sort_expression &s, const data_expression &arg0)
Application of function symbol @Bool2Nat_.
Definition bag1.h:1229
bool is_bag_comprehension_function_symbol(const atermpp::aterm &e)
Recogniser for function @bagcomp.
Definition bag1.h:244
void make_min_function(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @min_.
Definition bag1.h:1051
const core::identifier_string & min_function_name()
Generate identifier @min_.
Definition bag1.h:1005
bool is_set2bag_function_symbol(const atermpp::aterm &e)
Recogniser for function Set2Bag.
Definition bag1.h:775
application union_(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
Definition bag1.h:470
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
Definition bag1.h:1619
function_symbol_vector bag_mCRL2_usable_mappings(const sort_expression &s)
Give all system defined mappings that can be used in mCRL2 specs for bag.
Definition bag1.h:1572
bool is_nat2bool_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @Nat2Bool_.
Definition bag1.h:1153
application one_function(const sort_expression &s, const data_expression &arg0)
Application of function symbol @one_.
Definition bag1.h:913
const core::identifier_string & monus_function_name()
Generate identifier @monus_.
Definition bag1.h:1069
const data_expression & arg4(const data_expression &e)
Function for projecting out argument. arg4 from an application.
Definition bag1.h:1691
bool is_add_function_application(const atermpp::aterm &e)
Recogniser for application of @add_.
Definition bag1.h:997
void make_fbag2fset(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @fbag2fset.
Definition bag1.h:1507
void make_fbag_join(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @fbag_join.
Definition bag1.h:1307
function_symbol min_function(const sort_expression &s)
Constructor for function symbol @min_.
Definition bag1.h:1015
function_symbol set2bag(const sort_expression &s)
Constructor for function symbol Set2Bag.
Definition bag1.h:765
const core::identifier_string & bag_fbag_name()
Generate identifier @bagfbag.
Definition bag1.h:162
const core::identifier_string & bag2set_name()
Generate identifier Bag2Set.
Definition bag1.h:693
const core::identifier_string & intersection_name()
Generate identifier *.
Definition bag1.h:499
application nat2bool_function(const sort_expression &s, const data_expression &arg0)
Application of function symbol @Nat2Bool_.
Definition bag1.h:1167
void make_in(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol in.
Definition bag1.h:396
application constructor(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @bag.
Definition bag1.h:100
application fbag_intersect(const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @fbag_inter.
Definition bag1.h:1362
function_symbol bag_comprehension(const sort_expression &s)
Constructor for function symbol @bagcomp.
Definition bag1.h:234
bool is_bag2set_function_symbol(const atermpp::aterm &e)
Recogniser for function Bag2Set.
Definition bag1.h:713
implementation_map bag_cpp_implementable_constructors(const sort_expression &)
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
Definition bag1.h:153
bool is_bool2nat_function_application(const atermpp::aterm &e)
Recogniser for application of @Bool2Nat_.
Definition bag1.h:1249
const core::identifier_string & fbag_join_name()
Generate identifier @fbag_join.
Definition bag1.h:1257
void make_intersection(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol *.
Definition bag1.h:582
function_symbol fbag_join(const sort_expression &s)
Constructor for function symbol @fbag_join.
Definition bag1.h:1267
bool is_constructor_application(const atermpp::aterm &e)
Recogniser for application of @bag.
Definition bag1.h:121
bool is_zero_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @zero_.
Definition bag1.h:837
function_symbol constructor(const sort_expression &s)
Constructor for function symbol @bag.
Definition bag1.h:75
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
Definition bag1.h:1667
const core::identifier_string & constructor_name()
Generate identifier @bag.
Definition bag1.h:65
bool is_bag_comprehension_application(const atermpp::aterm &e)
Recogniser for application of @bagcomp.
Definition bag1.h:278
bool is_set2bag_application(const atermpp::aterm &e)
Recogniser for application of Set2Bag.
Definition bag1.h:809
function_symbol in(const sort_expression &, const sort_expression &s0, const sort_expression &s1)
Definition bag1.h:358
void make_zero_function(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @zero_.
Definition bag1.h:861
const data_expression & arg1(const data_expression &e)
Function for projecting out argument. arg1 from an application.
Definition bag1.h:1655
void make_bag_fbag(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @bagfbag.
Definition bag1.h:206
function_symbol bool2nat_function(const sort_expression &s)
Constructor for function symbol @Bool2Nat_.
Definition bag1.h:1205
void make_set2bag(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol Set2Bag.
Definition bag1.h:799
const core::identifier_string & union_name()
Generate identifier +.
Definition bag1.h:414
bool is_fbag_intersect_function_symbol(const atermpp::aterm &e)
Recogniser for function @fbag_inter.
Definition bag1.h:1345
function_symbol union_(const sort_expression &s, const sort_expression &s0, const sort_expression &s1)
Definition bag1.h:422
implementation_map bag_cpp_implementable_mappings(const sort_expression &)
Give all system defined mappings that are to be implemented in C++ code for bag.
Definition bag1.h:1608
bool is_intersection_application(const atermpp::aterm &e)
Recogniser for application of *.
Definition bag1.h:592
void make_bag_comprehension(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @bagcomp.
Definition bag1.h:268
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
Definition bag1.h:1643
void make_fbag_difference(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @fbag_diff.
Definition bag1.h:1443
const core::identifier_string & count_name()
Generate identifier count.
Definition bag1.h:286
function_symbol nat2bool_function(const sort_expression &s)
Constructor for function symbol @Nat2Bool_.
Definition bag1.h:1143
bool is_one_function_application(const atermpp::aterm &e)
Recogniser for application of @one_.
Definition bag1.h:933
application fbag_difference(const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @fbag_diff.
Definition bag1.h:1430
application add_function(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @add_.
Definition bag1.h:976
const core::identifier_string & difference_name()
Generate identifier -.
Definition bag1.h:600
application set2bag(const sort_expression &s, const data_expression &arg0)
Application of function symbol Set2Bag.
Definition bag1.h:789
bool is_bool2nat_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @Bool2Nat_.
Definition bag1.h:1215
bool is_bag(const sort_expression &e)
Recogniser for sort expression Bag(s)
Definition bag1.h:52
application monus_function(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @monus_.
Definition bag1.h:1104
container_sort bag(const sort_expression &s)
Constructor for sort expression Bag(S)
Definition bag1.h:41
bool is_difference_function_symbol(const atermpp::aterm &e)
Recogniser for function -.
Definition bag1.h:648
bool is_fbag2fset_application(const atermpp::aterm &e)
Recogniser for application of @fbag2fset.
Definition bag1.h:1517
application intersection(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol *.
Definition bag1.h:571
const core::identifier_string & in_name()
Generate identifier in.
Definition bag1.h:350
bool is_constructor_function_symbol(const atermpp::aterm &e)
Recogniser for function @bag.
Definition bag1.h:85
const core::identifier_string & bag_comprehension_name()
Generate identifier @bagcomp.
Definition bag1.h:224
bool is_count_application(const atermpp::aterm &e)
Recogniser for application of count.
Definition bag1.h:342
void make_difference(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol -.
Definition bag1.h:675
application fbag_join(const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @fbag_join.
Definition bag1.h:1294
const core::identifier_string & one_function_name()
Generate identifier @one_.
Definition bag1.h:879
bool is_add_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @add_.
Definition bag1.h:961
void make_constructor(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @bag.
Definition bag1.h:111
function_symbol zero_function(const sort_expression &s)
Constructor for function symbol @zero_.
Definition bag1.h:827
bool is_one_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @one_.
Definition bag1.h:899
application bag_comprehension(const sort_expression &s, const data_expression &arg0)
Application of function symbol @bagcomp.
Definition bag1.h:258
function_symbol one_function(const sort_expression &s)
Constructor for function symbol @one_.
Definition bag1.h:889
application count(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol count.
Definition bag1.h:321
application min_function(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @min_.
Definition bag1.h:1040
void make_union(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol +.
Definition bag1.h:481
function_symbol_vector bag_generate_constructors_code(const sort_expression &s)
Give all system defined constructors for bag.
Definition bag1.h:129
bool is_fbag_join_application(const atermpp::aterm &e)
Recogniser for application of @fbag_join.
Definition bag1.h:1317
bool is_monus_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @monus_.
Definition bag1.h:1089
Namespace for system defined sort bool_.
Definition bool.h:29
const basic_sort & bool_()
Constructor for sort expression Bool.
Definition bool.h:41
Namespace for system defined sort fbag.
Definition fbag1.h:34
container_sort fbag(const sort_expression &s)
Constructor for sort expression FBag(S)
Definition fbag1.h:40
Namespace for system defined sort fset.
Definition fset1.h:32
container_sort fset(const sort_expression &s)
Constructor for sort expression FSet(S)
Definition fset1.h:38
Namespace for system defined sort nat.
const basic_sort & nat()
Constructor for sort expression Nat.
Definition nat1.h:43
Namespace for system defined sort pos.
const basic_sort & pos()
Constructor for sort expression Pos.
Definition pos1.h:42
Namespace for system defined sort set_.
Definition set1.h:33
container_sort set_(const sort_expression &s)
Constructor for sort expression Set(S)
Definition set1.h:39
std::string pp(const data::structured_sort_constructor_argument &x, bool arg0)
Definition data.cpp:71
data::data_equation normalize_sorts(const data::data_equation &x, const data::sort_specification &sortspec)
Definition data.cpp:82
void normalize_sorts(data::data_equation_vector &x, const data::sort_specification &sortspec)
Definition data.cpp:84
bool is_structured_sort(const atermpp::aterm &x)
Returns true if the term t is a structured sort.
data::data_equation_list normalize_sorts(const data::data_equation_list &x, const data::sort_specification &sortspec)
Definition data.cpp:83
std::string pp(const data::exists &x, bool arg0)
Definition data.cpp:53
std::string pp(const data::untyped_identifier_assignment &x, bool arg0)
Definition data.cpp:74
std::ostream & operator<<(std::ostream &out, const basic_sort &x)
Definition basic_sort.h:78
std::set< data::variable > find_all_variables(const data::data_expression_list &x)
Definition data.cpp:94
std::string pp(const data::list_container &x, bool arg0)
Definition data.cpp:63
std::set< data::sort_expression > find_sort_expressions(const data::data_expression &x)
Definition data.cpp:91
data::data_equation translate_user_notation(const data::data_equation &x)
Definition data.cpp:89
bool is_application(const data_expression &t)
Returns true if the term t is an application.
void make_basic_sort(atermpp::aterm &t, const ARGUMENTS &... args)
Definition basic_sort.h:65
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &dom3, const sort_expression &dom4, const sort_expression &codomain)
Convenience constructor for function sort with domain size 4.
void swap(basic_sort &t1, basic_sort &t2) noexcept
\brief swap overload
Definition basic_sort.h:84
std::string pp(const data::container_type &x, bool arg0)
Definition data.cpp:49
std::set< data::variable > find_all_variables(const data::data_expression &x)
Definition data.cpp:93
bool is_where_clause(const atermpp::aterm &x)
Returns true if the term t is a where clause.
std::string pp(const data::set_container &x, bool arg0)
Definition data.cpp:67
bool is_untyped_possible_sorts(const atermpp::aterm &x)
Returns true if the term t is an expression for multiple possible sorts.
bool is_untyped_sort(const atermpp::aterm &x)
Returns true if the term t is the unknown sort.
std::string pp(const data::untyped_set_or_bag_comprehension_binder &x, bool arg0)
Definition data.cpp:77
data::data_expression translate_user_notation(const data::data_expression &x)
Definition data.cpp:88
std::string pp(const data::sort_expression_vector &x, bool arg0)
Definition data.cpp:25
std::string pp(const data::untyped_sort &x, bool arg0)
Definition data.cpp:78
std::string pp(const data::data_equation &x, bool arg0)
Definition data.cpp:50
std::string pp(const data::forall &x, bool arg0)
Definition data.cpp:56
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
std::string pp(const data::assignment_list &x, bool arg0)
Definition data.cpp:28
std::string pp(const data::untyped_identifier &x, bool arg0)
Definition data.cpp:73
std::string pp(const data::function_symbol_list &x, bool arg0)
Definition data.cpp:32
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &codomain)
Convenience constructor for function sort with domain size 1.
bool is_untyped_identifier(const atermpp::aterm &x)
Returns true if the term t is an identifier.
std::string pp(const data::lambda_binder &x, bool arg0)
Definition data.cpp:62
std::ostream & operator<<(std::ostream &out, const alias &x)
Definition alias.h:91
std::set< data::variable > find_all_variables(const data::function_symbol &x)
Definition data.cpp:95
std::string pp(const data::application &x, bool arg0)
Definition data.cpp:40
std::string pp(const data::function_sort &x, bool arg0)
Definition data.cpp:59
void make_alias(atermpp::aterm &t, const ARGUMENTS &... args)
Definition alias.h:63
std::string pp(const data::abstraction &x, bool arg0)
Definition data.cpp:38
std::string pp(const data::bag_comprehension_binder &x, bool arg0)
Definition data.cpp:44
std::string pp(const data::set_comprehension_binder &x, bool arg0)
Definition data.cpp:66
std::string pp(const data::assignment &x, bool arg0)
Definition data.cpp:41
std::string pp(const data::structured_sort &x, bool arg0)
Definition data.cpp:69
std::string pp(const data::basic_sort &x, bool arg0)
Definition data.cpp:46
std::string pp(const data::exists_binder &x, bool arg0)
Definition data.cpp:54
std::string pp(const data::bag_comprehension &x, bool arg0)
Definition data.cpp:43
bool is_container_sort(const atermpp::aterm &x)
Returns true if the term t is a container sort.
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
std::string pp(const data::variable &x, bool arg0)
Definition data.cpp:80
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
bool is_basic_sort(const atermpp::aterm &x)
Returns true if the term t is a basic sort.
bool is_untyped_sort_variable(const atermpp::aterm &x)
std::string pp(const data::where_clause &x, bool arg0)
Definition data.cpp:81
std::set< data::sort_expression > find_sort_expressions(const data::data_equation &x)
Definition data.cpp:90
std::set< data::function_symbol > find_function_symbols(const data::data_equation &x)
Definition data.cpp:100
std::string pp(const data::bag_container &x, bool arg0)
Definition data.cpp:45
std::string pp(const data::alias &x, bool arg0)
Definition data.cpp:39
std::set< data::variable > find_free_variables(const data::data_expression &x)
Definition data.cpp:98
void swap(sort_expression &t1, sort_expression &t2) noexcept
\brief swap overload
std::set< data::variable > find_all_variables(const data::variable_list &x)
Definition data.cpp:97
bool is_untyped_set_or_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a set/bag comprehension.
void swap(alias &t1, alias &t2) noexcept
\brief swap overload
Definition alias.h:97
bool is_assignment(const atermpp::aterm &x)
Definition assignment.h:152
std::string pp(const data::structured_sort_constructor &x, bool arg0)
Definition data.cpp:70
std::set< data::sort_expression > find_sort_expressions(const data::sort_expression &x)
Definition data.cpp:92
std::string pp(const data::data_specification &x, bool arg0)
Definition data.cpp:52
std::string pp(const data::data_equation_list &x, bool arg0)
Definition data.cpp:36
std::string pp(const data::fset_container &x, bool arg0)
Definition data.cpp:58
std::string pp(const data::sort_expression &x, bool arg0)
Definition data.cpp:68
std::string pp(const data::untyped_set_or_bag_comprehension &x, bool arg0)
Definition data.cpp:76
std::pair< basic_sort_vector, alias_vector > parse_sort_specification(const std::string &text)
Definition data.cpp:251
data::sort_expression normalize_sorts(const data::sort_expression &x, const data::sort_specification &sortspec)
Definition data.cpp:86
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
std::string pp(const data::variable_list &x, bool arg0)
Definition data.cpp:30
bool is_function_sort(const atermpp::aterm &x)
Returns true if the term t is a function sort.
std::set< data::variable > find_free_variables(const data::data_expression_list &x)
Definition data.cpp:99
std::string pp(const data::data_expression &x, bool arg0)
Definition data.cpp:51
std::string pp(const data::lambda &x, bool arg0)
Definition data.cpp:61
bool is_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a bag comprehension.
std::string pp(const data::fbag_container &x, bool arg0)
Definition data.cpp:55
bool is_set_comprehension(const atermpp::aterm &x)
Returns true if the term t is a set comprehension.
std::string pp(const data::structured_sort_constructor_list &x, bool arg0)
Definition data.cpp:34
bool is_machine_number(const atermpp::aterm &x)
Returns true if the term t is a machine_number.
std::string pp(const data::container_sort &x, bool arg0)
Definition data.cpp:48
data::variable_list normalize_sorts(const data::variable_list &x, const data::sort_specification &sortspec)
Definition data.cpp:87
data::data_expression normalize_sorts(const data::data_expression &x, const data::sort_specification &sortspec)
Definition data.cpp:85
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &codomain)
Convenience constructor for function sort with domain size 2.
std::string pp(const data::untyped_sort_variable &x, bool arg0)
Definition data.cpp:79
std::string pp(const data::untyped_data_parameter &x, bool arg0)
Definition data.cpp:72
std::string pp(const data::binder_type &x, bool arg0)
Definition data.cpp:47
bool is_lambda(const atermpp::aterm &x)
Returns true if the term t is a lambda abstraction.
bool is_untyped_identifier_assignment(const atermpp::aterm &x)
Definition assignment.h:248
bool is_alias(const atermpp::aterm &x)
Definition alias.h:78
std::set< data::variable > find_all_variables(const data::variable &x)
Definition data.cpp:96
std::set< core::identifier_string > find_identifiers(const data::variable_list &x)
Definition data.cpp:101
std::ostream & operator<<(std::ostream &out, const sort_expression &x)
bool search_variable(const data::data_expression &x, const data::variable &v)
Definition data.cpp:102
std::string pp(const data::sort_expression_list &x, bool arg0)
Definition data.cpp:24
std::string pp(const data::forall_binder &x, bool arg0)
Definition data.cpp:57
std::string pp(const data::untyped_possible_sorts &x, bool arg0)
Definition data.cpp:75
std::string pp(const data::function_symbol &x, bool arg0)
Definition data.cpp:60
std::set< data::variable > substitution_variables(const mutable_map_substitution<> &sigma)
Definition data.cpp:184
std::string pp(const data::machine_number &x, bool arg0)
Definition data.cpp:64
std::string pp(const data::assignment_expression &x, bool arg0)
Definition data.cpp:42
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
bool is_sort_expression(const atermpp::aterm &x)
Test for a sort_expression expression.
std::string pp(const data::set_comprehension &x, bool arg0)
Definition data.cpp:65
std::string pp(const data::data_expression_list &x, bool arg0)
Definition data.cpp:26
expression builder that visits all sub expressions
Definition builder.h:32
void leave(const T &)
Definition builder.h:40
void enter(const T &)
Definition builder.h:35
static const atermpp::aterm SortExpr
static const atermpp::aterm SortId
static const atermpp::aterm SortRef
void apply(T &result, const argument_type &x)
Definition builder.h:173
update_apply_builder(const Function &f)
Definition builder.h:179
void apply(T &result, const data::bag_comprehension &x)
Definition builder.h:511
void apply(T &result, const data::machine_number &x)
Definition builder.h:445
void apply(T &result, const data::untyped_identifier_assignment &x)
Definition builder.h:471
void apply(T &result, const data::assignment_expression &x)
Definition builder.h:578
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
Definition builder.h:519
void apply(T &result, const data::untyped_identifier &x)
Definition builder.h:454
void apply(T &result, const data::data_equation &x)
Definition builder.h:527
void apply(T &result, const data::function_symbol &x)
Definition builder.h:416
void apply(T &result, const data::assignment &x)
Definition builder.h:463
void apply(T &result, const data::abstraction &x)
Definition builder.h:593
void apply(T &result, const data::forall &x)
Definition builder.h:479
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:535
void apply(T &result, const data::exists &x)
Definition builder.h:487
void apply(T &result, const data::where_clause &x)
Definition builder.h:437
void apply(T &result, const data::application &x)
Definition builder.h:425
void apply(T &result, const data::variable &x)
Definition builder.h:407
void apply(T &result, const data::data_expression &x)
Definition builder.h:543
void apply(T &result, const data::set_comprehension &x)
Definition builder.h:503
void apply(T &result, const data::lambda &x)
Definition builder.h:495
void apply(T &result, const data::assignment &x)
Definition builder.h:108
void apply(T &result, const data::set_comprehension &x)
Definition builder.h:207
void apply(T &result, const data::structured_sort_constructor_argument &x)
Definition builder.h:231
void apply(T &result, const data::container_sort &x)
Definition builder.h:133
void apply(T &result, const data::alias &x)
Definition builder.h:247
void apply(T &result, const data::exists &x)
Definition builder.h:191
void apply(T &result, const data::machine_number &x)
Definition builder.h:90
void apply(T &result, const data::function_symbol &x)
Definition builder.h:62
void apply(T &result, const data::untyped_possible_sorts &x)
Definition builder.h:166
void apply(T &result, const data::forall &x)
Definition builder.h:183
void apply(T &result, const data::basic_sort &x)
Definition builder.h:124
void apply(T &result, const data::data_equation &x)
Definition builder.h:255
void apply(T &result, const data::untyped_sort &x)
Definition builder.h:157
void apply(T &result, const data::abstraction &x)
Definition builder.h:356
void apply(T &result, const data::application &x)
Definition builder.h:70
void apply(T &result, const data::variable &x)
Definition builder.h:54
void apply(T &result, const data::structured_sort &x)
Definition builder.h:141
void apply(T &result, const data::untyped_identifier_assignment &x)
Definition builder.h:116
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:263
void apply(T &result, const data::function_sort &x)
Definition builder.h:149
void apply(T &result, const data::untyped_identifier &x)
Definition builder.h:99
void apply(T &result, const data::structured_sort_constructor &x)
Definition builder.h:239
void apply(T &result, const data::lambda &x)
Definition builder.h:199
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
Definition builder.h:223
void apply(T &result, const data::where_clause &x)
Definition builder.h:82
void apply(T &result, const data::assignment_expression &x)
Definition builder.h:306
void apply(T &result, const data::data_expression &x)
Definition builder.h:271
void apply(T &result, const data::sort_expression &x)
Definition builder.h:321
void apply(T &result, const data::untyped_sort_variable &x)
Definition builder.h:174
void apply(T &result, const data::bag_comprehension &x)
Definition builder.h:215
void apply(T &result, const data::abstraction &x)
Definition builder.h:829
void apply(T &result, const data::application &x)
Definition builder.h:661
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:771
void apply(T &result, const data::untyped_identifier &x)
Definition builder.h:690
void apply(T &result, const data::data_expression &x)
Definition builder.h:779
void apply(T &result, const data::assignment_expression &x)
Definition builder.h:814
void apply(T &result, const data::where_clause &x)
Definition builder.h:673
void apply(T &result, const data::forall &x)
Definition builder.h:715
void apply(T &result, const data::function_symbol &x)
Definition builder.h:652
void apply(T &result, const data::exists &x)
Definition builder.h:723
void apply(T &result, const data::lambda &x)
Definition builder.h:731
void apply(T &result, const data::variable &x)
Definition builder.h:643
void apply(T &result, const data::assignment &x)
Definition builder.h:699
void apply(T &result, const data::untyped_identifier_assignment &x)
Definition builder.h:707
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
Definition builder.h:755
void apply(T &result, const data::set_comprehension &x)
Definition builder.h:739
void apply(T &result, const data::bag_comprehension &x)
Definition builder.h:747
void apply(T &result, const data::machine_number &x)
Definition builder.h:681
void apply(T &result, const data::data_equation &x)
Definition builder.h:763
data_expression_actions(const core::parser &parser_)
Definition parse_impl.h:138
data::data_expression parse_DataExpr(const core::parse_node &node) const
Definition parse_impl.h:208
data_specification_actions(const core::parser &parser_)
Definition parse_impl.h:297
untyped_data_specification parse_DataSpec(const core::parse_node &node) const
Definition parse_impl.h:458
normalize_sorts_function(const sort_specification &sort_spec)
sort_expression operator()(const sort_expression &e) const
Normalise sorts.
const std::map< sort_expression, sort_expression > & m_normalised_aliases
data::sort_expression parse_SortExpr(const core::parse_node &node, data::sort_expression_list *product=nullptr) const
Definition parse_impl.h:32
\brief Builder class
Definition builder.h:864
std::size_t operator()(const mcrl2::data::sort_expression &x) const