15#ifndef MCRL2_DATA_MACHINE_WORD_H
16#define MCRL2_DATA_MACHINE_WORD_H
33 namespace sort_machine_word {
92 return atermpp::down_cast<function_symbol>(e) ==
zero_word();
106 static_cast< void >(a);
140 return atermpp::down_cast<function_symbol>(e) ==
succ_word();
188 const application& a=atermpp::down_cast<application>(a1);
256 return atermpp::down_cast<function_symbol>(e) ==
one_word();
270 static_cast< void >(a);
304 return atermpp::down_cast<function_symbol>(e) ==
two_word();
318 static_cast< void >(a);
352 return atermpp::down_cast<function_symbol>(e) ==
three_word();
366 static_cast< void >(a);
400 return atermpp::down_cast<function_symbol>(e) ==
four_word();
414 static_cast< void >(a);
448 return atermpp::down_cast<function_symbol>(e) ==
max_word();
462 static_cast< void >(a);
544 const application& a=atermpp::down_cast<application>(a1);
625 const application& a=atermpp::down_cast<application>(a1);
706 const application& a=atermpp::down_cast<application>(a1);
787 const application& a=atermpp::down_cast<application>(a1);
820 return atermpp::down_cast<function_symbol>(e) ==
add_word();
871 const application& a=atermpp::down_cast<application>(a1);
955 const application& a=atermpp::down_cast<application>(a1);
1039 const application& a=atermpp::down_cast<application>(a1);
1123 const application& a=atermpp::down_cast<application>(a1);
1156 return atermpp::down_cast<function_symbol>(e) ==
times_word();
1207 const application& a=atermpp::down_cast<application>(a1);
1294 const application& a=atermpp::down_cast<application>(a1);
1378 const application& a=atermpp::down_cast<application>(a1);
1465 const application& a=atermpp::down_cast<application>(a1);
1498 return atermpp::down_cast<function_symbol>(e) ==
minus_word();
1549 const application& a=atermpp::down_cast<application>(a1);
1582 return atermpp::down_cast<function_symbol>(e) ==
monus_word();
1633 const application& a=atermpp::down_cast<application>(a1);
1666 return atermpp::down_cast<function_symbol>(e) ==
div_word();
1717 const application& a=atermpp::down_cast<application>(a1);
1750 return atermpp::down_cast<function_symbol>(e) ==
mod_word();
1801 const application& a=atermpp::down_cast<application>(a1);
1834 return atermpp::down_cast<function_symbol>(e) ==
sqrt_word();
1882 const application& a=atermpp::down_cast<application>(a1);
1915 return atermpp::down_cast<function_symbol>(e) ==
div_doubleword();
1969 const application& a=atermpp::down_cast<application>(a1);
2059 const application& a=atermpp::down_cast<application>(a1);
2152 const application& a=atermpp::down_cast<application>(a1);
2185 return atermpp::down_cast<function_symbol>(e) ==
mod_doubleword();
2239 const application& a=atermpp::down_cast<application>(a1);
2323 const application& a=atermpp::down_cast<application>(a1);
2410 const application& a=atermpp::down_cast<application>(a1);
2497 const application& a=atermpp::down_cast<application>(a1);
2587 const application& a=atermpp::down_cast<application>(a1);
2677 const application& a=atermpp::down_cast<application>(a1);
2710 return atermpp::down_cast<function_symbol>(e) ==
pred_word();
2758 const application& a=atermpp::down_cast<application>(a1);
2791 return atermpp::down_cast<function_symbol>(e) ==
equal_word();
2842 const application& a=atermpp::down_cast<application>(a1);
2875 return atermpp::down_cast<function_symbol>(e) ==
not_equal_word();
2926 const application& a=atermpp::down_cast<application>(a1);
2959 return atermpp::down_cast<function_symbol>(e) ==
less_word();
3010 const application& a=atermpp::down_cast<application>(a1);
3094 const application& a=atermpp::down_cast<application>(a1);
3127 return atermpp::down_cast<function_symbol>(e) ==
greater_word();
3178 const application& a=atermpp::down_cast<application>(a1);
3262 const application& a=atermpp::down_cast<application>(a1);
3295 return atermpp::down_cast<function_symbol>(e) ==
rightmost_bit();
3343 const application& a=atermpp::down_cast<application>(a1);
3376 return atermpp::down_cast<function_symbol>(e) ==
shift_right();
3427 const application& a=atermpp::down_cast<application>(a1);
3489 result.push_back(f);
3603 return atermpp::down_cast<application>(e)[0];
3615 return atermpp::down_cast<application>(e)[0];
3627 return atermpp::down_cast<application>(e)[1];
3639 return atermpp::down_cast<application>(e)[0];
3651 return atermpp::down_cast<application>(e)[1];
3663 return atermpp::down_cast<application>(e)[2];
3675 return atermpp::down_cast<application>(e)[3];
3687 return atermpp::down_cast<application>(e)[4];
Term containing a string.
An application of a data expression to a number of arguments.
The class function symbol.
Exception classes for use in libraries and tools.
atermpp::aterm_string identifier_string
String type of the LPS library. Identifier strings are represented internally as ATerms.
const basic_sort & bool_()
Constructor for sort expression Bool.
void make_add_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @add_word.
void equals_max_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void max_word_application(data_expression &result, const data_expression &a)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void make_not_equals_zero_word(data_expression &result, const data_expression &arg0)
Make an application of function symbol @not_equals_zero_word.
bool is_equals_zero_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @equals_zero_word.
void sqrt_quadrupleword_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_zero_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @zero_word.
const function_symbol & sqrt_word()
Constructor for function symbol @sqrt_word.
const core::identifier_string & equal_word_name()
Generate identifier @equal.
bool is_mod_doubleword_function_symbol(const atermpp::aterm &e)
Recogniser for function @mod_doubleword.
const core::identifier_string & sqrt_doubleword_name()
Generate identifier @sqrt_doubleword.
bool is_add_word_application(const atermpp::aterm &e)
Recogniser for application of @add_word.
void times_with_carry_overflow_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3)
The result of multiplying two words and adding a third divided by the maximal representable machine w...
void succ_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void sqrt_tripleword_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3)
Calculates the least significant word of the square root of base*(base*e1+e2)+e3.
bool is_equal_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @equal.
void sqrt_tripleword_overflow_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
implementation_map machine_word_cpp_implementable_mappings()
Give all system defined mappings that are to be implemented in C++ code for machine_word.
void pred_word_manual_implementation(data_expression &result, const data_expression &e)
The predecessor function on a machine numbers, that wraps around.
bool is_div_doubleword_application(const atermpp::aterm &e)
Recogniser for application of @div_doubleword.
void make_mod_doubleword(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @mod_doubleword.
bool is_div_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_word.
void equals_one_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void add_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The result of adding two words modulo the maximal representable machine word plus 1.
void make_rightmost_bit(data_expression &result, const data_expression &arg0)
Make an application of function symbol @rightmost_bit.
void two_word_manual_implementation(data_expression &result)
The machine number representing 2.
bool is_not_equals_zero_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @not_equals_zero_word.
void equals_zero_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_equals_one_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @equals_one_word.
bool is_equals_one_word_application(const atermpp::aterm &e)
Recogniser for application of @equals_one_word.
const function_symbol & add_word()
Constructor for function symbol @add_word.
const core::identifier_string & minus_word_name()
Generate identifier @minus_word.
void make_div_doubleword(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @div_doubleword.
void make_add_overflow_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @add_overflow_word.
const core::identifier_string & one_word_name()
Generate identifier @one_word.
const function_symbol & not_equal_word()
Constructor for function symbol @not_equal.
void shift_right_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The machine word shifted one position to the right.
function_symbol_vector machine_word_mCRL2_usable_mappings()
Give all system defined mappings that can be used in mCRL2 specs for machine_word.
const function_symbol & div_double_doubleword()
Constructor for function symbol @div_double_doubleword.
void make_succ_word(data_expression &result, const data_expression &arg0)
Make an application of function symbol @succ_word.
bool is_equal_word_application(const atermpp::aterm &e)
Recogniser for application of @equal.
const core::identifier_string & sqrt_quadrupleword_overflow_name()
Generate identifier @sqrt_quadrupleword_overflow.
const core::identifier_string & less_word_name()
Generate identifier @less.
bool is_max_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @max_word.
bool is_succ_word_application(const atermpp::aterm &e)
Recogniser for application of @succ_word.
bool is_times_with_carry_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @times_with_carry_word.
void mod_doubleword_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const core::identifier_string & rightmost_bit_name()
Generate identifier @rightmost_bit.
const core::identifier_string & div_word_name()
Generate identifier @div_word.
const core::identifier_string & sqrt_quadrupleword_name()
Generate identifier @sqrt_quadrupleword.
bool is_add_with_carry_overflow_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @add_with_carry_overflow_word.
void times_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The result of multiplying two words modulo the maximal representable machine word plus 1.
bool is_sqrt_doubleword_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_doubleword.
void make_times_with_carry_overflow_word(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @times_with_carry_overflow_word.
bool is_greater_equal_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @greater_equal.
void make_equals_zero_word(data_expression &result, const data_expression &arg0)
Make an application of function symbol @equals_zero_word.
bool is_four_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @four_word.
bool is_not_equal_word_application(const atermpp::aterm &e)
Recogniser for application of @not_equal.
const function_symbol & div_word()
Constructor for function symbol @div_word.
void equals_zero_word_manual_implementation(data_expression &result, const data_expression &e)
Checks whether the argument is equal to 0.
void make_monus_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @monus_word.
bool is_sqrt_quadrupleword_overflow_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_quadrupleword_overflow.
bool is_mod_doubleword_application(const atermpp::aterm &e)
Recogniser for application of @mod_doubleword.
bool is_add_with_carry_overflow_word_application(const atermpp::aterm &e)
Recogniser for application of @add_with_carry_overflow_word.
void div_triple_doubleword_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4, const data_expression &e5)
Calculates (base*(base*e1 + e2)+e3) div (base*e4 + e5).
const function_symbol & pred_word()
Constructor for function symbol @pred_word.
const core::identifier_string & zero_word_name()
Generate identifier @zero_word.
void not_equal_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_greater_equal_word_application(const atermpp::aterm &e)
Recogniser for application of @greater_equal.
const function_symbol & equals_max_word()
Constructor for function symbol @equals_max_word.
const core::identifier_string & equals_max_word_name()
Generate identifier @equals_max_word.
const function_symbol & greater_word()
Constructor for function symbol @greater.
const core::identifier_string & equals_zero_word_name()
Generate identifier @equals_zero_word.
const core::identifier_string & greater_equal_word_name()
Generate identifier @greater_equal.
void times_overflow_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const core::identifier_string & add_word_name()
Generate identifier @add_word.
const function_symbol & equals_one_word()
Constructor for function symbol @equals_one_word.
function_symbol_vector machine_word_generate_functions_code()
Give all system defined mappings for machine_word.
void zero_word_manual_implementation(data_expression &result)
The machine number representing 0.
const function_symbol & mod_word()
Constructor for function symbol @mod_word.
const function_symbol & div_doubleword()
Constructor for function symbol @div_doubleword.
const function_symbol & succ_word()
Constructor for function symbol @succ_word.
const core::identifier_string & pred_word_name()
Generate identifier @pred_word.
bool is_shift_right_application(const atermpp::aterm &e)
Recogniser for application of @shift_right.
bool is_greater_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @greater.
bool is_sqrt_doubleword_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_doubleword.
const core::identifier_string & less_equal_word_name()
Generate identifier @less_equal.
bool is_times_overflow_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @times_overflow_word.
void times_with_carry_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3)
The result of multiplying two words and adding the third modulo the maximal representable machine wor...
bool is_div_triple_doubleword_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_triple_doubleword.
bool is_div_double_doubleword_application(const atermpp::aterm &e)
Recogniser for application of @div_double_doubleword.
const function_symbol & sqrt_quadrupleword_overflow()
Constructor for function symbol @sqrt_quadrupleword_overflow.
const function_symbol & less_word()
Constructor for function symbol @less.
bool is_less_word_application(const atermpp::aterm &e)
Recogniser for application of @less.
const core::identifier_string & monus_word_name()
Generate identifier @monus_word.
bool is_div_doubleword_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_doubleword.
void make_less_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @less.
const basic_sort & machine_word()
Constructor for sort expression @word.
bool is_two_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @two_word.
void make_sqrt_quadrupleword(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @sqrt_quadrupleword.
void three_word_manual_implementation(data_expression &result)
The machine number representing 3.
const core::identifier_string & sqrt_word_name()
Generate identifier @sqrt_word.
bool is_minus_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @minus_word.
const function_symbol & add_with_carry_word()
Constructor for function symbol @add_with_carry_word.
void make_greater_equal_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @greater_equal.
void times_overflow_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The result of multiplying two words divided by the maximal representable machine word plus 1.
const function_symbol & four_word()
Constructor for function symbol @four_word.
void make_sqrt_quadrupleword_overflow(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @sqrt_quadrupleword_overflow.
void sqrt_quadrupleword_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4)
Calculates the least significant word of the square root of base*(base*(base*e1+e2)+e3)+e4.
bool is_times_with_carry_overflow_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @times_with_carry_overflow_word.
const function_symbol & monus_word()
Constructor for function symbol @monus_word.
void make_add_with_carry_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @add_with_carry_word.
bool is_sqrt_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_word.
bool is_succ_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @succ_word.
void add_overflow_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const core::identifier_string & div_triple_doubleword_name()
Generate identifier @div_triple_doubleword.
void sqrt_tripleword_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void make_add_with_carry_overflow_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @add_with_carry_overflow_word.
function_symbol_vector machine_word_generate_constructors_code()
Give all system defined constructors for machine_word.
bool is_add_with_carry_word_application(const atermpp::aterm &e)
Recogniser for application of @add_with_carry_word.
void one_word_application(data_expression &result, const data_expression &a)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void mod_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void not_equal_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The non equality function on two machine words.
const core::identifier_string & three_word_name()
Generate identifier @three_word.
void equal_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const core::identifier_string & mod_word_name()
Generate identifier @mod_word.
const data_expression & arg3(const data_expression &e)
Function for projecting out argument. arg3 from an application.
const core::identifier_string & sqrt_tripleword_name()
Generate identifier @sqrt_tripleword.
void make_div_double_doubleword(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3)
Make an application of function symbol @div_double_doubleword.
void make_sqrt_tripleword_overflow(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @sqrt_tripleword_overflow.
void make_minus_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @minus_word.
const function_symbol & sqrt_tripleword_overflow()
Constructor for function symbol @sqrt_tripleword_overflow.
const core::identifier_string & mod_doubleword_name()
Generate identifier @mod_doubleword.
const function_symbol & sqrt_quadrupleword()
Constructor for function symbol @sqrt_quadrupleword.
void shift_right_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void div_triple_doubleword_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void less_equal_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The less than or equal function on two machine words.
const function_symbol & equals_zero_word()
Constructor for function symbol @equals_zero_word.
const function_symbol & minus_word()
Constructor for function symbol @minus_word.
void div_double_doubleword_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_three_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @three_word.
void monus_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const data_expression & arg1(const data_expression &e)
Function for projecting out argument. arg1 from an application.
bool is_sqrt_quadrupleword_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_quadrupleword.
bool is_one_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @one_word.
const data_expression & arg4(const data_expression &e)
Function for projecting out argument. arg4 from an application.
void three_word_application(data_expression &result, const data_expression &a)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const data_expression & arg5(const data_expression &e)
Function for projecting out argument. arg5 from an application.
bool is_sqrt_tripleword_overflow_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_tripleword_overflow.
const function_symbol & one_word()
Constructor for function symbol @one_word.
void make_times_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @times_word.
const core::identifier_string & greater_word_name()
Generate identifier @greater.
const core::identifier_string & two_word_name()
Generate identifier @two_word.
const function_symbol & max_word()
Constructor for function symbol @max_word.
bool is_monus_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @monus_word.
const function_symbol & greater_equal_word()
Constructor for function symbol @greater_equal.
bool is_pred_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @pred_word.
const function_symbol & add_with_carry_overflow_word()
Constructor for function symbol @add_with_carry_overflow_word.
const function_symbol & times_with_carry_word()
Constructor for function symbol @times_with_carry_word.
void sqrt_tripleword_overflow_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3)
Calculates the most significant word of the square root of base*(base*e1+e2)+e3.
bool is_add_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @add_word.
void sqrt_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const core::identifier_string & times_word_name()
Generate identifier @times_word.
void make_shift_right(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @shift_right.
void add_with_carry_overflow_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void make_div_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @div_word.
bool is_monus_word_application(const atermpp::aterm &e)
Recogniser for application of @monus_word.
void make_greater_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @greater.
void sqrt_doubleword_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The square root of base*e1+e2 rounded down.
const core::identifier_string & times_overflow_word_name()
Generate identifier @times_overflow_word.
void not_equals_zero_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_shift_right_function_symbol(const atermpp::aterm &e)
Recogniser for function @shift_right.
void make_equals_one_word(data_expression &result, const data_expression &arg0)
Make an application of function symbol @equals_one_word.
void make_less_equal_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @less_equal.
void four_word_application(data_expression &result, const data_expression &a)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const function_symbol & three_word()
Constructor for function symbol @three_word.
void greater_equal_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The greater than or equal function on two machine words.
bool is_less_equal_word_application(const atermpp::aterm &e)
Recogniser for application of @less_equal.
void greater_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const function_symbol & times_with_carry_overflow_word()
Constructor for function symbol @times_with_carry_overflow_word.
void less_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void make_sqrt_word(data_expression &result, const data_expression &arg0)
Make an application of function symbol @sqrt_word.
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
bool is_div_word_application(const atermpp::aterm &e)
Recogniser for application of @div_word.
const core::identifier_string & add_with_carry_overflow_word_name()
Generate identifier @add_with_carry_overflow_word.
void div_double_doubleword_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4)
Calculates (base*e1 + e2) div (base*e3 + e4).
const function_symbol & div_triple_doubleword()
Constructor for function symbol @div_triple_doubleword.
bool is_not_equal_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @not_equal.
void make_div_triple_doubleword(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2, const data_expression &arg3, const data_expression &arg4)
Make an application of function symbol @div_triple_doubleword.
void equals_one_word_manual_implementation(data_expression &result, const data_expression &e)
Checks whether the argument is equal to 1.
bool is_sqrt_quadrupleword_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_quadrupleword.
void make_times_overflow_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @times_overflow_word.
const function_symbol & times_overflow_word()
Constructor for function symbol @times_overflow_word.
bool is_times_with_carry_overflow_word_application(const atermpp::aterm &e)
Recogniser for application of @times_with_carry_overflow_word.
void sqrt_quadrupleword_overflow_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void times_with_carry_overflow_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void div_doubleword_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3)
Calculates (base*e1 + e2) div e3.
void mod_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
Calculates e1 modulo e2.
const core::identifier_string & times_with_carry_word_name()
Generate identifier @times_with_carry_word.
const function_symbol & zero_word()
Constructor for function symbol @zero_word.
void greater_equal_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void sqrt_quadrupleword_overflow_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3, const data_expression &e4)
Calculates the most significant word of the square root of base*(base*(base*e1+e2)+e3)+e4.
void rightmost_bit_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const core::identifier_string & succ_word_name()
Generate identifier @succ_word.
void times_with_carry_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_less_equal_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @less_equal.
bool is_times_overflow_word_application(const atermpp::aterm &e)
Recogniser for application of @times_overflow_word.
bool is_sqrt_tripleword_function_symbol(const atermpp::aterm &e)
Recogniser for function @sqrt_tripleword.
void not_equals_zero_word_manual_implementation(data_expression &result, const data_expression &e)
Checks whether the argument is not equal to 0.
void less_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The less than function on two machine words.
const core::identifier_string & not_equals_zero_word_name()
Generate identifier @not_equals_zero_word.
const core::identifier_string & add_with_carry_word_name()
Generate identifier @add_with_carry_word.
void minus_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_times_word_application(const atermpp::aterm &e)
Recogniser for application of @times_word.
bool is_not_equals_zero_word_application(const atermpp::aterm &e)
Recogniser for application of @not_equals_zero_word.
void make_pred_word(data_expression &result, const data_expression &arg0)
Make an application of function symbol @pred_word.
const core::identifier_string & add_overflow_word_name()
Generate identifier @add_overflow_word.
void make_equal_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @equal.
bool is_add_overflow_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @add_overflow_word.
bool is_rightmost_bit_application(const atermpp::aterm &e)
Recogniser for application of @rightmost_bit.
bool is_sqrt_quadrupleword_overflow_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_quadrupleword_overflow.
const core::identifier_string & div_doubleword_name()
Generate identifier @div_doubleword.
bool is_add_with_carry_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @add_with_carry_word.
void max_word_manual_implementation(data_expression &result)
The largest representable machine number.
bool is_less_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @less.
const function_symbol & not_equals_zero_word()
Constructor for function symbol @not_equals_zero_word.
const function_symbol & equal_word()
Constructor for function symbol @equal.
bool is_machine_word(const sort_expression &e)
Recogniser for sort expression @word.
const core::identifier_string & not_equal_word_name()
Generate identifier @not_equal.
const function_symbol & mod_doubleword()
Constructor for function symbol @mod_doubleword.
void add_with_carry_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The result of adding two words plus 1 modulo the maximal representable machine word plus 1.
const function_symbol & sqrt_tripleword()
Constructor for function symbol @sqrt_tripleword.
void make_times_with_carry_word(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @times_with_carry_word.
std::map< function_symbol, std::pair< std::function< void(data_expression &, const data_expression &)>, std::string > > implementation_map
bool is_times_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @times_word.
void times_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const function_symbol & rightmost_bit()
Constructor for function symbol @rightmost_bit.
void sqrt_doubleword_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const core::identifier_string & sqrt_tripleword_overflow_name()
Generate identifier @sqrt_tripleword_overflow.
bool is_pred_word_application(const atermpp::aterm &e)
Recogniser for application of @pred_word.
void one_word_manual_implementation(data_expression &result)
The machine number representing 1.
void make_sqrt_tripleword(data_expression &result, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @sqrt_tripleword.
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
const function_symbol & less_equal_word()
Constructor for function symbol @less_equal.
void div_doubleword_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void equal_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The equality function on two machine words.
bool is_equals_max_word_application(const atermpp::aterm &e)
Recogniser for application of @equals_max_word.
bool is_greater_word_application(const atermpp::aterm &e)
Recogniser for application of @greater.
bool is_sqrt_word_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_word.
void four_word_manual_implementation(data_expression &result)
The machine number representing 4.
bool is_sqrt_tripleword_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_tripleword.
bool is_equals_max_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @equals_max_word.
void minus_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The result of subtracting two words modulo the maximal representable machine word plus 1.
void succ_word_manual_implementation(data_expression &result, const data_expression &e)
The successor function on a machine numbers, that wraps around.
implementation_map machine_word_cpp_implementable_constructors()
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
void equals_max_word_manual_implementation(data_expression &result, const data_expression &e)
Checks whether the argument is equal to the largest 64 bit number.
void mod_doubleword_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2, const data_expression &e3)
Calculates (base*e1 + e2) mod e3. The result fits in one word.
bool is_add_overflow_word_application(const atermpp::aterm &e)
Recogniser for application of @add_overflow_word.
void add_with_carry_overflow_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
An indication whether an overflow occurs when e1 and e2 are added.
void pred_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void add_overflow_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
An indication whether an overflow occurs when e1 and e2 are added.
data_equation_vector machine_word_generate_equations_code()
Give all system defined equations for machine_word.
const core::identifier_string & machine_word_name()
const core::identifier_string & four_word_name()
Generate identifier @four_word.
void sqrt_word_manual_implementation(data_expression &result, const data_expression &e)
The square root of e, rounded down to a machine word.
void div_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const function_symbol & times_word()
Constructor for function symbol @times_word.
void zero_word_application(data_expression &result, const data_expression &a)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_equals_zero_word_application(const atermpp::aterm &e)
Recogniser for application of @equals_zero_word.
void add_with_carry_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
const core::identifier_string & shift_right_name()
Generate identifier @shift_right.
const core::identifier_string & div_double_doubleword_name()
Generate identifier @div_double_doubleword.
const core::identifier_string & max_word_name()
Generate identifier @max_word.
const core::identifier_string & equals_one_word_name()
Generate identifier @equals_one_word.
bool is_minus_word_application(const atermpp::aterm &e)
Recogniser for application of @minus_word.
function_symbol_vector machine_word_generate_constructors_and_functions_code()
Give all system defined mappings and constructors for machine_word.
bool is_div_double_doubleword_function_symbol(const atermpp::aterm &e)
Recogniser for function @div_double_doubleword.
function_symbol_vector machine_word_mCRL2_usable_constructors()
Give all defined constructors which can be used in mCRL2 specs for machine_word.
bool is_rightmost_bit_function_symbol(const atermpp::aterm &e)
Recogniser for function @rightmost_bit.
void rightmost_bit_manual_implementation(data_expression &result, const data_expression &e)
The right most bit of a machine number.
void two_word_application(data_expression &result, const data_expression &a)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
void greater_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The greater than function on two machine words.
bool is_mod_word_application(const atermpp::aterm &e)
Recogniser for application of @mod_word.
bool is_sqrt_tripleword_overflow_application(const atermpp::aterm &e)
Recogniser for application of @sqrt_tripleword_overflow.
void make_sqrt_doubleword(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @sqrt_doubleword.
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
const function_symbol & sqrt_doubleword()
Constructor for function symbol @sqrt_doubleword.
const core::identifier_string & times_with_carry_overflow_word_name()
Generate identifier @times_with_carry_overflow_word.
void div_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
Calculates the division of the first word by the second.
void make_equals_max_word(data_expression &result, const data_expression &arg0)
Make an application of function symbol @equals_max_word.
bool is_times_with_carry_word_application(const atermpp::aterm &e)
Recogniser for application of @times_with_carry_word.
void make_mod_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @mod_word.
void less_equal_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_mod_word_function_symbol(const atermpp::aterm &e)
Recogniser for function @mod_word.
void add_word_application(data_expression &result, const data_expression &a1)
Application of a function that is user defined instead of by rewrite rules. It does not have sort par...
bool is_div_triple_doubleword_application(const atermpp::aterm &e)
Recogniser for application of @div_triple_doubleword.
const function_symbol & shift_right()
Constructor for function symbol @shift_right.
const function_symbol & two_word()
Constructor for function symbol @two_word.
void monus_word_manual_implementation(data_expression &result, const data_expression &e1, const data_expression &e2)
The result of subtracting two words. If the result is negative 0 is returned.
const function_symbol & add_overflow_word()
Constructor for function symbol @add_overflow_word.
void make_not_equal_word(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @not_equal.
function_symbol less_equal(const sort_expression &s)
Constructor for function symbol <=.
function_symbol less(const sort_expression &s)
Constructor for function symbol <.
std::vector< data_equation > data_equation_vector
\brief vector of data_equations
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &codomain)
Convenience constructor for function sort with domain size 1.
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
bool is_basic_sort(const atermpp::aterm &x)
Returns true if the term t is a basic sort.
atermpp::term_list< variable > variable_list
\brief list of variables
function_symbol equal_to(const sort_expression &s)
Constructor for function symbol ==.
bool is_application(const atermpp::aterm &x)
Returns true if the term t is an application.
std::vector< function_symbol > function_symbol_vector
\brief vector of function_symbols
void make_application(atermpp::aterm &result)
Make function for an application.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
Standard functions that are available for all sorts.