15#ifndef MCRL2_DATA_NAT1_H
16#define MCRL2_DATA_NAT1_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/bool.h"
27#include "mcrl2/data/pos1.h"
36 static core::identifier_string nat_name = core::identifier_string(
"Nat");
65 static core::identifier_string natpair_name = core::identifier_string(
"@NatPair");
97 static core::identifier_string c0_name = core::identifier_string(
"@c0");
119 return atermpp::down_cast<function_symbol>(e) == c0();
129 static core::identifier_string cnat_name = core::identifier_string(
"@cNat");
151 return atermpp::down_cast<function_symbol>(e) == cnat();
183 return is_application(e) && is_cnat_function_symbol(atermpp::down_cast<application>(e).head());
191 static core::identifier_string cpair_name = core::identifier_string(
"@cPair");
213 return atermpp::down_cast<function_symbol>(e) == cpair();
247 return is_application(e) && is_cpair_function_symbol(atermpp::down_cast<application>(e).head());
254 function_symbol_vector result;
255 result.push_back(sort_nat::c0());
256 result.push_back(sort_nat::cnat());
257 result.push_back(sort_nat::cpair());
266 function_symbol_vector result;
267 result.push_back(sort_nat::c0());
268 result.push_back(sort_nat::cnat());
269 result.push_back(sort_nat::cpair());
280 implementation_map result;
289 static core::identifier_string pos2nat_name = core::identifier_string(
"Pos2Nat");
311 return atermpp::down_cast<function_symbol>(e) == pos2nat();
343 return is_application(e) && is_pos2nat_function_symbol(atermpp::down_cast<application>(e).head());
351 static core::identifier_string nat2pos_name = core::identifier_string(
"Nat2Pos");
373 return atermpp::down_cast<function_symbol>(e) == nat2pos();
405 return is_application(e) && is_nat2pos_function_symbol(atermpp::down_cast<application>(e).head());
413 static core::identifier_string maximum_name = core::identifier_string(
"max");
440 throw mcrl2::runtime_error(
"Cannot compute target sort for maximum with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
456 return f.name() == maximum_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == maximum(sort_pos::pos(), nat()) || f == maximum(nat(), sort_pos::pos()) || f == maximum(nat(), nat()) || f == maximum(sort_pos::pos(), sort_pos::pos()));
490 return is_application(e) && is_maximum_function_symbol(atermpp::down_cast<application>(e).head());
498 static core::identifier_string minimum_name = core::identifier_string(
"min");
517 throw mcrl2::runtime_error(
"Cannot compute target sort for minimum with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
533 return f.name() == minimum_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == minimum(nat(), nat()) || f == minimum(sort_pos::pos(), sort_pos::pos()));
567 return is_application(e) && is_minimum_function_symbol(atermpp::down_cast<application>(e).head());
575 static core::identifier_string succ_name = core::identifier_string(
"succ");
597 return f.name() == succ_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 1 && (f == succ(nat()) || f == succ(sort_pos::pos()));
629 return is_application(e) && is_succ_function_symbol(atermpp::down_cast<application>(e).head());
637 static core::identifier_string pred_name = core::identifier_string(
"pred");
659 return atermpp::down_cast<function_symbol>(e) == pred();
691 return is_application(e) && is_pred_function_symbol(atermpp::down_cast<application>(e).head());
699 static core::identifier_string dub_name = core::identifier_string(
"@dub");
721 return atermpp::down_cast<function_symbol>(e) == dub();
755 return is_application(e) && is_dub_function_symbol(atermpp::down_cast<application>(e).head());
763 static core::identifier_string dubsucc_name = core::identifier_string(
"@dubsucc");
785 return atermpp::down_cast<function_symbol>(e) == dubsucc();
817 return is_application(e) && is_dubsucc_function_symbol(atermpp::down_cast<application>(e).head());
825 static core::identifier_string plus_name = core::identifier_string(
"+");
852 throw mcrl2::runtime_error(
"Cannot compute target sort for plus with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
868 return f.name() == plus_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == plus(sort_pos::pos(), nat()) || f == plus(nat(), sort_pos::pos()) || f == plus(nat(), nat()) || f == plus(sort_pos::pos(), sort_pos::pos()));
902 return is_application(e) && is_plus_function_symbol(atermpp::down_cast<application>(e).head());
910 static core::identifier_string gte_subtract_with_borrow_name = core::identifier_string(
"@gtesubtb");
911 return gte_subtract_with_borrow_name;
921 return gte_subtract_with_borrow;
932 return atermpp::down_cast<function_symbol>(e) == gte_subtract_with_borrow();
968 return is_application(e) && is_gte_subtract_with_borrow_function_symbol(atermpp::down_cast<application>(e).head());
976 static core::identifier_string times_name = core::identifier_string(
"*");
995 throw mcrl2::runtime_error(
"Cannot compute target sort for times with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
1011 return f.name() == times_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == times(nat(), nat()) || f == times(sort_pos::pos(), sort_pos::pos()));
1045 return is_application(e) && is_times_function_symbol(atermpp::down_cast<application>(e).head());
1053 static core::identifier_string div_name = core::identifier_string(
"div");
1075 return atermpp::down_cast<function_symbol>(e) == div();
1109 return is_application(e) && is_div_function_symbol(atermpp::down_cast<application>(e).head());
1117 static core::identifier_string mod_name = core::identifier_string(
"mod");
1139 return atermpp::down_cast<function_symbol>(e) == mod();
1173 return is_application(e) && is_mod_function_symbol(atermpp::down_cast<application>(e).head());
1181 static core::identifier_string exp_name = core::identifier_string(
"exp");
1200 throw mcrl2::runtime_error(
"Cannot compute target sort for exp with domain sorts " + pp(s0) +
", " + pp(s1) +
". ");
1216 return f.name() == exp_name() && atermpp::down_cast<function_sort>(f.sort()).domain().size() == 2 && (f == exp(sort_pos::pos(), nat()) || f == exp(nat(), nat()));
1250 return is_application(e) && is_exp_function_symbol(atermpp::down_cast<application>(e).head());
1258 static core::identifier_string even_name = core::identifier_string(
"@even");
1280 return atermpp::down_cast<function_symbol>(e) == even();
1312 return is_application(e) && is_even_function_symbol(atermpp::down_cast<application>(e).head());
1320 static core::identifier_string monus_name = core::identifier_string(
"@monus");
1342 return atermpp::down_cast<function_symbol>(e) == monus();
1376 return is_application(e) && is_monus_function_symbol(atermpp::down_cast<application>(e).head());
1384 static core::identifier_string swap_zero_name = core::identifier_string(
"@swap_zero");
1385 return swap_zero_name;
1406 return atermpp::down_cast<function_symbol>(e) == swap_zero();
1440 return is_application(e) && is_swap_zero_function_symbol(atermpp::down_cast<application>(e).head());
1448 static core::identifier_string swap_zero_add_name = core::identifier_string(
"@swap_zero_add");
1449 return swap_zero_add_name;
1459 return swap_zero_add;
1470 return atermpp::down_cast<function_symbol>(e) == swap_zero_add();
1508 return is_application(e) && is_swap_zero_add_function_symbol(atermpp::down_cast<application>(e).head());
1516 static core::identifier_string swap_zero_min_name = core::identifier_string(
"@swap_zero_min");
1517 return swap_zero_min_name;
1527 return swap_zero_min;
1538 return atermpp::down_cast<function_symbol>(e) == swap_zero_min();
1576 return is_application(e) && is_swap_zero_min_function_symbol(atermpp::down_cast<application>(e).head());
1584 static core::identifier_string swap_zero_monus_name = core::identifier_string(
"@swap_zero_monus");
1585 return swap_zero_monus_name;
1595 return swap_zero_monus;
1606 return atermpp::down_cast<function_symbol>(e) == swap_zero_monus();
1644 return is_application(e) && is_swap_zero_monus_function_symbol(atermpp::down_cast<application>(e).head());
1652 static core::identifier_string sqrt_name = core::identifier_string(
"sqrt");
1674 return atermpp::down_cast<function_symbol>(e) == sqrt();
1706 return is_application(e) && is_sqrt_function_symbol(atermpp::down_cast<application>(e).head());
1714 static core::identifier_string sqrt_nat_aux_func_name = core::identifier_string(
"@sqrt_nat");
1715 return sqrt_nat_aux_func_name;
1725 return sqrt_nat_aux_func;
1736 return atermpp::down_cast<function_symbol>(e) == sqrt_nat_aux_func();
1772 return is_application(e) && is_sqrt_nat_aux_func_function_symbol(atermpp::down_cast<application>(e).head());
1780 static core::identifier_string first_name = core::identifier_string(
"@first");
1802 return atermpp::down_cast<function_symbol>(e) == first();
1834 return is_application(e) && is_first_function_symbol(atermpp::down_cast<application>(e).head());
1842 static core::identifier_string last_name = core::identifier_string(
"@last");
1864 return atermpp::down_cast<function_symbol>(e) == last();
1896 return is_application(e) && is_last_function_symbol(atermpp::down_cast<application>(e).head());
1904 static core::identifier_string divmod_name = core::identifier_string(
"@divmod");
1926 return atermpp::down_cast<function_symbol>(e) == divmod();
1960 return is_application(e) && is_divmod_function_symbol(atermpp::down_cast<application>(e).head());
1968 static core::identifier_string generalised_divmod_name = core::identifier_string(
"@gdivmod");
1969 return generalised_divmod_name;
1979 return generalised_divmod;
1990 return atermpp::down_cast<function_symbol>(e) == generalised_divmod();
2026 return is_application(e) && is_generalised_divmod_function_symbol(atermpp::down_cast<application>(e).head());
2034 static core::identifier_string doubly_generalised_divmod_name = core::identifier_string(
"@ggdivmod");
2035 return doubly_generalised_divmod_name;
2045 return doubly_generalised_divmod;
2056 return atermpp::down_cast<function_symbol>(e) == doubly_generalised_divmod();
2092 return is_application(e) && is_doubly_generalised_divmod_function_symbol(atermpp::down_cast<application>(e).head());
2099 function_symbol_vector result;
2100 result.push_back(sort_nat::pos2nat());
2101 result.push_back(sort_nat::nat2pos());
2102 result.push_back(sort_nat::maximum(sort_pos::pos(), nat()));
2103 result.push_back(sort_nat::maximum(nat(), sort_pos::pos()));
2104 result.push_back(sort_nat::maximum(nat(), nat()));
2105 result.push_back(sort_nat::minimum(nat(), nat()));
2106 result.push_back(sort_nat::succ(nat()));
2107 result.push_back(sort_nat::pred());
2108 result.push_back(sort_nat::dub());
2109 result.push_back(sort_nat::dubsucc());
2110 result.push_back(sort_nat::plus(sort_pos::pos(), nat()));
2111 result.push_back(sort_nat::plus(nat(), sort_pos::pos()));
2112 result.push_back(sort_nat::plus(nat(), nat()));
2113 result.push_back(sort_nat::gte_subtract_with_borrow());
2114 result.push_back(sort_nat::times(nat(), nat()));
2115 result.push_back(sort_nat::div());
2116 result.push_back(sort_nat::mod());
2117 result.push_back(sort_nat::exp(sort_pos::pos(), nat()));
2118 result.push_back(sort_nat::exp(nat(), nat()));
2119 result.push_back(sort_nat::even());
2120 result.push_back(sort_nat::monus());
2121 result.push_back(sort_nat::swap_zero());
2122 result.push_back(sort_nat::swap_zero_add());
2123 result.push_back(sort_nat::swap_zero_min());
2124 result.push_back(sort_nat::swap_zero_monus());
2125 result.push_back(sort_nat::sqrt());
2126 result.push_back(sort_nat::sqrt_nat_aux_func());
2127 result.push_back(sort_nat::first());
2128 result.push_back(sort_nat::last());
2129 result.push_back(sort_nat::divmod());
2130 result.push_back(sort_nat::generalised_divmod());
2131 result.push_back(sort_nat::doubly_generalised_divmod());
2140 function_symbol_vector result=nat_generate_functions_code();
2141 for(
const function_symbol& f: nat_generate_constructors_code())
2143 result.push_back(f);
2153 function_symbol_vector result;
2154 result.push_back(sort_nat::pos2nat());
2155 result.push_back(sort_nat::nat2pos());
2156 result.push_back(sort_nat::maximum(sort_pos::pos(), nat()));
2157 result.push_back(sort_nat::maximum(nat(), sort_pos::pos()));
2158 result.push_back(sort_nat::maximum(nat(), nat()));
2159 result.push_back(sort_nat::minimum(nat(), nat()));
2160 result.push_back(sort_nat::succ(nat()));
2161 result.push_back(sort_nat::pred());
2162 result.push_back(sort_nat::dub());
2163 result.push_back(sort_nat::dubsucc());
2164 result.push_back(sort_nat::plus(sort_pos::pos(), nat()));
2165 result.push_back(sort_nat::plus(nat(), sort_pos::pos()));
2166 result.push_back(sort_nat::plus(nat(), nat()));
2167 result.push_back(sort_nat::gte_subtract_with_borrow());
2168 result.push_back(sort_nat::times(nat(), nat()));
2169 result.push_back(sort_nat::div());
2170 result.push_back(sort_nat::mod());
2171 result.push_back(sort_nat::exp(sort_pos::pos(), nat()));
2172 result.push_back(sort_nat::exp(nat(), nat()));
2173 result.push_back(sort_nat::even());
2174 result.push_back(sort_nat::monus());
2175 result.push_back(sort_nat::swap_zero());
2176 result.push_back(sort_nat::swap_zero_add());
2177 result.push_back(sort_nat::swap_zero_min());
2178 result.push_back(sort_nat::swap_zero_monus());
2179 result.push_back(sort_nat::sqrt());
2180 result.push_back(sort_nat::sqrt_nat_aux_func());
2181 result.push_back(sort_nat::first());
2182 result.push_back(sort_nat::last());
2183 result.push_back(sort_nat::divmod());
2184 result.push_back(sort_nat::generalised_divmod());
2185 result.push_back(sort_nat::doubly_generalised_divmod());
2197 implementation_map result;
2209 return atermpp::down_cast<application>(e)[0];
2221 return atermpp::down_cast<application>(e)[0];
2233 return atermpp::down_cast<application>(e)[1];
2245 return atermpp::down_cast<application>(e)[0];
2257 return atermpp::down_cast<application>(e)[1];
2269 return atermpp::down_cast<application>(e)[2];
2281 return atermpp::down_cast<application>(e)[3];
2298 data_equation_vector result;
2299 result.emplace_back(variable_list({vp}), equal_to(c0(), cnat(vp)), sort_bool::false_());
2300 result.emplace_back(variable_list({vp}), equal_to(cnat(vp), c0()), sort_bool::false_());
2301 result.emplace_back(variable_list({vp, vq}), equal_to(cnat(vp), cnat(vq)), equal_to(vp, vq));
2302 result.emplace_back(variable_list({vn}), less(vn, c0()), sort_bool::false_());
2303 result.emplace_back(variable_list({vp}), less(c0(), cnat(vp)), sort_bool::true_());
2304 result.emplace_back(variable_list({vp, vq}), less(cnat(vp), cnat(vq)), less(vp, vq));
2305 result.emplace_back(variable_list({vn}), less_equal(c0(), vn), sort_bool::true_());
2306 result.emplace_back(variable_list({vp}), less_equal(cnat(vp), c0()), sort_bool::false_());
2307 result.emplace_back(variable_list({vp, vq}), less_equal(cnat(vp), cnat(vq)), less_equal(vp, vq));
2308 result.emplace_back(variable_list({vp}), pos2nat(vp), cnat(vp));
2309 result.emplace_back(variable_list({vp}), nat2pos(cnat(vp)), vp);
2310 result.emplace_back(variable_list({vp}), maximum(vp, c0()), vp);
2311 result.emplace_back(variable_list({vp, vq}), maximum(vp, cnat(vq)), if_(less_equal(vp, vq), vq, vp));
2312 result.emplace_back(variable_list({vp}), maximum(c0(), vp), vp);
2313 result.emplace_back(variable_list({vp, vq}), maximum(cnat(vp), vq), if_(less_equal(vp, vq), vq, vp));
2314 result.emplace_back(variable_list({vm, vn}), maximum(vm, vn), if_(less_equal(vm, vn), vn, vm));
2315 result.emplace_back(variable_list({vm, vn}), minimum(vm, vn), if_(less_equal(vm, vn), vm, vn));
2316 result.emplace_back(variable_list(), succ(c0()), sort_pos::c1());
2317 result.emplace_back(variable_list({vp}), succ(cnat(vp)), succ(vp));
2318 result.emplace_back(variable_list(), pred(sort_pos::c1()), c0());
2319 result.emplace_back(variable_list({vb, vp}), pred(sort_pos::cdub(vb, vp)), cnat(if_(vb, sort_pos::cdub(sort_bool::false_(), vp), dubsucc(pred(vp)))));
2320 result.emplace_back(variable_list(), dubsucc(c0()), sort_pos::c1());
2321 result.emplace_back(variable_list({vp}), dubsucc(cnat(vp)), sort_pos::cdub(sort_bool::true_(), vp));
2322 result.emplace_back(variable_list(), dub(sort_bool::false_(), c0()), c0());
2323 result.emplace_back(variable_list(), dub(sort_bool::true_(), c0()), cnat(sort_pos::c1()));
2324 result.emplace_back(variable_list({vb, vp}), dub(vb, cnat(vp)), cnat(sort_pos::cdub(vb, vp)));
2325 result.emplace_back(variable_list({vp}), plus(vp, c0()), vp);
2326 result.emplace_back(variable_list({vp, vq}), plus(vp, cnat(vq)), sort_pos::add_with_carry(sort_bool::false_(), vp, vq));
2327 result.emplace_back(variable_list({vp}), plus(c0(), vp), vp);
2328 result.emplace_back(variable_list({vp, vq}), plus(cnat(vp), vq), sort_pos::add_with_carry(sort_bool::false_(), vp, vq));
2329 result.emplace_back(variable_list({vn}), plus(c0(), vn), vn);
2330 result.emplace_back(variable_list({vn}), plus(vn, c0()), vn);
2331 result.emplace_back(variable_list({vp, vq}), plus(cnat(vp), cnat(vq)), cnat(sort_pos::add_with_carry(sort_bool::false_(), vp, vq)));
2332 result.emplace_back(variable_list({vp}), gte_subtract_with_borrow(sort_bool::false_(), vp, sort_pos::c1()), pred(vp));
2333 result.emplace_back(variable_list({vp}), gte_subtract_with_borrow(sort_bool::true_(), vp, sort_pos::c1()), pred(nat2pos(pred(vp))));
2334 result.emplace_back(variable_list({vb, vc, vp, vq}), gte_subtract_with_borrow(vb, sort_pos::cdub(vc, vp), sort_pos::cdub(vc, vq)), dub(vb, gte_subtract_with_borrow(vb, vp, vq)));
2335 result.emplace_back(variable_list({vb, vp, vq}), gte_subtract_with_borrow(vb, sort_pos::cdub(sort_bool::false_(), vp), sort_pos::cdub(sort_bool::true_(), vq)), dub(sort_bool::not_(vb), gte_subtract_with_borrow(sort_bool::true_(), vp, vq)));
2336 result.emplace_back(variable_list({vb, vp, vq}), gte_subtract_with_borrow(vb, sort_pos::cdub(sort_bool::true_(), vp), sort_pos::cdub(sort_bool::false_(), vq)), dub(sort_bool::not_(vb), gte_subtract_with_borrow(sort_bool::false_(), vp, vq)));
2337 result.emplace_back(variable_list({vn}), times(c0(), vn), c0());
2338 result.emplace_back(variable_list({vn}), times(vn, c0()), c0());
2339 result.emplace_back(variable_list({vp, vq}), times(cnat(vp), cnat(vq)), cnat(times(vp, vq)));
2340 result.emplace_back(variable_list({vp}), exp(vp, c0()), sort_pos::c1());
2341 result.emplace_back(variable_list({vp}), exp(vp, cnat(sort_pos::c1())), vp);
2342 result.emplace_back(variable_list({vp, vq}), exp(vp, cnat(sort_pos::cdub(sort_bool::false_(), vq))), exp(times(vp, vp), cnat(vq)));
2343 result.emplace_back(variable_list({vp, vq}), exp(vp, cnat(sort_pos::cdub(sort_bool::true_(), vq))), times(vp, exp(times(vp, vp), cnat(vq))));
2344 result.emplace_back(variable_list({vn}), exp(vn, c0()), cnat(sort_pos::c1()));
2345 result.emplace_back(variable_list({vp}), exp(c0(), cnat(vp)), c0());
2346 result.emplace_back(variable_list({vn, vp}), exp(cnat(vp), vn), cnat(exp(vp, vn)));
2347 result.emplace_back(variable_list(), even(c0()), sort_bool::true_());
2348 result.emplace_back(variable_list(), even(cnat(sort_pos::c1())), sort_bool::false_());
2349 result.emplace_back(variable_list({vb, vp}), even(cnat(sort_pos::cdub(vb, vp))), sort_bool::not_(vb));
2350 result.emplace_back(variable_list({vp}), div(c0(), vp), c0());
2351 result.emplace_back(variable_list({vp, vq}), div(cnat(vp), vq), first(divmod(vp, vq)));
2352 result.emplace_back(variable_list({vp}), mod(c0(), vp), c0());
2353 result.emplace_back(variable_list({vp, vq}), mod(cnat(vp), vq), last(divmod(vp, vq)));
2354 result.emplace_back(variable_list({vn}), monus(c0(), vn), c0());
2355 result.emplace_back(variable_list({vn}), monus(vn, c0()), vn);
2356 result.emplace_back(variable_list({vp, vq}), monus(cnat(vp), cnat(vq)), gte_subtract_with_borrow(sort_bool::false_(), vp, vq));
2357 result.emplace_back(variable_list({vm}), swap_zero(vm, c0()), vm);
2358 result.emplace_back(variable_list({vn}), swap_zero(c0(), vn), vn);
2359 result.emplace_back(variable_list({vp}), swap_zero(cnat(vp), cnat(vp)), c0());
2360 result.emplace_back(variable_list({vp, vq}), not_equal_to(vp, vq), swap_zero(cnat(vp), cnat(vq)), cnat(vq));
2361 result.emplace_back(variable_list({vm, vn}), swap_zero_add(c0(), c0(), vm, vn), plus(vm, vn));
2362 result.emplace_back(variable_list({vm, vp}), swap_zero_add(cnat(vp), c0(), vm, c0()), vm);
2363 result.emplace_back(variable_list({vm, vp, vq}), swap_zero_add(cnat(vp), c0(), vm, cnat(vq)), swap_zero(cnat(vp), plus(swap_zero(cnat(vp), vm), cnat(vq))));
2364 result.emplace_back(variable_list({vn, vp}), swap_zero_add(c0(), cnat(vp), c0(), vn), vn);
2365 result.emplace_back(variable_list({vn, vp, vq}), swap_zero_add(c0(), cnat(vp), cnat(vq), vn), swap_zero(cnat(vp), plus(cnat(vq), swap_zero(cnat(vp), vn))));
2366 result.emplace_back(variable_list({vm, vn, vp, vq}), swap_zero_add(cnat(vp), cnat(vq), vm, vn), swap_zero(plus(cnat(vp), cnat(vq)), plus(swap_zero(cnat(vp), vm), swap_zero(cnat(vq), vn))));
2367 result.emplace_back(variable_list({vm, vn}), swap_zero_min(c0(), c0(), vm, vn), minimum(vm, vn));
2368 result.emplace_back(variable_list({vm, vp}), swap_zero_min(cnat(vp), c0(), vm, c0()), c0());
2369 result.emplace_back(variable_list({vm, vp, vq}), swap_zero_min(cnat(vp), c0(), vm, cnat(vq)), minimum(swap_zero(cnat(vp), vm), cnat(vq)));
2370 result.emplace_back(variable_list({vn, vp}), swap_zero_min(c0(), cnat(vp), c0(), vn), c0());
2371 result.emplace_back(variable_list({vn, vp, vq}), swap_zero_min(c0(), cnat(vp), cnat(vq), vn), minimum(cnat(vq), swap_zero(cnat(vp), vn)));
2372 result.emplace_back(variable_list({vm, vn, vp, vq}), swap_zero_min(cnat(vp), cnat(vq), vm, vn), swap_zero(minimum(cnat(vp), cnat(vq)), minimum(swap_zero(cnat(vp), vm), swap_zero(cnat(vq), vn))));
2373 result.emplace_back(variable_list({vm, vn}), swap_zero_monus(c0(), c0(), vm, vn), monus(vm, vn));
2374 result.emplace_back(variable_list({vm, vp}), swap_zero_monus(cnat(vp), c0(), vm, c0()), vm);
2375 result.emplace_back(variable_list({vm, vp, vq}), swap_zero_monus(cnat(vp), c0(), vm, cnat(vq)), swap_zero(cnat(vp), monus(swap_zero(cnat(vp), vm), cnat(vq))));
2376 result.emplace_back(variable_list({vn, vp}), swap_zero_monus(c0(), cnat(vp), c0(), vn), c0());
2377 result.emplace_back(variable_list({vn, vp, vq}), swap_zero_monus(c0(), cnat(vp), cnat(vq), vn), monus(cnat(vq), swap_zero(cnat(vp), vn)));
2378 result.emplace_back(variable_list({vm, vn, vp, vq}), swap_zero_monus(cnat(vp), cnat(vq), vm, vn), swap_zero(monus(cnat(vp), cnat(vq)), monus(swap_zero(cnat(vp), vm), swap_zero(cnat(vq), vn))));
2379 result.emplace_back(variable_list(), sqrt(c0()), c0());
2380 result.emplace_back(variable_list({vp}), sqrt(cnat(vp)), sqrt_nat_aux_func(cnat(vp), c0(), sort_pos::powerlog2_pos(vp)));
2381 result.emplace_back(variable_list({vm, vn}), sqrt_nat_aux_func(vn, vm, sort_pos::c1()), if_(less_equal(vn, vm), c0(), cnat(sort_pos::c1())));
2382 result.emplace_back(variable_list({vb, vm, vn, vp}), sqrt_nat_aux_func(vn, vm, sort_pos::cdub(vb, vp)), if_(greater(times(plus(cnat(sort_pos::cdub(vb, vp)), vm), cnat(sort_pos::cdub(vb, vp))), vn), sqrt_nat_aux_func(vn, vm, vp), plus(cnat(sort_pos::cdub(vb, vp)), sqrt_nat_aux_func(monus(vn, times(plus(cnat(sort_pos::cdub(vb, vp)), vm), cnat(sort_pos::cdub(vb, vp)))), plus(vm, cnat(sort_pos::cdub(sort_bool::false_(), sort_pos::cdub(vb, vp)))), vp))));
2383 result.emplace_back(variable_list({vm, vn, vu, vv}), equal_to(cpair(vm, vn), cpair(vu, vv)), sort_bool::and_(equal_to(vm, vu), equal_to(vn, vv)));
2384 result.emplace_back(variable_list({vm, vn, vu, vv}), less(cpair(vm, vn), cpair(vu, vv)), sort_bool::or_(less(vm, vu), sort_bool::and_(equal_to(vm, vu), less(vn, vv))));
2385 result.emplace_back(variable_list({vm, vn, vu, vv}), less_equal(cpair(vm, vn), cpair(vu, vv)), sort_bool::or_(less(vm, vu), sort_bool::and_(equal_to(vm, vu), less_equal(vn, vv))));
2386 result.emplace_back(variable_list({vm, vn}), first(cpair(vm, vn)), vm);
2387 result.emplace_back(variable_list({vm, vn}), last(cpair(vm, vn)), vn);
2388 result.emplace_back(variable_list(), divmod(sort_pos::c1(), sort_pos::c1()), cpair(cnat(sort_pos::c1()), c0()));
2389 result.emplace_back(variable_list({vb, vp}), divmod(sort_pos::c1(), sort_pos::cdub(vb, vp)), cpair(c0(), cnat(sort_pos::c1())));
2390 result.emplace_back(variable_list({vb, vp, vq}), divmod(sort_pos::cdub(vb, vp), vq), generalised_divmod(divmod(vp, vq), vb, vq));
2391 result.emplace_back(variable_list({vb, vm, vn, vp}), generalised_divmod(cpair(vm, vn), vb, vp), doubly_generalised_divmod(dub(vb, vn), vm, vp));
2392 result.emplace_back(variable_list({vn, vp}), doubly_generalised_divmod(c0(), vn, vp), cpair(dub(sort_bool::false_(), vn), c0()));
2393 result.emplace_back(variable_list({vn, vp, vq}), less(vp, vq), doubly_generalised_divmod(cnat(vp), vn, vq), cpair(dub(sort_bool::false_(), vn), cnat(vp)));
2394 result.emplace_back(variable_list({vn, vp, vq}), less_equal(vq, vp), doubly_generalised_divmod(cnat(vp), vn, vq), cpair(dub(sort_bool::true_(), vn), gte_subtract_with_borrow(sort_bool::false_(), vp, vq)));
aterm & operator=(const aterm &other) noexcept=default
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
A unordered_map class in which aterms can be stored.
apply_builder_arg1(const Arg1 &arg1)
apply_builder_arg2(const Arg1 &arg1, const Arg2 &arg2)
singleton_expression & operator=(singleton_expression &&)=delete
singleton_expression & operator=(const singleton_expression &)=delete
singleton_expression(singleton_expression &&)=delete
singleton_expression(const singleton_expression &)=delete
singleton_expression()=default
static const Expression & instance()
update_apply_builder_arg1(const Function &f, const Arg1 &arg1)
void apply(T &result, const argument_type &x)
An abstraction expression.
const variable_list & variables() const
abstraction(const atermpp::aterm &term)
Constructor.
abstraction(const binder_type &binding_operator, const variable_list &variables, const data_expression &body)
Constructor.
abstraction(const abstraction &) noexcept=default
Move semantics.
abstraction(const binder_type &binding_operator, const Container &variables, const data_expression &body, typename atermpp::enable_if_container< Container, variable >::type *=nullptr)
Constructor.
abstraction & operator=(abstraction &&) noexcept=default
const data_expression & body() const
abstraction(abstraction &&) noexcept=default
abstraction()
Default constructor.
const binder_type & binding_operator() const
abstraction & operator=(const abstraction &) noexcept=default
alias()
\brief Default constructor X3.
alias(const alias &) noexcept=default
Move semantics.
alias & operator=(const alias &) noexcept=default
alias(const basic_sort &name, const sort_expression &reference)
\brief Constructor Z12.
alias(alias &&) noexcept=default
alias(const atermpp::aterm &term)
alias & operator=(alias &&) noexcept=default
const basic_sort & name() const
const sort_expression & reference() const
\brief Assignment expression
\brief Assignment of a data expression to a variable
const data_expression & rhs() const
const variable & lhs() const
\brief Binder for bag comprehension
bag_comprehension_binder(const atermpp::aterm &term)
bag_comprehension_binder & operator=(const bag_comprehension_binder &) noexcept=default
bag_comprehension_binder(const bag_comprehension_binder &) noexcept=default
Move semantics.
bag_comprehension_binder()
\brief Default constructor X3.
bag_comprehension_binder(bag_comprehension_binder &&) noexcept=default
bag_comprehension_binder & operator=(bag_comprehension_binder &&) noexcept=default
universal quantification.
\brief Container type for bags
bag_container(const bag_container &) noexcept=default
Move semantics.
bag_container(bag_container &&) noexcept=default
bag_container & operator=(bag_container &&) noexcept=default
bag_container()
\brief Default constructor X3.
bag_container(const atermpp::aterm &term)
bag_container & operator=(const bag_container &) noexcept=default
basic_sort(const basic_sort &) noexcept=default
Move semantics.
basic_sort()
\brief Default constructor X3.
basic_sort & operator=(const basic_sort &) noexcept=default
const core::identifier_string & name() const
basic_sort(basic_sort &&) noexcept=default
basic_sort(const core::identifier_string &name)
\brief Constructor Z14.
basic_sort(const std::string &name)
\brief Constructor Z2.
basic_sort & operator=(basic_sort &&) noexcept=default
basic_sort(const atermpp::aterm &term)
binder_type()
\brief Default constructor X3.
binder_type(binder_type &&) noexcept=default
binder_type & operator=(const binder_type &) noexcept=default
binder_type & operator=(binder_type &&) noexcept=default
binder_type(const binder_type &) noexcept=default
Move semantics.
binder_type(const atermpp::aterm &term)
container_sort()
\brief Default constructor X3.
container_sort & operator=(container_sort &&) noexcept=default
container_sort(const container_sort &) noexcept=default
Move semantics.
container_sort(const container_type &container_name, const sort_expression &element_sort)
\brief Constructor Z14.
container_sort(container_sort &&) noexcept=default
container_sort & operator=(const container_sort &) noexcept=default
const container_type & container_name() const
const sort_expression & element_sort() const
container_sort(const atermpp::aterm &term)
container_type(container_type &&) noexcept=default
container_type(const atermpp::aterm &term)
container_type & operator=(const container_type &) noexcept=default
container_type & operator=(container_type &&) noexcept=default
container_type(const container_type &) noexcept=default
Move semantics.
container_type()
\brief Default constructor X3.
data_equation(const atermpp::aterm &term)
data_equation()
\brief Default constructor X3.
const data_expression & lhs() const
const data_expression & condition() const
data_equation & operator=(data_equation &&) noexcept=default
data_equation(const Container &variables, const data_expression &lhs, const data_expression &rhs, typename atermpp::enable_if_container< Container, variable >::type *=nullptr)
Constructor.
const data_expression & rhs() const
data_equation(data_equation &&) noexcept=default
data_equation(const variable_list &variables, const data_expression &condition, const data_expression &lhs, const data_expression &rhs)
\brief Constructor Z12.
const variable_list & variables() const
data_equation & operator=(const data_equation &) noexcept=default
data_equation(const data_expression &lhs, const data_expression &rhs)
Constructor.
data_expression & operator=(const data_expression &) noexcept=default
application operator()(const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4) const
Apply a data expression to four data expressions.
application operator()(const data_expression &e1, const data_expression &e2, const data_expression &e3) const
Apply a data expression to three data expressions.
data_expression(const atermpp::aterm &term)
data_expression()
\brief Default constructor X3.
application operator()(const data_expression &e1, const data_expression &e2) const
Apply a data expression to two data expressions.
data_expression & operator=(data_expression &&) noexcept=default
sort_expression sort() const
Returns the sort of the data expression.
const_iterator end() const
application operator()(const data_expression &e) const
Apply a data expression to a data expression.
data_expression(const data_expression &) noexcept=default
Move semantics.
data_expression(data_expression &&) noexcept=default
const_iterator begin() const
bool is_default_data_expression() const
A function to efficiently determine whether a data expression is made by the default constructor.
application operator()(const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4, const data_expression &e5) const
Apply a data expression to five data expressions.
application operator()(const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4, const data_expression &e5, const data_expression &e6) const
Apply a data expression to six data expressions.
\brief Binder for existential quantification
exists_binder(const exists_binder &) noexcept=default
Move semantics.
exists_binder & operator=(exists_binder &&) noexcept=default
exists_binder(exists_binder &&) noexcept=default
exists_binder & operator=(const exists_binder &) noexcept=default
exists_binder()
\brief Default constructor X3.
exists_binder(const atermpp::aterm &term)
existential quantification.
\brief Container type for finite bags
fbag_container & operator=(const fbag_container &) noexcept=default
fbag_container()
\brief Default constructor X3.
fbag_container(const fbag_container &) noexcept=default
Move semantics.
fbag_container & operator=(fbag_container &&) noexcept=default
fbag_container(const atermpp::aterm &term)
fbag_container(fbag_container &&) noexcept=default
\brief Binder for universal quantification
forall_binder(const forall_binder &) noexcept=default
Move semantics.
forall_binder & operator=(forall_binder &&) noexcept=default
forall_binder(const atermpp::aterm &term)
forall_binder()
\brief Default constructor X3.
forall_binder(forall_binder &&) noexcept=default
forall_binder & operator=(const forall_binder &) noexcept=default
universal quantification.
forall(forall &&) noexcept=default
forall & operator=(const forall &) noexcept=default
forall(const Container &variables, const data_expression &body, typename atermpp::enable_if_container< Container, variable >::type *=nullptr)
forall & operator=(forall &&) noexcept=default
forall(const forall &) noexcept=default
Move semantics.
\brief Container type for finite sets
fset_container(fset_container &&) noexcept=default
fset_container(const fset_container &) noexcept=default
Move semantics.
fset_container(const atermpp::aterm &term)
fset_container()
\brief Default constructor X3.
fset_container & operator=(fset_container &&) noexcept=default
fset_container & operator=(const fset_container &) noexcept=default
const sort_expression & codomain() const
function_sort()
\brief Default constructor X3.
function_sort(const sort_expression_list &domain, const sort_expression &codomain)
\brief Constructor Z14.
function_sort & operator=(const function_sort &) noexcept=default
function_sort(const atermpp::aterm &term)
function_sort & operator=(function_sort &&) noexcept=default
function_sort(function_sort &&) noexcept=default
const sort_expression_list & domain() const
function_symbol(const core::identifier_string &name, const sort_expression &sort)
Constructor.
function_symbol(const function_symbol &) noexcept=default
Move semantics.
function_symbol & operator=(function_symbol &&) noexcept=default
function_symbol()
Default constructor.
function_symbol(function_symbol &&) noexcept=default
function_symbol(const atermpp::aterm &term)
Constructor.
const core::identifier_string & name() const
const sort_expression & sort() const
function_symbol & operator=(const function_symbol &) noexcept=default
function_symbol(const std::string &name, const sort_expression &sort)
Constructor.
\brief Binder for lambda abstraction
lambda_binder & operator=(lambda_binder &&) noexcept=default
lambda_binder(const atermpp::aterm &term)
lambda_binder()
\brief Default constructor X3.
lambda_binder(lambda_binder &&) noexcept=default
lambda_binder & operator=(const lambda_binder &) noexcept=default
lambda_binder(const lambda_binder &) noexcept=default
Move semantics.
\brief Container type for lists
list_container(list_container &&) noexcept=default
list_container()
\brief Default constructor X3.
list_container & operator=(list_container &&) noexcept=default
list_container & operator=(const list_container &) noexcept=default
list_container(const list_container &) noexcept=default
Move semantics.
list_container(const atermpp::aterm &term)
\brief Binder for set comprehension
set_comprehension_binder(const atermpp::aterm &term)
set_comprehension_binder & operator=(set_comprehension_binder &&) noexcept=default
set_comprehension_binder & operator=(const set_comprehension_binder &) noexcept=default
set_comprehension_binder()
\brief Default constructor X3.
set_comprehension_binder(set_comprehension_binder &&) noexcept=default
set_comprehension_binder(const set_comprehension_binder &) noexcept=default
Move semantics.
universal quantification.
\brief Container type for sets
set_container()
\brief Default constructor X3.
set_container(const set_container &) noexcept=default
Move semantics.
set_container(set_container &&) noexcept=default
set_container & operator=(set_container &&) noexcept=default
set_container & operator=(const set_container &) noexcept=default
set_container(const atermpp::aterm &term)
sort_expression & operator=(const sort_expression &) noexcept=default
sort_expression(const sort_expression &) noexcept=default
Move semantics.
sort_expression & operator=(sort_expression &&) noexcept=default
const sort_expression & target_sort() const
Returns the target sort of this expression.
sort_expression(sort_expression &&) noexcept=default
sort_expression()
\brief Default constructor X3.
sort_expression(const atermpp::aterm &term)
\brief An argument of a constructor of a structured sort
const core::identifier_string & name() const
const sort_expression & sort() const
\brief A constructor for a structured sort
const core::identifier_string & name() const
const core::identifier_string & recogniser() const
const structured_sort_constructor_argument_list & arguments() const
const structured_sort_constructor_list & constructors() const
\brief An untyped parameter
const core::identifier_string & name() const
const data_expression_list & arguments() const
\brief Assignment of a data expression to a string
const core::identifier_string & lhs() const
const data_expression & rhs() const
\brief An untyped identifier
\brief Multiple possible sorts
const sort_expression_list & sorts() const
\brief Binder for untyped set or bag comprehension
untyped_set_or_bag_comprehension_binder(untyped_set_or_bag_comprehension_binder &&) noexcept=default
untyped_set_or_bag_comprehension_binder(const atermpp::aterm &term)
untyped_set_or_bag_comprehension_binder()
\brief Default constructor X3.
untyped_set_or_bag_comprehension_binder(const untyped_set_or_bag_comprehension_binder &) noexcept=default
Move semantics.
untyped_set_or_bag_comprehension_binder & operator=(const untyped_set_or_bag_comprehension_binder &) noexcept=default
untyped_set_or_bag_comprehension_binder & operator=(untyped_set_or_bag_comprehension_binder &&) noexcept=default
universal quantification.
\brief Untyped sort variable
\brief Unknown sort expression
untyped_sort & operator=(const untyped_sort &) noexcept=default
untyped_sort(const atermpp::aterm &term)
untyped_sort(const untyped_sort &) noexcept=default
Move semantics.
untyped_sort & operator=(untyped_sort &&) noexcept=default
untyped_sort(untyped_sort &&) noexcept=default
untyped_sort()
\brief Default constructor X3.
variable(const variable &) noexcept=default
Move semantics.
variable(const std::string &name, const sort_expression &sort)
Constructor.
variable(variable &&) noexcept=default
variable()
Default constructor.
const core::identifier_string & name() const
variable & operator=(variable &&) noexcept=default
const sort_expression & sort() const
variable & operator=(const variable &) noexcept=default
variable(const core::identifier_string &name, const sort_expression &sort)
Constructor.
variable(const atermpp::aterm &term)
Constructor.
\brief A where expression
const data_expression & body() const
const assignment_expression_list & declarations() const
D_ParserTables parser_tables_mcrl2
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
const aterm_string & empty_string()
Returns the empty aterm_string.
bool check_term_PREqnSpec(const Term &t)
bool check_term_MapSpec(const Term &t)
bool check_term_PBESTrue(const Term &t)
bool check_term_Seq(const Term &t)
bool check_term_DataVarIdInit(const Term &t)
bool check_rule_DataVarIdInit(const Term &t)
bool check_term_Action(const Term &t)
bool check_term_PRESOr(const Term &t)
bool check_term_SortId(const Term &t)
bool check_term_Sum(const Term &t)
bool check_term_Whr(const Term &t)
bool check_term_ActAt(const Term &t)
bool check_rule_WhrDecl(const Term &t)
bool check_term_StateInfimum(const Term &t)
bool check_term_CommExpr(const Term &t)
bool check_rule_ActSpec(const Term &t)
bool check_term_UntypedSortUnknown(const Term &t)
bool check_term_ActFalse(const Term &t)
bool check_term_ActId(const Term &t)
bool check_term_RegTrans(const Term &t)
bool check_rule_Distribution(const Term &t)
bool check_term_LinearProcessSummand(const Term &t)
bool check_rule_Number(const Term &t)
bool check_term_StateFalse(const Term &t)
bool check_term_argument(const Term &t, CheckFunction f)
bool check_term_UntypedSortVariable(const Term &t)
bool check_rule_ActFrm(const Term &t)
bool check_term_MultAct(const Term &t)
bool check_term_Tau(const Term &t)
bool check_rule_ActId(const Term &t)
bool check_term_UntypedProcessAssignment(const Term &t)
bool check_term_StateDelayTimed(const Term &t)
bool check_term_Delta(const Term &t)
bool check_rule_PBEqn(const Term &t)
bool check_rule_Action(const Term &t)
bool check_term_PRESTrue(const Term &t)
bool check_rule_ActionRenameSpec(const Term &t)
bool check_rule_FixPoint(const Term &t)
bool check_list_argument(const Term &t, CheckFunction f, unsigned int minimum_size)
bool check_rule_DataEqn(const Term &t)
bool check_rule_LinProcSpec(const Term &t)
bool check_term_PRES(const Term &t)
bool check_rule_SortDecl(const Term &t)
bool check_rule_RenameExpr(const Term &t)
bool check_term_ActImp(const Term &t)
bool check_term_Allow(const Term &t)
bool check_term_Choice(const Term &t)
bool check_term_LinProcSpec(const Term &t)
bool check_rule_SortId(const Term &t)
bool check_term_PBESNot(const Term &t)
bool check_term_Sync(const Term &t)
bool check_rule_String(const Term &t)
bool check_term_ActMultAct(const Term &t)
bool check_term_PRESCondEq(const Term &t)
bool check_term_RegTransOrNil(const Term &t)
bool check_term_GlobVarSpec(const Term &t)
bool check_term_StateSupremum(const Term &t)
bool check_term_Mu(const Term &t)
bool check_rule_BindingOperator(const Term &t)
bool check_rule_CommExpr(const Term &t)
bool check_term_UntypedIdentifierAssignment(const Term &t)
bool check_term_RegNil(const Term &t)
bool check_term_DataEqn(const Term &t)
bool check_term_UntypedIdentifier(const Term &t)
bool check_term_StateMust(const Term &t)
bool check_rule_StructProj(const Term &t)
bool check_rule_ConsSpec(const Term &t)
bool check_term_ProcEqnSpec(const Term &t)
bool check_term_LMerge(const Term &t)
bool check_term_ConsSpec(const Term &t)
bool check_rule_SortConsType(const Term &t)
bool check_term_SortSet(const Term &t)
bool check_rule_SortSpec(const Term &t)
bool check_rule_PRES(const Term &t)
bool check_term_Binder(const Term &t)
bool check_term_SortArrow(const Term &t)
bool check_rule_DataExpr(const Term &t)
bool check_term_StateSum(const Term &t)
bool check_term_DataVarId(const Term &t)
bool check_term_UntypedDataParameter(const Term &t)
bool check_term_PRESConstantMultiply(const Term &t)
bool check_term_PBESForall(const Term &t)
bool check_rule_DataEqnSpec(const Term &t)
bool check_term_ActTrue(const Term &t)
bool check_rule_MultActOrDelta(const Term &t)
bool check_rule_LinearProcess(const Term &t)
bool check_term_ProcessInit(const Term &t)
bool check_term_BagComp(const Term &t)
bool check_rule_ProcVarId(const Term &t)
bool check_term_SortFBag(const Term &t)
bool check_rule_PRExpr(const Term &t)
bool check_term_StateYaled(const Term &t)
bool check_term_MultActName(const Term &t)
bool check_term_Nu(const Term &t)
bool check_term_PBESExists(const Term &t)
bool check_term_BInit(const Term &t)
bool check_term_ProcessAssignment(const Term &t)
bool check_term_Lambda(const Term &t)
bool check_term_StateMay(const Term &t)
bool check_term_PRESAnd(const Term &t)
bool check_term_StateVar(const Term &t)
bool check_term_SortRef(const Term &t)
bool check_term_PRESEqInf(const Term &t)
bool check_rule_StateFrm(const Term &t)
bool check_term_ProcSpec(const Term &t)
bool check_term_SortBag(const Term &t)
bool check_term_ProcEqn(const Term &t)
bool check_rule_MultActName(const Term &t)
bool check_term_StatePlus(const Term &t)
bool check_term_TimedMultAct(const Term &t)
bool check_term_PRESInfimum(const Term &t)
bool check_term_Rename(const Term &t)
bool check_rule_MapSpec(const Term &t)
bool check_rule_ProcEqnSpec(const Term &t)
bool check_rule_ProcEqn(const Term &t)
bool check_rule_PREqn(const Term &t)
bool check_term_StateYaledTimed(const Term &t)
bool check_term_StateImp(const Term &t)
bool check_term_StateConstantMultiply(const Term &t)
bool check_rule_DataVarId(const Term &t)
bool check_rule_UntypedIdentifierAssignment(const Term &t)
bool check_term_SortCons(const Term &t)
bool check_term_PRESSupremum(const Term &t)
bool check_term_PropVarInst(const Term &t)
bool check_term_UntypedRegFrm(const Term &t)
bool check_rule_PBES(const Term &t)
bool check_term_IfThen(const Term &t)
bool check_term_ActForall(const Term &t)
bool check_term_StateTrue(const Term &t)
bool check_term_SortSpec(const Term &t)
bool check_term_StateOr(const Term &t)
bool check_term_Forall(const Term &t)
bool check_term_UntypedSetBagComp(const Term &t)
bool check_term_LinearProcess(const Term &t)
bool check_term_PBInit(const Term &t)
bool check_rule_ProcExpr(const Term &t)
bool check_term_Comm(const Term &t)
bool check_term_StateAnd(const Term &t)
bool check_term_PBESOr(const Term &t)
bool check_term_StateMinus(const Term &t)
bool check_term_RenameExpr(const Term &t)
bool check_term_ActExists(const Term &t)
bool check_term_LinearProcessInit(const Term &t)
bool check_rule_SortExpr(const Term &t)
bool check_term_PREqn(const Term &t)
bool check_term_UntypedMultiAction(const Term &t)
bool check_term_PBES(const Term &t)
bool check_rule_GlobVarSpec(const Term &t)
bool check_rule_ActionRenameRuleRHS(const Term &t)
bool check_term_ActAnd(const Term &t)
bool check_rule_DataSpec(const Term &t)
bool check_term_AtTime(const Term &t)
bool check_term_ActSpec(const Term &t)
bool check_term_StateMu(const Term &t)
bool check_rule_LinearProcessSummand(const Term &t)
bool check_rule_StringOrEmpty(const Term &t)
bool check_term_StateNu(const Term &t)
bool check_term_PBEqn(const Term &t)
bool check_term_PRESSum(const Term &t)
bool check_term_ActionRenameSpec(const Term &t)
bool check_term_StateDelay(const Term &t)
bool check_rule_PBEqnSpec(const Term &t)
bool check_term_SortStruct(const Term &t)
bool check_rule_RegFrm(const Term &t)
bool check_rule_ActionRenameRules(const Term &t)
bool check_term_StochasticOperator(const Term &t)
bool check_rule_ProcSpec(const Term &t)
bool check_term_PBESImp(const Term &t)
bool gsIsDataAppl(const atermpp::aterm &Term)
bool check_rule_PropVarDecl(const Term &t)
bool check_term_StateForall(const Term &t)
bool check_term_PRInit(const Term &t)
bool check_term_DataEqnSpec(const Term &t)
bool check_term_StructCons(const Term &t)
bool check_rule_ParamIdOrAction(const Term &t)
bool check_term_ProcVarId(const Term &t)
bool check_term_PRESConstantMultiplyAlt(const Term &t)
bool check_term_DataSpec(const Term &t)
bool check_term_Process(const Term &t)
bool gsIsDataAppl_no_check(const atermpp::aterm &Term)
bool check_term_ActionRenameRule(const Term &t)
bool check_rule_ActionRenameRule(const Term &t)
bool check_rule_PBExpr(const Term &t)
bool check_term_StateNot(const Term &t)
bool check_term_PRESFalse(const Term &t)
bool check_rule_UntypedMultiAction(const Term &t)
bool check_term_OpId(const Term &t)
bool check_term_Distribution(const Term &t)
bool check_term_ActNot(const Term &t)
bool check_term_PRESEqNInf(const Term &t)
bool check_term_UntypedSortsPossible(const Term &t)
bool check_rule_UntypedDataParameter(const Term &t)
bool check_term_Hide(const Term &t)
bool check_rule_PREqnSpec(const Term &t)
bool check_rule_TimedMultAct(const Term &t)
bool check_term_Merge(const Term &t)
bool check_rule_PropVarInst(const Term &t)
bool check_term_Exists(const Term &t)
bool check_term_SetComp(const Term &t)
bool check_term_ActOr(const Term &t)
bool check_term_StructProj(const Term &t)
bool check_term_PRESMinus(const Term &t)
bool check_rule_MultAct(const Term &t)
bool check_term_SortList(const Term &t)
bool check_term_PBEqnSpec(const Term &t)
bool check_rule_LinearProcessInit(const Term &t)
bool check_rule_PBInit(const Term &t)
bool check_term_IfThenElse(const Term &t)
bool check_term_PBESAnd(const Term &t)
bool check_rule_ProcInit(const Term &t)
bool check_term_PBESFalse(const Term &t)
bool check_rule_StructCons(const Term &t)
bool check_term_PRESPlus(const Term &t)
bool check_rule_OpId(const Term &t)
bool check_term_PropVarDecl(const Term &t)
bool check_term_SortFSet(const Term &t)
bool check_term_PRESCondSm(const Term &t)
bool check_term_Block(const Term &t)
bool check_term_StateExists(const Term &t)
bool check_term_ActionRenameRules(const Term &t)
bool check_term_StateConstantMultiplyAlt(const Term &t)
bool check_term_DataAppl(const Term &t)
bool check_term_RegSeq(const Term &t)
bool check_term_PRESImp(const Term &t)
bool check_term_RegAlt(const Term &t)
bool check_rule_PRInit(const Term &t)
apply_builder< Builder > make_apply_builder()
update_apply_builder_arg1< Builder, Function, Arg1 > make_update_apply_builder_arg1(const Function &f)
void warn_and_or(const parse_node &)
Prints a warning for each occurrence of 'x && y || z' in the parse tree.
apply_builder_arg1< Builder, Arg1 > make_apply_builder_arg1(const Arg1 &arg1)
update_apply_builder< Builder, Function > make_update_apply_builder(const Function &f)
apply_builder_arg2< Builder, Arg1, Arg2 > make_apply_builder_arg2(const Arg1 &arg1, const Arg2 &arg2)
data_expression parse_data_expression(const std::string &text)
data_specification parse_data_specification_new(const std::string &text)
variable_list parse_variable_declaration_list(const std::string &text)
variable_list parse_variables(const std::string &text)
sort_expression parse_sort_expression(const std::string &text)
Namespace for system defined sort bag.
function_symbol fbag2fset(const sort_expression &s)
Constructor for function symbol @fbag2fset.
bool is_bag2set_application(const atermpp::aterm &e)
Recogniser for application of Bag2Set.
bool is_intersection_function_symbol(const atermpp::aterm &e)
Recogniser for function *.
void make_bool2nat_function(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @Bool2Nat_.
application difference(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol -.
const core::identifier_string & fbag2fset_name()
Generate identifier @fbag2fset.
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
bool is_min_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @min_.
function_symbol bag_fbag(const sort_expression &s)
Constructor for function symbol @bagfbag.
bool is_min_function_application(const atermpp::aterm &e)
Recogniser for application of @min_.
function_symbol monus_function(const sort_expression &s)
Constructor for function symbol @monus_.
const core::identifier_string & fbag_intersect_name()
Generate identifier @fbag_inter.
void make_bag2set(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol Bag2Set.
bool is_fbag_difference_function_symbol(const atermpp::aterm &e)
Recogniser for function @fbag_diff.
bool is_fbag_join_function_symbol(const atermpp::aterm &e)
Recogniser for function @fbag_join.
void make_count(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol count.
function_symbol_vector bag_generate_functions_code(const sort_expression &s)
Give all system defined mappings for bag.
application zero_function(const sort_expression &s, const data_expression &arg0)
Application of function symbol @zero_.
const core::identifier_string & bool2nat_function_name()
Generate identifier @Bool2Nat_.
void make_one_function(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @one_.
const data_expression & arg3(const data_expression &e)
Function for projecting out argument. arg3 from an application.
bool is_difference_application(const atermpp::aterm &e)
Recogniser for application of -.
function_symbol difference(const sort_expression &s, const sort_expression &s0, const sort_expression &s1)
const core::identifier_string & set2bag_name()
Generate identifier Set2Bag.
bool is_bag_fbag_application(const atermpp::aterm &e)
Recogniser for application of @bagfbag.
application fbag2fset(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @fbag2fset.
function_symbol_vector bag_generate_constructors_and_functions_code(const sort_expression &s)
Give all system defined mappings and constructors for bag.
void make_add_function(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @add_.
data_equation_vector bag_generate_equations_code(const sort_expression &s)
Give all system defined equations for bag.
bool is_fbag_difference_application(const atermpp::aterm &e)
Recogniser for application of @fbag_diff.
bool is_bag_fbag_function_symbol(const atermpp::aterm &e)
Recogniser for function @bagfbag.
const core::identifier_string & zero_function_name()
Generate identifier @zero_.
const core::identifier_string & add_function_name()
Generate identifier @add_.
application bag2set(const sort_expression &s, const data_expression &arg0)
Application of function symbol Bag2Set.
application in(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol in.
function_symbol_vector bag_mCRL2_usable_constructors(const sort_expression &s)
Give all defined constructors which can be used in mCRL2 specs for bag.
bool is_fbag2fset_function_symbol(const atermpp::aterm &e)
Recogniser for function @fbag2fset.
bool is_union_application(const atermpp::aterm &e)
Recogniser for application of +.
function_symbol bag2set(const sort_expression &s)
Constructor for function symbol Bag2Set.
bool is_monus_function_application(const atermpp::aterm &e)
Recogniser for application of @monus_.
const core::identifier_string & nat2bool_function_name()
Generate identifier @Nat2Bool_.
function_symbol intersection(const sort_expression &s, const sort_expression &s0, const sort_expression &s1)
bool is_zero_function_application(const atermpp::aterm &e)
Recogniser for application of @zero_.
const core::identifier_string & fbag_difference_name()
Generate identifier @fbag_diff.
void make_monus_function(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @monus_.
bool is_count_function_symbol(const atermpp::aterm &e)
Recogniser for function count.
function_symbol count(const sort_expression &, const sort_expression &s0, const sort_expression &s1)
function_symbol add_function(const sort_expression &s)
Constructor for function symbol @add_.
bool is_nat2bool_function_application(const atermpp::aterm &e)
Recogniser for application of @Nat2Bool_.
function_symbol fbag_intersect(const sort_expression &s)
Constructor for function symbol @fbag_inter.
void make_fbag_intersect(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @fbag_inter.
bool is_union_function_symbol(const atermpp::aterm &e)
Recogniser for function +.
void make_nat2bool_function(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @Nat2Bool_.
application bag_fbag(const sort_expression &s, const data_expression &arg0)
Application of function symbol @bagfbag.
bool is_fbag_intersect_application(const atermpp::aterm &e)
Recogniser for application of @fbag_inter.
bool is_in_application(const atermpp::aterm &e)
Recogniser for application of in.
function_symbol fbag_difference(const sort_expression &s)
Constructor for function symbol @fbag_diff.
bool is_in_function_symbol(const atermpp::aterm &e)
Recogniser for function in.
application bool2nat_function(const sort_expression &s, const data_expression &arg0)
Application of function symbol @Bool2Nat_.
bool is_bag_comprehension_function_symbol(const atermpp::aterm &e)
Recogniser for function @bagcomp.
void make_min_function(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @min_.
const core::identifier_string & min_function_name()
Generate identifier @min_.
bool is_set2bag_function_symbol(const atermpp::aterm &e)
Recogniser for function Set2Bag.
application union_(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
function_symbol_vector bag_mCRL2_usable_mappings(const sort_expression &s)
Give all system defined mappings that can be used in mCRL2 specs for bag.
bool is_nat2bool_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @Nat2Bool_.
application one_function(const sort_expression &s, const data_expression &arg0)
Application of function symbol @one_.
const core::identifier_string & monus_function_name()
Generate identifier @monus_.
const data_expression & arg4(const data_expression &e)
Function for projecting out argument. arg4 from an application.
bool is_add_function_application(const atermpp::aterm &e)
Recogniser for application of @add_.
void make_fbag2fset(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @fbag2fset.
void make_fbag_join(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @fbag_join.
function_symbol min_function(const sort_expression &s)
Constructor for function symbol @min_.
function_symbol set2bag(const sort_expression &s)
Constructor for function symbol Set2Bag.
const core::identifier_string & bag_fbag_name()
Generate identifier @bagfbag.
const core::identifier_string & bag2set_name()
Generate identifier Bag2Set.
const core::identifier_string & intersection_name()
Generate identifier *.
application nat2bool_function(const sort_expression &s, const data_expression &arg0)
Application of function symbol @Nat2Bool_.
void make_in(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol in.
application constructor(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @bag.
application fbag_intersect(const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @fbag_inter.
function_symbol bag_comprehension(const sort_expression &s)
Constructor for function symbol @bagcomp.
bool is_bag2set_function_symbol(const atermpp::aterm &e)
Recogniser for function Bag2Set.
implementation_map bag_cpp_implementable_constructors(const sort_expression &)
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
bool is_bool2nat_function_application(const atermpp::aterm &e)
Recogniser for application of @Bool2Nat_.
const core::identifier_string & fbag_join_name()
Generate identifier @fbag_join.
void make_intersection(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol *.
function_symbol fbag_join(const sort_expression &s)
Constructor for function symbol @fbag_join.
bool is_constructor_application(const atermpp::aterm &e)
Recogniser for application of @bag.
bool is_zero_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @zero_.
function_symbol constructor(const sort_expression &s)
Constructor for function symbol @bag.
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
const core::identifier_string & constructor_name()
Generate identifier @bag.
bool is_bag_comprehension_application(const atermpp::aterm &e)
Recogniser for application of @bagcomp.
bool is_set2bag_application(const atermpp::aterm &e)
Recogniser for application of Set2Bag.
function_symbol in(const sort_expression &, const sort_expression &s0, const sort_expression &s1)
void make_zero_function(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @zero_.
const data_expression & arg1(const data_expression &e)
Function for projecting out argument. arg1 from an application.
void make_bag_fbag(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @bagfbag.
function_symbol bool2nat_function(const sort_expression &s)
Constructor for function symbol @Bool2Nat_.
void make_set2bag(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol Set2Bag.
const core::identifier_string & union_name()
Generate identifier +.
bool is_fbag_intersect_function_symbol(const atermpp::aterm &e)
Recogniser for function @fbag_inter.
function_symbol union_(const sort_expression &s, const sort_expression &s0, const sort_expression &s1)
implementation_map bag_cpp_implementable_mappings(const sort_expression &)
Give all system defined mappings that are to be implemented in C++ code for bag.
bool is_intersection_application(const atermpp::aterm &e)
Recogniser for application of *.
void make_bag_comprehension(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol @bagcomp.
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
void make_fbag_difference(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @fbag_diff.
const core::identifier_string & count_name()
Generate identifier count.
void make_union_(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol +.
function_symbol nat2bool_function(const sort_expression &s)
Constructor for function symbol @Nat2Bool_.
bool is_one_function_application(const atermpp::aterm &e)
Recogniser for application of @one_.
application fbag_difference(const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @fbag_diff.
application add_function(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @add_.
const core::identifier_string & difference_name()
Generate identifier -.
application set2bag(const sort_expression &s, const data_expression &arg0)
Application of function symbol Set2Bag.
bool is_bool2nat_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @Bool2Nat_.
bool is_bag(const sort_expression &e)
Recogniser for sort expression Bag(s)
application monus_function(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @monus_.
container_sort bag(const sort_expression &s)
Constructor for sort expression Bag(S)
bool is_difference_function_symbol(const atermpp::aterm &e)
Recogniser for function -.
bool is_fbag2fset_application(const atermpp::aterm &e)
Recogniser for application of @fbag2fset.
application intersection(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol *.
const core::identifier_string & in_name()
Generate identifier in.
bool is_constructor_function_symbol(const atermpp::aterm &e)
Recogniser for function @bag.
const core::identifier_string & bag_comprehension_name()
Generate identifier @bagcomp.
bool is_count_application(const atermpp::aterm &e)
Recogniser for application of count.
void make_difference(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol -.
application fbag_join(const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Application of function symbol @fbag_join.
const core::identifier_string & one_function_name()
Generate identifier @one_.
bool is_add_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @add_.
void make_constructor(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @bag.
function_symbol zero_function(const sort_expression &s)
Constructor for function symbol @zero_.
bool is_one_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @one_.
application bag_comprehension(const sort_expression &s, const data_expression &arg0)
Application of function symbol @bagcomp.
function_symbol one_function(const sort_expression &s)
Constructor for function symbol @one_.
application count(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol count.
application min_function(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol @min_.
function_symbol_vector bag_generate_constructors_code(const sort_expression &s)
Give all system defined constructors for bag.
bool is_fbag_join_application(const atermpp::aterm &e)
Recogniser for application of @fbag_join.
bool is_monus_function_function_symbol(const atermpp::aterm &e)
Recogniser for function @monus_.
Namespace for system defined sort bool_.
bool is_bool(const sort_expression &e)
Recogniser for sort expression Bool.
const basic_sort & bool_()
Constructor for sort expression Bool.
application not_(const data_expression &arg0)
Application of function symbol !.
application and_(const data_expression &arg0, const data_expression &arg1)
Application of function symbol &&.
const function_symbol & false_()
Constructor for function symbol false.
const function_symbol & true_()
Constructor for function symbol true.
Namespace for system defined sort fbag.
container_sort fbag(const sort_expression &s)
Constructor for sort expression FBag(S)
Namespace for system defined sort fset.
container_sort fset(const sort_expression &s)
Constructor for sort expression FSet(S)
Namespace for system defined sort nat.
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.
application cpair(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @cPair.
bool is_cpair_application(const atermpp::aterm &e)
Recogniser for application of @cPair.
void make_plus(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol +.
const function_symbol & generalised_divmod()
Constructor for function symbol @gdivmod.
function_symbol maximum(const sort_expression &s0, const sort_expression &s1)
const core::identifier_string & sqrt_nat_aux_func_name()
Generate identifier @sqrt_nat.
bool is_pos2nat_function_symbol(const atermpp::aterm &e)
Recogniser for function Pos2Nat.
function_symbol succ(const sort_expression &s0)
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.
void make_generalised_divmod(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @gdivmod.
bool is_gte_subtract_with_borrow_function_symbol(const atermpp::aterm &e)
Recogniser for function @gtesubtb.
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_dub(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @dub.
void make_div(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol div.
application sqrt_nat_aux_func(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @sqrt_nat.
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.
application generalised_divmod(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @gdivmod.
bool is_swap_zero_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero.
bool is_cnat_application(const atermpp::aterm &e)
Recogniser for application of @cNat.
const core::identifier_string & mod_name()
Generate identifier mod.
const function_symbol & gte_subtract_with_borrow()
Constructor for function symbol @gtesubtb.
bool is_generalised_divmod_application(const atermpp::aterm &e)
Recogniser for application of @gdivmod.
bool is_div_application(const atermpp::aterm &e)
Recogniser for application of div.
void make_doubly_generalised_divmod(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @ggdivmod.
const core::identifier_string & swap_zero_min_name()
Generate identifier @swap_zero_min.
const function_symbol & divmod()
Constructor for function symbol @divmod.
bool is_pos2nat_application(const atermpp::aterm &e)
Recogniser for application of Pos2Nat.
const function_symbol & cnat()
Constructor for function symbol @cNat.
application dubsucc(const data_expression &arg0)
Application of function symbol @dubsucc.
void make_pred(data_expression &result, const data_expression &arg0)
Make an application of function symbol pred.
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)
application minimum(const data_expression &arg0, const data_expression &arg1)
Application of function symbol min.
const core::identifier_string & times_name()
Generate identifier *.
const function_symbol & dubsucc()
Constructor for function symbol @dubsucc.
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.
const function_symbol & cpair()
Constructor for function symbol @cPair.
const basic_sort & nat()
Constructor for sort expression Nat.
const core::identifier_string & nat_name()
application exp(const data_expression &arg0, const data_expression &arg1)
Application of function symbol exp.
const core::identifier_string & exp_name()
Generate identifier exp.
const function_symbol & swap_zero()
Constructor for function symbol @swap_zero.
application swap_zero(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @swap_zero.
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.
void make_cpair(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @cPair.
implementation_map nat_cpp_implementable_constructors()
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
bool is_nat(const sort_expression &e)
Recogniser for sort expression Nat.
bool is_doubly_generalised_divmod_function_symbol(const atermpp::aterm &e)
Recogniser for function @ggdivmod.
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.
void make_nat2pos(data_expression &result, const data_expression &arg0)
Make an application of function symbol Nat2Pos.
application first(const data_expression &arg0)
Application of function symbol @first.
const core::identifier_string & plus_name()
Generate identifier +.
const core::identifier_string & natpair_name()
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.
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 & sqrt()
Constructor for function symbol sqrt.
void make_dubsucc(data_expression &result, const data_expression &arg0)
Make an application of function symbol @dubsucc.
application even(const data_expression &arg0)
Application of function symbol @even.
const function_symbol & doubly_generalised_divmod()
Constructor for function symbol @ggdivmod.
const function_symbol & pred()
Constructor for function symbol pred.
void make_even(data_expression &result, const data_expression &arg0)
Make an application of function symbol @even.
void make_gte_subtract_with_borrow(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @gtesubtb.
bool is_sqrt_nat_aux_func_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_nat.
const function_symbol & even()
Constructor for function symbol @even.
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.
bool is_dub_function_symbol(const atermpp::aterm &e)
Recogniser for function @dub.
application cnat(const data_expression &arg0)
Application of function symbol @cNat.
bool is_swap_zero_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero.
const core::identifier_string & even_name()
Generate identifier @even.
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_exp_function_symbol(const atermpp::aterm &e)
Recogniser for function exp.
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.
bool is_even_function_symbol(const atermpp::aterm &e)
Recogniser for function @even.
const core::identifier_string & pred_name()
Generate identifier pred.
bool is_exp_application(const atermpp::aterm &e)
Recogniser for application of exp.
const function_symbol & swap_zero_min()
Constructor for function symbol @swap_zero_min.
function_symbol minimum(const sort_expression &s0, const sort_expression &s1)
const function_symbol & sqrt_nat_aux_func()
Constructor for function symbol @sqrt_nat.
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 function_symbol & div()
Constructor for function symbol div.
application last(const data_expression &arg0)
Application of function symbol @last.
const core::identifier_string & doubly_generalised_divmod_name()
Generate identifier @ggdivmod.
void make_succ(data_expression &result, const data_expression &arg0)
Make an application of function symbol succ.
bool is_maximum_function_symbol(const atermpp::aterm &e)
Recogniser for function max.
bool is_gte_subtract_with_borrow_application(const atermpp::aterm &e)
Recogniser for application of @gtesubtb.
bool is_swap_zero_min_application(const atermpp::aterm &e)
Recogniser for application of @swap_zero_min.
function_symbol plus(const sort_expression &s0, const sort_expression &s1)
const core::identifier_string & dubsucc_name()
Generate identifier @dubsucc.
bool is_first_application(const atermpp::aterm &e)
Recogniser for application of @first.
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.
bool is_pred_function_symbol(const atermpp::aterm &e)
Recogniser for function pred.
bool is_generalised_divmod_function_symbol(const atermpp::aterm &e)
Recogniser for function @gdivmod.
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 & swap_zero_monus_name()
Generate identifier @swap_zero_monus.
application gte_subtract_with_borrow(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @gtesubtb.
function_symbol_vector nat_generate_functions_code()
Give all system defined mappings for nat.
bool is_cpair_function_symbol(const atermpp::aterm &e)
Recogniser for function @cPair.
application div(const data_expression &arg0, const data_expression &arg1)
Application of function symbol div.
bool is_divmod_function_symbol(const atermpp::aterm &e)
Recogniser for function @divmod.
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 *.
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.
bool is_c0_function_symbol(const atermpp::aterm &e)
Recogniser for function @c0.
const core::identifier_string & generalised_divmod_name()
Generate identifier @gdivmod.
application doubly_generalised_divmod(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol @ggdivmod.
const function_symbol & nat2pos()
Constructor for function symbol Nat2Pos.
const core::identifier_string & monus_name()
Generate identifier @monus.
application monus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @monus.
const core::identifier_string & cpair_name()
Generate identifier @cPair.
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.
void make_divmod(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @divmod.
application dub(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @dub.
implementation_map nat_cpp_implementable_mappings()
Give all system defined mappings that are to be implemented in C++ code for nat.
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
const core::identifier_string & gte_subtract_with_borrow_name()
Generate identifier @gtesubtb.
const basic_sort & natpair()
Constructor for sort expression @NatPair.
application pred(const data_expression &arg0)
Application of function symbol pred.
application succ(const data_expression &arg0)
Application of function symbol succ.
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.
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 core::identifier_string & dub_name()
Generate identifier @dub.
const core::identifier_string & cnat_name()
Generate identifier @cNat.
const core::identifier_string & c0_name()
Generate identifier @c0.
application divmod(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @divmod.
bool is_swap_zero_add_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_add.
bool is_natpair(const sort_expression &e)
Recogniser for sort expression @NatPair.
bool is_swap_zero_monus_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_monus.
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.
void make_sqrt_nat_aux_func(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @sqrt_nat.
bool is_sqrt_nat_aux_func_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_nat.
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
bool is_sqrt_function_symbol(const atermpp::aterm &e)
Recogniser for function sqrt.
application mod(const data_expression &arg0, const data_expression &arg1)
Application of function symbol mod.
bool is_cnat_function_symbol(const atermpp::aterm &e)
Recogniser for function @cNat.
function_symbol_vector nat_mCRL2_usable_constructors()
Give all defined constructors which can be used in mCRL2 specs for nat.
const function_symbol & last()
Constructor for function symbol @last.
bool is_pred_application(const atermpp::aterm &e)
Recogniser for application of pred.
bool is_plus_application(const atermpp::aterm &e)
Recogniser for application of +.
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.
void make_minimum(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol min.
const core::identifier_string & swap_zero_add_name()
Generate identifier @swap_zero_add.
bool is_dubsucc_function_symbol(const atermpp::aterm &e)
Recogniser for function @dubsucc.
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
bool is_dubsucc_application(const atermpp::aterm &e)
Recogniser for application of @dubsucc.
bool is_swap_zero_min_function_symbol(const atermpp::aterm &e)
Recogniser for function @swap_zero_min.
function_symbol_vector nat_generate_constructors_code()
Give all system defined constructors for nat.
const core::identifier_string & sqrt_name()
Generate identifier sqrt.
bool is_doubly_generalised_divmod_application(const atermpp::aterm &e)
Recogniser for application of @ggdivmod.
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 *.
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.
const core::identifier_string & divmod_name()
Generate identifier @divmod.
bool is_minimum_function_symbol(const atermpp::aterm &e)
Recogniser for function min.
function_symbol times(const sort_expression &s0, const sort_expression &s1)
bool is_times_function_symbol(const atermpp::aterm &e)
Recogniser for function *.
bool is_dub_application(const atermpp::aterm &e)
Recogniser for application of @dub.
bool is_nat2pos_function_symbol(const atermpp::aterm &e)
Recogniser for function Nat2Pos.
const function_symbol & dub()
Constructor for function symbol @dub.
void make_cnat(data_expression &result, const data_expression &arg0)
Make an application of function symbol @cNat.
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.
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.
bool is_monus_application(const atermpp::aterm &e)
Recogniser for application of @monus.
bool is_divmod_application(const atermpp::aterm &e)
Recogniser for application of @divmod.
const data_expression & arg4(const data_expression &e)
Function for projecting out argument. arg4 from an application.
bool is_even_application(const atermpp::aterm &e)
Recogniser for application of @even.
Namespace for system defined sort pos.
const basic_sort & pos()
Constructor for sort expression Pos.
Namespace for system defined sort set_.
container_sort set_(const sort_expression &s)
Constructor for sort expression Set(S)
std::string pp(const data::structured_sort_constructor_argument &x, bool arg0)
void swap(fset_container &t1, fset_container &t2) noexcept
\brief swap overload
void make_data_expression(data_expression &result)
void make_function_symbol(atermpp::aterm &t, const ARGUMENTS &... args)
data::data_equation normalize_sorts(const data::data_equation &x, const data::sort_specification &sortspec)
bool is_greater_application(const DataExpression &e)
Recogniser for application of >
void normalize_sorts(data::data_equation_vector &x, const data::sort_specification &sortspec)
void swap(function_sort &t1, function_sort &t2) noexcept
\brief swap overload
bool is_greater_function_symbol(const DataExpression &e)
Recogniser for function >
void swap(container_sort &t1, container_sort &t2) noexcept
\brief swap overload
bool is_structured_sort(const atermpp::aterm &x)
Returns true if the term t is a structured sort.
data::data_equation_list normalize_sorts(const data::data_equation_list &x, const data::sort_specification &sortspec)
std::string pp(const data::exists &x, bool arg0)
bool is_data_equation(const atermpp::aterm &t)
Recognizer function.
std::string pp(const data::untyped_identifier_assignment &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const bag_comprehension_binder &x)
variable_list free_variables(const data_expression &x)
function_symbol less_equal(const sort_expression &s)
Constructor for function symbol <=.
std::ostream & operator<<(std::ostream &out, const set_comprehension_binder &x)
bool is_set_container(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const container_sort &x)
void swap(untyped_sort &t1, untyped_sort &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const basic_sort &x)
function_symbol_vector standard_generate_functions_code(const sort_expression &s)
Give all standard system defined functions for sort s.
std::set< data::variable > find_all_variables(const data::data_expression_list &x)
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
std::string pp(const data::list_container &x, bool arg0)
bool is_application_no_check(const atermpp::aterm &x)
Returns true if the term t is an application, but it does not check whether an application symbol of ...
function_symbol not_equal_to(const sort_expression &s)
Constructor for function symbol !=.
bool is_equal_to_function_symbol(const DataExpression &e)
Recogniser for function ==.
data_expression_list make_data_expression_list(Container const &r, typename atermpp::enable_if_container< Container, data_expression >::type *=nullptr)
Converts an container with data expressions to data_expression_list.
std::set< data::sort_expression > find_sort_expressions(const data::data_expression &x)
void swap(set_comprehension_binder &t1, set_comprehension_binder &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const container_type &x)
data::data_equation translate_user_notation(const data::data_equation &x)
std::ostream & operator<<(std::ostream &out, const list_container &x)
std::ostream & operator<<(std::ostream &out, const untyped_set_or_bag_comprehension_binder &x)
bool is_application(const data_expression &t)
Returns true if the term t is an application.
bool is_list_container(const atermpp::aterm &x)
bool is_if_application(const DataExpression &e)
Recogniser for application of if.
void make_basic_sort(atermpp::aterm &t, const ARGUMENTS &... args)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &dom3, const sort_expression &dom4, const sort_expression &codomain)
Convenience constructor for function sort with domain size 4.
void swap(fbag_container &t1, fbag_container &t2) noexcept
\brief swap overload
bool is_not_equal_to_application(const DataExpression &e)
Recogniser for application of !=.
void swap(basic_sort &t1, basic_sort &t2) noexcept
\brief swap overload
std::string pp(const data::container_type &x, bool arg0)
std::set< data::variable > find_all_variables(const data::data_expression &x)
void swap(list_container &t1, list_container &t2) noexcept
\brief swap overload
void swap(exists_binder &t1, exists_binder &t2) noexcept
\brief swap overload
function_symbol less(const sort_expression &s)
Constructor for function symbol <.
bool is_where_clause(const atermpp::aterm &x)
Returns true if the term t is a where clause.
std::string pp(const data::set_container &x, bool arg0)
bool is_untyped_possible_sorts(const atermpp::aterm &x)
Returns true if the term t is an expression for multiple possible sorts.
bool is_untyped_sort(const atermpp::aterm &x)
Returns true if the term t is the unknown sort.
application less_equal(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <=.
std::ostream & operator<<(std::ostream &out, const fset_container &x)
bool is_greater_equal_application(const DataExpression &e)
Recogniser for application of >=.
std::string pp(const data::untyped_set_or_bag_comprehension_binder &x, bool arg0)
application less(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <.
data::data_expression translate_user_notation(const data::data_expression &x)
std::string pp(const data::sort_expression_vector &x, bool arg0)
std::string pp(const data::untyped_sort &x, bool arg0)
std::string pp(const data::data_equation &x, bool arg0)
std::string pp(const data::forall &x, bool arg0)
void swap(set_container &t1, set_container &t2) noexcept
\brief swap overload
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
void make_variable(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const data::assignment_list &x, bool arg0)
std::string pp(const data::untyped_identifier &x, bool arg0)
application not_equal_to(const data_expression &arg0, const data_expression &arg1)
Application of function symbol !=.
std::string pp(const data::function_symbol_list &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const untyped_sort &x)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &codomain)
Convenience constructor for function sort with domain size 1.
void swap(container_type &t1, container_type &t2) noexcept
\brief swap overload
application if_(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol if.
std::ostream & operator<<(std::ostream &out, const forall &x)
bool is_untyped_identifier(const atermpp::aterm &x)
Returns true if the term t is an identifier.
data_equation_vector standard_generate_equations_code(const sort_expression &s)
Give all standard system defined equations for sort s.
void swap(bag_container &t1, bag_container &t2) noexcept
\brief swap overload
std::string pp(const data::lambda_binder &x, bool arg0)
void swap(untyped_set_or_bag_comprehension_binder &t1, untyped_set_or_bag_comprehension_binder &t2) noexcept
\brief swap overload
void swap(bag_comprehension_binder &t1, bag_comprehension_binder &t2) noexcept
\brief swap overload
bool is_set_comprehension_binder(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const alias &x)
void swap(forall_binder &t1, forall_binder &t2) noexcept
\brief swap overload
void swap(data_equation &t1, data_equation &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const forall_binder &x)
bool is_exists_binder(const atermpp::aterm &x)
std::set< data::variable > find_all_variables(const data::function_symbol &x)
std::string pp(const data::application &x, bool arg0)
bool is_not_equal_to_function_symbol(const DataExpression &e)
Recogniser for function !=.
std::string pp(const data::function_sort &x, bool arg0)
void make_alias(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const data::abstraction &x, bool arg0)
std::string pp(const data::bag_comprehension_binder &x, bool arg0)
function_symbol greater_equal(const sort_expression &s)
Constructor for function symbol >=.
std::ostream & operator<<(std::ostream &out, const set_container &x)
std::string pp(const data::set_comprehension_binder &x, bool arg0)
std::string pp(const data::assignment &x, bool arg0)
std::string pp(const data::structured_sort &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const bag_container &x)
std::string pp(const data::basic_sort &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const exists_binder &x)
std::string pp(const data::exists_binder &x, bool arg0)
void swap(forall &t1, forall &t2) noexcept
\brief swap overload
void swap(binder_type &t1, binder_type &t2) noexcept
\brief swap overload
std::string pp(const data::bag_comprehension &x, bool arg0)
void make_forall(atermpp::aterm &result, ARGUMENTS... arguments)
std::ostream & operator<<(std::ostream &out, const lambda_binder &x)
bool is_container_sort(const atermpp::aterm &x)
Returns true if the term t is a container sort.
bool is_lambda_binder(const atermpp::aterm &x)
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
std::string pp(const data::variable &x, bool arg0)
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
bool is_fset_container(const atermpp::aterm &x)
bool is_less_function_symbol(const DataExpression &e)
Recogniser for function <.
std::ostream & operator<<(std::ostream &out, const data_equation &x)
bool is_basic_sort(const atermpp::aterm &x)
Returns true if the term t is a basic sort.
bool is_untyped_sort_variable(const atermpp::aterm &x)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &dom3, const sort_expression &dom4, const sort_expression &dom5, const sort_expression &dom6, const sort_expression &codomain)
Convenience constructor for function sort with domain size 6.
bool is_untyped_set_or_bag_comprehension_binder(const atermpp::aterm &x)
std::string pp(const data::where_clause &x, bool arg0)
std::set< data::sort_expression > find_sort_expressions(const data::data_equation &x)
std::ostream & operator<<(std::ostream &out, const function_sort &x)
std::set< data::function_symbol > find_function_symbols(const data::data_equation &x)
std::string pp(const data::bag_container &x, bool arg0)
void swap(function_symbol &t1, function_symbol &t2) noexcept
\brief swap overload
std::string pp(const data::alias &x, bool arg0)
bool is_if_function_symbol(const DataExpression &e)
Recogniser for function if.
std::ostream & operator<<(std::ostream &out, const fbag_container &x)
std::set< data::variable > find_free_variables(const data::data_expression &x)
application greater(const data_expression &arg0, const data_expression &arg1)
Application of function symbol >
void make_abstraction(atermpp::aterm &result, ARGUMENTS... arguments)
void swap(sort_expression &t1, sort_expression &t2) noexcept
\brief swap overload
std::set< data::variable > find_all_variables(const data::variable_list &x)
bool is_untyped_set_or_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a set/bag comprehension.
void swap(abstraction &t1, abstraction &t2) noexcept
\brief swap overload
void swap(alias &t1, alias &t2) noexcept
\brief swap overload
bool is_assignment(const atermpp::aterm &x)
std::string pp(const data::structured_sort_constructor &x, bool arg0)
std::set< data::sort_expression > find_sort_expressions(const data::sort_expression &x)
std::string pp(const data::data_specification &x, bool arg0)
std::string pp(const data::data_equation_list &x, bool arg0)
std::string pp(const data::fset_container &x, bool arg0)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &dom3, const sort_expression &codomain)
Convenience constructor for function sort with domain size 3.
std::string pp(const data::sort_expression &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const binder_type &x)
std::string pp(const data::untyped_set_or_bag_comprehension &x, bool arg0)
std::pair< basic_sort_vector, alias_vector > parse_sort_specification(const std::string &text)
void swap(lambda_binder &t1, lambda_binder &t2) noexcept
\brief swap overload
data::sort_expression normalize_sorts(const data::sort_expression &x, const data::sort_specification &sortspec)
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
std::string pp(const data::variable_list &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const data_expression &x)
application greater_equal(const data_expression &arg0, const data_expression &arg1)
Application of function symbol >=.
bool is_less_equal_function_symbol(const DataExpression &e)
Recogniser for function <=.
void make_data_equation(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_function_sort(const atermpp::aterm &x)
Returns true if the term t is a function sort.
bool is_greater_equal_function_symbol(const DataExpression &e)
Recogniser for function >=.
std::set< data::variable > find_free_variables(const data::data_expression_list &x)
std::string pp(const data::data_expression &x, bool arg0)
std::string pp(const data::lambda &x, bool arg0)
bool is_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a bag comprehension.
std::string pp(const data::fbag_container &x, bool arg0)
bool is_set_comprehension(const atermpp::aterm &x)
Returns true if the term t is a set comprehension.
std::ostream & operator<<(std::ostream &out, const function_symbol &x)
bool is_bag_container(const atermpp::aterm &x)
std::string pp(const data::structured_sort_constructor_list &x, bool arg0)
bool is_machine_number(const atermpp::aterm &x)
Returns true if the term t is a machine_number.
function_symbol equal_to(const sort_expression &s)
Constructor for function symbol ==.
std::string pp(const data::container_sort &x, bool arg0)
data::variable_list normalize_sorts(const data::variable_list &x, const data::sort_specification &sortspec)
const data_expression_list & variable_list_to_data_expression_list(const variable_list &l)
Transform a variable_list into a data_expression_list.
data::data_expression normalize_sorts(const data::data_expression &x, const data::sort_specification &sortspec)
std::ostream & operator<<(std::ostream &out, const variable &x)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &codomain)
Convenience constructor for function sort with domain size 2.
std::string pp(const data::untyped_sort_variable &x, bool arg0)
std::string pp(const data::untyped_data_parameter &x, bool arg0)
std::string pp(const data::binder_type &x, bool arg0)
application equal_to(const data_expression &arg0, const data_expression &arg1)
Application of function symbol ==.
bool is_fbag_container(const atermpp::aterm &x)
bool is_lambda(const atermpp::aterm &x)
Returns true if the term t is a lambda abstraction.
bool is_untyped_identifier_assignment(const atermpp::aterm &x)
bool is_alias(const atermpp::aterm &x)
std::set< data::variable > find_all_variables(const data::variable &x)
bool is_constant(const data_expression &x)
bool is_forall_binder(const atermpp::aterm &x)
bool is_less_application(const DataExpression &e)
Recogniser for application of <.
std::set< core::identifier_string > find_identifiers(const data::variable_list &x)
std::ostream & operator<<(std::ostream &out, const sort_expression &x)
bool search_variable(const data::data_expression &x, const data::variable &v)
void make_container_sort(atermpp::aterm &t, const ARGUMENTS &... args)
void make_function_sort(atermpp::aterm &t, const ARGUMENTS &... args)
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &dom2, const sort_expression &dom3, const sort_expression &dom4, const sort_expression &dom5, const sort_expression &codomain)
Convenience constructor for function sort with domain size 5.
std::string pp(const data::sort_expression_list &x, bool arg0)
std::string pp(const data::forall_binder &x, bool arg0)
std::string pp(const data::untyped_possible_sorts &x, bool arg0)
bool is_application(const atermpp::aterm &x)
Returns true if the term t is an application.
std::string pp(const data::function_symbol &x, bool arg0)
std::set< data::variable > substitution_variables(const mutable_map_substitution<> &sigma)
bool is_less_equal_application(const DataExpression &e)
Recogniser for application of <=.
bool is_bag_comprehension_binder(const atermpp::aterm &x)
function_symbol if_(const sort_expression &s)
Constructor for function symbol if.
std::string pp(const data::machine_number &x, bool arg0)
bool is_equal_to_application(const DataExpression &e)
Recogniser for application of ==.
void swap(data_expression &t1, data_expression &t2) noexcept
\brief swap overload
void swap(variable &t1, variable &t2) noexcept
\brief swap overload
std::string pp(const data::assignment_expression &x, bool arg0)
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
bool is_sort_expression(const atermpp::aterm &x)
Test for a sort_expression expression.
std::string pp(const data::set_comprehension &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const abstraction &x)
std::string pp(const data::data_expression_list &x, bool arg0)
function_symbol greater(const sort_expression &s)
Constructor for function symbol >
expression builder that visits all sub expressions
static const atermpp::aterm SortFSet
static const atermpp::aterm DataVarId
static const atermpp::aterm BindingOperator
static const atermpp::aterm SortArrow
static const atermpp::aterm UntypedSetBagComp
static const atermpp::aterm Lambda
static const atermpp::aterm SortExpr
static const atermpp::aterm SortConsType
static const atermpp::aterm SortId
static const atermpp::aterm Binder
static const atermpp::aterm DataEqn
static const atermpp::aterm SortRef
static const atermpp::aterm DataExpr
static const atermpp::aterm UntypedSortUnknown
static const atermpp::aterm SortSet
static const atermpp::aterm Exists
static const atermpp::aterm SortCons
static const atermpp::aterm SortBag
static const atermpp::aterm OpId
static const atermpp::aterm SetComp
static const atermpp::aterm BagComp
static const atermpp::aterm SortFBag
static const atermpp::aterm SortList
static const atermpp::aterm Forall
void apply(T &result, const argument_type &x)
update_apply_builder(const Function &f)
void apply(T &result, const data::bag_comprehension &x)
void apply(T &result, const data::machine_number &x)
void apply(T &result, const data::untyped_identifier_assignment &x)
void apply(T &result, const data::assignment_expression &x)
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
void apply(T &result, const data::untyped_identifier &x)
void apply(T &result, const data::data_equation &x)
void apply(T &result, const data::function_symbol &x)
void apply(T &result, const data::assignment &x)
void apply(T &result, const data::abstraction &x)
void apply(T &result, const data::forall &x)
void apply(T &result, const data::untyped_data_parameter &x)
void apply(T &result, const data::exists &x)
void apply(T &result, const data::where_clause &x)
void apply(T &result, const data::application &x)
void apply(T &result, const data::variable &x)
void apply(T &result, const data::data_expression &x)
void apply(T &result, const data::set_comprehension &x)
void apply(T &result, const data::lambda &x)
void apply(T &result, const data::assignment &x)
void apply(T &result, const data::set_comprehension &x)
void apply(T &result, const data::structured_sort_constructor_argument &x)
void apply(T &result, const data::container_sort &x)
void apply(T &result, const data::alias &x)
void apply(T &result, const data::exists &x)
void apply(T &result, const data::machine_number &x)
void apply(T &result, const data::function_symbol &x)
void apply(T &result, const data::untyped_possible_sorts &x)
void apply(T &result, const data::forall &x)
void apply(T &result, const data::basic_sort &x)
void apply(T &result, const data::data_equation &x)
void apply(T &result, const data::untyped_sort &x)
void apply(T &result, const data::abstraction &x)
void apply(T &result, const data::application &x)
void apply(T &result, const data::variable &x)
void apply(T &result, const data::structured_sort &x)
void apply(T &result, const data::untyped_identifier_assignment &x)
void apply(T &result, const data::untyped_data_parameter &x)
void apply(T &result, const data::function_sort &x)
void apply(T &result, const data::untyped_identifier &x)
void apply(T &result, const data::structured_sort_constructor &x)
void apply(T &result, const data::lambda &x)
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
void apply(T &result, const data::where_clause &x)
void apply(T &result, const data::assignment_expression &x)
void apply(T &result, const data::data_expression &x)
void apply(T &result, const data::sort_expression &x)
void apply(T &result, const data::untyped_sort_variable &x)
void apply(T &result, const data::bag_comprehension &x)
void apply(T &result, const data::abstraction &x)
void apply(T &result, const data::application &x)
void apply(T &result, const data::untyped_data_parameter &x)
void apply(T &result, const data::untyped_identifier &x)
void apply(T &result, const data::data_expression &x)
void apply(T &result, const data::assignment_expression &x)
void apply(T &result, const data::where_clause &x)
void apply(T &result, const data::forall &x)
void apply(T &result, const data::function_symbol &x)
void apply(T &result, const data::exists &x)
void apply(T &result, const data::lambda &x)
void apply(T &result, const data::variable &x)
void apply(T &result, const data::assignment &x)
void apply(T &result, const data::untyped_identifier_assignment &x)
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
void apply(T &result, const data::set_comprehension &x)
void apply(T &result, const data::bag_comprehension &x)
void apply(T &result, const data::machine_number &x)
void apply(T &result, const data::data_equation &x)
data_expression_actions(const core::parser &parser_)
data::data_expression parse_DataExpr(const core::parse_node &node) const
data_specification_actions(const core::parser &parser_)
untyped_data_specification parse_DataSpec(const core::parse_node &node) const
normalize_sorts_function(const sort_specification &sort_spec)
sort_expression operator()(const sort_expression &e) const
Normalise sorts.
const std::map< sort_expression, sort_expression > & m_normalised_aliases
data::sort_expression parse_SortExpr(const core::parse_node &node, data::sort_expression_list *product=nullptr) const
data_specification construct_data_specification() const
std::size_t operator()(const mcrl2::data::container_type &v) const
std::size_t operator()(const mcrl2::data::data_expression &v) const
std::size_t operator()(const mcrl2::data::function_sort &v) const
std::size_t operator()(const mcrl2::data::sort_expression &x) const
std::size_t operator()(const mcrl2::data::variable &v) const