15#ifndef MCRL2_DATA_NAT64_H
16#define MCRL2_DATA_NAT64_H
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"
37 static core::identifier_string nat_name = core::identifier_string(
"Nat");
66 static core::identifier_string natnatpair_name = core::identifier_string(
"@NatNatPair");
67 return natnatpair_name;
98 static core::identifier_string c0_name = core::identifier_string(
"@c0");
120 return atermpp::down_cast<function_symbol>(e) == c0();
130 static core::identifier_string succ_nat_name = core::identifier_string(
"@succ_nat");
131 return succ_nat_name;
152 return atermpp::down_cast<function_symbol>(e) == succ_nat();
184 return is_application(e) && is_succ_nat_function_symbol(atermpp::down_cast<application>(e).head());
192 static core::identifier_string nnpair_name = core::identifier_string(
"@nnPair");
214 return atermpp::down_cast<function_symbol>(e) == nnpair();
248 return is_application(e) && is_nnpair_function_symbol(atermpp::down_cast<application>(e).head());
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());
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());
281 implementation_map result;
290 static core::identifier_string most_significant_digit_nat_name = core::identifier_string(
"@most_significant_digitNat");
291 return most_significant_digit_nat_name;
301 return most_significant_digit_nat;
312 return atermpp::down_cast<function_symbol>(e) == most_significant_digit_nat();
344 return is_application(e) && is_most_significant_digit_nat_function_symbol(atermpp::down_cast<application>(e).head());
352 static core::identifier_string concat_digit_name = core::identifier_string(
"@concat_digit");
353 return concat_digit_name;
371 throw mcrl2::runtime_error(
"Cannot compute target sort for concat_digit with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
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()));
421 return is_application(e) && is_concat_digit_function_symbol(atermpp::down_cast<application>(e).head());
429 static core::identifier_string equals_zero_name = core::identifier_string(
"@equals_zero");
430 return equals_zero_name;
451 return atermpp::down_cast<function_symbol>(e) == equals_zero();
483 return is_application(e) && is_equals_zero_function_symbol(atermpp::down_cast<application>(e).head());
491 static core::identifier_string not_equals_zero_name = core::identifier_string(
"@not_equals_zero");
492 return not_equals_zero_name;
502 return not_equals_zero;
513 return atermpp::down_cast<function_symbol>(e) == not_equals_zero();
545 return is_application(e) && is_not_equals_zero_function_symbol(atermpp::down_cast<application>(e).head());
553 static core::identifier_string equals_one_name = core::identifier_string(
"@equals_one");
554 return equals_one_name;
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()));
607 return is_application(e) && is_equals_one_function_symbol(atermpp::down_cast<application>(e).head());
615 static core::identifier_string pos2nat_name = core::identifier_string(
"Pos2Nat");
637 return atermpp::down_cast<function_symbol>(e) == pos2nat();
669 return is_application(e) && is_pos2nat_function_symbol(atermpp::down_cast<application>(e).head());
677 static core::identifier_string nat2pos_name = core::identifier_string(
"Nat2Pos");
699 return atermpp::down_cast<function_symbol>(e) == nat2pos();
731 return is_application(e) && is_nat2pos_function_symbol(atermpp::down_cast<application>(e).head());
739 static core::identifier_string succ_name = core::identifier_string(
"succ");
761 return f.name() == succ_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 1 && (f == succ(nat()) || f == succ(sort_pos::pos()));
793 return is_application(e) && is_succ_function_symbol(atermpp::down_cast<application>(e).head());
801 static core::identifier_string maximum_name = core::identifier_string(
"max");
828 throw mcrl2::runtime_error(
"Cannot compute target sort for maximum with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
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()));
878 return is_application(e) && is_maximum_function_symbol(atermpp::down_cast<application>(e).head());
886 static core::identifier_string minimum_name = core::identifier_string(
"min");
905 throw mcrl2::runtime_error(
"Cannot compute target sort for minimum with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
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()));
955 return is_application(e) && is_minimum_function_symbol(atermpp::down_cast<application>(e).head());
963 static core::identifier_string pred_name = core::identifier_string(
"pred");
985 return atermpp::down_cast<function_symbol>(e) == pred();
1017 return is_application(e) && is_pred_function_symbol(atermpp::down_cast<application>(e).head());
1025 static core::identifier_string pred_whr_name = core::identifier_string(
"@pred_whr");
1026 return pred_whr_name;
1047 return atermpp::down_cast<function_symbol>(e) == pred_whr();
1079 return is_application(e) && is_pred_whr_function_symbol(atermpp::down_cast<application>(e).head());
1087 static core::identifier_string plus_name = core::identifier_string(
"+");
1114 throw mcrl2::runtime_error(
"Cannot compute target sort for plus with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
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()));
1164 return is_application(e) && is_plus_function_symbol(atermpp::down_cast<application>(e).head());
1172 static core::identifier_string add_with_carry_name = core::identifier_string(
"@add_with_carry");
1173 return add_with_carry_name;
1191 throw mcrl2::runtime_error(
"Cannot compute target sort for add_with_carry with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
1195 return add_with_carry;
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()));
1241 return is_application(e) && is_add_with_carry_function_symbol(atermpp::down_cast<application>(e).head());
1249 static core::identifier_string auxiliary_plus_nat_name = core::identifier_string(
"@plus_nat");
1250 return auxiliary_plus_nat_name;
1260 return auxiliary_plus_nat;
1271 return atermpp::down_cast<function_symbol>(e) == auxiliary_plus_nat();
1305 return is_application(e) && is_auxiliary_plus_nat_function_symbol(atermpp::down_cast<application>(e).head());
1313 static core::identifier_string times_name = core::identifier_string(
"*");
1332 throw mcrl2::runtime_error(
"Cannot compute target sort for times with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
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()));
1382 return is_application(e) && is_times_function_symbol(atermpp::down_cast<application>(e).head());
1390 static core::identifier_string times_ordered_name = core::identifier_string(
"@times_ordered");
1391 return times_ordered_name;
1409 throw mcrl2::runtime_error(
"Cannot compute target sort for times_ordered with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
1413 return times_ordered;
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()));
1459 return is_application(e) && is_times_ordered_function_symbol(atermpp::down_cast<application>(e).head());
1467 static core::identifier_string times_overflow_name = core::identifier_string(
"@times_overflow");
1468 return times_overflow_name;
1486 throw mcrl2::runtime_error(
"Cannot compute target sort for times_overflow with domain sorts " + pp(s0) +
", " + pp(s1) +
", " + pp(s2) +
". ");
1490 return times_overflow;
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()));
1538 return is_application(e) && is_times_overflow_function_symbol(atermpp::down_cast<application>(e).head());
1546 static core::identifier_string div_name = core::identifier_string(
"div");
1568 return atermpp::down_cast<function_symbol>(e) == div();
1602 return is_application(e) && is_div_function_symbol(atermpp::down_cast<application>(e).head());
1610 static core::identifier_string mod_name = core::identifier_string(
"mod");
1632 return atermpp::down_cast<function_symbol>(e) == mod();
1666 return is_application(e) && is_mod_function_symbol(atermpp::down_cast<application>(e).head());
1674 static core::identifier_string exp_name = core::identifier_string(
"exp");
1693 throw mcrl2::runtime_error(
"Cannot compute target sort for exp with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
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()));
1743 return is_application(e) && is_exp_function_symbol(atermpp::down_cast<application>(e).head());
1751 static core::identifier_string sqrt_name = core::identifier_string(
"sqrt");
1773 return atermpp::down_cast<function_symbol>(e) == sqrt();
1805 return is_application(e) && is_sqrt_function_symbol(atermpp::down_cast<application>(e).head());
1813 static core::identifier_string natpred_name = core::identifier_string(
"@natpred");
1814 return natpred_name;
1835 return atermpp::down_cast<function_symbol>(e) == natpred();
1867 return is_application(e) && is_natpred_function_symbol(atermpp::down_cast<application>(e).head());
1875 static core::identifier_string is_odd_name = core::identifier_string(
"@is_odd");
1897 return atermpp::down_cast<function_symbol>(e) == is_odd();
1929 return is_application(e) && is_is_odd_function_symbol(atermpp::down_cast<application>(e).head());
1937 static core::identifier_string div2_name = core::identifier_string(
"@div2");
1959 return atermpp::down_cast<function_symbol>(e) == div2();
1991 return is_application(e) && is_div2_function_symbol(atermpp::down_cast<application>(e).head());
1999 static core::identifier_string monus_name = core::identifier_string(
"@monus");
2021 return atermpp::down_cast<function_symbol>(e) == monus();
2055 return is_application(e) && is_monus_function_symbol(atermpp::down_cast<application>(e).head());
2063 static core::identifier_string monus_whr_name = core::identifier_string(
"@monus_whr");
2064 return monus_whr_name;
2085 return atermpp::down_cast<function_symbol>(e) == monus_whr();
2125 return is_application(e) && is_monus_whr_function_symbol(atermpp::down_cast<application>(e).head());
2133 static core::identifier_string exp_aux3p_name = core::identifier_string(
"@exp_aux3p");
2134 return exp_aux3p_name;
2155 return atermpp::down_cast<function_symbol>(e) == exp_aux3p();
2191 return is_application(e) && is_exp_aux3p_function_symbol(atermpp::down_cast<application>(e).head());
2199 static core::identifier_string exp_aux4p_name = core::identifier_string(
"@exp_aux4p");
2200 return exp_aux4p_name;
2221 return atermpp::down_cast<function_symbol>(e) == exp_aux4p();
2259 return is_application(e) && is_exp_aux4p_function_symbol(atermpp::down_cast<application>(e).head());
2267 static core::identifier_string exp_aux3n_name = core::identifier_string(
"@exp_aux3n");
2268 return exp_aux3n_name;
2289 return atermpp::down_cast<function_symbol>(e) == exp_aux3n();
2325 return is_application(e) && is_exp_aux3n_function_symbol(atermpp::down_cast<application>(e).head());
2333 static core::identifier_string exp_aux4n_name = core::identifier_string(
"@exp_aux4n");
2334 return exp_aux4n_name;
2355 return atermpp::down_cast<function_symbol>(e) == exp_aux4n();
2393 return is_application(e) && is_exp_aux4n_function_symbol(atermpp::down_cast<application>(e).head());
2401 static core::identifier_string exp_auxtruep_name = core::identifier_string(
"@exp_auxtruep");
2402 return exp_auxtruep_name;
2412 return exp_auxtruep;
2423 return atermpp::down_cast<function_symbol>(e) == exp_auxtruep();
2459 return is_application(e) && is_exp_auxtruep_function_symbol(atermpp::down_cast<application>(e).head());
2467 static core::identifier_string exp_auxtruen_name = core::identifier_string(
"@exp_auxtruen");
2468 return exp_auxtruen_name;
2478 return exp_auxtruen;
2489 return atermpp::down_cast<function_symbol>(e) == exp_auxtruen();
2525 return is_application(e) && is_exp_auxtruen_function_symbol(atermpp::down_cast<application>(e).head());
2533 static core::identifier_string exp_auxfalsep_name = core::identifier_string(
"@exp_auxfalsep");
2534 return exp_auxfalsep_name;
2544 return exp_auxfalsep;
2555 return atermpp::down_cast<function_symbol>(e) == exp_auxfalsep();
2591 return is_application(e) && is_exp_auxfalsep_function_symbol(atermpp::down_cast<application>(e).head());
2599 static core::identifier_string exp_auxfalsen_name = core::identifier_string(
"@exp_auxfalsen");
2600 return exp_auxfalsen_name;
2610 return exp_auxfalsen;
2621 return atermpp::down_cast<function_symbol>(e) == exp_auxfalsen();
2657 return is_application(e) && is_exp_auxfalsen_function_symbol(atermpp::down_cast<application>(e).head());
2665 static core::identifier_string div_bold_name = core::identifier_string(
"@div_bold");
2666 return div_bold_name;
2687 return atermpp::down_cast<function_symbol>(e) == div_bold();
2721 return is_application(e) && is_div_bold_function_symbol(atermpp::down_cast<application>(e).head());
2729 static core::identifier_string div_bold_whr_name = core::identifier_string(
"@div_bold_whr");
2730 return div_bold_whr_name;
2740 return div_bold_whr;
2751 return atermpp::down_cast<function_symbol>(e) == div_bold_whr();
2793 return is_application(e) && is_div_bold_whr_function_symbol(atermpp::down_cast<application>(e).head());
2801 static core::identifier_string div_whr1_name = core::identifier_string(
"@div_whr1");
2802 return div_whr1_name;
2823 return atermpp::down_cast<function_symbol>(e) == div_whr1();
2861 return is_application(e) && is_div_whr1_function_symbol(atermpp::down_cast<application>(e).head());
2869 static core::identifier_string div_whr2_name = core::identifier_string(
"@div_whr2");
2870 return div_whr2_name;
2891 return atermpp::down_cast<function_symbol>(e) == div_whr2();
2931 return is_application(e) && is_div_whr2_function_symbol(atermpp::down_cast<application>(e).head());
2939 static core::identifier_string mod_whr1_name = core::identifier_string(
"@mod_whr1");
2940 return mod_whr1_name;
2961 return atermpp::down_cast<function_symbol>(e) == mod_whr1();
2999 return is_application(e) && is_mod_whr1_function_symbol(atermpp::down_cast<application>(e).head());
3007 static core::identifier_string divmod_aux_name = core::identifier_string(
"@divmod_aux");
3008 return divmod_aux_name;
3029 return atermpp::down_cast<function_symbol>(e) == divmod_aux();
3063 return is_application(e) && is_divmod_aux_function_symbol(atermpp::down_cast<application>(e).head());
3071 static core::identifier_string divmod_aux_whr1_name = core::identifier_string(
"@divmod_aux_whr1");
3072 return divmod_aux_whr1_name;
3082 return divmod_aux_whr1;
3093 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr1();
3131 return is_application(e) && is_divmod_aux_whr1_function_symbol(atermpp::down_cast<application>(e).head());
3139 static core::identifier_string divmod_aux_whr2_name = core::identifier_string(
"@divmod_aux_whr2");
3140 return divmod_aux_whr2_name;
3150 return divmod_aux_whr2;
3161 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr2();
3201 return is_application(e) && is_divmod_aux_whr2_function_symbol(atermpp::down_cast<application>(e).head());
3209 static core::identifier_string divmod_aux_whr3_name = core::identifier_string(
"@divmod_aux_whr3");
3210 return divmod_aux_whr3_name;
3220 return divmod_aux_whr3;
3231 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr3();
3271 return is_application(e) && is_divmod_aux_whr3_function_symbol(atermpp::down_cast<application>(e).head());
3279 static core::identifier_string divmod_aux_whr4_name = core::identifier_string(
"@divmod_aux_whr4");
3280 return divmod_aux_whr4_name;
3290 return divmod_aux_whr4;
3301 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr4();
3339 return is_application(e) && is_divmod_aux_whr4_function_symbol(atermpp::down_cast<application>(e).head());
3347 static core::identifier_string divmod_aux_whr5_name = core::identifier_string(
"@divmod_aux_whr5");
3348 return divmod_aux_whr5_name;
3358 return divmod_aux_whr5;
3369 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr5();
3407 return is_application(e) && is_divmod_aux_whr5_function_symbol(atermpp::down_cast<application>(e).head());
3415 static core::identifier_string divmod_aux_whr6_name = core::identifier_string(
"@divmod_aux_whr6");
3416 return divmod_aux_whr6_name;
3426 return divmod_aux_whr6;
3437 return atermpp::down_cast<function_symbol>(e) == divmod_aux_whr6();
3477 return is_application(e) && is_divmod_aux_whr6_function_symbol(atermpp::down_cast<application>(e).head());
3485 static core::identifier_string msd_name = core::identifier_string(
"@msd");
3507 return atermpp::down_cast<function_symbol>(e) == msd();
3539 return is_application(e) && is_msd_function_symbol(atermpp::down_cast<application>(e).head());
3547 static core::identifier_string swap_zero_name = core::identifier_string(
"@swap_zero");
3548 return swap_zero_name;
3569 return atermpp::down_cast<function_symbol>(e) == swap_zero();
3603 return is_application(e) && is_swap_zero_function_symbol(atermpp::down_cast<application>(e).head());
3611 static core::identifier_string swap_zero_add_name = core::identifier_string(
"@swap_zero_add");
3612 return swap_zero_add_name;
3622 return swap_zero_add;
3633 return atermpp::down_cast<function_symbol>(e) == swap_zero_add();
3671 return is_application(e) && is_swap_zero_add_function_symbol(atermpp::down_cast<application>(e).head());
3679 static core::identifier_string swap_zero_min_name = core::identifier_string(
"@swap_zero_min");
3680 return swap_zero_min_name;
3690 return swap_zero_min;
3701 return atermpp::down_cast<function_symbol>(e) == swap_zero_min();
3739 return is_application(e) && is_swap_zero_min_function_symbol(atermpp::down_cast<application>(e).head());
3747 static core::identifier_string swap_zero_monus_name = core::identifier_string(
"@swap_zero_monus");
3748 return swap_zero_monus_name;
3758 return swap_zero_monus;
3769 return atermpp::down_cast<function_symbol>(e) == swap_zero_monus();
3807 return is_application(e) && is_swap_zero_monus_function_symbol(atermpp::down_cast<application>(e).head());
3815 static core::identifier_string sqrt_whr1_name = core::identifier_string(
"@sqrt_whr1");
3816 return sqrt_whr1_name;
3837 return atermpp::down_cast<function_symbol>(e) == sqrt_whr1();
3875 return is_application(e) && is_sqrt_whr1_function_symbol(atermpp::down_cast<application>(e).head());
3883 static core::identifier_string sqrt_whr2_name = core::identifier_string(
"@sqrt_whr2");
3884 return sqrt_whr2_name;
3905 return atermpp::down_cast<function_symbol>(e) == sqrt_whr2();
3945 return is_application(e) && is_sqrt_whr2_function_symbol(atermpp::down_cast<application>(e).head());
3953 static core::identifier_string sqrt_pair_name = core::identifier_string(
"@sqrt_pair");
3954 return sqrt_pair_name;
3975 return atermpp::down_cast<function_symbol>(e) == sqrt_pair();
4007 return is_application(e) && is_sqrt_pair_function_symbol(atermpp::down_cast<application>(e).head());
4015 static core::identifier_string sqrt_pair_whr1_name = core::identifier_string(
"@sqrt_pair_whr1");
4016 return sqrt_pair_whr1_name;
4026 return sqrt_pair_whr1;
4037 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr1();
4075 return is_application(e) && is_sqrt_pair_whr1_function_symbol(atermpp::down_cast<application>(e).head());
4083 static core::identifier_string sqrt_pair_whr2_name = core::identifier_string(
"@sqrt_pair_whr2");
4084 return sqrt_pair_whr2_name;
4094 return sqrt_pair_whr2;
4105 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr2();
4145 return is_application(e) && is_sqrt_pair_whr2_function_symbol(atermpp::down_cast<application>(e).head());
4153 static core::identifier_string sqrt_pair_whr3_name = core::identifier_string(
"@sqrt_pair_whr3");
4154 return sqrt_pair_whr3_name;
4164 return sqrt_pair_whr3;
4175 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr3();
4211 return is_application(e) && is_sqrt_pair_whr3_function_symbol(atermpp::down_cast<application>(e).head());
4219 static core::identifier_string sqrt_pair_whr4_name = core::identifier_string(
"@sqrt_pair_whr4");
4220 return sqrt_pair_whr4_name;
4230 return sqrt_pair_whr4;
4241 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr4();
4283 return is_application(e) && is_sqrt_pair_whr4_function_symbol(atermpp::down_cast<application>(e).head());
4291 static core::identifier_string sqrt_pair_whr5_name = core::identifier_string(
"@sqrt_pair_whr5");
4292 return sqrt_pair_whr5_name;
4302 return sqrt_pair_whr5;
4313 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr5();
4353 return is_application(e) && is_sqrt_pair_whr5_function_symbol(atermpp::down_cast<application>(e).head());
4361 static core::identifier_string sqrt_pair_whr6_name = core::identifier_string(
"@sqrt_pair_whr6");
4362 return sqrt_pair_whr6_name;
4372 return sqrt_pair_whr6;
4383 return atermpp::down_cast<function_symbol>(e) == sqrt_pair_whr6();
4419 return is_application(e) && is_sqrt_pair_whr6_function_symbol(atermpp::down_cast<application>(e).head());
4427 static core::identifier_string first_name = core::identifier_string(
"@first");
4449 return atermpp::down_cast<function_symbol>(e) == first();
4481 return is_application(e) && is_first_function_symbol(atermpp::down_cast<application>(e).head());
4489 static core::identifier_string last_name = core::identifier_string(
"@last");
4511 return atermpp::down_cast<function_symbol>(e) == last();
4543 return is_application(e) && is_last_function_symbol(atermpp::down_cast<application>(e).head());
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());
4627 function_symbol_vector result=nat_generate_functions_code();
4628 for(
const function_symbol& f: nat_generate_constructors_code())
4630 result.push_back(f);
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());
4720 implementation_map result;
4732 return atermpp::down_cast<application>(e)[0];
4744 return atermpp::down_cast<application>(e)[0];
4756 return atermpp::down_cast<application>(e)[1];
4768 return atermpp::down_cast<application>(e)[0];
4780 return atermpp::down_cast<application>(e)[1];
4792 return atermpp::down_cast<application>(e)[2];
4804 return atermpp::down_cast<application>(e)[3];
4816 return atermpp::down_cast<application>(e)[4];
4828 return atermpp::down_cast<application>(e)[5];
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))));
A unordered_map class in which aterms can be stored.
basic_sort(const core::identifier_string &name)
\brief Constructor Z14.
basic_sort(const atermpp::aterm &term)
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.
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.
function_symbol(const core::identifier_string &name, const sort_expression &sort)
Constructor.
sort_expression & operator=(const sort_expression &) noexcept=default
sort_expression(const sort_expression &) noexcept=default
Move semantics.
Namespace for system defined sort bool_.
const basic_sort & bool_()
Constructor for sort expression Bool.
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.
const core::identifier_string & succ_name()
Generate identifier succ.
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
bool is_monus_whr_application(const atermpp::aterm &e)
Recogniser for application of @monus_whr.
void make_plus(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol +.
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.
bool is_natpred_function_symbol(const atermpp::aterm &e)
Recogniser for function @natpred.
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.
function_symbol maximum(const sort_expression &s0, const sort_expression &s1)
const core::identifier_string & sqrt_pair_name()
Generate identifier @sqrt_pair.
const core::identifier_string & sqrt_pair_whr5_name()
Generate identifier @sqrt_pair_whr5.
const data_expression & arg5(const data_expression &e)
Function for projecting out argument. arg5 from an application.
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.
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.
bool is_pos2nat_function_symbol(const atermpp::aterm &e)
Recogniser for function Pos2Nat.
const core::identifier_string & most_significant_digit_nat_name()
Generate identifier @most_significant_digitNat.
bool is_sqrt_pair_whr5_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr5.
const core::identifier_string & natnatpair_name()
function_symbol succ(const sort_expression &s0)
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.
const function_symbol & monus()
Constructor for function symbol @monus.
void make_sqrt(data_expression &result, const data_expression &arg0)
Make an application of function symbol sqrt.
const function_symbol & pred_whr()
Constructor for function symbol @pred_whr.
application divmod_aux(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @divmod_aux.
const function_symbol & c0()
Constructor for function symbol @c0.
bool is_swap_zero_add_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_add.
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.
void make_div(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol div.
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.
bool is_sqrt_pair_whr6_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr6.
bool is_equals_zero_function_symbol(const atermpp::aterm &e)
Recogniser for function @equals_zero.
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.
bool is_sqrt_whr1_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_whr1.
function_symbol times_ordered(const sort_expression &s0, const sort_expression &s1)
application nnpair(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @nnPair.
const core::identifier_string & mod_whr1_name()
Generate identifier @mod_whr1.
bool is_sqrt_pair_whr3_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr3.
const core::identifier_string & divmod_aux_whr5_name()
Generate identifier @divmod_aux_whr5.
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.
const core::identifier_string & maximum_name()
Generate identifier max.
void make_mod(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol mod.
const core::identifier_string & equals_one_name()
Generate identifier @equals_one.
bool is_swap_zero_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero.
const core::identifier_string & mod_name()
Generate identifier mod.
const function_symbol & divmod_aux_whr3()
Constructor for function symbol @divmod_aux_whr3.
function_symbol concat_digit(const sort_expression &s0, const sort_expression &s1)
const core::identifier_string & exp_auxfalsen_name()
Generate identifier @exp_auxfalsen.
bool is_times_overflow_application(const atermpp::aterm &e)
Recogniser for application of @times_overflow.
bool is_div_application(const atermpp::aterm &e)
Recogniser for application of div.
bool is_equals_zero_application(const atermpp::aterm &e)
Recogniser for application of @equals_zero.
const core::identifier_string & swap_zero_min_name()
Generate identifier @swap_zero_min.
application sqrt_pair_whr3(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @sqrt_pair_whr3.
bool is_pos2nat_application(const atermpp::aterm &e)
Recogniser for application of Pos2Nat.
bool is_sqrt_pair_whr2_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr2.
application add_with_carry(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @add_with_carry.
application exp_auxtruen(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_auxtruen.
void make_pred(data_expression &result, const data_expression &arg0)
Make an application of function symbol pred.
application exp_aux3p(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_aux3p.
void make_times_ordered(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @times_ordered.
const core::identifier_string & sqrt_pair_whr1_name()
Generate identifier @sqrt_pair_whr1.
bool is_nat2pos_application(const atermpp::aterm &e)
Recogniser for application of Nat2Pos.
bool is_mod_function_symbol(const atermpp::aterm &e)
Recogniser for function mod.
function_symbol exp(const sort_expression &s0, const sort_expression &s1)
const core::identifier_string & exp_auxfalsep_name()
Generate identifier @exp_auxfalsep.
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.
application minimum(const data_expression &arg0, const data_expression &arg1)
Application of function symbol min.
bool is_exp_auxfalsen_application(const atermpp::aterm &e)
Recogniser for application of @exp_auxfalsen.
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.
bool is_nnpair_function_symbol(const atermpp::aterm &e)
Recogniser for function @nnPair.
const core::identifier_string & times_name()
Generate identifier *.
const function_symbol & div_whr1()
Constructor for function symbol @div_whr1.
bool is_divmod_aux_whr6_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr6.
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.
bool is_divmod_aux_whr2_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr2.
const function_symbol & swap_zero_add()
Constructor for function symbol @swap_zero_add.
function_symbol_vector nat_mCRL2_usable_mappings()
Give all system defined mappings that can be used in mCRL2 specs for nat.
data_equation_vector nat_generate_equations_code()
Give all system defined equations for nat.
bool is_sqrt_pair_whr4_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr4.
const basic_sort & nat()
Constructor for sort expression Nat.
const function_symbol & exp_auxtruep()
Constructor for function symbol @exp_auxtruep.
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.
const core::identifier_string & nat_name()
bool is_sqrt_pair_whr2_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr2.
application exp(const data_expression &arg0, const data_expression &arg1)
Application of function symbol exp.
application concat_digit(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @concat_digit.
const core::identifier_string & equals_zero_name()
Generate identifier @equals_zero.
bool is_exp_auxfalsep_application(const atermpp::aterm &e)
Recogniser for application of @exp_auxfalsep.
const core::identifier_string & exp_name()
Generate identifier exp.
bool is_divmod_aux_whr4_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr4.
const function_symbol & swap_zero()
Constructor for function symbol @swap_zero.
const function_symbol & sqrt_pair_whr3()
Constructor for function symbol @sqrt_pair_whr3.
application swap_zero(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @swap_zero.
bool is_concat_digit_function_symbol(const atermpp::aterm &e)
Recogniser for function @concat_digit.
bool is_times_overflow_function_symbol(const atermpp::aterm &e)
Recogniser for function @times_overflow.
bool is_first_function_symbol(const atermpp::aterm &e)
Recogniser for function @first.
bool is_maximum_application(const atermpp::aterm &e)
Recogniser for application of max.
implementation_map nat_cpp_implementable_constructors()
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
application exp_auxfalsep(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_auxfalsep.
bool is_nat(const sort_expression &e)
Recogniser for sort expression Nat.
bool is_pred_whr_application(const atermpp::aterm &e)
Recogniser for application of @pred_whr.
const core::identifier_string & auxiliary_plus_nat_name()
Generate identifier @plus_nat.
bool is_nnpair_application(const atermpp::aterm &e)
Recogniser for application of @nnPair.
void make_equals_zero(data_expression &result, const data_expression &arg0)
Make an application of function symbol @equals_zero.
const core::identifier_string & div_bold_name()
Generate identifier @div_bold.
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.
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.
const core::identifier_string & exp_aux3n_name()
Generate identifier @exp_aux3n.
void make_pred_whr(data_expression &result, const data_expression &arg0)
Make an application of function symbol @pred_whr.
bool is_plus_function_symbol(const atermpp::aterm &e)
Recogniser for function +.
function_symbol_vector nat_generate_constructors_and_functions_code()
Give all system defined mappings and constructors for nat.
application sqrt(const data_expression &arg0)
Application of function symbol sqrt.
application pos2nat(const data_expression &arg0)
Application of function symbol Pos2Nat.
const core::identifier_string & exp_aux4p_name()
Generate identifier @exp_aux4p.
void make_nat2pos(data_expression &result, const data_expression &arg0)
Make an application of function symbol Nat2Pos.
void make_succ_nat(data_expression &result, const data_expression &arg0)
Make an application of function symbol @succ_nat.
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.
bool is_mod_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @mod_whr1.
application first(const data_expression &arg0)
Application of function symbol @first.
const function_symbol & div2()
Constructor for function symbol @div2.
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.
const core::identifier_string & plus_name()
Generate identifier +.
const function_symbol & div_whr2()
Constructor for function symbol @div_whr2.
const function_symbol & not_equals_zero()
Constructor for function symbol @not_equals_zero.
const function_symbol & sqrt_pair()
Constructor for function symbol @sqrt_pair.
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
bool is_succ_function_symbol(const atermpp::aterm &e)
Recogniser for function succ.
void make_maximum(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol max.
bool is_divmod_aux_whr1_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr1.
const function_symbol & mod_whr1()
Constructor for function symbol @mod_whr1.
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.
const core::identifier_string & div_name()
Generate identifier div.
const function_symbol & mod()
Constructor for function symbol mod.
void make_monus(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @monus.
const function_symbol & exp_aux3n()
Constructor for function symbol @exp_aux3n.
application succ_nat(const data_expression &arg0)
Application of function symbol @succ_nat.
const function_symbol & sqrt()
Constructor for function symbol sqrt.
void make_nnpair(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @nnPair.
application equals_zero(const data_expression &arg0)
Application of function symbol @equals_zero.
bool is_add_with_carry_application(const atermpp::aterm &e)
Recogniser for application of @add_with_carry.
bool is_sqrt_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_whr1.
const function_symbol & exp_auxfalsen()
Constructor for function symbol @exp_auxfalsen.
bool is_divmod_aux_whr2_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr2.
const function_symbol & pred()
Constructor for function symbol pred.
const core::identifier_string & div_bold_whr_name()
Generate identifier @div_bold_whr.
const core::identifier_string & divmod_aux_name()
Generate identifier @divmod_aux.
void make_is_odd(data_expression &result, const data_expression &arg0)
Make an application of function symbol @is_odd.
const function_symbol & exp_auxtruen()
Constructor for function symbol @exp_auxtruen.
application times_ordered(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @times_ordered.
const function_symbol & sqrt_pair_whr2()
Constructor for function symbol @sqrt_pair_whr2.
const core::identifier_string & first_name()
Generate identifier @first.
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.
bool is_succ_application(const atermpp::aterm &e)
Recogniser for application of succ.
application not_equals_zero(const data_expression &arg0)
Application of function symbol @not_equals_zero.
const function_symbol & exp_auxfalsep()
Constructor for function symbol @exp_auxfalsep.
const core::identifier_string & sqrt_whr2_name()
Generate identifier @sqrt_whr2.
bool is_sqrt_pair_whr5_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr5.
bool is_div_bold_whr_application(const atermpp::aterm &e)
Recogniser for application of @div_bold_whr.
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.
const function_symbol & natpred()
Constructor for function symbol @natpred.
bool is_swap_zero_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero.
const core::identifier_string & swap_zero_name()
Generate identifier @swap_zero.
void make_pos2nat(data_expression &result, const data_expression &arg0)
Make an application of function symbol Pos2Nat.
bool is_minimum_application(const atermpp::aterm &e)
Recogniser for application of min.
bool is_div_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_whr1.
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.
bool is_is_odd_function_symbol(const atermpp::aterm &e)
Recogniser for function @is_odd.
bool is_exp_function_symbol(const atermpp::aterm &e)
Recogniser for function exp.
bool is_div_bold_application(const atermpp::aterm &e)
Recogniser for application of @div_bold.
bool is_monus_function_symbol(const atermpp::aterm &e)
Recogniser for function @monus.
bool is_mod_application(const atermpp::aterm &e)
Recogniser for application of mod.
const core::identifier_string & divmod_aux_whr1_name()
Generate identifier @divmod_aux_whr1.
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.
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.
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.
const core::identifier_string & pred_name()
Generate identifier pred.
bool is_exp_application(const atermpp::aterm &e)
Recogniser for application of exp.
void make_div_bold(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @div_bold.
const function_symbol & swap_zero_min()
Constructor for function symbol @swap_zero_min.
application msd(const data_expression &arg0)
Application of function symbol @msd.
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.
function_symbol minimum(const sort_expression &s0, const sort_expression &s1)
bool is_div2_function_symbol(const atermpp::aterm &e)
Recogniser for function @div2.
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.
const core::identifier_string & divmod_aux_whr2_name()
Generate identifier @divmod_aux_whr2.
bool is_msd_function_symbol(const atermpp::aterm &e)
Recogniser for function @msd.
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.
const function_symbol & divmod_aux_whr6()
Constructor for function symbol @divmod_aux_whr6.
void make_most_significant_digit_nat(data_expression &result, const data_expression &arg0)
Make an application of function symbol @most_significant_digitNat.
const data_expression & arg6(const data_expression &e)
Function for projecting out argument. arg6 from an application.
bool is_last_application(const atermpp::aterm &e)
Recogniser for application of @last.
void make_exp(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol exp.
const core::identifier_string & not_equals_zero_name()
Generate identifier @not_equals_zero.
bool is_not_equals_zero_function_symbol(const atermpp::aterm &e)
Recogniser for function @not_equals_zero.
bool is_sqrt_whr2_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_whr2.
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.
const core::identifier_string & divmod_aux_whr6_name()
Generate identifier @divmod_aux_whr6.
bool is_exp_auxfalsen_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_auxfalsen.
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.
const function_symbol & div()
Constructor for function symbol div.
application last(const data_expression &arg0)
Application of function symbol @last.
bool is_sqrt_pair_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair.
const function_symbol & divmod_aux_whr5()
Constructor for function symbol @divmod_aux_whr5.
bool is_div_bold_whr_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_bold_whr.
const function_symbol & is_odd()
Constructor for function symbol @is_odd.
bool is_add_with_carry_function_symbol(const atermpp::aterm &e)
Recogniser for function @add_with_carry.
void make_succ(data_expression &result, const data_expression &arg0)
Make an application of function symbol succ.
const core::identifier_string & exp_aux3p_name()
Generate identifier @exp_aux3p.
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.
const function_symbol & nnpair()
Constructor for function symbol @nnPair.
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.
const core::identifier_string & sqrt_pair_whr6_name()
Generate identifier @sqrt_pair_whr6.
bool is_maximum_function_symbol(const atermpp::aterm &e)
Recogniser for function max.
bool is_msd_application(const atermpp::aterm &e)
Recogniser for application of @msd.
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.
bool is_swap_zero_min_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_min.
bool is_succ_nat_function_symbol(const atermpp::aterm &e)
Recogniser for function @succ_nat.
function_symbol plus(const sort_expression &s0, const sort_expression &s1)
const basic_sort & natnatpair()
Constructor for sort expression @NatNatPair.
bool is_first_application(const atermpp::aterm &e)
Recogniser for application of @first.
void make_auxiliary_plus_nat(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @plus_nat.
bool is_equals_one_application(const atermpp::aterm &e)
Recogniser for application of @equals_one.
void make_divmod_aux(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @divmod_aux.
bool is_exp_aux4n_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_aux4n.
function_symbol add_with_carry(const sort_expression &s0, const sort_expression &s1)
bool is_sqrt_application(const atermpp::aterm &e)
Recogniser for application of sqrt.
const function_symbol & first()
Constructor for function symbol @first.
void make_first(data_expression &result, const data_expression &arg0)
Make an application of function symbol @first.
const core::identifier_string & exp_auxtruen_name()
Generate identifier @exp_auxtruen.
bool is_auxiliary_plus_nat_function_symbol(const atermpp::aterm &e)
Recogniser for function @plus_nat.
const function_symbol & msd()
Constructor for function symbol @msd.
application is_odd(const data_expression &arg0)
Application of function symbol @is_odd.
const function_symbol & sqrt_whr1()
Constructor for function symbol @sqrt_whr1.
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.
bool is_pred_function_symbol(const atermpp::aterm &e)
Recogniser for function pred.
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.
const function_symbol & exp_aux4p()
Constructor for function symbol @exp_aux4p.
const core::identifier_string & msd_name()
Generate identifier @msd.
const function_symbol & exp_aux3p()
Constructor for function symbol @exp_aux3p.
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.
const core::identifier_string & div2_name()
Generate identifier @div2.
bool is_times_ordered_application(const atermpp::aterm &e)
Recogniser for application of @times_ordered.
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.
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.
const core::identifier_string & nnpair_name()
Generate identifier @nnPair.
bool is_mod_whr1_application(const atermpp::aterm &e)
Recogniser for application of @mod_whr1.
const core::identifier_string & swap_zero_monus_name()
Generate identifier @swap_zero_monus.
bool is_exp_aux4n_application(const atermpp::aterm &e)
Recogniser for application of @exp_aux4n.
const core::identifier_string & div_whr2_name()
Generate identifier @div_whr2.
function_symbol_vector nat_generate_functions_code()
Give all system defined mappings for nat.
bool is_div_bold_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_bold.
application div(const data_expression &arg0, const data_expression &arg1)
Application of function symbol div.
bool is_div_whr1_application(const atermpp::aterm &e)
Recogniser for application of @div_whr1.
const core::identifier_string & sqrt_whr1_name()
Generate identifier @sqrt_whr1.
bool is_exp_auxfalsep_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_auxfalsep.
bool is_exp_aux3n_application(const atermpp::aterm &e)
Recogniser for application of @exp_aux3n.
const core::identifier_string & times_overflow_name()
Generate identifier @times_overflow.
bool is_sqrt_pair_whr6_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr6.
const function_symbol & swap_zero_monus()
Constructor for function symbol @swap_zero_monus.
void make_times(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol *.
const function_symbol & succ_nat()
Constructor for function symbol @succ_nat.
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.
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.
const function_symbol & div_bold_whr()
Constructor for function symbol @div_bold_whr.
const core::identifier_string & divmod_aux_whr4_name()
Generate identifier @divmod_aux_whr4.
bool is_c0_function_symbol(const atermpp::aterm &e)
Recogniser for function @c0.
application most_significant_digit_nat(const data_expression &arg0)
Application of function symbol @most_significant_digitNat.
const function_symbol & nat2pos()
Constructor for function symbol Nat2Pos.
const core::identifier_string & monus_name()
Generate identifier @monus.
bool is_sqrt_whr2_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_whr2.
const core::identifier_string & sqrt_pair_whr4_name()
Generate identifier @sqrt_pair_whr4.
application monus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @monus.
const core::identifier_string & nat2pos_name()
Generate identifier Nat2Pos.
const data_expression & arg3(const data_expression &e)
Function for projecting out argument. arg3 from an application.
implementation_map nat_cpp_implementable_mappings()
Give all system defined mappings that are to be implemented in C++ code for nat.
application exp_aux3n(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_aux3n.
bool is_sqrt_pair_whr4_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr4.
const function_symbol & most_significant_digit_nat()
Constructor for function symbol @most_significant_digitNat.
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
const function_symbol & exp_aux4n()
Constructor for function symbol @exp_aux4n.
application pred(const data_expression &arg0)
Application of function symbol pred.
bool is_divmod_aux_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux.
application succ(const data_expression &arg0)
Application of function symbol succ.
bool is_divmod_aux_whr4_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr4.
const function_symbol & sqrt_whr2()
Constructor for function symbol @sqrt_whr2.
bool is_sqrt_pair_whr3_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr3.
const core::identifier_string & sqrt_pair_whr2_name()
Generate identifier @sqrt_pair_whr2.
bool is_divmod_aux_whr5_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr5.
const core::identifier_string & sqrt_pair_whr3_name()
Generate identifier @sqrt_pair_whr3.
const data_expression & arg1(const data_expression &e)
Function for projecting out argument. arg1 from an application.
bool is_swap_zero_monus_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_monus.
bool is_divmod_aux_whr3_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr3.
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.
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.
const function_symbol & divmod_aux_whr1()
Constructor for function symbol @divmod_aux_whr1.
const function_symbol & sqrt_pair_whr1()
Constructor for function symbol @sqrt_pair_whr1.
application auxiliary_plus_nat(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @plus_nat.
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.
const core::identifier_string & c0_name()
Generate identifier @c0.
application natpred(const data_expression &arg0)
Application of function symbol @natpred.
bool is_times_ordered_function_symbol(const atermpp::aterm &e)
Recogniser for function @times_ordered.
bool is_exp_auxtruep_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_auxtruep.
void make_concat_digit(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @concat_digit.
const function_symbol & monus_whr()
Constructor for function symbol @monus_whr.
application sqrt_pair(const data_expression &arg0)
Application of function symbol @sqrt_pair.
const function_symbol & div_bold()
Constructor for function symbol @div_bold.
bool is_swap_zero_add_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_add.
bool is_exp_aux4p_application(const atermpp::aterm &e)
Recogniser for application of @exp_aux4p.
bool is_not_equals_zero_application(const atermpp::aterm &e)
Recogniser for application of @not_equals_zero.
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.
bool is_swap_zero_monus_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_monus.
bool is_exp_auxtruen_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_auxtruen.
const core::identifier_string & pos2nat_name()
Generate identifier Pos2Nat.
const core::identifier_string & last_name()
Generate identifier @last.
const core::identifier_string & minimum_name()
Generate identifier min.
application exp_auxtruep(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_auxtruep.
bool is_auxiliary_plus_nat_application(const atermpp::aterm &e)
Recogniser for application of @plus_nat.
application div2(const data_expression &arg0)
Application of function symbol @div2.
bool is_most_significant_digit_nat_function_symbol(const atermpp::aterm &e)
Recogniser for function @most_significant_digitNat.
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.
application div_bold(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @div_bold.
bool is_concat_digit_application(const atermpp::aterm &e)
Recogniser for application of @concat_digit.
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
const core::identifier_string & add_with_carry_name()
Generate identifier @add_with_carry.
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.
bool is_sqrt_function_symbol(const atermpp::aterm &e)
Recogniser for function sqrt.
bool is_divmod_aux_whr6_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr6.
function_symbol times_overflow(const sort_expression &s0, const sort_expression &s1, const sort_expression &s2)
const core::identifier_string & divmod_aux_whr3_name()
Generate identifier @divmod_aux_whr3.
bool is_sqrt_pair_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_pair_whr1.
application mod(const data_expression &arg0, const data_expression &arg1)
Application of function symbol mod.
const function_symbol & sqrt_pair_whr5()
Constructor for function symbol @sqrt_pair_whr5.
bool is_div_whr2_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_whr2.
const function_symbol & equals_zero()
Constructor for function symbol @equals_zero.
bool is_divmod_aux_whr5_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr5.
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.
function_symbol_vector nat_mCRL2_usable_constructors()
Give all defined constructors which can be used in mCRL2 specs for nat.
application exp_auxfalsen(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @exp_auxfalsen.
const function_symbol & last()
Constructor for function symbol @last.
bool is_exp_aux3p_application(const atermpp::aterm &e)
Recogniser for application of @exp_aux3p.
const core::identifier_string & exp_auxtruep_name()
Generate identifier @exp_auxtruep.
bool is_natpred_application(const atermpp::aterm &e)
Recogniser for application of @natpred.
bool is_pred_application(const atermpp::aterm &e)
Recogniser for application of pred.
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.
const core::identifier_string & is_odd_name()
Generate identifier @is_odd.
const core::identifier_string & exp_aux4n_name()
Generate identifier @exp_aux4n.
const function_symbol & auxiliary_plus_nat()
Constructor for function symbol @plus_nat.
bool is_plus_application(const atermpp::aterm &e)
Recogniser for application of +.
bool is_divmod_aux_whr1_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod_aux_whr1.
application maximum(const data_expression &arg0, const data_expression &arg1)
Application of function symbol max.
void make_swap_zero(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @swap_zero.
bool is_divmod_aux_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux.
void make_minimum(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol min.
bool is_exp_aux3n_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_aux3n.
const core::identifier_string & swap_zero_add_name()
Generate identifier @swap_zero_add.
application sqrt_pair_whr6(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @sqrt_pair_whr6.
const function_symbol & divmod_aux_whr2()
Constructor for function symbol @divmod_aux_whr2.
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.
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
bool is_swap_zero_min_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_min.
void make_not_equals_zero(data_expression &result, const data_expression &arg0)
Make an application of function symbol @not_equals_zero.
function_symbol_vector nat_generate_constructors_code()
Give all system defined constructors for nat.
bool is_equals_one_function_symbol(const atermpp::aterm &e)
Recogniser for function @equals_one.
bool is_sqrt_pair_whr1_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_pair_whr1.
const core::identifier_string & sqrt_name()
Generate identifier sqrt.
const function_symbol & divmod_aux()
Constructor for function symbol @divmod_aux.
void make_sqrt_pair(data_expression &result, const data_expression &arg0)
Make an application of function symbol @sqrt_pair.
const function_symbol & sqrt_pair_whr4()
Constructor for function symbol @sqrt_pair_whr4.
application equals_one(const data_expression &arg0)
Application of function symbol @equals_one.
bool is_last_function_symbol(const atermpp::aterm &e)
Recogniser for function @last.
application times(const data_expression &arg0, const data_expression &arg1)
Application of function symbol *.
const core::identifier_string & div_whr1_name()
Generate identifier @div_whr1.
bool is_times_application(const atermpp::aterm &e)
Recogniser for application of *.
bool is_div_function_symbol(const atermpp::aterm &e)
Recogniser for function div.
bool is_exp_auxtruen_application(const atermpp::aterm &e)
Recogniser for application of @exp_auxtruen.
bool is_is_odd_application(const atermpp::aterm &e)
Recogniser for application of @is_odd.
const core::identifier_string & monus_whr_name()
Generate identifier @monus_whr.
const core::identifier_string & times_ordered_name()
Generate identifier @times_ordered.
bool is_exp_aux4p_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_aux4p.
bool is_minimum_function_symbol(const atermpp::aterm &e)
Recogniser for function min.
bool is_exp_aux3p_function_symbol(const atermpp::aterm &e)
Recogniser for function @exp_aux3p.
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.
const core::identifier_string & pred_whr_name()
Generate identifier @pred_whr.
bool is_div_whr2_application(const atermpp::aterm &e)
Recogniser for application of @div_whr2.
function_symbol times(const sort_expression &s0, const sort_expression &s1)
bool is_times_function_symbol(const atermpp::aterm &e)
Recogniser for function *.
void make_equals_one(data_expression &result, const data_expression &arg0)
Make an application of function symbol @equals_one.
void make_natpred(data_expression &result, const data_expression &arg0)
Make an application of function symbol @natpred.
bool is_pred_whr_function_symbol(const atermpp::aterm &e)
Recogniser for function @pred_whr.
void make_div2(data_expression &result, const data_expression &arg0)
Make an application of function symbol @div2.
application pred_whr(const data_expression &arg0)
Application of function symbol @pred_whr.
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.
bool is_succ_nat_application(const atermpp::aterm &e)
Recogniser for application of @succ_nat.
bool is_nat2pos_function_symbol(const atermpp::aterm &e)
Recogniser for function Nat2Pos.
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.
function_symbol equals_one(const sort_expression &s0)
const core::identifier_string & succ_nat_name()
Generate identifier @succ_nat.
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.
bool is_monus_whr_function_symbol(const atermpp::aterm &e)
Recogniser for function @monus_whr.
bool is_natnatpair(const sort_expression &e)
Recogniser for sort expression @NatNatPair.
const function_symbol & divmod_aux_whr4()
Constructor for function symbol @divmod_aux_whr4.
const function_symbol & sqrt_pair_whr6()
Constructor for function symbol @sqrt_pair_whr6.
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.
bool is_div2_application(const atermpp::aterm &e)
Recogniser for application of @div2.
const core::identifier_string & natpred_name()
Generate identifier @natpred.
const function_symbol & pos2nat()
Constructor for function symbol Pos2Nat.
void make_last(data_expression &result, const data_expression &arg0)
Make an application of function symbol @last.
application nat2pos(const data_expression &arg0)
Application of function symbol Nat2Pos.
const core::identifier_string & concat_digit_name()
Generate identifier @concat_digit.
bool is_most_significant_digit_nat_application(const atermpp::aterm &e)
Recogniser for application of @most_significant_digitNat.
application times_overflow(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @times_overflow.
void make_msd(data_expression &result, const data_expression &arg0)
Make an application of function symbol @msd.
bool is_monus_application(const atermpp::aterm &e)
Recogniser for application of @monus.
bool is_divmod_aux_whr3_application(const atermpp::aterm &e)
Recogniser for application of @divmod_aux_whr3.
const data_expression & arg4(const data_expression &e)
Function for projecting out argument. arg4 from an application.
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.
bool is_exp_auxtruep_application(const atermpp::aterm &e)
Recogniser for application of @exp_auxtruep.
Namespace for system defined sort pos.
const basic_sort & pos()
Constructor for sort expression Pos.
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.