12#ifndef MCRL2_PROCESS_PROCESS_EXPRESSION_H
13#define MCRL2_PROCESS_PROCESS_EXPRESSION_H
153 assert(core::detail::check_term_Action(*
this));
169 return atermpp::down_cast<action_label>((*
this)[0]);
174 return atermpp::down_cast<data::data_expression_list>((*
this)[1]);
180template <
class... ARGUMENTS>
202std::string
pp(
const action& x);
235 assert(core::detail::check_term_Process(*
this));
251 return atermpp::down_cast<process_identifier>((*
this)[0]);
256 return atermpp::down_cast<data::data_expression_list>((*
this)[1]);
262template <
class... ARGUMENTS>
278std::string
pp(
const process_instance& x);
311 assert(core::detail::check_term_ProcessAssignment(*
this));
327 return atermpp::down_cast<process_identifier>((*
this)[0]);
332 return atermpp::down_cast<data::assignment_list>((*
this)[1]);
338template <
class... ARGUMENTS>
354std::string
pp(
const process_instance_assignment& x);
387 assert(core::detail::check_term_Delta(*
this));
403 return x.
function() == core::detail::function_symbols::Delta;
407std::string pp(
const delta& x);
414std::ostream& operator<<(std::ostream& out,
const delta& x)
416 return out << process::pp(x);
440 assert(core::detail::check_term_Tau(*
this));
446 tau& operator=(const
tau&) noexcept = default;
447 tau& operator=(
tau&&) noexcept = default;
456 return x.
function() == core::detail::function_symbols::Tau;
460std::string pp(
const tau& x);
467std::ostream& operator<<(std::ostream& out,
const tau& x)
469 return out << process::pp(x);
493 assert(core::detail::check_term_Sum(*
this));
504 sum& operator=(const
sum&) noexcept = default;
505 sum& operator=(
sum&&) noexcept = default;
507 const data::variable_list& variables()
const
509 return atermpp::down_cast<data::variable_list>((*
this)[0]);
514 return atermpp::down_cast<process_expression>((*
this)[1]);
520template <
class... ARGUMENTS>
532 return x.
function() == core::detail::function_symbols::Sum;
536std::string pp(
const sum& x);
543std::ostream& operator<<(std::ostream& out,
const sum& x)
545 return out << process::pp(x);
569 assert(core::detail::check_term_Block(*
this));
583 const core::identifier_string_list& block_set()
const
585 return atermpp::down_cast<core::identifier_string_list>((*
this)[0]);
590 return atermpp::down_cast<process_expression>((*
this)[1]);
596template <
class... ARGUMENTS>
608 return x.
function() == core::detail::function_symbols::Block;
612std::string pp(
const block& x);
619std::ostream& operator<<(std::ostream& out,
const block& x)
621 return out << process::pp(x);
645 assert(core::detail::check_term_Hide(*
this));
659 const core::identifier_string_list& hide_set()
const
661 return atermpp::down_cast<core::identifier_string_list>((*
this)[0]);
666 return atermpp::down_cast<process_expression>((*
this)[1]);
672template <
class... ARGUMENTS>
684 return x.
function() == core::detail::function_symbols::Hide;
688std::string pp(
const hide& x);
695std::ostream& operator<<(std::ostream& out,
const hide& x)
697 return out << process::pp(x);
721 assert(core::detail::check_term_Rename(*
this));
737 return atermpp::down_cast<rename_expression_list>((*
this)[0]);
742 return atermpp::down_cast<process_expression>((*
this)[1]);
748template <
class... ARGUMENTS>
760 return x.
function() == core::detail::function_symbols::Rename;
764std::string pp(
const rename& x);
771std::ostream& operator<<(std::ostream& out,
const rename& x)
773 return out << process::pp(x);
797 assert(core::detail::check_term_Comm(*
this));
813 return atermpp::down_cast<communication_expression_list>((*
this)[0]);
818 return atermpp::down_cast<process_expression>((*
this)[1]);
824template <
class... ARGUMENTS>
836 return x.
function() == core::detail::function_symbols::Comm;
840std::string pp(
const comm& x);
847std::ostream& operator<<(std::ostream& out,
const comm& x)
849 return out << process::pp(x);
873 assert(core::detail::check_term_Allow(*
this));
889 return atermpp::down_cast<action_name_multiset_list>((*
this)[0]);
894 return atermpp::down_cast<process_expression>((*
this)[1]);
900template <
class... ARGUMENTS>
912 return x.
function() == core::detail::function_symbols::Allow;
916std::string pp(
const allow& x);
923std::ostream& operator<<(std::ostream& out,
const allow& x)
925 return out << process::pp(x);
949 assert(core::detail::check_term_Sync(*
this));
965 return atermpp::down_cast<process_expression>((*
this)[0]);
970 return atermpp::down_cast<process_expression>((*
this)[1]);
976template <
class... ARGUMENTS>
988 return x.
function() == core::detail::function_symbols::Sync;
992std::string pp(
const sync& x);
999std::ostream& operator<<(std::ostream& out,
const sync& x)
1001 return out << process::pp(x);
1025 assert(core::detail::check_term_AtTime(*
this));
1036 at& operator=(const
at&) noexcept = default;
1037 at& operator=(
at&&) noexcept = default;
1041 return atermpp::down_cast<process_expression>((*
this)[0]);
1046 return atermpp::down_cast<data::data_expression>((*
this)[1]);
1052template <
class... ARGUMENTS>
1064 return x.
function() == core::detail::function_symbols::AtTime;
1068std::string pp(
const at& x);
1075std::ostream& operator<<(std::ostream& out,
const at& x)
1077 return out << process::pp(x);
1101 assert(core::detail::check_term_Seq(*
this));
1112 seq& operator=(const
seq&) noexcept = default;
1117 return atermpp::down_cast<process_expression>((*
this)[0]);
1122 return atermpp::down_cast<process_expression>((*
this)[1]);
1128template <
class... ARGUMENTS>
1140 return x.
function() == core::detail::function_symbols::Seq;
1144std::string pp(
const seq& x);
1151std::ostream& operator<<(std::ostream& out,
const seq& x)
1153 return out << process::pp(x);
1177 assert(core::detail::check_term_IfThen(*
this));
1191 const data::data_expression& condition()
const
1193 return atermpp::down_cast<data::data_expression>((*
this)[0]);
1198 return atermpp::down_cast<process_expression>((*
this)[1]);
1204template <
class... ARGUMENTS>
1216 return x.
function() == core::detail::function_symbols::IfThen;
1220std::string pp(
const if_then& x);
1227std::ostream& operator<<(std::ostream& out,
const if_then& x)
1229 return out << process::pp(x);
1253 assert(core::detail::check_term_IfThenElse(*
this));
1267 const data::data_expression& condition()
const
1269 return atermpp::down_cast<data::data_expression>((*
this)[0]);
1274 return atermpp::down_cast<process_expression>((*
this)[1]);
1279 return atermpp::down_cast<process_expression>((*
this)[2]);
1285template <
class... ARGUMENTS>
1297 return x.
function() == core::detail::function_symbols::IfThenElse;
1301std::string pp(
const if_then_else& x);
1310 return out << process::pp(x);
1334 assert(core::detail::check_term_BInit(*
this));
1350 return atermpp::down_cast<process_expression>((*
this)[0]);
1355 return atermpp::down_cast<process_expression>((*
this)[1]);
1361template <
class... ARGUMENTS>
1373 return x.
function() == core::detail::function_symbols::BInit;
1377std::string pp(
const bounded_init& x);
1386 return out << process::pp(x);
1410 assert(core::detail::check_term_Merge(*
this));
1426 return atermpp::down_cast<process_expression>((*
this)[0]);
1431 return atermpp::down_cast<process_expression>((*
this)[1]);
1437template <
class... ARGUMENTS>
1449 return x.
function() == core::detail::function_symbols::Merge;
1453std::string pp(
const merge& x);
1460std::ostream& operator<<(std::ostream& out,
const merge& x)
1462 return out << process::pp(x);
1486 assert(core::detail::check_term_LMerge(*
this));
1502 return atermpp::down_cast<process_expression>((*
this)[0]);
1507 return atermpp::down_cast<process_expression>((*
this)[1]);
1513template <
class... ARGUMENTS>
1525 return x.
function() == core::detail::function_symbols::LMerge;
1529std::string pp(
const left_merge& x);
1538 return out << process::pp(x);
1562 assert(core::detail::check_term_Choice(*
this));
1578 return atermpp::down_cast<process_expression>((*
this)[0]);
1583 return atermpp::down_cast<process_expression>((*
this)[1]);
1589template <
class... ARGUMENTS>
1601 return x.
function() == core::detail::function_symbols::Choice;
1605std::string pp(
const choice& x);
1612std::ostream& operator<<(std::ostream& out,
const choice& x)
1614 return out << process::pp(x);
1638 assert(core::detail::check_term_StochasticOperator(*
this));
1643 :
process_expression(
atermpp::aterm(core::detail::function_symbol_StochasticOperator(), variables, distribution, operand))
1652 const data::variable_list& variables()
const
1654 return atermpp::down_cast<data::variable_list>((*
this)[0]);
1659 return atermpp::down_cast<data::data_expression>((*
this)[1]);
1664 return atermpp::down_cast<process_expression>((*
this)[2]);
1670template <
class... ARGUMENTS>
1682 return x.
function() == core::detail::function_symbols::StochasticOperator;
1686std::string pp(
const stochastic_operator& x);
1695 return out << process::pp(x);
1719 assert(core::detail::check_term_UntypedProcessAssignment(*
this));
1729 :
process_expression(
atermpp::aterm(core::detail::function_symbol_UntypedProcessAssignment(), core::identifier_string(name), assignments))
1738 const core::identifier_string& name()
const
1740 return atermpp::down_cast<core::identifier_string>((*
this)[0]);
1745 return atermpp::down_cast<data::untyped_identifier_assignment_list>((*
this)[1]);
1751template <
class... ARGUMENTS>
1763 return x.
function() == core::detail::function_symbols::UntypedProcessAssignment;
1767std::string pp(
const untyped_process_assignment& x);
1776 return out << process::pp(x);
1787std::string pp(
const process_expression_list& x);
1788std::string pp(
const process_expression_vector& x);
1790std::string pp(
const action_list& x);
1791std::string pp(
const action_vector& x);
1793action translate_user_notation(
const action& x);
1795std::set<data::variable> find_all_variables(
const action& x);
1796std::set<data::variable> find_free_variables(
const action& x);
1814 if (a_args.
size() != b_args.
size())
1835 return std::hash<atermpp::aterm>()(t);
void swap(StaticGraph &a, StaticGraph &b)
Term containing a string.
aterm()
Default constructor.
const function_symbol & function() const
Returns the function symbol belonging to an aterm.
size_type size() const
Returns the size of the term_list.
const_iterator end() const
Returns a const_iterator pointing to the end of the term_list.
const_iterator begin() const
Returns a const_iterator pointing to the beginning of the term_list.
void swap(unprotected_aterm_core &t) noexcept
Swaps this term with its argument.
\brief An untyped parameter
action(const action_label &label, const data::data_expression_list &arguments)
\brief Constructor Z14.
action()
\brief Default constructor X3.
action(const atermpp::aterm &term)
action(action &&) noexcept=default
const data::data_expression_list & arguments() const
action(const action &) noexcept=default
Move semantics.
const action_label & label() const
\brief The allow operator
allow(const allow &) noexcept=default
Move semantics.
allow()
\brief Default constructor X3.
allow(const atermpp::aterm &term)
const process_expression & operand() const
allow(const action_name_multiset_list &allow_set, const process_expression &operand)
\brief Constructor Z14.
allow(allow &&) noexcept=default
at(at &&) noexcept=default
at(const atermpp::aterm &term)
at(const at &) noexcept=default
Move semantics.
at()
\brief Default constructor X3.
at(const process_expression &operand, const data::data_expression &time_stamp)
\brief Constructor Z14.
const data::data_expression & time_stamp() const
\brief The block operator
const process_expression & operand() const
block(block &&) noexcept=default
block(const block &) noexcept=default
Move semantics.
block(const atermpp::aterm &term)
block()
\brief Default constructor X3.
block(const core::identifier_string_list &block_set, const process_expression &operand)
\brief Constructor Z14.
\brief The bounded initialization
bounded_init(const bounded_init &) noexcept=default
Move semantics.
const process_expression & right() const
bounded_init(bounded_init &&) noexcept=default
bounded_init(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
bounded_init(const atermpp::aterm &term)
bounded_init()
\brief Default constructor X3.
\brief The choice operator
choice(const atermpp::aterm &term)
choice(const choice &) noexcept=default
Move semantics.
choice()
\brief Default constructor X3.
choice(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
choice(choice &&) noexcept=default
const process_expression & right() const
\brief The communication operator
comm(const atermpp::aterm &term)
comm(comm &&) noexcept=default
comm(const comm &) noexcept=default
Move semantics.
comm(const communication_expression_list &comm_set, const process_expression &operand)
\brief Constructor Z14.
const process_expression & operand() const
comm()
\brief Default constructor X3.
delta()
\brief Default constructor X3.
delta(const atermpp::aterm &term)
delta(delta &&) noexcept=default
delta(const delta &) noexcept=default
Move semantics.
hide(hide &&) noexcept=default
hide(const atermpp::aterm &term)
hide(const core::identifier_string_list &hide_set, const process_expression &operand)
\brief Constructor Z14.
const process_expression & operand() const
hide(const hide &) noexcept=default
Move semantics.
hide()
\brief Default constructor X3.
\brief The if-then-else operator
const process_expression & else_case() const
if_then_else(if_then_else &&) noexcept=default
const process_expression & then_case() const
if_then_else(const atermpp::aterm &term)
if_then_else()
\brief Default constructor X3.
if_then_else(const if_then_else &) noexcept=default
Move semantics.
if_then_else(const data::data_expression &condition, const process_expression &then_case, const process_expression &else_case)
\brief Constructor Z14.
\brief The if-then operator
const process_expression & then_case() const
if_then(const data::data_expression &condition, const process_expression &then_case)
\brief Constructor Z14.
if_then(const atermpp::aterm &term)
if_then(const if_then &) noexcept=default
Move semantics.
if_then(if_then &&) noexcept=default
if_then()
\brief Default constructor X3.
\brief The left merge operator
left_merge(left_merge &&) noexcept=default
const process_expression & right() const
left_merge(const atermpp::aterm &term)
left_merge(const left_merge &) noexcept=default
Move semantics.
left_merge(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
left_merge()
\brief Default constructor X3.
\brief The merge operator
merge(const atermpp::aterm &term)
const process_expression & right() const
merge(const merge &) noexcept=default
Move semantics.
merge(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
merge(merge &&) noexcept=default
merge()
\brief Default constructor X3.
\brief A process expression
process_expression(const process_expression &) noexcept=default
Move semantics.
process_expression()
\brief Default constructor X3.
process_expression(const data::untyped_data_parameter &x)
\brief Constructor Z6.
process_expression(process_expression &&) noexcept=default
process_expression(const atermpp::aterm &term)
\brief A process identifier
\brief A process assignment
process_instance_assignment(const process_instance_assignment &) noexcept=default
Move semantics.
process_instance_assignment()
\brief Default constructor X3.
process_instance_assignment(const process_identifier &identifier, const data::assignment_list &assignments)
\brief Constructor Z14.
process_instance_assignment(process_instance_assignment &&) noexcept=default
const data::assignment_list & assignments() const
process_instance_assignment(const atermpp::aterm &term)
const data::data_expression_list & actual_parameters() const
process_instance(const process_identifier &identifier, const data::data_expression_list &actual_parameters)
\brief Constructor Z14.
process_instance(process_instance &&) noexcept=default
process_instance()
\brief Default constructor X3.
process_instance(const atermpp::aterm &term)
process_instance(const process_instance &) noexcept=default
Move semantics.
\brief The rename operator
rename(const atermpp::aterm &term)
rename(const rename &) noexcept=default
Move semantics.
rename()
\brief Default constructor X3.
const process_expression & operand() const
rename(rename &&) noexcept=default
rename(const rename_expression_list &rename_set, const process_expression &operand)
\brief Constructor Z14.
\brief The sequential composition
const process_expression & right() const
seq(const atermpp::aterm &term)
seq()
\brief Default constructor X3.
seq(seq &&) noexcept=default
seq(const seq &) noexcept=default
Move semantics.
seq(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
\brief The distribution operator
const data::data_expression & distribution() const
stochastic_operator()
\brief Default constructor X3.
stochastic_operator(const atermpp::aterm &term)
stochastic_operator(stochastic_operator &&) noexcept=default
stochastic_operator(const stochastic_operator &) noexcept=default
Move semantics.
const process_expression & operand() const
stochastic_operator(const data::variable_list &variables, const data::data_expression &distribution, const process_expression &operand)
\brief Constructor Z14.
const process_expression & operand() const
sum(const data::variable_list &variables, const process_expression &operand)
\brief Constructor Z14.
sum(const atermpp::aterm &term)
sum()
\brief Default constructor X3.
sum(sum &&) noexcept=default
sum(const sum &) noexcept=default
Move semantics.
\brief The synchronization operator
sync(sync &&) noexcept=default
sync(const sync &) noexcept=default
Move semantics.
sync()
\brief Default constructor X3.
sync(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
const process_expression & right() const
sync(const atermpp::aterm &term)
tau(const tau &) noexcept=default
Move semantics.
tau()
\brief Default constructor X3.
tau(const atermpp::aterm &term)
tau(tau &&) noexcept=default
\brief An untyped process assginment
const data::untyped_identifier_assignment_list & assignments() const
untyped_process_assignment(const core::identifier_string &name, const data::untyped_identifier_assignment_list &assignments)
\brief Constructor Z14.
untyped_process_assignment(const atermpp::aterm &term)
untyped_process_assignment()
\brief Default constructor X3.
untyped_process_assignment(const std::string &name, const data::untyped_identifier_assignment_list &assignments)
\brief Constructor Z2.
untyped_process_assignment(untyped_process_assignment &&) noexcept=default
untyped_process_assignment(const untyped_process_assignment &) noexcept=default
Move semantics.
add your file description here.
The main namespace for the aterm++ library.
void make_term_appl(Term &target, const function_symbol &sym, ForwardIterator begin, ForwardIterator end)
Constructor an aterm in a variable based on a function symbol and an forward iterator providing the a...
const atermpp::function_symbol & function_symbol_Action()
const atermpp::function_symbol & function_symbol_Process()
bool check_rule_ProcExpr(const Term &t)
const atermpp::function_symbol & function_symbol_ProcessAssignment()
bool is_untyped_data_parameter(const atermpp::aterm &x)
bool is_at(const atermpp::aterm &x)
void make_allow(atermpp::aterm &t, const ARGUMENTS &... args)
void make_choice(atermpp::aterm &t, const ARGUMENTS &... args)
std::vector< process_expression > process_expression_vector
\brief vector of process_expressions
void swap(action_label &t1, action_label &t2)
\brief swap overload
bool is_process_instance(const atermpp::aterm &x)
void make_merge(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_process_expression(const atermpp::aterm &x)
bool is_process_instance_assignment(const atermpp::aterm &x)
bool is_tau(const atermpp::aterm &x)
void make_action(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_seq(const atermpp::aterm &x)
void make_sync(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_merge(const atermpp::aterm &x)
void make_if_then_else(atermpp::aterm &t, const ARGUMENTS &... args)
void make_hide(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_allow(const atermpp::aterm &x)
void make_if_then(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_bounded_init(const atermpp::aterm &x)
bool is_delta(const atermpp::aterm &x)
void make_block(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sum(const atermpp::aterm &x)
bool is_block(const atermpp::aterm &x)
bool is_if_then_else(const atermpp::aterm &x)
bool is_comm(const atermpp::aterm &x)
bool is_action(const atermpp::aterm &x)
bool is_left_merge(const atermpp::aterm &x)
std::vector< action > action_vector
\brief vector of actions
void make_stochastic_operator(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const action_label &x)
atermpp::term_list< action > action_list
\brief list of actions
void make_process_instance(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_hide(const atermpp::aterm &x)
bool is_if_then(const atermpp::aterm &x)
void make_untyped_process_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_instance_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_choice(const atermpp::aterm &x)
void make_comm(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_stochastic_operator(const atermpp::aterm &x)
void make_bounded_init(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const action_label &x)
bool is_rename(const atermpp::aterm &x)
bool is_untyped_process_assignment(const atermpp::aterm &x)
void make_rename(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sync(const atermpp::aterm &x)
bool equal_signatures(const action &a, const action &b)
Compares the signatures of two actions.
void make_left_merge(atermpp::aterm &t, const ARGUMENTS &... args)
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
add your file description here.
static const atermpp::function_symbol ProcessAssignment
static const atermpp::function_symbol Action
static const atermpp::function_symbol Process
Represents the set AI*. If the attribute A_includes_subsets is true, also subsets of the elements are...
std::size_t operator()(const mcrl2::process::action &t) const
add your file description here.