mCRL2
Loading...
Searching...
No Matches
nat64.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_NAT64_H
16#define MCRL2_DATA_NAT64_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/machine_word.h"
27#include "mcrl2/data/bool.h"
28#include "mcrl2/data/pos64.h"
29
30/// \brief Namespace for system defined sort nat.
31namespace mcrl2::data::sort_nat
32{
33
34 inline
35 const core::identifier_string& nat_name()
36 {
37 static core::identifier_string nat_name = core::identifier_string("Nat");
38 return nat_name;
39 }
40
41 /// \brief Constructor for sort expression Nat.
42 /// \return Sort expression Nat.
43 inline
44 const basic_sort& nat()
45 {
47 return nat;
48 }
49
50 /// \brief Recogniser for sort expression Nat
51 /// \param e A sort expression
52 /// \return true iff e == nat()
53 inline
54 bool is_nat(const sort_expression& e)
55 {
56 if (is_basic_sort(e))
57 {
58 return basic_sort(e) == nat();
59 }
60 return false;
61 }
62
63 inline
64 const core::identifier_string& natnatpair_name()
65 {
66 static core::identifier_string natnatpair_name = core::identifier_string("@NatNatPair");
67 return natnatpair_name;
68 }
69
70 /// \brief Constructor for sort expression \@NatNatPair.
71 /// \return Sort expression \@NatNatPair.
72 inline
74 {
75 static basic_sort natnatpair = basic_sort(natnatpair_name());
76 return natnatpair;
77 }
78
79 /// \brief Recogniser for sort expression \@NatNatPair
80 /// \param e A sort expression
81 /// \return true iff e == natnatpair()
82 inline
84 {
85 if (is_basic_sort(e))
86 {
87 return basic_sort(e) == natnatpair();
88 }
89 return false;
90 }
91
92
93 /// \brief Generate identifier \@c0.
94 /// \return Identifier \@c0.
95 inline
96 const core::identifier_string& c0_name()
97 {
98 static core::identifier_string c0_name = core::identifier_string("@c0");
99 return c0_name;
100 }
101
102 /// \brief Constructor for function symbol \@c0.
103
104 /// \return Function symbol c0.
105 inline
106 const function_symbol& c0()
107 {
109 return c0;
110 }
111
112 /// \brief Recogniser for function \@c0.
113 /// \param e A data expression.
114 /// \return true iff e is the function symbol matching \@c0.
115 inline
116 bool is_c0_function_symbol(const atermpp::aterm& e)
117 {
119 {
120 return atermpp::down_cast<function_symbol>(e) == c0();
121 }
122 return false;
123 }
124
125 /// \brief Generate identifier \@succ_nat.
126 /// \return Identifier \@succ_nat.
127 inline
128 const core::identifier_string& succ_nat_name()
129 {
130 static core::identifier_string succ_nat_name = core::identifier_string("@succ_nat");
131 return succ_nat_name;
132 }
133
134 /// \brief Constructor for function symbol \@succ_nat.
135
136 /// \return Function symbol succ_nat.
137 inline
139 {
141 return succ_nat;
142 }
143
144 /// \brief Recogniser for function \@succ_nat.
145 /// \param e A data expression.
146 /// \return true iff e is the function symbol matching \@succ_nat.
147 inline
149 {
151 {
152 return atermpp::down_cast<function_symbol>(e) == succ_nat();
153 }
154 return false;
155 }
156
157 /// \brief Application of function symbol \@succ_nat.
158
159 /// \param[in] arg0 A data expression.
160 /// \return Application of \@succ_nat to a number of arguments.
161 inline
162 application succ_nat(const data_expression& arg0)
163 {
164 return sort_nat::succ_nat()(arg0);
165 }
166
167 /// \brief Make an application of function symbol \@succ_nat.
168 /// \param[out] result The data expression where the \@succ_nat expression is put.
169
170 /// \param[in] arg0 A data expression.
171 inline
173 {
174 make_application(result, sort_nat::succ_nat(),arg0);
175 }
176
177 /// \brief Recogniser for application of \@succ_nat.
178 /// \param e A data expression.
179 /// \return true iff e is an application of function symbol succ_nat to a
180 /// number of arguments.
181 inline
183 {
184 return is_application(e) && is_succ_nat_function_symbol(atermpp::down_cast<application>(e).head());
185 }
186
187 /// \brief Generate identifier \@nnPair.
188 /// \return Identifier \@nnPair.
189 inline
190 const core::identifier_string& nnpair_name()
191 {
192 static core::identifier_string nnpair_name = core::identifier_string("@nnPair");
193 return nnpair_name;
194 }
195
196 /// \brief Constructor for function symbol \@nnPair.
197
198 /// \return Function symbol nnpair.
199 inline
201 {
203 return nnpair;
204 }
205
206 /// \brief Recogniser for function \@nnPair.
207 /// \param e A data expression.
208 /// \return true iff e is the function symbol matching \@nnPair.
209 inline
211 {
213 {
214 return atermpp::down_cast<function_symbol>(e) == nnpair();
215 }
216 return false;
217 }
218
219 /// \brief Application of function symbol \@nnPair.
220
221 /// \param[in] arg0 A data expression.
222 /// \param[in] arg1 A data expression.
223 /// \return Application of \@nnPair to a number of arguments.
224 inline
225 application nnpair(const data_expression& arg0, const data_expression& arg1)
226 {
227 return sort_nat::nnpair()(arg0, arg1);
228 }
229
230 /// \brief Make an application of function symbol \@nnPair.
231 /// \param[out] result The data expression where the \@nnPair expression is put.
232
233 /// \param[in] arg0 A data expression.
234 /// \param[in] arg1 A data expression.
235 inline
236 void make_nnpair(data_expression& result, const data_expression& arg0, const data_expression& arg1)
237 {
238 make_application(result, sort_nat::nnpair(),arg0, arg1);
239 }
240
241 /// \brief Recogniser for application of \@nnPair.
242 /// \param e A data expression.
243 /// \return true iff e is an application of function symbol nnpair to a
244 /// number of arguments.
245 inline
247 {
248 return is_application(e) && is_nnpair_function_symbol(atermpp::down_cast<application>(e).head());
249 }
250 /// \brief Give all system defined constructors for nat.
251 /// \return All system defined constructors for nat.
252 inline
254 {
255 function_symbol_vector result;
256 result.push_back(sort_nat::c0());
257 result.push_back(sort_nat::succ_nat());
258 result.push_back(sort_nat::nnpair());
259
260 return result;
261 }
262 /// \brief Give all defined constructors which can be used in mCRL2 specs for nat.
263 /// \return All system defined constructors that can be used in an mCRL2 specification for nat.
264 inline
266 {
267 function_symbol_vector result;
268 result.push_back(sort_nat::c0());
269 result.push_back(sort_nat::succ_nat());
270 result.push_back(sort_nat::nnpair());
271
272 return result;
273 }
274 // 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
276 /// \brief Give all system defined constructors which have an implementation in C++ and not in rewrite rules for nat.
277 /// \return All system defined constructors that are to be implemented in C++ for nat.
278 inline
280 {
281 implementation_map result;
282 return result;
283 }
284
285 /// \brief Generate identifier \@most_significant_digitNat.
286 /// \return Identifier \@most_significant_digitNat.
287 inline
288 const core::identifier_string& most_significant_digit_nat_name()
289 {
290 static core::identifier_string most_significant_digit_nat_name = core::identifier_string("@most_significant_digitNat");
291 return most_significant_digit_nat_name;
292 }
293
294 /// \brief Constructor for function symbol \@most_significant_digitNat.
295
296 /// \return Function symbol most_significant_digit_nat.
297 inline
299 {
301 return most_significant_digit_nat;
302 }
303
304 /// \brief Recogniser for function \@most_significant_digitNat.
305 /// \param e A data expression.
306 /// \return true iff e is the function symbol matching \@most_significant_digitNat.
307 inline
309 {
311 {
312 return atermpp::down_cast<function_symbol>(e) == most_significant_digit_nat();
313 }
314 return false;
315 }
316
317 /// \brief Application of function symbol \@most_significant_digitNat.
318
319 /// \param[in] arg0 A data expression.
320 /// \return Application of \@most_significant_digitNat to a number of arguments.
321 inline
323 {
325 }
326
327 /// \brief Make an application of function symbol \@most_significant_digitNat.
328 /// \param[out] result The data expression where the \@most_significant_digitNat expression is put.
329
330 /// \param[in] arg0 A data expression.
331 inline
333 {
334 make_application(result, sort_nat::most_significant_digit_nat(),arg0);
335 }
336
337 /// \brief Recogniser for application of \@most_significant_digitNat.
338 /// \param e A data expression.
339 /// \return true iff e is an application of function symbol most_significant_digit_nat to a
340 /// number of arguments.
341 inline
343 {
344 return is_application(e) && is_most_significant_digit_nat_function_symbol(atermpp::down_cast<application>(e).head());
345 }
346
347 /// \brief Generate identifier \@concat_digit.
348 /// \return Identifier \@concat_digit.
349 inline
350 const core::identifier_string& concat_digit_name()
351 {
352 static core::identifier_string concat_digit_name = core::identifier_string("@concat_digit");
353 return concat_digit_name;
354 }
355
356 // This function is not intended for public use and therefore not documented in Doxygen.
357 inline
359 {
360 sort_expression target_sort;
361 if (s0 == nat() && s1 == sort_machine_word::machine_word())
362 {
363 target_sort = nat();
364 }
365 else if (s0 == sort_pos::pos() && s1 == sort_machine_word::machine_word())
366 {
367 target_sort = sort_pos::pos();
368 }
369 else
370 {
371 throw mcrl2::runtime_error("Cannot compute target sort for concat_digit with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
372 }
373
375 return concat_digit;
376 }
377
378 /// \brief Recogniser for function \@concat_digit.
379 /// \param e A data expression.
380 /// \return true iff e is the function symbol matching \@concat_digit.
381 inline
383 {
385 {
386 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
387 return f.name() == concat_digit_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == concat_digit(nat(), sort_machine_word::machine_word()) || f == concat_digit(sort_pos::pos(), sort_machine_word::machine_word()));
388 }
389 return false;
390 }
391
392 /// \brief Application of function symbol \@concat_digit.
393
394 /// \param[in] arg0 A data expression.
395 /// \param[in] arg1 A data expression.
396 /// \return Application of \@concat_digit to a number of arguments.
397 inline
398 application concat_digit(const data_expression& arg0, const data_expression& arg1)
399 {
400 return sort_nat::concat_digit(arg0.sort(), arg1.sort())(arg0, arg1);
401 }
402
403 /// \brief Make an application of function symbol \@concat_digit.
404 /// \param[out] result The data expression where the \@concat_digit expression is put.
405
406 /// \param[in] arg0 A data expression.
407 /// \param[in] arg1 A data expression.
408 inline
409 void make_concat_digit(data_expression& result, const data_expression& arg0, const data_expression& arg1)
410 {
411 make_application(result, sort_nat::concat_digit(arg0.sort(), arg1.sort()),arg0, arg1);
412 }
413
414 /// \brief Recogniser for application of \@concat_digit.
415 /// \param e A data expression.
416 /// \return true iff e is an application of function symbol concat_digit to a
417 /// number of arguments.
418 inline
420 {
421 return is_application(e) && is_concat_digit_function_symbol(atermpp::down_cast<application>(e).head());
422 }
423
424 /// \brief Generate identifier \@equals_zero.
425 /// \return Identifier \@equals_zero.
426 inline
427 const core::identifier_string& equals_zero_name()
428 {
429 static core::identifier_string equals_zero_name = core::identifier_string("@equals_zero");
430 return equals_zero_name;
431 }
432
433 /// \brief Constructor for function symbol \@equals_zero.
434
435 /// \return Function symbol equals_zero.
436 inline
438 {
440 return equals_zero;
441 }
442
443 /// \brief Recogniser for function \@equals_zero.
444 /// \param e A data expression.
445 /// \return true iff e is the function symbol matching \@equals_zero.
446 inline
448 {
450 {
451 return atermpp::down_cast<function_symbol>(e) == equals_zero();
452 }
453 return false;
454 }
455
456 /// \brief Application of function symbol \@equals_zero.
457
458 /// \param[in] arg0 A data expression.
459 /// \return Application of \@equals_zero to a number of arguments.
460 inline
461 application equals_zero(const data_expression& arg0)
462 {
463 return sort_nat::equals_zero()(arg0);
464 }
465
466 /// \brief Make an application of function symbol \@equals_zero.
467 /// \param[out] result The data expression where the \@equals_zero expression is put.
468
469 /// \param[in] arg0 A data expression.
470 inline
472 {
473 make_application(result, sort_nat::equals_zero(),arg0);
474 }
475
476 /// \brief Recogniser for application of \@equals_zero.
477 /// \param e A data expression.
478 /// \return true iff e is an application of function symbol equals_zero to a
479 /// number of arguments.
480 inline
482 {
483 return is_application(e) && is_equals_zero_function_symbol(atermpp::down_cast<application>(e).head());
484 }
485
486 /// \brief Generate identifier \@not_equals_zero.
487 /// \return Identifier \@not_equals_zero.
488 inline
489 const core::identifier_string& not_equals_zero_name()
490 {
491 static core::identifier_string not_equals_zero_name = core::identifier_string("@not_equals_zero");
492 return not_equals_zero_name;
493 }
494
495 /// \brief Constructor for function symbol \@not_equals_zero.
496
497 /// \return Function symbol not_equals_zero.
498 inline
500 {
502 return not_equals_zero;
503 }
504
505 /// \brief Recogniser for function \@not_equals_zero.
506 /// \param e A data expression.
507 /// \return true iff e is the function symbol matching \@not_equals_zero.
508 inline
510 {
512 {
513 return atermpp::down_cast<function_symbol>(e) == not_equals_zero();
514 }
515 return false;
516 }
517
518 /// \brief Application of function symbol \@not_equals_zero.
519
520 /// \param[in] arg0 A data expression.
521 /// \return Application of \@not_equals_zero to a number of arguments.
522 inline
523 application not_equals_zero(const data_expression& arg0)
524 {
526 }
527
528 /// \brief Make an application of function symbol \@not_equals_zero.
529 /// \param[out] result The data expression where the \@not_equals_zero expression is put.
530
531 /// \param[in] arg0 A data expression.
532 inline
534 {
535 make_application(result, sort_nat::not_equals_zero(),arg0);
536 }
537
538 /// \brief Recogniser for application of \@not_equals_zero.
539 /// \param e A data expression.
540 /// \return true iff e is an application of function symbol not_equals_zero to a
541 /// number of arguments.
542 inline
544 {
545 return is_application(e) && is_not_equals_zero_function_symbol(atermpp::down_cast<application>(e).head());
546 }
547
548 /// \brief Generate identifier \@equals_one.
549 /// \return Identifier \@equals_one.
550 inline
551 const core::identifier_string& equals_one_name()
552 {
553 static core::identifier_string equals_one_name = core::identifier_string("@equals_one");
554 return equals_one_name;
555 }
556
557 // This function is not intended for public use and therefore not documented in Doxygen.
558 inline
560 {
563 return equals_one;
564 }
565
566 /// \brief Recogniser for function \@equals_one.
567 /// \param e A data expression.
568 /// \return true iff e is the function symbol matching \@equals_one.
569 inline
571 {
573 {
574 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
575 return f.name() == equals_one_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 1 && (f == equals_one(nat()) || f == equals_one(sort_pos::pos()));
576 }
577 return false;
578 }
579
580 /// \brief Application of function symbol \@equals_one.
581
582 /// \param[in] arg0 A data expression.
583 /// \return Application of \@equals_one to a number of arguments.
584 inline
585 application equals_one(const data_expression& arg0)
586 {
587 return sort_nat::equals_one(arg0.sort())(arg0);
588 }
589
590 /// \brief Make an application of function symbol \@equals_one.
591 /// \param[out] result The data expression where the \@equals_one expression is put.
592
593 /// \param[in] arg0 A data expression.
594 inline
596 {
597 make_application(result, sort_nat::equals_one(arg0.sort()),arg0);
598 }
599
600 /// \brief Recogniser for application of \@equals_one.
601 /// \param e A data expression.
602 /// \return true iff e is an application of function symbol equals_one to a
603 /// number of arguments.
604 inline
606 {
607 return is_application(e) && is_equals_one_function_symbol(atermpp::down_cast<application>(e).head());
608 }
609
610 /// \brief Generate identifier Pos2Nat.
611 /// \return Identifier Pos2Nat.
612 inline
613 const core::identifier_string& pos2nat_name()
614 {
615 static core::identifier_string pos2nat_name = core::identifier_string("Pos2Nat");
616 return pos2nat_name;
617 }
618
619 /// \brief Constructor for function symbol Pos2Nat.
620
621 /// \return Function symbol pos2nat.
622 inline
623 const function_symbol& pos2nat()
624 {
626 return pos2nat;
627 }
628
629 /// \brief Recogniser for function Pos2Nat.
630 /// \param e A data expression.
631 /// \return true iff e is the function symbol matching Pos2Nat.
632 inline
634 {
636 {
637 return atermpp::down_cast<function_symbol>(e) == pos2nat();
638 }
639 return false;
640 }
641
642 /// \brief Application of function symbol Pos2Nat.
643
644 /// \param[in] arg0 A data expression.
645 /// \return Application of Pos2Nat to a number of arguments.
646 inline
647 application pos2nat(const data_expression& arg0)
648 {
649 return sort_nat::pos2nat()(arg0);
650 }
651
652 /// \brief Make an application of function symbol Pos2Nat.
653 /// \param[out] result The data expression where the Pos2Nat expression is put.
654
655 /// \param[in] arg0 A data expression.
656 inline
657 void make_pos2nat(data_expression& result, const data_expression& arg0)
658 {
659 make_application(result, sort_nat::pos2nat(),arg0);
660 }
661
662 /// \brief Recogniser for application of Pos2Nat.
663 /// \param e A data expression.
664 /// \return true iff e is an application of function symbol pos2nat to a
665 /// number of arguments.
666 inline
667 bool is_pos2nat_application(const atermpp::aterm& e)
668 {
669 return is_application(e) && is_pos2nat_function_symbol(atermpp::down_cast<application>(e).head());
670 }
671
672 /// \brief Generate identifier Nat2Pos.
673 /// \return Identifier Nat2Pos.
674 inline
675 const core::identifier_string& nat2pos_name()
676 {
677 static core::identifier_string nat2pos_name = core::identifier_string("Nat2Pos");
678 return nat2pos_name;
679 }
680
681 /// \brief Constructor for function symbol Nat2Pos.
682
683 /// \return Function symbol nat2pos.
684 inline
685 const function_symbol& nat2pos()
686 {
688 return nat2pos;
689 }
690
691 /// \brief Recogniser for function Nat2Pos.
692 /// \param e A data expression.
693 /// \return true iff e is the function symbol matching Nat2Pos.
694 inline
696 {
698 {
699 return atermpp::down_cast<function_symbol>(e) == nat2pos();
700 }
701 return false;
702 }
703
704 /// \brief Application of function symbol Nat2Pos.
705
706 /// \param[in] arg0 A data expression.
707 /// \return Application of Nat2Pos to a number of arguments.
708 inline
709 application nat2pos(const data_expression& arg0)
710 {
711 return sort_nat::nat2pos()(arg0);
712 }
713
714 /// \brief Make an application of function symbol Nat2Pos.
715 /// \param[out] result The data expression where the Nat2Pos expression is put.
716
717 /// \param[in] arg0 A data expression.
718 inline
719 void make_nat2pos(data_expression& result, const data_expression& arg0)
720 {
721 make_application(result, sort_nat::nat2pos(),arg0);
722 }
723
724 /// \brief Recogniser for application of Nat2Pos.
725 /// \param e A data expression.
726 /// \return true iff e is an application of function symbol nat2pos to a
727 /// number of arguments.
728 inline
729 bool is_nat2pos_application(const atermpp::aterm& e)
730 {
731 return is_application(e) && is_nat2pos_function_symbol(atermpp::down_cast<application>(e).head());
732 }
733
734 /// \brief Generate identifier succ.
735 /// \return Identifier succ.
736 inline
737 const core::identifier_string& succ_name()
738 {
739 static core::identifier_string succ_name = core::identifier_string("succ");
740 return succ_name;
741 }
742
743 // This function is not intended for public use and therefore not documented in Doxygen.
744 inline
746 {
749 return succ;
750 }
751
752 /// \brief Recogniser for function succ.
753 /// \param e A data expression.
754 /// \return true iff e is the function symbol matching succ.
755 inline
757 {
759 {
760 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
761 return f.name() == succ_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 1 && (f == succ(nat()) || f == succ(sort_pos::pos()));
762 }
763 return false;
764 }
765
766 /// \brief Application of function symbol succ.
767
768 /// \param[in] arg0 A data expression.
769 /// \return Application of succ to a number of arguments.
770 inline
771 application succ(const data_expression& arg0)
772 {
773 return sort_nat::succ(arg0.sort())(arg0);
774 }
775
776 /// \brief Make an application of function symbol succ.
777 /// \param[out] result The data expression where the succ expression is put.
778
779 /// \param[in] arg0 A data expression.
780 inline
781 void make_succ(data_expression& result, const data_expression& arg0)
782 {
783 make_application(result, sort_nat::succ(arg0.sort()),arg0);
784 }
785
786 /// \brief Recogniser for application of succ.
787 /// \param e A data expression.
788 /// \return true iff e is an application of function symbol succ to a
789 /// number of arguments.
790 inline
791 bool is_succ_application(const atermpp::aterm& e)
792 {
793 return is_application(e) && is_succ_function_symbol(atermpp::down_cast<application>(e).head());
794 }
795
796 /// \brief Generate identifier max.
797 /// \return Identifier max.
798 inline
799 const core::identifier_string& maximum_name()
800 {
801 static core::identifier_string maximum_name = core::identifier_string("max");
802 return maximum_name;
803 }
804
805 // This function is not intended for public use and therefore not documented in Doxygen.
806 inline
808 {
809 sort_expression target_sort;
810 if (s0 == sort_pos::pos() && s1 == nat())
811 {
812 target_sort = sort_pos::pos();
813 }
814 else if (s0 == nat() && s1 == sort_pos::pos())
815 {
816 target_sort = sort_pos::pos();
817 }
818 else if (s0 == nat() && s1 == nat())
819 {
820 target_sort = nat();
821 }
822 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
823 {
824 target_sort = sort_pos::pos();
825 }
826 else
827 {
828 throw mcrl2::runtime_error("Cannot compute target sort for maximum with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
829 }
830
832 return maximum;
833 }
834
835 /// \brief Recogniser for function max.
836 /// \param e A data expression.
837 /// \return true iff e is the function symbol matching max.
838 inline
840 {
842 {
843 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
844 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()));
845 }
846 return false;
847 }
848
849 /// \brief Application of function symbol max.
850
851 /// \param[in] arg0 A data expression.
852 /// \param[in] arg1 A data expression.
853 /// \return Application of max to a number of arguments.
854 inline
855 application maximum(const data_expression& arg0, const data_expression& arg1)
856 {
857 return sort_nat::maximum(arg0.sort(), arg1.sort())(arg0, arg1);
858 }
859
860 /// \brief Make an application of function symbol max.
861 /// \param[out] result The data expression where the max expression is put.
862
863 /// \param[in] arg0 A data expression.
864 /// \param[in] arg1 A data expression.
865 inline
866 void make_maximum(data_expression& result, const data_expression& arg0, const data_expression& arg1)
867 {
868 make_application(result, sort_nat::maximum(arg0.sort(), arg1.sort()),arg0, arg1);
869 }
870
871 /// \brief Recogniser for application of max.
872 /// \param e A data expression.
873 /// \return true iff e is an application of function symbol maximum to a
874 /// number of arguments.
875 inline
876 bool is_maximum_application(const atermpp::aterm& e)
877 {
878 return is_application(e) && is_maximum_function_symbol(atermpp::down_cast<application>(e).head());
879 }
880
881 /// \brief Generate identifier min.
882 /// \return Identifier min.
883 inline
884 const core::identifier_string& minimum_name()
885 {
886 static core::identifier_string minimum_name = core::identifier_string("min");
887 return minimum_name;
888 }
889
890 // This function is not intended for public use and therefore not documented in Doxygen.
891 inline
893 {
894 sort_expression target_sort;
895 if (s0 == nat() && s1 == nat())
896 {
897 target_sort = nat();
898 }
899 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
900 {
901 target_sort = sort_pos::pos();
902 }
903 else
904 {
905 throw mcrl2::runtime_error("Cannot compute target sort for minimum with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
906 }
907
909 return minimum;
910 }
911
912 /// \brief Recogniser for function min.
913 /// \param e A data expression.
914 /// \return true iff e is the function symbol matching min.
915 inline
917 {
919 {
920 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
921 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()));
922 }
923 return false;
924 }
925
926 /// \brief Application of function symbol min.
927
928 /// \param[in] arg0 A data expression.
929 /// \param[in] arg1 A data expression.
930 /// \return Application of min to a number of arguments.
931 inline
932 application minimum(const data_expression& arg0, const data_expression& arg1)
933 {
934 return sort_nat::minimum(arg0.sort(), arg1.sort())(arg0, arg1);
935 }
936
937 /// \brief Make an application of function symbol min.
938 /// \param[out] result The data expression where the min expression is put.
939
940 /// \param[in] arg0 A data expression.
941 /// \param[in] arg1 A data expression.
942 inline
943 void make_minimum(data_expression& result, const data_expression& arg0, const data_expression& arg1)
944 {
945 make_application(result, sort_nat::minimum(arg0.sort(), arg1.sort()),arg0, arg1);
946 }
947
948 /// \brief Recogniser for application of min.
949 /// \param e A data expression.
950 /// \return true iff e is an application of function symbol minimum to a
951 /// number of arguments.
952 inline
953 bool is_minimum_application(const atermpp::aterm& e)
954 {
955 return is_application(e) && is_minimum_function_symbol(atermpp::down_cast<application>(e).head());
956 }
957
958 /// \brief Generate identifier pred.
959 /// \return Identifier pred.
960 inline
961 const core::identifier_string& pred_name()
962 {
963 static core::identifier_string pred_name = core::identifier_string("pred");
964 return pred_name;
965 }
966
967 /// \brief Constructor for function symbol pred.
968
969 /// \return Function symbol pred.
970 inline
971 const function_symbol& pred()
972 {
974 return pred;
975 }
976
977 /// \brief Recogniser for function pred.
978 /// \param e A data expression.
979 /// \return true iff e is the function symbol matching pred.
980 inline
982 {
984 {
985 return atermpp::down_cast<function_symbol>(e) == pred();
986 }
987 return false;
988 }
989
990 /// \brief Application of function symbol pred.
991
992 /// \param[in] arg0 A data expression.
993 /// \return Application of pred to a number of arguments.
994 inline
995 application pred(const data_expression& arg0)
996 {
997 return sort_nat::pred()(arg0);
998 }
999
1000 /// \brief Make an application of function symbol pred.
1001 /// \param[out] result The data expression where the pred expression is put.
1002
1003 /// \param[in] arg0 A data expression.
1004 inline
1005 void make_pred(data_expression& result, const data_expression& arg0)
1006 {
1007 make_application(result, sort_nat::pred(),arg0);
1008 }
1009
1010 /// \brief Recogniser for application of pred.
1011 /// \param e A data expression.
1012 /// \return true iff e is an application of function symbol pred to a
1013 /// number of arguments.
1014 inline
1015 bool is_pred_application(const atermpp::aterm& e)
1016 {
1017 return is_application(e) && is_pred_function_symbol(atermpp::down_cast<application>(e).head());
1018 }
1019
1020 /// \brief Generate identifier \@pred_whr.
1021 /// \return Identifier \@pred_whr.
1022 inline
1023 const core::identifier_string& pred_whr_name()
1024 {
1025 static core::identifier_string pred_whr_name = core::identifier_string("@pred_whr");
1026 return pred_whr_name;
1027 }
1028
1029 /// \brief Constructor for function symbol \@pred_whr.
1030
1031 /// \return Function symbol pred_whr.
1032 inline
1034 {
1036 return pred_whr;
1037 }
1038
1039 /// \brief Recogniser for function \@pred_whr.
1040 /// \param e A data expression.
1041 /// \return true iff e is the function symbol matching \@pred_whr.
1042 inline
1044 {
1046 {
1047 return atermpp::down_cast<function_symbol>(e) == pred_whr();
1048 }
1049 return false;
1050 }
1051
1052 /// \brief Application of function symbol \@pred_whr.
1053
1054 /// \param[in] arg0 A data expression.
1055 /// \return Application of \@pred_whr to a number of arguments.
1056 inline
1057 application pred_whr(const data_expression& arg0)
1058 {
1059 return sort_nat::pred_whr()(arg0);
1060 }
1061
1062 /// \brief Make an application of function symbol \@pred_whr.
1063 /// \param[out] result The data expression where the \@pred_whr expression is put.
1064
1065 /// \param[in] arg0 A data expression.
1066 inline
1068 {
1069 make_application(result, sort_nat::pred_whr(),arg0);
1070 }
1071
1072 /// \brief Recogniser for application of \@pred_whr.
1073 /// \param e A data expression.
1074 /// \return true iff e is an application of function symbol pred_whr to a
1075 /// number of arguments.
1076 inline
1078 {
1079 return is_application(e) && is_pred_whr_function_symbol(atermpp::down_cast<application>(e).head());
1080 }
1081
1082 /// \brief Generate identifier +.
1083 /// \return Identifier +.
1084 inline
1085 const core::identifier_string& plus_name()
1086 {
1087 static core::identifier_string plus_name = core::identifier_string("+");
1088 return plus_name;
1089 }
1090
1091 // This function is not intended for public use and therefore not documented in Doxygen.
1092 inline
1094 {
1095 sort_expression target_sort;
1096 if (s0 == sort_pos::pos() && s1 == nat())
1097 {
1098 target_sort = sort_pos::pos();
1099 }
1100 else if (s0 == nat() && s1 == sort_pos::pos())
1101 {
1102 target_sort = sort_pos::pos();
1103 }
1104 else if (s0 == nat() && s1 == nat())
1105 {
1106 target_sort = nat();
1107 }
1108 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
1109 {
1110 target_sort = sort_pos::pos();
1111 }
1112 else
1113 {
1114 throw mcrl2::runtime_error("Cannot compute target sort for plus with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
1115 }
1116
1118 return plus;
1119 }
1120
1121 /// \brief Recogniser for function +.
1122 /// \param e A data expression.
1123 /// \return true iff e is the function symbol matching +.
1124 inline
1125 bool is_plus_function_symbol(const atermpp::aterm& e)
1126 {
1128 {
1129 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
1130 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()));
1131 }
1132 return false;
1133 }
1134
1135 /// \brief Application of function symbol +.
1136
1137 /// \param[in] arg0 A data expression.
1138 /// \param[in] arg1 A data expression.
1139 /// \return Application of + to a number of arguments.
1140 inline
1141 application plus(const data_expression& arg0, const data_expression& arg1)
1142 {
1143 return sort_nat::plus(arg0.sort(), arg1.sort())(arg0, arg1);
1144 }
1145
1146 /// \brief Make an application of function symbol +.
1147 /// \param[out] result The data expression where the + expression is put.
1148
1149 /// \param[in] arg0 A data expression.
1150 /// \param[in] arg1 A data expression.
1151 inline
1152 void make_plus(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1153 {
1154 make_application(result, sort_nat::plus(arg0.sort(), arg1.sort()),arg0, arg1);
1155 }
1156
1157 /// \brief Recogniser for application of +.
1158 /// \param e A data expression.
1159 /// \return true iff e is an application of function symbol plus to a
1160 /// number of arguments.
1161 inline
1162 bool is_plus_application(const atermpp::aterm& e)
1163 {
1164 return is_application(e) && is_plus_function_symbol(atermpp::down_cast<application>(e).head());
1165 }
1166
1167 /// \brief Generate identifier \@add_with_carry.
1168 /// \return Identifier \@add_with_carry.
1169 inline
1170 const core::identifier_string& add_with_carry_name()
1171 {
1172 static core::identifier_string add_with_carry_name = core::identifier_string("@add_with_carry");
1173 return add_with_carry_name;
1174 }
1175
1176 // This function is not intended for public use and therefore not documented in Doxygen.
1177 inline
1179 {
1180 sort_expression target_sort;
1181 if (s0 == nat() && s1 == nat())
1182 {
1183 target_sort = nat();
1184 }
1185 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
1186 {
1187 target_sort = sort_pos::pos();
1188 }
1189 else
1190 {
1191 throw mcrl2::runtime_error("Cannot compute target sort for add_with_carry with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
1192 }
1193
1195 return add_with_carry;
1196 }
1197
1198 /// \brief Recogniser for function \@add_with_carry.
1199 /// \param e A data expression.
1200 /// \return true iff e is the function symbol matching \@add_with_carry.
1201 inline
1203 {
1205 {
1206 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
1207 return f.name() == add_with_carry_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == add_with_carry(nat(), nat()) || f == add_with_carry(sort_pos::pos(), sort_pos::pos()));
1208 }
1209 return false;
1210 }
1211
1212 /// \brief Application of function symbol \@add_with_carry.
1213
1214 /// \param[in] arg0 A data expression.
1215 /// \param[in] arg1 A data expression.
1216 /// \return Application of \@add_with_carry to a number of arguments.
1217 inline
1218 application add_with_carry(const data_expression& arg0, const data_expression& arg1)
1219 {
1220 return sort_nat::add_with_carry(arg0.sort(), arg1.sort())(arg0, arg1);
1221 }
1222
1223 /// \brief Make an application of function symbol \@add_with_carry.
1224 /// \param[out] result The data expression where the \@add_with_carry expression is put.
1225
1226 /// \param[in] arg0 A data expression.
1227 /// \param[in] arg1 A data expression.
1228 inline
1230 {
1231 make_application(result, sort_nat::add_with_carry(arg0.sort(), arg1.sort()),arg0, arg1);
1232 }
1233
1234 /// \brief Recogniser for application of \@add_with_carry.
1235 /// \param e A data expression.
1236 /// \return true iff e is an application of function symbol add_with_carry to a
1237 /// number of arguments.
1238 inline
1240 {
1241 return is_application(e) && is_add_with_carry_function_symbol(atermpp::down_cast<application>(e).head());
1242 }
1243
1244 /// \brief Generate identifier \@plus_nat.
1245 /// \return Identifier \@plus_nat.
1246 inline
1247 const core::identifier_string& auxiliary_plus_nat_name()
1248 {
1249 static core::identifier_string auxiliary_plus_nat_name = core::identifier_string("@plus_nat");
1250 return auxiliary_plus_nat_name;
1251 }
1252
1253 /// \brief Constructor for function symbol \@plus_nat.
1254
1255 /// \return Function symbol auxiliary_plus_nat.
1256 inline
1258 {
1260 return auxiliary_plus_nat;
1261 }
1262
1263 /// \brief Recogniser for function \@plus_nat.
1264 /// \param e A data expression.
1265 /// \return true iff e is the function symbol matching \@plus_nat.
1266 inline
1268 {
1270 {
1271 return atermpp::down_cast<function_symbol>(e) == auxiliary_plus_nat();
1272 }
1273 return false;
1274 }
1275
1276 /// \brief Application of function symbol \@plus_nat.
1277
1278 /// \param[in] arg0 A data expression.
1279 /// \param[in] arg1 A data expression.
1280 /// \return Application of \@plus_nat to a number of arguments.
1281 inline
1282 application auxiliary_plus_nat(const data_expression& arg0, const data_expression& arg1)
1283 {
1284 return sort_nat::auxiliary_plus_nat()(arg0, arg1);
1285 }
1286
1287 /// \brief Make an application of function symbol \@plus_nat.
1288 /// \param[out] result The data expression where the \@plus_nat expression is put.
1289
1290 /// \param[in] arg0 A data expression.
1291 /// \param[in] arg1 A data expression.
1292 inline
1294 {
1295 make_application(result, sort_nat::auxiliary_plus_nat(),arg0, arg1);
1296 }
1297
1298 /// \brief Recogniser for application of \@plus_nat.
1299 /// \param e A data expression.
1300 /// \return true iff e is an application of function symbol auxiliary_plus_nat to a
1301 /// number of arguments.
1302 inline
1304 {
1305 return is_application(e) && is_auxiliary_plus_nat_function_symbol(atermpp::down_cast<application>(e).head());
1306 }
1307
1308 /// \brief Generate identifier *.
1309 /// \return Identifier *.
1310 inline
1311 const core::identifier_string& times_name()
1312 {
1313 static core::identifier_string times_name = core::identifier_string("*");
1314 return times_name;
1315 }
1316
1317 // This function is not intended for public use and therefore not documented in Doxygen.
1318 inline
1320 {
1321 sort_expression target_sort;
1322 if (s0 == nat() && s1 == nat())
1323 {
1324 target_sort = nat();
1325 }
1326 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
1327 {
1328 target_sort = sort_pos::pos();
1329 }
1330 else
1331 {
1332 throw mcrl2::runtime_error("Cannot compute target sort for times with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
1333 }
1334
1336 return times;
1337 }
1338
1339 /// \brief Recogniser for function *.
1340 /// \param e A data expression.
1341 /// \return true iff e is the function symbol matching *.
1342 inline
1343 bool is_times_function_symbol(const atermpp::aterm& e)
1344 {
1346 {
1347 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
1348 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()));
1349 }
1350 return false;
1351 }
1352
1353 /// \brief Application of function symbol *.
1354
1355 /// \param[in] arg0 A data expression.
1356 /// \param[in] arg1 A data expression.
1357 /// \return Application of * to a number of arguments.
1358 inline
1359 application times(const data_expression& arg0, const data_expression& arg1)
1360 {
1361 return sort_nat::times(arg0.sort(), arg1.sort())(arg0, arg1);
1362 }
1363
1364 /// \brief Make an application of function symbol *.
1365 /// \param[out] result The data expression where the * expression is put.
1366
1367 /// \param[in] arg0 A data expression.
1368 /// \param[in] arg1 A data expression.
1369 inline
1370 void make_times(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1371 {
1372 make_application(result, sort_nat::times(arg0.sort(), arg1.sort()),arg0, arg1);
1373 }
1374
1375 /// \brief Recogniser for application of *.
1376 /// \param e A data expression.
1377 /// \return true iff e is an application of function symbol times to a
1378 /// number of arguments.
1379 inline
1380 bool is_times_application(const atermpp::aterm& e)
1381 {
1382 return is_application(e) && is_times_function_symbol(atermpp::down_cast<application>(e).head());
1383 }
1384
1385 /// \brief Generate identifier \@times_ordered.
1386 /// \return Identifier \@times_ordered.
1387 inline
1388 const core::identifier_string& times_ordered_name()
1389 {
1390 static core::identifier_string times_ordered_name = core::identifier_string("@times_ordered");
1391 return times_ordered_name;
1392 }
1393
1394 // This function is not intended for public use and therefore not documented in Doxygen.
1395 inline
1397 {
1398 sort_expression target_sort;
1399 if (s0 == nat() && s1 == nat())
1400 {
1401 target_sort = nat();
1402 }
1403 else if (s0 == sort_pos::pos() && s1 == sort_pos::pos())
1404 {
1405 target_sort = sort_pos::pos();
1406 }
1407 else
1408 {
1409 throw mcrl2::runtime_error("Cannot compute target sort for times_ordered with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
1410 }
1411
1413 return times_ordered;
1414 }
1415
1416 /// \brief Recogniser for function \@times_ordered.
1417 /// \param e A data expression.
1418 /// \return true iff e is the function symbol matching \@times_ordered.
1419 inline
1421 {
1423 {
1424 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
1425 return f.name() == times_ordered_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == times_ordered(nat(), nat()) || f == times_ordered(sort_pos::pos(), sort_pos::pos()));
1426 }
1427 return false;
1428 }
1429
1430 /// \brief Application of function symbol \@times_ordered.
1431
1432 /// \param[in] arg0 A data expression.
1433 /// \param[in] arg1 A data expression.
1434 /// \return Application of \@times_ordered to a number of arguments.
1435 inline
1436 application times_ordered(const data_expression& arg0, const data_expression& arg1)
1437 {
1438 return sort_nat::times_ordered(arg0.sort(), arg1.sort())(arg0, arg1);
1439 }
1440
1441 /// \brief Make an application of function symbol \@times_ordered.
1442 /// \param[out] result The data expression where the \@times_ordered expression is put.
1443
1444 /// \param[in] arg0 A data expression.
1445 /// \param[in] arg1 A data expression.
1446 inline
1448 {
1449 make_application(result, sort_nat::times_ordered(arg0.sort(), arg1.sort()),arg0, arg1);
1450 }
1451
1452 /// \brief Recogniser for application of \@times_ordered.
1453 /// \param e A data expression.
1454 /// \return true iff e is an application of function symbol times_ordered to a
1455 /// number of arguments.
1456 inline
1458 {
1459 return is_application(e) && is_times_ordered_function_symbol(atermpp::down_cast<application>(e).head());
1460 }
1461
1462 /// \brief Generate identifier \@times_overflow.
1463 /// \return Identifier \@times_overflow.
1464 inline
1465 const core::identifier_string& times_overflow_name()
1466 {
1467 static core::identifier_string times_overflow_name = core::identifier_string("@times_overflow");
1468 return times_overflow_name;
1469 }
1470
1471 // This function is not intended for public use and therefore not documented in Doxygen.
1472 inline
1474 {
1475 sort_expression target_sort;
1476 if (s0 == nat() && s1 == sort_machine_word::machine_word() && s2 == sort_machine_word::machine_word())
1477 {
1478 target_sort = nat();
1479 }
1480 else if (s0 == sort_pos::pos() && s1 == sort_machine_word::machine_word() && s2 == sort_machine_word::machine_word())
1481 {
1482 target_sort = sort_pos::pos();
1483 }
1484 else
1485 {
1486 throw mcrl2::runtime_error("Cannot compute target sort for times_overflow with domain sorts " + pp(s0) + ", " + pp(s1) + ", " + pp(s2) + ". ");
1487 }
1488
1489 function_symbol times_overflow(times_overflow_name(), make_function_sort_(s0, s1, s2, target_sort));
1490 return times_overflow;
1491 }
1492
1493 /// \brief Recogniser for function \@times_overflow.
1494 /// \param e A data expression.
1495 /// \return true iff e is the function symbol matching \@times_overflow.
1496 inline
1498 {
1500 {
1501 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
1502 return f.name() == times_overflow_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 3 && (f == times_overflow(nat(), sort_machine_word::machine_word(), sort_machine_word::machine_word()) || f == times_overflow(sort_pos::pos(), sort_machine_word::machine_word(), sort_machine_word::machine_word()));
1503 }
1504 return false;
1505 }
1506
1507 /// \brief Application of function symbol \@times_overflow.
1508
1509 /// \param[in] arg0 A data expression.
1510 /// \param[in] arg1 A data expression.
1511 /// \param[in] arg2 A data expression.
1512 /// \return Application of \@times_overflow to a number of arguments.
1513 inline
1514 application times_overflow(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
1515 {
1516 return sort_nat::times_overflow(arg0.sort(), arg1.sort(), arg2.sort())(arg0, arg1, arg2);
1517 }
1518
1519 /// \brief Make an application of function symbol \@times_overflow.
1520 /// \param[out] result The data expression where the \@times_overflow expression is put.
1521
1522 /// \param[in] arg0 A data expression.
1523 /// \param[in] arg1 A data expression.
1524 /// \param[in] arg2 A data expression.
1525 inline
1526 void make_times_overflow(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
1527 {
1528 make_application(result, sort_nat::times_overflow(arg0.sort(), arg1.sort(), arg2.sort()),arg0, arg1, arg2);
1529 }
1530
1531 /// \brief Recogniser for application of \@times_overflow.
1532 /// \param e A data expression.
1533 /// \return true iff e is an application of function symbol times_overflow to a
1534 /// number of arguments.
1535 inline
1537 {
1538 return is_application(e) && is_times_overflow_function_symbol(atermpp::down_cast<application>(e).head());
1539 }
1540
1541 /// \brief Generate identifier div.
1542 /// \return Identifier div.
1543 inline
1544 const core::identifier_string& div_name()
1545 {
1546 static core::identifier_string div_name = core::identifier_string("div");
1547 return div_name;
1548 }
1549
1550 /// \brief Constructor for function symbol div.
1551
1552 /// \return Function symbol div.
1553 inline
1554 const function_symbol& div()
1555 {
1557 return div;
1558 }
1559
1560 /// \brief Recogniser for function div.
1561 /// \param e A data expression.
1562 /// \return true iff e is the function symbol matching div.
1563 inline
1564 bool is_div_function_symbol(const atermpp::aterm& e)
1565 {
1567 {
1568 return atermpp::down_cast<function_symbol>(e) == div();
1569 }
1570 return false;
1571 }
1572
1573 /// \brief Application of function symbol div.
1574
1575 /// \param[in] arg0 A data expression.
1576 /// \param[in] arg1 A data expression.
1577 /// \return Application of div to a number of arguments.
1578 inline
1579 application div(const data_expression& arg0, const data_expression& arg1)
1580 {
1581 return sort_nat::div()(arg0, arg1);
1582 }
1583
1584 /// \brief Make an application of function symbol div.
1585 /// \param[out] result The data expression where the div expression is put.
1586
1587 /// \param[in] arg0 A data expression.
1588 /// \param[in] arg1 A data expression.
1589 inline
1590 void make_div(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1591 {
1592 make_application(result, sort_nat::div(),arg0, arg1);
1593 }
1594
1595 /// \brief Recogniser for application of div.
1596 /// \param e A data expression.
1597 /// \return true iff e is an application of function symbol div to a
1598 /// number of arguments.
1599 inline
1600 bool is_div_application(const atermpp::aterm& e)
1601 {
1602 return is_application(e) && is_div_function_symbol(atermpp::down_cast<application>(e).head());
1603 }
1604
1605 /// \brief Generate identifier mod.
1606 /// \return Identifier mod.
1607 inline
1608 const core::identifier_string& mod_name()
1609 {
1610 static core::identifier_string mod_name = core::identifier_string("mod");
1611 return mod_name;
1612 }
1613
1614 /// \brief Constructor for function symbol mod.
1615
1616 /// \return Function symbol mod.
1617 inline
1618 const function_symbol& mod()
1619 {
1621 return mod;
1622 }
1623
1624 /// \brief Recogniser for function mod.
1625 /// \param e A data expression.
1626 /// \return true iff e is the function symbol matching mod.
1627 inline
1628 bool is_mod_function_symbol(const atermpp::aterm& e)
1629 {
1631 {
1632 return atermpp::down_cast<function_symbol>(e) == mod();
1633 }
1634 return false;
1635 }
1636
1637 /// \brief Application of function symbol mod.
1638
1639 /// \param[in] arg0 A data expression.
1640 /// \param[in] arg1 A data expression.
1641 /// \return Application of mod to a number of arguments.
1642 inline
1643 application mod(const data_expression& arg0, const data_expression& arg1)
1644 {
1645 return sort_nat::mod()(arg0, arg1);
1646 }
1647
1648 /// \brief Make an application of function symbol mod.
1649 /// \param[out] result The data expression where the mod expression is put.
1650
1651 /// \param[in] arg0 A data expression.
1652 /// \param[in] arg1 A data expression.
1653 inline
1654 void make_mod(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1655 {
1656 make_application(result, sort_nat::mod(),arg0, arg1);
1657 }
1658
1659 /// \brief Recogniser for application of mod.
1660 /// \param e A data expression.
1661 /// \return true iff e is an application of function symbol mod to a
1662 /// number of arguments.
1663 inline
1664 bool is_mod_application(const atermpp::aterm& e)
1665 {
1666 return is_application(e) && is_mod_function_symbol(atermpp::down_cast<application>(e).head());
1667 }
1668
1669 /// \brief Generate identifier exp.
1670 /// \return Identifier exp.
1671 inline
1672 const core::identifier_string& exp_name()
1673 {
1674 static core::identifier_string exp_name = core::identifier_string("exp");
1675 return exp_name;
1676 }
1677
1678 // This function is not intended for public use and therefore not documented in Doxygen.
1679 inline
1681 {
1682 sort_expression target_sort;
1683 if (s0 == sort_pos::pos() && s1 == nat())
1684 {
1685 target_sort = sort_pos::pos();
1686 }
1687 else if (s0 == nat() && s1 == nat())
1688 {
1689 target_sort = nat();
1690 }
1691 else
1692 {
1693 throw mcrl2::runtime_error("Cannot compute target sort for exp with domain sorts " + pp(s0) + ", " + pp(s1) + ". ");
1694 }
1695
1697 return exp;
1698 }
1699
1700 /// \brief Recogniser for function exp.
1701 /// \param e A data expression.
1702 /// \return true iff e is the function symbol matching exp.
1703 inline
1704 bool is_exp_function_symbol(const atermpp::aterm& e)
1705 {
1707 {
1708 const function_symbol& f = atermpp::down_cast<function_symbol>(e);
1709 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()));
1710 }
1711 return false;
1712 }
1713
1714 /// \brief Application of function symbol exp.
1715
1716 /// \param[in] arg0 A data expression.
1717 /// \param[in] arg1 A data expression.
1718 /// \return Application of exp to a number of arguments.
1719 inline
1720 application exp(const data_expression& arg0, const data_expression& arg1)
1721 {
1722 return sort_nat::exp(arg0.sort(), arg1.sort())(arg0, arg1);
1723 }
1724
1725 /// \brief Make an application of function symbol exp.
1726 /// \param[out] result The data expression where the exp expression is put.
1727
1728 /// \param[in] arg0 A data expression.
1729 /// \param[in] arg1 A data expression.
1730 inline
1731 void make_exp(data_expression& result, const data_expression& arg0, const data_expression& arg1)
1732 {
1733 make_application(result, sort_nat::exp(arg0.sort(), arg1.sort()),arg0, arg1);
1734 }
1735
1736 /// \brief Recogniser for application of exp.
1737 /// \param e A data expression.
1738 /// \return true iff e is an application of function symbol exp to a
1739 /// number of arguments.
1740 inline
1741 bool is_exp_application(const atermpp::aterm& e)
1742 {
1743 return is_application(e) && is_exp_function_symbol(atermpp::down_cast<application>(e).head());
1744 }
1745
1746 /// \brief Generate identifier sqrt.
1747 /// \return Identifier sqrt.
1748 inline
1749 const core::identifier_string& sqrt_name()
1750 {
1751 static core::identifier_string sqrt_name = core::identifier_string("sqrt");
1752 return sqrt_name;
1753 }
1754
1755 /// \brief Constructor for function symbol sqrt.
1756
1757 /// \return Function symbol sqrt.
1758 inline
1759 const function_symbol& sqrt()
1760 {
1762 return sqrt;
1763 }
1764
1765 /// \brief Recogniser for function sqrt.
1766 /// \param e A data expression.
1767 /// \return true iff e is the function symbol matching sqrt.
1768 inline
1769 bool is_sqrt_function_symbol(const atermpp::aterm& e)
1770 {
1772 {
1773 return atermpp::down_cast<function_symbol>(e) == sqrt();
1774 }
1775 return false;
1776 }
1777
1778 /// \brief Application of function symbol sqrt.
1779
1780 /// \param[in] arg0 A data expression.
1781 /// \return Application of sqrt to a number of arguments.
1782 inline
1783 application sqrt(const data_expression& arg0)
1784 {
1785 return sort_nat::sqrt()(arg0);
1786 }
1787
1788 /// \brief Make an application of function symbol sqrt.
1789 /// \param[out] result The data expression where the sqrt expression is put.
1790
1791 /// \param[in] arg0 A data expression.
1792 inline
1793 void make_sqrt(data_expression& result, const data_expression& arg0)
1794 {
1795 make_application(result, sort_nat::sqrt(),arg0);
1796 }
1797
1798 /// \brief Recogniser for application of sqrt.
1799 /// \param e A data expression.
1800 /// \return true iff e is an application of function symbol sqrt to a
1801 /// number of arguments.
1802 inline
1803 bool is_sqrt_application(const atermpp::aterm& e)
1804 {
1805 return is_application(e) && is_sqrt_function_symbol(atermpp::down_cast<application>(e).head());
1806 }
1807
1808 /// \brief Generate identifier \@natpred.
1809 /// \return Identifier \@natpred.
1810 inline
1811 const core::identifier_string& natpred_name()
1812 {
1813 static core::identifier_string natpred_name = core::identifier_string("@natpred");
1814 return natpred_name;
1815 }
1816
1817 /// \brief Constructor for function symbol \@natpred.
1818
1819 /// \return Function symbol natpred.
1820 inline
1821 const function_symbol& natpred()
1822 {
1824 return natpred;
1825 }
1826
1827 /// \brief Recogniser for function \@natpred.
1828 /// \param e A data expression.
1829 /// \return true iff e is the function symbol matching \@natpred.
1830 inline
1832 {
1834 {
1835 return atermpp::down_cast<function_symbol>(e) == natpred();
1836 }
1837 return false;
1838 }
1839
1840 /// \brief Application of function symbol \@natpred.
1841
1842 /// \param[in] arg0 A data expression.
1843 /// \return Application of \@natpred to a number of arguments.
1844 inline
1845 application natpred(const data_expression& arg0)
1846 {
1847 return sort_nat::natpred()(arg0);
1848 }
1849
1850 /// \brief Make an application of function symbol \@natpred.
1851 /// \param[out] result The data expression where the \@natpred expression is put.
1852
1853 /// \param[in] arg0 A data expression.
1854 inline
1855 void make_natpred(data_expression& result, const data_expression& arg0)
1856 {
1857 make_application(result, sort_nat::natpred(),arg0);
1858 }
1859
1860 /// \brief Recogniser for application of \@natpred.
1861 /// \param e A data expression.
1862 /// \return true iff e is an application of function symbol natpred to a
1863 /// number of arguments.
1864 inline
1865 bool is_natpred_application(const atermpp::aterm& e)
1866 {
1867 return is_application(e) && is_natpred_function_symbol(atermpp::down_cast<application>(e).head());
1868 }
1869
1870 /// \brief Generate identifier \@is_odd.
1871 /// \return Identifier \@is_odd.
1872 inline
1873 const core::identifier_string& is_odd_name()
1874 {
1875 static core::identifier_string is_odd_name = core::identifier_string("@is_odd");
1876 return is_odd_name;
1877 }
1878
1879 /// \brief Constructor for function symbol \@is_odd.
1880
1881 /// \return Function symbol is_odd.
1882 inline
1884 {
1886 return is_odd;
1887 }
1888
1889 /// \brief Recogniser for function \@is_odd.
1890 /// \param e A data expression.
1891 /// \return true iff e is the function symbol matching \@is_odd.
1892 inline
1894 {
1896 {
1897 return atermpp::down_cast<function_symbol>(e) == is_odd();
1898 }
1899 return false;
1900 }
1901
1902 /// \brief Application of function symbol \@is_odd.
1903
1904 /// \param[in] arg0 A data expression.
1905 /// \return Application of \@is_odd to a number of arguments.
1906 inline
1907 application is_odd(const data_expression& arg0)
1908 {
1909 return sort_nat::is_odd()(arg0);
1910 }
1911
1912 /// \brief Make an application of function symbol \@is_odd.
1913 /// \param[out] result The data expression where the \@is_odd expression is put.
1914
1915 /// \param[in] arg0 A data expression.
1916 inline
1918 {
1919 make_application(result, sort_nat::is_odd(),arg0);
1920 }
1921
1922 /// \brief Recogniser for application of \@is_odd.
1923 /// \param e A data expression.
1924 /// \return true iff e is an application of function symbol is_odd to a
1925 /// number of arguments.
1926 inline
1928 {
1929 return is_application(e) && is_is_odd_function_symbol(atermpp::down_cast<application>(e).head());
1930 }
1931
1932 /// \brief Generate identifier \@div2.
1933 /// \return Identifier \@div2.
1934 inline
1935 const core::identifier_string& div2_name()
1936 {
1937 static core::identifier_string div2_name = core::identifier_string("@div2");
1938 return div2_name;
1939 }
1940
1941 /// \brief Constructor for function symbol \@div2.
1942
1943 /// \return Function symbol div2.
1944 inline
1946 {
1948 return div2;
1949 }
1950
1951 /// \brief Recogniser for function \@div2.
1952 /// \param e A data expression.
1953 /// \return true iff e is the function symbol matching \@div2.
1954 inline
1956 {
1958 {
1959 return atermpp::down_cast<function_symbol>(e) == div2();
1960 }
1961 return false;
1962 }
1963
1964 /// \brief Application of function symbol \@div2.
1965
1966 /// \param[in] arg0 A data expression.
1967 /// \return Application of \@div2 to a number of arguments.
1968 inline
1969 application div2(const data_expression& arg0)
1970 {
1971 return sort_nat::div2()(arg0);
1972 }
1973
1974 /// \brief Make an application of function symbol \@div2.
1975 /// \param[out] result The data expression where the \@div2 expression is put.
1976
1977 /// \param[in] arg0 A data expression.
1978 inline
1979 void make_div2(data_expression& result, const data_expression& arg0)
1980 {
1981 make_application(result, sort_nat::div2(),arg0);
1982 }
1983
1984 /// \brief Recogniser for application of \@div2.
1985 /// \param e A data expression.
1986 /// \return true iff e is an application of function symbol div2 to a
1987 /// number of arguments.
1988 inline
1990 {
1991 return is_application(e) && is_div2_function_symbol(atermpp::down_cast<application>(e).head());
1992 }
1993
1994 /// \brief Generate identifier \@monus.
1995 /// \return Identifier \@monus.
1996 inline
1997 const core::identifier_string& monus_name()
1998 {
1999 static core::identifier_string monus_name = core::identifier_string("@monus");
2000 return monus_name;
2001 }
2002
2003 /// \brief Constructor for function symbol \@monus.
2004
2005 /// \return Function symbol monus.
2006 inline
2007 const function_symbol& monus()
2008 {
2010 return monus;
2011 }
2012
2013 /// \brief Recogniser for function \@monus.
2014 /// \param e A data expression.
2015 /// \return true iff e is the function symbol matching \@monus.
2016 inline
2017 bool is_monus_function_symbol(const atermpp::aterm& e)
2018 {
2020 {
2021 return atermpp::down_cast<function_symbol>(e) == monus();
2022 }
2023 return false;
2024 }
2025
2026 /// \brief Application of function symbol \@monus.
2027
2028 /// \param[in] arg0 A data expression.
2029 /// \param[in] arg1 A data expression.
2030 /// \return Application of \@monus to a number of arguments.
2031 inline
2032 application monus(const data_expression& arg0, const data_expression& arg1)
2033 {
2034 return sort_nat::monus()(arg0, arg1);
2035 }
2036
2037 /// \brief Make an application of function symbol \@monus.
2038 /// \param[out] result The data expression where the \@monus expression is put.
2039
2040 /// \param[in] arg0 A data expression.
2041 /// \param[in] arg1 A data expression.
2042 inline
2043 void make_monus(data_expression& result, const data_expression& arg0, const data_expression& arg1)
2044 {
2045 make_application(result, sort_nat::monus(),arg0, arg1);
2046 }
2047
2048 /// \brief Recogniser for application of \@monus.
2049 /// \param e A data expression.
2050 /// \return true iff e is an application of function symbol monus to a
2051 /// number of arguments.
2052 inline
2053 bool is_monus_application(const atermpp::aterm& e)
2054 {
2055 return is_application(e) && is_monus_function_symbol(atermpp::down_cast<application>(e).head());
2056 }
2057
2058 /// \brief Generate identifier \@monus_whr.
2059 /// \return Identifier \@monus_whr.
2060 inline
2061 const core::identifier_string& monus_whr_name()
2062 {
2063 static core::identifier_string monus_whr_name = core::identifier_string("@monus_whr");
2064 return monus_whr_name;
2065 }
2066
2067 /// \brief Constructor for function symbol \@monus_whr.
2068
2069 /// \return Function symbol monus_whr.
2070 inline
2072 {
2074 return monus_whr;
2075 }
2076
2077 /// \brief Recogniser for function \@monus_whr.
2078 /// \param e A data expression.
2079 /// \return true iff e is the function symbol matching \@monus_whr.
2080 inline
2082 {
2084 {
2085 return atermpp::down_cast<function_symbol>(e) == monus_whr();
2086 }
2087 return false;
2088 }
2089
2090 /// \brief Application of function symbol \@monus_whr.
2091
2092 /// \param[in] arg0 A data expression.
2093 /// \param[in] arg1 A data expression.
2094 /// \param[in] arg2 A data expression.
2095 /// \param[in] arg3 A data expression.
2096 /// \param[in] arg4 A data expression.
2097 /// \return Application of \@monus_whr to a number of arguments.
2098 inline
2099 application monus_whr(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
2100 {
2101 return sort_nat::monus_whr()(arg0, arg1, arg2, arg3, arg4);
2102 }
2103
2104 /// \brief Make an application of function symbol \@monus_whr.
2105 /// \param[out] result The data expression where the \@monus_whr expression is put.
2106
2107 /// \param[in] arg0 A data expression.
2108 /// \param[in] arg1 A data expression.
2109 /// \param[in] arg2 A data expression.
2110 /// \param[in] arg3 A data expression.
2111 /// \param[in] arg4 A data expression.
2112 inline
2113 void make_monus_whr(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
2114 {
2115 make_application(result, sort_nat::monus_whr(),arg0, arg1, arg2, arg3, arg4);
2116 }
2117
2118 /// \brief Recogniser for application of \@monus_whr.
2119 /// \param e A data expression.
2120 /// \return true iff e is an application of function symbol monus_whr to a
2121 /// number of arguments.
2122 inline
2124 {
2125 return is_application(e) && is_monus_whr_function_symbol(atermpp::down_cast<application>(e).head());
2126 }
2127
2128 /// \brief Generate identifier \@exp_aux3p.
2129 /// \return Identifier \@exp_aux3p.
2130 inline
2131 const core::identifier_string& exp_aux3p_name()
2132 {
2133 static core::identifier_string exp_aux3p_name = core::identifier_string("@exp_aux3p");
2134 return exp_aux3p_name;
2135 }
2136
2137 /// \brief Constructor for function symbol \@exp_aux3p.
2138
2139 /// \return Function symbol exp_aux3p.
2140 inline
2142 {
2144 return exp_aux3p;
2145 }
2146
2147 /// \brief Recogniser for function \@exp_aux3p.
2148 /// \param e A data expression.
2149 /// \return true iff e is the function symbol matching \@exp_aux3p.
2150 inline
2152 {
2154 {
2155 return atermpp::down_cast<function_symbol>(e) == exp_aux3p();
2156 }
2157 return false;
2158 }
2159
2160 /// \brief Application of function symbol \@exp_aux3p.
2161
2162 /// \param[in] arg0 A data expression.
2163 /// \param[in] arg1 A data expression.
2164 /// \param[in] arg2 A data expression.
2165 /// \return Application of \@exp_aux3p to a number of arguments.
2166 inline
2167 application exp_aux3p(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2168 {
2169 return sort_nat::exp_aux3p()(arg0, arg1, arg2);
2170 }
2171
2172 /// \brief Make an application of function symbol \@exp_aux3p.
2173 /// \param[out] result The data expression where the \@exp_aux3p expression is put.
2174
2175 /// \param[in] arg0 A data expression.
2176 /// \param[in] arg1 A data expression.
2177 /// \param[in] arg2 A data expression.
2178 inline
2179 void make_exp_aux3p(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2180 {
2181 make_application(result, sort_nat::exp_aux3p(),arg0, arg1, arg2);
2182 }
2183
2184 /// \brief Recogniser for application of \@exp_aux3p.
2185 /// \param e A data expression.
2186 /// \return true iff e is an application of function symbol exp_aux3p to a
2187 /// number of arguments.
2188 inline
2190 {
2191 return is_application(e) && is_exp_aux3p_function_symbol(atermpp::down_cast<application>(e).head());
2192 }
2193
2194 /// \brief Generate identifier \@exp_aux4p.
2195 /// \return Identifier \@exp_aux4p.
2196 inline
2197 const core::identifier_string& exp_aux4p_name()
2198 {
2199 static core::identifier_string exp_aux4p_name = core::identifier_string("@exp_aux4p");
2200 return exp_aux4p_name;
2201 }
2202
2203 /// \brief Constructor for function symbol \@exp_aux4p.
2204
2205 /// \return Function symbol exp_aux4p.
2206 inline
2208 {
2210 return exp_aux4p;
2211 }
2212
2213 /// \brief Recogniser for function \@exp_aux4p.
2214 /// \param e A data expression.
2215 /// \return true iff e is the function symbol matching \@exp_aux4p.
2216 inline
2218 {
2220 {
2221 return atermpp::down_cast<function_symbol>(e) == exp_aux4p();
2222 }
2223 return false;
2224 }
2225
2226 /// \brief Application of function symbol \@exp_aux4p.
2227
2228 /// \param[in] arg0 A data expression.
2229 /// \param[in] arg1 A data expression.
2230 /// \param[in] arg2 A data expression.
2231 /// \param[in] arg3 A data expression.
2232 /// \return Application of \@exp_aux4p to a number of arguments.
2233 inline
2234 application exp_aux4p(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
2235 {
2236 return sort_nat::exp_aux4p()(arg0, arg1, arg2, arg3);
2237 }
2238
2239 /// \brief Make an application of function symbol \@exp_aux4p.
2240 /// \param[out] result The data expression where the \@exp_aux4p expression is put.
2241
2242 /// \param[in] arg0 A data expression.
2243 /// \param[in] arg1 A data expression.
2244 /// \param[in] arg2 A data expression.
2245 /// \param[in] arg3 A data expression.
2246 inline
2247 void make_exp_aux4p(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
2248 {
2249 make_application(result, sort_nat::exp_aux4p(),arg0, arg1, arg2, arg3);
2250 }
2251
2252 /// \brief Recogniser for application of \@exp_aux4p.
2253 /// \param e A data expression.
2254 /// \return true iff e is an application of function symbol exp_aux4p to a
2255 /// number of arguments.
2256 inline
2258 {
2259 return is_application(e) && is_exp_aux4p_function_symbol(atermpp::down_cast<application>(e).head());
2260 }
2261
2262 /// \brief Generate identifier \@exp_aux3n.
2263 /// \return Identifier \@exp_aux3n.
2264 inline
2265 const core::identifier_string& exp_aux3n_name()
2266 {
2267 static core::identifier_string exp_aux3n_name = core::identifier_string("@exp_aux3n");
2268 return exp_aux3n_name;
2269 }
2270
2271 /// \brief Constructor for function symbol \@exp_aux3n.
2272
2273 /// \return Function symbol exp_aux3n.
2274 inline
2276 {
2278 return exp_aux3n;
2279 }
2280
2281 /// \brief Recogniser for function \@exp_aux3n.
2282 /// \param e A data expression.
2283 /// \return true iff e is the function symbol matching \@exp_aux3n.
2284 inline
2286 {
2288 {
2289 return atermpp::down_cast<function_symbol>(e) == exp_aux3n();
2290 }
2291 return false;
2292 }
2293
2294 /// \brief Application of function symbol \@exp_aux3n.
2295
2296 /// \param[in] arg0 A data expression.
2297 /// \param[in] arg1 A data expression.
2298 /// \param[in] arg2 A data expression.
2299 /// \return Application of \@exp_aux3n to a number of arguments.
2300 inline
2301 application exp_aux3n(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2302 {
2303 return sort_nat::exp_aux3n()(arg0, arg1, arg2);
2304 }
2305
2306 /// \brief Make an application of function symbol \@exp_aux3n.
2307 /// \param[out] result The data expression where the \@exp_aux3n expression is put.
2308
2309 /// \param[in] arg0 A data expression.
2310 /// \param[in] arg1 A data expression.
2311 /// \param[in] arg2 A data expression.
2312 inline
2313 void make_exp_aux3n(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2314 {
2315 make_application(result, sort_nat::exp_aux3n(),arg0, arg1, arg2);
2316 }
2317
2318 /// \brief Recogniser for application of \@exp_aux3n.
2319 /// \param e A data expression.
2320 /// \return true iff e is an application of function symbol exp_aux3n to a
2321 /// number of arguments.
2322 inline
2324 {
2325 return is_application(e) && is_exp_aux3n_function_symbol(atermpp::down_cast<application>(e).head());
2326 }
2327
2328 /// \brief Generate identifier \@exp_aux4n.
2329 /// \return Identifier \@exp_aux4n.
2330 inline
2331 const core::identifier_string& exp_aux4n_name()
2332 {
2333 static core::identifier_string exp_aux4n_name = core::identifier_string("@exp_aux4n");
2334 return exp_aux4n_name;
2335 }
2336
2337 /// \brief Constructor for function symbol \@exp_aux4n.
2338
2339 /// \return Function symbol exp_aux4n.
2340 inline
2342 {
2344 return exp_aux4n;
2345 }
2346
2347 /// \brief Recogniser for function \@exp_aux4n.
2348 /// \param e A data expression.
2349 /// \return true iff e is the function symbol matching \@exp_aux4n.
2350 inline
2352 {
2354 {
2355 return atermpp::down_cast<function_symbol>(e) == exp_aux4n();
2356 }
2357 return false;
2358 }
2359
2360 /// \brief Application of function symbol \@exp_aux4n.
2361
2362 /// \param[in] arg0 A data expression.
2363 /// \param[in] arg1 A data expression.
2364 /// \param[in] arg2 A data expression.
2365 /// \param[in] arg3 A data expression.
2366 /// \return Application of \@exp_aux4n to a number of arguments.
2367 inline
2368 application exp_aux4n(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
2369 {
2370 return sort_nat::exp_aux4n()(arg0, arg1, arg2, arg3);
2371 }
2372
2373 /// \brief Make an application of function symbol \@exp_aux4n.
2374 /// \param[out] result The data expression where the \@exp_aux4n expression is put.
2375
2376 /// \param[in] arg0 A data expression.
2377 /// \param[in] arg1 A data expression.
2378 /// \param[in] arg2 A data expression.
2379 /// \param[in] arg3 A data expression.
2380 inline
2381 void make_exp_aux4n(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
2382 {
2383 make_application(result, sort_nat::exp_aux4n(),arg0, arg1, arg2, arg3);
2384 }
2385
2386 /// \brief Recogniser for application of \@exp_aux4n.
2387 /// \param e A data expression.
2388 /// \return true iff e is an application of function symbol exp_aux4n to a
2389 /// number of arguments.
2390 inline
2392 {
2393 return is_application(e) && is_exp_aux4n_function_symbol(atermpp::down_cast<application>(e).head());
2394 }
2395
2396 /// \brief Generate identifier \@exp_auxtruep.
2397 /// \return Identifier \@exp_auxtruep.
2398 inline
2399 const core::identifier_string& exp_auxtruep_name()
2400 {
2401 static core::identifier_string exp_auxtruep_name = core::identifier_string("@exp_auxtruep");
2402 return exp_auxtruep_name;
2403 }
2404
2405 /// \brief Constructor for function symbol \@exp_auxtruep.
2406
2407 /// \return Function symbol exp_auxtruep.
2408 inline
2410 {
2412 return exp_auxtruep;
2413 }
2414
2415 /// \brief Recogniser for function \@exp_auxtruep.
2416 /// \param e A data expression.
2417 /// \return true iff e is the function symbol matching \@exp_auxtruep.
2418 inline
2420 {
2422 {
2423 return atermpp::down_cast<function_symbol>(e) == exp_auxtruep();
2424 }
2425 return false;
2426 }
2427
2428 /// \brief Application of function symbol \@exp_auxtruep.
2429
2430 /// \param[in] arg0 A data expression.
2431 /// \param[in] arg1 A data expression.
2432 /// \param[in] arg2 A data expression.
2433 /// \return Application of \@exp_auxtruep to a number of arguments.
2434 inline
2435 application exp_auxtruep(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2436 {
2437 return sort_nat::exp_auxtruep()(arg0, arg1, arg2);
2438 }
2439
2440 /// \brief Make an application of function symbol \@exp_auxtruep.
2441 /// \param[out] result The data expression where the \@exp_auxtruep expression is put.
2442
2443 /// \param[in] arg0 A data expression.
2444 /// \param[in] arg1 A data expression.
2445 /// \param[in] arg2 A data expression.
2446 inline
2447 void make_exp_auxtruep(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2448 {
2449 make_application(result, sort_nat::exp_auxtruep(),arg0, arg1, arg2);
2450 }
2451
2452 /// \brief Recogniser for application of \@exp_auxtruep.
2453 /// \param e A data expression.
2454 /// \return true iff e is an application of function symbol exp_auxtruep to a
2455 /// number of arguments.
2456 inline
2458 {
2459 return is_application(e) && is_exp_auxtruep_function_symbol(atermpp::down_cast<application>(e).head());
2460 }
2461
2462 /// \brief Generate identifier \@exp_auxtruen.
2463 /// \return Identifier \@exp_auxtruen.
2464 inline
2465 const core::identifier_string& exp_auxtruen_name()
2466 {
2467 static core::identifier_string exp_auxtruen_name = core::identifier_string("@exp_auxtruen");
2468 return exp_auxtruen_name;
2469 }
2470
2471 /// \brief Constructor for function symbol \@exp_auxtruen.
2472
2473 /// \return Function symbol exp_auxtruen.
2474 inline
2476 {
2478 return exp_auxtruen;
2479 }
2480
2481 /// \brief Recogniser for function \@exp_auxtruen.
2482 /// \param e A data expression.
2483 /// \return true iff e is the function symbol matching \@exp_auxtruen.
2484 inline
2486 {
2488 {
2489 return atermpp::down_cast<function_symbol>(e) == exp_auxtruen();
2490 }
2491 return false;
2492 }
2493
2494 /// \brief Application of function symbol \@exp_auxtruen.
2495
2496 /// \param[in] arg0 A data expression.
2497 /// \param[in] arg1 A data expression.
2498 /// \param[in] arg2 A data expression.
2499 /// \return Application of \@exp_auxtruen to a number of arguments.
2500 inline
2501 application exp_auxtruen(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2502 {
2503 return sort_nat::exp_auxtruen()(arg0, arg1, arg2);
2504 }
2505
2506 /// \brief Make an application of function symbol \@exp_auxtruen.
2507 /// \param[out] result The data expression where the \@exp_auxtruen expression is put.
2508
2509 /// \param[in] arg0 A data expression.
2510 /// \param[in] arg1 A data expression.
2511 /// \param[in] arg2 A data expression.
2512 inline
2513 void make_exp_auxtruen(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2514 {
2515 make_application(result, sort_nat::exp_auxtruen(),arg0, arg1, arg2);
2516 }
2517
2518 /// \brief Recogniser for application of \@exp_auxtruen.
2519 /// \param e A data expression.
2520 /// \return true iff e is an application of function symbol exp_auxtruen to a
2521 /// number of arguments.
2522 inline
2524 {
2525 return is_application(e) && is_exp_auxtruen_function_symbol(atermpp::down_cast<application>(e).head());
2526 }
2527
2528 /// \brief Generate identifier \@exp_auxfalsep.
2529 /// \return Identifier \@exp_auxfalsep.
2530 inline
2531 const core::identifier_string& exp_auxfalsep_name()
2532 {
2533 static core::identifier_string exp_auxfalsep_name = core::identifier_string("@exp_auxfalsep");
2534 return exp_auxfalsep_name;
2535 }
2536
2537 /// \brief Constructor for function symbol \@exp_auxfalsep.
2538
2539 /// \return Function symbol exp_auxfalsep.
2540 inline
2542 {
2544 return exp_auxfalsep;
2545 }
2546
2547 /// \brief Recogniser for function \@exp_auxfalsep.
2548 /// \param e A data expression.
2549 /// \return true iff e is the function symbol matching \@exp_auxfalsep.
2550 inline
2552 {
2554 {
2555 return atermpp::down_cast<function_symbol>(e) == exp_auxfalsep();
2556 }
2557 return false;
2558 }
2559
2560 /// \brief Application of function symbol \@exp_auxfalsep.
2561
2562 /// \param[in] arg0 A data expression.
2563 /// \param[in] arg1 A data expression.
2564 /// \param[in] arg2 A data expression.
2565 /// \return Application of \@exp_auxfalsep to a number of arguments.
2566 inline
2567 application exp_auxfalsep(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2568 {
2569 return sort_nat::exp_auxfalsep()(arg0, arg1, arg2);
2570 }
2571
2572 /// \brief Make an application of function symbol \@exp_auxfalsep.
2573 /// \param[out] result The data expression where the \@exp_auxfalsep expression is put.
2574
2575 /// \param[in] arg0 A data expression.
2576 /// \param[in] arg1 A data expression.
2577 /// \param[in] arg2 A data expression.
2578 inline
2579 void make_exp_auxfalsep(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2580 {
2581 make_application(result, sort_nat::exp_auxfalsep(),arg0, arg1, arg2);
2582 }
2583
2584 /// \brief Recogniser for application of \@exp_auxfalsep.
2585 /// \param e A data expression.
2586 /// \return true iff e is an application of function symbol exp_auxfalsep to a
2587 /// number of arguments.
2588 inline
2590 {
2591 return is_application(e) && is_exp_auxfalsep_function_symbol(atermpp::down_cast<application>(e).head());
2592 }
2593
2594 /// \brief Generate identifier \@exp_auxfalsen.
2595 /// \return Identifier \@exp_auxfalsen.
2596 inline
2597 const core::identifier_string& exp_auxfalsen_name()
2598 {
2599 static core::identifier_string exp_auxfalsen_name = core::identifier_string("@exp_auxfalsen");
2600 return exp_auxfalsen_name;
2601 }
2602
2603 /// \brief Constructor for function symbol \@exp_auxfalsen.
2604
2605 /// \return Function symbol exp_auxfalsen.
2606 inline
2608 {
2610 return exp_auxfalsen;
2611 }
2612
2613 /// \brief Recogniser for function \@exp_auxfalsen.
2614 /// \param e A data expression.
2615 /// \return true iff e is the function symbol matching \@exp_auxfalsen.
2616 inline
2618 {
2620 {
2621 return atermpp::down_cast<function_symbol>(e) == exp_auxfalsen();
2622 }
2623 return false;
2624 }
2625
2626 /// \brief Application of function symbol \@exp_auxfalsen.
2627
2628 /// \param[in] arg0 A data expression.
2629 /// \param[in] arg1 A data expression.
2630 /// \param[in] arg2 A data expression.
2631 /// \return Application of \@exp_auxfalsen to a number of arguments.
2632 inline
2633 application exp_auxfalsen(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2634 {
2635 return sort_nat::exp_auxfalsen()(arg0, arg1, arg2);
2636 }
2637
2638 /// \brief Make an application of function symbol \@exp_auxfalsen.
2639 /// \param[out] result The data expression where the \@exp_auxfalsen expression is put.
2640
2641 /// \param[in] arg0 A data expression.
2642 /// \param[in] arg1 A data expression.
2643 /// \param[in] arg2 A data expression.
2644 inline
2645 void make_exp_auxfalsen(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
2646 {
2647 make_application(result, sort_nat::exp_auxfalsen(),arg0, arg1, arg2);
2648 }
2649
2650 /// \brief Recogniser for application of \@exp_auxfalsen.
2651 /// \param e A data expression.
2652 /// \return true iff e is an application of function symbol exp_auxfalsen to a
2653 /// number of arguments.
2654 inline
2656 {
2657 return is_application(e) && is_exp_auxfalsen_function_symbol(atermpp::down_cast<application>(e).head());
2658 }
2659
2660 /// \brief Generate identifier \@div_bold.
2661 /// \return Identifier \@div_bold.
2662 inline
2663 const core::identifier_string& div_bold_name()
2664 {
2665 static core::identifier_string div_bold_name = core::identifier_string("@div_bold");
2666 return div_bold_name;
2667 }
2668
2669 /// \brief Constructor for function symbol \@div_bold.
2670
2671 /// \return Function symbol div_bold.
2672 inline
2674 {
2676 return div_bold;
2677 }
2678
2679 /// \brief Recogniser for function \@div_bold.
2680 /// \param e A data expression.
2681 /// \return true iff e is the function symbol matching \@div_bold.
2682 inline
2684 {
2686 {
2687 return atermpp::down_cast<function_symbol>(e) == div_bold();
2688 }
2689 return false;
2690 }
2691
2692 /// \brief Application of function symbol \@div_bold.
2693
2694 /// \param[in] arg0 A data expression.
2695 /// \param[in] arg1 A data expression.
2696 /// \return Application of \@div_bold to a number of arguments.
2697 inline
2698 application div_bold(const data_expression& arg0, const data_expression& arg1)
2699 {
2700 return sort_nat::div_bold()(arg0, arg1);
2701 }
2702
2703 /// \brief Make an application of function symbol \@div_bold.
2704 /// \param[out] result The data expression where the \@div_bold expression is put.
2705
2706 /// \param[in] arg0 A data expression.
2707 /// \param[in] arg1 A data expression.
2708 inline
2709 void make_div_bold(data_expression& result, const data_expression& arg0, const data_expression& arg1)
2710 {
2711 make_application(result, sort_nat::div_bold(),arg0, arg1);
2712 }
2713
2714 /// \brief Recogniser for application of \@div_bold.
2715 /// \param e A data expression.
2716 /// \return true iff e is an application of function symbol div_bold to a
2717 /// number of arguments.
2718 inline
2720 {
2721 return is_application(e) && is_div_bold_function_symbol(atermpp::down_cast<application>(e).head());
2722 }
2723
2724 /// \brief Generate identifier \@div_bold_whr.
2725 /// \return Identifier \@div_bold_whr.
2726 inline
2727 const core::identifier_string& div_bold_whr_name()
2728 {
2729 static core::identifier_string div_bold_whr_name = core::identifier_string("@div_bold_whr");
2730 return div_bold_whr_name;
2731 }
2732
2733 /// \brief Constructor for function symbol \@div_bold_whr.
2734
2735 /// \return Function symbol div_bold_whr.
2736 inline
2738 {
2739 static function_symbol div_bold_whr(div_bold_whr_name(), make_function_sort_(nat(), sort_machine_word::machine_word(), sort_pos::pos(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word()));
2740 return div_bold_whr;
2741 }
2742
2743 /// \brief Recogniser for function \@div_bold_whr.
2744 /// \param e A data expression.
2745 /// \return true iff e is the function symbol matching \@div_bold_whr.
2746 inline
2748 {
2750 {
2751 return atermpp::down_cast<function_symbol>(e) == div_bold_whr();
2752 }
2753 return false;
2754 }
2755
2756 /// \brief Application of function symbol \@div_bold_whr.
2757
2758 /// \param[in] arg0 A data expression.
2759 /// \param[in] arg1 A data expression.
2760 /// \param[in] arg2 A data expression.
2761 /// \param[in] arg3 A data expression.
2762 /// \param[in] arg4 A data expression.
2763 /// \param[in] arg5 A data expression.
2764 /// \return Application of \@div_bold_whr to a number of arguments.
2765 inline
2766 application div_bold_whr(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4, const data_expression& arg5)
2767 {
2768 return sort_nat::div_bold_whr()(arg0, arg1, arg2, arg3, arg4, arg5);
2769 }
2770
2771 /// \brief Make an application of function symbol \@div_bold_whr.
2772 /// \param[out] result The data expression where the \@div_bold_whr expression is put.
2773
2774 /// \param[in] arg0 A data expression.
2775 /// \param[in] arg1 A data expression.
2776 /// \param[in] arg2 A data expression.
2777 /// \param[in] arg3 A data expression.
2778 /// \param[in] arg4 A data expression.
2779 /// \param[in] arg5 A data expression.
2780 inline
2781 void make_div_bold_whr(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4, const data_expression& arg5)
2782 {
2783 make_application(result, sort_nat::div_bold_whr(),arg0, arg1, arg2, arg3, arg4, arg5);
2784 }
2785
2786 /// \brief Recogniser for application of \@div_bold_whr.
2787 /// \param e A data expression.
2788 /// \return true iff e is an application of function symbol div_bold_whr to a
2789 /// number of arguments.
2790 inline
2792 {
2793 return is_application(e) && is_div_bold_whr_function_symbol(atermpp::down_cast<application>(e).head());
2794 }
2795
2796 /// \brief Generate identifier \@div_whr1.
2797 /// \return Identifier \@div_whr1.
2798 inline
2799 const core::identifier_string& div_whr1_name()
2800 {
2801 static core::identifier_string div_whr1_name = core::identifier_string("@div_whr1");
2802 return div_whr1_name;
2803 }
2804
2805 /// \brief Constructor for function symbol \@div_whr1.
2806
2807 /// \return Function symbol div_whr1.
2808 inline
2810 {
2812 return div_whr1;
2813 }
2814
2815 /// \brief Recogniser for function \@div_whr1.
2816 /// \param e A data expression.
2817 /// \return true iff e is the function symbol matching \@div_whr1.
2818 inline
2820 {
2822 {
2823 return atermpp::down_cast<function_symbol>(e) == div_whr1();
2824 }
2825 return false;
2826 }
2827
2828 /// \brief Application of function symbol \@div_whr1.
2829
2830 /// \param[in] arg0 A data expression.
2831 /// \param[in] arg1 A data expression.
2832 /// \param[in] arg2 A data expression.
2833 /// \param[in] arg3 A data expression.
2834 /// \return Application of \@div_whr1 to a number of arguments.
2835 inline
2836 application div_whr1(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
2837 {
2838 return sort_nat::div_whr1()(arg0, arg1, arg2, arg3);
2839 }
2840
2841 /// \brief Make an application of function symbol \@div_whr1.
2842 /// \param[out] result The data expression where the \@div_whr1 expression is put.
2843
2844 /// \param[in] arg0 A data expression.
2845 /// \param[in] arg1 A data expression.
2846 /// \param[in] arg2 A data expression.
2847 /// \param[in] arg3 A data expression.
2848 inline
2849 void make_div_whr1(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
2850 {
2851 make_application(result, sort_nat::div_whr1(),arg0, arg1, arg2, arg3);
2852 }
2853
2854 /// \brief Recogniser for application of \@div_whr1.
2855 /// \param e A data expression.
2856 /// \return true iff e is an application of function symbol div_whr1 to a
2857 /// number of arguments.
2858 inline
2860 {
2861 return is_application(e) && is_div_whr1_function_symbol(atermpp::down_cast<application>(e).head());
2862 }
2863
2864 /// \brief Generate identifier \@div_whr2.
2865 /// \return Identifier \@div_whr2.
2866 inline
2867 const core::identifier_string& div_whr2_name()
2868 {
2869 static core::identifier_string div_whr2_name = core::identifier_string("@div_whr2");
2870 return div_whr2_name;
2871 }
2872
2873 /// \brief Constructor for function symbol \@div_whr2.
2874
2875 /// \return Function symbol div_whr2.
2876 inline
2878 {
2880 return div_whr2;
2881 }
2882
2883 /// \brief Recogniser for function \@div_whr2.
2884 /// \param e A data expression.
2885 /// \return true iff e is the function symbol matching \@div_whr2.
2886 inline
2888 {
2890 {
2891 return atermpp::down_cast<function_symbol>(e) == div_whr2();
2892 }
2893 return false;
2894 }
2895
2896 /// \brief Application of function symbol \@div_whr2.
2897
2898 /// \param[in] arg0 A data expression.
2899 /// \param[in] arg1 A data expression.
2900 /// \param[in] arg2 A data expression.
2901 /// \param[in] arg3 A data expression.
2902 /// \param[in] arg4 A data expression.
2903 /// \return Application of \@div_whr2 to a number of arguments.
2904 inline
2905 application div_whr2(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
2906 {
2907 return sort_nat::div_whr2()(arg0, arg1, arg2, arg3, arg4);
2908 }
2909
2910 /// \brief Make an application of function symbol \@div_whr2.
2911 /// \param[out] result The data expression where the \@div_whr2 expression is put.
2912
2913 /// \param[in] arg0 A data expression.
2914 /// \param[in] arg1 A data expression.
2915 /// \param[in] arg2 A data expression.
2916 /// \param[in] arg3 A data expression.
2917 /// \param[in] arg4 A data expression.
2918 inline
2919 void make_div_whr2(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
2920 {
2921 make_application(result, sort_nat::div_whr2(),arg0, arg1, arg2, arg3, arg4);
2922 }
2923
2924 /// \brief Recogniser for application of \@div_whr2.
2925 /// \param e A data expression.
2926 /// \return true iff e is an application of function symbol div_whr2 to a
2927 /// number of arguments.
2928 inline
2930 {
2931 return is_application(e) && is_div_whr2_function_symbol(atermpp::down_cast<application>(e).head());
2932 }
2933
2934 /// \brief Generate identifier \@mod_whr1.
2935 /// \return Identifier \@mod_whr1.
2936 inline
2937 const core::identifier_string& mod_whr1_name()
2938 {
2939 static core::identifier_string mod_whr1_name = core::identifier_string("@mod_whr1");
2940 return mod_whr1_name;
2941 }
2942
2943 /// \brief Constructor for function symbol \@mod_whr1.
2944
2945 /// \return Function symbol mod_whr1.
2946 inline
2948 {
2950 return mod_whr1;
2951 }
2952
2953 /// \brief Recogniser for function \@mod_whr1.
2954 /// \param e A data expression.
2955 /// \return true iff e is the function symbol matching \@mod_whr1.
2956 inline
2958 {
2960 {
2961 return atermpp::down_cast<function_symbol>(e) == mod_whr1();
2962 }
2963 return false;
2964 }
2965
2966 /// \brief Application of function symbol \@mod_whr1.
2967
2968 /// \param[in] arg0 A data expression.
2969 /// \param[in] arg1 A data expression.
2970 /// \param[in] arg2 A data expression.
2971 /// \param[in] arg3 A data expression.
2972 /// \return Application of \@mod_whr1 to a number of arguments.
2973 inline
2974 application mod_whr1(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
2975 {
2976 return sort_nat::mod_whr1()(arg0, arg1, arg2, arg3);
2977 }
2978
2979 /// \brief Make an application of function symbol \@mod_whr1.
2980 /// \param[out] result The data expression where the \@mod_whr1 expression is put.
2981
2982 /// \param[in] arg0 A data expression.
2983 /// \param[in] arg1 A data expression.
2984 /// \param[in] arg2 A data expression.
2985 /// \param[in] arg3 A data expression.
2986 inline
2987 void make_mod_whr1(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
2988 {
2989 make_application(result, sort_nat::mod_whr1(),arg0, arg1, arg2, arg3);
2990 }
2991
2992 /// \brief Recogniser for application of \@mod_whr1.
2993 /// \param e A data expression.
2994 /// \return true iff e is an application of function symbol mod_whr1 to a
2995 /// number of arguments.
2996 inline
2998 {
2999 return is_application(e) && is_mod_whr1_function_symbol(atermpp::down_cast<application>(e).head());
3000 }
3001
3002 /// \brief Generate identifier \@divmod_aux.
3003 /// \return Identifier \@divmod_aux.
3004 inline
3005 const core::identifier_string& divmod_aux_name()
3006 {
3007 static core::identifier_string divmod_aux_name = core::identifier_string("@divmod_aux");
3008 return divmod_aux_name;
3009 }
3010
3011 /// \brief Constructor for function symbol \@divmod_aux.
3012
3013 /// \return Function symbol divmod_aux.
3014 inline
3016 {
3018 return divmod_aux;
3019 }
3020
3021 /// \brief Recogniser for function \@divmod_aux.
3022 /// \param e A data expression.
3023 /// \return true iff e is the function symbol matching \@divmod_aux.
3024 inline
3026 {
3028 {
3029 return atermpp::down_cast<function_symbol>(e) == divmod_aux();
3030 }
3031 return false;
3032 }
3033
3034 /// \brief Application of function symbol \@divmod_aux.
3035
3036 /// \param[in] arg0 A data expression.
3037 /// \param[in] arg1 A data expression.
3038 /// \return Application of \@divmod_aux to a number of arguments.
3039 inline
3040 application divmod_aux(const data_expression& arg0, const data_expression& arg1)
3041 {
3042 return sort_nat::divmod_aux()(arg0, arg1);
3043 }
3044
3045 /// \brief Make an application of function symbol \@divmod_aux.
3046 /// \param[out] result The data expression where the \@divmod_aux expression is put.
3047
3048 /// \param[in] arg0 A data expression.
3049 /// \param[in] arg1 A data expression.
3050 inline
3051 void make_divmod_aux(data_expression& result, const data_expression& arg0, const data_expression& arg1)
3052 {
3053 make_application(result, sort_nat::divmod_aux(),arg0, arg1);
3054 }
3055
3056 /// \brief Recogniser for application of \@divmod_aux.
3057 /// \param e A data expression.
3058 /// \return true iff e is an application of function symbol divmod_aux to a
3059 /// number of arguments.
3060 inline
3062 {
3063 return is_application(e) && is_divmod_aux_function_symbol(atermpp::down_cast<application>(e).head());
3064 }
3065
3066 /// \brief Generate identifier \@divmod_aux_whr1.
3067 /// \return Identifier \@divmod_aux_whr1.
3068 inline
3069 const core::identifier_string& divmod_aux_whr1_name()
3070 {
3071 static core::identifier_string divmod_aux_whr1_name = core::identifier_string("@divmod_aux_whr1");
3072 return divmod_aux_whr1_name;
3073 }
3074
3075 /// \brief Constructor for function symbol \@divmod_aux_whr1.
3076
3077 /// \return Function symbol divmod_aux_whr1.
3078 inline
3080 {
3082 return divmod_aux_whr1;
3083 }
3084
3085 /// \brief Recogniser for function \@divmod_aux_whr1.
3086 /// \param e A data expression.
3087 /// \return true iff e is the function symbol matching \@divmod_aux_whr1.
3088 inline
3090 {
3092 {
3093 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr1();
3094 }
3095 return false;
3096 }
3097
3098 /// \brief Application of function symbol \@divmod_aux_whr1.
3099
3100 /// \param[in] arg0 A data expression.
3101 /// \param[in] arg1 A data expression.
3102 /// \param[in] arg2 A data expression.
3103 /// \param[in] arg3 A data expression.
3104 /// \return Application of \@divmod_aux_whr1 to a number of arguments.
3105 inline
3106 application divmod_aux_whr1(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3107 {
3108 return sort_nat::divmod_aux_whr1()(arg0, arg1, arg2, arg3);
3109 }
3110
3111 /// \brief Make an application of function symbol \@divmod_aux_whr1.
3112 /// \param[out] result The data expression where the \@divmod_aux_whr1 expression is put.
3113
3114 /// \param[in] arg0 A data expression.
3115 /// \param[in] arg1 A data expression.
3116 /// \param[in] arg2 A data expression.
3117 /// \param[in] arg3 A data expression.
3118 inline
3119 void make_divmod_aux_whr1(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3120 {
3121 make_application(result, sort_nat::divmod_aux_whr1(),arg0, arg1, arg2, arg3);
3122 }
3123
3124 /// \brief Recogniser for application of \@divmod_aux_whr1.
3125 /// \param e A data expression.
3126 /// \return true iff e is an application of function symbol divmod_aux_whr1 to a
3127 /// number of arguments.
3128 inline
3130 {
3131 return is_application(e) && is_divmod_aux_whr1_function_symbol(atermpp::down_cast<application>(e).head());
3132 }
3133
3134 /// \brief Generate identifier \@divmod_aux_whr2.
3135 /// \return Identifier \@divmod_aux_whr2.
3136 inline
3137 const core::identifier_string& divmod_aux_whr2_name()
3138 {
3139 static core::identifier_string divmod_aux_whr2_name = core::identifier_string("@divmod_aux_whr2");
3140 return divmod_aux_whr2_name;
3141 }
3142
3143 /// \brief Constructor for function symbol \@divmod_aux_whr2.
3144
3145 /// \return Function symbol divmod_aux_whr2.
3146 inline
3148 {
3150 return divmod_aux_whr2;
3151 }
3152
3153 /// \brief Recogniser for function \@divmod_aux_whr2.
3154 /// \param e A data expression.
3155 /// \return true iff e is the function symbol matching \@divmod_aux_whr2.
3156 inline
3158 {
3160 {
3161 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr2();
3162 }
3163 return false;
3164 }
3165
3166 /// \brief Application of function symbol \@divmod_aux_whr2.
3167
3168 /// \param[in] arg0 A data expression.
3169 /// \param[in] arg1 A data expression.
3170 /// \param[in] arg2 A data expression.
3171 /// \param[in] arg3 A data expression.
3172 /// \param[in] arg4 A data expression.
3173 /// \return Application of \@divmod_aux_whr2 to a number of arguments.
3174 inline
3175 application divmod_aux_whr2(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
3176 {
3177 return sort_nat::divmod_aux_whr2()(arg0, arg1, arg2, arg3, arg4);
3178 }
3179
3180 /// \brief Make an application of function symbol \@divmod_aux_whr2.
3181 /// \param[out] result The data expression where the \@divmod_aux_whr2 expression is put.
3182
3183 /// \param[in] arg0 A data expression.
3184 /// \param[in] arg1 A data expression.
3185 /// \param[in] arg2 A data expression.
3186 /// \param[in] arg3 A data expression.
3187 /// \param[in] arg4 A data expression.
3188 inline
3189 void make_divmod_aux_whr2(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
3190 {
3191 make_application(result, sort_nat::divmod_aux_whr2(),arg0, arg1, arg2, arg3, arg4);
3192 }
3193
3194 /// \brief Recogniser for application of \@divmod_aux_whr2.
3195 /// \param e A data expression.
3196 /// \return true iff e is an application of function symbol divmod_aux_whr2 to a
3197 /// number of arguments.
3198 inline
3200 {
3201 return is_application(e) && is_divmod_aux_whr2_function_symbol(atermpp::down_cast<application>(e).head());
3202 }
3203
3204 /// \brief Generate identifier \@divmod_aux_whr3.
3205 /// \return Identifier \@divmod_aux_whr3.
3206 inline
3207 const core::identifier_string& divmod_aux_whr3_name()
3208 {
3209 static core::identifier_string divmod_aux_whr3_name = core::identifier_string("@divmod_aux_whr3");
3210 return divmod_aux_whr3_name;
3211 }
3212
3213 /// \brief Constructor for function symbol \@divmod_aux_whr3.
3214
3215 /// \return Function symbol divmod_aux_whr3.
3216 inline
3218 {
3220 return divmod_aux_whr3;
3221 }
3222
3223 /// \brief Recogniser for function \@divmod_aux_whr3.
3224 /// \param e A data expression.
3225 /// \return true iff e is the function symbol matching \@divmod_aux_whr3.
3226 inline
3228 {
3230 {
3231 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr3();
3232 }
3233 return false;
3234 }
3235
3236 /// \brief Application of function symbol \@divmod_aux_whr3.
3237
3238 /// \param[in] arg0 A data expression.
3239 /// \param[in] arg1 A data expression.
3240 /// \param[in] arg2 A data expression.
3241 /// \param[in] arg3 A data expression.
3242 /// \param[in] arg4 A data expression.
3243 /// \return Application of \@divmod_aux_whr3 to a number of arguments.
3244 inline
3245 application divmod_aux_whr3(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
3246 {
3247 return sort_nat::divmod_aux_whr3()(arg0, arg1, arg2, arg3, arg4);
3248 }
3249
3250 /// \brief Make an application of function symbol \@divmod_aux_whr3.
3251 /// \param[out] result The data expression where the \@divmod_aux_whr3 expression is put.
3252
3253 /// \param[in] arg0 A data expression.
3254 /// \param[in] arg1 A data expression.
3255 /// \param[in] arg2 A data expression.
3256 /// \param[in] arg3 A data expression.
3257 /// \param[in] arg4 A data expression.
3258 inline
3259 void make_divmod_aux_whr3(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
3260 {
3261 make_application(result, sort_nat::divmod_aux_whr3(),arg0, arg1, arg2, arg3, arg4);
3262 }
3263
3264 /// \brief Recogniser for application of \@divmod_aux_whr3.
3265 /// \param e A data expression.
3266 /// \return true iff e is an application of function symbol divmod_aux_whr3 to a
3267 /// number of arguments.
3268 inline
3270 {
3271 return is_application(e) && is_divmod_aux_whr3_function_symbol(atermpp::down_cast<application>(e).head());
3272 }
3273
3274 /// \brief Generate identifier \@divmod_aux_whr4.
3275 /// \return Identifier \@divmod_aux_whr4.
3276 inline
3277 const core::identifier_string& divmod_aux_whr4_name()
3278 {
3279 static core::identifier_string divmod_aux_whr4_name = core::identifier_string("@divmod_aux_whr4");
3280 return divmod_aux_whr4_name;
3281 }
3282
3283 /// \brief Constructor for function symbol \@divmod_aux_whr4.
3284
3285 /// \return Function symbol divmod_aux_whr4.
3286 inline
3288 {
3290 return divmod_aux_whr4;
3291 }
3292
3293 /// \brief Recogniser for function \@divmod_aux_whr4.
3294 /// \param e A data expression.
3295 /// \return true iff e is the function symbol matching \@divmod_aux_whr4.
3296 inline
3298 {
3300 {
3301 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr4();
3302 }
3303 return false;
3304 }
3305
3306 /// \brief Application of function symbol \@divmod_aux_whr4.
3307
3308 /// \param[in] arg0 A data expression.
3309 /// \param[in] arg1 A data expression.
3310 /// \param[in] arg2 A data expression.
3311 /// \param[in] arg3 A data expression.
3312 /// \return Application of \@divmod_aux_whr4 to a number of arguments.
3313 inline
3314 application divmod_aux_whr4(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3315 {
3316 return sort_nat::divmod_aux_whr4()(arg0, arg1, arg2, arg3);
3317 }
3318
3319 /// \brief Make an application of function symbol \@divmod_aux_whr4.
3320 /// \param[out] result The data expression where the \@divmod_aux_whr4 expression is put.
3321
3322 /// \param[in] arg0 A data expression.
3323 /// \param[in] arg1 A data expression.
3324 /// \param[in] arg2 A data expression.
3325 /// \param[in] arg3 A data expression.
3326 inline
3327 void make_divmod_aux_whr4(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3328 {
3329 make_application(result, sort_nat::divmod_aux_whr4(),arg0, arg1, arg2, arg3);
3330 }
3331
3332 /// \brief Recogniser for application of \@divmod_aux_whr4.
3333 /// \param e A data expression.
3334 /// \return true iff e is an application of function symbol divmod_aux_whr4 to a
3335 /// number of arguments.
3336 inline
3338 {
3339 return is_application(e) && is_divmod_aux_whr4_function_symbol(atermpp::down_cast<application>(e).head());
3340 }
3341
3342 /// \brief Generate identifier \@divmod_aux_whr5.
3343 /// \return Identifier \@divmod_aux_whr5.
3344 inline
3345 const core::identifier_string& divmod_aux_whr5_name()
3346 {
3347 static core::identifier_string divmod_aux_whr5_name = core::identifier_string("@divmod_aux_whr5");
3348 return divmod_aux_whr5_name;
3349 }
3350
3351 /// \brief Constructor for function symbol \@divmod_aux_whr5.
3352
3353 /// \return Function symbol divmod_aux_whr5.
3354 inline
3356 {
3358 return divmod_aux_whr5;
3359 }
3360
3361 /// \brief Recogniser for function \@divmod_aux_whr5.
3362 /// \param e A data expression.
3363 /// \return true iff e is the function symbol matching \@divmod_aux_whr5.
3364 inline
3366 {
3368 {
3369 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr5();
3370 }
3371 return false;
3372 }
3373
3374 /// \brief Application of function symbol \@divmod_aux_whr5.
3375
3376 /// \param[in] arg0 A data expression.
3377 /// \param[in] arg1 A data expression.
3378 /// \param[in] arg2 A data expression.
3379 /// \param[in] arg3 A data expression.
3380 /// \return Application of \@divmod_aux_whr5 to a number of arguments.
3381 inline
3382 application divmod_aux_whr5(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3383 {
3384 return sort_nat::divmod_aux_whr5()(arg0, arg1, arg2, arg3);
3385 }
3386
3387 /// \brief Make an application of function symbol \@divmod_aux_whr5.
3388 /// \param[out] result The data expression where the \@divmod_aux_whr5 expression is put.
3389
3390 /// \param[in] arg0 A data expression.
3391 /// \param[in] arg1 A data expression.
3392 /// \param[in] arg2 A data expression.
3393 /// \param[in] arg3 A data expression.
3394 inline
3395 void make_divmod_aux_whr5(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3396 {
3397 make_application(result, sort_nat::divmod_aux_whr5(),arg0, arg1, arg2, arg3);
3398 }
3399
3400 /// \brief Recogniser for application of \@divmod_aux_whr5.
3401 /// \param e A data expression.
3402 /// \return true iff e is an application of function symbol divmod_aux_whr5 to a
3403 /// number of arguments.
3404 inline
3406 {
3407 return is_application(e) && is_divmod_aux_whr5_function_symbol(atermpp::down_cast<application>(e).head());
3408 }
3409
3410 /// \brief Generate identifier \@divmod_aux_whr6.
3411 /// \return Identifier \@divmod_aux_whr6.
3412 inline
3413 const core::identifier_string& divmod_aux_whr6_name()
3414 {
3415 static core::identifier_string divmod_aux_whr6_name = core::identifier_string("@divmod_aux_whr6");
3416 return divmod_aux_whr6_name;
3417 }
3418
3419 /// \brief Constructor for function symbol \@divmod_aux_whr6.
3420
3421 /// \return Function symbol divmod_aux_whr6.
3422 inline
3424 {
3426 return divmod_aux_whr6;
3427 }
3428
3429 /// \brief Recogniser for function \@divmod_aux_whr6.
3430 /// \param e A data expression.
3431 /// \return true iff e is the function symbol matching \@divmod_aux_whr6.
3432 inline
3434 {
3436 {
3437 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr6();
3438 }
3439 return false;
3440 }
3441
3442 /// \brief Application of function symbol \@divmod_aux_whr6.
3443
3444 /// \param[in] arg0 A data expression.
3445 /// \param[in] arg1 A data expression.
3446 /// \param[in] arg2 A data expression.
3447 /// \param[in] arg3 A data expression.
3448 /// \param[in] arg4 A data expression.
3449 /// \return Application of \@divmod_aux_whr6 to a number of arguments.
3450 inline
3451 application divmod_aux_whr6(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
3452 {
3453 return sort_nat::divmod_aux_whr6()(arg0, arg1, arg2, arg3, arg4);
3454 }
3455
3456 /// \brief Make an application of function symbol \@divmod_aux_whr6.
3457 /// \param[out] result The data expression where the \@divmod_aux_whr6 expression is put.
3458
3459 /// \param[in] arg0 A data expression.
3460 /// \param[in] arg1 A data expression.
3461 /// \param[in] arg2 A data expression.
3462 /// \param[in] arg3 A data expression.
3463 /// \param[in] arg4 A data expression.
3464 inline
3465 void make_divmod_aux_whr6(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
3466 {
3467 make_application(result, sort_nat::divmod_aux_whr6(),arg0, arg1, arg2, arg3, arg4);
3468 }
3469
3470 /// \brief Recogniser for application of \@divmod_aux_whr6.
3471 /// \param e A data expression.
3472 /// \return true iff e is an application of function symbol divmod_aux_whr6 to a
3473 /// number of arguments.
3474 inline
3476 {
3477 return is_application(e) && is_divmod_aux_whr6_function_symbol(atermpp::down_cast<application>(e).head());
3478 }
3479
3480 /// \brief Generate identifier \@msd.
3481 /// \return Identifier \@msd.
3482 inline
3483 const core::identifier_string& msd_name()
3484 {
3485 static core::identifier_string msd_name = core::identifier_string("@msd");
3486 return msd_name;
3487 }
3488
3489 /// \brief Constructor for function symbol \@msd.
3490
3491 /// \return Function symbol msd.
3492 inline
3494 {
3496 return msd;
3497 }
3498
3499 /// \brief Recogniser for function \@msd.
3500 /// \param e A data expression.
3501 /// \return true iff e is the function symbol matching \@msd.
3502 inline
3504 {
3506 {
3507 return atermpp::down_cast<function_symbol>(e) == msd();
3508 }
3509 return false;
3510 }
3511
3512 /// \brief Application of function symbol \@msd.
3513
3514 /// \param[in] arg0 A data expression.
3515 /// \return Application of \@msd to a number of arguments.
3516 inline
3517 application msd(const data_expression& arg0)
3518 {
3519 return sort_nat::msd()(arg0);
3520 }
3521
3522 /// \brief Make an application of function symbol \@msd.
3523 /// \param[out] result The data expression where the \@msd expression is put.
3524
3525 /// \param[in] arg0 A data expression.
3526 inline
3527 void make_msd(data_expression& result, const data_expression& arg0)
3528 {
3529 make_application(result, sort_nat::msd(),arg0);
3530 }
3531
3532 /// \brief Recogniser for application of \@msd.
3533 /// \param e A data expression.
3534 /// \return true iff e is an application of function symbol msd to a
3535 /// number of arguments.
3536 inline
3538 {
3539 return is_application(e) && is_msd_function_symbol(atermpp::down_cast<application>(e).head());
3540 }
3541
3542 /// \brief Generate identifier \@swap_zero.
3543 /// \return Identifier \@swap_zero.
3544 inline
3545 const core::identifier_string& swap_zero_name()
3546 {
3547 static core::identifier_string swap_zero_name = core::identifier_string("@swap_zero");
3548 return swap_zero_name;
3549 }
3550
3551 /// \brief Constructor for function symbol \@swap_zero.
3552
3553 /// \return Function symbol swap_zero.
3554 inline
3555 const function_symbol& swap_zero()
3556 {
3558 return swap_zero;
3559 }
3560
3561 /// \brief Recogniser for function \@swap_zero.
3562 /// \param e A data expression.
3563 /// \return true iff e is the function symbol matching \@swap_zero.
3564 inline
3566 {
3568 {
3569 return atermpp::down_cast<function_symbol>(e) == swap_zero();
3570 }
3571 return false;
3572 }
3573
3574 /// \brief Application of function symbol \@swap_zero.
3575
3576 /// \param[in] arg0 A data expression.
3577 /// \param[in] arg1 A data expression.
3578 /// \return Application of \@swap_zero to a number of arguments.
3579 inline
3580 application swap_zero(const data_expression& arg0, const data_expression& arg1)
3581 {
3582 return sort_nat::swap_zero()(arg0, arg1);
3583 }
3584
3585 /// \brief Make an application of function symbol \@swap_zero.
3586 /// \param[out] result The data expression where the \@swap_zero expression is put.
3587
3588 /// \param[in] arg0 A data expression.
3589 /// \param[in] arg1 A data expression.
3590 inline
3591 void make_swap_zero(data_expression& result, const data_expression& arg0, const data_expression& arg1)
3592 {
3593 make_application(result, sort_nat::swap_zero(),arg0, arg1);
3594 }
3595
3596 /// \brief Recogniser for application of \@swap_zero.
3597 /// \param e A data expression.
3598 /// \return true iff e is an application of function symbol swap_zero to a
3599 /// number of arguments.
3600 inline
3601 bool is_swap_zero_application(const atermpp::aterm& e)
3602 {
3603 return is_application(e) && is_swap_zero_function_symbol(atermpp::down_cast<application>(e).head());
3604 }
3605
3606 /// \brief Generate identifier \@swap_zero_add.
3607 /// \return Identifier \@swap_zero_add.
3608 inline
3609 const core::identifier_string& swap_zero_add_name()
3610 {
3611 static core::identifier_string swap_zero_add_name = core::identifier_string("@swap_zero_add");
3612 return swap_zero_add_name;
3613 }
3614
3615 /// \brief Constructor for function symbol \@swap_zero_add.
3616
3617 /// \return Function symbol swap_zero_add.
3618 inline
3620 {
3622 return swap_zero_add;
3623 }
3624
3625 /// \brief Recogniser for function \@swap_zero_add.
3626 /// \param e A data expression.
3627 /// \return true iff e is the function symbol matching \@swap_zero_add.
3628 inline
3630 {
3632 {
3633 return atermpp::down_cast<function_symbol>(e) == swap_zero_add();
3634 }
3635 return false;
3636 }
3637
3638 /// \brief Application of function symbol \@swap_zero_add.
3639
3640 /// \param[in] arg0 A data expression.
3641 /// \param[in] arg1 A data expression.
3642 /// \param[in] arg2 A data expression.
3643 /// \param[in] arg3 A data expression.
3644 /// \return Application of \@swap_zero_add to a number of arguments.
3645 inline
3646 application swap_zero_add(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3647 {
3648 return sort_nat::swap_zero_add()(arg0, arg1, arg2, arg3);
3649 }
3650
3651 /// \brief Make an application of function symbol \@swap_zero_add.
3652 /// \param[out] result The data expression where the \@swap_zero_add expression is put.
3653
3654 /// \param[in] arg0 A data expression.
3655 /// \param[in] arg1 A data expression.
3656 /// \param[in] arg2 A data expression.
3657 /// \param[in] arg3 A data expression.
3658 inline
3659 void make_swap_zero_add(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3660 {
3661 make_application(result, sort_nat::swap_zero_add(),arg0, arg1, arg2, arg3);
3662 }
3663
3664 /// \brief Recogniser for application of \@swap_zero_add.
3665 /// \param e A data expression.
3666 /// \return true iff e is an application of function symbol swap_zero_add to a
3667 /// number of arguments.
3668 inline
3670 {
3671 return is_application(e) && is_swap_zero_add_function_symbol(atermpp::down_cast<application>(e).head());
3672 }
3673
3674 /// \brief Generate identifier \@swap_zero_min.
3675 /// \return Identifier \@swap_zero_min.
3676 inline
3677 const core::identifier_string& swap_zero_min_name()
3678 {
3679 static core::identifier_string swap_zero_min_name = core::identifier_string("@swap_zero_min");
3680 return swap_zero_min_name;
3681 }
3682
3683 /// \brief Constructor for function symbol \@swap_zero_min.
3684
3685 /// \return Function symbol swap_zero_min.
3686 inline
3688 {
3690 return swap_zero_min;
3691 }
3692
3693 /// \brief Recogniser for function \@swap_zero_min.
3694 /// \param e A data expression.
3695 /// \return true iff e is the function symbol matching \@swap_zero_min.
3696 inline
3698 {
3700 {
3701 return atermpp::down_cast<function_symbol>(e) == swap_zero_min();
3702 }
3703 return false;
3704 }
3705
3706 /// \brief Application of function symbol \@swap_zero_min.
3707
3708 /// \param[in] arg0 A data expression.
3709 /// \param[in] arg1 A data expression.
3710 /// \param[in] arg2 A data expression.
3711 /// \param[in] arg3 A data expression.
3712 /// \return Application of \@swap_zero_min to a number of arguments.
3713 inline
3714 application swap_zero_min(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3715 {
3716 return sort_nat::swap_zero_min()(arg0, arg1, arg2, arg3);
3717 }
3718
3719 /// \brief Make an application of function symbol \@swap_zero_min.
3720 /// \param[out] result The data expression where the \@swap_zero_min expression is put.
3721
3722 /// \param[in] arg0 A data expression.
3723 /// \param[in] arg1 A data expression.
3724 /// \param[in] arg2 A data expression.
3725 /// \param[in] arg3 A data expression.
3726 inline
3727 void make_swap_zero_min(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3728 {
3729 make_application(result, sort_nat::swap_zero_min(),arg0, arg1, arg2, arg3);
3730 }
3731
3732 /// \brief Recogniser for application of \@swap_zero_min.
3733 /// \param e A data expression.
3734 /// \return true iff e is an application of function symbol swap_zero_min to a
3735 /// number of arguments.
3736 inline
3738 {
3739 return is_application(e) && is_swap_zero_min_function_symbol(atermpp::down_cast<application>(e).head());
3740 }
3741
3742 /// \brief Generate identifier \@swap_zero_monus.
3743 /// \return Identifier \@swap_zero_monus.
3744 inline
3745 const core::identifier_string& swap_zero_monus_name()
3746 {
3747 static core::identifier_string swap_zero_monus_name = core::identifier_string("@swap_zero_monus");
3748 return swap_zero_monus_name;
3749 }
3750
3751 /// \brief Constructor for function symbol \@swap_zero_monus.
3752
3753 /// \return Function symbol swap_zero_monus.
3754 inline
3756 {
3758 return swap_zero_monus;
3759 }
3760
3761 /// \brief Recogniser for function \@swap_zero_monus.
3762 /// \param e A data expression.
3763 /// \return true iff e is the function symbol matching \@swap_zero_monus.
3764 inline
3766 {
3768 {
3769 return atermpp::down_cast<function_symbol>(e) == swap_zero_monus();
3770 }
3771 return false;
3772 }
3773
3774 /// \brief Application of function symbol \@swap_zero_monus.
3775
3776 /// \param[in] arg0 A data expression.
3777 /// \param[in] arg1 A data expression.
3778 /// \param[in] arg2 A data expression.
3779 /// \param[in] arg3 A data expression.
3780 /// \return Application of \@swap_zero_monus to a number of arguments.
3781 inline
3782 application swap_zero_monus(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3783 {
3784 return sort_nat::swap_zero_monus()(arg0, arg1, arg2, arg3);
3785 }
3786
3787 /// \brief Make an application of function symbol \@swap_zero_monus.
3788 /// \param[out] result The data expression where the \@swap_zero_monus expression is put.
3789
3790 /// \param[in] arg0 A data expression.
3791 /// \param[in] arg1 A data expression.
3792 /// \param[in] arg2 A data expression.
3793 /// \param[in] arg3 A data expression.
3794 inline
3795 void make_swap_zero_monus(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3796 {
3797 make_application(result, sort_nat::swap_zero_monus(),arg0, arg1, arg2, arg3);
3798 }
3799
3800 /// \brief Recogniser for application of \@swap_zero_monus.
3801 /// \param e A data expression.
3802 /// \return true iff e is an application of function symbol swap_zero_monus to a
3803 /// number of arguments.
3804 inline
3806 {
3807 return is_application(e) && is_swap_zero_monus_function_symbol(atermpp::down_cast<application>(e).head());
3808 }
3809
3810 /// \brief Generate identifier \@sqrt_whr1.
3811 /// \return Identifier \@sqrt_whr1.
3812 inline
3813 const core::identifier_string& sqrt_whr1_name()
3814 {
3815 static core::identifier_string sqrt_whr1_name = core::identifier_string("@sqrt_whr1");
3816 return sqrt_whr1_name;
3817 }
3818
3819 /// \brief Constructor for function symbol \@sqrt_whr1.
3820
3821 /// \return Function symbol sqrt_whr1.
3822 inline
3824 {
3825 static function_symbol sqrt_whr1(sqrt_whr1_name(), make_function_sort_(sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), nat()));
3826 return sqrt_whr1;
3827 }
3828
3829 /// \brief Recogniser for function \@sqrt_whr1.
3830 /// \param e A data expression.
3831 /// \return true iff e is the function symbol matching \@sqrt_whr1.
3832 inline
3834 {
3836 {
3837 return atermpp::down_cast<function_symbol>(e) == sqrt_whr1();
3838 }
3839 return false;
3840 }
3841
3842 /// \brief Application of function symbol \@sqrt_whr1.
3843
3844 /// \param[in] arg0 A data expression.
3845 /// \param[in] arg1 A data expression.
3846 /// \param[in] arg2 A data expression.
3847 /// \param[in] arg3 A data expression.
3848 /// \return Application of \@sqrt_whr1 to a number of arguments.
3849 inline
3850 application sqrt_whr1(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3851 {
3852 return sort_nat::sqrt_whr1()(arg0, arg1, arg2, arg3);
3853 }
3854
3855 /// \brief Make an application of function symbol \@sqrt_whr1.
3856 /// \param[out] result The data expression where the \@sqrt_whr1 expression is put.
3857
3858 /// \param[in] arg0 A data expression.
3859 /// \param[in] arg1 A data expression.
3860 /// \param[in] arg2 A data expression.
3861 /// \param[in] arg3 A data expression.
3862 inline
3863 void make_sqrt_whr1(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
3864 {
3865 make_application(result, sort_nat::sqrt_whr1(),arg0, arg1, arg2, arg3);
3866 }
3867
3868 /// \brief Recogniser for application of \@sqrt_whr1.
3869 /// \param e A data expression.
3870 /// \return true iff e is an application of function symbol sqrt_whr1 to a
3871 /// number of arguments.
3872 inline
3874 {
3875 return is_application(e) && is_sqrt_whr1_function_symbol(atermpp::down_cast<application>(e).head());
3876 }
3877
3878 /// \brief Generate identifier \@sqrt_whr2.
3879 /// \return Identifier \@sqrt_whr2.
3880 inline
3881 const core::identifier_string& sqrt_whr2_name()
3882 {
3883 static core::identifier_string sqrt_whr2_name = core::identifier_string("@sqrt_whr2");
3884 return sqrt_whr2_name;
3885 }
3886
3887 /// \brief Constructor for function symbol \@sqrt_whr2.
3888
3889 /// \return Function symbol sqrt_whr2.
3890 inline
3892 {
3893 static function_symbol sqrt_whr2(sqrt_whr2_name(), make_function_sort_(sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), nat()));
3894 return sqrt_whr2;
3895 }
3896
3897 /// \brief Recogniser for function \@sqrt_whr2.
3898 /// \param e A data expression.
3899 /// \return true iff e is the function symbol matching \@sqrt_whr2.
3900 inline
3902 {
3904 {
3905 return atermpp::down_cast<function_symbol>(e) == sqrt_whr2();
3906 }
3907 return false;
3908 }
3909
3910 /// \brief Application of function symbol \@sqrt_whr2.
3911
3912 /// \param[in] arg0 A data expression.
3913 /// \param[in] arg1 A data expression.
3914 /// \param[in] arg2 A data expression.
3915 /// \param[in] arg3 A data expression.
3916 /// \param[in] arg4 A data expression.
3917 /// \return Application of \@sqrt_whr2 to a number of arguments.
3918 inline
3919 application sqrt_whr2(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
3920 {
3921 return sort_nat::sqrt_whr2()(arg0, arg1, arg2, arg3, arg4);
3922 }
3923
3924 /// \brief Make an application of function symbol \@sqrt_whr2.
3925 /// \param[out] result The data expression where the \@sqrt_whr2 expression is put.
3926
3927 /// \param[in] arg0 A data expression.
3928 /// \param[in] arg1 A data expression.
3929 /// \param[in] arg2 A data expression.
3930 /// \param[in] arg3 A data expression.
3931 /// \param[in] arg4 A data expression.
3932 inline
3933 void make_sqrt_whr2(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
3934 {
3935 make_application(result, sort_nat::sqrt_whr2(),arg0, arg1, arg2, arg3, arg4);
3936 }
3937
3938 /// \brief Recogniser for application of \@sqrt_whr2.
3939 /// \param e A data expression.
3940 /// \return true iff e is an application of function symbol sqrt_whr2 to a
3941 /// number of arguments.
3942 inline
3944 {
3945 return is_application(e) && is_sqrt_whr2_function_symbol(atermpp::down_cast<application>(e).head());
3946 }
3947
3948 /// \brief Generate identifier \@sqrt_pair.
3949 /// \return Identifier \@sqrt_pair.
3950 inline
3951 const core::identifier_string& sqrt_pair_name()
3952 {
3953 static core::identifier_string sqrt_pair_name = core::identifier_string("@sqrt_pair");
3954 return sqrt_pair_name;
3955 }
3956
3957 /// \brief Constructor for function symbol \@sqrt_pair.
3958
3959 /// \return Function symbol sqrt_pair.
3960 inline
3962 {
3964 return sqrt_pair;
3965 }
3966
3967 /// \brief Recogniser for function \@sqrt_pair.
3968 /// \param e A data expression.
3969 /// \return true iff e is the function symbol matching \@sqrt_pair.
3970 inline
3972 {
3974 {
3975 return atermpp::down_cast<function_symbol>(e) == sqrt_pair();
3976 }
3977 return false;
3978 }
3979
3980 /// \brief Application of function symbol \@sqrt_pair.
3981
3982 /// \param[in] arg0 A data expression.
3983 /// \return Application of \@sqrt_pair to a number of arguments.
3984 inline
3985 application sqrt_pair(const data_expression& arg0)
3986 {
3987 return sort_nat::sqrt_pair()(arg0);
3988 }
3989
3990 /// \brief Make an application of function symbol \@sqrt_pair.
3991 /// \param[out] result The data expression where the \@sqrt_pair expression is put.
3992
3993 /// \param[in] arg0 A data expression.
3994 inline
3996 {
3997 make_application(result, sort_nat::sqrt_pair(),arg0);
3998 }
3999
4000 /// \brief Recogniser for application of \@sqrt_pair.
4001 /// \param e A data expression.
4002 /// \return true iff e is an application of function symbol sqrt_pair to a
4003 /// number of arguments.
4004 inline
4006 {
4007 return is_application(e) && is_sqrt_pair_function_symbol(atermpp::down_cast<application>(e).head());
4008 }
4009
4010 /// \brief Generate identifier \@sqrt_pair_whr1.
4011 /// \return Identifier \@sqrt_pair_whr1.
4012 inline
4013 const core::identifier_string& sqrt_pair_whr1_name()
4014 {
4015 static core::identifier_string sqrt_pair_whr1_name = core::identifier_string("@sqrt_pair_whr1");
4016 return sqrt_pair_whr1_name;
4017 }
4018
4019 /// \brief Constructor for function symbol \@sqrt_pair_whr1.
4020
4021 /// \return Function symbol sqrt_pair_whr1.
4022 inline
4024 {
4026 return sqrt_pair_whr1;
4027 }
4028
4029 /// \brief Recogniser for function \@sqrt_pair_whr1.
4030 /// \param e A data expression.
4031 /// \return true iff e is the function symbol matching \@sqrt_pair_whr1.
4032 inline
4034 {
4036 {
4037 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr1();
4038 }
4039 return false;
4040 }
4041
4042 /// \brief Application of function symbol \@sqrt_pair_whr1.
4043
4044 /// \param[in] arg0 A data expression.
4045 /// \param[in] arg1 A data expression.
4046 /// \param[in] arg2 A data expression.
4047 /// \param[in] arg3 A data expression.
4048 /// \return Application of \@sqrt_pair_whr1 to a number of arguments.
4049 inline
4050 application sqrt_pair_whr1(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
4051 {
4052 return sort_nat::sqrt_pair_whr1()(arg0, arg1, arg2, arg3);
4053 }
4054
4055 /// \brief Make an application of function symbol \@sqrt_pair_whr1.
4056 /// \param[out] result The data expression where the \@sqrt_pair_whr1 expression is put.
4057
4058 /// \param[in] arg0 A data expression.
4059 /// \param[in] arg1 A data expression.
4060 /// \param[in] arg2 A data expression.
4061 /// \param[in] arg3 A data expression.
4062 inline
4063 void make_sqrt_pair_whr1(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3)
4064 {
4065 make_application(result, sort_nat::sqrt_pair_whr1(),arg0, arg1, arg2, arg3);
4066 }
4067
4068 /// \brief Recogniser for application of \@sqrt_pair_whr1.
4069 /// \param e A data expression.
4070 /// \return true iff e is an application of function symbol sqrt_pair_whr1 to a
4071 /// number of arguments.
4072 inline
4074 {
4075 return is_application(e) && is_sqrt_pair_whr1_function_symbol(atermpp::down_cast<application>(e).head());
4076 }
4077
4078 /// \brief Generate identifier \@sqrt_pair_whr2.
4079 /// \return Identifier \@sqrt_pair_whr2.
4080 inline
4081 const core::identifier_string& sqrt_pair_whr2_name()
4082 {
4083 static core::identifier_string sqrt_pair_whr2_name = core::identifier_string("@sqrt_pair_whr2");
4084 return sqrt_pair_whr2_name;
4085 }
4086
4087 /// \brief Constructor for function symbol \@sqrt_pair_whr2.
4088
4089 /// \return Function symbol sqrt_pair_whr2.
4090 inline
4092 {
4093 static function_symbol sqrt_pair_whr2(sqrt_pair_whr2_name(), make_function_sort_(sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), sort_machine_word::machine_word(), nat(), natnatpair()));
4094 return sqrt_pair_whr2;
4095 }
4096
4097 /// \brief Recogniser for function \@sqrt_pair_whr2.
4098 /// \param e A data expression.
4099 /// \return true iff e is the function symbol matching \@sqrt_pair_whr2.
4100 inline
4102 {
4104 {
4105 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr2();
4106 }
4107 return false;
4108 }
4109
4110 /// \brief Application of function symbol \@sqrt_pair_whr2.
4111
4112 /// \param[in] arg0 A data expression.
4113 /// \param[in] arg1 A data expression.
4114 /// \param[in] arg2 A data expression.
4115 /// \param[in] arg3 A data expression.
4116 /// \param[in] arg4 A data expression.
4117 /// \return Application of \@sqrt_pair_whr2 to a number of arguments.
4118 inline
4119 application sqrt_pair_whr2(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
4120 {
4121 return sort_nat::sqrt_pair_whr2()(arg0, arg1, arg2, arg3, arg4);
4122 }
4123
4124 /// \brief Make an application of function symbol \@sqrt_pair_whr2.
4125 /// \param[out] result The data expression where the \@sqrt_pair_whr2 expression is put.
4126
4127 /// \param[in] arg0 A data expression.
4128 /// \param[in] arg1 A data expression.
4129 /// \param[in] arg2 A data expression.
4130 /// \param[in] arg3 A data expression.
4131 /// \param[in] arg4 A data expression.
4132 inline
4133 void make_sqrt_pair_whr2(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
4134 {
4135 make_application(result, sort_nat::sqrt_pair_whr2(),arg0, arg1, arg2, arg3, arg4);
4136 }
4137
4138 /// \brief Recogniser for application of \@sqrt_pair_whr2.
4139 /// \param e A data expression.
4140 /// \return true iff e is an application of function symbol sqrt_pair_whr2 to a
4141 /// number of arguments.
4142 inline
4144 {
4145 return is_application(e) && is_sqrt_pair_whr2_function_symbol(atermpp::down_cast<application>(e).head());
4146 }
4147
4148 /// \brief Generate identifier \@sqrt_pair_whr3.
4149 /// \return Identifier \@sqrt_pair_whr3.
4150 inline
4151 const core::identifier_string& sqrt_pair_whr3_name()
4152 {
4153 static core::identifier_string sqrt_pair_whr3_name = core::identifier_string("@sqrt_pair_whr3");
4154 return sqrt_pair_whr3_name;
4155 }
4156
4157 /// \brief Constructor for function symbol \@sqrt_pair_whr3.
4158
4159 /// \return Function symbol sqrt_pair_whr3.
4160 inline
4162 {
4164 return sqrt_pair_whr3;
4165 }
4166
4167 /// \brief Recogniser for function \@sqrt_pair_whr3.
4168 /// \param e A data expression.
4169 /// \return true iff e is the function symbol matching \@sqrt_pair_whr3.
4170 inline
4172 {
4174 {
4175 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr3();
4176 }
4177 return false;
4178 }
4179
4180 /// \brief Application of function symbol \@sqrt_pair_whr3.
4181
4182 /// \param[in] arg0 A data expression.
4183 /// \param[in] arg1 A data expression.
4184 /// \param[in] arg2 A data expression.
4185 /// \return Application of \@sqrt_pair_whr3 to a number of arguments.
4186 inline
4187 application sqrt_pair_whr3(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
4188 {
4189 return sort_nat::sqrt_pair_whr3()(arg0, arg1, arg2);
4190 }
4191
4192 /// \brief Make an application of function symbol \@sqrt_pair_whr3.
4193 /// \param[out] result The data expression where the \@sqrt_pair_whr3 expression is put.
4194
4195 /// \param[in] arg0 A data expression.
4196 /// \param[in] arg1 A data expression.
4197 /// \param[in] arg2 A data expression.
4198 inline
4199 void make_sqrt_pair_whr3(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
4200 {
4201 make_application(result, sort_nat::sqrt_pair_whr3(),arg0, arg1, arg2);
4202 }
4203
4204 /// \brief Recogniser for application of \@sqrt_pair_whr3.
4205 /// \param e A data expression.
4206 /// \return true iff e is an application of function symbol sqrt_pair_whr3 to a
4207 /// number of arguments.
4208 inline
4210 {
4211 return is_application(e) && is_sqrt_pair_whr3_function_symbol(atermpp::down_cast<application>(e).head());
4212 }
4213
4214 /// \brief Generate identifier \@sqrt_pair_whr4.
4215 /// \return Identifier \@sqrt_pair_whr4.
4216 inline
4217 const core::identifier_string& sqrt_pair_whr4_name()
4218 {
4219 static core::identifier_string sqrt_pair_whr4_name = core::identifier_string("@sqrt_pair_whr4");
4220 return sqrt_pair_whr4_name;
4221 }
4222
4223 /// \brief Constructor for function symbol \@sqrt_pair_whr4.
4224
4225 /// \return Function symbol sqrt_pair_whr4.
4226 inline
4228 {
4230 return sqrt_pair_whr4;
4231 }
4232
4233 /// \brief Recogniser for function \@sqrt_pair_whr4.
4234 /// \param e A data expression.
4235 /// \return true iff e is the function symbol matching \@sqrt_pair_whr4.
4236 inline
4238 {
4240 {
4241 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr4();
4242 }
4243 return false;
4244 }
4245
4246 /// \brief Application of function symbol \@sqrt_pair_whr4.
4247
4248 /// \param[in] arg0 A data expression.
4249 /// \param[in] arg1 A data expression.
4250 /// \param[in] arg2 A data expression.
4251 /// \param[in] arg3 A data expression.
4252 /// \param[in] arg4 A data expression.
4253 /// \param[in] arg5 A data expression.
4254 /// \return Application of \@sqrt_pair_whr4 to a number of arguments.
4255 inline
4256 application sqrt_pair_whr4(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4, const data_expression& arg5)
4257 {
4258 return sort_nat::sqrt_pair_whr4()(arg0, arg1, arg2, arg3, arg4, arg5);
4259 }
4260
4261 /// \brief Make an application of function symbol \@sqrt_pair_whr4.
4262 /// \param[out] result The data expression where the \@sqrt_pair_whr4 expression is put.
4263
4264 /// \param[in] arg0 A data expression.
4265 /// \param[in] arg1 A data expression.
4266 /// \param[in] arg2 A data expression.
4267 /// \param[in] arg3 A data expression.
4268 /// \param[in] arg4 A data expression.
4269 /// \param[in] arg5 A data expression.
4270 inline
4271 void make_sqrt_pair_whr4(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4, const data_expression& arg5)
4272 {
4273 make_application(result, sort_nat::sqrt_pair_whr4(),arg0, arg1, arg2, arg3, arg4, arg5);
4274 }
4275
4276 /// \brief Recogniser for application of \@sqrt_pair_whr4.
4277 /// \param e A data expression.
4278 /// \return true iff e is an application of function symbol sqrt_pair_whr4 to a
4279 /// number of arguments.
4280 inline
4282 {
4283 return is_application(e) && is_sqrt_pair_whr4_function_symbol(atermpp::down_cast<application>(e).head());
4284 }
4285
4286 /// \brief Generate identifier \@sqrt_pair_whr5.
4287 /// \return Identifier \@sqrt_pair_whr5.
4288 inline
4289 const core::identifier_string& sqrt_pair_whr5_name()
4290 {
4291 static core::identifier_string sqrt_pair_whr5_name = core::identifier_string("@sqrt_pair_whr5");
4292 return sqrt_pair_whr5_name;
4293 }
4294
4295 /// \brief Constructor for function symbol \@sqrt_pair_whr5.
4296
4297 /// \return Function symbol sqrt_pair_whr5.
4298 inline
4300 {
4302 return sqrt_pair_whr5;
4303 }
4304
4305 /// \brief Recogniser for function \@sqrt_pair_whr5.
4306 /// \param e A data expression.
4307 /// \return true iff e is the function symbol matching \@sqrt_pair_whr5.
4308 inline
4310 {
4312 {
4313 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr5();
4314 }
4315 return false;
4316 }
4317
4318 /// \brief Application of function symbol \@sqrt_pair_whr5.
4319
4320 /// \param[in] arg0 A data expression.
4321 /// \param[in] arg1 A data expression.
4322 /// \param[in] arg2 A data expression.
4323 /// \param[in] arg3 A data expression.
4324 /// \param[in] arg4 A data expression.
4325 /// \return Application of \@sqrt_pair_whr5 to a number of arguments.
4326 inline
4327 application sqrt_pair_whr5(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
4328 {
4329 return sort_nat::sqrt_pair_whr5()(arg0, arg1, arg2, arg3, arg4);
4330 }
4331
4332 /// \brief Make an application of function symbol \@sqrt_pair_whr5.
4333 /// \param[out] result The data expression where the \@sqrt_pair_whr5 expression is put.
4334
4335 /// \param[in] arg0 A data expression.
4336 /// \param[in] arg1 A data expression.
4337 /// \param[in] arg2 A data expression.
4338 /// \param[in] arg3 A data expression.
4339 /// \param[in] arg4 A data expression.
4340 inline
4341 void make_sqrt_pair_whr5(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2, const data_expression& arg3, const data_expression& arg4)
4342 {
4343 make_application(result, sort_nat::sqrt_pair_whr5(),arg0, arg1, arg2, arg3, arg4);
4344 }
4345
4346 /// \brief Recogniser for application of \@sqrt_pair_whr5.
4347 /// \param e A data expression.
4348 /// \return true iff e is an application of function symbol sqrt_pair_whr5 to a
4349 /// number of arguments.
4350 inline
4352 {
4353 return is_application(e) && is_sqrt_pair_whr5_function_symbol(atermpp::down_cast<application>(e).head());
4354 }
4355
4356 /// \brief Generate identifier \@sqrt_pair_whr6.
4357 /// \return Identifier \@sqrt_pair_whr6.
4358 inline
4359 const core::identifier_string& sqrt_pair_whr6_name()
4360 {
4361 static core::identifier_string sqrt_pair_whr6_name = core::identifier_string("@sqrt_pair_whr6");
4362 return sqrt_pair_whr6_name;
4363 }
4364
4365 /// \brief Constructor for function symbol \@sqrt_pair_whr6.
4366
4367 /// \return Function symbol sqrt_pair_whr6.
4368 inline
4370 {
4372 return sqrt_pair_whr6;
4373 }
4374
4375 /// \brief Recogniser for function \@sqrt_pair_whr6.
4376 /// \param e A data expression.
4377 /// \return true iff e is the function symbol matching \@sqrt_pair_whr6.
4378 inline
4380 {
4382 {
4383 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr6();
4384 }
4385 return false;
4386 }
4387
4388 /// \brief Application of function symbol \@sqrt_pair_whr6.
4389
4390 /// \param[in] arg0 A data expression.
4391 /// \param[in] arg1 A data expression.
4392 /// \param[in] arg2 A data expression.
4393 /// \return Application of \@sqrt_pair_whr6 to a number of arguments.
4394 inline
4395 application sqrt_pair_whr6(const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
4396 {
4397 return sort_nat::sqrt_pair_whr6()(arg0, arg1, arg2);
4398 }
4399
4400 /// \brief Make an application of function symbol \@sqrt_pair_whr6.
4401 /// \param[out] result The data expression where the \@sqrt_pair_whr6 expression is put.
4402
4403 /// \param[in] arg0 A data expression.
4404 /// \param[in] arg1 A data expression.
4405 /// \param[in] arg2 A data expression.
4406 inline
4407 void make_sqrt_pair_whr6(data_expression& result, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
4408 {
4409 make_application(result, sort_nat::sqrt_pair_whr6(),arg0, arg1, arg2);
4410 }
4411
4412 /// \brief Recogniser for application of \@sqrt_pair_whr6.
4413 /// \param e A data expression.
4414 /// \return true iff e is an application of function symbol sqrt_pair_whr6 to a
4415 /// number of arguments.
4416 inline
4418 {
4419 return is_application(e) && is_sqrt_pair_whr6_function_symbol(atermpp::down_cast<application>(e).head());
4420 }
4421
4422 /// \brief Generate identifier \@first.
4423 /// \return Identifier \@first.
4424 inline
4425 const core::identifier_string& first_name()
4426 {
4427 static core::identifier_string first_name = core::identifier_string("@first");
4428 return first_name;
4429 }
4430
4431 /// \brief Constructor for function symbol \@first.
4432
4433 /// \return Function symbol first.
4434 inline
4435 const function_symbol& first()
4436 {
4438 return first;
4439 }
4440
4441 /// \brief Recogniser for function \@first.
4442 /// \param e A data expression.
4443 /// \return true iff e is the function symbol matching \@first.
4444 inline
4445 bool is_first_function_symbol(const atermpp::aterm& e)
4446 {
4448 {
4449 return atermpp::down_cast<function_symbol>(e) == first();
4450 }
4451 return false;
4452 }
4453
4454 /// \brief Application of function symbol \@first.
4455
4456 /// \param[in] arg0 A data expression.
4457 /// \return Application of \@first to a number of arguments.
4458 inline
4459 application first(const data_expression& arg0)
4460 {
4461 return sort_nat::first()(arg0);
4462 }
4463
4464 /// \brief Make an application of function symbol \@first.
4465 /// \param[out] result The data expression where the \@first expression is put.
4466
4467 /// \param[in] arg0 A data expression.
4468 inline
4469 void make_first(data_expression& result, const data_expression& arg0)
4470 {
4471 make_application(result, sort_nat::first(),arg0);
4472 }
4473
4474 /// \brief Recogniser for application of \@first.
4475 /// \param e A data expression.
4476 /// \return true iff e is an application of function symbol first to a
4477 /// number of arguments.
4478 inline
4479 bool is_first_application(const atermpp::aterm& e)
4480 {
4481 return is_application(e) && is_first_function_symbol(atermpp::down_cast<application>(e).head());
4482 }
4483
4484 /// \brief Generate identifier \@last.
4485 /// \return Identifier \@last.
4486 inline
4487 const core::identifier_string& last_name()
4488 {
4489 static core::identifier_string last_name = core::identifier_string("@last");
4490 return last_name;
4491 }
4492
4493 /// \brief Constructor for function symbol \@last.
4494
4495 /// \return Function symbol last.
4496 inline
4497 const function_symbol& last()
4498 {
4500 return last;
4501 }
4502
4503 /// \brief Recogniser for function \@last.
4504 /// \param e A data expression.
4505 /// \return true iff e is the function symbol matching \@last.
4506 inline
4507 bool is_last_function_symbol(const atermpp::aterm& e)
4508 {
4510 {
4511 return atermpp::down_cast<function_symbol>(e) == last();
4512 }
4513 return false;
4514 }
4515
4516 /// \brief Application of function symbol \@last.
4517
4518 /// \param[in] arg0 A data expression.
4519 /// \return Application of \@last to a number of arguments.
4520 inline
4521 application last(const data_expression& arg0)
4522 {
4523 return sort_nat::last()(arg0);
4524 }
4525
4526 /// \brief Make an application of function symbol \@last.
4527 /// \param[out] result The data expression where the \@last expression is put.
4528
4529 /// \param[in] arg0 A data expression.
4530 inline
4531 void make_last(data_expression& result, const data_expression& arg0)
4532 {
4533 make_application(result, sort_nat::last(),arg0);
4534 }
4535
4536 /// \brief Recogniser for application of \@last.
4537 /// \param e A data expression.
4538 /// \return true iff e is an application of function symbol last to a
4539 /// number of arguments.
4540 inline
4541 bool is_last_application(const atermpp::aterm& e)
4542 {
4543 return is_application(e) && is_last_function_symbol(atermpp::down_cast<application>(e).head());
4544 }
4545 /// \brief Give all system defined mappings for nat
4546 /// \return All system defined mappings for nat
4547 inline
4549 {
4550 function_symbol_vector result;
4551 result.push_back(sort_nat::most_significant_digit_nat());
4552 result.push_back(sort_nat::concat_digit(nat(), sort_machine_word::machine_word()));
4553 result.push_back(sort_nat::equals_zero());
4554 result.push_back(sort_nat::not_equals_zero());
4555 result.push_back(sort_nat::equals_one(nat()));
4556 result.push_back(sort_nat::pos2nat());
4557 result.push_back(sort_nat::nat2pos());
4558 result.push_back(sort_nat::succ(nat()));
4559 result.push_back(sort_nat::maximum(sort_pos::pos(), nat()));
4560 result.push_back(sort_nat::maximum(nat(), sort_pos::pos()));
4561 result.push_back(sort_nat::maximum(nat(), nat()));
4562 result.push_back(sort_nat::minimum(nat(), nat()));
4563 result.push_back(sort_nat::pred());
4564 result.push_back(sort_nat::pred_whr());
4565 result.push_back(sort_nat::plus(sort_pos::pos(), nat()));
4566 result.push_back(sort_nat::plus(nat(), sort_pos::pos()));
4567 result.push_back(sort_nat::plus(nat(), nat()));
4568 result.push_back(sort_nat::add_with_carry(nat(), nat()));
4569 result.push_back(sort_nat::auxiliary_plus_nat());
4570 result.push_back(sort_nat::times(nat(), nat()));
4571 result.push_back(sort_nat::times_ordered(nat(), nat()));
4572 result.push_back(sort_nat::times_overflow(nat(), sort_machine_word::machine_word(), sort_machine_word::machine_word()));
4573 result.push_back(sort_nat::div());
4574 result.push_back(sort_nat::mod());
4575 result.push_back(sort_nat::exp(sort_pos::pos(), nat()));
4576 result.push_back(sort_nat::exp(nat(), nat()));
4577 result.push_back(sort_nat::sqrt());
4578 result.push_back(sort_nat::natpred());
4579 result.push_back(sort_nat::is_odd());
4580 result.push_back(sort_nat::div2());
4581 result.push_back(sort_nat::monus());
4582 result.push_back(sort_nat::monus_whr());
4583 result.push_back(sort_nat::exp_aux3p());
4584 result.push_back(sort_nat::exp_aux4p());
4585 result.push_back(sort_nat::exp_aux3n());
4586 result.push_back(sort_nat::exp_aux4n());
4587 result.push_back(sort_nat::exp_auxtruep());
4588 result.push_back(sort_nat::exp_auxtruen());
4589 result.push_back(sort_nat::exp_auxfalsep());
4590 result.push_back(sort_nat::exp_auxfalsen());
4591 result.push_back(sort_nat::div_bold());
4592 result.push_back(sort_nat::div_bold_whr());
4593 result.push_back(sort_nat::div_whr1());
4594 result.push_back(sort_nat::div_whr2());
4595 result.push_back(sort_nat::mod_whr1());
4596 result.push_back(sort_nat::divmod_aux());
4597 result.push_back(sort_nat::divmod_aux_whr1());
4598 result.push_back(sort_nat::divmod_aux_whr2());
4599 result.push_back(sort_nat::divmod_aux_whr3());
4600 result.push_back(sort_nat::divmod_aux_whr4());
4601 result.push_back(sort_nat::divmod_aux_whr5());
4602 result.push_back(sort_nat::divmod_aux_whr6());
4603 result.push_back(sort_nat::msd());
4604 result.push_back(sort_nat::swap_zero());
4605 result.push_back(sort_nat::swap_zero_add());
4606 result.push_back(sort_nat::swap_zero_min());
4607 result.push_back(sort_nat::swap_zero_monus());
4608 result.push_back(sort_nat::sqrt_whr1());
4609 result.push_back(sort_nat::sqrt_whr2());
4610 result.push_back(sort_nat::sqrt_pair());
4611 result.push_back(sort_nat::sqrt_pair_whr1());
4612 result.push_back(sort_nat::sqrt_pair_whr2());
4613 result.push_back(sort_nat::sqrt_pair_whr3());
4614 result.push_back(sort_nat::sqrt_pair_whr4());
4615 result.push_back(sort_nat::sqrt_pair_whr5());
4616 result.push_back(sort_nat::sqrt_pair_whr6());
4617 result.push_back(sort_nat::first());
4618 result.push_back(sort_nat::last());
4619 return result;
4620 }
4621
4622 /// \brief Give all system defined mappings and constructors for nat
4623 /// \return All system defined mappings for nat
4624 inline
4626 {
4627 function_symbol_vector result=nat_generate_functions_code();
4628 for(const function_symbol& f: nat_generate_constructors_code())
4629 {
4630 result.push_back(f);
4631 }
4632 return result;
4633 }
4634
4635 /// \brief Give all system defined mappings that can be used in mCRL2 specs for nat
4636 /// \return All system defined mappings for that can be used in mCRL2 specificationis nat
4637 inline
4639 {
4640 function_symbol_vector result;
4641 result.push_back(sort_nat::most_significant_digit_nat());
4642 result.push_back(sort_nat::concat_digit(nat(), sort_machine_word::machine_word()));
4643 result.push_back(sort_nat::equals_zero());
4644 result.push_back(sort_nat::not_equals_zero());
4645 result.push_back(sort_nat::equals_one(nat()));
4646 result.push_back(sort_nat::pos2nat());
4647 result.push_back(sort_nat::nat2pos());
4648 result.push_back(sort_nat::succ(nat()));
4649 result.push_back(sort_nat::maximum(sort_pos::pos(), nat()));
4650 result.push_back(sort_nat::maximum(nat(), sort_pos::pos()));
4651 result.push_back(sort_nat::maximum(nat(), nat()));
4652 result.push_back(sort_nat::minimum(nat(), nat()));
4653 result.push_back(sort_nat::pred());
4654 result.push_back(sort_nat::pred_whr());
4655 result.push_back(sort_nat::plus(sort_pos::pos(), nat()));
4656 result.push_back(sort_nat::plus(nat(), sort_pos::pos()));
4657 result.push_back(sort_nat::plus(nat(), nat()));
4658 result.push_back(sort_nat::add_with_carry(nat(), nat()));
4659 result.push_back(sort_nat::auxiliary_plus_nat());
4660 result.push_back(sort_nat::times(nat(), nat()));
4661 result.push_back(sort_nat::times_ordered(nat(), nat()));
4662 result.push_back(sort_nat::times_overflow(nat(), sort_machine_word::machine_word(), sort_machine_word::machine_word()));
4663 result.push_back(sort_nat::div());
4664 result.push_back(sort_nat::mod());
4665 result.push_back(sort_nat::exp(sort_pos::pos(), nat()));
4666 result.push_back(sort_nat::exp(nat(), nat()));
4667 result.push_back(sort_nat::sqrt());
4668 result.push_back(sort_nat::natpred());
4669 result.push_back(sort_nat::is_odd());
4670 result.push_back(sort_nat::div2());
4671 result.push_back(sort_nat::monus());
4672 result.push_back(sort_nat::monus_whr());
4673 result.push_back(sort_nat::exp_aux3p());
4674 result.push_back(sort_nat::exp_aux4p());
4675 result.push_back(sort_nat::exp_aux3n());
4676 result.push_back(sort_nat::exp_aux4n());
4677 result.push_back(sort_nat::exp_auxtruep());
4678 result.push_back(sort_nat::exp_auxtruen());
4679 result.push_back(sort_nat::exp_auxfalsep());
4680 result.push_back(sort_nat::exp_auxfalsen());
4681 result.push_back(sort_nat::div_bold());
4682 result.push_back(sort_nat::div_bold_whr());
4683 result.push_back(sort_nat::div_whr1());
4684 result.push_back(sort_nat::div_whr2());
4685 result.push_back(sort_nat::mod_whr1());
4686 result.push_back(sort_nat::divmod_aux());
4687 result.push_back(sort_nat::divmod_aux_whr1());
4688 result.push_back(sort_nat::divmod_aux_whr2());
4689 result.push_back(sort_nat::divmod_aux_whr3());
4690 result.push_back(sort_nat::divmod_aux_whr4());
4691 result.push_back(sort_nat::divmod_aux_whr5());
4692 result.push_back(sort_nat::divmod_aux_whr6());
4693 result.push_back(sort_nat::msd());
4694 result.push_back(sort_nat::swap_zero());
4695 result.push_back(sort_nat::swap_zero_add());
4696 result.push_back(sort_nat::swap_zero_min());
4697 result.push_back(sort_nat::swap_zero_monus());
4698 result.push_back(sort_nat::sqrt_whr1());
4699 result.push_back(sort_nat::sqrt_whr2());
4700 result.push_back(sort_nat::sqrt_pair());
4701 result.push_back(sort_nat::sqrt_pair_whr1());
4702 result.push_back(sort_nat::sqrt_pair_whr2());
4703 result.push_back(sort_nat::sqrt_pair_whr3());
4704 result.push_back(sort_nat::sqrt_pair_whr4());
4705 result.push_back(sort_nat::sqrt_pair_whr5());
4706 result.push_back(sort_nat::sqrt_pair_whr6());
4707 result.push_back(sort_nat::first());
4708 result.push_back(sort_nat::last());
4709 return result;
4710 }
4711
4712
4713 // 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
4715 /// \brief Give all system defined mappings that are to be implemented in C++ code for nat
4716 /// \return A mapping from C++ implementable function symbols to system defined mappings implemented in C++ code for nat
4717 inline
4719 {
4720 implementation_map result;
4721 return result;
4722 }
4723 ///\brief Function for projecting out argument.
4724 /// arg from an application.
4725 /// \param e A data expression.
4726 /// \pre arg is defined for e.
4727 /// \return The argument of e that corresponds to arg.
4728 inline
4729 const data_expression& arg(const data_expression& e)
4730 {
4732 return atermpp::down_cast<application>(e)[0];
4733 }
4734
4735 ///\brief Function for projecting out argument.
4736 /// arg1 from an application.
4737 /// \param e A data expression.
4738 /// \pre arg1 is defined for e.
4739 /// \return The argument of e that corresponds to arg1.
4740 inline
4741 const data_expression& arg1(const data_expression& e)
4742 {
4744 return atermpp::down_cast<application>(e)[0];
4745 }
4746
4747 ///\brief Function for projecting out argument.
4748 /// arg2 from an application.
4749 /// \param e A data expression.
4750 /// \pre arg2 is defined for e.
4751 /// \return The argument of e that corresponds to arg2.
4752 inline
4753 const data_expression& arg2(const data_expression& e)
4754 {
4756 return atermpp::down_cast<application>(e)[1];
4757 }
4758
4759 ///\brief Function for projecting out argument.
4760 /// left from an application.
4761 /// \param e A data expression.
4762 /// \pre left is defined for e.
4763 /// \return The argument of e that corresponds to left.
4764 inline
4765 const data_expression& left(const data_expression& e)
4766 {
4768 return atermpp::down_cast<application>(e)[0];
4769 }
4770
4771 ///\brief Function for projecting out argument.
4772 /// right from an application.
4773 /// \param e A data expression.
4774 /// \pre right is defined for e.
4775 /// \return The argument of e that corresponds to right.
4776 inline
4777 const data_expression& right(const data_expression& e)
4778 {
4780 return atermpp::down_cast<application>(e)[1];
4781 }
4782
4783 ///\brief Function for projecting out argument.
4784 /// arg3 from an application.
4785 /// \param e A data expression.
4786 /// \pre arg3 is defined for e.
4787 /// \return The argument of e that corresponds to arg3.
4788 inline
4789 const data_expression& arg3(const data_expression& e)
4790 {
4792 return atermpp::down_cast<application>(e)[2];
4793 }
4794
4795 ///\brief Function for projecting out argument.
4796 /// arg4 from an application.
4797 /// \param e A data expression.
4798 /// \pre arg4 is defined for e.
4799 /// \return The argument of e that corresponds to arg4.
4800 inline
4801 const data_expression& arg4(const data_expression& e)
4802 {
4804 return atermpp::down_cast<application>(e)[3];
4805 }
4806
4807 ///\brief Function for projecting out argument.
4808 /// arg5 from an application.
4809 /// \param e A data expression.
4810 /// \pre arg5 is defined for e.
4811 /// \return The argument of e that corresponds to arg5.
4812 inline
4814 {
4816 return atermpp::down_cast<application>(e)[4];
4817 }
4818
4819 ///\brief Function for projecting out argument.
4820 /// arg6 from an application.
4821 /// \param e A data expression.
4822 /// \pre arg6 is defined for e.
4823 /// \return The argument of e that corresponds to arg6.
4824 inline
4826 {
4828 return atermpp::down_cast<application>(e)[5];
4829 }
4830
4831 /// \brief Give all system defined equations for nat
4832 /// \return All system defined equations for sort nat
4833 inline
4835 {
4837 variable vp("p",sort_pos::pos());
4838 variable vp1("p1",sort_pos::pos());
4839 variable vp2("p2",sort_pos::pos());
4840 variable vn("n",nat());
4841 variable vn1("n1",nat());
4842 variable vn2("n2",nat());
4843 variable vm("m",nat());
4844 variable vm1("m1",nat());
4845 variable vm2("m2",nat());
4846 variable vm3("m3",nat());
4847 variable vm4("m4",nat());
4848 variable vm5("m5",nat());
4849 variable vpredp("predp",nat());
4850 variable vdiff("diff",nat());
4851 variable vshift_n1("shift_n1",nat());
4852 variable vsolution("solution",nat());
4853 variable vpq("pq",nat());
4854 variable vy("y",nat());
4855 variable vy_guess("y_guess",nat());
4856 variable vpair_("pair_",natnatpair());
4857 variable vlp("lp",nat());
4858 variable vw("w",sort_machine_word::machine_word());
4859 variable vw1("w1",sort_machine_word::machine_word());
4860 variable vw2("w2",sort_machine_word::machine_word());
4861 variable vw3("w3",sort_machine_word::machine_word());
4862 variable vw4("w4",sort_machine_word::machine_word());
4863 variable vshift_w("shift_w",sort_machine_word::machine_word());
4864 variable voverflow("overflow",sort_machine_word::machine_word());
4865
4866 data_equation_vector result;
4867 result.emplace_back(variable_list(), c0(), most_significant_digit_nat(sort_machine_word::zero_word()));
4868 result.emplace_back(variable_list({vw}), equals_zero(most_significant_digit_nat(vw)), sort_machine_word::equals_zero_word(vw));
4869 result.emplace_back(variable_list({vn, vw}), equals_zero(concat_digit(vn, vw)), sort_bool::false_());
4870 result.emplace_back(variable_list({vn}), equals_zero(succ_nat(vn)), sort_bool::false_());
4871 result.emplace_back(variable_list({vw}), not_equals_zero(most_significant_digit_nat(vw)), sort_machine_word::not_equals_zero_word(vw));
4872 result.emplace_back(variable_list({vn, vw}), not_equals_zero(concat_digit(vn, vw)), sort_bool::true_());
4873 result.emplace_back(variable_list({vn}), not_equals_zero(succ_nat(vn)), sort_bool::true_());
4874 result.emplace_back(variable_list({vw}), equals_one(most_significant_digit_nat(vw)), sort_machine_word::equals_one_word(vw));
4875 result.emplace_back(variable_list({vn, vw}), equals_one(concat_digit(vn, vw)), sort_bool::false_());
4876 result.emplace_back(variable_list({vw}), succ_nat(most_significant_digit_nat(vw)), if_(sort_machine_word::equals_max_word(vw), concat_digit(most_significant_digit_nat(sort_machine_word::one_word()), sort_machine_word::zero_word()), most_significant_digit_nat(sort_machine_word::succ_word(vw))));
4877 result.emplace_back(variable_list({vn, vw}), succ_nat(concat_digit(vn, vw)), if_(sort_machine_word::equals_max_word(vw), concat_digit(succ_nat(vn), sort_machine_word::zero_word()), concat_digit(vn, sort_machine_word::succ_word(vw))));
4878 result.emplace_back(variable_list({vw}), succ(most_significant_digit_nat(vw)), if_(sort_machine_word::equals_max_word(vw), concat_digit(sort_pos::most_significant_digit(sort_machine_word::one_word()), sort_machine_word::zero_word()), sort_pos::most_significant_digit(sort_machine_word::succ_word(vw))));
4879 result.emplace_back(variable_list({vn, vw}), succ(concat_digit(vn, vw)), if_(sort_machine_word::equals_max_word(vw), concat_digit(succ(vn), sort_machine_word::zero_word()), concat_digit(nat2pos(vn), sort_machine_word::succ_word(vw))));
4880 result.emplace_back(variable_list({vw1, vw2}), equal_to(most_significant_digit_nat(vw1), most_significant_digit_nat(vw2)), sort_machine_word::equal_word(vw1, vw2));
4881 result.emplace_back(variable_list({vn, vw1, vw2}), equal_to(concat_digit(vn, vw1), most_significant_digit_nat(vw2)), sort_bool::false_());
4882 result.emplace_back(variable_list({vn, vw1, vw2}), equal_to(most_significant_digit_nat(vw1), concat_digit(vn, vw2)), sort_bool::false_());
4883 result.emplace_back(variable_list({vn1, vn2, vw1, vw2}), equal_to(concat_digit(vn1, vw1), concat_digit(vn2, vw2)), sort_bool::and_(sort_machine_word::equal_word(vw1, vw2), equal_to(vn1, vn2)));
4884 result.emplace_back(variable_list({vn1, vn2}), equals_zero(vn2), equal_to(succ_nat(vn1), vn2), sort_bool::false_());
4885 result.emplace_back(variable_list({vn1, vn2}), not_equals_zero(vn2), equal_to(succ_nat(vn1), vn2), equal_to(vn1, natpred(vn2)));
4886 result.emplace_back(variable_list({vn1, vn2}), equals_zero(vn1), equal_to(vn1, succ_nat(vn2)), sort_bool::false_());
4887 result.emplace_back(variable_list({vn1, vn2}), not_equals_zero(vn1), equal_to(vn1, succ_nat(vn2)), equal_to(natpred(vn1), vn2));
4888 result.emplace_back(variable_list({vw1, vw2}), less(most_significant_digit_nat(vw1), most_significant_digit_nat(vw2)), sort_machine_word::less_word(vw1, vw2));
4889 result.emplace_back(variable_list({vn, vw1, vw2}), less(concat_digit(vn, vw1), most_significant_digit_nat(vw2)), sort_bool::false_());
4890 result.emplace_back(variable_list({vn, vw1, vw2}), less(most_significant_digit_nat(vw1), concat_digit(vn, vw2)), sort_bool::true_());
4891 result.emplace_back(variable_list({vn1, vn2, vw1, vw2}), less(concat_digit(vn1, vw1), concat_digit(vn2, vw2)), if_(sort_machine_word::less_word(vw1, vw2), less_equal(vn1, vn2), less(vn1, vn2)));
4892 result.emplace_back(variable_list({vn1, vn2}), less(succ_nat(vn1), vn2), sort_bool::and_(less(most_significant_digit_nat(sort_machine_word::one_word()), vn2), less(vn1, natpred(vn2))));
4893 result.emplace_back(variable_list({vn1, vn2}), less(vn1, succ_nat(vn2)), less_equal(vn1, vn2));
4894 result.emplace_back(variable_list({vm, vn}), less_total(vn, vm), less(vn, vm));
4895 result.emplace_back(variable_list({vn, vw1}), sort_machine_word::equals_zero_word(vw1), less(vn, most_significant_digit_nat(vw1)), sort_bool::false_());
4896 result.emplace_back(variable_list({vw1, vw2}), less_equal(most_significant_digit_nat(vw1), most_significant_digit_nat(vw2)), sort_machine_word::less_equal_word(vw1, vw2));
4897 result.emplace_back(variable_list({vn, vw1, vw2}), less_equal(concat_digit(vn, vw1), most_significant_digit_nat(vw2)), sort_bool::false_());
4898 result.emplace_back(variable_list({vn, vw1, vw2}), less_equal(most_significant_digit_nat(vw1), concat_digit(vn, vw2)), sort_bool::true_());
4899 result.emplace_back(variable_list({vn1, vn2, vw1, vw2}), less_equal(concat_digit(vn1, vw1), concat_digit(vn2, vw2)), if_(sort_machine_word::less_equal_word(vw1, vw2), less_equal(vn1, vn2), less(vn1, vn2)));
4900 result.emplace_back(variable_list({vn1, vn2}), less_equal(succ_nat(vn1), vn2), less(vn1, vn2));
4901 result.emplace_back(variable_list({vn1, vn2}), less_equal(vn1, succ_nat(vn2)), less_equal(natpred(vn1), vn2));
4902 result.emplace_back(variable_list({vn, vw1}), sort_machine_word::equals_zero_word(vw1), less_equal(most_significant_digit_nat(vw1), vn), sort_bool::true_());
4903 result.emplace_back(variable_list({vw}), pos2nat(sort_pos::most_significant_digit(vw)), most_significant_digit_nat(vw));
4904 result.emplace_back(variable_list({vp, vw}), pos2nat(concat_digit(vp, vw)), concat_digit(pos2nat(vp), vw));
4905 result.emplace_back(variable_list({vp}), pos2nat(sort_pos::succpos(vp)), succ_nat(pos2nat(vp)));
4906 result.emplace_back(variable_list({vn}), pos2nat(succ(vn)), succ_nat(vn));
4907 result.emplace_back(variable_list({vw}), sort_machine_word::not_equals_zero_word(vw), nat2pos(most_significant_digit_nat(vw)), sort_pos::most_significant_digit(vw));
4908 result.emplace_back(variable_list({vn, vw}), nat2pos(concat_digit(vn, vw)), concat_digit(nat2pos(vn), vw));
4909 result.emplace_back(variable_list({vn, vp}), maximum(vp, vn), if_(less_equal(vn, pos2nat(vp)), vp, nat2pos(vn)));
4910 result.emplace_back(variable_list({vn, vp}), maximum(vn, vp), if_(less_equal(vn, pos2nat(vp)), vp, nat2pos(vn)));
4911 result.emplace_back(variable_list({vm, vn}), maximum(vm, vn), if_(less_equal(vm, vn), vn, vm));
4912 result.emplace_back(variable_list({vm, vn}), minimum(vm, vn), if_(less_equal(vm, vn), vm, vn));
4913 result.emplace_back(variable_list({vw}), pred(sort_pos::most_significant_digit(vw)), most_significant_digit_nat(sort_machine_word::pred_word(vw)));
4914 result.emplace_back(variable_list({vp, vw}), pred(concat_digit(vp, vw)), if_(sort_machine_word::equals_zero_word(vw), pred_whr(pred(vp)), concat_digit(pos2nat(vp), sort_machine_word::pred_word(vw))));
4915 result.emplace_back(variable_list({vpredp}), pred_whr(vpredp), if_(equals_zero(vpredp), most_significant_digit_nat(sort_machine_word::max_word()), concat_digit(vpredp, sort_machine_word::max_word())));
4916 result.emplace_back(variable_list({vn, vp}), plus(vp, vn), plus(vn, vp));
4917 result.emplace_back(variable_list({vw1, vw2}), plus(most_significant_digit_nat(vw1), sort_pos::most_significant_digit(vw2)), if_(sort_machine_word::add_overflow_word(vw1, vw2), concat_digit(sort_pos::most_significant_digit(sort_machine_word::one_word()), sort_machine_word::add_word(vw1, vw2)), sort_pos::most_significant_digit(sort_machine_word::add_word(vw1, vw2))));
4918 result.emplace_back(variable_list({vn1, vw1, vw2}), plus(concat_digit(vn1, vw1), sort_pos::most_significant_digit(vw2)), if_(sort_machine_word::add_overflow_word(vw1, vw2), concat_digit(succ(vn1), sort_machine_word::add_word(vw1, vw2)), concat_digit(nat2pos(vn1), sort_machine_word::add_word(vw1, vw2))));
4919 result.emplace_back(variable_list({vp, vw1, vw2}), plus(most_significant_digit_nat(vw1), concat_digit(vp, vw2)), if_(sort_machine_word::add_overflow_word(vw1, vw2), concat_digit(sort_pos::succpos(vp), sort_machine_word::add_word(vw1, vw2)), concat_digit(vp, sort_machine_word::add_word(vw1, vw2))));
4920 result.emplace_back(variable_list({vn1, vp, vw1, vw2}), plus(concat_digit(vn1, vw1), concat_digit(vp, vw2)), if_(sort_machine_word::add_overflow_word(vw1, vw2), concat_digit(plus(succ(vn1), vp), sort_machine_word::add_word(vw1, vw2)), concat_digit(plus(vn1, vp), sort_machine_word::add_word(vw1, vw2))));
4921 result.emplace_back(variable_list({vw1, vw2}), plus(most_significant_digit_nat(vw1), most_significant_digit_nat(vw2)), if_(sort_machine_word::add_overflow_word(vw1, vw2), concat_digit(most_significant_digit_nat(sort_machine_word::one_word()), sort_machine_word::add_word(vw1, vw2)), most_significant_digit_nat(sort_machine_word::add_word(vw1, vw2))));
4922 result.emplace_back(variable_list({vw1, vw2}), add_with_carry(most_significant_digit_nat(vw1), most_significant_digit_nat(vw2)), if_(sort_machine_word::add_with_carry_overflow_word(vw1, vw2), concat_digit(most_significant_digit_nat(sort_machine_word::one_word()), sort_machine_word::add_with_carry_word(vw1, vw2)), most_significant_digit_nat(sort_machine_word::add_with_carry_word(vw1, vw2))));
4923 result.emplace_back(variable_list({vn1, vw1, vw2}), plus(concat_digit(vn1, vw1), most_significant_digit_nat(vw2)), if_(sort_machine_word::add_overflow_word(vw1, vw2), concat_digit(succ_nat(vn1), sort_machine_word::add_word(vw1, vw2)), concat_digit(vn1, sort_machine_word::add_word(vw1, vw2))));
4924 result.emplace_back(variable_list({vn1, vw1, vw2}), add_with_carry(concat_digit(vn1, vw1), most_significant_digit_nat(vw2)), if_(sort_machine_word::add_with_carry_overflow_word(vw1, vw2), concat_digit(succ_nat(vn1), sort_machine_word::add_with_carry_word(vw1, vw2)), concat_digit(vn1, sort_machine_word::add_with_carry_word(vw1, vw2))));
4925 result.emplace_back(variable_list({vn2, vw1, vw2}), plus(most_significant_digit_nat(vw1), concat_digit(vn2, vw2)), if_(sort_machine_word::add_overflow_word(vw1, vw2), concat_digit(succ_nat(vn2), sort_machine_word::add_word(vw1, vw2)), concat_digit(vn2, sort_machine_word::add_word(vw1, vw2))));
4926 result.emplace_back(variable_list({vn2, vw1, vw2}), add_with_carry(most_significant_digit_nat(vw1), concat_digit(vn2, vw2)), if_(sort_machine_word::add_with_carry_overflow_word(vw1, vw2), concat_digit(succ_nat(vn2), sort_machine_word::add_with_carry_word(vw1, vw2)), concat_digit(vn2, sort_machine_word::add_with_carry_word(vw1, vw2))));
4927 result.emplace_back(variable_list({vn1, vn2, vw1, vw2}), plus(concat_digit(vn1, vw1), concat_digit(vn2, vw2)), if_(sort_machine_word::add_overflow_word(vw1, vw2), concat_digit(add_with_carry(vn1, vn2), sort_machine_word::add_word(vw1, vw2)), concat_digit(plus(vn1, vn2), sort_machine_word::add_word(vw1, vw2))));
4928 result.emplace_back(variable_list({vn1, vn2, vw1, vw2}), add_with_carry(concat_digit(vn1, vw1), concat_digit(vn2, vw2)), if_(sort_machine_word::add_with_carry_overflow_word(vw1, vw2), concat_digit(add_with_carry(vn1, vn2), sort_machine_word::add_with_carry_word(vw1, vw2)), concat_digit(plus(vn1, vn2), sort_machine_word::add_with_carry_word(vw1, vw2))));
4929 result.emplace_back(variable_list({vn1, vn2}), plus(succ_nat(vn1), vn2), succ_nat(plus(vn1, vn2)));
4930 result.emplace_back(variable_list({vn1, vn2}), plus(vn1, succ_nat(vn2)), succ_nat(plus(vn1, vn2)));
4931 result.emplace_back(variable_list({vn1, vp2}), plus(succ_nat(vn1), vp2), sort_pos::succpos(plus(vn1, vp2)));
4932 result.emplace_back(variable_list({vn1, vp2}), plus(vn1, sort_pos::succpos(vp2)), sort_pos::succpos(plus(vn1, vp2)));
4933 result.emplace_back(variable_list({vn2, vp1}), plus(sort_pos::succpos(vp1), vn2), sort_pos::succpos(plus(vp1, vn2)));
4934 result.emplace_back(variable_list({vn2, vp1}), plus(vp1, succ_nat(vn2)), sort_pos::succpos(plus(vp1, vn2)));
4935 result.emplace_back(variable_list({vn}), plus(most_significant_digit_nat(sort_machine_word::zero_word()), vn), vn);
4936 result.emplace_back(variable_list({vn}), plus(vn, most_significant_digit_nat(sort_machine_word::zero_word())), vn);
4937 result.emplace_back(variable_list({vp}), plus(most_significant_digit_nat(sort_machine_word::zero_word()), vp), vp);
4938 result.emplace_back(variable_list({vp}), plus(vp, most_significant_digit_nat(sort_machine_word::zero_word())), vp);
4939 result.emplace_back(variable_list({vn1, vn2}), auxiliary_plus_nat(vn1, vn2), plus(vn1, vn2));
4940 result.emplace_back(variable_list({vw}), natpred(most_significant_digit_nat(vw)), if_(sort_machine_word::equals_zero_word(vw), most_significant_digit_nat(sort_machine_word::zero_word()), most_significant_digit_nat(sort_machine_word::pred_word(vw))));
4941 result.emplace_back(variable_list({vn, vw}), natpred(concat_digit(vn, vw)), if_(sort_machine_word::equals_zero_word(vw), if_(equals_one(vn), most_significant_digit_nat(sort_machine_word::max_word()), concat_digit(natpred(vn), sort_machine_word::max_word())), concat_digit(vn, sort_machine_word::pred_word(vw))));
4942 result.emplace_back(variable_list({vn}), natpred(succ_nat(vn)), vn);
4943 result.emplace_back(variable_list({vw1, vw2}), monus(most_significant_digit_nat(vw1), most_significant_digit_nat(vw2)), most_significant_digit_nat(sort_machine_word::monus_word(vw1, vw2)));
4944 result.emplace_back(variable_list({vn1, vw1, vw2}), monus(concat_digit(vn1, vw1), most_significant_digit_nat(vw2)), if_(sort_machine_word::less_word(vw1, vw2), if_(equals_one(vn1), most_significant_digit_nat(sort_machine_word::minus_word(vw1, vw2)), concat_digit(natpred(vn1), sort_machine_word::minus_word(vw1, vw2))), concat_digit(vn1, sort_machine_word::minus_word(vw1, vw2))));
4945 result.emplace_back(variable_list({vn2, vw1, vw2}), monus(most_significant_digit_nat(vw1), concat_digit(vn2, vw2)), most_significant_digit_nat(sort_machine_word::zero_word()));
4946 result.emplace_back(variable_list({vn1, vn2, vw1, vw2}), monus(concat_digit(vn1, vw1), concat_digit(vn2, vw2)), monus_whr(vn1, vw1, vn2, vw2, monus(vn1, vn2)));
4947 result.emplace_back(variable_list({vdiff, vn1, vn2, vw1, vw2}), monus_whr(vn1, vw1, vn2, vw2, vdiff), if_(sort_machine_word::less_word(vw1, vw2), if_(equals_zero(vdiff), most_significant_digit_nat(sort_machine_word::zero_word()), if_(equals_one(vdiff), most_significant_digit_nat(sort_machine_word::minus_word(vw1, vw2)), concat_digit(natpred(vdiff), sort_machine_word::minus_word(vw1, vw2)))), if_(equals_zero(vdiff), most_significant_digit_nat(sort_machine_word::minus_word(vw1, vw2)), concat_digit(vdiff, sort_machine_word::minus_word(vw1, vw2)))));
4948 result.emplace_back(variable_list({vw1, vw2}), times(most_significant_digit_nat(vw1), most_significant_digit_nat(vw2)), if_(sort_machine_word::equals_zero_word(sort_machine_word::times_overflow_word(vw1, vw2)), most_significant_digit_nat(sort_machine_word::times_word(vw1, vw2)), concat_digit(most_significant_digit_nat(sort_machine_word::times_overflow_word(vw1, vw2)), sort_machine_word::times_word(vw1, vw2))));
4949 result.emplace_back(variable_list({vn2, vw1, vw2}), times(most_significant_digit_nat(vw1), concat_digit(vn2, vw2)), if_(sort_machine_word::equals_zero_word(vw1), most_significant_digit_nat(sort_machine_word::zero_word()), concat_digit(times_overflow(vn2, vw1, sort_machine_word::times_overflow_word(vw1, vw2)), sort_machine_word::times_word(vw1, vw2))));
4950 result.emplace_back(variable_list({vn1, vw1, vw2}), times(concat_digit(vn1, vw1), most_significant_digit_nat(vw2)), if_(sort_machine_word::equals_zero_word(vw2), most_significant_digit_nat(sort_machine_word::zero_word()), concat_digit(times_overflow(vn1, vw2, sort_machine_word::times_overflow_word(vw1, vw2)), sort_machine_word::times_word(vw1, vw2))));
4951 result.emplace_back(variable_list({vn1, vn2, vw1, vw2}), times(concat_digit(vn1, vw1), concat_digit(vn2, vw2)), if_(less(vn1, vn2), times_ordered(concat_digit(vn1, vw1), concat_digit(vn2, vw2)), times_ordered(concat_digit(vn2, vw2), concat_digit(vn1, vw1))));
4952 result.emplace_back(variable_list({vn2, vw1, vw2}), times_ordered(most_significant_digit_nat(vw1), concat_digit(vn2, vw2)), concat_digit(times_overflow(vn2, vw1, sort_machine_word::times_overflow_word(vw1, vw2)), sort_machine_word::times_word(vw1, vw2)));
4953 result.emplace_back(variable_list({vn1, vn2, vw1}), times_ordered(concat_digit(vn1, vw1), vn2), plus(concat_digit(times_ordered(vn1, vn2), sort_machine_word::zero_word()), times_overflow(vn2, vw1, sort_machine_word::zero_word())));
4954 result.emplace_back(variable_list({voverflow, vw1, vw2}), times_overflow(most_significant_digit_nat(vw1), vw2, voverflow), if_(sort_machine_word::equals_zero_word(sort_machine_word::times_with_carry_overflow_word(vw1, vw2, voverflow)), most_significant_digit_nat(sort_machine_word::times_with_carry_word(vw1, vw2, voverflow)), concat_digit(most_significant_digit_nat(sort_machine_word::times_with_carry_overflow_word(vw1, vw2, voverflow)), sort_machine_word::times_with_carry_word(vw1, vw2, voverflow))));
4955 result.emplace_back(variable_list({vn1, voverflow, vw1, vw2}), times_overflow(concat_digit(vn1, vw1), vw2, voverflow), if_(sort_machine_word::equals_zero_word(vw2), most_significant_digit_nat(voverflow), concat_digit(times_overflow(vn1, vw2, sort_machine_word::times_with_carry_overflow_word(vw1, vw2, voverflow)), sort_machine_word::times_with_carry_word(vw1, vw2, voverflow))));
4956 result.emplace_back(variable_list({vw}), is_odd(most_significant_digit_nat(vw)), sort_machine_word::rightmost_bit(vw));
4957 result.emplace_back(variable_list({vn, vw}), is_odd(concat_digit(vn, vw)), sort_machine_word::rightmost_bit(vw));
4958 result.emplace_back(variable_list({vw}), div2(most_significant_digit_nat(vw)), most_significant_digit_nat(sort_machine_word::shift_right(sort_bool::false_(), vw)));
4959 result.emplace_back(variable_list({vn, vw}), div2(concat_digit(vn, vw)), if_(equals_zero(vn), most_significant_digit_nat(sort_machine_word::shift_right(is_odd(vn), vw)), concat_digit(div2(vn), sort_machine_word::shift_right(is_odd(vn), vw))));
4960 result.emplace_back(variable_list({vw}), msd(most_significant_digit_nat(vw)), vw);
4961 result.emplace_back(variable_list({vn, vw}), msd(concat_digit(vn, vw)), msd(vn));
4962 result.emplace_back(variable_list({vn, vw}), exp(vn, most_significant_digit_nat(vw)), exp_aux3n(sort_machine_word::rightmost_bit(vw), vn, vw));
4963 result.emplace_back(variable_list({vn, vn1, vw1}), exp(vn, concat_digit(vn1, vw1)), exp_aux4n(sort_machine_word::rightmost_bit(vw1), vn, vn1, vw1));
4964 result.emplace_back(variable_list({vn, vw}), exp_aux3n(sort_bool::true_(), vn, vw), if_(sort_machine_word::equals_one_word(vw), vn, times(vn, exp_aux3n(sort_machine_word::rightmost_bit(sort_machine_word::shift_right(sort_bool::false_(), vw)), times(vn, vn), sort_machine_word::shift_right(sort_bool::false_(), vw)))));
4965 result.emplace_back(variable_list({vn, vw}), exp_aux3n(sort_bool::false_(), vn, vw), if_(sort_machine_word::equals_zero_word(vw), most_significant_digit_nat(sort_machine_word::one_word()), exp_aux3n(sort_machine_word::rightmost_bit(sort_machine_word::shift_right(sort_bool::false_(), vw)), times(vn, vn), sort_machine_word::shift_right(sort_bool::false_(), vw))));
4966 result.emplace_back(variable_list({vn, vn1, vw}), exp_aux4n(sort_bool::true_(), vn, vn1, vw), exp_auxtruen(vn, div2(vn1), sort_machine_word::shift_right(is_odd(vn1), vw)));
4967 result.emplace_back(variable_list({vn, vshift_n1, vshift_w}), exp_auxtruen(vn, vshift_n1, vshift_w), if_(equals_zero(vshift_n1), times(vn, exp_aux3n(sort_machine_word::rightmost_bit(vshift_w), times(vn, vn), vshift_w)), times(vn, exp_aux4n(sort_machine_word::rightmost_bit(vshift_w), times(vn, vn), vshift_n1, vshift_w))));
4968 result.emplace_back(variable_list({vn, vn1, vw}), exp_aux4n(sort_bool::false_(), vn, vn1, vw), exp_auxfalsen(vn, div2(vn1), sort_machine_word::shift_right(is_odd(vn1), vw)));
4969 result.emplace_back(variable_list({vn, vshift_n1, vshift_w}), exp_auxfalsen(vn, vshift_n1, vshift_w), if_(equals_zero(vshift_n1), exp_aux3n(sort_machine_word::rightmost_bit(vshift_w), times(vn, vn), vshift_w), exp_aux4n(sort_machine_word::rightmost_bit(vshift_w), times(vn, vn), vshift_n1, vshift_w)));
4970 result.emplace_back(variable_list({vp, vw}), exp(vp, most_significant_digit_nat(vw)), exp_aux3p(sort_machine_word::rightmost_bit(vw), vp, vw));
4971 result.emplace_back(variable_list({vn1, vp, vw1}), exp(vp, concat_digit(vn1, vw1)), exp_aux4p(sort_machine_word::rightmost_bit(vw1), vp, vn1, vw1));
4972 result.emplace_back(variable_list({vp, vw}), exp_aux3p(sort_bool::true_(), vp, vw), if_(sort_machine_word::equals_one_word(vw), vp, times(vp, exp_aux3p(sort_machine_word::rightmost_bit(sort_machine_word::shift_right(sort_bool::false_(), vw)), times(vp, vp), sort_machine_word::shift_right(sort_bool::false_(), vw)))));
4973 result.emplace_back(variable_list({vp, vw}), exp_aux3p(sort_bool::false_(), vp, vw), if_(sort_machine_word::equals_zero_word(vw), sort_pos::most_significant_digit(sort_machine_word::one_word()), exp_aux3p(sort_machine_word::rightmost_bit(sort_machine_word::shift_right(sort_bool::false_(), vw)), times(vp, vp), sort_machine_word::shift_right(sort_bool::false_(), vw))));
4974 result.emplace_back(variable_list({vn1, vp, vw}), exp_aux4p(sort_bool::true_(), vp, vn1, vw), exp_auxtruep(vp, div2(vn1), sort_machine_word::shift_right(is_odd(vn1), vw)));
4975 result.emplace_back(variable_list({vp, vshift_n1, vshift_w}), exp_auxtruep(vp, vshift_n1, vshift_w), if_(equals_zero(vshift_n1), times(vp, exp_aux3p(sort_machine_word::rightmost_bit(vshift_w), times(vp, vp), vshift_w)), times(vp, exp_aux4p(sort_machine_word::rightmost_bit(vshift_w), times(vp, vp), vshift_n1, vshift_w))));
4976 result.emplace_back(variable_list({vn1, vp, vw}), exp_aux4p(sort_bool::false_(), vp, vn1, vw), exp_auxfalsep(vp, div2(vn1), sort_machine_word::shift_right(is_odd(vn1), vw)));
4977 result.emplace_back(variable_list({vp, vshift_n1, vshift_w}), exp_auxfalsep(vp, vshift_n1, vshift_w), if_(equals_zero(vshift_n1), exp_aux3p(sort_machine_word::rightmost_bit(vshift_w), times(vp, vp), vshift_w), exp_aux4p(sort_machine_word::rightmost_bit(vshift_w), times(vp, vp), vshift_n1, vshift_w)));
4978 result.emplace_back(variable_list({vw1, vw2}), div(most_significant_digit_nat(vw1), sort_pos::most_significant_digit(vw2)), most_significant_digit_nat(sort_machine_word::div_word(vw1, vw2)));
4979 result.emplace_back(variable_list({vw1, vw2}), mod(most_significant_digit_nat(vw1), sort_pos::most_significant_digit(vw2)), most_significant_digit_nat(sort_machine_word::mod_word(vw1, vw2)));
4980 result.emplace_back(variable_list({vp, vw1, vw2}), div(most_significant_digit_nat(vw1), concat_digit(vp, vw2)), most_significant_digit_nat(sort_machine_word::zero_word()));
4981 result.emplace_back(variable_list({vp, vw1, vw2}), mod(most_significant_digit_nat(vw1), concat_digit(vp, vw2)), most_significant_digit_nat(vw1));
4982 result.emplace_back(variable_list({vn, vw1, vw2}), div(concat_digit(vn, vw1), sort_pos::most_significant_digit(vw2)), div_whr1(vn, vw1, vw2, divmod_aux(vn, sort_pos::most_significant_digit(vw2))));
4983 result.emplace_back(variable_list({vn, vpair_, vw1, vw2}), div_whr1(vn, vw1, vw2, vpair_), if_(less(vn, most_significant_digit_nat(vw2)), most_significant_digit_nat(div_bold(concat_digit(vn, vw1), sort_pos::most_significant_digit(vw2))), if_(equals_zero(first(vpair_)), most_significant_digit_nat(div_bold(if_(equals_zero(last(vpair_)), most_significant_digit_nat(vw1), concat_digit(last(vpair_), vw1)), sort_pos::most_significant_digit(vw2))), concat_digit(first(vpair_), div_bold(if_(equals_zero(last(vpair_)), most_significant_digit_nat(vw1), concat_digit(last(vpair_), vw1)), sort_pos::most_significant_digit(vw2))))));
4984 result.emplace_back(variable_list({vn, vw1, vw2}), mod(concat_digit(vn, vw1), sort_pos::most_significant_digit(vw2)), most_significant_digit_nat(sort_machine_word::mod_doubleword(msd(mod(vn, sort_pos::most_significant_digit(vw2))), vw1, vw2)));
4985 result.emplace_back(variable_list({vn, vp, vw1, vw2}), div(concat_digit(vn, vw1), concat_digit(vp, vw2)), if_(less(vn, pos2nat(concat_digit(vp, vw2))), most_significant_digit_nat(div_bold(concat_digit(vn, vw1), concat_digit(vp, vw2))), div_whr2(vn, vw1, vp, vw2, divmod_aux(vn, concat_digit(vp, vw2)))));
4986 result.emplace_back(variable_list({vn, vp, vpair_, vw1, vw2}), div_whr2(vn, vw1, vp, vw2, vpair_), plus(if_(equals_zero(first(vpair_)), most_significant_digit_nat(sort_machine_word::zero_word()), concat_digit(first(vpair_), sort_machine_word::zero_word())), most_significant_digit_nat(div_bold(if_(equals_zero(last(vpair_)), most_significant_digit_nat(vw1), concat_digit(last(vpair_), vw1)), concat_digit(vp, vw2)))));
4987 result.emplace_back(variable_list({vn, vp, vw1, vw2}), mod(concat_digit(vn, vw1), concat_digit(vp, vw2)), mod_whr1(vw1, vp, vw2, mod(vn, concat_digit(vp, vw2))));
4988 result.emplace_back(variable_list({vm1, vp, vw1, vw2}), mod_whr1(vw1, vp, vw2, vm1), monus(if_(less(most_significant_digit_nat(sort_machine_word::zero_word()), vm1), concat_digit(vm1, vw1), most_significant_digit_nat(vw1)), times(concat_digit(pos2nat(vp), vw2), most_significant_digit_nat(div_bold(if_(less(most_significant_digit_nat(sort_machine_word::zero_word()), vm1), concat_digit(vm1, vw1), most_significant_digit_nat(vw1)), concat_digit(vp, vw2))))));
4989 result.emplace_back(variable_list({vw1, vw2}), divmod_aux(most_significant_digit_nat(vw1), sort_pos::most_significant_digit(vw2)), nnpair(most_significant_digit_nat(sort_machine_word::div_word(vw1, vw2)), most_significant_digit_nat(sort_machine_word::mod_word(vw1, vw2))));
4990 result.emplace_back(variable_list({vp, vw1, vw2}), divmod_aux(most_significant_digit_nat(vw1), concat_digit(vp, vw2)), nnpair(most_significant_digit_nat(sort_machine_word::zero_word()), most_significant_digit_nat(vw1)));
4991 result.emplace_back(variable_list({vn, vw1, vw2}), divmod_aux(concat_digit(vn, vw1), sort_pos::most_significant_digit(vw2)), divmod_aux_whr1(vn, vw1, vw2, divmod_aux(vn, sort_pos::most_significant_digit(vw2))));
4992 result.emplace_back(variable_list({vn, vpair_, vw1, vw2}), divmod_aux_whr1(vn, vw1, vw2, vpair_), nnpair(if_(less(vn, most_significant_digit_nat(vw2)), most_significant_digit_nat(div_bold(concat_digit(vn, vw1), sort_pos::most_significant_digit(vw2))), if_(equals_zero(first(vpair_)), most_significant_digit_nat(div_bold(if_(equals_zero(last(vpair_)), most_significant_digit_nat(vw1), concat_digit(last(vpair_), vw1)), sort_pos::most_significant_digit(vw2))), concat_digit(first(vpair_), div_bold(if_(equals_zero(last(vpair_)), most_significant_digit_nat(vw1), concat_digit(last(vpair_), vw1)), sort_pos::most_significant_digit(vw2))))), most_significant_digit_nat(sort_machine_word::mod_doubleword(msd(last(vpair_)), vw1, vw2))));
4993 result.emplace_back(variable_list({vn, vp, vw1, vw2}), divmod_aux(concat_digit(vn, vw1), concat_digit(vp, vw2)), if_(less(vn, pos2nat(concat_digit(vp, vw2))), divmod_aux_whr2(vn, vw1, vp, vw2, mod(vn, concat_digit(vp, vw2))), divmod_aux_whr4(vw1, vp, vw2, divmod_aux(vn, concat_digit(vp, vw2)))));
4994 result.emplace_back(variable_list({vlp, vn, vp, vw1, vw2}), divmod_aux_whr2(vn, vw1, vp, vw2, vlp), divmod_aux_whr3(vn, vw1, vp, vw2, if_(equals_zero(vlp), most_significant_digit_nat(vw1), concat_digit(vlp, vw1))));
4995 result.emplace_back(variable_list({vm, vn, vp, vw1, vw2}), divmod_aux_whr3(vn, vw1, vp, vw2, vm), nnpair(most_significant_digit_nat(div_bold(concat_digit(vn, vw1), concat_digit(vp, vw2))), monus(vm, times(concat_digit(pos2nat(vp), vw2), most_significant_digit_nat(div_bold(vm, concat_digit(vp, vw2)))))));
4996 result.emplace_back(variable_list({vp, vpair_, vw1, vw2}), divmod_aux_whr4(vw1, vp, vw2, vpair_), divmod_aux_whr5(vp, vw2, vpair_, if_(equals_zero(last(vpair_)), most_significant_digit_nat(vw1), concat_digit(last(vpair_), vw1))));
4997 result.emplace_back(variable_list({vm, vp, vpair_, vw2}), divmod_aux_whr5(vp, vw2, vpair_, vm), divmod_aux_whr6(vp, vw2, vpair_, vm, most_significant_digit_nat(div_bold(vm, concat_digit(vp, vw2)))));
4998 result.emplace_back(variable_list({vm, vm1, vp, vpair_, vw2}), divmod_aux_whr6(vp, vw2, vpair_, vm, vm1), nnpair(plus(concat_digit(first(vpair_), sort_machine_word::zero_word()), vm1), monus(vm, times(concat_digit(pos2nat(vp), vw2), vm1))));
4999 result.emplace_back(variable_list({vw1, vw2}), div_bold(most_significant_digit_nat(vw1), sort_pos::most_significant_digit(vw2)), sort_machine_word::div_word(vw1, vw2));
5000 result.emplace_back(variable_list({vp, vw1, vw2}), div_bold(most_significant_digit_nat(vw1), concat_digit(vp, vw2)), sort_machine_word::zero_word());
5001 result.emplace_back(variable_list({vw1, vw2, vw3}), div_bold(concat_digit(most_significant_digit_nat(vw1), vw2), sort_pos::most_significant_digit(vw3)), sort_machine_word::div_doubleword(vw1, vw2, vw3));
5002 result.emplace_back(variable_list({vw, vw1, vw2, vw3}), div_bold(concat_digit(most_significant_digit_nat(vw), vw1), concat_digit(sort_pos::most_significant_digit(vw2), vw3)), sort_machine_word::div_double_doubleword(vw, vw1, vw2, vw3));
5003 result.emplace_back(variable_list({vw, vw1, vw2, vw3, vw4}), div_bold(concat_digit(concat_digit(most_significant_digit_nat(vw), vw1), vw2), concat_digit(sort_pos::most_significant_digit(vw3), vw4)), sort_machine_word::div_triple_doubleword(vw, vw1, vw2, vw3, vw4));
5004 result.emplace_back(variable_list({vn, vp, vw1, vw2, vw3}), div_bold(concat_digit(vn, vw1), concat_digit(concat_digit(vp, vw2), vw3)), if_(less_equal(concat_digit(pos2nat(concat_digit(vp, vw2)), sort_machine_word::zero_word()), vn), sort_machine_word::max_word(), div_bold_whr(vn, vw1, vp, vw2, vw3, div_bold(vn, concat_digit(vp, vw2)))));
5005 result.emplace_back(variable_list({vn, vp, vw, vw1, vw2, vw3}), div_bold_whr(vn, vw1, vp, vw2, vw3, vw), if_(less(concat_digit(vn, vw1), times(most_significant_digit_nat(vw), pos2nat(concat_digit(concat_digit(vp, vw2), vw3)))), sort_machine_word::pred_word(vw), vw));
5006 result.emplace_back(variable_list({vm1, vm2, vn1, vn2}), equal_to(nnpair(vn1, vn2), nnpair(vm1, vm2)), sort_bool::and_(equal_to(vn1, vm1), equal_to(vn2, vm2)));
5007 result.emplace_back(variable_list({vm1, vm2, vn1, vn2}), less(nnpair(vn1, vn2), nnpair(vm1, vm2)), sort_bool::or_(less(vn1, vm1), sort_bool::and_(equal_to(vn1, vm1), less(vn2, vm2))));
5008 result.emplace_back(variable_list({vm1, vm2, vn1, vn2}), less_equal(nnpair(vn1, vn2), nnpair(vm1, vm2)), sort_bool::or_(less(vn1, vm1), sort_bool::and_(equal_to(vn1, vm1), less_equal(vn2, vm2))));
5009 result.emplace_back(variable_list({vm, vn}), first(nnpair(vm, vn)), vm);
5010 result.emplace_back(variable_list({vm, vn}), last(nnpair(vm, vn)), vn);
5011 result.emplace_back(variable_list({vm, vn}), swap_zero(vm, vn), if_(equals_zero(vn), vm, if_(equals_zero(vm), vn, if_(equal_to(vn, vm), most_significant_digit_nat(sort_machine_word::zero_word()), vn))));
5012 result.emplace_back(variable_list({vm1, vm2, vn1, vn2}), swap_zero_add(vn1, vn2, vm1, vm2), if_(equals_zero(vn1), if_(equals_zero(vn2), plus(vm1, vm2), if_(equals_zero(vm1), vm2, swap_zero(vn2, plus(vm1, swap_zero(vn2, vm2))))), if_(equals_zero(vn2), if_(equals_zero(vm2), vn1, swap_zero(vn1, plus(swap_zero(vn1, vm1), vm2))), swap_zero(plus(vn1, vn2), plus(swap_zero(vn1, vm1), swap_zero(vn2, vm2))))));
5013 result.emplace_back(variable_list({vm1, vm2, vn1, vn2}), swap_zero_min(vn1, vn2, vm1, vm2), if_(equals_zero(vn1), if_(equals_zero(vn2), minimum(vm1, vm2), if_(equals_zero(vm1), most_significant_digit_nat(sort_machine_word::zero_word()), minimum(vm1, swap_zero(vn2, vm2)))), if_(equals_zero(vn2), if_(equals_zero(vm2), most_significant_digit_nat(sort_machine_word::zero_word()), minimum(swap_zero(vn1, vm1), vm2)), swap_zero(minimum(vn1, vn2), minimum(swap_zero(vn1, vm1), swap_zero(vn2, vm2))))));
5014 result.emplace_back(variable_list({vm1, vm2, vn1, vn2}), swap_zero_monus(vn1, vn2, vm1, vm2), if_(equals_zero(vn1), if_(equals_zero(vn2), monus(vm1, vm2), if_(equals_zero(vm1), most_significant_digit_nat(sort_machine_word::zero_word()), monus(vm1, swap_zero(vn2, vm2)))), if_(equals_zero(vn2), if_(equals_zero(vm2), vm1, swap_zero(vn1, monus(swap_zero(vn1, vm1), vm2))), swap_zero(monus(vn1, vn2), monus(swap_zero(vn1, vm1), swap_zero(vn2, vm2))))));
5015 result.emplace_back(variable_list({vw}), sqrt(most_significant_digit_nat(vw)), most_significant_digit_nat(sort_machine_word::sqrt_word(vw)));
5016 result.emplace_back(variable_list({vw1, vw2}), sqrt(concat_digit(most_significant_digit_nat(vw1), vw2)), most_significant_digit_nat(sort_machine_word::sqrt_doubleword(vw1, vw2)));
5017 result.emplace_back(variable_list({vw1, vw2, vw3}), sqrt(concat_digit(concat_digit(most_significant_digit_nat(vw1), vw2), vw3)), sqrt_whr1(vw1, vw2, vw3, sort_machine_word::sqrt_tripleword_overflow(vw1, vw2, vw3)));
5018 result.emplace_back(variable_list({voverflow, vw1, vw2, vw3}), sqrt_whr1(vw1, vw2, vw3, voverflow), if_(sort_machine_word::equals_zero_word(voverflow), most_significant_digit_nat(sort_machine_word::sqrt_tripleword(vw1, vw2, vw3)), concat_digit(most_significant_digit_nat(voverflow), sort_machine_word::sqrt_tripleword(vw1, vw2, vw3))));
5019 result.emplace_back(variable_list({vw1, vw2, vw3, vw4}), sqrt(concat_digit(concat_digit(concat_digit(most_significant_digit_nat(vw1), vw2), vw3), vw4)), sqrt_whr2(vw1, vw2, vw3, vw4, sort_machine_word::sqrt_quadrupleword_overflow(vw1, vw2, vw3, vw4)));
5020 result.emplace_back(variable_list({voverflow, vw1, vw2, vw3, vw4}), sqrt_whr2(vw1, vw2, vw3, vw4, voverflow), if_(sort_machine_word::equals_zero_word(voverflow), most_significant_digit_nat(sort_machine_word::sqrt_quadrupleword(vw1, vw2, vw3, vw4)), concat_digit(most_significant_digit_nat(voverflow), sort_machine_word::sqrt_quadrupleword(vw1, vw2, vw3, vw4))));
5021 result.emplace_back(variable_list({vn, vw1, vw2, vw3, vw4}), sqrt(concat_digit(concat_digit(concat_digit(concat_digit(vn, vw1), vw2), vw3), vw4)), first(sqrt_pair(concat_digit(concat_digit(concat_digit(concat_digit(vn, vw1), vw2), vw3), vw4))));
5022 result.emplace_back(variable_list({vw}), sqrt_pair(most_significant_digit_nat(vw)), nnpair(most_significant_digit_nat(sort_machine_word::sqrt_word(vw)), most_significant_digit_nat(sort_machine_word::minus_word(vw, sort_machine_word::times_word(sort_machine_word::sqrt_word(vw), sort_machine_word::sqrt_word(vw))))));
5023 result.emplace_back(variable_list({vw1, vw2}), sqrt_pair(concat_digit(most_significant_digit_nat(vw1), vw2)), nnpair(most_significant_digit_nat(sort_machine_word::sqrt_doubleword(vw1, vw2)), monus(concat_digit(most_significant_digit_nat(vw1), vw2), exp(most_significant_digit_nat(sort_machine_word::sqrt_doubleword(vw1, vw2)), most_significant_digit_nat(sort_machine_word::two_word())))));
5024 result.emplace_back(variable_list({vw1, vw2, vw3}), sqrt_pair(concat_digit(concat_digit(most_significant_digit_nat(vw1), vw2), vw3)), sqrt_pair_whr1(vw1, vw2, vw3, sqrt(concat_digit(concat_digit(most_significant_digit_nat(vw1), vw2), vw3))));
5025 result.emplace_back(variable_list({vsolution, vw1, vw2, vw3}), sqrt_pair_whr1(vw1, vw2, vw3, vsolution), nnpair(vsolution, monus(concat_digit(concat_digit(most_significant_digit_nat(vw1), vw2), vw3), times(vsolution, vsolution))));
5026 result.emplace_back(variable_list({vw1, vw2, vw3, vw4}), sqrt_pair(concat_digit(concat_digit(concat_digit(most_significant_digit_nat(vw1), vw2), vw3), vw4)), sqrt_pair_whr2(vw1, vw2, vw3, vw4, sqrt(concat_digit(concat_digit(concat_digit(most_significant_digit_nat(vw1), vw2), vw3), vw4))));
5027 result.emplace_back(variable_list({vsolution, vw1, vw2, vw3, vw4}), sqrt_pair_whr2(vw1, vw2, vw3, vw4, vsolution), nnpair(vsolution, monus(concat_digit(concat_digit(concat_digit(most_significant_digit_nat(vw1), vw2), vw3), vw4), times(vsolution, vsolution))));
5028 result.emplace_back(variable_list({vn, vw1, vw2, vw3, vw4}), sqrt_pair(concat_digit(concat_digit(concat_digit(concat_digit(vn, vw1), vw2), vw3), vw4)), sqrt_pair_whr3(vw3, vw4, sqrt_pair(concat_digit(concat_digit(vn, vw1), vw2))));
5029 result.emplace_back(variable_list({vpq, vw3, vw4}), sqrt_pair_whr3(vw3, vw4, vpq), sqrt_pair_whr4(vw3, vw4, vpq, if_(equals_zero(first(vpq)), most_significant_digit_nat(sort_machine_word::zero_word()), concat_digit(first(vpq), sort_machine_word::zero_word())), if_(less(most_significant_digit_nat(sort_machine_word::zero_word()), last(vpq)), concat_digit(concat_digit(last(vpq), vw3), vw4), if_(sort_machine_word::not_equals_zero_word(vw3), concat_digit(most_significant_digit_nat(vw3), vw4), most_significant_digit_nat(vw4))), plus(times(first(vpq), first(vpq)), last(vpq))));
5030 result.emplace_back(variable_list({vm2, vm3, vm5, vpq, vw3, vw4}), sqrt_pair_whr4(vw3, vw4, vpq, vm3, vm2, vm5), sqrt_pair_whr5(vpq, vm3, vm2, if_(less(most_significant_digit_nat(sort_machine_word::zero_word()), vm5), concat_digit(concat_digit(vm5, vw3), vw4), if_(sort_machine_word::not_equals_zero_word(vw3), concat_digit(most_significant_digit_nat(vw3), vw4), most_significant_digit_nat(vw4))), div(vm2, nat2pos(times(most_significant_digit_nat(sort_machine_word::two_word()), vm3)))));
5031 result.emplace_back(variable_list({vm2, vm3, vm4, vpq, vy_guess}), sqrt_pair_whr5(vpq, vm3, vm2, vm4, vy_guess), sqrt_pair_whr6(vm2, if_(less(times(most_significant_digit_nat(sort_machine_word::four_word()), first(vpq)), concat_digit(most_significant_digit_nat(sort_machine_word::three_word()), sort_machine_word::zero_word())), monus(sqrt(vm4), vm3), if_(less(vm2, times(plus(times(most_significant_digit_nat(sort_machine_word::two_word()), vm3), vy_guess), vy_guess)), natpred(vy_guess), vy_guess)), if_(equals_zero(first(vpq)), most_significant_digit_nat(sort_machine_word::zero_word()), concat_digit(first(vpq), sort_machine_word::zero_word()))));
5032 result.emplace_back(variable_list({vm1, vm2, vy}), sqrt_pair_whr6(vm2, vy, vm1), nnpair(plus(vm1, vy), monus(vm2, times(plus(times(vm1, most_significant_digit_nat(sort_machine_word::two_word())), vy), vy))));
5033 return result;
5034 }
5035
5036} // namespace mcrl2::data::sort_nat
5037
5038#endif // MCRL2_DATA_NAT64_H
A unordered_map class in which aterms can be stored.
\brief A basic sort
Definition basic_sort.h:25
basic_sort(const core::identifier_string &name)
\brief Constructor Z14.
Definition basic_sort.h:41
basic_sort(const atermpp::aterm &term)
Definition basic_sort.h:34
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.
application operator()(const data_expression &e1, const data_expression &e2) const
Apply a data expression to two data expressions.
sort_expression sort() const
Returns the sort of the data expression.
Definition data.cpp:107
application operator()(const data_expression &e) const
Apply a data expression to a data expression.
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 A function symbol
function_symbol(const core::identifier_string &name, const sort_expression &sort)
Constructor.
\brief A sort expression
sort_expression & operator=(const sort_expression &) noexcept=default
sort_expression(const sort_expression &) noexcept=default
Move semantics.
\brief A data variable
Definition variable.h:25
Namespace for system defined sort bool_.
Definition bool.h:29
const basic_sort & bool_()
Constructor for sort expression Bool.
Definition bool.h:41
const basic_sort & machine_word()
Constructor for sort expression @word.
Namespace for system defined sort nat.
bool is_sqrt_pair_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair.
Definition nat64.h:3971
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:2316
bool is_monus_whr_application(const atermpp::aterm &e)
Recogniser for application of @monus_whr.
Definition nat64.h:2123
void make_plus(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol +.
Definition nat1.h:952
void make_sqrt_whr2(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @sqrt_whr2.
Definition nat64.h:3933
bool is_natpred_function_symbol(const atermpp::aterm &e)
Recogniser for function @natpred.
Definition nat1.h:717
void make_sqrt_whr1(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 @sqrt_whr1.
Definition nat64.h:3863
function_symbol maximum(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:419
const core::identifier_string & sqrt_pair_name()
Generate identifier @sqrt_pair.
Definition nat64.h:3951
const core::identifier_string & sqrt_pair_whr5_name()
Generate identifier @sqrt_pair_whr5.
Definition nat64.h:4289
const data_expression & arg5(const data_expression &e)
Function for projecting out argument. arg5 from an application.
Definition nat64.h:4813
void make_div_whr2(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @div_whr2.
Definition nat64.h:2919
void make_sqrt_pair_whr1(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 @sqrt_pair_whr1.
Definition nat64.h:4063
bool is_pos2nat_function_symbol(const atermpp::aterm &e)
Recogniser for function Pos2Nat.
Definition nat1.h:307
const core::identifier_string & most_significant_digit_nat_name()
Generate identifier @most_significant_digitNat.
Definition nat64.h:288
bool is_sqrt_pair_whr5_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr5.
Definition nat64.h:4351
const core::identifier_string & natnatpair_name()
Definition nat64.h:64
function_symbol succ(const sort_expression &s0)
Definition nat1.h:581
application divmod_aux_whr6(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Application of function symbol @divmod_aux_whr6.
Definition nat64.h:3451
const function_symbol & monus()
Constructor for function symbol @monus.
Definition nat1.h:1388
void make_sqrt(data_expression &result, const data_expression &arg0)
Make an application of function symbol sqrt.
Definition nat1.h:1754
const function_symbol & pred_whr()
Constructor for function symbol @pred_whr.
Definition nat64.h:1033
application divmod_aux(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @divmod_aux.
Definition nat64.h:3040
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:1566
void make_times_overflow(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @times_overflow.
Definition nat64.h:1526
void make_div(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol div.
Definition nat1.h:1157
application divmod_aux_whr3(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Application of function symbol @divmod_aux_whr3.
Definition nat64.h:3245
bool is_sqrt_pair_whr6_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr6.
Definition nat64.h:4417
bool is_equals_zero_function_symbol(const atermpp::aterm &e)
Recogniser for function @equals_zero.
Definition nat64.h:447
void make_div_bold_whr(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4, const data_expression &arg5)
Make an application of function symbol @div_bold_whr.
Definition nat64.h:2781
bool is_sqrt_whr1_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_whr1.
Definition nat64.h:3873
function_symbol times_ordered(const sort_expression &s0, const sort_expression &s1)
Definition nat64.h:1396
application nnpair(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @nnPair.
Definition nat64.h:225
const core::identifier_string & mod_whr1_name()
Generate identifier @mod_whr1.
Definition nat64.h:2937
bool is_sqrt_pair_whr3_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr3.
Definition nat64.h:4171
const core::identifier_string & divmod_aux_whr5_name()
Generate identifier @divmod_aux_whr5.
Definition nat64.h:3345
application exp_aux4n(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @exp_aux4n.
Definition nat64.h:2368
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:1221
const core::identifier_string & equals_one_name()
Generate identifier @equals_one.
Definition nat64.h:551
bool is_swap_zero_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero.
Definition nat1.h:1462
const core::identifier_string & mod_name()
Generate identifier mod.
Definition nat1.h:1175
const function_symbol & divmod_aux_whr3()
Constructor for function symbol @divmod_aux_whr3.
Definition nat64.h:3217
function_symbol concat_digit(const sort_expression &s0, const sort_expression &s1)
Definition nat64.h:358
const core::identifier_string & exp_auxfalsen_name()
Generate identifier @exp_auxfalsen.
Definition nat64.h:2597
bool is_times_overflow_application(const atermpp::aterm &e)
Recogniser for application of @times_overflow.
Definition nat64.h:1536
bool is_div_application(const atermpp::aterm &e)
Recogniser for application of div.
Definition nat1.h:1167
bool is_equals_zero_application(const atermpp::aterm &e)
Recogniser for application of @equals_zero.
Definition nat64.h:481
const core::identifier_string & swap_zero_min_name()
Generate identifier @swap_zero_min.
Definition nat1.h:1574
application sqrt_pair_whr3(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @sqrt_pair_whr3.
Definition nat64.h:4187
bool is_pos2nat_application(const atermpp::aterm &e)
Recogniser for application of Pos2Nat.
Definition nat1.h:341
bool is_sqrt_pair_whr2_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr2.
Definition nat64.h:4143
application add_with_carry(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @add_with_carry.
Definition nat64.h:1218
application exp_auxtruen(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_auxtruen.
Definition nat64.h:2501
void make_pred(data_expression &result, const data_expression &arg0)
Make an application of function symbol pred.
Definition nat1.h:679
application exp_aux3p(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_aux3p.
Definition nat64.h:2167
void make_times_ordered(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @times_ordered.
Definition nat64.h:1447
const core::identifier_string & sqrt_pair_whr1_name()
Generate identifier @sqrt_pair_whr1.
Definition nat64.h:4013
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:1195
function_symbol exp(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:1247
const core::identifier_string & exp_auxfalsep_name()
Generate identifier @exp_auxfalsep.
Definition nat64.h:2531
application divmod_aux_whr5(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @divmod_aux_whr5.
Definition nat64.h:3382
application minimum(const data_expression &arg0, const data_expression &arg1)
Application of function symbol min.
Definition nat1.h:544
bool is_exp_auxfalsen_application(const atermpp::aterm &e)
Recogniser for application of @exp_auxfalsen.
Definition nat64.h:2655
application sqrt_pair_whr2(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Application of function symbol @sqrt_pair_whr2.
Definition nat64.h:4119
bool is_nnpair_function_symbol(const atermpp::aterm &e)
Recogniser for function @nnPair.
Definition nat64.h:210
const core::identifier_string & times_name()
Generate identifier *.
Definition nat1.h:1034
const function_symbol & div_whr1()
Constructor for function symbol @div_whr1.
Definition nat64.h:2809
bool is_divmod_aux_whr6_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr6.
Definition nat64.h:3433
void make_monus_whr(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @monus_whr.
Definition nat64.h:2113
bool is_divmod_aux_whr2_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr2.
Definition nat64.h:3199
const function_symbol & swap_zero_add()
Constructor for function symbol @swap_zero_add.
Definition nat1.h:1516
function_symbol_vector nat_mCRL2_usable_mappings()
Give all system defined mappings that can be used in mCRL2 specs for nat.
Definition nat1.h:2212
data_equation_vector nat_generate_equations_code()
Give all system defined equations for nat.
Definition nat1.h:2349
bool is_sqrt_pair_whr4_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr4.
Definition nat64.h:4237
const basic_sort & nat()
Constructor for sort expression Nat.
Definition nat1.h:43
const function_symbol & exp_auxtruep()
Constructor for function symbol @exp_auxtruep.
Definition nat64.h:2409
void make_exp_auxtruep(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @exp_auxtruep.
Definition nat64.h:2447
const core::identifier_string & nat_name()
Definition nat1.h:34
bool is_sqrt_pair_whr2_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr2.
Definition nat64.h:4101
application exp(const data_expression &arg0, const data_expression &arg1)
Application of function symbol exp.
Definition nat1.h:1287
application concat_digit(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @concat_digit.
Definition nat64.h:398
const core::identifier_string & equals_zero_name()
Generate identifier @equals_zero.
Definition nat64.h:427
bool is_exp_auxfalsep_application(const atermpp::aterm &e)
Recogniser for application of @exp_auxfalsep.
Definition nat64.h:2589
const core::identifier_string & exp_name()
Generate identifier exp.
Definition nat1.h:1239
bool is_divmod_aux_whr4_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr4.
Definition nat64.h:3297
const function_symbol & swap_zero()
Constructor for function symbol @swap_zero.
Definition nat1.h:1452
const function_symbol & sqrt_pair_whr3()
Constructor for function symbol @sqrt_pair_whr3.
Definition nat64.h:4161
application swap_zero(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @swap_zero.
Definition nat1.h:1477
bool is_concat_digit_function_symbol(const atermpp::aterm &e)
Recogniser for function @concat_digit.
Definition nat64.h:382
bool is_times_overflow_function_symbol(const atermpp::aterm &e)
Recogniser for function @times_overflow.
Definition nat64.h:1497
bool is_first_function_symbol(const atermpp::aterm &e)
Recogniser for function @first.
Definition nat1.h:1858
bool is_maximum_application(const atermpp::aterm &e)
Recogniser for application of max.
Definition nat1.h:488
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
application exp_auxfalsep(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_auxfalsep.
Definition nat64.h:2567
bool is_nat(const sort_expression &e)
Recogniser for sort expression Nat.
Definition nat1.h:53
bool is_pred_whr_application(const atermpp::aterm &e)
Recogniser for application of @pred_whr.
Definition nat64.h:1077
const core::identifier_string & auxiliary_plus_nat_name()
Generate identifier @plus_nat.
Definition nat64.h:1247
bool is_nnpair_application(const atermpp::aterm &e)
Recogniser for application of @nnPair.
Definition nat64.h:246
void make_equals_zero(data_expression &result, const data_expression &arg0)
Make an application of function symbol @equals_zero.
Definition nat64.h:471
const core::identifier_string & div_bold_name()
Generate identifier @div_bold.
Definition nat64.h:2663
application exp_aux4p(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @exp_aux4p.
Definition nat64.h:2234
application sqrt_pair_whr5(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Application of function symbol @sqrt_pair_whr5.
Definition nat64.h:4327
const core::identifier_string & exp_aux3n_name()
Generate identifier @exp_aux3n.
Definition nat64.h:2265
void make_pred_whr(data_expression &result, const data_expression &arg0)
Make an application of function symbol @pred_whr.
Definition nat64.h:1067
bool is_plus_function_symbol(const atermpp::aterm &e)
Recogniser for function +.
Definition nat1.h:925
function_symbol_vector nat_generate_constructors_and_functions_code()
Give all system defined mappings and constructors for nat.
Definition nat1.h:2199
application sqrt(const data_expression &arg0)
Application of function symbol sqrt.
Definition nat1.h:1744
application pos2nat(const data_expression &arg0)
Application of function symbol Pos2Nat.
Definition nat1.h:321
const core::identifier_string & exp_aux4p_name()
Generate identifier @exp_aux4p.
Definition nat64.h:2197
void make_nat2pos(data_expression &result, const data_expression &arg0)
Make an application of function symbol Nat2Pos.
Definition nat1.h:393
void make_succ_nat(data_expression &result, const data_expression &arg0)
Make an application of function symbol @succ_nat.
Definition nat64.h:172
void make_divmod_aux_whr6(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @divmod_aux_whr6.
Definition nat64.h:3465
bool is_mod_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @mod_whr1.
Definition nat64.h:2957
application first(const data_expression &arg0)
Application of function symbol @first.
Definition nat1.h:1872
const function_symbol & div2()
Constructor for function symbol @div2.
Definition nat64.h:1945
void make_divmod_aux_whr1(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 @divmod_aux_whr1.
Definition nat64.h:3119
const core::identifier_string & plus_name()
Generate identifier +.
Definition nat1.h:885
const function_symbol & div_whr2()
Constructor for function symbol @div_whr2.
Definition nat64.h:2877
const function_symbol & not_equals_zero()
Constructor for function symbol @not_equals_zero.
Definition nat64.h:499
const function_symbol & sqrt_pair()
Constructor for function symbol @sqrt_pair.
Definition nat64.h:3961
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
Definition nat1.h:2304
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
bool is_divmod_aux_whr1_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr1.
Definition nat64.h:3129
const function_symbol & mod_whr1()
Constructor for function symbol @mod_whr1.
Definition nat64.h:2947
application monus_whr(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Application of function symbol @monus_whr.
Definition nat64.h:2099
const core::identifier_string & div_name()
Generate identifier div.
Definition nat1.h:1111
const function_symbol & mod()
Constructor for function symbol mod.
Definition nat1.h:1185
void make_monus(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @monus.
Definition nat1.h:1424
const function_symbol & exp_aux3n()
Constructor for function symbol @exp_aux3n.
Definition nat64.h:2275
application succ_nat(const data_expression &arg0)
Application of function symbol @succ_nat.
Definition nat64.h:162
const function_symbol & sqrt()
Constructor for function symbol sqrt.
Definition nat1.h:1720
void make_nnpair(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @nnPair.
Definition nat64.h:236
application equals_zero(const data_expression &arg0)
Application of function symbol @equals_zero.
Definition nat64.h:461
bool is_add_with_carry_application(const atermpp::aterm &e)
Recogniser for application of @add_with_carry.
Definition nat64.h:1239
bool is_sqrt_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_whr1.
Definition nat64.h:3833
const function_symbol & exp_auxfalsen()
Constructor for function symbol @exp_auxfalsen.
Definition nat64.h:2607
bool is_divmod_aux_whr2_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr2.
Definition nat64.h:3157
const function_symbol & pred()
Constructor for function symbol pred.
Definition nat1.h:645
const core::identifier_string & div_bold_whr_name()
Generate identifier @div_bold_whr.
Definition nat64.h:2727
const core::identifier_string & divmod_aux_name()
Generate identifier @divmod_aux.
Definition nat64.h:3005
void make_is_odd(data_expression &result, const data_expression &arg0)
Make an application of function symbol @is_odd.
Definition nat64.h:1917
const function_symbol & exp_auxtruen()
Constructor for function symbol @exp_auxtruen.
Definition nat64.h:2475
application times_ordered(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @times_ordered.
Definition nat64.h:1436
const function_symbol & sqrt_pair_whr2()
Constructor for function symbol @sqrt_pair_whr2.
Definition nat64.h:4091
const core::identifier_string & first_name()
Generate identifier @first.
Definition nat1.h:1838
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:1692
bool is_succ_application(const atermpp::aterm &e)
Recogniser for application of succ.
Definition nat1.h:627
application not_equals_zero(const data_expression &arg0)
Application of function symbol @not_equals_zero.
Definition nat64.h:523
const function_symbol & exp_auxfalsep()
Constructor for function symbol @exp_auxfalsep.
Definition nat64.h:2541
const core::identifier_string & sqrt_whr2_name()
Generate identifier @sqrt_whr2.
Definition nat64.h:3881
bool is_sqrt_pair_whr5_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr5.
Definition nat64.h:4309
bool is_div_bold_whr_application(const atermpp::aterm &e)
Recogniser for application of @div_bold_whr.
Definition nat64.h:2791
void make_exp_auxfalsen(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @exp_auxfalsen.
Definition nat64.h:2645
const function_symbol & natpred()
Constructor for function symbol @natpred.
Definition nat1.h:707
bool is_swap_zero_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero.
Definition nat1.h:1498
const core::identifier_string & swap_zero_name()
Generate identifier @swap_zero.
Definition nat1.h:1442
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_div_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_whr1.
Definition nat64.h:2819
application sqrt_pair_whr4(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4, const data_expression &arg5)
Application of function symbol @sqrt_pair_whr4.
Definition nat64.h:4256
bool is_is_odd_function_symbol(const atermpp::aterm &e)
Recogniser for function @is_odd.
Definition nat64.h:1893
bool is_exp_function_symbol(const atermpp::aterm &e)
Recogniser for function exp.
Definition nat1.h:1271
bool is_div_bold_application(const atermpp::aterm &e)
Recogniser for application of @div_bold.
Definition nat64.h:2719
bool is_monus_function_symbol(const atermpp::aterm &e)
Recogniser for function @monus.
Definition nat1.h:1398
bool is_mod_application(const atermpp::aterm &e)
Recogniser for application of mod.
Definition nat1.h:1231
const core::identifier_string & divmod_aux_whr1_name()
Generate identifier @divmod_aux_whr1.
Definition nat64.h:3069
void make_divmod_aux_whr4(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 @divmod_aux_whr4.
Definition nat64.h:3327
void make_exp_aux4n(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 @exp_aux4n.
Definition nat64.h:2381
void make_divmod_aux_whr5(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 @divmod_aux_whr5.
Definition nat64.h:3395
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:1308
void make_div_bold(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @div_bold.
Definition nat64.h:2709
const function_symbol & swap_zero_min()
Constructor for function symbol @swap_zero_min.
Definition nat1.h:1584
application msd(const data_expression &arg0)
Application of function symbol @msd.
Definition nat64.h:3517
void make_sqrt_pair_whr4(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4, const data_expression &arg5)
Make an application of function symbol @sqrt_pair_whr4.
Definition nat64.h:4271
function_symbol minimum(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:504
bool is_div2_function_symbol(const atermpp::aterm &e)
Recogniser for function @div2.
Definition nat64.h:1955
application div_whr1(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @div_whr1.
Definition nat64.h:2836
const core::identifier_string & divmod_aux_whr2_name()
Generate identifier @divmod_aux_whr2.
Definition nat64.h:3137
bool is_msd_function_symbol(const atermpp::aterm &e)
Recogniser for function @msd.
Definition nat64.h:3503
void make_exp_aux4p(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 @exp_aux4p.
Definition nat64.h:2247
const function_symbol & divmod_aux_whr6()
Constructor for function symbol @divmod_aux_whr6.
Definition nat64.h:3423
void make_most_significant_digit_nat(data_expression &result, const data_expression &arg0)
Make an application of function symbol @most_significant_digitNat.
Definition nat64.h:332
const data_expression & arg6(const data_expression &e)
Function for projecting out argument. arg6 from an application.
Definition nat64.h:4825
bool is_last_application(const atermpp::aterm &e)
Recogniser for application of @last.
Definition nat1.h:1954
void make_exp(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol exp.
Definition nat1.h:1298
const core::identifier_string & not_equals_zero_name()
Generate identifier @not_equals_zero.
Definition nat64.h:489
bool is_not_equals_zero_function_symbol(const atermpp::aterm &e)
Recogniser for function @not_equals_zero.
Definition nat64.h:509
bool is_sqrt_whr2_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_whr2.
Definition nat64.h:3901
void make_exp_aux3n(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @exp_aux3n.
Definition nat64.h:2313
const core::identifier_string & divmod_aux_whr6_name()
Generate identifier @divmod_aux_whr6.
Definition nat64.h:3413
bool is_exp_auxfalsen_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_auxfalsen.
Definition nat64.h:2617
application sqrt_whr1(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @sqrt_whr1.
Definition nat64.h:3850
const function_symbol & div()
Constructor for function symbol div.
Definition nat1.h:1121
application last(const data_expression &arg0)
Application of function symbol @last.
Definition nat1.h:1934
bool is_sqrt_pair_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair.
Definition nat64.h:4005
const function_symbol & divmod_aux_whr5()
Constructor for function symbol @divmod_aux_whr5.
Definition nat64.h:3355
bool is_div_bold_whr_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_bold_whr.
Definition nat64.h:2747
const function_symbol & is_odd()
Constructor for function symbol @is_odd.
Definition nat64.h:1883
bool is_add_with_carry_function_symbol(const atermpp::aterm &e)
Recogniser for function @add_with_carry.
Definition nat64.h:1202
void make_succ(data_expression &result, const data_expression &arg0)
Make an application of function symbol succ.
Definition nat1.h:617
const core::identifier_string & exp_aux3p_name()
Generate identifier @exp_aux3p.
Definition nat64.h:2131
application divmod_aux_whr1(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @divmod_aux_whr1.
Definition nat64.h:3106
const function_symbol & nnpair()
Constructor for function symbol @nnPair.
Definition nat64.h:200
application sqrt_whr2(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Application of function symbol @sqrt_whr2.
Definition nat64.h:3919
const core::identifier_string & sqrt_pair_whr6_name()
Generate identifier @sqrt_pair_whr6.
Definition nat64.h:4359
bool is_maximum_function_symbol(const atermpp::aterm &e)
Recogniser for function max.
Definition nat1.h:451
bool is_msd_application(const atermpp::aterm &e)
Recogniser for application of @msd.
Definition nat64.h:3537
application sqrt_pair_whr1(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @sqrt_pair_whr1.
Definition nat64.h:4050
bool is_swap_zero_min_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_min.
Definition nat1.h:1634
bool is_succ_nat_function_symbol(const atermpp::aterm &e)
Recogniser for function @succ_nat.
Definition nat64.h:148
function_symbol plus(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:893
const basic_sort & natnatpair()
Constructor for sort expression @NatNatPair.
Definition nat64.h:73
bool is_first_application(const atermpp::aterm &e)
Recogniser for application of @first.
Definition nat1.h:1892
void make_auxiliary_plus_nat(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @plus_nat.
Definition nat64.h:1293
bool is_equals_one_application(const atermpp::aterm &e)
Recogniser for application of @equals_one.
Definition nat64.h:605
void make_divmod_aux(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @divmod_aux.
Definition nat64.h:3051
bool is_exp_aux4n_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_aux4n.
Definition nat64.h:2351
function_symbol add_with_carry(const sort_expression &s0, const sort_expression &s1)
Definition nat64.h:1178
bool is_sqrt_application(const atermpp::aterm &e)
Recogniser for application of sqrt.
Definition nat1.h:1764
const function_symbol & first()
Constructor for function symbol @first.
Definition nat1.h:1848
void make_first(data_expression &result, const data_expression &arg0)
Make an application of function symbol @first.
Definition nat1.h:1882
const core::identifier_string & exp_auxtruen_name()
Generate identifier @exp_auxtruen.
Definition nat64.h:2465
bool is_auxiliary_plus_nat_function_symbol(const atermpp::aterm &e)
Recogniser for function @plus_nat.
Definition nat64.h:1267
const function_symbol & msd()
Constructor for function symbol @msd.
Definition nat64.h:3493
application is_odd(const data_expression &arg0)
Application of function symbol @is_odd.
Definition nat64.h:1907
const function_symbol & sqrt_whr1()
Constructor for function symbol @sqrt_whr1.
Definition nat64.h:3823
void make_exp_auxtruen(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @exp_auxtruen.
Definition nat64.h:2513
bool is_pred_function_symbol(const atermpp::aterm &e)
Recogniser for function pred.
Definition nat1.h:655
application div_whr2(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Application of function symbol @div_whr2.
Definition nat64.h:2905
const function_symbol & exp_aux4p()
Constructor for function symbol @exp_aux4p.
Definition nat64.h:2207
const core::identifier_string & msd_name()
Generate identifier @msd.
Definition nat64.h:3483
const function_symbol & exp_aux3p()
Constructor for function symbol @exp_aux3p.
Definition nat64.h:2141
void make_sqrt_pair_whr3(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @sqrt_pair_whr3.
Definition nat64.h:4199
const core::identifier_string & div2_name()
Generate identifier @div2.
Definition nat64.h:1935
bool is_times_ordered_application(const atermpp::aterm &e)
Recogniser for application of @times_ordered.
Definition nat64.h:1457
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:1543
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:1556
const core::identifier_string & nnpair_name()
Generate identifier @nnPair.
Definition nat64.h:190
bool is_mod_whr1_application(const atermpp::aterm &e)
Recogniser for application of @mod_whr1.
Definition nat64.h:2997
const core::identifier_string & swap_zero_monus_name()
Generate identifier @swap_zero_monus.
Definition nat1.h:1642
bool is_exp_aux4n_application(const atermpp::aterm &e)
Recogniser for application of @exp_aux4n.
Definition nat64.h:2391
const core::identifier_string & div_whr2_name()
Generate identifier @div_whr2.
Definition nat64.h:2867
function_symbol_vector nat_generate_functions_code()
Give all system defined mappings for nat.
Definition nat1.h:2157
bool is_div_bold_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_bold.
Definition nat64.h:2683
application div(const data_expression &arg0, const data_expression &arg1)
Application of function symbol div.
Definition nat1.h:1146
bool is_div_whr1_application(const atermpp::aterm &e)
Recogniser for application of @div_whr1.
Definition nat64.h:2859
const core::identifier_string & sqrt_whr1_name()
Generate identifier @sqrt_whr1.
Definition nat64.h:3813
bool is_exp_auxfalsep_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_auxfalsep.
Definition nat64.h:2551
bool is_exp_aux3n_application(const atermpp::aterm &e)
Recogniser for application of @exp_aux3n.
Definition nat64.h:2323
const core::identifier_string & times_overflow_name()
Generate identifier @times_overflow.
Definition nat64.h:1465
bool is_sqrt_pair_whr6_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr6.
Definition nat64.h:4379
const function_symbol & swap_zero_monus()
Constructor for function symbol @swap_zero_monus.
Definition nat1.h:1652
void make_times(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol *.
Definition nat1.h:1093
const function_symbol & succ_nat()
Constructor for function symbol @succ_nat.
Definition nat64.h:138
void make_exp_aux3p(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @exp_aux3p.
Definition nat64.h:2179
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:1611
const function_symbol & div_bold_whr()
Constructor for function symbol @div_bold_whr.
Definition nat64.h:2737
const core::identifier_string & divmod_aux_whr4_name()
Generate identifier @divmod_aux_whr4.
Definition nat64.h:3277
bool is_c0_function_symbol(const atermpp::aterm &e)
Recogniser for function @c0.
Definition nat1.h:115
application most_significant_digit_nat(const data_expression &arg0)
Application of function symbol @most_significant_digitNat.
Definition nat64.h:322
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:1378
bool is_sqrt_whr2_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_whr2.
Definition nat64.h:3943
const core::identifier_string & sqrt_pair_whr4_name()
Generate identifier @sqrt_pair_whr4.
Definition nat64.h:4217
application monus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @monus.
Definition nat1.h:1413
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:2328
implementation_map nat_cpp_implementable_mappings()
Give all system defined mappings that are to be implemented in C++ code for nat.
Definition nat1.h:2257
application exp_aux3n(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_aux3n.
Definition nat64.h:2301
bool is_sqrt_pair_whr4_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr4.
Definition nat64.h:4281
const function_symbol & most_significant_digit_nat()
Constructor for function symbol @most_significant_digitNat.
Definition nat64.h:298
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
Definition nat1.h:2292
const function_symbol & exp_aux4n()
Constructor for function symbol @exp_aux4n.
Definition nat64.h:2341
application pred(const data_expression &arg0)
Application of function symbol pred.
Definition nat1.h:669
bool is_divmod_aux_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux.
Definition nat64.h:3025
application succ(const data_expression &arg0)
Application of function symbol succ.
Definition nat1.h:607
bool is_divmod_aux_whr4_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr4.
Definition nat64.h:3337
const function_symbol & sqrt_whr2()
Constructor for function symbol @sqrt_whr2.
Definition nat64.h:3891
bool is_sqrt_pair_whr3_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr3.
Definition nat64.h:4209
const core::identifier_string & sqrt_pair_whr2_name()
Generate identifier @sqrt_pair_whr2.
Definition nat64.h:4081
bool is_divmod_aux_whr5_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr5.
Definition nat64.h:3405
const core::identifier_string & sqrt_pair_whr3_name()
Generate identifier @sqrt_pair_whr3.
Definition nat64.h:4151
const data_expression & arg1(const data_expression &e)
Function for projecting out argument. arg1 from an application.
Definition nat1.h:2280
bool is_swap_zero_monus_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_monus.
Definition nat1.h:1702
bool is_divmod_aux_whr3_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr3.
Definition nat64.h:3227
void make_div_whr1(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 @div_whr1.
Definition nat64.h:2849
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:1624
const function_symbol & divmod_aux_whr1()
Constructor for function symbol @divmod_aux_whr1.
Definition nat64.h:3079
const function_symbol & sqrt_pair_whr1()
Constructor for function symbol @sqrt_pair_whr1.
Definition nat64.h:4023
application auxiliary_plus_nat(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @plus_nat.
Definition nat64.h:1282
void make_exp_auxfalsep(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @exp_auxfalsep.
Definition nat64.h:2579
const core::identifier_string & c0_name()
Generate identifier @c0.
Definition nat1.h:95
application natpred(const data_expression &arg0)
Application of function symbol @natpred.
Definition nat1.h:731
bool is_times_ordered_function_symbol(const atermpp::aterm &e)
Recogniser for function @times_ordered.
Definition nat64.h:1420
bool is_exp_auxtruep_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_auxtruep.
Definition nat64.h:2419
void make_concat_digit(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @concat_digit.
Definition nat64.h:409
const function_symbol & monus_whr()
Constructor for function symbol @monus_whr.
Definition nat64.h:2071
application sqrt_pair(const data_expression &arg0)
Application of function symbol @sqrt_pair.
Definition nat64.h:3985
const function_symbol & div_bold()
Constructor for function symbol @div_bold.
Definition nat64.h:2673
bool is_swap_zero_add_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_add.
Definition nat1.h:1526
bool is_exp_aux4p_application(const atermpp::aterm &e)
Recogniser for application of @exp_aux4p.
Definition nat64.h:2257
bool is_not_equals_zero_application(const atermpp::aterm &e)
Recogniser for application of @not_equals_zero.
Definition nat64.h:543
application divmod_aux_whr2(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Application of function symbol @divmod_aux_whr2.
Definition nat64.h:3175
bool is_swap_zero_monus_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_monus.
Definition nat1.h:1662
bool is_exp_auxtruen_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_auxtruen.
Definition nat64.h:2485
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:1900
const core::identifier_string & minimum_name()
Generate identifier min.
Definition nat1.h:496
application exp_auxtruep(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_auxtruep.
Definition nat64.h:2435
bool is_auxiliary_plus_nat_application(const atermpp::aterm &e)
Recogniser for application of @plus_nat.
Definition nat64.h:1303
application div2(const data_expression &arg0)
Application of function symbol @div2.
Definition nat64.h:1969
bool is_most_significant_digit_nat_function_symbol(const atermpp::aterm &e)
Recogniser for function @most_significant_digitNat.
Definition nat64.h:308
application divmod_aux_whr4(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @divmod_aux_whr4.
Definition nat64.h:3314
application div_bold(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @div_bold.
Definition nat64.h:2698
bool is_concat_digit_application(const atermpp::aterm &e)
Recogniser for application of @concat_digit.
Definition nat64.h:419
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
Definition nat1.h:2268
const core::identifier_string & add_with_carry_name()
Generate identifier @add_with_carry.
Definition nat64.h:1170
void make_sqrt_pair_whr6(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @sqrt_pair_whr6.
Definition nat64.h:4407
bool is_sqrt_function_symbol(const atermpp::aterm &e)
Recogniser for function sqrt.
Definition nat1.h:1730
bool is_divmod_aux_whr6_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr6.
Definition nat64.h:3475
function_symbol times_overflow(const sort_expression &s0, const sort_expression &s1, const sort_expression &s2)
Definition nat64.h:1473
const core::identifier_string & divmod_aux_whr3_name()
Generate identifier @divmod_aux_whr3.
Definition nat64.h:3207
bool is_sqrt_pair_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr1.
Definition nat64.h:4033
application mod(const data_expression &arg0, const data_expression &arg1)
Application of function symbol mod.
Definition nat1.h:1210
const function_symbol & sqrt_pair_whr5()
Constructor for function symbol @sqrt_pair_whr5.
Definition nat64.h:4299
bool is_div_whr2_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_whr2.
Definition nat64.h:2887
const function_symbol & equals_zero()
Constructor for function symbol @equals_zero.
Definition nat64.h:437
bool is_divmod_aux_whr5_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr5.
Definition nat64.h:3365
void make_add_with_carry(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @add_with_carry.
Definition nat64.h:1229
function_symbol_vector nat_mCRL2_usable_constructors()
Give all defined constructors which can be used in mCRL2 specs for nat.
Definition nat1.h:264
application exp_auxfalsen(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_auxfalsen.
Definition nat64.h:2633
const function_symbol & last()
Constructor for function symbol @last.
Definition nat1.h:1910
bool is_exp_aux3p_application(const atermpp::aterm &e)
Recogniser for application of @exp_aux3p.
Definition nat64.h:2189
const core::identifier_string & exp_auxtruep_name()
Generate identifier @exp_auxtruep.
Definition nat64.h:2399
bool is_natpred_application(const atermpp::aterm &e)
Recogniser for application of @natpred.
Definition nat1.h:751
bool is_pred_application(const atermpp::aterm &e)
Recogniser for application of pred.
Definition nat1.h:689
void make_sqrt_pair_whr2(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @sqrt_pair_whr2.
Definition nat64.h:4133
const core::identifier_string & is_odd_name()
Generate identifier @is_odd.
Definition nat64.h:1873
const core::identifier_string & exp_aux4n_name()
Generate identifier @exp_aux4n.
Definition nat64.h:2331
const function_symbol & auxiliary_plus_nat()
Constructor for function symbol @plus_nat.
Definition nat64.h:1257
bool is_plus_application(const atermpp::aterm &e)
Recogniser for application of +.
Definition nat1.h:962
bool is_divmod_aux_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr1.
Definition nat64.h:3089
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:1488
bool is_divmod_aux_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux.
Definition nat64.h:3061
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
bool is_exp_aux3n_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_aux3n.
Definition nat64.h:2285
const core::identifier_string & swap_zero_add_name()
Generate identifier @swap_zero_add.
Definition nat1.h:1506
application sqrt_pair_whr6(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @sqrt_pair_whr6.
Definition nat64.h:4395
const function_symbol & divmod_aux_whr2()
Constructor for function symbol @divmod_aux_whr2.
Definition nat64.h:3147
application div_bold_whr(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4, const data_expression &arg5)
Application of function symbol @div_bold_whr.
Definition nat64.h:2766
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
Definition nat1.h:941
bool is_swap_zero_min_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_min.
Definition nat1.h:1594
void make_not_equals_zero(data_expression &result, const data_expression &arg0)
Make an application of function symbol @not_equals_zero.
Definition nat64.h:533
function_symbol_vector nat_generate_constructors_code()
Give all system defined constructors for nat.
Definition nat1.h:252
bool is_equals_one_function_symbol(const atermpp::aterm &e)
Recogniser for function @equals_one.
Definition nat64.h:570
bool is_sqrt_pair_whr1_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr1.
Definition nat64.h:4073
const core::identifier_string & sqrt_name()
Generate identifier sqrt.
Definition nat1.h:1710
const function_symbol & divmod_aux()
Constructor for function symbol @divmod_aux.
Definition nat64.h:3015
void make_sqrt_pair(data_expression &result, const data_expression &arg0)
Make an application of function symbol @sqrt_pair.
Definition nat64.h:3995
const function_symbol & sqrt_pair_whr4()
Constructor for function symbol @sqrt_pair_whr4.
Definition nat64.h:4227
application equals_one(const data_expression &arg0)
Application of function symbol @equals_one.
Definition nat64.h:585
bool is_last_function_symbol(const atermpp::aterm &e)
Recogniser for function @last.
Definition nat1.h:1920
application times(const data_expression &arg0, const data_expression &arg1)
Application of function symbol *.
Definition nat1.h:1082
const core::identifier_string & div_whr1_name()
Generate identifier @div_whr1.
Definition nat64.h:2799
bool is_times_application(const atermpp::aterm &e)
Recogniser for application of *.
Definition nat1.h:1103
bool is_div_function_symbol(const atermpp::aterm &e)
Recogniser for function div.
Definition nat1.h:1131
bool is_exp_auxtruen_application(const atermpp::aterm &e)
Recogniser for application of @exp_auxtruen.
Definition nat64.h:2523
bool is_is_odd_application(const atermpp::aterm &e)
Recogniser for application of @is_odd.
Definition nat64.h:1927
const core::identifier_string & monus_whr_name()
Generate identifier @monus_whr.
Definition nat64.h:2061
const core::identifier_string & times_ordered_name()
Generate identifier @times_ordered.
Definition nat64.h:1388
bool is_exp_aux4p_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_aux4p.
Definition nat64.h:2217
bool is_minimum_function_symbol(const atermpp::aterm &e)
Recogniser for function min.
Definition nat1.h:528
bool is_exp_aux3p_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_aux3p.
Definition nat64.h:2151
application mod_whr1(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @mod_whr1.
Definition nat64.h:2974
const core::identifier_string & pred_whr_name()
Generate identifier @pred_whr.
Definition nat64.h:1023
bool is_div_whr2_application(const atermpp::aterm &e)
Recogniser for application of @div_whr2.
Definition nat64.h:2929
function_symbol times(const sort_expression &s0, const sort_expression &s1)
Definition nat1.h:1042
bool is_times_function_symbol(const atermpp::aterm &e)
Recogniser for function *.
Definition nat1.h:1066
void make_equals_one(data_expression &result, const data_expression &arg0)
Make an application of function symbol @equals_one.
Definition nat64.h:595
void make_natpred(data_expression &result, const data_expression &arg0)
Make an application of function symbol @natpred.
Definition nat1.h:741
bool is_pred_whr_function_symbol(const atermpp::aterm &e)
Recogniser for function @pred_whr.
Definition nat64.h:1043
void make_div2(data_expression &result, const data_expression &arg0)
Make an application of function symbol @div2.
Definition nat64.h:1979
application pred_whr(const data_expression &arg0)
Application of function symbol @pred_whr.
Definition nat64.h:1057
void make_divmod_aux_whr2(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @divmod_aux_whr2.
Definition nat64.h:3189
bool is_succ_nat_application(const atermpp::aterm &e)
Recogniser for application of @succ_nat.
Definition nat64.h:182
bool is_nat2pos_function_symbol(const atermpp::aterm &e)
Recogniser for function Nat2Pos.
Definition nat1.h:369
void make_mod_whr1(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 @mod_whr1.
Definition nat64.h:2987
function_symbol equals_one(const sort_expression &s0)
Definition nat64.h:559
const core::identifier_string & succ_nat_name()
Generate identifier @succ_nat.
Definition nat64.h:128
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:1679
bool is_monus_whr_function_symbol(const atermpp::aterm &e)
Recogniser for function @monus_whr.
Definition nat64.h:2081
bool is_natnatpair(const sort_expression &e)
Recogniser for sort expression @NatNatPair.
Definition nat64.h:83
const function_symbol & divmod_aux_whr4()
Constructor for function symbol @divmod_aux_whr4.
Definition nat64.h:3287
const function_symbol & sqrt_pair_whr6()
Constructor for function symbol @sqrt_pair_whr6.
Definition nat64.h:4369
void make_divmod_aux_whr3(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @divmod_aux_whr3.
Definition nat64.h:3259
bool is_div2_application(const atermpp::aterm &e)
Recogniser for application of @div2.
Definition nat64.h:1989
const core::identifier_string & natpred_name()
Generate identifier @natpred.
Definition nat1.h:697
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:1944
application nat2pos(const data_expression &arg0)
Application of function symbol Nat2Pos.
Definition nat1.h:383
const core::identifier_string & concat_digit_name()
Generate identifier @concat_digit.
Definition nat64.h:350
bool is_most_significant_digit_nat_application(const atermpp::aterm &e)
Recogniser for application of @most_significant_digitNat.
Definition nat64.h:342
application times_overflow(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @times_overflow.
Definition nat64.h:1514
void make_msd(data_expression &result, const data_expression &arg0)
Make an application of function symbol @msd.
Definition nat64.h:3527
bool is_monus_application(const atermpp::aterm &e)
Recogniser for application of @monus.
Definition nat1.h:1434
bool is_divmod_aux_whr3_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr3.
Definition nat64.h:3269
const data_expression & arg4(const data_expression &e)
Function for projecting out argument. arg4 from an application.
Definition nat1.h:2340
void make_sqrt_pair_whr5(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @sqrt_pair_whr5.
Definition nat64.h:4341
bool is_exp_auxtruep_application(const atermpp::aterm &e)
Recogniser for application of @exp_auxtruep.
Definition nat64.h:2457
Namespace for system defined sort pos.
const basic_sort & pos()
Constructor for sort expression Pos.
Definition pos1.h:42
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.
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &codomain)
Convenience constructor for function sort with domain size 1.
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
bool is_basic_sort(const atermpp::aterm &x)
Returns true if the term t is a basic sort.
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.
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.
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.
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.