mCRL2
Loading...
Searching...
No Matches
nat1.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/nat.h
10/// \brief The standard sort nat.
11///
12/// This file was generated from the data sort specification
13/// mcrl2/data/build/nat.spec.
14
15#ifndef MCRL2_DATA_NAT1_H
16#define MCRL2_DATA_NAT1_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/bool.h"
27#include "mcrl2/data/pos1.h"
28
29/// \brief Namespace for system defined sort nat.
30namespace mcrl2::data::sort_nat
31{
32
33 inline
34 const core::identifier_string& nat_name()
35 {
36 static core::identifier_string nat_name = core::identifier_string("Nat");
37 return nat_name;
38 }
39
40 /// \brief Constructor for sort expression Nat.
41 /// \return Sort expression Nat.
42 inline
43 const basic_sort& nat()
44 {
46 return nat;
47 }
48
49 /// \brief Recogniser for sort expression Nat
50 /// \param e A sort expression
51 /// \return true iff e == nat()
52 inline
53 bool is_nat(const sort_expression& e)
54 {
55 if (is_basic_sort(e))
56 {
57 return basic_sort(e) == nat();
58 }
59 return false;
60 }
61
62 inline
63 const core::identifier_string& natpair_name()
64 {
65 static core::identifier_string natpair_name = core::identifier_string("@NatPair");
66 return natpair_name;
67 }
68
69 /// \brief Constructor for sort expression \@NatPair.
70 /// \return Sort expression \@NatPair.
71 inline
73 {
75 return natpair;
76 }
77
78 /// \brief Recogniser for sort expression \@NatPair
79 /// \param e A sort expression
80 /// \return true iff e == natpair()
81 inline
83 {
84 if (is_basic_sort(e))
85 {
86 return basic_sort(e) == natpair();
87 }
88 return false;
89 }
90
91
92 /// \brief Generate identifier \@c0.
93 /// \return Identifier \@c0.
94 inline
95 const core::identifier_string& c0_name()
96 {
97 static core::identifier_string c0_name = core::identifier_string("@c0");
98 return c0_name;
99 }
100
101 /// \brief Constructor for function symbol \@c0.
102
103 /// \return Function symbol c0.
104 inline
106 {
108 return c0;
109 }
110
111 /// \brief Recogniser for function \@c0.
112 /// \param e A data expression.
113 /// \return true iff e is the function symbol matching \@c0.
114 inline
116 {
118 {
119 return atermpp::down_cast<function_symbol>(e) == c0();
120 }
121 return false;
122 }
123
124 /// \brief Generate identifier \@cNat.
125 /// \return Identifier \@cNat.
126 inline
127 const core::identifier_string& cnat_name()
128 {
129 static core::identifier_string cnat_name = core::identifier_string("@cNat");
130 return cnat_name;
131 }
132
133 /// \brief Constructor for function symbol \@cNat.
134
135 /// \return Function symbol cnat.
136 inline
138 {
140 return cnat;
141 }
142
143 /// \brief Recogniser for function \@cNat.
144 /// \param e A data expression.
145 /// \return true iff e is the function symbol matching \@cNat.
146 inline
148 {
150 {
151 return atermpp::down_cast<function_symbol>(e) == cnat();
152 }
153 return false;
154 }
155
156 /// \brief Application of function symbol \@cNat.
157
158 /// \param arg0 A data expression.
159 /// \return Application of \@cNat to a number of arguments.
160 inline
161 application cnat(const data_expression& arg0)
162 {
163 return sort_nat::cnat()(arg0);
164 }
165
166 /// \brief Make an application of function symbol \@cNat.
167 /// \param result The data expression where the \@cNat expression is put.
168
169 /// \param arg0 A data expression.
170 inline
171 void make_cnat(data_expression& result, const data_expression& arg0)
172 {
173 make_application(result, sort_nat::cnat(),arg0);
174 }
175
176 /// \brief Recogniser for application of \@cNat.
177 /// \param e A data expression.
178 /// \return true iff e is an application of function symbol cnat to a
179 /// number of arguments.
180 inline
182 {
183 return is_application(e) && is_cnat_function_symbol(atermpp::down_cast<application>(e).head());
184 }
185
186 /// \brief Generate identifier \@cPair.
187 /// \return Identifier \@cPair.
188 inline
189 const core::identifier_string& cpair_name()
190 {
191 static core::identifier_string cpair_name = core::identifier_string("@cPair");
192 return cpair_name;
193 }
194
195 /// \brief Constructor for function symbol \@cPair.
196
197 /// \return Function symbol cpair.
198 inline
200 {
202 return cpair;
203 }
204
205 /// \brief Recogniser for function \@cPair.
206 /// \param e A data expression.
207 /// \return true iff e is the function symbol matching \@cPair.
208 inline
210 {
212 {
213 return atermpp::down_cast<function_symbol>(e) == cpair();
214 }
215 return false;
216 }
217
218 /// \brief Application of function symbol \@cPair.
219
220 /// \param arg0 A data expression.
221 /// \param arg1 A data expression.
222 /// \return Application of \@cPair to a number of arguments.
223 inline
224 application cpair(const data_expression& arg0, const data_expression& arg1)
225 {
226 return sort_nat::cpair()(arg0, arg1);
227 }
228
229 /// \brief Make an application of function symbol \@cPair.
230 /// \param result The data expression where the \@cPair expression is put.
231
232 /// \param arg0 A data expression.
233 /// \param arg1 A data expression.
234 inline
235 void make_cpair(data_expression& result, const data_expression& arg0, const data_expression& arg1)
236 {
237 make_application(result, sort_nat::cpair(),arg0, arg1);
238 }
239
240 /// \brief Recogniser for application of \@cPair.
241 /// \param e A data expression.
242 /// \return true iff e is an application of function symbol cpair to a
243 /// number of arguments.
244 inline
246 {
247 return is_application(e) && is_cpair_function_symbol(atermpp::down_cast<application>(e).head());
248 }
249 /// \brief Give all system defined constructors for nat.
250 /// \return All system defined constructors for nat.
251 inline
253 {
254 function_symbol_vector result;
255 result.push_back(sort_nat::c0());
256 result.push_back(sort_nat::cnat());
257 result.push_back(sort_nat::cpair());
258
259 return result;
260 }
261 /// \brief Give all defined constructors which can be used in mCRL2 specs for nat.
262 /// \return All system defined constructors that can be used in an mCRL2 specification for nat.
263 inline
265 {
266 function_symbol_vector result;
267 result.push_back(sort_nat::c0());
268 result.push_back(sort_nat::cnat());
269 result.push_back(sort_nat::cpair());
270
271 return result;
272 }
273 // 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
275 /// \brief Give all system defined constructors which have an implementation in C++ and not in rewrite rules for nat.
276 /// \return All system defined constructors that are to be implemented in C++ for nat.
277 inline
279 {
280 implementation_map result;
281 return result;
282 }
283
284 /// \brief Generate identifier Pos2Nat.
285 /// \return Identifier Pos2Nat.
286 inline
287 const core::identifier_string& pos2nat_name()
288 {
289 static core::identifier_string pos2nat_name = core::identifier_string("Pos2Nat");
290 return pos2nat_name;
291 }
292
293 /// \brief Constructor for function symbol Pos2Nat.
294
295 /// \return Function symbol pos2nat.
296 inline
298 {
300 return pos2nat;
301 }
302
303 /// \brief Recogniser for function Pos2Nat.
304 /// \param e A data expression.
305 /// \return true iff e is the function symbol matching Pos2Nat.
306 inline
308 {
310 {
311 return atermpp::down_cast<function_symbol>(e) == pos2nat();
312 }
313 return false;
314 }
315
316 /// \brief Application of function symbol Pos2Nat.
317
318 /// \param arg0 A data expression.
319 /// \return Application of Pos2Nat to a number of arguments.
320 inline
321 application pos2nat(const data_expression& arg0)
322 {
323 return sort_nat::pos2nat()(arg0);
324 }
325
326 /// \brief Make an application of function symbol Pos2Nat.
327 /// \param result The data expression where the Pos2Nat expression is put.
328
329 /// \param arg0 A data expression.
330 inline
332 {
333 make_application(result, sort_nat::pos2nat(),arg0);
334 }
335
336 /// \brief Recogniser for application of Pos2Nat.
337 /// \param e A data expression.
338 /// \return true iff e is an application of function symbol pos2nat to a
339 /// number of arguments.
340 inline
342 {
343 return is_application(e) && is_pos2nat_function_symbol(atermpp::down_cast<application>(e).head());
344 }
345
346 /// \brief Generate identifier Nat2Pos.
347 /// \return Identifier Nat2Pos.
348 inline
349 const core::identifier_string& nat2pos_name()
350 {
351 static core::identifier_string nat2pos_name = core::identifier_string("Nat2Pos");
352 return nat2pos_name;
353 }
354
355 /// \brief Constructor for function symbol Nat2Pos.
356
357 /// \return Function symbol nat2pos.
358 inline
360 {
362 return nat2pos;
363 }
364
365 /// \brief Recogniser for function Nat2Pos.
366 /// \param e A data expression.
367 /// \return true iff e is the function symbol matching Nat2Pos.
368 inline
370 {
372 {
373 return atermpp::down_cast<function_symbol>(e) == nat2pos();
374 }
375 return false;
376 }
377
378 /// \brief Application of function symbol Nat2Pos.
379
380 /// \param arg0 A data expression.
381 /// \return Application of Nat2Pos to a number of arguments.
382 inline
383 application nat2pos(const data_expression& arg0)
384 {
385 return sort_nat::nat2pos()(arg0);
386 }
387
388 /// \brief Make an application of function symbol Nat2Pos.
389 /// \param result The data expression where the Nat2Pos expression is put.
390
391 /// \param arg0 A data expression.
392 inline
394 {
395 make_application(result, sort_nat::nat2pos(),arg0);
396 }
397
398 /// \brief Recogniser for application of Nat2Pos.
399 /// \param e A data expression.
400 /// \return true iff e is an application of function symbol nat2pos to a
401 /// number of arguments.
402 inline
404 {
405 return is_application(e) && is_nat2pos_function_symbol(atermpp::down_cast<application>(e).head());
406 }
407
408 /// \brief Generate identifier max.
409 /// \return Identifier max.
410 inline
411 const core::identifier_string& maximum_name()
412 {
413 static core::identifier_string maximum_name = core::identifier_string("max");
414 return maximum_name;
415 }
416
417 // This function is not intended for public use and therefore not documented in Doxygen.
418 inline
420 {
421 sort_expression target_sort;
422 if (s0 == sort_pos::pos() && s1 == nat())
423 {
424 target_sort = sort_pos::pos();
425 }
426 else if (s0 == nat() && s1 == sort_pos::pos())
427 {
428 target_sort = sort_pos::pos();
429 }
430 else if (s0 == nat() && s1 == nat())
431 {
432 target_sort = nat();
433 }
434 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
435 {
436 target_sort = sort_pos::pos();
437 }
438 else
439 {
440 throw mcrl2::runtime_error("Cannot compute target sort for maximum with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
441 }
442
444 return maximum;
445 }
446
447 /// \brief Recogniser for function max.
448 /// \param e A data expression.
449 /// \return true iff e is the function symbol matching max.
450 inline
452 {
454 {
455 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
456 return f.name() == maximum_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == maximum(sort_pos::pos(), nat()) || f == maximum(nat(), sort_pos::pos()) || f == maximum(nat(), nat()) || f == maximum(sort_pos::pos(), sort_pos::pos()));
457 }
458 return false;
459 }
460
461 /// \brief Application of function symbol max.
462
463 /// \param arg0 A data expression.
464 /// \param arg1 A data expression.
465 /// \return Application of max to a number of arguments.
466 inline
467 application maximum(const data_expression& arg0, const data_expression& arg1)
468 {
469 return sort_nat::maximum(arg0.sort(), arg1.sort())(arg0, arg1);
470 }
471
472 /// \brief Make an application of function symbol max.
473 /// \param result The data expression where the max expression is put.
474
475 /// \param arg0 A data expression.
476 /// \param arg1 A data expression.
477 inline
478 void make_maximum(data_expression& result, const data_expression& arg0, const data_expression& arg1)
479 {
480 make_application(result, sort_nat::maximum(arg0.sort(), arg1.sort()),arg0, arg1);
481 }
482
483 /// \brief Recogniser for application of max.
484 /// \param e A data expression.
485 /// \return true iff e is an application of function symbol maximum to a
486 /// number of arguments.
487 inline
489 {
490 return is_application(e) && is_maximum_function_symbol(atermpp::down_cast<application>(e).head());
491 }
492
493 /// \brief Generate identifier min.
494 /// \return Identifier min.
495 inline
496 const core::identifier_string& minimum_name()
497 {
498 static core::identifier_string minimum_name = core::identifier_string("min");
499 return minimum_name;
500 }
501
502 // This function is not intended for public use and therefore not documented in Doxygen.
503 inline
505 {
506 sort_expression target_sort;
507 if (s0 == nat() && s1 == nat())
508 {
509 target_sort = nat();
510 }
511 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
512 {
513 target_sort = sort_pos::pos();
514 }
515 else
516 {
517 throw mcrl2::runtime_error("Cannot compute target sort for minimum with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
518 }
519
521 return minimum;
522 }
523
524 /// \brief Recogniser for function min.
525 /// \param e A data expression.
526 /// \return true iff e is the function symbol matching min.
527 inline
529 {
531 {
532 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
533 return f.name() == minimum_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == minimum(nat(), nat()) || f == minimum(sort_pos::pos(), sort_pos::pos()));
534 }
535 return false;
536 }
537
538 /// \brief Application of function symbol min.
539
540 /// \param arg0 A data expression.
541 /// \param arg1 A data expression.
542 /// \return Application of min to a number of arguments.
543 inline
544 application minimum(const data_expression& arg0, const data_expression& arg1)
545 {
546 return sort_nat::minimum(arg0.sort(), arg1.sort())(arg0, arg1);
547 }
548
549 /// \brief Make an application of function symbol min.
550 /// \param result The data expression where the min expression is put.
551
552 /// \param arg0 A data expression.
553 /// \param arg1 A data expression.
554 inline
555 void make_minimum(data_expression& result, const data_expression& arg0, const data_expression& arg1)
556 {
557 make_application(result, sort_nat::minimum(arg0.sort(), arg1.sort()),arg0, arg1);
558 }
559
560 /// \brief Recogniser for application of min.
561 /// \param e A data expression.
562 /// \return true iff e is an application of function symbol minimum to a
563 /// number of arguments.
564 inline
566 {
567 return is_application(e) && is_minimum_function_symbol(atermpp::down_cast<application>(e).head());
568 }
569
570 /// \brief Generate identifier succ.
571 /// \return Identifier succ.
572 inline
573 const core::identifier_string& succ_name()
574 {
575 static core::identifier_string succ_name = core::identifier_string("succ");
576 return succ_name;
577 }
578
579 // This function is not intended for public use and therefore not documented in Doxygen.
580 inline
582 {
585 return succ;
586 }
587
588 /// \brief Recogniser for function succ.
589 /// \param e A data expression.
590 /// \return true iff e is the function symbol matching succ.
591 inline
593 {
595 {
596 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
597 return f.name() == succ_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 1 && (f == succ(nat()) || f == succ(sort_pos::pos()));
598 }
599 return false;
600 }
601
602 /// \brief Application of function symbol succ.
603
604 /// \param arg0 A data expression.
605 /// \return Application of succ to a number of arguments.
606 inline
607 application succ(const data_expression& arg0)
608 {
609 return sort_nat::succ(arg0.sort())(arg0);
610 }
611
612 /// \brief Make an application of function symbol succ.
613 /// \param result The data expression where the succ expression is put.
614
615 /// \param arg0 A data expression.
616 inline
617 void make_succ(data_expression& result, const data_expression& arg0)
618 {
619 make_application(result, sort_nat::succ(arg0.sort()),arg0);
620 }
621
622 /// \brief Recogniser for application of succ.
623 /// \param e A data expression.
624 /// \return true iff e is an application of function symbol succ to a
625 /// number of arguments.
626 inline
628 {
629 return is_application(e) && is_succ_function_symbol(atermpp::down_cast<application>(e).head());
630 }
631
632 /// \brief Generate identifier pred.
633 /// \return Identifier pred.
634 inline
635 const core::identifier_string& pred_name()
636 {
637 static core::identifier_string pred_name = core::identifier_string("pred");
638 return pred_name;
639 }
640
641 /// \brief Constructor for function symbol pred.
642
643 /// \return Function symbol pred.
644 inline
646 {
648 return pred;
649 }
650
651 /// \brief Recogniser for function pred.
652 /// \param e A data expression.
653 /// \return true iff e is the function symbol matching pred.
654 inline
656 {
658 {
659 return atermpp::down_cast<function_symbol>(e) == pred();
660 }
661 return false;
662 }
663
664 /// \brief Application of function symbol pred.
665
666 /// \param arg0 A data expression.
667 /// \return Application of pred to a number of arguments.
668 inline
669 application pred(const data_expression& arg0)
670 {
671 return sort_nat::pred()(arg0);
672 }
673
674 /// \brief Make an application of function symbol pred.
675 /// \param result The data expression where the pred expression is put.
676
677 /// \param arg0 A data expression.
678 inline
679 void make_pred(data_expression& result, const data_expression& arg0)
680 {
681 make_application(result, sort_nat::pred(),arg0);
682 }
683
684 /// \brief Recogniser for application of pred.
685 /// \param e A data expression.
686 /// \return true iff e is an application of function symbol pred to a
687 /// number of arguments.
688 inline
690 {
691 return is_application(e) && is_pred_function_symbol(atermpp::down_cast<application>(e).head());
692 }
693
694 /// \brief Generate identifier \@dub.
695 /// \return Identifier \@dub.
696 inline
697 const core::identifier_string& dub_name()
698 {
699 static core::identifier_string dub_name = core::identifier_string("@dub");
700 return dub_name;
701 }
702
703 /// \brief Constructor for function symbol \@dub.
704
705 /// \return Function symbol dub.
706 inline
708 {
710 return dub;
711 }
712
713 /// \brief Recogniser for function \@dub.
714 /// \param e A data expression.
715 /// \return true iff e is the function symbol matching \@dub.
716 inline
718 {
720 {
721 return atermpp::down_cast<function_symbol>(e) == dub();
722 }
723 return false;
724 }
725
726 /// \brief Application of function symbol \@dub.
727
728 /// \param arg0 A data expression.
729 /// \param arg1 A data expression.
730 /// \return Application of \@dub to a number of arguments.
731 inline
732 application dub(const data_expression& arg0, const data_expression& arg1)
733 {
734 return sort_nat::dub()(arg0, arg1);
735 }
736
737 /// \brief Make an application of function symbol \@dub.
738 /// \param result The data expression where the \@dub expression is put.
739
740 /// \param arg0 A data expression.
741 /// \param arg1 A data expression.
742 inline
743 void make_dub(data_expression& result, const data_expression& arg0, const data_expression& arg1)
744 {
745 make_application(result, sort_nat::dub(),arg0, arg1);
746 }
747
748 /// \brief Recogniser for application of \@dub.
749 /// \param e A data expression.
750 /// \return true iff e is an application of function symbol dub to a
751 /// number of arguments.
752 inline
754 {
755 return is_application(e) && is_dub_function_symbol(atermpp::down_cast<application>(e).head());
756 }
757
758 /// \brief Generate identifier \@dubsucc.
759 /// \return Identifier \@dubsucc.
760 inline
761 const core::identifier_string& dubsucc_name()
762 {
763 static core::identifier_string dubsucc_name = core::identifier_string("@dubsucc");
764 return dubsucc_name;
765 }
766
767 /// \brief Constructor for function symbol \@dubsucc.
768
769 /// \return Function symbol dubsucc.
770 inline
772 {
774 return dubsucc;
775 }
776
777 /// \brief Recogniser for function \@dubsucc.
778 /// \param e A data expression.
779 /// \return true iff e is the function symbol matching \@dubsucc.
780 inline
782 {
784 {
785 return atermpp::down_cast<function_symbol>(e) == dubsucc();
786 }
787 return false;
788 }
789
790 /// \brief Application of function symbol \@dubsucc.
791
792 /// \param arg0 A data expression.
793 /// \return Application of \@dubsucc to a number of arguments.
794 inline
795 application dubsucc(const data_expression& arg0)
796 {
797 return sort_nat::dubsucc()(arg0);
798 }
799
800 /// \brief Make an application of function symbol \@dubsucc.
801 /// \param result The data expression where the \@dubsucc expression is put.
802
803 /// \param arg0 A data expression.
804 inline
806 {
807 make_application(result, sort_nat::dubsucc(),arg0);
808 }
809
810 /// \brief Recogniser for application of \@dubsucc.
811 /// \param e A data expression.
812 /// \return true iff e is an application of function symbol dubsucc to a
813 /// number of arguments.
814 inline
816 {
817 return is_application(e) && is_dubsucc_function_symbol(atermpp::down_cast<application>(e).head());
818 }
819
820 /// \brief Generate identifier +.
821 /// \return Identifier +.
822 inline
823 const core::identifier_string& plus_name()
824 {
825 static core::identifier_string plus_name = core::identifier_string("+");
826 return plus_name;
827 }
828
829 // This function is not intended for public use and therefore not documented in Doxygen.
830 inline
832 {
833 sort_expression target_sort;
834 if (s0 == sort_pos::pos() && s1 == nat())
835 {
836 target_sort = sort_pos::pos();
837 }
838 else if (s0 == nat() && s1 == sort_pos::pos())
839 {
840 target_sort = sort_pos::pos();
841 }
842 else if (s0 == nat() && s1 == nat())
843 {
844 target_sort = nat();
845 }
846 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
847 {
848 target_sort = sort_pos::pos();
849 }
850 else
851 {
852 throw mcrl2::runtime_error("Cannot compute target sort for plus with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
853 }
854
856 return plus;
857 }
858
859 /// \brief Recogniser for function +.
860 /// \param e A data expression.
861 /// \return true iff e is the function symbol matching +.
862 inline
864 {
866 {
867 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
868 return f.name() == plus_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == plus(sort_pos::pos(), nat()) || f == plus(nat(), sort_pos::pos()) || f == plus(nat(), nat()) || f == plus(sort_pos::pos(), sort_pos::pos()));
869 }
870 return false;
871 }
872
873 /// \brief Application of function symbol +.
874
875 /// \param arg0 A data expression.
876 /// \param arg1 A data expression.
877 /// \return Application of + to a number of arguments.
878 inline
879 application plus(const data_expression& arg0, const data_expression& arg1)
880 {
881 return sort_nat::plus(arg0.sort(), arg1.sort())(arg0, arg1);
882 }
883
884 /// \brief Make an application of function symbol +.
885 /// \param result The data expression where the + expression is put.
886
887 /// \param arg0 A data expression.
888 /// \param arg1 A data expression.
889 inline
890 void make_plus(data_expression& result, const data_expression& arg0, const data_expression& arg1)
891 {
892 make_application(result, sort_nat::plus(arg0.sort(), arg1.sort()),arg0, arg1);
893 }
894
895 /// \brief Recogniser for application of +.
896 /// \param e A data expression.
897 /// \return true iff e is an application of function symbol plus to a
898 /// number of arguments.
899 inline
901 {
902 return is_application(e) && is_plus_function_symbol(atermpp::down_cast<application>(e).head());
903 }
904
905 /// \brief Generate identifier \@gtesubtb.
906 /// \return Identifier \@gtesubtb.
907 inline
908 const core::identifier_string& gte_subtract_with_borrow_name()
909 {
910 static core::identifier_string gte_subtract_with_borrow_name = core::identifier_string("@gtesubtb");
911 return gte_subtract_with_borrow_name;
912 }
913
914 /// \brief Constructor for function symbol \@gtesubtb.
915
916 /// \return Function symbol gte_subtract_with_borrow.
917 inline
919 {
921 return gte_subtract_with_borrow;
922 }
923
924 /// \brief Recogniser for function \@gtesubtb.
925 /// \param e A data expression.
926 /// \return true iff e is the function symbol matching \@gtesubtb.
927 inline
929 {
931 {
932 return atermpp::down_cast<function_symbol>(e) == gte_subtract_with_borrow();
933 }
934 return false;
935 }
936
937 /// \brief Application of function symbol \@gtesubtb.
938
939 /// \param arg0 A data expression.
940 /// \param arg1 A data expression.
941 /// \param arg2 A data expression.
942 /// \return Application of \@gtesubtb to a number of arguments.
943 inline
944 application gte_subtract_with_borrow(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
945 {
947 }
948
949 /// \brief Make an application of function symbol \@gtesubtb.
950 /// \param result The data expression where the \@gtesubtb expression is put.
951
952 /// \param arg0 A data expression.
953 /// \param arg1 A data expression.
954 /// \param arg2 A data expression.
955 inline
957 {
958 make_application(result, sort_nat::gte_subtract_with_borrow(),arg0, arg1, arg2);
959 }
960
961 /// \brief Recogniser for application of \@gtesubtb.
962 /// \param e A data expression.
963 /// \return true iff e is an application of function symbol gte_subtract_with_borrow to a
964 /// number of arguments.
965 inline
967 {
968 return is_application(e) && is_gte_subtract_with_borrow_function_symbol(atermpp::down_cast<application>(e).head());
969 }
970
971 /// \brief Generate identifier *.
972 /// \return Identifier *.
973 inline
974 const core::identifier_string& times_name()
975 {
976 static core::identifier_string times_name = core::identifier_string("*");
977 return times_name;
978 }
979
980 // This function is not intended for public use and therefore not documented in Doxygen.
981 inline
983 {
984 sort_expression target_sort;
985 if (s0 == nat() && s1 == nat())
986 {
987 target_sort = nat();
988 }
989 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
990 {
991 target_sort = sort_pos::pos();
992 }
993 else
994 {
995 throw mcrl2::runtime_error("Cannot compute target sort for times with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
996 }
997
999 return times;
1000 }
1001
1002 /// \brief Recogniser for function *.
1003 /// \param e A data expression.
1004 /// \return true iff e is the function symbol matching *.
1005 inline
1007 {
1009 {
1010 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
1011 return f.name() == times_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == times(nat(), nat()) || f == times(sort_pos::pos(), sort_pos::pos()));
1012 }
1013 return false;
1014 }
1015
1016 /// \brief Application of function symbol *.
1017
1018 /// \param arg0 A data expression.
1019 /// \param arg1 A data expression.
1020 /// \return Application of * to a number of arguments.
1021 inline
1022 application times(const data_expression& arg0, const data_expression& arg1)
1023 {
1024 return sort_nat::times(arg0.sort(), arg1.sort())(arg0, arg1);
1025 }
1026
1027 /// \brief Make an application of function symbol *.
1028 /// \param result The data expression where the * expression is put.
1029
1030 /// \param arg0 A data expression.
1031 /// \param arg1 A data expression.
1032 inline
1033 void make_times(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1034 {
1035 make_application(result, sort_nat::times(arg0.sort(), arg1.sort()),arg0, arg1);
1036 }
1037
1038 /// \brief Recogniser for application of *.
1039 /// \param e A data expression.
1040 /// \return true iff e is an application of function symbol times to a
1041 /// number of arguments.
1042 inline
1044 {
1045 return is_application(e) && is_times_function_symbol(atermpp::down_cast<application>(e).head());
1046 }
1047
1048 /// \brief Generate identifier div.
1049 /// \return Identifier div.
1050 inline
1051 const core::identifier_string& div_name()
1052 {
1053 static core::identifier_string div_name = core::identifier_string("div");
1054 return div_name;
1055 }
1056
1057 /// \brief Constructor for function symbol div.
1058
1059 /// \return Function symbol div.
1060 inline
1062 {
1064 return div;
1065 }
1066
1067 /// \brief Recogniser for function div.
1068 /// \param e A data expression.
1069 /// \return true iff e is the function symbol matching div.
1070 inline
1072 {
1074 {
1075 return atermpp::down_cast<function_symbol>(e) == div();
1076 }
1077 return false;
1078 }
1079
1080 /// \brief Application of function symbol div.
1081
1082 /// \param arg0 A data expression.
1083 /// \param arg1 A data expression.
1084 /// \return Application of div to a number of arguments.
1085 inline
1086 application div(const data_expression& arg0, const data_expression& arg1)
1087 {
1088 return sort_nat::div()(arg0, arg1);
1089 }
1090
1091 /// \brief Make an application of function symbol div.
1092 /// \param result The data expression where the div expression is put.
1093
1094 /// \param arg0 A data expression.
1095 /// \param arg1 A data expression.
1096 inline
1097 void make_div(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1098 {
1099 make_application(result, sort_nat::div(),arg0, arg1);
1100 }
1101
1102 /// \brief Recogniser for application of div.
1103 /// \param e A data expression.
1104 /// \return true iff e is an application of function symbol div to a
1105 /// number of arguments.
1106 inline
1108 {
1109 return is_application(e) && is_div_function_symbol(atermpp::down_cast<application>(e).head());
1110 }
1111
1112 /// \brief Generate identifier mod.
1113 /// \return Identifier mod.
1114 inline
1115 const core::identifier_string& mod_name()
1116 {
1117 static core::identifier_string mod_name = core::identifier_string("mod");
1118 return mod_name;
1119 }
1120
1121 /// \brief Constructor for function symbol mod.
1122
1123 /// \return Function symbol mod.
1124 inline
1126 {
1128 return mod;
1129 }
1130
1131 /// \brief Recogniser for function mod.
1132 /// \param e A data expression.
1133 /// \return true iff e is the function symbol matching mod.
1134 inline
1136 {
1138 {
1139 return atermpp::down_cast<function_symbol>(e) == mod();
1140 }
1141 return false;
1142 }
1143
1144 /// \brief Application of function symbol mod.
1145
1146 /// \param arg0 A data expression.
1147 /// \param arg1 A data expression.
1148 /// \return Application of mod to a number of arguments.
1149 inline
1150 application mod(const data_expression& arg0, const data_expression& arg1)
1151 {
1152 return sort_nat::mod()(arg0, arg1);
1153 }
1154
1155 /// \brief Make an application of function symbol mod.
1156 /// \param result The data expression where the mod expression is put.
1157
1158 /// \param arg0 A data expression.
1159 /// \param arg1 A data expression.
1160 inline
1161 void make_mod(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1162 {
1163 make_application(result, sort_nat::mod(),arg0, arg1);
1164 }
1165
1166 /// \brief Recogniser for application of mod.
1167 /// \param e A data expression.
1168 /// \return true iff e is an application of function symbol mod to a
1169 /// number of arguments.
1170 inline
1172 {
1173 return is_application(e) && is_mod_function_symbol(atermpp::down_cast<application>(e).head());
1174 }
1175
1176 /// \brief Generate identifier exp.
1177 /// \return Identifier exp.
1178 inline
1179 const core::identifier_string& exp_name()
1180 {
1181 static core::identifier_string exp_name = core::identifier_string("exp");
1182 return exp_name;
1183 }
1184
1185 // This function is not intended for public use and therefore not documented in Doxygen.
1186 inline
1188 {
1189 sort_expression target_sort;
1190 if (s0 == sort_pos::pos() && s1 == nat())
1191 {
1192 target_sort = sort_pos::pos();
1193 }
1194 else if (s0 == nat() && s1 == nat())
1195 {
1196 target_sort = nat();
1197 }
1198 else
1199 {
1200 throw mcrl2::runtime_error("Cannot compute target sort for exp with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
1201 }
1202
1204 return exp;
1205 }
1206
1207 /// \brief Recogniser for function exp.
1208 /// \param e A data expression.
1209 /// \return true iff e is the function symbol matching exp.
1210 inline
1212 {
1214 {
1215 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
1216 return f.name() == exp_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == exp(sort_pos::pos(), nat()) || f == exp(nat(), nat()));
1217 }
1218 return false;
1219 }
1220
1221 /// \brief Application of function symbol exp.
1222
1223 /// \param arg0 A data expression.
1224 /// \param arg1 A data expression.
1225 /// \return Application of exp to a number of arguments.
1226 inline
1227 application exp(const data_expression& arg0, const data_expression& arg1)
1228 {
1229 return sort_nat::exp(arg0.sort(), arg1.sort())(arg0, arg1);
1230 }
1231
1232 /// \brief Make an application of function symbol exp.
1233 /// \param result The data expression where the exp expression is put.
1234
1235 /// \param arg0 A data expression.
1236 /// \param arg1 A data expression.
1237 inline
1238 void make_exp(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1239 {
1240 make_application(result, sort_nat::exp(arg0.sort(), arg1.sort()),arg0, arg1);
1241 }
1242
1243 /// \brief Recogniser for application of exp.
1244 /// \param e A data expression.
1245 /// \return true iff e is an application of function symbol exp to a
1246 /// number of arguments.
1247 inline
1249 {
1250 return is_application(e) && is_exp_function_symbol(atermpp::down_cast<application>(e).head());
1251 }
1252
1253 /// \brief Generate identifier \@even.
1254 /// \return Identifier \@even.
1255 inline
1256 const core::identifier_string& even_name()
1257 {
1258 static core::identifier_string even_name = core::identifier_string("@even");
1259 return even_name;
1260 }
1261
1262 /// \brief Constructor for function symbol \@even.
1263
1264 /// \return Function symbol even.
1265 inline
1267 {
1269 return even;
1270 }
1271
1272 /// \brief Recogniser for function \@even.
1273 /// \param e A data expression.
1274 /// \return true iff e is the function symbol matching \@even.
1275 inline
1277 {
1279 {
1280 return atermpp::down_cast<function_symbol>(e) == even();
1281 }
1282 return false;
1283 }
1284
1285 /// \brief Application of function symbol \@even.
1286
1287 /// \param arg0 A data expression.
1288 /// \return Application of \@even to a number of arguments.
1289 inline
1290 application even(const data_expression& arg0)
1291 {
1292 return sort_nat::even()(arg0);
1293 }
1294
1295 /// \brief Make an application of function symbol \@even.
1296 /// \param result The data expression where the \@even expression is put.
1297
1298 /// \param arg0 A data expression.
1299 inline
1300 void make_even(data_expression& result, const data_expression& arg0)
1301 {
1302 make_application(result, sort_nat::even(),arg0);
1303 }
1304
1305 /// \brief Recogniser for application of \@even.
1306 /// \param e A data expression.
1307 /// \return true iff e is an application of function symbol even to a
1308 /// number of arguments.
1309 inline
1311 {
1312 return is_application(e) && is_even_function_symbol(atermpp::down_cast<application>(e).head());
1313 }
1314
1315 /// \brief Generate identifier \@monus.
1316 /// \return Identifier \@monus.
1317 inline
1318 const core::identifier_string& monus_name()
1319 {
1320 static core::identifier_string monus_name = core::identifier_string("@monus");
1321 return monus_name;
1322 }
1323
1324 /// \brief Constructor for function symbol \@monus.
1325
1326 /// \return Function symbol monus.
1327 inline
1329 {
1331 return monus;
1332 }
1333
1334 /// \brief Recogniser for function \@monus.
1335 /// \param e A data expression.
1336 /// \return true iff e is the function symbol matching \@monus.
1337 inline
1339 {
1341 {
1342 return atermpp::down_cast<function_symbol>(e) == monus();
1343 }
1344 return false;
1345 }
1346
1347 /// \brief Application of function symbol \@monus.
1348
1349 /// \param arg0 A data expression.
1350 /// \param arg1 A data expression.
1351 /// \return Application of \@monus to a number of arguments.
1352 inline
1353 application monus(const data_expression& arg0, const data_expression& arg1)
1354 {
1355 return sort_nat::monus()(arg0, arg1);
1356 }
1357
1358 /// \brief Make an application of function symbol \@monus.
1359 /// \param result The data expression where the \@monus expression is put.
1360
1361 /// \param arg0 A data expression.
1362 /// \param arg1 A data expression.
1363 inline
1364 void make_monus(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1365 {
1366 make_application(result, sort_nat::monus(),arg0, arg1);
1367 }
1368
1369 /// \brief Recogniser for application of \@monus.
1370 /// \param e A data expression.
1371 /// \return true iff e is an application of function symbol monus to a
1372 /// number of arguments.
1373 inline
1375 {
1376 return is_application(e) && is_monus_function_symbol(atermpp::down_cast<application>(e).head());
1377 }
1378
1379 /// \brief Generate identifier \@swap_zero.
1380 /// \return Identifier \@swap_zero.
1381 inline
1382 const core::identifier_string& swap_zero_name()
1383 {
1384 static core::identifier_string swap_zero_name = core::identifier_string("@swap_zero");
1385 return swap_zero_name;
1386 }
1387
1388 /// \brief Constructor for function symbol \@swap_zero.
1389
1390 /// \return Function symbol swap_zero.
1391 inline
1393 {
1395 return swap_zero;
1396 }
1397
1398 /// \brief Recogniser for function \@swap_zero.
1399 /// \param e A data expression.
1400 /// \return true iff e is the function symbol matching \@swap_zero.
1401 inline
1403 {
1405 {
1406 return atermpp::down_cast<function_symbol>(e) == swap_zero();
1407 }
1408 return false;
1409 }
1410
1411 /// \brief Application of function symbol \@swap_zero.
1412
1413 /// \param arg0 A data expression.
1414 /// \param arg1 A data expression.
1415 /// \return Application of \@swap_zero to a number of arguments.
1416 inline
1417 application swap_zero(const data_expression& arg0, const data_expression& arg1)
1418 {
1419 return sort_nat::swap_zero()(arg0, arg1);
1420 }
1421
1422 /// \brief Make an application of function symbol \@swap_zero.
1423 /// \param result The data expression where the \@swap_zero expression is put.
1424
1425 /// \param arg0 A data expression.
1426 /// \param arg1 A data expression.
1427 inline
1428 void make_swap_zero(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1429 {
1430 make_application(result, sort_nat::swap_zero(),arg0, arg1);
1431 }
1432
1433 /// \brief Recogniser for application of \@swap_zero.
1434 /// \param e A data expression.
1435 /// \return true iff e is an application of function symbol swap_zero to a
1436 /// number of arguments.
1437 inline
1439 {
1440 return is_application(e) && is_swap_zero_function_symbol(atermpp::down_cast<application>(e).head());
1441 }
1442
1443 /// \brief Generate identifier \@swap_zero_add.
1444 /// \return Identifier \@swap_zero_add.
1445 inline
1446 const core::identifier_string& swap_zero_add_name()
1447 {
1448 static core::identifier_string swap_zero_add_name = core::identifier_string("@swap_zero_add");
1449 return swap_zero_add_name;
1450 }
1451
1452 /// \brief Constructor for function symbol \@swap_zero_add.
1453
1454 /// \return Function symbol swap_zero_add.
1455 inline
1457 {
1459 return swap_zero_add;
1460 }
1461
1462 /// \brief Recogniser for function \@swap_zero_add.
1463 /// \param e A data expression.
1464 /// \return true iff e is the function symbol matching \@swap_zero_add.
1465 inline
1467 {
1469 {
1470 return atermpp::down_cast<function_symbol>(e) == swap_zero_add();
1471 }
1472 return false;
1473 }
1474
1475 /// \brief Application of function symbol \@swap_zero_add.
1476
1477 /// \param arg0 A data expression.
1478 /// \param arg1 A data expression.
1479 /// \param arg2 A data expression.
1480 /// \param arg3 A data expression.
1481 /// \return Application of \@swap_zero_add to a number of arguments.
1482 inline
1483 application swap_zero_add(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1484 {
1485 return sort_nat::swap_zero_add()(arg0, arg1, arg2, arg3);
1486 }
1487
1488 /// \brief Make an application of function symbol \@swap_zero_add.
1489 /// \param result The data expression where the \@swap_zero_add expression is put.
1490
1491 /// \param arg0 A data expression.
1492 /// \param arg1 A data expression.
1493 /// \param arg2 A data expression.
1494 /// \param arg3 A data expression.
1495 inline
1496 void make_swap_zero_add(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1497 {
1498 make_application(result, sort_nat::swap_zero_add(),arg0, arg1, arg2, arg3);
1499 }
1500
1501 /// \brief Recogniser for application of \@swap_zero_add.
1502 /// \param e A data expression.
1503 /// \return true iff e is an application of function symbol swap_zero_add to a
1504 /// number of arguments.
1505 inline
1507 {
1508 return is_application(e) && is_swap_zero_add_function_symbol(atermpp::down_cast<application>(e).head());
1509 }
1510
1511 /// \brief Generate identifier \@swap_zero_min.
1512 /// \return Identifier \@swap_zero_min.
1513 inline
1514 const core::identifier_string& swap_zero_min_name()
1515 {
1516 static core::identifier_string swap_zero_min_name = core::identifier_string("@swap_zero_min");
1517 return swap_zero_min_name;
1518 }
1519
1520 /// \brief Constructor for function symbol \@swap_zero_min.
1521
1522 /// \return Function symbol swap_zero_min.
1523 inline
1525 {
1527 return swap_zero_min;
1528 }
1529
1530 /// \brief Recogniser for function \@swap_zero_min.
1531 /// \param e A data expression.
1532 /// \return true iff e is the function symbol matching \@swap_zero_min.
1533 inline
1535 {
1537 {
1538 return atermpp::down_cast<function_symbol>(e) == swap_zero_min();
1539 }
1540 return false;
1541 }
1542
1543 /// \brief Application of function symbol \@swap_zero_min.
1544
1545 /// \param arg0 A data expression.
1546 /// \param arg1 A data expression.
1547 /// \param arg2 A data expression.
1548 /// \param arg3 A data expression.
1549 /// \return Application of \@swap_zero_min to a number of arguments.
1550 inline
1551 application swap_zero_min(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1552 {
1553 return sort_nat::swap_zero_min()(arg0, arg1, arg2, arg3);
1554 }
1555
1556 /// \brief Make an application of function symbol \@swap_zero_min.
1557 /// \param result The data expression where the \@swap_zero_min expression is put.
1558
1559 /// \param arg0 A data expression.
1560 /// \param arg1 A data expression.
1561 /// \param arg2 A data expression.
1562 /// \param arg3 A data expression.
1563 inline
1564 void make_swap_zero_min(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1565 {
1566 make_application(result, sort_nat::swap_zero_min(),arg0, arg1, arg2, arg3);
1567 }
1568
1569 /// \brief Recogniser for application of \@swap_zero_min.
1570 /// \param e A data expression.
1571 /// \return true iff e is an application of function symbol swap_zero_min to a
1572 /// number of arguments.
1573 inline
1575 {
1576 return is_application(e) && is_swap_zero_min_function_symbol(atermpp::down_cast<application>(e).head());
1577 }
1578
1579 /// \brief Generate identifier \@swap_zero_monus.
1580 /// \return Identifier \@swap_zero_monus.
1581 inline
1582 const core::identifier_string& swap_zero_monus_name()
1583 {
1584 static core::identifier_string swap_zero_monus_name = core::identifier_string("@swap_zero_monus");
1585 return swap_zero_monus_name;
1586 }
1587
1588 /// \brief Constructor for function symbol \@swap_zero_monus.
1589
1590 /// \return Function symbol swap_zero_monus.
1591 inline
1593 {
1595 return swap_zero_monus;
1596 }
1597
1598 /// \brief Recogniser for function \@swap_zero_monus.
1599 /// \param e A data expression.
1600 /// \return true iff e is the function symbol matching \@swap_zero_monus.
1601 inline
1603 {
1605 {
1606 return atermpp::down_cast<function_symbol>(e) == swap_zero_monus();
1607 }
1608 return false;
1609 }
1610
1611 /// \brief Application of function symbol \@swap_zero_monus.
1612
1613 /// \param arg0 A data expression.
1614 /// \param arg1 A data expression.
1615 /// \param arg2 A data expression.
1616 /// \param arg3 A data expression.
1617 /// \return Application of \@swap_zero_monus to a number of arguments.
1618 inline
1619 application swap_zero_monus(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1620 {
1621 return sort_nat::swap_zero_monus()(arg0, arg1, arg2, arg3);
1622 }
1623
1624 /// \brief Make an application of function symbol \@swap_zero_monus.
1625 /// \param result The data expression where the \@swap_zero_monus expression is put.
1626
1627 /// \param arg0 A data expression.
1628 /// \param arg1 A data expression.
1629 /// \param arg2 A data expression.
1630 /// \param arg3 A data expression.
1631 inline
1632 void make_swap_zero_monus(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
1633 {
1634 make_application(result, sort_nat::swap_zero_monus(),arg0, arg1, arg2, arg3);
1635 }
1636
1637 /// \brief Recogniser for application of \@swap_zero_monus.
1638 /// \param e A data expression.
1639 /// \return true iff e is an application of function symbol swap_zero_monus to a
1640 /// number of arguments.
1641 inline
1643 {
1644 return is_application(e) && is_swap_zero_monus_function_symbol(atermpp::down_cast<application>(e).head());
1645 }
1646
1647 /// \brief Generate identifier sqrt.
1648 /// \return Identifier sqrt.
1649 inline
1650 const core::identifier_string& sqrt_name()
1651 {
1652 static core::identifier_string sqrt_name = core::identifier_string("sqrt");
1653 return sqrt_name;
1654 }
1655
1656 /// \brief Constructor for function symbol sqrt.
1657
1658 /// \return Function symbol sqrt.
1659 inline
1661 {
1663 return sqrt;
1664 }
1665
1666 /// \brief Recogniser for function sqrt.
1667 /// \param e A data expression.
1668 /// \return true iff e is the function symbol matching sqrt.
1669 inline
1671 {
1673 {
1674 return atermpp::down_cast<function_symbol>(e) == sqrt();
1675 }
1676 return false;
1677 }
1678
1679 /// \brief Application of function symbol sqrt.
1680
1681 /// \param arg0 A data expression.
1682 /// \return Application of sqrt to a number of arguments.
1683 inline
1684 application sqrt(const data_expression& arg0)
1685 {
1686 return sort_nat::sqrt()(arg0);
1687 }
1688
1689 /// \brief Make an application of function symbol sqrt.
1690 /// \param result The data expression where the sqrt expression is put.
1691
1692 /// \param arg0 A data expression.
1693 inline
1694 void make_sqrt(data_expression& result, const data_expression& arg0)
1695 {
1696 make_application(result, sort_nat::sqrt(),arg0);
1697 }
1698
1699 /// \brief Recogniser for application of sqrt.
1700 /// \param e A data expression.
1701 /// \return true iff e is an application of function symbol sqrt to a
1702 /// number of arguments.
1703 inline
1705 {
1706 return is_application(e) && is_sqrt_function_symbol(atermpp::down_cast<application>(e).head());
1707 }
1708
1709 /// \brief Generate identifier \@sqrt_nat.
1710 /// \return Identifier \@sqrt_nat.
1711 inline
1712 const core::identifier_string& sqrt_nat_aux_func_name()
1713 {
1714 static core::identifier_string sqrt_nat_aux_func_name = core::identifier_string("@sqrt_nat");
1715 return sqrt_nat_aux_func_name;
1716 }
1717
1718 /// \brief Constructor for function symbol \@sqrt_nat.
1719
1720 /// \return Function symbol sqrt_nat_aux_func.
1721 inline
1723 {
1725 return sqrt_nat_aux_func;
1726 }
1727
1728 /// \brief Recogniser for function \@sqrt_nat.
1729 /// \param e A data expression.
1730 /// \return true iff e is the function symbol matching \@sqrt_nat.
1731 inline
1733 {
1735 {
1736 return atermpp::down_cast<function_symbol>(e) == sqrt_nat_aux_func();
1737 }
1738 return false;
1739 }
1740
1741 /// \brief Application of function symbol \@sqrt_nat.
1742
1743 /// \param arg0 A data expression.
1744 /// \param arg1 A data expression.
1745 /// \param arg2 A data expression.
1746 /// \return Application of \@sqrt_nat to a number of arguments.
1747 inline
1748 application sqrt_nat_aux_func(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
1749 {
1751 }
1752
1753 /// \brief Make an application of function symbol \@sqrt_nat.
1754 /// \param result The data expression where the \@sqrt_nat expression is put.
1755
1756 /// \param arg0 A data expression.
1757 /// \param arg1 A data expression.
1758 /// \param arg2 A data expression.
1759 inline
1760 void make_sqrt_nat_aux_func(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
1761 {
1762 make_application(result, sort_nat::sqrt_nat_aux_func(),arg0, arg1, arg2);
1763 }
1764
1765 /// \brief Recogniser for application of \@sqrt_nat.
1766 /// \param e A data expression.
1767 /// \return true iff e is an application of function symbol sqrt_nat_aux_func to a
1768 /// number of arguments.
1769 inline
1771 {
1772 return is_application(e) && is_sqrt_nat_aux_func_function_symbol(atermpp::down_cast<application>(e).head());
1773 }
1774
1775 /// \brief Generate identifier \@first.
1776 /// \return Identifier \@first.
1777 inline
1778 const core::identifier_string& first_name()
1779 {
1780 static core::identifier_string first_name = core::identifier_string("@first");
1781 return first_name;
1782 }
1783
1784 /// \brief Constructor for function symbol \@first.
1785
1786 /// \return Function symbol first.
1787 inline
1789 {
1791 return first;
1792 }
1793
1794 /// \brief Recogniser for function \@first.
1795 /// \param e A data expression.
1796 /// \return true iff e is the function symbol matching \@first.
1797 inline
1799 {
1801 {
1802 return atermpp::down_cast<function_symbol>(e) == first();
1803 }
1804 return false;
1805 }
1806
1807 /// \brief Application of function symbol \@first.
1808
1809 /// \param arg0 A data expression.
1810 /// \return Application of \@first to a number of arguments.
1811 inline
1812 application first(const data_expression& arg0)
1813 {
1814 return sort_nat::first()(arg0);
1815 }
1816
1817 /// \brief Make an application of function symbol \@first.
1818 /// \param result The data expression where the \@first expression is put.
1819
1820 /// \param arg0 A data expression.
1821 inline
1822 void make_first(data_expression& result, const data_expression& arg0)
1823 {
1824 make_application(result, sort_nat::first(),arg0);
1825 }
1826
1827 /// \brief Recogniser for application of \@first.
1828 /// \param e A data expression.
1829 /// \return true iff e is an application of function symbol first to a
1830 /// number of arguments.
1831 inline
1833 {
1834 return is_application(e) && is_first_function_symbol(atermpp::down_cast<application>(e).head());
1835 }
1836
1837 /// \brief Generate identifier \@last.
1838 /// \return Identifier \@last.
1839 inline
1840 const core::identifier_string& last_name()
1841 {
1842 static core::identifier_string last_name = core::identifier_string("@last");
1843 return last_name;
1844 }
1845
1846 /// \brief Constructor for function symbol \@last.
1847
1848 /// \return Function symbol last.
1849 inline
1851 {
1853 return last;
1854 }
1855
1856 /// \brief Recogniser for function \@last.
1857 /// \param e A data expression.
1858 /// \return true iff e is the function symbol matching \@last.
1859 inline
1861 {
1863 {
1864 return atermpp::down_cast<function_symbol>(e) == last();
1865 }
1866 return false;
1867 }
1868
1869 /// \brief Application of function symbol \@last.
1870
1871 /// \param arg0 A data expression.
1872 /// \return Application of \@last to a number of arguments.
1873 inline
1874 application last(const data_expression& arg0)
1875 {
1876 return sort_nat::last()(arg0);
1877 }
1878
1879 /// \brief Make an application of function symbol \@last.
1880 /// \param result The data expression where the \@last expression is put.
1881
1882 /// \param arg0 A data expression.
1883 inline
1884 void make_last(data_expression& result, const data_expression& arg0)
1885 {
1886 make_application(result, sort_nat::last(),arg0);
1887 }
1888
1889 /// \brief Recogniser for application of \@last.
1890 /// \param e A data expression.
1891 /// \return true iff e is an application of function symbol last to a
1892 /// number of arguments.
1893 inline
1895 {
1896 return is_application(e) && is_last_function_symbol(atermpp::down_cast<application>(e).head());
1897 }
1898
1899 /// \brief Generate identifier \@divmod.
1900 /// \return Identifier \@divmod.
1901 inline
1902 const core::identifier_string& divmod_name()
1903 {
1904 static core::identifier_string divmod_name = core::identifier_string("@divmod");
1905 return divmod_name;
1906 }
1907
1908 /// \brief Constructor for function symbol \@divmod.
1909
1910 /// \return Function symbol divmod.
1911 inline
1913 {
1915 return divmod;
1916 }
1917
1918 /// \brief Recogniser for function \@divmod.
1919 /// \param e A data expression.
1920 /// \return true iff e is the function symbol matching \@divmod.
1921 inline
1923 {
1925 {
1926 return atermpp::down_cast<function_symbol>(e) == divmod();
1927 }
1928 return false;
1929 }
1930
1931 /// \brief Application of function symbol \@divmod.
1932
1933 /// \param arg0 A data expression.
1934 /// \param arg1 A data expression.
1935 /// \return Application of \@divmod to a number of arguments.
1936 inline
1937 application divmod(const data_expression& arg0, const data_expression& arg1)
1938 {
1939 return sort_nat::divmod()(arg0, arg1);
1940 }
1941
1942 /// \brief Make an application of function symbol \@divmod.
1943 /// \param result The data expression where the \@divmod expression is put.
1944
1945 /// \param arg0 A data expression.
1946 /// \param arg1 A data expression.
1947 inline
1948 void make_divmod(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1949 {
1950 make_application(result, sort_nat::divmod(),arg0, arg1);
1951 }
1952
1953 /// \brief Recogniser for application of \@divmod.
1954 /// \param e A data expression.
1955 /// \return true iff e is an application of function symbol divmod to a
1956 /// number of arguments.
1957 inline
1959 {
1960 return is_application(e) && is_divmod_function_symbol(atermpp::down_cast<application>(e).head());
1961 }
1962
1963 /// \brief Generate identifier \@gdivmod.
1964 /// \return Identifier \@gdivmod.
1965 inline
1966 const core::identifier_string& generalised_divmod_name()
1967 {
1968 static core::identifier_string generalised_divmod_name = core::identifier_string("@gdivmod");
1969 return generalised_divmod_name;
1970 }
1971
1972 /// \brief Constructor for function symbol \@gdivmod.
1973
1974 /// \return Function symbol generalised_divmod.
1975 inline
1977 {
1979 return generalised_divmod;
1980 }
1981
1982 /// \brief Recogniser for function \@gdivmod.
1983 /// \param e A data expression.
1984 /// \return true iff e is the function symbol matching \@gdivmod.
1985 inline
1987 {
1989 {
1990 return atermpp::down_cast<function_symbol>(e) == generalised_divmod();
1991 }
1992 return false;
1993 }
1994
1995 /// \brief Application of function symbol \@gdivmod.
1996
1997 /// \param arg0 A data expression.
1998 /// \param arg1 A data expression.
1999 /// \param arg2 A data expression.
2000 /// \return Application of \@gdivmod to a number of arguments.
2001 inline
2002 application generalised_divmod(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2003 {
2005 }
2006
2007 /// \brief Make an application of function symbol \@gdivmod.
2008 /// \param result The data expression where the \@gdivmod expression is put.
2009
2010 /// \param arg0 A data expression.
2011 /// \param arg1 A data expression.
2012 /// \param arg2 A data expression.
2013 inline
2015 {
2016 make_application(result, sort_nat::generalised_divmod(),arg0, arg1, arg2);
2017 }
2018
2019 /// \brief Recogniser for application of \@gdivmod.
2020 /// \param e A data expression.
2021 /// \return true iff e is an application of function symbol generalised_divmod to a
2022 /// number of arguments.
2023 inline
2025 {
2026 return is_application(e) && is_generalised_divmod_function_symbol(atermpp::down_cast<application>(e).head());
2027 }
2028
2029 /// \brief Generate identifier \@ggdivmod.
2030 /// \return Identifier \@ggdivmod.
2031 inline
2032 const core::identifier_string& doubly_generalised_divmod_name()
2033 {
2034 static core::identifier_string doubly_generalised_divmod_name = core::identifier_string("@ggdivmod");
2035 return doubly_generalised_divmod_name;
2036 }
2037
2038 /// \brief Constructor for function symbol \@ggdivmod.
2039
2040 /// \return Function symbol doubly_generalised_divmod.
2041 inline
2043 {
2045 return doubly_generalised_divmod;
2046 }
2047
2048 /// \brief Recogniser for function \@ggdivmod.
2049 /// \param e A data expression.
2050 /// \return true iff e is the function symbol matching \@ggdivmod.
2051 inline
2053 {
2055 {
2056 return atermpp::down_cast<function_symbol>(e) == doubly_generalised_divmod();
2057 }
2058 return false;
2059 }
2060
2061 /// \brief Application of function symbol \@ggdivmod.
2062
2063 /// \param arg0 A data expression.
2064 /// \param arg1 A data expression.
2065 /// \param arg2 A data expression.
2066 /// \return Application of \@ggdivmod to a number of arguments.
2067 inline
2068 application doubly_generalised_divmod(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2069 {
2071 }
2072
2073 /// \brief Make an application of function symbol \@ggdivmod.
2074 /// \param result The data expression where the \@ggdivmod expression is put.
2075
2076 /// \param arg0 A data expression.
2077 /// \param arg1 A data expression.
2078 /// \param arg2 A data expression.
2079 inline
2081 {
2082 make_application(result, sort_nat::doubly_generalised_divmod(),arg0, arg1, arg2);
2083 }
2084
2085 /// \brief Recogniser for application of \@ggdivmod.
2086 /// \param e A data expression.
2087 /// \return true iff e is an application of function symbol doubly_generalised_divmod to a
2088 /// number of arguments.
2089 inline
2091 {
2092 return is_application(e) && is_doubly_generalised_divmod_function_symbol(atermpp::down_cast<application>(e).head());
2093 }
2094 /// \brief Give all system defined mappings for nat
2095 /// \return All system defined mappings for nat
2096 inline
2098 {
2099 function_symbol_vector result;
2100 result.push_back(sort_nat::pos2nat());
2101 result.push_back(sort_nat::nat2pos());
2102 result.push_back(sort_nat::maximum(sort_pos::pos(), nat()));
2103 result.push_back(sort_nat::maximum(nat(), sort_pos::pos()));
2104 result.push_back(sort_nat::maximum(nat(), nat()));
2105 result.push_back(sort_nat::minimum(nat(), nat()));
2106 result.push_back(sort_nat::succ(nat()));
2107 result.push_back(sort_nat::pred());
2108 result.push_back(sort_nat::dub());
2109 result.push_back(sort_nat::dubsucc());
2110 result.push_back(sort_nat::plus(sort_pos::pos(), nat()));
2111 result.push_back(sort_nat::plus(nat(), sort_pos::pos()));
2112 result.push_back(sort_nat::plus(nat(), nat()));
2113 result.push_back(sort_nat::gte_subtract_with_borrow());
2114 result.push_back(sort_nat::times(nat(), nat()));
2115 result.push_back(sort_nat::div());
2116 result.push_back(sort_nat::mod());
2117 result.push_back(sort_nat::exp(sort_pos::pos(), nat()));
2118 result.push_back(sort_nat::exp(nat(), nat()));
2119 result.push_back(sort_nat::even());
2120 result.push_back(sort_nat::monus());
2121 result.push_back(sort_nat::swap_zero());
2122 result.push_back(sort_nat::swap_zero_add());
2123 result.push_back(sort_nat::swap_zero_min());
2124 result.push_back(sort_nat::swap_zero_monus());
2125 result.push_back(sort_nat::sqrt());
2126 result.push_back(sort_nat::sqrt_nat_aux_func());
2127 result.push_back(sort_nat::first());
2128 result.push_back(sort_nat::last());
2129 result.push_back(sort_nat::divmod());
2130 result.push_back(sort_nat::generalised_divmod());
2131 result.push_back(sort_nat::doubly_generalised_divmod());
2132 return result;
2133 }
2134
2135 /// \brief Give all system defined mappings and constructors for nat
2136 /// \return All system defined mappings for nat
2137 inline
2139 {
2140 function_symbol_vector result=nat_generate_functions_code();
2141 for(const function_symbol& f: nat_generate_constructors_code())
2142 {
2143 result.push_back(f);
2144 }
2145 return result;
2146 }
2147
2148 /// \brief Give all system defined mappings that can be used in mCRL2 specs for nat
2149 /// \return All system defined mappings for that can be used in mCRL2 specificationis nat
2150 inline
2152 {
2153 function_symbol_vector result;
2154 result.push_back(sort_nat::pos2nat());
2155 result.push_back(sort_nat::nat2pos());
2156 result.push_back(sort_nat::maximum(sort_pos::pos(), nat()));
2157 result.push_back(sort_nat::maximum(nat(), sort_pos::pos()));
2158 result.push_back(sort_nat::maximum(nat(), nat()));
2159 result.push_back(sort_nat::minimum(nat(), nat()));
2160 result.push_back(sort_nat::succ(nat()));
2161 result.push_back(sort_nat::pred());
2162 result.push_back(sort_nat::dub());
2163 result.push_back(sort_nat::dubsucc());
2164 result.push_back(sort_nat::plus(sort_pos::pos(), nat()));
2165 result.push_back(sort_nat::plus(nat(), sort_pos::pos()));
2166 result.push_back(sort_nat::plus(nat(), nat()));
2167 result.push_back(sort_nat::gte_subtract_with_borrow());
2168 result.push_back(sort_nat::times(nat(), nat()));
2169 result.push_back(sort_nat::div());
2170 result.push_back(sort_nat::mod());
2171 result.push_back(sort_nat::exp(sort_pos::pos(), nat()));
2172 result.push_back(sort_nat::exp(nat(), nat()));
2173 result.push_back(sort_nat::even());
2174 result.push_back(sort_nat::monus());
2175 result.push_back(sort_nat::swap_zero());
2176 result.push_back(sort_nat::swap_zero_add());
2177 result.push_back(sort_nat::swap_zero_min());
2178 result.push_back(sort_nat::swap_zero_monus());
2179 result.push_back(sort_nat::sqrt());
2180 result.push_back(sort_nat::sqrt_nat_aux_func());
2181 result.push_back(sort_nat::first());
2182 result.push_back(sort_nat::last());
2183 result.push_back(sort_nat::divmod());
2184 result.push_back(sort_nat::generalised_divmod());
2185 result.push_back(sort_nat::doubly_generalised_divmod());
2186 return result;
2187 }
2188
2189
2190 // 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
2192 /// \brief Give all system defined mappings that are to be implemented in C++ code for nat
2193 /// \return A mapping from C++ implementable function symbols to system defined mappings implemented in C++ code for nat
2194 inline
2196 {
2197 implementation_map result;
2198 return result;
2199 }
2200 ///\brief Function for projecting out argument.
2201 /// arg from an application.
2202 /// \param e A data expression.
2203 /// \pre arg is defined for e.
2204 /// \return The argument of e that corresponds to arg.
2205 inline
2207 {
2209 return atermpp::down_cast<application>(e)[0];
2210 }
2211
2212 ///\brief Function for projecting out argument.
2213 /// arg1 from an application.
2214 /// \param e A data expression.
2215 /// \pre arg1 is defined for e.
2216 /// \return The argument of e that corresponds to arg1.
2217 inline
2219 {
2221 return atermpp::down_cast<application>(e)[0];
2222 }
2223
2224 ///\brief Function for projecting out argument.
2225 /// arg2 from an application.
2226 /// \param e A data expression.
2227 /// \pre arg2 is defined for e.
2228 /// \return The argument of e that corresponds to arg2.
2229 inline
2231 {
2233 return atermpp::down_cast<application>(e)[1];
2234 }
2235
2236 ///\brief Function for projecting out argument.
2237 /// left from an application.
2238 /// \param e A data expression.
2239 /// \pre left is defined for e.
2240 /// \return The argument of e that corresponds to left.
2241 inline
2243 {
2245 return atermpp::down_cast<application>(e)[0];
2246 }
2247
2248 ///\brief Function for projecting out argument.
2249 /// right from an application.
2250 /// \param e A data expression.
2251 /// \pre right is defined for e.
2252 /// \return The argument of e that corresponds to right.
2253 inline
2255 {
2257 return atermpp::down_cast<application>(e)[1];
2258 }
2259
2260 ///\brief Function for projecting out argument.
2261 /// arg3 from an application.
2262 /// \param e A data expression.
2263 /// \pre arg3 is defined for e.
2264 /// \return The argument of e that corresponds to arg3.
2265 inline
2267 {
2269 return atermpp::down_cast<application>(e)[2];
2270 }
2271
2272 ///\brief Function for projecting out argument.
2273 /// arg4 from an application.
2274 /// \param e A data expression.
2275 /// \pre arg4 is defined for e.
2276 /// \return The argument of e that corresponds to arg4.
2277 inline
2279 {
2281 return atermpp::down_cast<application>(e)[3];
2282 }
2283
2284 /// \brief Give all system defined equations for nat
2285 /// \return All system defined equations for sort nat
2286 inline
2288 {
2291 variable vp("p",sort_pos::pos());
2292 variable vq("q",sort_pos::pos());
2293 variable vn("n",nat());
2294 variable vm("m",nat());
2295 variable vu("u",nat());
2296 variable vv("v",nat());
2297
2298 data_equation_vector result;
2299 result.emplace_back(variable_list({vp}), equal_to(c0(), cnat(vp)), sort_bool::false_());
2300 result.emplace_back(variable_list({vp}), equal_to(cnat(vp), c0()), sort_bool::false_());
2301 result.emplace_back(variable_list({vp, vq}), equal_to(cnat(vp), cnat(vq)), equal_to(vp, vq));
2302 result.emplace_back(variable_list({vn}), less(vn, c0()), sort_bool::false_());
2303 result.emplace_back(variable_list({vp}), less(c0(), cnat(vp)), sort_bool::true_());
2304 result.emplace_back(variable_list({vp, vq}), less(cnat(vp), cnat(vq)), less(vp, vq));
2305 result.emplace_back(variable_list({vn}), less_equal(c0(), vn), sort_bool::true_());
2306 result.emplace_back(variable_list({vp}), less_equal(cnat(vp), c0()), sort_bool::false_());
2307 result.emplace_back(variable_list({vp, vq}), less_equal(cnat(vp), cnat(vq)), less_equal(vp, vq));
2308 result.emplace_back(variable_list({vp}), pos2nat(vp), cnat(vp));
2309 result.emplace_back(variable_list({vp}), nat2pos(cnat(vp)), vp);
2310 result.emplace_back(variable_list({vp}), maximum(vp, c0()), vp);
2311 result.emplace_back(variable_list({vp, vq}), maximum(vp, cnat(vq)), if_(less_equal(vp, vq), vq, vp));
2312 result.emplace_back(variable_list({vp}), maximum(c0(), vp), vp);
2313 result.emplace_back(variable_list({vp, vq}), maximum(cnat(vp), vq), if_(less_equal(vp, vq), vq, vp));
2314 result.emplace_back(variable_list({vm, vn}), maximum(vm, vn), if_(less_equal(vm, vn), vn, vm));
2315 result.emplace_back(variable_list({vm, vn}), minimum(vm, vn), if_(less_equal(vm, vn), vm, vn));
2316 result.emplace_back(variable_list(), succ(c0()), sort_pos::c1());
2317 result.emplace_back(variable_list({vp}), succ(cnat(vp)), succ(vp));
2318 result.emplace_back(variable_list(), pred(sort_pos::c1()), c0());
2319 result.emplace_back(variable_list({vb, vp}), pred(sort_pos::cdub(vb, vp)), cnat(if_(vb, sort_pos::cdub(sort_bool::false_(), vp), dubsucc(pred(vp)))));
2320 result.emplace_back(variable_list(), dubsucc(c0()), sort_pos::c1());
2321 result.emplace_back(variable_list({vp}), dubsucc(cnat(vp)), sort_pos::cdub(sort_bool::true_(), vp));
2322 result.emplace_back(variable_list(), dub(sort_bool::false_(), c0()), c0());
2323 result.emplace_back(variable_list(), dub(sort_bool::true_(), c0()), cnat(sort_pos::c1()));
2324 result.emplace_back(variable_list({vb, vp}), dub(vb, cnat(vp)), cnat(sort_pos::cdub(vb, vp)));
2325 result.emplace_back(variable_list({vp}), plus(vp, c0()), vp);
2326 result.emplace_back(variable_list({vp, vq}), plus(vp, cnat(vq)), sort_pos::add_with_carry(sort_bool::false_(), vp, vq));
2327 result.emplace_back(variable_list({vp}), plus(c0(), vp), vp);
2328 result.emplace_back(variable_list({vp, vq}), plus(cnat(vp), vq), sort_pos::add_with_carry(sort_bool::false_(), vp, vq));
2329 result.emplace_back(variable_list({vn}), plus(c0(), vn), vn);
2330 result.emplace_back(variable_list({vn}), plus(vn, c0()), vn);
2331 result.emplace_back(variable_list({vp, vq}), plus(cnat(vp), cnat(vq)), cnat(sort_pos::add_with_carry(sort_bool::false_(), vp, vq)));
2332 result.emplace_back(variable_list({vp}), gte_subtract_with_borrow(sort_bool::false_(), vp, sort_pos::c1()), pred(vp));
2333 result.emplace_back(variable_list({vp}), gte_subtract_with_borrow(sort_bool::true_(), vp, sort_pos::c1()), pred(nat2pos(pred(vp))));
2334 result.emplace_back(variable_list({vb, vc, vp, vq}), gte_subtract_with_borrow(vb, sort_pos::cdub(vc, vp), sort_pos::cdub(vc, vq)), dub(vb, gte_subtract_with_borrow(vb, vp, vq)));
2335 result.emplace_back(variable_list({vb, vp, vq}), gte_subtract_with_borrow(vb, sort_pos::cdub(sort_bool::false_(), vp), sort_pos::cdub(sort_bool::true_(), vq)), dub(sort_bool::not_(vb), gte_subtract_with_borrow(sort_bool::true_(), vp, vq)));
2336 result.emplace_back(variable_list({vb, vp, vq}), gte_subtract_with_borrow(vb, sort_pos::cdub(sort_bool::true_(), vp), sort_pos::cdub(sort_bool::false_(), vq)), dub(sort_bool::not_(vb), gte_subtract_with_borrow(sort_bool::false_(), vp, vq)));
2337 result.emplace_back(variable_list({vn}), times(c0(), vn), c0());
2338 result.emplace_back(variable_list({vn}), times(vn, c0()), c0());
2339 result.emplace_back(variable_list({vp, vq}), times(cnat(vp), cnat(vq)), cnat(times(vp, vq)));
2340 result.emplace_back(variable_list({vp}), exp(vp, c0()), sort_pos::c1());
2341 result.emplace_back(variable_list({vp}), exp(vp, cnat(sort_pos::c1())), vp);
2342 result.emplace_back(variable_list({vp, vq}), exp(vp, cnat(sort_pos::cdub(sort_bool::false_(), vq))), exp(times(vp, vp), cnat(vq)));
2343 result.emplace_back(variable_list({vp, vq}), exp(vp, cnat(sort_pos::cdub(sort_bool::true_(), vq))), times(vp, exp(times(vp, vp), cnat(vq))));
2344 result.emplace_back(variable_list({vn}), exp(vn, c0()), cnat(sort_pos::c1()));
2345 result.emplace_back(variable_list({vp}), exp(c0(), cnat(vp)), c0());
2346 result.emplace_back(variable_list({vn, vp}), exp(cnat(vp), vn), cnat(exp(vp, vn)));
2347 result.emplace_back(variable_list(), even(c0()), sort_bool::true_());
2348 result.emplace_back(variable_list(), even(cnat(sort_pos::c1())), sort_bool::false_());
2349 result.emplace_back(variable_list({vb, vp}), even(cnat(sort_pos::cdub(vb, vp))), sort_bool::not_(vb));
2350 result.emplace_back(variable_list({vp}), div(c0(), vp), c0());
2351 result.emplace_back(variable_list({vp, vq}), div(cnat(vp), vq), first(divmod(vp, vq)));
2352 result.emplace_back(variable_list({vp}), mod(c0(), vp), c0());
2353 result.emplace_back(variable_list({vp, vq}), mod(cnat(vp), vq), last(divmod(vp, vq)));
2354 result.emplace_back(variable_list({vn}), monus(c0(), vn), c0());
2355 result.emplace_back(variable_list({vn}), monus(vn, c0()), vn);
2356 result.emplace_back(variable_list({vp, vq}), monus(cnat(vp), cnat(vq)), gte_subtract_with_borrow(sort_bool::false_(), vp, vq));
2357 result.emplace_back(variable_list({vm}), swap_zero(vm, c0()), vm);
2358 result.emplace_back(variable_list({vn}), swap_zero(c0(), vn), vn);
2359 result.emplace_back(variable_list({vp}), swap_zero(cnat(vp), cnat(vp)), c0());
2360 result.emplace_back(variable_list({vp, vq}), not_equal_to(vp, vq), swap_zero(cnat(vp), cnat(vq)), cnat(vq));
2361 result.emplace_back(variable_list({vm, vn}), swap_zero_add(c0(), c0(), vm, vn), plus(vm, vn));
2362 result.emplace_back(variable_list({vm, vp}), swap_zero_add(cnat(vp), c0(), vm, c0()), vm);
2363 result.emplace_back(variable_list({vm, vp, vq}), swap_zero_add(cnat(vp), c0(), vm, cnat(vq)), swap_zero(cnat(vp), plus(swap_zero(cnat(vp), vm), cnat(vq))));
2364 result.emplace_back(variable_list({vn, vp}), swap_zero_add(c0(), cnat(vp), c0(), vn), vn);
2365 result.emplace_back(variable_list({vn, vp, vq}), swap_zero_add(c0(), cnat(vp), cnat(vq), vn), swap_zero(cnat(vp), plus(cnat(vq), swap_zero(cnat(vp), vn))));
2366 result.emplace_back(variable_list({vm, vn, vp, vq}), swap_zero_add(cnat(vp), cnat(vq), vm, vn), swap_zero(plus(cnat(vp), cnat(vq)), plus(swap_zero(cnat(vp), vm), swap_zero(cnat(vq), vn))));
2367 result.emplace_back(variable_list({vm, vn}), swap_zero_min(c0(), c0(), vm, vn), minimum(vm, vn));
2368 result.emplace_back(variable_list({vm, vp}), swap_zero_min(cnat(vp), c0(), vm, c0()), c0());
2369 result.emplace_back(variable_list({vm, vp, vq}), swap_zero_min(cnat(vp), c0(), vm, cnat(vq)), minimum(swap_zero(cnat(vp), vm), cnat(vq)));
2370 result.emplace_back(variable_list({vn, vp}), swap_zero_min(c0(), cnat(vp), c0(), vn), c0());
2371 result.emplace_back(variable_list({vn, vp, vq}), swap_zero_min(c0(), cnat(vp), cnat(vq), vn), minimum(cnat(vq), swap_zero(cnat(vp), vn)));
2372 result.emplace_back(variable_list({vm, vn, vp, vq}), swap_zero_min(cnat(vp), cnat(vq), vm, vn), swap_zero(minimum(cnat(vp), cnat(vq)), minimum(swap_zero(cnat(vp), vm), swap_zero(cnat(vq), vn))));
2373 result.emplace_back(variable_list({vm, vn}), swap_zero_monus(c0(), c0(), vm, vn), monus(vm, vn));
2374 result.emplace_back(variable_list({vm, vp}), swap_zero_monus(cnat(vp), c0(), vm, c0()), vm);
2375 result.emplace_back(variable_list({vm, vp, vq}), swap_zero_monus(cnat(vp), c0(), vm, cnat(vq)), swap_zero(cnat(vp), monus(swap_zero(cnat(vp), vm), cnat(vq))));
2376 result.emplace_back(variable_list({vn, vp}), swap_zero_monus(c0(), cnat(vp), c0(), vn), c0());
2377 result.emplace_back(variable_list({vn, vp, vq}), swap_zero_monus(c0(), cnat(vp), cnat(vq), vn), monus(cnat(vq), swap_zero(cnat(vp), vn)));
2378 result.emplace_back(variable_list({vm, vn, vp, vq}), swap_zero_monus(cnat(vp), cnat(vq), vm, vn), swap_zero(monus(cnat(vp), cnat(vq)), monus(swap_zero(cnat(vp), vm), swap_zero(cnat(vq), vn))));
2379 result.emplace_back(variable_list(), sqrt(c0()), c0());
2380 result.emplace_back(variable_list({vp}), sqrt(cnat(vp)), sqrt_nat_aux_func(cnat(vp), c0(), sort_pos::powerlog2_pos(vp)));
2381 result.emplace_back(variable_list({vm, vn}), sqrt_nat_aux_func(vn, vm, sort_pos::c1()), if_(less_equal(vn, vm), c0(), cnat(sort_pos::c1())));
2382 result.emplace_back(variable_list({vb, vm, vn, vp}), sqrt_nat_aux_func(vn, vm, sort_pos::cdub(vb, vp)), if_(greater(times(plus(cnat(sort_pos::cdub(vb, vp)), vm), cnat(sort_pos::cdub(vb, vp))), vn), sqrt_nat_aux_func(vn, vm, vp), plus(cnat(sort_pos::cdub(vb, vp)), sqrt_nat_aux_func(monus(vn, times(plus(cnat(sort_pos::cdub(vb, vp)), vm), cnat(sort_pos::cdub(vb, vp)))), plus(vm, cnat(sort_pos::cdub(sort_bool::false_(), sort_pos::cdub(vb, vp)))), vp))));
2383 result.emplace_back(variable_list({vm, vn, vu, vv}), equal_to(cpair(vm, vn), cpair(vu, vv)), sort_bool::and_(equal_to(vm, vu), equal_to(vn, vv)));
2384 result.emplace_back(variable_list({vm, vn, vu, vv}), less(cpair(vm, vn), cpair(vu, vv)), sort_bool::or_(less(vm, vu), sort_bool::and_(equal_to(vm, vu), less(vn, vv))));
2385 result.emplace_back(variable_list({vm, vn, vu, vv}), less_equal(cpair(vm, vn), cpair(vu, vv)), sort_bool::or_(less(vm, vu), sort_bool::and_(equal_to(vm, vu), less_equal(vn, vv))));
2386 result.emplace_back(variable_list({vm, vn}), first(cpair(vm, vn)), vm);
2387 result.emplace_back(variable_list({vm, vn}), last(cpair(vm, vn)), vn);
2388 result.emplace_back(variable_list(), divmod(sort_pos::c1(), sort_pos::c1()), cpair(cnat(sort_pos::c1()), c0()));
2389 result.emplace_back(variable_list({vb, vp}), divmod(sort_pos::c1(), sort_pos::cdub(vb, vp)), cpair(c0(), cnat(sort_pos::c1())));
2390 result.emplace_back(variable_list({vb, vp, vq}), divmod(sort_pos::cdub(vb, vp), vq), generalised_divmod(divmod(vp, vq), vb, vq));
2391 result.emplace_back(variable_list({vb, vm, vn, vp}), generalised_divmod(cpair(vm, vn), vb, vp), doubly_generalised_divmod(dub(vb, vn), vm, vp));
2392 result.emplace_back(variable_list({vn, vp}), doubly_generalised_divmod(c0(), vn, vp), cpair(dub(sort_bool::false_(), vn), c0()));
2393 result.emplace_back(variable_list({vn, vp, vq}), less(vp, vq), doubly_generalised_divmod(cnat(vp), vn, vq), cpair(dub(sort_bool::false_(), vn), cnat(vp)));
2394 result.emplace_back(variable_list({vn, vp, vq}), less_equal(vq, vp), doubly_generalised_divmod(cnat(vp), vn, vq), cpair(dub(sort_bool::true_(), vn), gte_subtract_with_borrow(sort_bool::false_(), vp, vq)));
2395 return result;
2396 }
2397
2398} // namespace mcrl2::data::sort_nat
2399
2400#endif // MCRL2_DATA_NAT1_H
aterm & operator=(const aterm &other) noexcept=default
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
singleton_expression & operator=(singleton_expression &&)=delete
singleton_expression & operator=(const singleton_expression &)=delete
singleton_expression(singleton_expression &&)=delete
singleton_expression(const singleton_expression &)=delete
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
abstraction(const atermpp::aterm &term)
Constructor.
Definition abstraction.h:32
abstraction(const binder_type &binding_operator, const variable_list &variables, const data_expression &body)
Constructor.
Definition abstraction.h:39
abstraction(const abstraction &) noexcept=default
Move semantics.
abstraction(const binder_type &binding_operator, const Container &variables, const data_expression &body, typename atermpp::enable_if_container< Container, variable >::type *=nullptr)
Constructor.
Definition abstraction.h:45
abstraction & operator=(abstraction &&) noexcept=default
const data_expression & body() const
Definition abstraction.h:65
abstraction(abstraction &&) noexcept=default
abstraction()
Default constructor.
Definition abstraction.h:26
const binder_type & binding_operator() const
Definition abstraction.h:55
abstraction & operator=(const abstraction &) noexcept=default
\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
\brief Binder for bag comprehension
bag_comprehension_binder(const atermpp::aterm &term)
bag_comprehension_binder & operator=(const bag_comprehension_binder &) noexcept=default
bag_comprehension_binder(const bag_comprehension_binder &) noexcept=default
Move semantics.
bag_comprehension_binder()
\brief Default constructor X3.
bag_comprehension_binder(bag_comprehension_binder &&) noexcept=default
bag_comprehension_binder & operator=(bag_comprehension_binder &&) noexcept=default
universal quantification.
\brief Container type for bags
bag_container(const bag_container &) noexcept=default
Move semantics.
bag_container(bag_container &&) noexcept=default
bag_container & operator=(bag_container &&) noexcept=default
bag_container()
\brief Default constructor X3.
bag_container(const atermpp::aterm &term)
bag_container & operator=(const bag_container &) noexcept=default
\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
binder_type()
\brief Default constructor X3.
Definition binder_type.h:27
binder_type(binder_type &&) noexcept=default
binder_type & operator=(const binder_type &) noexcept=default
binder_type & operator=(binder_type &&) noexcept=default
binder_type(const binder_type &) noexcept=default
Move semantics.
binder_type(const atermpp::aterm &term)
Definition binder_type.h:33
\brief A container sort
container_sort()
\brief Default constructor X3.
container_sort & operator=(container_sort &&) noexcept=default
container_sort(const container_sort &) noexcept=default
Move semantics.
container_sort(const container_type &container_name, const sort_expression &element_sort)
\brief Constructor Z14.
container_sort(container_sort &&) noexcept=default
container_sort & operator=(const container_sort &) noexcept=default
const container_type & container_name() const
const sort_expression & element_sort() const
container_sort(const atermpp::aterm &term)
\brief Container type
container_type(container_type &&) noexcept=default
container_type(const atermpp::aterm &term)
container_type & operator=(const container_type &) noexcept=default
container_type & operator=(container_type &&) noexcept=default
container_type(const container_type &) noexcept=default
Move semantics.
container_type()
\brief Default constructor X3.
\brief A data equation
data_equation(const atermpp::aterm &term)
data_equation()
\brief Default constructor X3.
const data_expression & lhs() const
const data_expression & condition() const
data_equation & operator=(data_equation &&) noexcept=default
data_equation(const Container &variables, const data_expression &lhs, const data_expression &rhs, typename atermpp::enable_if_container< Container, variable >::type *=nullptr)
Constructor.
const data_expression & rhs() const
data_equation(data_equation &&) noexcept=default
data_equation(const variable_list &variables, const data_expression &condition, const data_expression &lhs, const data_expression &rhs)
\brief Constructor Z12.
const variable_list & variables() const
data_equation & operator=(const data_equation &) noexcept=default
data_equation(const data_expression &lhs, const data_expression &rhs)
Constructor.
data_expression & operator=(const data_expression &) noexcept=default
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 data_expression &e3) const
Apply a data expression to three data expressions.
data_expression(const atermpp::aterm &term)
data_expression()
\brief Default constructor X3.
application operator()(const data_expression &e1, const data_expression &e2) const
Apply a data expression to two data expressions.
data_expression & operator=(data_expression &&) noexcept=default
sort_expression sort() const
Returns the sort of the data expression.
Definition data.cpp:107
const_iterator end() const
application operator()(const data_expression &e) const
Apply a data expression to a data expression.
data_expression(const data_expression &) noexcept=default
Move semantics.
data_expression(data_expression &&) noexcept=default
const_iterator begin() const
bool is_default_data_expression() const
A function to efficiently determine whether a data expression is made by the default constructor.
application operator()(const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4, const data_expression &e5) const
Apply a data expression to five data expressions.
application operator()(const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4, const data_expression &e5, const data_expression &e6) const
Apply a data expression to six data expressions.
\brief Binder for existential quantification
exists_binder(const exists_binder &) noexcept=default
Move semantics.
exists_binder & operator=(exists_binder &&) noexcept=default
exists_binder(exists_binder &&) noexcept=default
exists_binder & operator=(const exists_binder &) noexcept=default
exists_binder()
\brief Default constructor X3.
exists_binder(const atermpp::aterm &term)
existential quantification.
Definition exists.h:23
\brief Container type for finite bags
fbag_container & operator=(const fbag_container &) noexcept=default
fbag_container()
\brief Default constructor X3.
fbag_container(const fbag_container &) noexcept=default
Move semantics.
fbag_container & operator=(fbag_container &&) noexcept=default
fbag_container(const atermpp::aterm &term)
fbag_container(fbag_container &&) noexcept=default
\brief Binder for universal quantification
forall_binder(const forall_binder &) noexcept=default
Move semantics.
forall_binder & operator=(forall_binder &&) noexcept=default
forall_binder(const atermpp::aterm &term)
forall_binder()
\brief Default constructor X3.
forall_binder(forall_binder &&) noexcept=default
forall_binder & operator=(const forall_binder &) noexcept=default
universal quantification.
Definition forall.h:25
forall(forall &&) noexcept=default
forall(const aterm &d)
Definition forall.h:33
forall & operator=(const forall &) noexcept=default
forall(const Container &variables, const data_expression &body, typename atermpp::enable_if_container< Container, variable >::type *=nullptr)
Definition forall.h:46
forall & operator=(forall &&) noexcept=default
forall(const forall &) noexcept=default
Move semantics.
\brief Container type for finite sets
fset_container(fset_container &&) noexcept=default
fset_container(const fset_container &) noexcept=default
Move semantics.
fset_container(const atermpp::aterm &term)
fset_container()
\brief Default constructor X3.
fset_container & operator=(fset_container &&) noexcept=default
fset_container & operator=(const fset_container &) noexcept=default
\brief A function sort
const sort_expression & codomain() const
function_sort()
\brief Default constructor X3.
function_sort(const sort_expression_list &domain, const sort_expression &codomain)
\brief Constructor Z14.
function_sort & operator=(const function_sort &) noexcept=default
function_sort(const atermpp::aterm &term)
function_sort & operator=(function_sort &&) noexcept=default
function_sort(function_sort &&) noexcept=default
const sort_expression_list & domain() const
\brief A function symbol
function_symbol(const core::identifier_string &name, const sort_expression &sort)
Constructor.
function_symbol(const function_symbol &) noexcept=default
Move semantics.
function_symbol & operator=(function_symbol &&) noexcept=default
function_symbol()
Default constructor.
function_symbol(function_symbol &&) noexcept=default
function_symbol(const atermpp::aterm &term)
Constructor.
const core::identifier_string & name() const
const sort_expression & sort() const
function_symbol & operator=(const function_symbol &) noexcept=default
function_symbol(const std::string &name, const sort_expression &sort)
Constructor.
\brief Binder for lambda abstraction
lambda_binder & operator=(lambda_binder &&) noexcept=default
lambda_binder(const atermpp::aterm &term)
lambda_binder()
\brief Default constructor X3.
lambda_binder(lambda_binder &&) noexcept=default
lambda_binder & operator=(const lambda_binder &) noexcept=default
lambda_binder(const lambda_binder &) noexcept=default
Move semantics.
function symbol.
Definition lambda.h:24
\brief Container type for lists
list_container(list_container &&) noexcept=default
list_container()
\brief Default constructor X3.
list_container & operator=(list_container &&) noexcept=default
list_container & operator=(const list_container &) noexcept=default
list_container(const list_container &) noexcept=default
Move semantics.
list_container(const atermpp::aterm &term)
\brief A machine number
\brief Binder for set comprehension
set_comprehension_binder(const atermpp::aterm &term)
set_comprehension_binder & operator=(set_comprehension_binder &&) noexcept=default
set_comprehension_binder & operator=(const set_comprehension_binder &) noexcept=default
set_comprehension_binder()
\brief Default constructor X3.
set_comprehension_binder(set_comprehension_binder &&) noexcept=default
set_comprehension_binder(const set_comprehension_binder &) noexcept=default
Move semantics.
universal quantification.
\brief Container type for sets
set_container()
\brief Default constructor X3.
set_container(const set_container &) noexcept=default
Move semantics.
set_container(set_container &&) noexcept=default
set_container & operator=(set_container &&) noexcept=default
set_container & operator=(const set_container &) noexcept=default
set_container(const atermpp::aterm &term)
\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 Binder for untyped set or bag comprehension
Definition binder_type.h:74
untyped_set_or_bag_comprehension_binder(untyped_set_or_bag_comprehension_binder &&) noexcept=default
untyped_set_or_bag_comprehension_binder(const atermpp::aterm &term)
Definition binder_type.h:83
untyped_set_or_bag_comprehension_binder()
\brief Default constructor X3.
Definition binder_type.h:77
untyped_set_or_bag_comprehension_binder(const untyped_set_or_bag_comprehension_binder &) noexcept=default
Move semantics.
untyped_set_or_bag_comprehension_binder & operator=(const untyped_set_or_bag_comprehension_binder &) noexcept=default
untyped_set_or_bag_comprehension_binder & operator=(untyped_set_or_bag_comprehension_binder &&) noexcept=default
\brief Unknown sort expression
untyped_sort & operator=(const untyped_sort &) noexcept=default
untyped_sort(const atermpp::aterm &term)
untyped_sort(const untyped_sort &) noexcept=default
Move semantics.
untyped_sort & operator=(untyped_sort &&) noexcept=default
untyped_sort(untyped_sort &&) noexcept=default
untyped_sort()
\brief Default constructor X3.
\brief A data variable
Definition variable.h:25
variable(const variable &) noexcept=default
Move semantics.
variable(const std::string &name, const sort_expression &sort)
Constructor.
Definition variable.h:66
variable(variable &&) noexcept=default
variable()
Default constructor.
Definition variable.h:46
const core::identifier_string & name() const
Definition variable.h:35
variable & operator=(variable &&) noexcept=default
const sort_expression & sort() const
Definition variable.h:40
variable & operator=(const variable &) noexcept=default
variable(const core::identifier_string &name, const sort_expression &sort)
Constructor.
Definition variable.h:59
variable(const atermpp::aterm &term)
Constructor.
Definition variable.h:52
\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:393
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 gsIsDataAppl_no_check(const atermpp::aterm &Term)
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:223
data_specification parse_data_specification_new(const std::string &text)
Definition data.cpp:234
variable_list parse_variable_declaration_list(const std::string &text)
Definition data.cpp:245
variable_list parse_variables(const std::string &text)
Definition data.cpp:212
sort_expression parse_sort_expression(const std::string &text)
Definition data.cpp:202
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
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 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
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
bool is_bool(const sort_expression &e)
Recogniser for sort expression Bool.
Definition bool.h:51
const basic_sort & bool_()
Constructor for sort expression Bool.
Definition bool.h:41
application not_(const data_expression &arg0)
Application of function symbol !.
Definition bool.h:194
application and_(const data_expression &arg0, const data_expression &arg1)
Application of function symbol &&.
Definition bool.h:257
const function_symbol & false_()
Constructor for function symbol false.
Definition bool.h:106
const function_symbol & true_()
Constructor for function symbol true.
Definition bool.h:74
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 core::identifier_string & succ_name()
Generate identifier succ.
Definition nat1.h:573
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
Definition nat1.h:2254
application cpair(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @cPair.
Definition nat1.h:224
bool is_cpair_application(const atermpp::aterm &e)
Recogniser for application of @cPair.
Definition nat1.h:245
void make_plus(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol +.
Definition nat1.h:890
const function_symbol & generalised_divmod()
Constructor for function symbol @gdivmod.
Definition nat1.h:1976
function_symbol maximum(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:419
const core::identifier_string & sqrt_nat_aux_func_name()
Generate identifier @sqrt_nat.
Definition nat1.h:1712
bool is_pos2nat_function_symbol(const atermpp::aterm &e)
Recogniser for function Pos2Nat.
Definition nat1.h:307
function_symbol succ(const sort_expression &s0)
Definition nat1.h:581
const function_symbol & monus()
Constructor for function symbol @monus.
Definition nat1.h:1328
void make_sqrt(data_expression &result, const data_expression &arg0)
Make an application of function symbol sqrt.
Definition nat1.h:1694
void make_generalised_divmod(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @gdivmod.
Definition nat1.h:2014
bool is_gte_subtract_with_borrow_function_symbol(const atermpp::aterm &e)
Recogniser for function @gtesubtb.
Definition nat1.h:928
const function_symbol & c0()
Constructor for function symbol @c0.
Definition nat1.h:105
bool is_swap_zero_add_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_add.
Definition nat1.h:1506
void make_dub(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @dub.
Definition nat1.h:743
void make_div(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol div.
Definition nat1.h:1097
application sqrt_nat_aux_func(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @sqrt_nat.
Definition nat1.h:1748
const core::identifier_string & maximum_name()
Generate identifier max.
Definition nat1.h:411
void make_mod(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol mod.
Definition nat1.h:1161
application generalised_divmod(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @gdivmod.
Definition nat1.h:2002
bool is_swap_zero_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero.
Definition nat1.h:1402
bool is_cnat_application(const atermpp::aterm &e)
Recogniser for application of @cNat.
Definition nat1.h:181
const core::identifier_string & mod_name()
Generate identifier mod.
Definition nat1.h:1115
const function_symbol & gte_subtract_with_borrow()
Constructor for function symbol @gtesubtb.
Definition nat1.h:918
bool is_generalised_divmod_application(const atermpp::aterm &e)
Recogniser for application of @gdivmod.
Definition nat1.h:2024
bool is_div_application(const atermpp::aterm &e)
Recogniser for application of div.
Definition nat1.h:1107
void make_doubly_generalised_divmod(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @ggdivmod.
Definition nat1.h:2080
const core::identifier_string & swap_zero_min_name()
Generate identifier @swap_zero_min.
Definition nat1.h:1514
const function_symbol & divmod()
Constructor for function symbol @divmod.
Definition nat1.h:1912
bool is_pos2nat_application(const atermpp::aterm &e)
Recogniser for application of Pos2Nat.
Definition nat1.h:341
const function_symbol & cnat()
Constructor for function symbol @cNat.
Definition nat1.h:137
application dubsucc(const data_expression &arg0)
Application of function symbol @dubsucc.
Definition nat1.h:795
void make_pred(data_expression &result, const data_expression &arg0)
Make an application of function symbol pred.
Definition nat1.h:679
bool is_nat2pos_application(const atermpp::aterm &e)
Recogniser for application of Nat2Pos.
Definition nat1.h:403
bool is_mod_function_symbol(const atermpp::aterm &e)
Recogniser for function mod.
Definition nat1.h:1135
function_symbol exp(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:1187
application minimum(const data_expression &arg0, const data_expression &arg1)
Application of function symbol min.
Definition nat1.h:544
const core::identifier_string & times_name()
Generate identifier *.
Definition nat1.h:974
const function_symbol & dubsucc()
Constructor for function symbol @dubsucc.
Definition nat1.h:771
const function_symbol & swap_zero_add()
Constructor for function symbol @swap_zero_add.
Definition nat1.h:1456
function_symbol_vector nat_mCRL2_usable_mappings()
Give all system defined mappings that can be used in mCRL2 specs for nat.
Definition nat1.h:2151
data_equation_vector nat_generate_equations_code()
Give all system defined equations for nat.
Definition nat1.h:2287
const function_symbol & cpair()
Constructor for function symbol @cPair.
Definition nat1.h:199
const basic_sort & nat()
Constructor for sort expression Nat.
Definition nat1.h:43
const core::identifier_string & nat_name()
Definition nat1.h:34
application exp(const data_expression &arg0, const data_expression &arg1)
Application of function symbol exp.
Definition nat1.h:1227
const core::identifier_string & exp_name()
Generate identifier exp.
Definition nat1.h:1179
const function_symbol & swap_zero()
Constructor for function symbol @swap_zero.
Definition nat1.h:1392
application swap_zero(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @swap_zero.
Definition nat1.h:1417
bool is_first_function_symbol(const atermpp::aterm &e)
Recogniser for function @first.
Definition nat1.h:1798
bool is_maximum_application(const atermpp::aterm &e)
Recogniser for application of max.
Definition nat1.h:488
void make_cpair(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @cPair.
Definition nat1.h:235
implementation_map nat_cpp_implementable_constructors()
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
Definition nat1.h:278
bool is_nat(const sort_expression &e)
Recogniser for sort expression Nat.
Definition nat1.h:53
bool is_doubly_generalised_divmod_function_symbol(const atermpp::aterm &e)
Recogniser for function @ggdivmod.
Definition nat1.h:2052
bool is_plus_function_symbol(const atermpp::aterm &e)
Recogniser for function +.
Definition nat1.h:863
function_symbol_vector nat_generate_constructors_and_functions_code()
Give all system defined mappings and constructors for nat.
Definition nat1.h:2138
application sqrt(const data_expression &arg0)
Application of function symbol sqrt.
Definition nat1.h:1684
application pos2nat(const data_expression &arg0)
Application of function symbol Pos2Nat.
Definition nat1.h:321
void make_nat2pos(data_expression &result, const data_expression &arg0)
Make an application of function symbol Nat2Pos.
Definition nat1.h:393
application first(const data_expression &arg0)
Application of function symbol @first.
Definition nat1.h:1812
const core::identifier_string & plus_name()
Generate identifier +.
Definition nat1.h:823
const core::identifier_string & natpair_name()
Definition nat1.h:63
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
Definition nat1.h:2242
bool is_succ_function_symbol(const atermpp::aterm &e)
Recogniser for function succ.
Definition nat1.h:592
void make_maximum(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol max.
Definition nat1.h:478
const core::identifier_string & div_name()
Generate identifier div.
Definition nat1.h:1051
const function_symbol & mod()
Constructor for function symbol mod.
Definition nat1.h:1125
void make_monus(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @monus.
Definition nat1.h:1364
const function_symbol & sqrt()
Constructor for function symbol sqrt.
Definition nat1.h:1660
void make_dubsucc(data_expression &result, const data_expression &arg0)
Make an application of function symbol @dubsucc.
Definition nat1.h:805
application even(const data_expression &arg0)
Application of function symbol @even.
Definition nat1.h:1290
const function_symbol & doubly_generalised_divmod()
Constructor for function symbol @ggdivmod.
Definition nat1.h:2042
const function_symbol & pred()
Constructor for function symbol pred.
Definition nat1.h:645
void make_even(data_expression &result, const data_expression &arg0)
Make an application of function symbol @even.
Definition nat1.h:1300
void make_gte_subtract_with_borrow(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @gtesubtb.
Definition nat1.h:956
bool is_sqrt_nat_aux_func_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_nat.
Definition nat1.h:1732
const function_symbol & even()
Constructor for function symbol @even.
Definition nat1.h:1266
const core::identifier_string & first_name()
Generate identifier @first.
Definition nat1.h:1778
void make_swap_zero_monus(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @swap_zero_monus.
Definition nat1.h:1632
bool is_succ_application(const atermpp::aterm &e)
Recogniser for application of succ.
Definition nat1.h:627
bool is_dub_function_symbol(const atermpp::aterm &e)
Recogniser for function @dub.
Definition nat1.h:717
application cnat(const data_expression &arg0)
Application of function symbol @cNat.
Definition nat1.h:161
bool is_swap_zero_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero.
Definition nat1.h:1438
const core::identifier_string & even_name()
Generate identifier @even.
Definition nat1.h:1256
const core::identifier_string & swap_zero_name()
Generate identifier @swap_zero.
Definition nat1.h:1382
void make_pos2nat(data_expression &result, const data_expression &arg0)
Make an application of function symbol Pos2Nat.
Definition nat1.h:331
bool is_minimum_application(const atermpp::aterm &e)
Recogniser for application of min.
Definition nat1.h:565
bool is_exp_function_symbol(const atermpp::aterm &e)
Recogniser for function exp.
Definition nat1.h:1211
bool is_monus_function_symbol(const atermpp::aterm &e)
Recogniser for function @monus.
Definition nat1.h:1338
bool is_mod_application(const atermpp::aterm &e)
Recogniser for application of mod.
Definition nat1.h:1171
bool is_even_function_symbol(const atermpp::aterm &e)
Recogniser for function @even.
Definition nat1.h:1276
const core::identifier_string & pred_name()
Generate identifier pred.
Definition nat1.h:635
bool is_exp_application(const atermpp::aterm &e)
Recogniser for application of exp.
Definition nat1.h:1248
const function_symbol & swap_zero_min()
Constructor for function symbol @swap_zero_min.
Definition nat1.h:1524
function_symbol minimum(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:504
const function_symbol & sqrt_nat_aux_func()
Constructor for function symbol @sqrt_nat.
Definition nat1.h:1722
bool is_last_application(const atermpp::aterm &e)
Recogniser for application of @last.
Definition nat1.h:1894
void make_exp(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol exp.
Definition nat1.h:1238
const function_symbol & div()
Constructor for function symbol div.
Definition nat1.h:1061
application last(const data_expression &arg0)
Application of function symbol @last.
Definition nat1.h:1874
const core::identifier_string & doubly_generalised_divmod_name()
Generate identifier @ggdivmod.
Definition nat1.h:2032
void make_succ(data_expression &result, const data_expression &arg0)
Make an application of function symbol succ.
Definition nat1.h:617
bool is_maximum_function_symbol(const atermpp::aterm &e)
Recogniser for function max.
Definition nat1.h:451
bool is_gte_subtract_with_borrow_application(const atermpp::aterm &e)
Recogniser for application of @gtesubtb.
Definition nat1.h:966
bool is_swap_zero_min_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_min.
Definition nat1.h:1574
function_symbol plus(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:831
const core::identifier_string & dubsucc_name()
Generate identifier @dubsucc.
Definition nat1.h:761
bool is_first_application(const atermpp::aterm &e)
Recogniser for application of @first.
Definition nat1.h:1832
bool is_sqrt_application(const atermpp::aterm &e)
Recogniser for application of sqrt.
Definition nat1.h:1704
const function_symbol & first()
Constructor for function symbol @first.
Definition nat1.h:1788
void make_first(data_expression &result, const data_expression &arg0)
Make an application of function symbol @first.
Definition nat1.h:1822
bool is_pred_function_symbol(const atermpp::aterm &e)
Recogniser for function pred.
Definition nat1.h:655
bool is_generalised_divmod_function_symbol(const atermpp::aterm &e)
Recogniser for function @gdivmod.
Definition nat1.h:1986
application swap_zero_add(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @swap_zero_add.
Definition nat1.h:1483
void make_swap_zero_add(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @swap_zero_add.
Definition nat1.h:1496
const core::identifier_string & swap_zero_monus_name()
Generate identifier @swap_zero_monus.
Definition nat1.h:1582
application gte_subtract_with_borrow(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @gtesubtb.
Definition nat1.h:944
function_symbol_vector nat_generate_functions_code()
Give all system defined mappings for nat.
Definition nat1.h:2097
bool is_cpair_function_symbol(const atermpp::aterm &e)
Recogniser for function @cPair.
Definition nat1.h:209
application div(const data_expression &arg0, const data_expression &arg1)
Application of function symbol div.
Definition nat1.h:1086
bool is_divmod_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod.
Definition nat1.h:1922
const function_symbol & swap_zero_monus()
Constructor for function symbol @swap_zero_monus.
Definition nat1.h:1592
void make_times(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol *.
Definition nat1.h:1033
application swap_zero_min(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @swap_zero_min.
Definition nat1.h:1551
bool is_c0_function_symbol(const atermpp::aterm &e)
Recogniser for function @c0.
Definition nat1.h:115
const core::identifier_string & generalised_divmod_name()
Generate identifier @gdivmod.
Definition nat1.h:1966
application doubly_generalised_divmod(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @ggdivmod.
Definition nat1.h:2068
const function_symbol & nat2pos()
Constructor for function symbol Nat2Pos.
Definition nat1.h:359
const core::identifier_string & monus_name()
Generate identifier @monus.
Definition nat1.h:1318
application monus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @monus.
Definition nat1.h:1353
const core::identifier_string & cpair_name()
Generate identifier @cPair.
Definition nat1.h:189
const core::identifier_string & nat2pos_name()
Generate identifier Nat2Pos.
Definition nat1.h:349
const data_expression & arg3(const data_expression &e)
Function for projecting out argument. arg3 from an application.
Definition nat1.h:2266
void make_divmod(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @divmod.
Definition nat1.h:1948
application dub(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @dub.
Definition nat1.h:732
implementation_map nat_cpp_implementable_mappings()
Give all system defined mappings that are to be implemented in C++ code for nat.
Definition nat1.h:2195
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
Definition nat1.h:2230
const core::identifier_string & gte_subtract_with_borrow_name()
Generate identifier @gtesubtb.
Definition nat1.h:908
const basic_sort & natpair()
Constructor for sort expression @NatPair.
Definition nat1.h:72
application pred(const data_expression &arg0)
Application of function symbol pred.
Definition nat1.h:669
application succ(const data_expression &arg0)
Application of function symbol succ.
Definition nat1.h:607
const data_expression & arg1(const data_expression &e)
Function for projecting out argument. arg1 from an application.
Definition nat1.h:2218
bool is_swap_zero_monus_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_monus.
Definition nat1.h:1642
void make_swap_zero_min(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @swap_zero_min.
Definition nat1.h:1564
const core::identifier_string & dub_name()
Generate identifier @dub.
Definition nat1.h:697
const core::identifier_string & cnat_name()
Generate identifier @cNat.
Definition nat1.h:127
const core::identifier_string & c0_name()
Generate identifier @c0.
Definition nat1.h:95
application divmod(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @divmod.
Definition nat1.h:1937
bool is_swap_zero_add_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_add.
Definition nat1.h:1466
bool is_natpair(const sort_expression &e)
Recogniser for sort expression @NatPair.
Definition nat1.h:82
bool is_swap_zero_monus_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_monus.
Definition nat1.h:1602
const core::identifier_string & pos2nat_name()
Generate identifier Pos2Nat.
Definition nat1.h:287
const core::identifier_string & last_name()
Generate identifier @last.
Definition nat1.h:1840
const core::identifier_string & minimum_name()
Generate identifier min.
Definition nat1.h:496
void make_sqrt_nat_aux_func(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @sqrt_nat.
Definition nat1.h:1760
bool is_sqrt_nat_aux_func_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_nat.
Definition nat1.h:1770
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
Definition nat1.h:2206
bool is_sqrt_function_symbol(const atermpp::aterm &e)
Recogniser for function sqrt.
Definition nat1.h:1670
application mod(const data_expression &arg0, const data_expression &arg1)
Application of function symbol mod.
Definition nat1.h:1150
bool is_cnat_function_symbol(const atermpp::aterm &e)
Recogniser for function @cNat.
Definition nat1.h:147
function_symbol_vector nat_mCRL2_usable_constructors()
Give all defined constructors which can be used in mCRL2 specs for nat.
Definition nat1.h:264
const function_symbol & last()
Constructor for function symbol @last.
Definition nat1.h:1850
bool is_pred_application(const atermpp::aterm &e)
Recogniser for application of pred.
Definition nat1.h:689
bool is_plus_application(const atermpp::aterm &e)
Recogniser for application of +.
Definition nat1.h:900
application maximum(const data_expression &arg0, const data_expression &arg1)
Application of function symbol max.
Definition nat1.h:467
void make_swap_zero(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @swap_zero.
Definition nat1.h:1428
void make_minimum(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol min.
Definition nat1.h:555
const core::identifier_string & swap_zero_add_name()
Generate identifier @swap_zero_add.
Definition nat1.h:1446
bool is_dubsucc_function_symbol(const atermpp::aterm &e)
Recogniser for function @dubsucc.
Definition nat1.h:781
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
Definition nat1.h:879
bool is_dubsucc_application(const atermpp::aterm &e)
Recogniser for application of @dubsucc.
Definition nat1.h:815
bool is_swap_zero_min_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_min.
Definition nat1.h:1534
function_symbol_vector nat_generate_constructors_code()
Give all system defined constructors for nat.
Definition nat1.h:252
const core::identifier_string & sqrt_name()
Generate identifier sqrt.
Definition nat1.h:1650
bool is_doubly_generalised_divmod_application(const atermpp::aterm &e)
Recogniser for application of @ggdivmod.
Definition nat1.h:2090
bool is_last_function_symbol(const atermpp::aterm &e)
Recogniser for function @last.
Definition nat1.h:1860
application times(const data_expression &arg0, const data_expression &arg1)
Application of function symbol *.
Definition nat1.h:1022
bool is_times_application(const atermpp::aterm &e)
Recogniser for application of *.
Definition nat1.h:1043
bool is_div_function_symbol(const atermpp::aterm &e)
Recogniser for function div.
Definition nat1.h:1071
const core::identifier_string & divmod_name()
Generate identifier @divmod.
Definition nat1.h:1902
bool is_minimum_function_symbol(const atermpp::aterm &e)
Recogniser for function min.
Definition nat1.h:528
function_symbol times(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:982
bool is_times_function_symbol(const atermpp::aterm &e)
Recogniser for function *.
Definition nat1.h:1006
bool is_dub_application(const atermpp::aterm &e)
Recogniser for application of @dub.
Definition nat1.h:753
bool is_nat2pos_function_symbol(const atermpp::aterm &e)
Recogniser for function Nat2Pos.
Definition nat1.h:369
const function_symbol & dub()
Constructor for function symbol @dub.
Definition nat1.h:707
void make_cnat(data_expression &result, const data_expression &arg0)
Make an application of function symbol @cNat.
Definition nat1.h:171
application swap_zero_monus(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @swap_zero_monus.
Definition nat1.h:1619
const function_symbol & pos2nat()
Constructor for function symbol Pos2Nat.
Definition nat1.h:297
void make_last(data_expression &result, const data_expression &arg0)
Make an application of function symbol @last.
Definition nat1.h:1884
application nat2pos(const data_expression &arg0)
Application of function symbol Nat2Pos.
Definition nat1.h:383
bool is_monus_application(const atermpp::aterm &e)
Recogniser for application of @monus.
Definition nat1.h:1374
bool is_divmod_application(const atermpp::aterm &e)
Recogniser for application of @divmod.
Definition nat1.h:1958
const data_expression & arg4(const data_expression &e)
Function for projecting out argument. arg4 from an application.
Definition nat1.h:2278
bool is_even_application(const atermpp::aterm &e)
Recogniser for application of @even.
Definition nat1.h:1310
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
void swap(fset_container &t1, fset_container &t2) noexcept
\brief swap overload
void make_data_expression(data_expression &result)
void make_function_symbol(atermpp::aterm &t, const ARGUMENTS &... args)
data::data_equation normalize_sorts(const data::data_equation &x, const data::sort_specification &sortspec)
Definition data.cpp:82
bool is_greater_application(const DataExpression &e)
Recogniser for application of >
Definition standard.h:339
void normalize_sorts(data::data_equation_vector &x, const data::sort_specification &sortspec)
Definition data.cpp:84
void swap(function_sort &t1, function_sort &t2) noexcept
\brief swap overload
bool is_greater_function_symbol(const DataExpression &e)
Recogniser for function >
Definition standard.h:319
void swap(container_sort &t1, container_sort &t2) noexcept
\brief swap overload
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
bool is_data_equation(const atermpp::aterm &t)
Recognizer function.
std::string pp(const data::untyped_identifier_assignment &x, bool arg0)
Definition data.cpp:74
std::ostream & operator<<(std::ostream &out, const bag_comprehension_binder &x)
variable_list free_variables(const data_expression &x)
Definition data.cpp:194
function_symbol less_equal(const sort_expression &s)
Constructor for function symbol <=.
Definition standard.h:273
std::ostream & operator<<(std::ostream &out, const set_comprehension_binder &x)
bool is_set_container(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const container_sort &x)
void swap(untyped_sort &t1, untyped_sort &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const basic_sort &x)
Definition basic_sort.h:78
function_symbol_vector standard_generate_functions_code(const sort_expression &s)
Give all standard system defined functions for sort s.
Definition standard.h:384
std::set< data::variable > find_all_variables(const data::data_expression_list &x)
Definition data.cpp:94
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
std::string pp(const data::list_container &x, bool arg0)
Definition data.cpp:63
bool is_application_no_check(const atermpp::aterm &x)
Returns true if the term t is an application, but it does not check whether an application symbol of ...
function_symbol not_equal_to(const sort_expression &s)
Constructor for function symbol !=.
Definition standard.h:159
bool is_equal_to_function_symbol(const DataExpression &e)
Recogniser for function ==.
Definition standard.h:131
data_expression_list make_data_expression_list(Container const &r, typename atermpp::enable_if_container< Container, data_expression >::type *=nullptr)
Converts an container with data expressions to data_expression_list.
std::set< data::sort_expression > find_sort_expressions(const data::data_expression &x)
Definition data.cpp:91
void swap(set_comprehension_binder &t1, set_comprehension_binder &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const container_type &x)
data::data_equation translate_user_notation(const data::data_equation &x)
Definition data.cpp:89
std::ostream & operator<<(std::ostream &out, const list_container &x)
std::ostream & operator<<(std::ostream &out, const untyped_set_or_bag_comprehension_binder &x)
bool is_application(const data_expression &t)
Returns true if the term t is an application.
bool is_list_container(const atermpp::aterm &x)
bool is_if_application(const DataExpression &e)
Recogniser for application of if.
Definition standard.h:228
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(fbag_container &t1, fbag_container &t2) noexcept
\brief swap overload
bool is_not_equal_to_application(const DataExpression &e)
Recogniser for application of !=.
Definition standard.h:188
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
void swap(list_container &t1, list_container &t2) noexcept
\brief swap overload
void swap(exists_binder &t1, exists_binder &t2) noexcept
\brief swap overload
function_symbol less(const sort_expression &s)
Constructor for function symbol <.
Definition standard.h:236
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.
application less_equal(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <=.
Definition standard.h:291
std::ostream & operator<<(std::ostream &out, const fset_container &x)
bool is_greater_equal_application(const DataExpression &e)
Recogniser for application of >=.
Definition standard.h:376
std::string pp(const data::untyped_set_or_bag_comprehension_binder &x, bool arg0)
Definition data.cpp:77
application less(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <.
Definition standard.h:254
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
void swap(set_container &t1, set_container &t2) noexcept
\brief swap overload
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
void make_variable(atermpp::aterm &t, const ARGUMENTS &... args)
Definition variable.h:77
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
application not_equal_to(const data_expression &arg0, const data_expression &arg1)
Application of function symbol !=.
Definition standard.h:177
std::string pp(const data::function_symbol_list &x, bool arg0)
Definition data.cpp:32
std::ostream & operator<<(std::ostream &out, const untyped_sort &x)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &codomain)
Convenience constructor for function sort with domain size 1.
void swap(container_type &t1, container_type &t2) noexcept
\brief swap overload
application if_(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol if.
Definition standard.h:215
std::ostream & operator<<(std::ostream &out, const forall &x)
Definition forall.h:77
bool is_untyped_identifier(const atermpp::aterm &x)
Returns true if the term t is an identifier.
data_equation_vector standard_generate_equations_code(const sort_expression &s)
Give all standard system defined equations for sort s.
Definition standard.h:401
void swap(bag_container &t1, bag_container &t2) noexcept
\brief swap overload
std::string pp(const data::lambda_binder &x, bool arg0)
Definition data.cpp:62
void swap(untyped_set_or_bag_comprehension_binder &t1, untyped_set_or_bag_comprehension_binder &t2) noexcept
\brief swap overload
void swap(bag_comprehension_binder &t1, bag_comprehension_binder &t2) noexcept
\brief swap overload
bool is_set_comprehension_binder(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const alias &x)
Definition alias.h:91
void swap(forall_binder &t1, forall_binder &t2) noexcept
\brief swap overload
void swap(data_equation &t1, data_equation &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const forall_binder &x)
bool is_exists_binder(const atermpp::aterm &x)
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
bool is_not_equal_to_function_symbol(const DataExpression &e)
Recogniser for function !=.
Definition standard.h:168
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
function_symbol greater_equal(const sort_expression &s)
Constructor for function symbol >=.
Definition standard.h:347
std::ostream & operator<<(std::ostream &out, const set_container &x)
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::ostream & operator<<(std::ostream &out, const bag_container &x)
std::string pp(const data::basic_sort &x, bool arg0)
Definition data.cpp:46
std::ostream & operator<<(std::ostream &out, const exists_binder &x)
std::string pp(const data::exists_binder &x, bool arg0)
Definition data.cpp:54
void swap(forall &t1, forall &t2) noexcept
\brief swap overload
Definition forall.h:83
void swap(binder_type &t1, binder_type &t2) noexcept
\brief swap overload
Definition binder_type.h:66
std::string pp(const data::bag_comprehension &x, bool arg0)
Definition data.cpp:43
void make_forall(atermpp::aterm &result, ARGUMENTS... arguments)
Definition forall.h:63
std::ostream & operator<<(std::ostream &out, const lambda_binder &x)
bool is_container_sort(const atermpp::aterm &x)
Returns true if the term t is a container sort.
bool is_lambda_binder(const atermpp::aterm &x)
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_fset_container(const atermpp::aterm &x)
bool is_less_function_symbol(const DataExpression &e)
Recogniser for function <.
Definition standard.h:245
std::ostream & operator<<(std::ostream &out, const data_equation &x)
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)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &dom3, const sort_expression &dom4, const sort_expression &dom5, const sort_expression &dom6, const sort_expression &codomain)
Convenience constructor for function sort with domain size 6.
bool is_untyped_set_or_bag_comprehension_binder(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::ostream & operator<<(std::ostream &out, const function_sort &x)
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
void swap(function_symbol &t1, function_symbol &t2) noexcept
\brief swap overload
std::string pp(const data::alias &x, bool arg0)
Definition data.cpp:39
bool is_if_function_symbol(const DataExpression &e)
Recogniser for function if.
Definition standard.h:205
std::ostream & operator<<(std::ostream &out, const fbag_container &x)
std::set< data::variable > find_free_variables(const data::data_expression &x)
Definition data.cpp:98
application greater(const data_expression &arg0, const data_expression &arg1)
Application of function symbol >
Definition standard.h:328
void make_abstraction(atermpp::aterm &result, ARGUMENTS... arguments)
Definition abstraction.h:72
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(abstraction &t1, abstraction &t2) noexcept
\brief swap overload
Definition abstraction.h:97
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
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &dom3, const sort_expression &codomain)
Convenience constructor for function sort with domain size 3.
std::string pp(const data::sort_expression &x, bool arg0)
Definition data.cpp:68
std::ostream & operator<<(std::ostream &out, const binder_type &x)
Definition binder_type.h:60
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:257
void swap(lambda_binder &t1, lambda_binder &t2) noexcept
\brief swap overload
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
std::ostream & operator<<(std::ostream &out, const data_expression &x)
application greater_equal(const data_expression &arg0, const data_expression &arg1)
Application of function symbol >=.
Definition standard.h:365
bool is_less_equal_function_symbol(const DataExpression &e)
Recogniser for function <=.
Definition standard.h:282
void make_data_equation(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_function_sort(const atermpp::aterm &x)
Returns true if the term t is a function sort.
bool is_greater_equal_function_symbol(const DataExpression &e)
Recogniser for function >=.
Definition standard.h:356
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::ostream & operator<<(std::ostream &out, const function_symbol &x)
bool is_bag_container(const atermpp::aterm &x)
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.
function_symbol equal_to(const sort_expression &s)
Constructor for function symbol ==.
Definition standard.h:122
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
const data_expression_list & variable_list_to_data_expression_list(const variable_list &l)
Transform a variable_list into a data_expression_list.
data::data_expression normalize_sorts(const data::data_expression &x, const data::sort_specification &sortspec)
Definition data.cpp:85
std::ostream & operator<<(std::ostream &out, const variable &x)
Definition variable.h:96
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
application equal_to(const data_expression &arg0, const data_expression &arg1)
Application of function symbol ==.
Definition standard.h:140
bool is_fbag_container(const atermpp::aterm &x)
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
bool is_constant(const data_expression &x)
bool is_forall_binder(const atermpp::aterm &x)
bool is_less_application(const DataExpression &e)
Recogniser for application of <.
Definition standard.h:265
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
void make_container_sort(atermpp::aterm &t, const ARGUMENTS &... args)
void make_function_sort(atermpp::aterm &t, const ARGUMENTS &... args)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &dom3, const sort_expression &dom4, const sort_expression &dom5, const sort_expression &codomain)
Convenience constructor for function sort with domain size 5.
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
bool is_application(const atermpp::aterm &x)
Returns true if the term t is an application.
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
bool is_less_equal_application(const DataExpression &e)
Recogniser for application of <=.
Definition standard.h:302
bool is_bag_comprehension_binder(const atermpp::aterm &x)
function_symbol if_(const sort_expression &s)
Constructor for function symbol if.
Definition standard.h:196
std::string pp(const data::machine_number &x, bool arg0)
Definition data.cpp:64
bool is_equal_to_application(const DataExpression &e)
Recogniser for application of ==.
Definition standard.h:151
void swap(data_expression &t1, data_expression &t2) noexcept
\brief swap overload
void swap(variable &t1, variable &t2) noexcept
\brief swap overload
Definition variable.h:102
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::ostream & operator<<(std::ostream &out, const abstraction &x)
Definition abstraction.h:91
std::string pp(const data::data_expression_list &x, bool arg0)
Definition data.cpp:26
function_symbol greater(const sort_expression &s)
Constructor for function symbol >
Definition standard.h:310
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 SortFSet
static const atermpp::aterm DataVarId
static const atermpp::aterm BindingOperator
static const atermpp::aterm SortArrow
static const atermpp::aterm UntypedSetBagComp
static const atermpp::aterm Lambda
static const atermpp::aterm SortExpr
static const atermpp::aterm SortConsType
static const atermpp::aterm SortId
static const atermpp::aterm Binder
static const atermpp::aterm DataEqn
static const atermpp::aterm SortRef
static const atermpp::aterm DataExpr
static const atermpp::aterm UntypedSortUnknown
static const atermpp::aterm SortSet
static const atermpp::aterm Exists
static const atermpp::aterm SortCons
static const atermpp::aterm SortBag
static const atermpp::aterm OpId
static const atermpp::aterm SetComp
static const atermpp::aterm BagComp
static const atermpp::aterm SortFBag
static const atermpp::aterm SortList
static const atermpp::aterm Forall
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::container_type &v) const
std::size_t operator()(const mcrl2::data::data_expression &v) const
std::size_t operator()(const mcrl2::data::function_sort &v) const
std::size_t operator()(const mcrl2::data::sort_expression &x) const
std::size_t operator()(const mcrl2::data::variable &v) const
Definition variable.h:128