15#ifndef MCRL2_DATA_BAG1_H
16#define MCRL2_DATA_BAG1_H
159 static_cast< void >(s);
190 return atermpp::down_cast<function_symbol>(e).name() ==
bag_fbag_name();
378 return f.
name() ==
in_name() && atermpp::down_cast<function_sort>(f.
sort()).domain().
size() == 2;
429 if (s0 ==
bag(s) && s1 ==
bag(s))
431 target_sort =
bag(s);
447 throw mcrl2::runtime_error(
"Cannot compute target sort for union_ with domain sorts " +
pp(s0) +
", " +
pp(s1) +
". ");
514 if (s0 ==
bag(s) && s1 ==
bag(s))
516 target_sort =
bag(s);
548 throw mcrl2::runtime_error(
"Cannot compute target sort for intersection with domain sorts " +
pp(s0) +
", " +
pp(s1) +
". ");
615 if (s0 ==
bag(s) && s1 ==
bag(s))
617 target_sort =
bag(s);
641 throw mcrl2::runtime_error(
"Cannot compute target sort for difference with domain sorts " +
pp(s0) +
", " +
pp(s1) +
". ");
721 return atermpp::down_cast<function_symbol>(e).name() ==
bag2set_name();
783 return atermpp::down_cast<function_symbol>(e).name() ==
set2bag_name();
1285 return atermpp::down_cast<function_symbol>(e).name() ==
fbag_join_name();
1489 return atermpp::down_cast<function_symbol>(e).name() ==
fbag2fset_name();
1567 result.push_back(f);
1615 static_cast< void >(s);
1627 return atermpp::down_cast<application>(e)[0];
1639 return atermpp::down_cast<application>(e)[1];
1651 return atermpp::down_cast<application>(e)[0];
1663 return atermpp::down_cast<application>(e)[0];
1675 return atermpp::down_cast<application>(e)[1];
1687 return atermpp::down_cast<application>(e)[2];
1699 return atermpp::down_cast<application>(e)[3];
1724 result.push_back(
data_equation(
variable_list({vb, ve, vf}),
count(s, ve,
constructor(s, vf, vb)),
sort_nat::swap_zero(vf(ve),
count(s, ve, vb))));
1726 result.push_back(
data_equation(
variable_list({vb, vc, vf, vg}),
equal_to(
constructor(s, vf, vb),
constructor(s, vg, vc)),
if_(
equal_to(vf, vg),
equal_to(vb, vc),
forall(
variable_list({vd}),
equal_to(
count(s, vd,
constructor(s, vf, vb)),
count(s, vd,
constructor(s, vg, vc)))))));
1729 result.push_back(
data_equation(
variable_list({vb, vc, vf, vg}),
union_(s,
constructor(s, vf, vb),
constructor(s, vg, vc)),
constructor(s,
add_function(s, vf, vg),
fbag_join(s, vf, vg, vb, vc))));
1735 result.push_back(
data_equation(
variable_list({vb, vc, vf, vg}),
intersection(s,
constructor(s, vf, vb),
constructor(s, vg, vc)),
constructor(s,
min_function(s, vf, vg),
fbag_intersect(s, vf, vg, vb, vc))));
1737 result.push_back(
data_equation(
variable_list({vb, vd, vp, vx}),
intersection(s,
sort_fbag::cons_(s, vd, vp, vb), vx),
if_(
in(s, vd, vx),
sort_fbag::cons_(s, vd,
sort_nat::minimum(vp,
sort_nat::nat2pos(
count(s, vd, vx))),
intersection(s, vb, vx)),
intersection(s, vb, vx))));
1739 result.push_back(
data_equation(
variable_list({vb, vc, vf, vg}),
difference(s,
constructor(s, vf, vb),
constructor(s, vg, vc)),
constructor(s,
monus_function(s, vf, vg),
fbag_difference(s, vf, vg, vb, vc))));
1741 result.push_back(
data_equation(
variable_list({vb, vd, vp, vx}),
difference(s,
sort_fbag::cons_(s, vd, vp, vb), vx),
if_(
greater(
sort_nat::pos2nat(vp),
count(s, vd, vx)),
sort_fbag::cons_(s, vd,
sort_nat::nat2pos(
sort_nat::monus(
sort_nat::pos2nat(vp),
count(s, vd, vx))),
difference(s, vb, vx)),
difference(s, vb, vx))));
1742 result.push_back(
data_equation(
variable_list({vb, vf}),
bag2set(s,
constructor(s, vf, vb)),
sort_set::constructor(s,
nat2bool_function(s, vf),
fbag2fset(s, vf, vb))));
1743 result.push_back(
data_equation(
variable_list({vh, vs}),
set2bag(s,
sort_set::constructor(s, vh, vs)),
constructor(s,
bool2nat_function(s, vh),
sort_fbag::fset2fbag(s, vs))));
1766 result.push_back(
data_equation(
variable_list({vb, vd, vf, vg, vp}),
fbag_join(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::empty(s)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_add(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::c0()),
fbag_join(s, vf, vg, vb,
sort_fbag::empty(s)))));
1767 result.push_back(
data_equation(
variable_list({vc, ve, vf, vg, vq}),
fbag_join(s, vf, vg,
sort_fbag::empty(s),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, ve,
sort_nat::swap_zero_add(vf(ve), vg(ve),
sort_nat::c0(),
sort_nat::cnat(vq)),
fbag_join(s, vf, vg,
sort_fbag::empty(s), vc))));
1768 result.push_back(
data_equation(
variable_list({vb, vc, vd, vf, vg, vp, vq}),
fbag_join(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, vd, vq, vc)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_add(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::cnat(vq)),
fbag_join(s, vf, vg, vb, vc))));
1769 result.push_back(
data_equation(
variable_list({vb, vc, vd, ve, vf, vg, vp, vq}),
less(vd, ve),
fbag_join(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_add(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::c0()),
fbag_join(s, vf, vg, vb,
sort_fbag::cons_(s, ve, vq, vc)))));
1770 result.push_back(
data_equation(
variable_list({vb, vc, vd, ve, vf, vg, vp, vq}),
less(ve, vd),
fbag_join(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, ve,
sort_nat::swap_zero_add(vf(ve), vg(ve),
sort_nat::c0(),
sort_nat::cnat(vq)),
fbag_join(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb), vc))));
1772 result.push_back(
data_equation(
variable_list({vb, vd, vf, vg, vp}),
fbag_intersect(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::empty(s)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_min(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::c0()),
fbag_intersect(s, vf, vg, vb,
sort_fbag::empty(s)))));
1773 result.push_back(
data_equation(
variable_list({vc, ve, vf, vg, vq}),
fbag_intersect(s, vf, vg,
sort_fbag::empty(s),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, ve,
sort_nat::swap_zero_min(vf(ve), vg(ve),
sort_nat::c0(),
sort_nat::cnat(vq)),
fbag_intersect(s, vf, vg,
sort_fbag::empty(s), vc))));
1774 result.push_back(
data_equation(
variable_list({vb, vc, vd, vf, vg, vp, vq}),
fbag_intersect(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, vd, vq, vc)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_min(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::cnat(vq)),
fbag_intersect(s, vf, vg, vb, vc))));
1775 result.push_back(
data_equation(
variable_list({vb, vc, vd, ve, vf, vg, vp, vq}),
less(vd, ve),
fbag_intersect(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_min(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::c0()),
fbag_intersect(s, vf, vg, vb,
sort_fbag::cons_(s, ve, vq, vc)))));
1776 result.push_back(
data_equation(
variable_list({vb, vc, vd, ve, vf, vg, vp, vq}),
less(ve, vd),
fbag_intersect(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, ve,
sort_nat::swap_zero_min(vf(ve), vg(ve),
sort_nat::c0(),
sort_nat::cnat(vq)),
fbag_intersect(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb), vc))));
1778 result.push_back(
data_equation(
variable_list({vb, vd, vf, vg, vp}),
fbag_difference(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::empty(s)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_monus(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::c0()),
fbag_difference(s, vf, vg, vb,
sort_fbag::empty(s)))));
1779 result.push_back(
data_equation(
variable_list({vc, ve, vf, vg, vq}),
fbag_difference(s, vf, vg,
sort_fbag::empty(s),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, ve,
sort_nat::swap_zero_monus(vf(ve), vg(ve),
sort_nat::c0(),
sort_nat::cnat(vq)),
fbag_difference(s, vf, vg,
sort_fbag::empty(s), vc))));
1780 result.push_back(
data_equation(
variable_list({vb, vc, vd, vf, vg, vp, vq}),
fbag_difference(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, vd, vq, vc)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_monus(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::cnat(vq)),
fbag_difference(s, vf, vg, vb, vc))));
1781 result.push_back(
data_equation(
variable_list({vb, vc, vd, ve, vf, vg, vp, vq}),
less(vd, ve),
fbag_difference(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, vd,
sort_nat::swap_zero_monus(vf(vd), vg(vd),
sort_nat::cnat(vp),
sort_nat::c0()),
fbag_difference(s, vf, vg, vb,
sort_fbag::cons_(s, ve, vq, vc)))));
1782 result.push_back(
data_equation(
variable_list({vb, vc, vd, ve, vf, vg, vp, vq}),
less(ve, vd),
fbag_difference(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb),
sort_fbag::cons_(s, ve, vq, vc)),
sort_fbag::cinsert(s, ve,
sort_nat::swap_zero_monus(vf(ve), vg(ve),
sort_nat::c0(),
sort_nat::cnat(vq)),
fbag_difference(s, vf, vg,
sort_fbag::cons_(s, vd, vp, vb), vc))));
1784 result.push_back(
data_equation(
variable_list({vb, vd, vf, vp}),
fbag2fset(s, vf,
sort_fbag::cons_(s, vd, vp, vb)),
sort_fset::cinsert(s, vd,
equal_to(
equal_to(vf(vd),
sort_nat::cnat(vp)),
greater(vf(vd),
sort_nat::c0())),
fbag2fset(s, vf, vb))));
Term containing a string.
size_type size() const
Returns the number of arguments of this term.
An application of a data expression to a number of arguments.
universal quantification.
\brief Container type for bags
const container_type & container_name() const
sort_expression sort() const
Returns the sort of the data expression.
universal quantification.
const core::identifier_string & name() const
const sort_expression & sort() const
Standard exception class for reporting runtime errors.
The class container_sort.
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.
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_.
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.
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.
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_.
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_.
implementation_map bag_cpp_implementable_mappings(const sort_expression &s)
Give all system defined mappings that are to be implemented in C++ code for bag.
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)
implementation_map bag_cpp_implementable_constructors(const sort_expression &s)
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
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_.
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.
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.
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_.
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 *.
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.
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.
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)
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_.
const core::identifier_string & difference_name()
Generate identifier -.
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)
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.
std::map< function_symbol, std::pair< std::function< void(data_expression &, const data_expression &)>, std::string > > implementation_map
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 -.
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_.
function_symbol one_function(const sort_expression &s)
Constructor for function symbol @one_.
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_.
const basic_sort & bool_()
Constructor for sort expression Bool.
const function_symbol & and_()
Constructor for function symbol &&.
const function_symbol & false_()
Constructor for function symbol false.
container_sort fbag(const sort_expression &s)
Constructor for sort expression FBag(S)
function_symbol cons_(const sort_expression &s)
Constructor for function symbol @fbag_cons.
function_symbol empty(const sort_expression &s)
Constructor for function symbol {:}.
function_symbol cinsert(const sort_expression &s)
Constructor for function symbol @fbag_cinsert.
function_symbol fset2fbag(const sort_expression &s)
Constructor for function symbol @fset2fbag.
function_symbol cinsert(const sort_expression &s)
Constructor for function symbol @fset_cinsert.
function_symbol empty(const sort_expression &s)
Constructor for function symbol {}.
container_sort fset(const sort_expression &s)
Constructor for sort expression FSet(S)
const function_symbol & monus()
Constructor for function symbol @monus.
const function_symbol & c0()
Constructor for function symbol @c0.
const function_symbol & cnat()
Constructor for function symbol @cNat.
const function_symbol & swap_zero_add()
Constructor for function symbol @swap_zero_add.
const basic_sort & nat()
Constructor for sort expression Nat.
const function_symbol & swap_zero()
Constructor for function symbol @swap_zero.
const function_symbol & swap_zero_min()
Constructor for function symbol @swap_zero_min.
function_symbol minimum(const sort_expression &s0, const sort_expression &s1)
function_symbol plus(const sort_expression &s0, const sort_expression &s1)
const function_symbol & swap_zero_monus()
Constructor for function symbol @swap_zero_monus.
const function_symbol & nat2pos()
Constructor for function symbol Nat2Pos.
const function_symbol & pos2nat()
Constructor for function symbol Pos2Nat.
const function_symbol & c1()
Constructor for function symbol @c1.
const basic_sort & pos()
Constructor for sort expression Pos.
function_symbol true_function(const sort_expression &s)
Constructor for function symbol @true_.
container_sort set_(const sort_expression &s)
Constructor for sort expression Set(S)
function_symbol constructor(const sort_expression &s)
Constructor for function symbol @set.
function_symbol false_function(const sort_expression &s)
Constructor for function symbol @false_.
function_symbol less_equal(const sort_expression &s)
Constructor for function symbol <=.
function_symbol not_equal_to(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.
std::string pp(const abstraction &x)
bool is_container_sort(const atermpp::aterm &x)
Returns true if the term t is a container sort.
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
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
function_symbol if_(const sort_expression &s)
Constructor for function symbol if.
void make_application(atermpp::aterm &result)
Make function for an application.
function_symbol greater(const sort_expression &s)
Constructor for function symbol >
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.