15#ifndef MCRL2_DATA_FUNCTION_UPDATE_H
16#define MCRL2_DATA_FUNCTION_UPDATE_H
275 const application& a=atermpp::down_cast<application>(a1);
365 const application& a=atermpp::down_cast<application>(a1);
417 typedef std::map<function_symbol,std::pair<std::function<void(data_expression&,
const data_expression&)>, std::string> >
implementation_map;
439 return atermpp::down_cast<application>(e)[0];
451 return atermpp::down_cast<application>(e)[1];
463 return atermpp::down_cast<application>(e)[2];
480 result.push_back(
data_equation(
variable_list({vf, vv, vx}),
is_not_a_function_update(s, t, vf),
function_update(s, t, vf, vx, vv),
if_always_else(s, t,
equal_to(vf(vx), vv), vf,
function_update_stable(s, t, vf, vx, vv))));
481 result.push_back(
data_equation(
variable_list({vf, vv, vw, vx}),
function_update(s, t,
function_update_stable(s, t, vf, vx, vw), vx, vv),
if_always_else(s, t,
equal_to(vf(vx), vv), vf,
function_update_stable(s, t, vf, vx, vv))));
482 result.push_back(
data_equation(
variable_list({vf, vv, vw, vx, vy}),
less(vy, vx),
function_update(s, t,
function_update_stable(s, t, vf, vy, vw), vx, vv),
function_update_stable(s, t,
function_update(s, t, vf, vx, vv), vy, vw)));
483 result.push_back(
data_equation(
variable_list({vf, vv, vw, vx, vy}),
less(vx, vy),
function_update(s, t,
function_update_stable(s, t, vf, vy, vw), vx, vv),
if_always_else(s, t,
equal_to(vf(vx), vv),
function_update_stable(s, t, vf, vy, vw),
function_update_stable(s, t,
function_update_stable(s, t, vf, vy, vw), vx, vv))));
484 result.push_back(
data_equation(
variable_list({vf, vv, vx, vy}),
not_equal_to(vx, vy),
function_update_stable(s, t, vf, vx, vv)(vy), vf(vy)));
486 result.push_back(
data_equation(
variable_list({vf, vv, vx, vy}),
function_update(s, t, vf, vx, vv)(vy),
if_(
equal_to(vx, vy), vv, vf(vy))));
Term containing a string.
An application of a data expression to a number of arguments.
The class function symbol.
This files contains the implementation of the function "is_not_a_function_update" which was declared ...
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 if_always_else_manual_implementation(data_expression &result, const data_expression &b, const data_expression &e1, const data_expression &e2)
The data expression of an application of the function symbol @if_always_else.
bool is_if_always_else_function_symbol(const atermpp::aterm &e)
Recogniser for function @if_always_else.
function_symbol_vector function_update_mCRL2_usable_mappings(const sort_expression &s, const sort_expression &t)
Give all system defined mappings that can be used in mCRL2 specs for function_update.
bool is_is_not_a_function_update_application(const atermpp::aterm &e)
Recogniser for application of @is_not_an_update.
function_symbol not_equal_to(const sort_expression &s)
Constructor for function symbol !=.
const data_expression & arg1(const data_expression &e)
Function for projecting out argument. arg1 from an application.
function_symbol_vector function_update_mCRL2_usable_constructors()
Give all defined constructors which can be used in mCRL2 specs for function_update.
void make_function_update_stable(data_expression &result, const sort_expression &s, const sort_expression &t, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @func_update_stable.
implementation_map function_update_cpp_implementable_mappings(const sort_expression &s, const sort_expression &t)
Give all system defined mappings that are to be implemented in C++ code for function_update.
function_symbol if_always_else(const sort_expression &s, const sort_expression &t)
Constructor for function symbol @if_always_else.
function_symbol less(const sort_expression &s)
Constructor for function symbol <.
void make_function_update(data_expression &result, const sort_expression &s, const sort_expression &t, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @func_update.
const core::identifier_string & function_update_name()
Generate identifier @func_update.
void if_always_else_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...
function_symbol_vector function_update_generate_constructors_and_functions_code(const sort_expression &s, const sort_expression &t)
Give all system defined mappings and constructors for function_update.
bool is_if_always_else_application(const atermpp::aterm &e)
Recogniser for application of @if_always_else.
std::vector< data_equation > data_equation_vector
\brief vector of data_equations
function_symbol_vector function_update_generate_constructors_code()
Give all system defined constructors for function_update.
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &codomain)
Convenience constructor for function sort with domain size 1.
const core::identifier_string & if_always_else_name()
Generate identifier @if_always_else.
const core::identifier_string & is_not_a_function_update_name()
Generate identifier @is_not_an_update.
bool is_function_update_function_symbol(const atermpp::aterm &e)
Recogniser for function @func_update.
void is_not_a_function_update_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_if_always_else(data_expression &result, const sort_expression &s, const sort_expression &t, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @if_always_else.
bool is_function_update_stable_function_symbol(const atermpp::aterm &e)
Recogniser for function @func_update_stable.
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
data_equation_vector function_update_generate_equations_code(const sort_expression &s, const sort_expression &t)
Give all system defined equations for function_update.
bool is_function_update_stable_application(const atermpp::aterm &e)
Recogniser for application of @func_update_stable.
atermpp::term_list< variable > variable_list
\brief list of variables
void is_not_a_function_update_manual_implementation(data_expression &result, const data_expression &f)
The data expression of an application of the function symbol @is_not_an_update.
implementation_map function_update_cpp_implementable_constructors()
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
function_symbol equal_to(const sort_expression &s)
Constructor for function symbol ==.
function_symbol function_update_stable(const sort_expression &s, const sort_expression &t)
Constructor for function symbol @func_update_stable.
bool is_function_update_application(const atermpp::aterm &e)
Recogniser for application of @func_update.
void make_is_not_a_function_update(data_expression &result, const sort_expression &s, const sort_expression &t, const data_expression &arg0)
Make an application of function symbol @is_not_an_update.
std::map< function_symbol, std::pair< std::function< void(data_expression &, const data_expression &)>, std::string > > implementation_map
function_symbol_vector function_update_generate_functions_code(const sort_expression &s, const sort_expression &t)
Give all system defined mappings for function_update.
bool is_is_not_a_function_update_function_symbol(const atermpp::aterm &e)
Recogniser for function @is_not_an_update.
function_symbol function_update(const sort_expression &s, const sort_expression &t)
Constructor for function symbol @func_update.
const core::identifier_string & function_update_stable_name()
Generate identifier @func_update_stable.
const data_expression & arg3(const data_expression &e)
Function for projecting out argument. arg3 from an application.
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
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
function_symbol if_(const sort_expression &s)
Constructor for function symbol if.
function_symbol is_not_a_function_update(const sort_expression &s, const sort_expression &t)
Constructor for function symbol @is_not_an_update.
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.