mCRL2
Loading...
Searching...
No Matches
linearise_allow_block.h
Go to the documentation of this file.
1// Author(s): Jan Friso Groote, Jeroen Keiren
2// Copyright: see the accompanying file COPYING or copy at
3// https://github.com/mCRL2org/mCRL2/blob/master/COPYING
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
9/// \file mcrl2/lps/linearise_allow_block.h
10/// \brief Apply the allow and block operators to summands.
11
12#ifndef MCRL2_LPS_LINEARISE_ALLLOW_BLOCK_H
13#define MCRL2_LPS_LINEARISE_ALLLOW_BLOCK_H
14
15#include "mcrl2/atermpp/aterm_list.h"
16#include "mcrl2/core/identifier_string.h"
17#include "mcrl2/lps/deadlock_summand.h"
18#include "mcrl2/lps/detail/configuration.h"
19#include "mcrl2/lps/linearise_utility.h"
20#include "mcrl2/lps/stochastic_action_summand.h"
21#include "mcrl2/process/action_name_multiset.h"
22#include "mcrl2/process/process_expression.h"
23
24namespace mcrl2::lps
25{
26
29 const bool is_allow,
32 const bool apply_delta_elimination,
33 const bool ignore_time,
34 size_t indent = 0)
35{
36 std::string indent_str(indent, ' ');
37 std::ostringstream os;
38
39 if (is_allow)
40 {
41 os << indent_str << "- operator: allow" << std::endl;
42
43 indent += 2;
44 indent_str = std::string(indent, ' ');
45 os << indent_str << "number of allowed multiactions: " << num_allowed_multiactions << std::endl;
46 }
47 else
48 {
49 os << indent_str << "- operator: block" << std::endl;
50
51 indent += 2;
52 indent_str = std::string(indent, ' ');
53 os << indent_str << "number of blocked actions: " << num_blocked_actions << std::endl;
54 }
55
56 os << indent_str << std::boolalpha << "apply delta elimination: " << apply_delta_elimination << std::endl
57 << indent_str << "ignore time: " << ignore_time << std::endl
58 << indent_str << "before:" << std::endl
59 << print(lps_statistics_before, indent + 2) << indent_str << "after:" << std::endl
60 << print(lps_statistics_after, indent + 2);
61
62 return os.str();
63}
64
65/**************** allow/block *************************************/
66
67namespace detail
68{
69/// Cache for the allowed actions
70/// The cache is used to avoid linear searches in the allow list.
72
73/// Calculate the allow_list_cache from the allow_list.
74/// This is used to speed up the lookups when determining is a multi-action is allowed.
75inline
77{
78 allow_list_cache result;
79 for (const process::action_name_multiset& allow_action : allowlist)
80 {
81 assert(std::is_sorted(allow_action.names().begin(), allow_action.names().end(), process::action_name_compare()));
82 result.insert(allow_action.names());
83 }
84 return result;
85}
86
87/// Calculate the list of action names that appear in a multi-action.
88inline
89core::identifier_string_list names(const process::action_list& multi_action)
90{
91 return core::identifier_string_list(
92 multi_action.begin(),
93 multi_action.end(),
94 [](const process::action& a)
95 {
96 return a.label().name();
97 });
98}
99}
100
101/// \brief Determine if multi_action is allowed by an allow expression in allow_list
102///
103/// Calculates if the names of the action in multi_action match with an expression in allow_list.
104/// If multi_action is the termination action, or multi_action is the empty multiaction, the result is also true.
105inline bool allow_(const detail::allow_list_cache& allow_cache,
106 const process::action_list& multi_action,
107 const process::action& termination_action)
108{
109 assert(std::is_sorted(multi_action.begin(), multi_action.end()));
110
111 // The empty multiaction and the termination action can never be blocked by allows.
112 if (multi_action.empty() || multi_action == process::action_list({termination_action}))
113 {
114 return true;
115 }
116
117 const core::identifier_string_list multi_action_names = detail::names(multi_action);
118 return allow_cache.find(multi_action_names) != allow_cache.end();
119}
120
121/// \brief Calculate if any of the actions in multiaction is blocked by encap_list.
122///
123/// \param blocked_actions is a list of action names that are blocked.
124/// \param multi_action contains a multiaction a1(d1)|...|an(dn)
125/// \returns \exists i: ai \in encap_list
126template <typename Container>
127bool encap(const Container& blocked_actions, const process::action_list& multiaction)
128{
129 static_assert(std::is_same_v<typename Container::value_type, core::identifier_string>, "Container must contain core::identifier_string");
130
131 assert(std::is_sorted(blocked_actions.begin(), blocked_actions.end(), process::action_name_compare()));
132 assert(std::is_sorted(multiaction.begin(), multiaction.end()));
133
134 core::identifier_string_list::const_iterator blocked_actions_it = blocked_actions.begin();
135 process::action_list::const_iterator multiaction_it = multiaction.begin();
136
137 while (blocked_actions_it != blocked_actions.end() && multiaction_it != multiaction.end())
138 {
139 if (*blocked_actions_it == multiaction_it->label().name())
140 {
141 return true;
142 }
143
144 if (process::action_name_compare()(*blocked_actions_it, multiaction_it->label().name()))
145 {
146 ++blocked_actions_it;
147 }
148 else
149 {
150 // The following assertion should hold because blocked_actions_it is not less than or equal to the name
151 // of multiaction_it
152 assert(process::action_name_compare()(multiaction_it->label().name(), *blocked_actions_it));
153 ++multiaction_it;
154 }
155 }
156
157 return false;
158}
159
160/// \brief Calculate if any of the actions in multiaction is blocked by encap_list.
161///
162/// \param encap_list is a list of action_name_multisets of size 1. Its single element contains all the blocked actions.
163/// \param multi_action contains a multiaction a1(d1)|...|an(dn)
164/// \returns \exists i: ai \in encap_list
165inline bool encap(const process::action_name_multiset_list& encaplist, const process::action_list& multiaction)
166{
167 assert(encaplist.size() == 1);
168 assert(std::is_sorted(multiaction.begin(), multiaction.end()));
169
170 const core::identifier_string_list& blocked_actions = encaplist.front().names();
171 return encap(blocked_actions, multiaction);
172}
173
174/// Calculate the application of the allow or block operator over the action
175/// summands.
176///
177/// \param allowlist1 the allowset. If is_allow is false, the list has length 1,
178/// and its only element contains the blocked actions.
179/// \param is_allow determines if we calculate the allow or the block operator
180/// \param action_summands the summands over which to compute the operator
181/// \param deadlock_summands the deadlock summands tha may be extended.
182/// \param termination_action the termination action generated by the linearizer. This action is always allowed.
183/// \param ignore_time if true, and nodeltaelimination is false, a true->delta summand is added that subsumes all other
184/// deadlock summands \param nodeltaaelimination do not eliminate deadlock summands.
186 const process::action_name_multiset_list& allowlist1, // This is a list of list of identifierstring.
187 const bool is_allow,
188 stochastic_action_summand_vector& action_summands,
189 deadlock_summand_vector& deadlock_summands,
190 const process::action& termination_action,
191 bool ignore_time,
192 bool nodeltaelimination)
193{
194 // Only keep statistics when these are relevant.
195 lps_statistics_t lps_statistics_before = get_statistics(action_summands, deadlock_summands);
196
197 mCRL2log(mcrl2::log::trace) << "Calculating " << ((is_allow) ? "allow" : "block") << " composition using a set of "
198 << ((is_allow) ? allowlist1.size() : allowlist1.front().size())
199 << ((is_allow) ? " allowed multiactions" : " blocked actions") << std::endl;
200 mCRL2log(mcrl2::log::trace) << ((is_allow) ? "Allowed multiactions: " : "Blocked actions: ") << std::endl
201 << ((is_allow) ? core::detail::print_set(allowlist1)
202 : core::detail::print_set(allowlist1.front()))
203 << std::endl;
204 /* This function calculates the allow or the block operator,
205 depending on whether is_allow is true */
206
207 stochastic_action_summand_vector sourcesumlist;
208 action_summands.swap(sourcesumlist);
209
210 deadlock_summand_vector resultdeltasumlist;
211 deadlock_summand_vector resultsimpledeltasumlist;
212 deadlock_summands.swap(resultdeltasumlist);
213
214 process::action_name_multiset_list allowlist(allowlist1);
215
216 std::size_t sourcesumlist_length = sourcesumlist.size();
217 if (sourcesumlist_length > 2 || is_allow) // This condition prevents this message to be printed
218 // when performing data elimination. In this case the
219 // term delta is linearised, to determine which data
220 // is essential for all processes. In these cases a
221 // message about the block operator is very confusing.
222 {
223 mCRL2log(mcrl2::log::verbose) << "- calculating the " << (is_allow ? "allow" : "block") << " operator on "
224 << sourcesumlist.size() << " action summands and " << resultdeltasumlist.size()
225 << " delta summands";
226 }
227
228 /// Cache the list of allowed actions, to avoid linear searches in the allow list.
229 detail::allow_list_cache allow_cache;
230 if (is_allow)
231 {
232 allow_cache = detail::make_allow_list_cache(allowlist);
233 }
234
235 /* First add the resulting sums in two separate lists
236 one for actions, and one for delta's. The delta's
237 are added at the end to the actions, where for
238 each delta summand it is determined whether it ought
239 to be added, or is superseded by an action or another
240 delta summand */
241 for (const stochastic_action_summand& smmnd : sourcesumlist)
242 {
243 const data::variable_list& sumvars = smmnd.summation_variables();
244 const process::action_list& multiaction = smmnd.multi_action().actions();
245 const data::data_expression& actiontime = smmnd.multi_action().time();
246 const data::data_expression& condition = smmnd.condition();
247
248 // Explicitly allow the termination action in any allow.
249 if ((is_allow && allow_(allow_cache, multiaction, termination_action))
250 || (!is_allow && !encap(allowlist, multiaction)))
251 {
252 action_summands.push_back(smmnd);
253 }
254 else if (smmnd.has_time())
255 {
256 resultdeltasumlist.emplace_back(sumvars, condition, deadlock(actiontime));
257 }
258 // summand has no time.
259 else if (condition == data::sort_bool::true_())
260 {
261 resultsimpledeltasumlist.emplace_back(sumvars, condition, deadlock());
262 }
263 else
264 {
265 resultdeltasumlist.emplace_back(sumvars, condition, deadlock());
266 }
267 }
268
269 if (nodeltaelimination)
270 {
271 deadlock_summands.swap(resultsimpledeltasumlist);
272 copy(resultdeltasumlist.begin(), resultdeltasumlist.end(), back_inserter(deadlock_summands));
273 }
274 else if (!ignore_time) /* if a delta summand is added, conditional, timed
275 delta's are subsumed and do not need to be added */
276 {
277 for (const deadlock_summand& summand : resultsimpledeltasumlist)
278 {
279 insert_timed_delta_summand(action_summands, deadlock_summands, summand, ignore_time);
280 }
281 for (const deadlock_summand& summand : resultdeltasumlist)
282 {
283 insert_timed_delta_summand(action_summands, deadlock_summands, summand, ignore_time);
284 }
285 }
286 else
287 {
288 // Add a true -> delta
289 insert_timed_delta_summand(action_summands,
290 deadlock_summands,
291 deadlock_summand(data::variable_list(), data::sort_bool::true_(), deadlock()),
292 ignore_time);
293 }
294
295 if (mCRL2logEnabled(mcrl2::log::verbose) && (sourcesumlist_length > 2 || is_allow))
296 {
297 mCRL2log(mcrl2::log::verbose) << ", resulting in " << action_summands.size() << " action summands and "
298 << deadlock_summands.size() << " delta summands\n";
299 }
300
301 if constexpr (detail::EnableLineariseStatistics && (sourcesumlist_length > 2 || is_allow))
302 {
303 // This function is also called when performing data elimination.
304 // In that case, there is a block operation that linearizes the term delta.
305 // It cannot be correlated to the input process, and the data is confusion.
306 lps_statistics_t lps_statistics_after = get_statistics(action_summands, deadlock_summands);
307
308 std::cout << log_allow_block_application(lps_statistics_before,
309 lps_statistics_after,
310 is_allow,
311 (is_allow ? allowlist.size() : 0),
312 (is_allow ? 0 : allowlist.front().size()),
313 !nodeltaelimination,
314 ignore_time);
315 }
316}
317
318} // namespace mcrl2::lps
319
320#endif // MCRL2_LPS_LINEARISE_ALLLOW_BLOCK_H
aterm_string & operator=(const aterm_string &t) noexcept=default
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
A list of aterm objects.
Definition aterm_list.h:26
A unordered_map class in which aterms can be stored.
An abstraction expression.
Definition abstraction.h:23
const variable_list & variables() const
Definition abstraction.h:60
const data_expression & body() const
Definition abstraction.h:65
const binder_type & binding_operator() const
Definition abstraction.h:55
\brief A sort alias
Definition alias.h:23
alias(const basic_sort &name, const sort_expression &reference)
\brief Constructor Z12.
Definition alias.h:39
\brief Assignment expression
Definition assignment.h:24
\brief Assignment of a data expression to a variable
Definition assignment.h:88
const data_expression & rhs() const
Definition assignment.h:119
const variable & lhs() const
Definition assignment.h:114
\brief A basic sort
Definition basic_sort.h:25
data_expression & operator=(const data_expression &) noexcept=default
data_expression()
\brief Default constructor X3.
data_expression & operator=(data_expression &&) noexcept=default
sort_expression sort() const
Returns the sort of the data expression.
Definition data.cpp:107
data_expression(const data_expression &) noexcept=default
Move semantics.
void translate_user_notation()
Translate user notation within the equations of the data specification.
data_specification()=default
Default constructor. Generate a data specification that contains only booleans and positive numbers.
data_type_checker(const data_specification &data_spec)
make a data type checker. Throws a mcrl2::runtime_error exception if the data_specification is not we...
void add_consistent_inequality_set(const std::vector< linear_inequality > &inequalities_in_)
inequality_consistency_cache & operator=(const inequality_consistency_cache &)=delete
inequality_consistency_cache(const inequality_consistency_cache &)=delete
bool is_consistent(const std::vector< linear_inequality > &inequalities_in_) const
std::unique_ptr< inequality_inconsistency_cache_base > m_cache
inequality_inconsistency_cache_base & operator=(const inequality_inconsistency_cache_base &)=delete
std::unique_ptr< inequality_inconsistency_cache_base > m_present_branch
std::unique_ptr< inequality_inconsistency_cache_base > m_non_present_branch
inequality_inconsistency_cache_base(const node_type node, const linear_inequality &inequality, std::unique_ptr< inequality_inconsistency_cache_base > present_branch, std::unique_ptr< inequality_inconsistency_cache_base > non_present_branch)
inequality_inconsistency_cache_base(const inequality_inconsistency_cache_base &)=delete
bool is_inconsistent(const std::vector< linear_inequality > &inequalities_in_) const
inequality_inconsistency_cache & operator=(const inequality_consistency_cache &)=delete
inequality_inconsistency_cache(const inequality_inconsistency_cache &)=delete
void add_inconsistent_inequality_set(const std::vector< linear_inequality > &inequalities_in_)
std::unique_ptr< inequality_inconsistency_cache_base > m_cache
lhs_t(const aterm &t)
Constructor from an aterm.
const data_expression & operator[](const variable &v) const
Give the factor of variable v.
data_expression transform_to_data_expression() const
lhs_t erase(const variable &v) const
Erase a variable and its factor.
std::size_t count(const variable &v) const
Give the factor of variable v.
lhs_t(const ITERATOR begin, const ITERATOR end, TRANSFORMER f)
Constructor.
data_expression evaluate(const SubstitutionFunction &beta, const rewriter &r) const
Evaluate the variables in this lhs_t according to the subsitution function.
lhs_t::const_iterator find(const variable &v) const
Give an iterator of the factor/variable pair for v, or end() if v does not occur.
lhs_t(const ITERATOR begin, const ITERATOR end)
Constructor.
variable_with_a_rational_factor(const variable &v, const data_expression &f)
\brief A function sort
\brief A function symbol
function_symbol & operator=(function_symbol &&) noexcept=default
function_symbol()
Default constructor.
const detail::lhs_t & lhs() const
linear_inequality invert(const rewriter &r)
bool typical_pair(data_expression &lhs_expression, data_expression &rhs_expression, detail::comparison_t &comparison_operator, const rewriter &r) const
Return this inequality as a typical pair of terms of the form <x1+c2 x2+...+cn xn,...
linear_inequality()
Constructor yielding an inconsistent inequality.
bool is_true(const rewriter &r) const
void add_variables(std::set< variable > &variable_set) const
bool is_false(const rewriter &r) const
linear_inequality(const data_expression &e, const rewriter &r)
Constructor that constructs a linear inequality out of a data expression.
linear_inequality(const data_expression &lhs, const data_expression &rhs, const detail::comparison_t comparison, const rewriter &r, const bool negate=false)
constructor.
data_expression transform_to_data_expression() const
static void parse_and_store_expression(const data_expression &e, detail::map_based_lhs_t &new_lhs, data_expression &new_rhs, const rewriter &r, const bool negate=false, const data_expression &factor=real_one())
linear_inequality(const detail::lhs_t &lhs, const data_expression &r, detail::comparison_t t)
Basic constructor.
detail::lhs_t::const_iterator lhs_begin() const
detail::lhs_t::const_iterator lhs_end() const
linear_inequality(const detail::lhs_t &lhs, const data_expression &rhs, detail::comparison_t comparison, const rewriter &r)
constructor.
const data_expression & rhs() const
data_expression get_factor_for_a_variable(const variable &x)
detail::comparison_t comparison() const
Wrapper clas s for internal storage and substitution updates using operator()
assignment(const variable_type &v, Substitution &sigma, std::multiset< variable_type > &variables_in_rhs, std::set< variable_type > &scratch_set)
Constructor.
assignment & operator=(const expression_type &e)
Actual assignment.
Wrapper that extends any substitution to a substitution maintaining the vars in its rhs.
bool variable_occurs_in_a_rhs(const variable_type &v)
Indicates whether a variable occurs in some rhs of this substitution.
assignment operator[](variable_type const &v)
Assigment operator.
const std::multiset< variable > & variables_in_rhs()
Provides a set of variables that occur in the right hand sides of the assignments.
maintain_variables_in_rhs()=default
Default constructor.
std::multiset< variable_type > m_variables_in_rhs
Components for generating an arbitrary element of a sort.
data_expression operator()(const sort_expression &sort)
Returns a representative of a sort.
Rewriter that operates on data expressions.
Definition rewriter.h:84
data_expression operator()(const data_expression &d) const
Rewrites a data expression.
Definition rewriter.h:161
Identifier generator that stores the identifiers of the context in a set. Using the operator()() and ...
\brief A sort expression
sort_expression & operator=(const sort_expression &) noexcept=default
\brief A constructor for a structured sort
function_symbol constructor_function(const sort_expression &s) const
Returns the constructor function for this constructor, assuming it is internally represented with sor...
function_symbol recogniser_function(const sort_expression &s) const
Returns the function corresponding to the recogniser of this constructor, such that it is usable in t...
const core::identifier_string & name() const
const data_expression_list & arguments() const
\brief Assignment of a data expression to a string
Definition assignment.h:179
\brief A data variable
Definition variable.h:25
const core::identifier_string & name() const
Definition variable.h:35
variable & operator=(variable &&) noexcept=default
const sort_expression & sort() const
Definition variable.h:40
\brief A where expression
where_clause(const atermpp::aterm &term)
const data_expression & body() const
const assignment_expression_list & declarations() const
LPS summand containing a multi-action.
lps::multi_action m_multi_action
The summation variables of the summand.
action_summand(const action_summand &) noexcept=default
Move semantics.
data::assignment_list & assignments()
Returns the sequence of assignments.
void swap(action_summand &other) noexcept
Swaps the contents.
action_summand()=default
Constructor.
data::data_expression_list next_state(const data::variable_list &process_parameters) const
Returns the next state corresponding to this summand.
Definition lps.cpp:71
action_summand(const data::variable_list &summation_variables, const data::data_expression &condition, const lps::multi_action &action, const data::assignment_list &assignments)
Constructor.
bool has_time() const
Returns true if time is available.
bool is_tau() const
Returns true if the multi-action corresponding to this summand is equal to tau.
action_summand & operator=(const action_summand &) noexcept=default
action_summand & operator=(action_summand &&) noexcept=default
action_summand(action_summand &&) noexcept=default
const data::assignment_list & assignments() const
Returns the sequence of assignments.
data::assignment_list m_assignments
The assignments of the next state.
Algorithm class for elimination of constant parameters.
Definition constelm.h:23
void LOG_PARAMETER_CHANGE(const data::data_expression &d_j, const data::data_expression &Rd_j, const data::data_expression &Rg_ij, const data::mutable_map_substitution<> &sigma, const std::string &msg="")
Definition constelm.h:61
bool is_constant(const data::data_expression &x, const std::set< data::variable > &global_variables) const
Definition constelm.h:96
void remove_parameters(data::mutable_map_substitution<> &sigma)
Applies the substitution computed by compute_constant_parameters.
Definition constelm.h:232
const DataRewriter & R
The rewriter used by the constelm algorithm.
Definition constelm.h:38
void LOG_CONSTANT_PARAMETERS(const data::mutable_map_substitution<> &sigma, const std::string &constant_removed_msg="", const std::string &nothing_removed_msg="")
Definition constelm.h:40
bool m_ignore_conditions
If true, conditions are not evaluated and assumed to be true.
Definition constelm.h:32
constelm_algorithm(Specification &spec, const DataRewriter &R_)
Constructor.
Definition constelm.h:113
void LOG_CONDITION(const data::data_expression &cond, const data::data_expression &c_i, const data::mutable_map_substitution<> &sigma, const std::string &msg="")
Definition constelm.h:78
void run(bool instantiate_global_variables=false, bool ignore_conditions=false)
Runs the constelm algorithm.
Definition constelm.h:257
std::map< data::variable, std::size_t > m_index_of
Maps process parameters to their index.
Definition constelm.h:35
data::mutable_map_substitution compute_constant_parameters(bool instantiate_global_variables=false, bool ignore_conditions=false)
Computes constant parameters.
Definition constelm.h:123
bool m_instantiate_global_variables
If true, then the algorithm is allowed to instantiate free variables as a side effect.
Definition constelm.h:29
LPS summand containing a deadlock.
deadlock_summand()=default
Constructor.
deadlock_summand & operator=(const deadlock_summand &) noexcept=default
lps::deadlock m_deadlock
The deadlock of the summand.
deadlock_summand(deadlock_summand &&) noexcept=default
deadlock_summand & operator=(deadlock_summand &&) noexcept=default
void swap(deadlock_summand &other) noexcept
Swaps the contents.
deadlock_summand(const deadlock_summand &) noexcept=default
Move semantics.
deadlock_summand(const data::variable_list &summation_variables, const data::data_expression &condition, const lps::deadlock &delta)
Constructor.
bool has_time() const
Returns true if time is available.
Represents a deadlock.
Definition deadlock.h:23
bool operator!=(const deadlock &other) const
Comparison operator.
Definition deadlock.h:71
data::data_expression m_time
The time of the deadlock. If m_time == data::undefined_real() the multi action has no time.
Definition deadlock.h:29
deadlock(data::data_expression time=data::undefined_real())
Constructor.
Definition deadlock.h:33
bool has_time() const
Returns true if time is available.
Definition deadlock.h:39
std::string to_string() const
Returns a string representation of the deadlock.
Definition deadlock.h:59
const data::data_expression & time() const
Returns the time.
Definition deadlock.h:46
void swap(deadlock &other) noexcept
Swaps the contents.
Definition deadlock.h:77
data::data_expression & time()
Returns the time.
Definition deadlock.h:53
bool operator==(const deadlock &other) const
Comparison operator.
Definition deadlock.h:65
Algorithm class for algorithms on linear process specifications. It can be instantiated with lps::spe...
void remove_parameters(const std::set< data::variable > &to_be_removed)
Removes formal parameters from the specification.
void remove_unused_summand_variables()
Removes unused summand variables.
void sumelm_find_variables(const action_summand &s, std::set< data::variable > &result) const
void summand_remove_unused_summand_variables(SummandType &summand_)
void sumelm_find_variables(const deadlock_summand &s, std::set< data::variable > &result) const
data::data_expression next_state(const action_summand &s, const data::variable &v) const
Applies the next state substitution to the variable v.
bool verbose() const
Flag for verbose output.
void remove_singleton_sorts()
Removes parameters with a singleton sort.
void remove_trivial_summands()
Removes summands with condition equal to false.
void instantiate_free_variables()
Attempts to eliminate the free variables of the specification, by substituting a constant value for t...
lps_algorithm(Specification &spec)
Constructor.
Specification & m_spec
The specification that is processed by the algorithm.
data_expression & constraint()
Obtain a reference to the constraint.
deadlock_summand_vector & deadlock_summands()
Returns the sequence of deadlock summands.
const std::vector< ActionSummand > & action_summands() const
Returns the sequence of action summands.
deadlock_summand_vector m_deadlock_summands
The deadlock summands of the process.
linear_process_base()=default
Constructor.
data::variable_list m_process_parameters
The process parameters of the process.
linear_process_base(const data::variable_list &process_parameters, const deadlock_summand_vector &deadlock_summands, const std::vector< ActionSummand > &action_summands)
Constructor.
bool has_time() const
Returns true if time is available in at least one of the summands.
data::variable_list & process_parameters()
Returns the sequence of process parameters.
std::vector< ActionSummand > m_action_summands
The action summands of the process.
linear_process_base(const atermpp::aterm &lps, bool stochastic_distributions_allowed=true)
Constructor.
const deadlock_summand_vector & deadlock_summands() const
Returns the sequence of deadlock summands.
std::vector< ActionSummand > & action_summands()
Returns the sequence of action summands.
std::size_t summand_count() const
Returns the number of LPS summands.
const data::variable_list & process_parameters() const
Returns the sequence of process parameters.
linear_process(const data::variable_list &process_parameters, const deadlock_summand_vector &deadlock_summands, const action_summand_vector &action_summands)
Constructor.
linear_process(const atermpp::aterm &lps, bool=false)
Constructor.
linear_process()=default
Constructor.
\brief A timed multi-action
multi_action(const multi_action &) noexcept=default
Move semantics.
multi_action(const atermpp::aterm &term)
Constructor.
bool has_time() const
Returns true if time is available.
const process::action_list & actions() const
multi_action(const process::action &l)
Constructor.
multi_action operator+(const multi_action &other) const
Joins the actions of both multi actions.
multi_action & operator=(multi_action &&) noexcept=default
const data::data_expression & time() const
multi_action & operator=(const multi_action &) noexcept=default
multi_action(multi_action &&) noexcept=default
multi_action(const process::action_list &actions=process::action_list(), data::data_expression time=data::undefined_real())
Constructor. Actions are sorted to establish the sorted-storage invariant.
process_initializer & operator=(process_initializer &&) noexcept=default
process_initializer(process_initializer &&) noexcept=default
process_initializer(const process_initializer &) noexcept=default
Move semantics.
process_initializer(const data::data_expression_list &expressions)
Constructor.
process_initializer(const atermpp::aterm &term, bool check_distribution=true)
Constructor.
data::data_expression_list expressions() const
process_initializer & operator=(const process_initializer &) noexcept=default
process_initializer()
Default constructor.
const std::set< data::variable > & global_variables() const
Returns the declared free variables of the LPS.
LinearProcess & process()
Returns a reference to the linear process of the specification.
process::action_label_list m_action_labels
The action specification of the specification.
specification_base(const data::data_specification &data, const process::action_label_list &action_labels, const std::set< data::variable > &global_variables, const LinearProcess &lps, const InitialProcessExpression &initial_process)
Constructor.
const process::action_label_list & action_labels() const
Returns a sequence of action labels. This sequence contains all action labels occurring in the specif...
const InitialProcessExpression & initial_process() const
Returns the initial process.
const LinearProcess & process() const
Returns the linear process of the specification.
process::action_label_list & action_labels()
Returns a sequence of action labels. This sequence contains all action labels occurring in the specif...
std::set< data::variable > m_global_variables
The set of global variables.
InitialProcessExpression & initial_process()
Returns a reference to the initial process.
specification_base()=default
Constructor.
LinearProcess m_process
The linear process of the specification.
std::set< data::variable > & global_variables()
Returns the declared free variables of the LPS.
data::data_specification m_data
The data specification of the specification.
InitialProcessExpression m_initial_process
The initial state of the specification.
Linear process specification.
specification()=default
Constructor.
specification(const data::data_specification &data, const process::action_label_list &action_labels, const std::set< data::variable > &global_variables, const linear_process &lps, const process_initializer &initial_process)
Constructor.
LPS summand containing a multi-action.
stochastic_distribution m_distribution
The distribution of the summand.
stochastic_action_summand & operator=(const stochastic_action_summand &) noexcept=default
stochastic_action_summand()=default
Constructor.
stochastic_action_summand(stochastic_action_summand &&) noexcept=default
const stochastic_distribution & distribution() const
Returns the distribution of this summand.
stochastic_action_summand(const action_summand &s)
Constructor.
stochastic_action_summand & operator=(stochastic_action_summand &&) noexcept=default
void swap(stochastic_action_summand &other) noexcept
Swaps the contents.
stochastic_action_summand(const data::variable_list &summation_variables, const data::data_expression &condition, const lps::multi_action &action, const data::assignment_list &assignments, const stochastic_distribution &distribution)
Constructor.
stochastic_action_summand(const stochastic_action_summand &) noexcept=default
Move semantics.
stochastic_distribution & distribution()
Returns the distribution of this summand.
\brief A stochastic distribution
stochastic_distribution & operator=(stochastic_distribution &&) noexcept=default
stochastic_distribution(stochastic_distribution &&) noexcept=default
stochastic_distribution()
\brief Default constructor X3.
stochastic_distribution(const stochastic_distribution &) noexcept=default
Move semantics.
const data::variable_list & variables() const
bool is_defined() const
Returns true if the distribution is defined, i.e. it contains a valid distribution....
stochastic_distribution(const data::variable_list &variables, const data::data_expression &distribution)
\brief Constructor Z12.
stochastic_distribution & operator=(const stochastic_distribution &) noexcept=default
stochastic_distribution(const atermpp::aterm &term)
const data::data_expression & distribution() const
stochastic_linear_process(const atermpp::aterm &t, bool stochastic_distributions_allowed=true)
Constructor.
stochastic_linear_process(const data::variable_list &process_parameters, const deadlock_summand_vector &deadlock_summands, const stochastic_action_summand_vector &action_summands)
Constructor.
stochastic_linear_process()=default
Constructor.
stochastic_linear_process(const linear_process &other)
Constructor.
stochastic_process_initializer(const atermpp::aterm &term)
Constructor.
stochastic_process_initializer(const data::data_expression_list &expressions, const stochastic_distribution &distribution)
Constructor.
const stochastic_distribution & distribution() const
stochastic_specification(const specification &other)
Constructor. This constructor is explicit as implicit conversions of this kind is a source of bugs.
stochastic_specification()=default
Constructor.
stochastic_specification(const data::data_specification &data, const process::action_label_list &action_labels, const std::set< data::variable > &global_variables, const stochastic_linear_process &lps, const stochastic_process_initializer &initial_process)
Constructor.
Base class for LPS summands.
Definition summand.h:22
const data::data_expression & condition() const
Returns the condition expression.
Definition summand.h:56
const data::variable_list & summation_variables() const
Returns the sequence of summation variables.
Definition summand.h:49
data::variable_list m_summation_variables
The summation variables of the summand.
Definition summand.h:25
data::data_expression & condition()
Returns the condition expression.
Definition summand.h:63
data::data_expression m_condition
The condition of the summand.
Definition summand.h:28
void swap(summand_base &other) noexcept
Swaps the contents.
Definition summand.h:69
data::variable_list & summation_variables()
Returns the sequence of summation variables.
Definition summand.h:42
summand_base(const data::variable_list &summation_variables, const data::data_expression &condition)
Constructor.
Definition summand.h:35
summand_base()=default
Constructor.
\brief An action label
const data::sort_expression_list & sorts() const
action_label()
\brief Default constructor X3.
action_label(const atermpp::aterm &term)
action_label & operator=(action_label &&) noexcept=default
action_label(const std::string &name, const data::sort_expression_list &sorts)
\brief Constructor Z1.
action_label(action_label &&) noexcept=default
const core::identifier_string & name() const
action_label & operator=(const action_label &) noexcept=default
action_label(const action_label &) noexcept=default
Move semantics.
action_label(const core::identifier_string &name, const data::sort_expression_list &sorts)
\brief Constructor Z12.
\brief A multiset of action names
action_name_multiset & operator=(action_name_multiset &&) noexcept=default
const core::identifier_string_list & names() const
action_name_multiset & operator=(const action_name_multiset &) noexcept=default
action_name_multiset(const atermpp::aterm &term)
Constructor from aterm.
action_name_multiset(const action_name_multiset &) noexcept=default
Move semantics.
action_name_multiset(action_name_multiset &&) noexcept=default
action_name_multiset(const core::identifier_string_list &names)
Constructor. Names are sorted lexicographically to establish the sorted-storage invariant.
action(const action_label &label, const data::data_expression_list &arguments)
\brief Constructor Z14.
action & operator=(action &&) noexcept=default
action()
\brief Default constructor X3.
action(const atermpp::aterm &term)
action(action &&) noexcept=default
action & operator=(const 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
const action_name_multiset_list & allow_set() const
allow & operator=(allow &&) noexcept=default
allow & operator=(const allow &) noexcept=default
\brief The at operator
at(at &&) noexcept=default
at(const atermpp::aterm &term)
at(const at &) noexcept=default
Move semantics.
at()
\brief Default constructor X3.
at & operator=(const at &) noexcept=default
at(const process_expression &operand, const data::data_expression &time_stamp)
\brief Constructor Z14.
const data::data_expression & time_stamp() const
at & operator=(at &&) noexcept=default
const process_expression & operand() const
\brief The block operator
block & operator=(block &&) noexcept=default
block & operator=(const block &) noexcept=default
const process_expression & operand() const
block(block &&) noexcept=default
block(const block &) noexcept=default
Move semantics.
block(const atermpp::aterm &term)
block(const core::identifier_string_list &block_set, const process_expression &operand)
Constructor. block_set is sorted lexicographically to establish the sorted-storage invariant.
const core::identifier_string_list & block_set() const
\brief The bounded initialization
bounded_init(const bounded_init &) noexcept=default
Move semantics.
bounded_init & operator=(const bounded_init &) noexcept=default
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)
const process_expression & left() const
bounded_init()
\brief Default constructor X3.
bounded_init & operator=(bounded_init &&) noexcept=default
\brief The choice operator
choice(const atermpp::aterm &term)
choice & operator=(const choice &) noexcept=default
choice(const choice &) noexcept=default
Move semantics.
choice()
\brief Default constructor X3.
const process_expression & left() const
choice(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
choice(choice &&) noexcept=default
const process_expression & right() const
choice & operator=(choice &&) noexcept=default
\brief The communication operator
comm & operator=(const comm &) noexcept=default
comm(const atermpp::aterm &term)
comm(comm &&) noexcept=default
comm & operator=(comm &&) noexcept=default
comm(const comm &) noexcept=default
Move semantics.
const communication_expression_list & comm_set() const
comm(const communication_expression_list &comm_set, const process_expression &operand)
\brief Constructor Z14.
const process_expression & operand() const
comm()
\brief Default constructor X3.
const core::identifier_string & name() const
communication_expression()
\brief Default constructor X3.
communication_expression & operator=(const communication_expression &) noexcept=default
communication_expression(const action_name_multiset &action_name, const std::string &name)
\brief Constructor Z1.
communication_expression(const communication_expression &) noexcept=default
Move semantics.
communication_expression(communication_expression &&) noexcept=default
communication_expression & operator=(communication_expression &&) noexcept=default
communication_expression(const action_name_multiset &action_name, const core::identifier_string &name)
\brief Constructor Z12.
const action_name_multiset & action_name() const
\brief The value delta
delta & operator=(const delta &) noexcept=default
delta()
\brief Default constructor X3.
delta(const atermpp::aterm &term)
delta(delta &&) noexcept=default
delta(const delta &) noexcept=default
Move semantics.
delta & operator=(delta &&) noexcept=default
void add_context_action_labels(const ActionLabelContainer &actions, const data::sort_type_checker &sort_typechecker)
std::set< data::sort_expression_list > matching_action_sorts(const core::identifier_string &name) const
std::set< data::sort_expression_list > matching_action_sorts(const core::identifier_string &name, const data::data_expression_list &parameters) const
bool is_declared(const core::identifier_string &name) const
std::multimap< core::identifier_string, action_label > m_actions
bool is_matching_assignment(const data::untyped_identifier_assignment_list &assignments, const data::variable_list &parameters) const
bool is_declared(const core::identifier_string &name) const
process_instance make_process_instance(const core::identifier_string &name, const data::sort_expression_list &formal_parameters, const data::data_expression_list &actual_parameters) const
std::multimap< core::identifier_string, process_identifier > m_process_identifiers
process_identifier match_untyped_process_instance_assignment(const untyped_process_assignment &x) const
data::untyped_identifier_assignment find_violating_assignment(const data::untyped_identifier_assignment_list &assignments, const data::variable_list &parameters) const
void add_process_identifiers(const ProcessIdentifierContainer &ids, const action_context &action_ctx, const data::sort_type_checker &sort_typechecker)
std::set< data::sort_expression_list > matching_process_sorts(const core::identifier_string &name, const data::data_expression_list &parameters) const
\brief The hide operator
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 core::identifier_string_list & hide_set() const
hide & operator=(const hide &) noexcept=default
const process_expression & operand() const
hide(const hide &) noexcept=default
Move semantics.
hide & operator=(hide &&) noexcept=default
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 & operator=(const if_then_else &) noexcept=default
if_then_else(const if_then_else &) noexcept=default
Move semantics.
const data::data_expression & condition() const
if_then_else & operator=(if_then_else &&) noexcept=default
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 & operator=(const if_then &) noexcept=default
if_then(const data::data_expression &condition, const process_expression &then_case)
\brief Constructor Z14.
if_then(const atermpp::aterm &term)
const data::data_expression & condition() const
if_then(const if_then &) noexcept=default
Move semantics.
if_then & operator=(if_then &&) noexcept=default
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 & operator=(left_merge &&) noexcept=default
left_merge(const atermpp::aterm &term)
left_merge & operator=(const left_merge &) noexcept=default
left_merge(const left_merge &) noexcept=default
Move semantics.
left_merge(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
const process_expression & left() const
left_merge()
\brief Default constructor X3.
\brief The merge operator
merge(const atermpp::aterm &term)
const process_expression & right() const
const process_expression & left() const
merge & operator=(const merge &) noexcept=default
merge(const merge &) noexcept=default
Move semantics.
merge(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
merge & operator=(merge &&) noexcept=default
merge(merge &&) noexcept=default
merge()
\brief Default constructor X3.
\brief A process equation
process_equation()
\brief Default constructor X3.
process_equation(const process_equation &) noexcept=default
Move semantics.
const data::variable_list & formal_parameters() const
process_equation & operator=(process_equation &&) noexcept=default
const process_identifier & identifier() const
const process_expression & expression() const
process_equation(process_equation &&) noexcept=default
process_equation & operator=(const process_equation &) noexcept=default
process_equation(const process_identifier &identifier, const data::variable_list &formal_parameters, const process_expression &expression)
\brief Constructor Z12.
process_equation(const atermpp::aterm &term)
\brief A process expression
process_expression & operator=(const process_expression &) noexcept=default
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)
process_expression & operator=(process_expression &&) noexcept=default
\brief A process identifier
process_identifier(const process_identifier &) noexcept=default
Move semantics.
const data::variable_list & variables() const
process_identifier & operator=(const process_identifier &) noexcept=default
process_identifier(process_identifier &&) noexcept=default
process_identifier(const core::identifier_string &name, const data::variable_list &variables)
Constructor.
const core::identifier_string & name() const
process_identifier & operator=(process_identifier &&) noexcept=default
process_identifier(const std::string &name, const data::variable_list &variables)
Constructor.
process_identifier(const atermpp::aterm &term)
Constructor.
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 & operator=(const process_instance_assignment &) noexcept=default
process_instance_assignment(process_instance_assignment &&) noexcept=default
const data::assignment_list & assignments() const
process_instance_assignment(const atermpp::aterm &term)
process_instance_assignment & operator=(process_instance_assignment &&) noexcept=default
const process_identifier & identifier() const
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 & operator=(const process_instance &) noexcept=default
process_instance & operator=(process_instance &&) noexcept=default
const process_identifier & identifier() const
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.
Process specification consisting of a data specification, action labels, a sequence of process equati...
const std::vector< process_equation > & equations() const
Returns the equations of the process specification.
process_specification(data::data_specification data, process::action_label_list action_labels, process_equation_list equations, process_expression init)
Constructor that sets the global variables to empty;.
process::action_label_list m_action_labels
The action specification of the specification.
process_specification()=default
Constructor.
process_expression & init()
Returns the initialization of the process specification.
const process_expression & init() const
Returns the initialization of the process specification.
process_specification(data::data_specification data, process::action_label_list action_labels, data::variable_list global_variables, process_equation_list equations, process_expression init)
Constructor of a process specification.
std::vector< process_equation > & equations()
Returns the equations of the process specification.
process_specification(atermpp::aterm t)
Constructor.
std::set< data::variable > m_global_variables
The set of global variables.
std::vector< process_equation > m_equations
The equations of the specification.
const process::action_label_list & action_labels() const
Returns the action label specification.
data::data_specification m_data
The data specification of the specification.
process_expression m_initial_process
The initial state of the specification.
process::action_label_list & action_labels()
Returns the action label specification.
const std::set< data::variable > & global_variables() const
Returns the declared free variables of the process specification.
void construct_from_aterm(const atermpp::aterm &t)
Initializes the specification with an aterm.
std::set< data::variable > & global_variables()
Returns the declared free variables of the process specification.
data::data_type_checker m_data_type_checker
Definition typecheck.h:637
process_expression typecheck_process_expression(const data::detail::variable_context &variables, const process_expression &x, const process_identifier *current_equation=nullptr)
Definition typecheck.h:718
detail::action_context m_action_context
Definition typecheck.h:638
data::detail::variable_context m_variable_context
Definition typecheck.h:640
process_type_checker(const data::data_specification &dataspec=data::data_specification())
Default constructor.
Definition typecheck.h:667
void operator()(process_specification &procspec)
Typecheck the process specification procspec.
Definition typecheck.h:682
static std::vector< process_identifier > equation_identifiers(const std::vector< process_equation > &equations)
Definition typecheck.h:642
detail::process_context m_process_context
Definition typecheck.h:639
process_type_checker(const data::data_specification &dataspec, const VariableContainer &variables, const ActionLabelContainer &action_labels, const ProcessIdentifierContainer &process_identifiers)
Definition typecheck.h:654
process_expression operator()(const process_expression &x, const process_identifier *current_equation=nullptr)
Type check a process expression. Throws a mcrl2::runtime_error exception if the expression is not wel...
Definition typecheck.h:676
\brief A rename expression
const core::identifier_string & source() const
rename_expression()
\brief Default constructor X3.
rename_expression & operator=(rename_expression &&) noexcept=default
rename_expression & operator=(const rename_expression &) noexcept=default
rename_expression(core::identifier_string &source, core::identifier_string &target)
\brief Constructor Z12.
const core::identifier_string & target() const
rename_expression(const atermpp::aterm &term)
rename_expression(rename_expression &&) noexcept=default
rename_expression(const std::string &source, const std::string &target)
\brief Constructor Z1.
rename_expression(const rename_expression &) noexcept=default
Move semantics.
\brief The rename operator
rename(const atermpp::aterm &term)
rename & operator=(const rename &) noexcept=default
rename(const rename &) noexcept=default
Move semantics.
rename()
\brief Default constructor X3.
const process_expression & operand() const
rename & operator=(rename &&) noexcept=default
rename(rename &&) noexcept=default
rename(const rename_expression_list &rename_set, const process_expression &operand)
\brief Constructor Z14.
const rename_expression_list & rename_set() const
\brief The sequential composition
seq & operator=(seq &&) noexcept=default
const process_expression & right() const
seq(const atermpp::aterm &term)
seq()
\brief Default constructor X3.
seq & operator=(const seq &) noexcept=default
const process_expression & left() const
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::variable_list & variables() const
const data::data_expression & distribution() const
stochastic_operator & operator=(stochastic_operator &&) noexcept=default
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.
stochastic_operator & operator=(const stochastic_operator &) noexcept=default
const process_expression & operand() const
stochastic_operator(const data::variable_list &variables, const data::data_expression &distribution, const process_expression &operand)
\brief Constructor Z14.
\brief The sum operator
const process_expression & operand() const
sum(const data::variable_list &variables, const process_expression &operand)
\brief Constructor Z14.
sum(const atermpp::aterm &term)
sum & operator=(sum &&) noexcept=default
sum()
\brief Default constructor X3.
const data::variable_list & variables() const
sum(sum &&) noexcept=default
sum(const sum &) noexcept=default
Move semantics.
sum & operator=(const sum &) noexcept=default
\brief The synchronization operator
sync & operator=(const sync &) noexcept=default
sync(sync &&) noexcept=default
sync(const sync &) noexcept=default
Move semantics.
const process_expression & left() const
sync()
\brief Default constructor X3.
sync & operator=(sync &&) noexcept=default
sync(const process_expression &left, const process_expression &right)
\brief Constructor Z14.
const process_expression & right() const
sync(const atermpp::aterm &term)
\brief The value tau
tau(const tau &) noexcept=default
Move semantics.
tau()
\brief Default constructor X3.
tau(const atermpp::aterm &term)
tau & operator=(tau &&) noexcept=default
tau & operator=(const tau &) noexcept=default
tau(tau &&) noexcept=default
\brief An untyped multi action or data application
untyped_multi_action(const data::untyped_data_parameter_list &actions)
\brief Constructor Z12.
untyped_multi_action & operator=(untyped_multi_action &&) noexcept=default
untyped_multi_action(untyped_multi_action &&) noexcept=default
untyped_multi_action & operator=(const untyped_multi_action &) noexcept=default
const data::untyped_data_parameter_list & actions() const
untyped_multi_action(const atermpp::aterm &term)
untyped_multi_action()
\brief Default constructor X3.
untyped_multi_action(const untyped_multi_action &) noexcept=default
Move semantics.
\brief An untyped process assginment
untyped_process_assignment & operator=(untyped_process_assignment &&) noexcept=default
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)
const core::identifier_string & name() const
untyped_process_assignment()
\brief Default constructor X3.
untyped_process_assignment & operator=(const untyped_process_assignment &) noexcept=default
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.
process_expression processbody
objectdatatype(const objectdatatype &o)=default
process_expression representedprocess
~objectdatatype()=default
process::action_label_list multi_action_names
processstatustype processstatus
identifier_string objectname
std::set< variable > get_free_variables() const
objectdatatype()=default
objectdatatype & operator=(const objectdatatype &o)=default
objecttype object
process_identifier process_representing_action
variable_list parameters
enumeratedtype(const enumeratedtype &e)
enumeratedtype(const std::size_t n, specification_basic_type &spec)
enumeratedtype & operator=(const enumeratedtype &e)=default
enumtype(const enumtype &)=delete
enumtype & operator=(const enumtype &)=delete
enumtype(std::size_t n, const sort_expression_list &fsorts, const sort_expression_list &gsorts, specification_basic_type &spec)
process_pid_pair & operator=(const process_pid_pair &other)=default
const process_expression & process_body() const
const process_identifier & process_id() const
process_pid_pair(const process_pid_pair &other)=default
process_pid_pair & operator=(process_pid_pair &&other)=default
process_pid_pair(const process_expression &process_body, const process_identifier &pid)
process_pid_pair(process_pid_pair &&other)=default
static stackoperations * find_suitable_stack_operations(const variable_list &parameters, stackoperations *stack_operations_list)
stacklisttype & operator=(const stacklisttype &)=delete
stacklisttype(const variable_list &parlist, specification_basic_type &spec, const bool regular, const std::set< process_identifier > &pCRLprocs, const bool singlecontrolstate)
Constructor.
stacklisttype(const stacklisttype &)=delete
stackoperations & operator=(const stackoperations &)=delete
stackoperations(const stackoperations &)=delete
stackoperations(const variable_list &pl, specification_basic_type &spec)
process_expression procstorealGNFbody(const process_expression &body, variableposition v, std::vector< process_identifier > &todo, const bool regular, processstatustype mode, const variable_list &freevars, const std::set< variable > &variables_bound_in_sum)
data_expression construct_binary_case_tree(std::size_t n, const variable_list &sums, data_expression_list terms, const sort_expression &termsort, const enumtype &e)
data::maintain_variables_in_rhs< data::mutable_map_substitution<> > make_unique_variables(const variable_list &var_list, const std::string &hint)
variable_list parscollect(const process_expression &oldbody, process_expression &newbody)
stochastic_action_summand collect_sum_arg_arg_cond(const enumtype &e, const stochastic_action_summand_vector &action_summands, const variable_list &parameters)
action_list linMergeMultiActionList(const action_list &ma1, const action_list &ma2)
void generateLPEpCRL(stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const process_identifier &procId, const bool containstime, const bool regular, variable_list &parameters, data_expression_list &init, stochastic_distribution &initial_stochastic_distribution)
variable get_fresh_variable(const std::string &s, const sort_expression &sort, const int reuse_index=-1)
process_expression distributeActionOverConditions(const process_expression &act, const data_expression &condition, const process_expression &restterm, const variable_list &freevars, const std::set< variable > &variables_bound_in_sum)
data_expression construct_binary_case_tree_rec(std::size_t n, const variable_list &sums, data_expression_list &terms, const sort_expression &termsort, const enumtype &e)
static void complete_proc_identifier_map(std::map< process_identifier, process_identifier > &identifier_identifier_map)
process_expression to_regular_form(const process_expression &t, std::vector< process_identifier > &todo, const variable_list &freevars, const std::set< variable > &variables_bound_in_sum)
void collectsumlistterm(const process_identifier &procId, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const process_expression &body, const variable_list &pars, const stacklisttype &stack, const bool regular, const bool singlestate, const std::set< process_identifier > &pCRLprocs)
data_expression_list findarguments(const variable_list &pars, const variable_list &parlist, const assignment_list &args, const data_expression_list &t2, const stacklisttype &stack, const variable_list &vars, const std::set< variable > &free_variables_in_body, const variable_list &stochastic_variables)
void calculate_communication_merge(const stochastic_action_summand_vector &action_summands1, const deadlock_summand_vector &deadlock_summands1, const stochastic_action_summand_vector &action_summands2, const deadlock_summand_vector &deadlock_summands2, const action_name_multiset_list &allowlist, const bool is_allow, const bool is_block, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands)
void insertvariable(const variable &var, const bool mustbenew)
process_identifier storeinit(const process_expression &init)
static action_list to_sorted_action_list(const process_expression &p)
Convert the process expression to a sorted action list.
process_expression pCRLrewrite(const process_expression &t)
data_expression_list pushdummy_regular_data_expressions(const variable_list &pars, const stacklisttype &stack)
void define_equations_for_case_function(const std::size_t index, const data::function_symbol &functionname, const sort_expression &sort)
void alphaconvert(variable_list &sumvars, MutableSubstitution &sigma, const variable_list &occurvars, const data_expression_list &occurterms)
bool canterminatebody(const process_expression &t)
data_expression transform_matching_list(const variable_list &matchinglist)
void add_summands(const process_identifier &procId, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, process_expression summandterm, const std::set< process_identifier > &pCRLprocs, const stacklisttype &stack, const bool regular, const bool singlestate, const variable_list &process_parameters)
bool isDeltaAtZero(const process_expression &t)
data::function_symbol find_case_function(std::size_t index, const sort_expression &sort) const
data_expression_list make_initialstate(const process_identifier &initialProcId, const stacklisttype &stack, const std::set< process_identifier > &pcrlprcs, const bool regular, const bool singlecontrolstate, const stochastic_distribution &initial_stochastic_distribution)
static bool summandsCanBeClustered(const stochastic_action_summand &summand1, const stochastic_action_summand &summand2)
static sort_expression_list getActionSorts(const action_list &actionlist)
void filter_vars_by_multiaction(const action_list &multiaction, const std::set< variable > &vars_set, std::set< variable > &vars_result_set)
static process_identifier get_last(const process_identifier &id, const std::map< process_identifier, process_identifier > &identifier_identifier_map)
static bool check_real_variable_occurrence(const variable_list &sumvars, const data_expression &actiontime, const data_expression &condition)
process_identifier newprocess(const variable_list &parameters, const process_expression &body, const processstatustype ps, const bool canterminate, const bool containstime)
void make_pCRL_procs(const process_identifier &id, std::set< process_identifier > &reachable_process_identifiers)
void filter_vars_by_term(const data_expression &t, const std::set< variable > &vars_set, std::set< variable > &vars_result_set)
data_expression_list pushdummy_stack(const variable_list &parameters, const stacklisttype &stack, const variable_list &stochastic_variables)
void procstorealGNFrec(const process_identifier &procIdDecl, const variableposition v, std::vector< process_identifier > &todo, const bool regular)
static action_label_list getnames(const process_expression &multiAction)
variable_list getparameters_rec(const process_expression &multiAction, std::set< variable > &occurs_set)
static int match_sequence(const std::vector< process_instance_assignment > &s1, const std::vector< process_instance_assignment > &s2, const bool regular2)
assignment_list argscollect_regular2(const process_expression &t, variable_list &vl)
assignment_list make_optimised_assignment_list(const variable_list &parameters, const data_expression_list &resultnextstate, const variable_list &sum_vars, const variable_list &stoch_vars)
void calculate_left_merge_action(const lps::detail::ultimate_delay &ultimate_delay_condition, const stochastic_action_summand_vector &action_summands1, const action_name_multiset_list &allowlist, const bool is_allow, const bool is_block, stochastic_action_summand_vector &action_summands)
process_expression split_body(const process_expression &t, std::map< process_identifier, process_identifier > &visited_id, std::map< process_expression, process_expression > &visited_proc, const variable_list &parameters)
void parallelcomposition(const stochastic_action_summand_vector &action_summands1, const deadlock_summand_vector &deadlock_summands1, const variable_list &pars1, const data_expression_list &init1, const stochastic_distribution &initial_stochastic_distribution1, const lps::detail::ultimate_delay &ultimate_delay_condition1, const stochastic_action_summand_vector &action_summands2, const deadlock_summand_vector &deadlock_summands2, const variable_list &pars2, const data_expression_list &init2, const stochastic_distribution &initial_stochastic_distribution2, const lps::detail::ultimate_delay &ultimate_delay_condition2, const action_name_multiset_list &allowlist1, const bool is_allow, const bool is_block, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, variable_list &pars_result, data_expression_list &init_result, stochastic_distribution &initial_stochastic_distribution, lps::detail::ultimate_delay &ultimate_delay_condition)
bool occursintermlist(const variable &var, const assignment_list &r, const process_identifier &proc_name) const
void transform_process_arguments(const process_identifier &procId)
objectdatatype & insert_process_declaration(const process_identifier &procId, const variable_list &parameters, const process_expression &body, processstatustype s, const bool canterminate, const bool containstime)
static void set_proc_identifier_map(std::map< process_identifier, process_identifier > &identifier_identifier_map, const process_identifier &id1_, const process_identifier &id2_, const process_identifier &initial_process)
bool canterminate_rec(const process_identifier &procId, bool &stable, std::set< process_identifier > &visited)
set_identifier_generator fresh_identifier_generator
std::set< process_identifier > remove_stochastic_operators_from_front(const std::set< process_identifier > &reachable_process_identifiers, process_identifier &initial_process_id, stochastic_distribution &initial_stochastic_distribution)
void filter_vars_by_termlist(Iterator begin, const Iterator &end, const std::set< variable > &vars_set, std::set< variable > &vars_result_set)
bool searchProcDeclaration(const variable_list &parameters, const process_expression &body, const processstatustype s, const bool canterminate, const bool containstime, process_identifier &p) const
process_identifier splitmCRLandpCRLprocsAndAddTerminatedAction(const process_identifier &procId)
action_list linMergeMultiActionListProcess(const process_expression &ma1, const process_expression &ma2)
std::vector< process_equation > procs
action_list adapt_multiaction_to_stack(const action_list &multiAction, const stacklisttype &stack, const variable_list &vars)
void determinewhetherprocessescanterminate(const process_identifier &procId)
process_expression distribute_condition(const process_expression &body1, const data_expression &condition)
bool containstime_rec(const process_identifier &procId, bool *stable, std::set< process_identifier > &visited, bool &contains_if_then)
void collectsumlist(stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const std::set< process_identifier > &pCRLprocs, const variable_list &pars, const stacklisttype &stack, bool regular, bool singlestate)
data_expression correctstatecond(const process_identifier &procId, const std::set< process_identifier > &pCRLproc, const stacklisttype &stack, int regular)
void calculate_communication_merge_action_summands(const stochastic_action_summand_vector &action_summands1, const stochastic_action_summand_vector &action_summands2, const action_name_multiset_list &allowlist, const bool is_allow, const bool is_block, stochastic_action_summand_vector &action_summands)
processstatustype determine_process_statusterm(const process_expression &body, const processstatustype status)
void calculate_communication_merge_action_deadlock_summands(const stochastic_action_summand_vector &action_summands1, const deadlock_summand_vector &deadlock_summands1, const stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands)
data_expression getvar(const variable &var, const stacklisttype &stack) const
variable_list initdatavars
lps::detail::ultimate_delay combine_ultimate_delays(const lps::detail::ultimate_delay &delay1, const lps::detail::ultimate_delay &delay2)
Returns the conjunction of the two delay conditions and the join of the variables,...
process_expression distributeTime(const process_expression &body, const data_expression &time, const variable_list &freevars, data_expression &timecondition)
data_expression_list pushdummyrec_stack(const variable_list &totalpars, const variable_list &pars, const stacklisttype &stack, const variable_list &stochastic_variables)
static action_list to_action_list(const process_expression &p)
std::set< data::variable > sigma_variables(const Substitution &sigma)
void combine_summand_lists(const stochastic_action_summand_vector &action_summands1, const deadlock_summand_vector &deadlock_summands1, const lps::detail::ultimate_delay &ultimate_delay_condition1, const stochastic_action_summand_vector &action_summands2, const deadlock_summand_vector &deadlock_summands2, const lps::detail::ultimate_delay &ultimate_delay_condition2, const variable_list &par1, const variable_list &par3, const action_name_multiset_list &allowlist1, const bool is_allow, const bool is_block, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands)
process_expression cut_off_unreachable_tail(const process_expression &t)
std::vector< enumeratedtype > enumeratedtypes
data_expression find_(const variable &s, const assignment_list &args, const stacklisttype &stack, const variable_list &vars, const std::set< variable > &free_variables_in_body, const variable_list &stochastic_variables)
process::action_label_list acts
assignment_list make_procargs_regular(const process_expression &t, const stacklisttype &stack, const std::set< process_identifier > &pcrlprcs, const bool singlestate, const variable_list &stochastic_variables)
std::size_t create_enumeratedtype(const std::size_t n)
void generateLPEmCRL(stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const process_identifier &procIdDecl, const bool regular, variable_list &pars, data_expression_list &init, stochastic_distribution &initial_stochastic_distribution, lps::detail::ultimate_delay &ultimate_delay_condition)
process_instance_assignment expand_process_instance_assignment(const process_instance_assignment &t)
static process_expression delta_at_zero()
assignment_list rewrite_assignments(const assignment_list &t)
assignment_list push_regular(const process_identifier &procId, const assignment_list &args, const stacklisttype &stack, const std::set< process_identifier > &pCRLprocs, bool singlestate, const variable_list &stochastic_variables)
void transform_process_arguments(const process_identifier &procId, std::set< process_identifier > &visited_processes)
std::set< process_identifier > minimize_set_of_reachable_process_identifiers(const std::set< process_identifier > &reachable_process_identifiers, const process_identifier &initial_process)
void collectPcrlProcesses(const process_identifier &procDecl, std::vector< process_identifier > &pcrlprocesses, std::set< process_identifier > &visited)
variable_list make_binary_sums(std::size_t n, const sort_expression &enumtypename, data_expression &condition, const variable_list &tail)
variable_list SieveProcDataVarsAssignments(const std::set< variable > &vars, const data_expression_list &initial_state_expressions)
data_expression_list extend_conditions(const variable &var, const data_expression_list &conditionlist)
bool check_valid_process_instance_assignment(const process_identifier &id, const assignment_list &assignments)
void calculate_left_merge_deadlock(const lps::detail::ultimate_delay &ultimate_delay_condition, const deadlock_summand_vector &deadlock_summands1, const bool is_allow, const bool is_block, const stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands)
void addString(const identifier_string &str)
void procstovarheadGNF(const std::vector< process_identifier > &procs)
static process_expression action_list_to_process(const action_list &ma)
process_expression distribute_sum_over_a_stochastic_operator(const variable_list &sumvars, const variable_list &stochastic_variables, const data_expression &distribution, const process_expression &body)
void alphaconvertprocess(variable_list &sumvars, MutableSubstitution &sigma, const process_expression &p)
process_expression obtain_initial_distribution_term(const process_expression &t)
data_expression push_stack(const process_identifier &procId, const assignment_list &args, const data_expression_list &t2, const stacklisttype &stack, const std::set< process_identifier > &pCRLprocs, const variable_list &vars, const variable_list &stochastic_variables)
void calculate_left_merge(const stochastic_action_summand_vector &action_summands1, const deadlock_summand_vector &deadlock_summands1, const lps::detail::ultimate_delay &ultimate_delay_condition2, const action_name_multiset_list &allowlist, const bool is_allow, const bool is_block, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands)
void declare_control_state(const std::set< process_identifier > &pCRLprocs)
void create_case_function_on_enumeratedtype(const sort_expression &sort, const std::size_t enumeratedtype_index)
variable_list SieveProcDataVarsSummands(const std::set< variable > &vars, const stochastic_action_summand_vector &action_summands, const deadlock_summand_vector &deadlock_summands, const variable_list &parameters)
static data_expression_list extend(const data_expression &c, const data_expression_list &cl)
specification_basic_type & operator=(const specification_basic_type &)=delete
static bool occursinvarandremove(const variable &var, variable_list &vl)
process_expression bodytovarheadGNF(const process_expression &body, const state s, const variable_list &freevars, const variableposition v, const std::set< variable > &variables_bound_in_sum)
process_identifier terminatedProcId
process_expression distribute_sum(const variable_list &sumvars, const process_expression &body1)
data_expression variables_are_equal_to_default_values(const variable_list &vl)
void procstorealGNF(const process_identifier &procsIdDecl, const bool regular)
static bool check_assignment_list(const assignment_list &assignments, const variable_list &parameters)
data_expression RewriteTerm(const data_expression &t)
void alphaconversion(const process_identifier &procId, const variable_list &parameters)
bool all_equal(const atermpp::term_list< T > &l)
void cluster_actions(stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const variable_list &pars)
process_expression transform_initial_distribution_term(const process_expression &t, const std::map< process_identifier, process_pid_pair > &processes_with_initial_distribution)
process_expression create_regular_invocation(process_expression sequence, std::vector< process_identifier > &todo, const variable_list &freevars, const std::set< variable > &variables_bound_in_sum)
process_expression transform_process_arguments_body(const process_expression &t, const std::set< variable > &bound_variables, std::set< process_identifier > &visited_processes)
static assignment_list parameters_to_assignment_list(const variable_list &parameters, const std::set< variable > &variables_bound_in_sum)
assignment_list dummyparameterlist(const stacklisttype &stack, const bool singlestate)
mcrl2::data::rewriter rewr
void make_pCRL_procs(const process_expression &t, std::set< process_identifier > &reachable_process_identifiers)
stackoperations * stack_operations_list
process_expression wraptime(const process_expression &body, const data_expression &time, const variable_list &freevars)
objectdatatype & objectIndex(const process_identifier &o)
process_identifier split_process(const process_identifier &procId, std::map< process_identifier, process_identifier > &visited_id, std::map< process_expression, process_expression > &visited_proc)
bool mergeoccursin(variable &var, const variable_list &v, variable_list &matchinglist, variable_list &pars, data_expression_list &args, const variable_list &process_parameters)
static bool occursintermlist(const variable &var, const data_expression_list &r)
bool exists_variable_for_sequence(const std::vector< process_instance_assignment > &process_names, process_identifier &result)
std::set< variable > find_free_variables_process(const process_expression &p)
process_expression alphaconversionterm(const process_expression &t, const variable_list &parameters, maintain_variables_in_rhs< mutable_map_substitution<> > sigma)
process_expression putbehind(const process_expression &body1, const process_expression &body2)
assignment_list substitute_assignmentlist(const assignment_list &assignments, const variable_list &parameters, const bool replacelhs, const bool replacerhs, Substitution &sigma)
process_instance_assignment transform_process_instance_to_process_instance_assignment(const process_instance &procId, const std::set< variable > &bound_variables=std::set< variable >())
process_instance_assignment RewriteProcess(const process_instance_assignment &t)
process_identifier delta_process
const objectdatatype & objectIndex(const process_identifier &o) const
void insert_summand(stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const variable_list &sumvars, const data_expression &condition, const action_list &multiAction, const data_expression &actTime, const stochastic_distribution &distribution, const assignment_list &procargs, const bool has_time, const bool is_deadlock_summand)
bool alreadypresent(variable &var, const variable_list &vl, mutable_indexed_substitution<> &parameter_renaming)
variable_list parameters_that_occur_in_body(const variable_list &parameters, const process_expression &body)
process_expression enumerate_distribution_and_sums(const variable_list &sumvars, const variable_list &stochvars, const data_expression &distribution, const process_expression &body)
bool containstimebody(const process_expression &t)
assignment_list make_procargs(const process_expression &t, const stacklisttype &stack, const std::set< process_identifier > &pcrlprcs, const variable_list &vars, const bool regular, const bool singlestate, const variable_list &stochastic_variables)
data_expression adapt_term_to_stack(const data_expression &t, const stacklisttype &stack, const variable_list &vars, const variable_list &stochastic_variables)
data_expression_list processencoding(std::size_t i, const data_expression_list &t1, const stacklisttype &stack)
process_expression RewriteMultAct(const process_expression &t)
void generateLPEmCRLterm(stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const process_expression &t, const bool regular, const bool rename_variables, variable_list &pars, data_expression_list &init, stochastic_distribution &initial_stochastic_distribution, lps::detail::ultimate_delay &ultimate_delay_condition)
Linearise a process indicated by procIdDecl.
variable_list make_pars(const sort_expression_list &sortlist)
specification_basic_type(const specification_basic_type &)=delete
static data_expression real_times_optimized(const data_expression &r1, const data_expression &r2)
bool occursinpCRLterm(const variable &var, const process_expression &p, const bool strict)
void collectPcrlProcesses(const process_identifier &procDecl, std::vector< process_identifier > &pcrlprocesses)
static std::size_t upperpowerof2(std::size_t i)
void extract_names(const process_expression &sequence, std::vector< process_instance_assignment > &result)
std::map< aterm, objectdatatype > objectdata
action RewriteAction(const action &t)
data_expression_vector adapt_termlist_to_stack(Iterator begin, const Iterator &end, const stacklisttype &stack, const variable_list &vars, const variable_list &stochastic_variables)
data_expression make_procargs_stack(const process_expression &t, const stacklisttype &stack, const std::set< process_identifier > &pcrlprcs, const variable_list &vars, const variable_list &stochastic_variables)
specification_basic_type(const process::action_label_list &as, const std::vector< process_equation > &ps, const variable_list &idvs, const data_specification &ds, const std::set< data::variable > &glob_vars, const t_lin_options &opt, const process_specification &procspec)
variable_list getparameters(const process_expression &multiAction)
data_expression makesingleultimatedelaycondition(const variable_list &sumvars, const variable_list &freevars, const data_expression &condition, const bool has_time, const variable &timevariable, const data_expression &actiontime, variable_list &used_sumvars)
void collectPcrlProcesses_term(const process_expression &body, std::vector< process_identifier > &pcrlprocesses, std::set< process_identifier > &visited)
data_expression representative_generator_internal(const sort_expression &s, const bool allow_dont_care_var=true)
assignment_list processencoding(std::size_t i, const assignment_list &t1, const stacklisttype &stack)
objectdatatype & addMultiAction(const process_expression &multiAction, bool &isnew)
void storeprocs(const std::vector< process_equation > &procs)
process_expression substitute_pCRLproc(const process_expression &p, Substitution &sigma)
void make_parameters_and_sum_variables_unique(stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, variable_list &pars, lps::detail::ultimate_delay &ultimate_delay_condition, const std::string &hint="")
std::set< variable > global_variables
static data_expression getRHSassignment(const variable &var, const assignment_list &as)
variable_list construct_renaming(const variable_list &pars1, const variable_list &pars2, variable_list &pars3, variable_list &pars4, const bool unique=true)
void determine_process_status(const process_identifier &procDecl, const processstatustype status)
static action_list makemultiaction(const process::action_label_list &actionIds, const data_expression_list &args)
void insertvariables(const variable_list &vars, const bool mustbenew)
variable_list collectparameterlist(std::set< process_identifier > &pCRLprocs)
data_expression_list RewriteTermList(const data_expression_list &t)
data_specification data
variable_list make_parameters_rec(const data_expression_list &l, std::set< variable > &occurs_set)
void detail_check_objectdata(const process_identifier &o) const
static assignment_list filter_assignments(const assignment_list &assignments, const variable_list &parameters)
variable_list merge_var(const variable_list &v1, const variable_list &v2, std::vector< variable_list > &renamings_pars, std::vector< data_expression_list > &renamings_args, data_expression_list &conditionlist, const variable_list &process_parameters)
bool containstimebody(const process_expression &t, bool *stable, std::set< process_identifier > &visited, bool allowrecursion, bool &contains_if_then)
static assignment_list sort_assignments(const assignment_list &ass, const variable_list &parameters)
assignment_list find_dummy_arguments(const variable_list &parlist, const assignment_list &args, const std::set< variable > &free_variables_in_body, const variable_list &stochastic_variables)
process_identifier tau_process
static sort_expression_list get_sorts(const List &l)
std::vector< process_identifier > seq_varnames
void storeact(const process::action_label_list &acts)
bool is_global_variable(const data_expression &d) const
variable_list joinparameters(const variable_list &par1, const variable_list &par2, mutable_indexed_substitution<> &parameter_renaming)
static bool occursin(const variable &name, const variable_list &pars)
bool canterminatebody(const process_expression &t, bool &stable, std::set< process_identifier > &visited, const bool allowrecursion)
void AddTerminationActionIfNecessary(const stochastic_action_summand_vector &summands)
bool determinewhetherprocessescontaintime(const process_identifier &procId)
void filter_vars_by_assignmentlist(const assignment_list &assignments, const variable_list &parameters, const std::set< variable > &vars_set, std::set< variable > &vars_result_set)
data_expression_list addcondition(const variable_list &matchinglist, const data_expression_list &conditionlist)
void calculate_communication_merge_deadlock_summands(const deadlock_summand_vector &deadlock_summands1, const deadlock_summand_vector &deadlock_summands2, const stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands)
void transform(const process_identifier &init, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, variable_list &parameters, data_expression_list &initial_state, stochastic_distribution &initial_stochastic_distribution)
process_expression obtain_initial_distribution(const process_identifier &procId)
objectdatatype & insertAction(const action_label &actionId)
Expression replace_variables_capture_avoiding_alt(const Expression &e, Substitution &sigma)
process_instance_assignment expand_process_instance_assignment(const process_instance_assignment &t, std::set< process_identifier > &visited_processes)
assignment_list pushdummy_regular(const variable_list &pars, const stacklisttype &stack, const variable_list &stochastic_variables)
assignment_list argscollect_regular(const process_expression &t, const variable_list &vl, const std::set< variable > &variables_bound_in_sum)
static data_expression_list getarguments(const action_list &multiAction)
lps::detail::ultimate_delay getUltimateDelayCondition(const stochastic_action_summand_vector &action_summands, const deadlock_summand_vector &deadlock_summands, const variable_list &freevars)
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
Definition logger.h:393
void optimized_forall(typename TermTraits::term_type &result, const typename TermTraits::variable_sequence_type &v, const typename TermTraits::term_type &arg, bool remove_variables, bool empty_domain_allowed, TermTraits)
Make a universal quantification.
void split_condition(const data_expression &e, std::vector< data_expression_list > &real_conditions, std::vector< data_expression > &non_real_conditions)
This function first splits the given condition e into real conditions and non real conditions....
data_expression parse_data_expression(const std::string &text)
Definition data.cpp:223
lhs_t map_to_lhs_type(const map_based_lhs_t &lhs, const data_expression &factor, const rewriter &r)
data_expression negate_inequality(const data_expression &e)
data_specification parse_data_specification_new(const std::string &text)
Definition data.cpp:234
void optimized_exists(typename TermTraits::term_type &result, const typename TermTraits::variable_sequence_type &v, const typename TermTraits::term_type &arg, bool remove_variables, bool empty_domain_allowed, TermTraits)
Make an existential quantification.
rewrite_data_expressions_with_substitution_builder< Builder, Rewriter, Substitution > make_rewrite_data_expressions_with_substitution_builder(Rewriter R, Substitution sigma)
Definition rewrite.h:78
rewrite_data_expressions_builder< Builder, Rewriter > make_rewrite_data_expressions_builder(Rewriter R)
Definition rewrite.h:47
variable_list parse_variable_declaration_list(const std::string &text)
Definition data.cpp:245
void optimized_or(typename TermTraits::term_type &result, const typename TermTraits::term_type &left, const typename TermTraits::term_type &right, TermTraits)
Make a disjunction.
variable_list parse_variables(const std::string &text)
Definition data.cpp:212
lhs_t map_to_lhs_type(const map_based_lhs_t &lhs)
std::string pp(const detail::comparison_t t)
variable_list set_intersection(const variable_list &x, const variable_list &y)
Returns the intersection of two unordered sets, that are stored in ATerm lists.
lhs_t set_factor_for_a_variable(const lhs_t &lhs, const variable &x, const data_expression &e)
static data_specification const & default_specification()
Definition parse.h:28
void optimized_imp(typename TermTraits::term_type &result, const typename TermTraits::term_type &left, const typename TermTraits::term_type &right, TermTraits t)
Make an implication.
const data_expression & else_part(const data_expression &e)
bool is_well_formed(const lhs_t &lhs)
bool is_inequality(const data_expression &e)
Determine whether a data expression is an inequality.
detail::comparison_t negate(const detail::comparison_t t)
const data_expression & condition_part(const data_expression &e)
lhs_t remove_variable_and_divide(const lhs_t &lhs, const variable &v, const data_expression &f, const rewriter &r)
std::string pp(const detail::lhs_t &lhs)
const data_expression & then_part(const data_expression &e)
void optimized_not(typename TermTraits::term_type &result, const typename TermTraits::term_type &arg, TermTraits)
static bool split_condition_aux(const data_expression &e, std::vector< data_expression_list > &real_conditions, std::vector< data_expression_list > &non_real_conditions, const bool negate=false)
Splits a condition in expressions ranging over reals and the others.
void set_factor_for_a_variable(detail::map_based_lhs_t &new_lhs, const variable &x, const data_expression &e)
variable_list set_difference(const variable_list &x, const variable_list &y)
Returns the difference of two unordered sets, that are stored in aterm lists.
void optimized_and(typename TermTraits::term_type &result, const typename TermTraits::term_type &left, const typename TermTraits::term_type &right, TermTraits)
Make a conjunction and optimize it if possible.
atermpp::function_symbol f_variable_with_a_rational_factor()
sort_expression parse_sort_expression(const std::string &text)
Definition data.cpp:202
A collection of utilities for lazy expression construction.
data_expression and_(data_expression const &p, data_expression const &q)
Returns an expression equivalent to p or q.
Namespace for system defined sort bool_.
Definition bool.h:29
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
Definition bool.h:342
const basic_sort & bool_()
Constructor for sort expression Bool.
Definition bool.h:41
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
Definition bool.h:490
bool is_implies_application(const atermpp::aterm &e)
Recogniser for application of =>.
Definition bool.h:406
application not_(const data_expression &arg0)
Application of function symbol !.
Definition bool.h:194
application or_(const data_expression &arg0, const data_expression &arg1)
Application of function symbol ||.
Definition bool.h:321
const function_symbol & false_()
Constructor for function symbol false.
Definition bool.h:106
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
Definition bool.h:278
bool is_not_application(const atermpp::aterm &e)
Recogniser for application of !.
Definition bool.h:214
const function_symbol & true_()
Constructor for function symbol true.
Definition bool.h:74
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
Definition bool.h:478
Namespace for system defined sort real_.
function_symbol plus(const sort_expression &s0, const sort_expression &s1)
Definition real1.h:1056
function_symbol times(const sort_expression &s0, const sort_expression &s1)
Definition real1.h:1234
bool is_zero(const atermpp::aterm &e)
function_symbol divides(const sort_expression &s0, const sort_expression &s1)
Definition real1.h:1404
data_expression & real_one()
bool is_one(const atermpp::aterm &e)
bool is_plus_application(const atermpp::aterm &e)
Recogniser for application of +.
Definition real1.h:1133
data_expression & real_zero()
bool is_creal_application(const atermpp::aterm &e)
Recogniser for application of @cReal.
Definition real1.h:150
function_symbol minus(const sort_expression &s0, const sort_expression &s1)
Definition real1.h:1149
const basic_sort & real_()
Constructor for sort expression Real.
Definition real1.h:45
bool is_real(const sort_expression &e)
Recogniser for sort expression Real.
Definition real1.h:55
application times(const data_expression &arg0, const data_expression &arg1)
Application of function symbol *.
Definition real1.h:1282
bool is_larger_zero(const atermpp::aterm &e)
Functions that returns true if e is a closed real number larger than zero.
function_symbol abs(const sort_expression &s0)
Definition real1.h:732
bool is_times_application(const atermpp::aterm &e)
Recogniser for application of *.
Definition real1.h:1303
function_symbol negate(const sort_expression &s0)
Definition real1.h:807
bool is_negate_application(const atermpp::aterm &e)
Recogniser for application of -.
Definition real1.h:874
bool is_minus_application(const atermpp::aterm &e)
Recogniser for application of -.
Definition real1.h:1218
linear_inequality subtract(const linear_inequality &e1, const linear_inequality &e2, const data_expression &f1, const data_expression &f2, const rewriter &r)
Subtract the given equality, multiplied by f1/f2. The result is e1-(f1/f2)e2,.
void parse_variables(std::istream &in, OutputIterator o, VariableIterator begin, VariableIterator end, const data_specification &data_spec=detail::default_specification())
Parses and type checks a data variable declaration list checking for double occurrences of variables ...
Definition parse.h:111
application real_times(const data_expression &arg0, const data_expression &arg1)
const data::data_expression & undefined_real()
Returns a data expression of type Real that corresponds to 'undefined'.
Definition undefined.h:66
void typecheck_sort_expression(const sort_expression &sort_expr, const data_specification &data_spec)
Type check a sort expression. Throws an exception if something went wrong.
Definition typecheck.h:282
data_expression & real_one()
T rewrite(const T &x, Rewriter R)
Definition rewrite.h:103
data_expression parse_data_expression(std::istream &in, const VariableContainer &variables, const data_specification &dataspec=detail::default_specification(), bool type_check=true, bool translate_user_notation=true, bool normalize_sorts=true)
Parses and type checks a data expression.
Definition parse.h:273
void optimized_exists_no_empty_domain(Term &result, const VariableSequence &l, const Term &p, bool remove_variables=false)
Make an existential quantification.
data_expression parse_data_expression(const std::string &text, const VariableContainer &variables, const data_specification &data_spec=detail::default_specification(), bool type_check=true, bool translate_user_notation=true, bool normalize_sorts=true)
Parses and type checks a data expression.
Definition parse.h:309
variable_list parse_variable_declaration_list(const std::string &text, const data_specification &dataspec=detail::default_specification())
Parses a variable declaration list.
Definition parse.h:426
void optimized_exists(Term &result, const VariableSequence &l, const Term &p, bool remove_variables=false)
Make an existential quantification.
bool is_closed_real_number(const data_expression &e)
bool is_application(const data_expression &t)
Returns true if the term t is an application.
application real_plus(const data_expression &arg0, const data_expression &arg1)
void parse_variables(const std::string &text, OutputIterator i, VariableIterator begin, VariableIterator end, const data_specification &data_spec=detail::default_specification())
Parses and type checks a data variable declaration list checking for double occurrences of variables ...
Definition parse.h:168
data_expression & real_minus_one()
bool is_simple_substitution(const map_substitution< AssociativeContainer > &sigma)
sort_expression parse_sort_expression(std::istream &in, const data_specification &data_spec=detail::default_specification())
Parses and type checks a sort expression.
Definition parse.h:377
void optimized_or(Term &result, const Term &p, const Term &q)
Make a conjunction, and optimize if possible.
bool is_positive(const data_expression &e, const rewriter &r)
bool is_where_clause(const atermpp::aterm &x)
Returns true if the term t is a where clause.
data_expression parse_data_expression(std::istream &text, const data_specification &data_spec=detail::default_specification(), bool type_check=true, bool translate_user_notation=true, bool normalize_sorts=true)
Parses and type checks a data expression.
Definition parse.h:331
application less_equal(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <=.
Definition standard.h:291
variable_list parse_variables(const std::string &text)
Definition parse.h:362
application real_abs(const data_expression &arg)
application less(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <.
Definition standard.h:254
data::data_expression translate_user_notation(const data::data_expression &x)
Definition data.cpp:88
data_specification parse_data_specification(std::istream &in)
Parses a and type checks a data specification.
Definition parse.h:59
void typecheck_data_specification(data_specification &data_spec)
Type check a parsed mCRL2 data specification. Throws an exception if something went wrong.
Definition typecheck.h:339
std::set< data::variable > substitution_variables(const map_substitution< AssociativeContainer > &sigma)
std::string pp_vector(const TYPE &inequalities)
Print the vector of inequalities to stderr in readable form.
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
variable parse_variable(std::istream &text, const data_specification &data_spec=detail::default_specification())
Parses and type checks a data variable declaration.
Definition parse.h:247
application if_(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol if.
Definition standard.h:215
void remove_redundant_inequalities(const std::vector< linear_inequality > &inequalities, std::vector< linear_inequality > &resulting_inequalities, const rewriter &r)
Remove every redundant inequality from a vector of inequalities.
application real_minus(const data_expression &arg0, const data_expression &arg1)
data::function_symbol parse_function_symbol(const std::string &text, const std::string &dataspec_text="")
Definition parse.h:407
map_substitution< AssociativeContainer > make_map_substitution(const AssociativeContainer &m)
Utility function for creating a map_substitution.
void fourier_motzkin(const data_expression &e_in, const variable_list &vars_in, data_expression &e_out, variable_list &vars_out, const rewriter &r)
Eliminate variables from a data expression using Gauss elimination and Fourier-Motzkin elimination.
void parse_variables(const std::string &text, OutputIterator i, const data_specification &data_spec=detail::default_specification())
Parses and type checks a data variable declaration list.
Definition parse.h:200
bool is_simple_substitution(const assignment_sequence_substitution &sigma)
std::string pp(const linear_inequality &l)
application real_divides(const data_expression &arg0, const data_expression &arg1)
std::set< variable > gauss_elimination(const std::vector< linear_inequality > &inequalities, std::vector< linear_inequality > &resulting_equalities, std::vector< linear_inequality > &resulting_inequalities, Variable_iterator variables_begin, Variable_iterator variables_end, const rewriter &r)
Try to eliminate variables from a system of inequalities using Gauss elimination.
void optimized_imp(Term &result, const Term &p, const Term &q)
Make an implication.
bool is_zero(const data_expression &e)
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
void fourier_motzkin(const std::vector< linear_inequality > &inequalities_in, Data_variable_iterator variables_begin, Data_variable_iterator variables_end, std::vector< linear_inequality > &resulting_inequalities, const rewriter &r)
data_expression rewrite_with_memory(const data_expression &t, const rewriter &r)
data_expression & real_zero()
application greater(const data_expression &arg0, const data_expression &arg1)
Application of function symbol >
Definition standard.h:328
data_expression parse_data_expression(const std::string &text, const data_specification &data_spec=detail::default_specification(), bool type_check=true, bool translate_user_notation=true, bool normalize_sorts=true)
Parses and type checks a data expression.
Definition parse.h:351
bool is_untyped_data_parameter(const atermpp::aterm &x)
void optimized_forall_no_empty_domain(Term &result, const VariableSequence &l, const Term &p, bool remove_variables=false)
Make a universal quantification.
void parse_variables(std::istream &text, OutputIterator i, const data_specification &data_spec=detail::default_specification())
Parses and type checks a data variable declaration list.
Definition parse.h:185
std::pair< basic_sort_vector, alias_vector > parse_sort_specification(const std::string &text)
Definition data.cpp:257
sort_expression parse_sort_expression(const std::string &text, const data_specification &data_spec=detail::default_specification())
Parses and type checks a sort expression.
Definition parse.h:396
application real_negate(const data_expression &arg)
bool is_inconsistent(const std::vector< linear_inequality > &inequalities_in, const rewriter &r, bool use_cache=true)
Determine whether a list of data expressions is inconsistent.
data_expression max(const data_expression &e1, const data_expression &e2, const rewriter &)
bool is_machine_number(const atermpp::aterm &x)
Returns true if the term t is a machine_number.
bool is_negative(const data_expression &e, const rewriter &r)
const data_expression_list & variable_list_to_data_expression_list(const variable_list &l)
Transform a variable_list into a data_expression_list.
application equal_to(const data_expression &arg0, const data_expression &arg1)
Application of function symbol ==.
Definition standard.h:140
void optimized_not(Term &result, const Term &arg)
Make a negation.
void optimized_and(Term &result, const Term &p, const Term &q)
Make a conjunction, and optimize if possible.
void rewrite(T &x, Rewriter R)
Definition rewrite.h:90
data_expression min(const data_expression &e1, const data_expression &e2, const rewriter &)
variable parse_variable(const std::string &text, const data_specification &data_spec=detail::default_specification())
Parses and type checks a data variable declaration.
Definition parse.h:215
data_specification parse_data_specification(const std::string &text)
Parses a and type checks a data specification.
Definition parse.h:76
void optimized_forall(Term &result, const VariableSequence &l, const Term &p, bool remove_variables=false)
Make a universal quantification.
void swap(data_expression &t1, data_expression &t2) noexcept
\brief swap overload
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
void replace_global_variables(Specification &lpsspec, const data::mutable_map_substitution<> &sigma)
Applies a global variable substitution to an LPS.
stochastic_action_summand_vector convert_action_summands(const action_summand_vector &action_summands)
allow_list_cache make_allow_list_cache(const process::action_name_multiset_list &allowlist)
data::mutable_map_substitution instantiate_global_variables(Specification &lpsspec)
Eliminates the global variables of an LPS, by substituting a constant value for them....
core::identifier_string_list names(const process::action_list &multi_action)
Calculate the list of action names that appear in a multi-action.
Summand make_action_summand(const data::variable_list &, const data::data_expression &, const multi_action &, const data::assignment_list &, const stochastic_distribution &)
The main namespace for the LPS library.
Definition constelm.h:18
std::set< core::identifier_string > find_identifiers(const T &x)
Definition find.h:102
std::ostream & operator<<(std::ostream &out, const stochastic_process_initializer &x)
void find_function_symbols(const T &x, OutputIterator o)
Definition find.h:135
std::ostream & operator<<(std::ostream &out, const stochastic_distribution &x)
std::string pp(const lps::stochastic_specification &x, bool arg0)
Definition lps.cpp:40
std::set< data::variable > find_all_variables(const lps::linear_process &x)
Definition lps.cpp:47
void make_stochastic_distribution(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const lps::specification &x, bool arg0)
Definition lps.cpp:35
std::set< data::sort_expression > find_sort_expressions(const lps::stochastic_specification &x)
Definition lps.cpp:46
std::set< data::variable > find_free_variables(const lps::stochastic_specification &x)
Definition lps.cpp:56
std::string pp(const lps::stochastic_distribution &x, bool arg0)
Definition lps.cpp:37
std::string pp_extended(const stochastic_specification &x, const std::string &process_name, bool precedence_aware, bool summand_numbers)
Definition lps.cpp:98
void complete_data_specification(stochastic_specification &spec)
Adds all sorts that appear in the process of l to the data specification of l.
void replace_variables_capture_avoiding(T &x, Substitution &sigma, data::set_identifier_generator &id_generator)
std::set< process::action_label > find_action_labels(const T &x)
Returns all action labels that occur in an object.
Definition find.h:178
std::set< data::variable > find_all_variables(const lps::multi_action &x)
Returns all variables inside a multi-action.
Definition lps.cpp:52
bool search_free_variable(const T &x, const data::variable &v)
Returns true if the term has a given free variable as subterm.
Definition find.h:157
void find_all_variables(const multi_action &x, OutputIterator o)
Returns all variables inside a multi-action.
Definition find.h:189
void swap(action_summand &t1, action_summand &t2) noexcept
\brief swap overload
void swap(deadlock_summand &t1, deadlock_summand &t2) noexcept
\brief swap overload
bool operator!=(const stochastic_specification &spec1, const stochastic_specification &spec2)
Inequality operator.
std::ostream & operator<<(std::ostream &out, const stochastic_linear_process &x)
std::set< data::variable > find_all_variables(const lps::stochastic_specification &x)
Definition lps.cpp:50
std::ostream & operator<<(std::ostream &out, const process_initializer &x)
bool check_well_typedness(const specification &x)
Definition lps.cpp:118
bool is_stochastic_process_initializer(const atermpp::aterm &x)
void complete_data_specification(specification &spec)
Adds all sorts that appear in the process of l to the data specification of l.
std::ostream & operator<<(std::ostream &out, const specification &x)
std::set< data::variable > find_free_variables(const lps::linear_process &x)
Definition lps.cpp:53
bool is_specification(const atermpp::aterm &x)
Test for a specification expression.
bool encap(const process::action_name_multiset_list &encaplist, const process::action_list &multiaction)
Calculate if any of the actions in multiaction is blocked by encap_list.
void rewrite(T &x, Rewriter R)
Definition rewrite.h:25
bool check_well_typedness(const linear_process &x)
Definition lps.cpp:108
void swap(deadlock &t1, deadlock &t2) noexcept
\brief swap overload
Definition deadlock.h:105
void find_free_variables(const T &x, OutputIterator o)
Definition find.h:49
void swap(multi_action &t1, multi_action &t2) noexcept
\brief swap overload
std::set< data::variable > find_all_variables(const T &x)
Definition find.h:37
T replace_variables_capture_avoiding(const T &x, Substitution &sigma, data::set_identifier_generator &id_generator)
std::set< data::function_symbol > find_function_symbols(const lps::stochastic_specification &x)
Definition lps.cpp:62
bool occursinterm(const data::data_expression &t, const data::variable &var)
void find_sort_expressions(const T &x, OutputIterator o)
Definition find.h:114
std::string pp_extended(const specification &x, const std::string &process_name, bool precedence_aware, bool summand_numbers)
Definition lps.cpp:88
bool operator<(const stochastic_action_summand &x, const stochastic_action_summand &y)
Comparison operator for action summands.
mcrl2::lps::stochastic_specification linearise(const std::string &text, const mcrl2::lps::t_lin_options &lin_options=t_lin_options())
Linearises a process specification from a textual specification.
Definition linearise.h:58
std::set< data::variable > find_free_variables_with_bound(const T &x, VariableContainer const &bound)
Definition find.h:81
bool encap(const Container &blocked_actions, const process::action_list &multiaction)
Calculate if any of the actions in multiaction is blocked by encap_list.
void remove_parameters(Object &x, const std::set< data::variable > &to_be_removed)
Rewrites an LPS data type.
Definition remove.h:187
atermpp::aterm specification_to_aterm(const specification_base< LinearProcess, InitialProcessExpression > &spec)
Conversion to aterm.
std::set< process::action_label > find_action_labels(const lps::process_initializer &x)
Definition lps.cpp:66
std::ostream & operator<<(std::ostream &out, const deadlock &x)
Definition deadlock.h:99
std::set< data::variable > find_free_variables(const lps::specification &x)
Definition lps.cpp:55
void constelm(Specification &spec, const DataRewriter &R, bool instantiate_global_variables=false)
Removes zero or more constant parameters from the specification spec.
Definition constelm.h:269
std::ostream & operator<<(std::ostream &out, const action_summand &x)
void normalize_sorts(lps::specification &x, const data::sort_specification &)
Definition lps.cpp:42
atermpp::aterm deadlock_summand_to_aterm(const deadlock_summand &s)
Conversion to atermappl.
std::set< data::variable > find_free_variables(const lps::deadlock &x)
Definition lps.cpp:57
bool operator==(const specification &spec1, const specification &spec2)
Equality operator.
std::string pp(const lps::deadlock_summand &x, bool arg0)
Definition lps.cpp:31
std::set< process::action_label > find_action_labels(const lps::linear_process &x)
Definition lps.cpp:65
lps::multi_action normalize_sorts(const lps::multi_action &x, const data::sort_specification &sortspec)
Definition lps.cpp:41
std::set< data::variable > find_free_variables(const lps::stochastic_linear_process &x)
Definition lps.cpp:54
std::set< data::function_symbol > find_function_symbols(const lps::specification &x)
Definition lps.cpp:61
std::string pp(const lps::stochastic_linear_process &x, bool arg0)
Definition lps.cpp:38
std::set< data::variable > find_free_variables(const lps::stochastic_process_initializer &x)
Definition lps.cpp:60
bool operator==(const stochastic_specification &spec1, const stochastic_specification &spec2)
void swap(stochastic_action_summand &t1, stochastic_action_summand &t2) noexcept
\brief swap overload
std::set< data::variable > find_free_variables(const lps::multi_action &x)
Definition lps.cpp:58
std::string pp(const lps::deadlock &x, bool arg0)
Definition lps.cpp:30
std::ostream & operator<<(std::ostream &out, const multi_action &x)
void remove_redundant_assignments(Specification &lpsspec)
Removes redundant assignments of the form x = x from an LPS specification.
Definition remove.h:244
void allowblockcomposition(const process::action_name_multiset_list &allowlist1, const bool is_allow, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const process::action &termination_action, bool ignore_time, bool nodeltaelimination)
bool operator!=(const specification &spec1, const specification &spec2)
Inequality operator.
void normalize_sorts(lps::stochastic_specification &x, const data::sort_specification &)
Definition lps.cpp:43
std::set< data::variable > find_free_variables(const lps::process_initializer &x)
Definition lps.cpp:59
data::data_expression equal_multi_actions(const multi_action &a, const multi_action &b)
Returns a data expression that expresses under which conditions the multi actions a and b are equal....
bool is_stochastic_distribution(const atermpp::aterm &x)
specification remove_stochastic_operators(const stochastic_specification &spec)
Converts a stochastic specification to a specification. Throws an exception if non-empty distribution...
bool operator==(const action_summand &x, const action_summand &y)
Equality operator of action summands.
bool is_process_initializer(const atermpp::aterm &x)
void remove_singleton_sorts(Specification &spec)
Removes parameters with a singleton sort from a linear process specification.
Definition remove.h:208
bool check_well_typedness(const Object &o)
std::string pp(const lps::stochastic_action_summand &x, bool arg0)
Definition lps.cpp:36
data::assignment_list remove_redundant_assignments(const data::assignment_list &assignments, const data::variable_list &do_not_remove)
Removes assignments of the form x := x from v for variables x that are not contained in do_not_remove...
Definition remove.h:226
mcrl2::lps::stochastic_specification linearise(const mcrl2::process::process_specification &type_checked_spec, const mcrl2::lps::t_lin_options &lin_options=t_lin_options())
Linearises a process specification.
std::string pp(const lps::stochastic_process_initializer &x, bool arg0)
Definition lps.cpp:39
std::string pp(const lps::linear_process &x, bool arg0)
Definition lps.cpp:32
T rewrite(const T &x, Rewriter R)
Definition rewrite.h:38
std::set< data::sort_expression > find_sort_expressions(const T &x)
Definition find.h:123
std::string pp(const lps::multi_action &x, bool arg0)
Definition lps.cpp:33
void make_stochastic_process_initializer(atermpp::aterm &t, ARGUMENTS... args)
void find_identifiers(const T &x, OutputIterator o)
Definition find.h:93
void swap(stochastic_process_initializer &t1, stochastic_process_initializer &t2) noexcept
\brief swap overload
void find_free_variables_with_bound(const T &x, OutputIterator o, const VariableContainer &bound)
Definition find.h:60
std::set< data::variable > find_free_variables(const T &x)
Definition find.h:69
std::ostream & operator<<(std::ostream &out, const stochastic_action_summand &x)
atermpp::aterm linear_process_to_aterm(const linear_process_base< ActionSummand > &p)
Conversion to aterm.
std::set< data::sort_expression > find_sort_expressions(const lps::specification &x)
Definition lps.cpp:45
void make_process_initializer(atermpp::aterm &t, EXPRESSION_LIST args)
bool operator==(const stochastic_action_summand &x, const stochastic_action_summand &y)
Equality operator of stochastic action summands.
void make_multi_action(atermpp::aterm &t, const ARGUMENTS &... args)
data::data_expression not_equal_multi_actions(const multi_action &a, const multi_action &b)
Returns a pbes expression that expresses under which conditions the multi actions a and b are not equ...
std::string log_allow_block_application(const lps_statistics_t &lps_statistics_before, const lps_statistics_t &lps_statistics_after, const bool is_allow, const std::size_t num_allowed_multiactions, const std::size_t num_blocked_actions, const bool apply_delta_elimination, const bool ignore_time, size_t indent=0)
std::string pp(const lps::action_summand &x, bool arg0)
Definition lps.cpp:29
void remove_trivial_summands(Specification &spec)
Removes summands with condition equal to false from a linear process specification.
Definition remove.h:196
bool operator<(const action_summand &x, const action_summand &y)
Comparison operator for action summands.
std::set< data::variable > find_all_variables(const lps::specification &x)
Definition lps.cpp:49
std::ostream & operator<<(std::ostream &out, const linear_process &x)
bool check_well_typedness(const stochastic_specification &x)
Definition lps.cpp:123
std::set< data::variable > find_all_variables(const lps::deadlock &x)
Definition lps.cpp:51
atermpp::aterm action_summand_to_aterm(const action_summand &s)
Conversion to aterm.
std::set< data::variable > find_all_variables(const lps::stochastic_linear_process &x)
Definition lps.cpp:48
bool check_well_typedness(const stochastic_linear_process &x)
Definition lps.cpp:113
lps::multi_action translate_user_notation(const lps::multi_action &x)
Definition lps.cpp:44
void swap(stochastic_distribution &t1, stochastic_distribution &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const stochastic_specification &x)
void find_all_variables(const T &x, OutputIterator o)
Definition find.h:28
std::set< core::identifier_string > find_identifiers(const lps::stochastic_specification &x)
Definition lps.cpp:64
std::set< data::function_symbol > find_function_symbols(const T &x)
Definition find.h:144
void find_action_labels(const T &x, OutputIterator o)
Returns all action labels that occur in an object.
Definition find.h:169
atermpp::aterm action_summand_to_aterm(const stochastic_action_summand &s)
Conversion to aterm.
void swap(process_initializer &t1, process_initializer &t2) noexcept
\brief swap overload
std::set< core::identifier_string > find_identifiers(const lps::specification &x)
Definition lps.cpp:63
std::ostream & operator<<(std::ostream &out, const deadlock_summand &x)
bool allow_(const detail::allow_list_cache &allow_cache, const process::action_list &multi_action, const process::action &termination_action)
Determine if multi_action is allowed by an allow expression in allow_list.
std::set< process::action_label > find_action_labels(const lps::specification &x)
Definition lps.cpp:67
std::string pp(const lps::process_initializer &x, bool arg0)
Definition lps.cpp:34
bool is_multi_action(const atermpp::aterm &x)
bool is_linear_process(const atermpp::aterm &x)
Test for a linear_process expression.
void complete_process_specification(process_specification &x, bool alpha_reduce)
Definition process.cpp:150
std::pair< data::data_expression_list, data::sort_expression_list > match_action_parameters(const data::data_expression_list &parameters, const std::set< data::sort_expression_list > &possible_parameter_sorts, const data::detail::variable_context &variable_context, const core::identifier_string &name, const std::string &msg, data::data_type_checker &typechecker)
process_specification parse_process_specification_new(const std::string &text)
Definition process.cpp:137
bool multi_actions_contains(const core::identifier_string_list &a, const action_name_multiset_list &A)
Definition typecheck.h:75
typecheck_builder make_typecheck_builder(data::data_type_checker &data_typechecker, const data::detail::variable_context &variables, const detail::process_context &process_identifiers, const detail::action_context &action_context, const process_identifier *current_equation=nullptr)
Definition typecheck.h:621
bool equal_multi_actions(core::identifier_string_list a1, core::identifier_string_list a2)
Definition typecheck.h:89
std::tuple< bool, data::data_expression_vector, std::string > match_action_parameters(const data::data_expression_list &parameters, const data::sort_expression_list &expected_sorts, const data::detail::variable_context &variable_context, data::data_type_checker &typechecker)
process_expression parse_process_expression_new(const std::string &text)
Definition process.cpp:125
The main namespace for the Process library.
std::string pp(const action_list &x, bool precedence_aware=true)
Definition process.cpp:24
bool is_at(const atermpp::aterm &x)
std::set< core::identifier_string > find_identifiers(const process::process_specification &x)
Definition process.cpp:79
void find_identifiers(const T &x, OutputIterator o)
Definition find.h:205
void swap(rename &t1, rename &t2) noexcept
\brief swap overload
void make_allow(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(at &t1, at &t2) noexcept
\brief swap overload
void swap(action &t1, action &t2) noexcept
\brief swap overload
void complete_data_specification(process_specification &)
Adds all sorts that appear in the process specification spec to the data specification of spec.
void swap(untyped_multi_action &t1, untyped_multi_action &t2) noexcept
\brief swap overload
bool operator<(const action_label &a1, const action_label &a2)
Total ordering on action labels: name first (string order), then sorts.
std::set< data::variable > find_all_variables(const action &x)
Definition process.cpp:76
std::ostream & operator<<(std::ostream &out, const sync &x)
void normalize_sorts(process::process_equation_vector &x, const data::sort_specification &sortspec)
Definition process.cpp:67
std::ostream & operator<<(std::ostream &out, const bounded_init &x)
void make_choice(atermpp::aterm &t, const ARGUMENTS &... args)
T replace_sort_expressions(const T &x, const Substitution &sigma, bool innermost)
Definition replace.h:33
std::ostream & operator<<(std::ostream &out, const process_specification &x)
std::string pp(const process::action_name_multiset &x, bool arg0)
Definition process.cpp:36
std::string pp(const process_equation_list &x)
std::string pp(const process::action_label &x, bool arg0)
Definition process.cpp:35
std::string pp(const process::process_equation &x, bool arg0)
Definition process.cpp:50
void find_action_labels(const T &x, OutputIterator o)
Returns all action labels that occur in an object.
Definition find.h:269
std::string pp(const process::process_identifier &x, bool arg0)
Definition process.cpp:52
void swap(if_then &t1, if_then &t2) noexcept
\brief swap overload
void make_process_identifier(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(bounded_init &t1, bounded_init &t2) noexcept
\brief swap overload
std::set< data::sort_expression > find_sort_expressions(const process::process_specification &x)
Definition process.cpp:75
bool is_process_instance(const atermpp::aterm &x)
void swap(delta &t1, delta &t2) noexcept
\brief swap overload
std::set< data::sort_expression_list > sorts_list_difference(const std::set< data::sort_expression_list > &sorts1, const std::set< data::sort_expression_list > &sorts2)
Definition typecheck.h:41
std::string pp(const tau &x, bool precedence_aware=true)
Definition process.cpp:62
process::action_label_list normalize_sorts(const process::action_label_list &x, const data::sort_specification &sortspec)
Definition process.cpp:66
std::ostream & operator<<(std::ostream &out, const sum &x)
std::string pp(const if_then &x, bool precedence_aware=true)
Definition process.cpp:46
std::set< data::sort_expression > find_sort_expressions(const process::process_equation_vector &x)
Definition process.cpp:73
void make_merge(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(rename_expression &t1, rename_expression &t2) noexcept
\brief swap overload
std::string pp(const stochastic_operator &x, bool precedence_aware=true)
Definition process.cpp:59
void swap(merge &t1, merge &t2) noexcept
\brief swap overload
void make_at(atermpp::aterm &t, const ARGUMENTS &... args)
process_expression typecheck_process_expression(const process_expression &x, const VariableContainer &variables=VariableContainer(), const data::data_specification &dataspec=data::data_specification(), const ActionLabelContainer &action_labels=ActionLabelContainer(), const ProcessIdentifierContainer &process_identifiers=ProcessIdentifierContainer(), const process_identifier *current_equation=nullptr)
Typecheck a process expression.
Definition typecheck.h:748
void normalize_sorts(process::process_specification &x, const data::sort_specification &)
Definition process.cpp:68
process::action_label_list parse_action_declaration(const std::string &text, const data::data_specification &data_spec)
Parses an action declaration from a string.
Definition process.cpp:110
process_expression parse_process_expression(const std::string &text, const VariableContainer &variables=VariableContainer(), const data::data_specification &dataspec=data::data_specification(), const ActionLabelContainer &action_labels=std::vector< action_label >(), const ProcessIdentifierContainer &process_identifiers=ProcessIdentifierContainer(), const process_identifier *current_equation=nullptr)
Definition parse.h:129
bool is_process_expression(const atermpp::aterm &x)
bool is_process_instance_assignment(const atermpp::aterm &x)
void swap(left_merge &t1, left_merge &t2) noexcept
\brief swap overload
std::string pp(const process::communication_expression &x, bool arg0)
Definition process.cpp:43
std::ostream & operator<<(std::ostream &out, const untyped_process_assignment &x)
std::ostream & operator<<(std::ostream &out, const process_equation &x)
bool is_tau(const atermpp::aterm &x)
std::string pp(const process::rename_expression &x, bool arg0)
Definition process.cpp:57
std::ostream & operator<<(std::ostream &out, const stochastic_operator &x)
std::set< data::variable > find_free_variables(const T &x)
Definition find.h:181
std::ostream & operator<<(std::ostream &out, const left_merge &x)
std::string pp(const process_identifier_list &x)
void make_action(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const process_identifier &x)
bool is_seq(const atermpp::aterm &x)
void make_sync(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(allow &t1, allow &t2) noexcept
\brief swap overload
std::set< data::sort_expression > find_sort_expressions(const T &x)
Definition find.h:235
bool is_merge(const atermpp::aterm &x)
std::set< data::sort_expression > find_sort_expressions(const process::action_label_list &x)
Definition process.cpp:72
void make_if_then_else(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_action_label(const atermpp::aterm &x)
void swap(process_identifier &t1, process_identifier &t2) noexcept
\brief swap overload
void make_hide(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(hide &t1, hide &t2) noexcept
\brief swap overload
bool is_communication_expression(const atermpp::aterm &x)
std::set< core::identifier_string > find_action_names(const T &x)
Returns all action names that occur in an object.
Definition find.h:289
std::ostream & operator<<(std::ostream &out, const communication_expression &x)
bool is_allow(const atermpp::aterm &x)
std::string pp(const process_expression &x, bool precedence_aware=true)
Definition process.cpp:51
std::string pp(const merge &x, bool precedence_aware=true)
Definition process.cpp:49
bool is_process_specification(const atermpp::aterm &x)
Test for a process specification expression.
std::string pp(const rename &x, bool precedence_aware=true)
Definition process.cpp:56
void swap(action_label &t1, action_label &t2) noexcept
\brief swap overload
bool operator<(const action &a1, const action &a2)
std::string pp(const seq &x, bool precedence_aware=true)
Definition process.cpp:58
void make_if_then(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const choice &x)
void swap(seq &t1, seq &t2) noexcept
\brief swap overload
std::string pp(const sum &x, bool precedence_aware=true)
Definition process.cpp:60
std::set< process::action_label > find_action_labels(const T &x)
Returns all action labels that occur in an object.
Definition find.h:278
std::string pp(const process::process_specification &x, bool arg0)
Definition process.cpp:55
bool is_bounded_init(const atermpp::aterm &x)
bool is_delta(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const rename &x)
void typecheck_process_specification(process_specification &proc_spec)
Type check a parsed mCRL2 process specification. Throws an exception if something went wrong.
Definition typecheck.h:733
std::string pp(const process_expression_list &x, bool precedence_aware=true)
Definition process.cpp:30
void find_sort_expressions(const T &x, OutputIterator o)
Definition find.h:226
std::string pp(const bounded_init &x, bool precedence_aware=true)
Definition process.cpp:40
void swap(untyped_process_assignment &t1, untyped_process_assignment &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const process_instance_assignment &x)
std::ostream & operator<<(std::ostream &out, const process_instance &x)
std::set< data::sort_expression > find_sort_expressions(const process::process_expression &x)
Definition process.cpp:74
std::ostream & operator<<(std::ostream &out, const untyped_multi_action &x)
void make_block(atermpp::aterm &t, const ARGUMENTS &... args)
process::process_expression translate_user_notation(const process::process_expression &x)
Definition process.cpp:70
bool is_sum(const atermpp::aterm &x)
process_specification parse_process_specification(const std::string &spec_string)
Parses a process specification from a string.
Definition parse.h:55
std::string pp(const allow &x, bool precedence_aware=true)
Definition process.cpp:37
std::string pp(const multi_action_name_set &A)
Pretty print function for a set of multi action names.
bool is_process_identifier(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const at &x)
void swap(block &t1, block &t2) noexcept
\brief swap overload
bool is_block(const atermpp::aterm &x)
void translate_user_notation(process::process_specification &x)
Definition process.cpp:71
bool is_if_then_else(const atermpp::aterm &x)
void make_action_label(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const allow &x)
bool is_comm(const atermpp::aterm &x)
void find_function_symbols(const T &x, OutputIterator o)
Definition find.h:247
action normalize_sorts(const action &x, const data::sort_specification &sortspec)
Definition process.cpp:65
atermpp::aterm process_specification_to_aterm(const process_specification &spec)
Conversion to aterm.
std::set< data::variable > find_all_variables(const T &x)
Definition find.h:149
void alphabet_reduce(process_specification &procspec, std::size_t duplicate_equation_limit=(std::numeric_limits< size_t >::max)())
Applies alphabet reduction to a process specification.
Definition process.cpp:82
std::string pp(const process_instance &x, bool precedence_aware=true)
Definition process.cpp:53
std::ostream & operator<<(std::ostream &out, const if_then_else &x)
bool is_action(const atermpp::aterm &x)
std::string pp(const left_merge &x, bool precedence_aware=true)
Definition process.cpp:48
process_expression parse_process_expression(const std::string &text, const VariableContainer &variables, const process_specification &procspec)
Parses and type checks a process expression. N.B. Very inefficient!
Definition parse.h:116
void swap(stochastic_operator &t1, stochastic_operator &t2) noexcept
\brief swap overload
std::set< core::identifier_string > find_identifiers(const T &x)
Definition find.h:214
void swap(if_then_else &t1, if_then_else &t2) noexcept
\brief swap overload
bool is_left_merge(const atermpp::aterm &x)
std::string pp(const sync &x, bool precedence_aware=true)
Definition process.cpp:61
std::string pp(const action &x, bool precedence_aware=true)
Definition process.cpp:34
action typecheck_action(const core::identifier_string &name, const data::data_expression_list &parameters, data::data_type_checker &typechecker, const data::detail::variable_context &variable_context, const detail::action_context &action_context)
Definition typecheck.h:25
std::ostream & operator<<(std::ostream &out, const tau &x)
std::string pp(const process::untyped_multi_action &x, bool arg0)
Definition process.cpp:63
void swap(process_instance &t1, process_instance &t2) noexcept
\brief swap overload
void make_communication_expression(atermpp::aterm &t, const ARGUMENTS &... args)
void replace_sort_expressions(T &x, const Substitution &sigma, bool innermost)
Definition replace.h:23
std::string pp(const at &x, bool precedence_aware=true)
Definition process.cpp:38
void make_stochastic_operator(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_action_name_multiset(const atermpp::aterm &x)
process_expression parse_process_expression(const std::string &text, const std::string &data_decl, const std::string &proc_decl)
Parses and type checks a process expression.
Definition parse.h:88
void swap(communication_expression &t1, communication_expression &t2) noexcept
\brief swap overload
std::string pp(const comm &x, bool precedence_aware=true)
Definition process.cpp:42
void swap(process_expression &t1, process_expression &t2) noexcept
\brief swap overload
std::set< data::function_symbol > find_function_symbols(const T &x)
Definition find.h:256
bool is_untyped_multi_action(const atermpp::aterm &x)
void replace_variables_capture_avoiding(T &x, Substitution &sigma, data::set_identifier_generator &id_generator)
void make_process_instance(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const hide &x)
bool is_hide(const atermpp::aterm &x)
std::string pp(const untyped_process_assignment &x, bool precedence_aware=true)
Definition process.cpp:64
void swap(tau &t1, tau &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const delta &x)
bool is_if_then(const atermpp::aterm &x)
void find_free_variables(const T &x, OutputIterator o)
Definition find.h:161
std::ostream & operator<<(std::ostream &out, const comm &x)
void find_all_variables(const T &x, OutputIterator o)
Definition find.h:140
void make_untyped_process_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const action_name_multiset &x)
void make_process_instance_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_choice(const atermpp::aterm &x)
action translate_user_notation(const action &x)
Definition process.cpp:69
std::set< data::variable > find_free_variables(const action &x)
Definition process.cpp:77
std::string pp(const process_instance_assignment &x, bool precedence_aware=true)
Definition process.cpp:54
bool operator==(const process_specification &spec1, const process_specification &spec2)
Equality operator.
std::string pp(const process_expression_vector &x, bool precedence_aware=true)
Definition process.cpp:31
void make_comm(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const seq &x)
process_identifier parse_process_identifier(std::string text, const data::data_specification &dataspec)
Parses a process identifier.
Definition parse.h:63
bool is_stochastic_operator(const atermpp::aterm &x)
bool is_process_equation(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const rename_expression &x)
T replace_variables_capture_avoiding(const T &x, Substitution &sigma, data::set_identifier_generator &id_generator)
std::set< data::variable > find_free_variables_with_bound(const T &x, VariableContainer const &bound)
Definition find.h:193
std::string pp(const block &x, bool precedence_aware=true)
Definition process.cpp:39
void find_free_variables_with_bound(const T &x, OutputIterator o, const VariableContainer &bound)
Definition find.h:172
void make_untyped_multi_action(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(sum &t1, sum &t2) noexcept
\brief swap overload
void make_bounded_init(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const process_expression &x)
void swap(process_instance_assignment &t1, process_instance_assignment &t2) noexcept
\brief swap overload
bool is_rename_expression(const atermpp::aterm &x)
void swap(comm &t1, comm &t2) noexcept
\brief swap overload
std::set< data::variable > find_free_variables(const process::process_specification &x)
Definition process.cpp:78
void make_rename_expression(atermpp::aterm &t, const ARGUMENTS &... args)
const process_equation & find_equation(const std::vector< process_equation > &equations, const process_identifier &id)
Finds an equation that corresponds to a process identifier.
Definition find.h:301
void make_process_equation(atermpp::aterm &t, const ARGUMENTS &... args)
void make_action_name_multiset(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const action_label &x)
std::ostream & operator<<(std::ostream &out, const block &x)
bool operator!=(const process_specification &spec1, const process_specification &spec2)
Inequality operator.
std::ostream & operator<<(std::ostream &out, const action &x)
std::ostream & operator<<(std::ostream &out, const merge &x)
void swap(choice &t1, choice &t2) noexcept
\brief swap overload
std::string pp(const choice &x, bool precedence_aware=true)
Definition process.cpp:41
bool is_rename(const atermpp::aterm &x)
process_expression parse_process_expression(const std::string &text, const std::string &procspec_text)
Parses and type checks a process expression.
Definition parse.h:104
bool is_untyped_process_assignment(const atermpp::aterm &x)
void make_rename(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(process_equation &t1, process_equation &t2) noexcept
\brief swap overload
void make_seq(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sync(const atermpp::aterm &x)
std::string pp(const delta &x, bool precedence_aware=true)
Definition process.cpp:44
void make_sum(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const hide &x, bool precedence_aware=true)
Definition process.cpp:45
std::string pp(const if_then_else &x, bool precedence_aware=true)
Definition process.cpp:47
process_specification parse_process_specification(std::istream &in)
Parses a process specification from an input stream.
Definition parse.h:42
void swap(action_name_multiset &t1, action_name_multiset &t2) noexcept
\brief swap overload
bool equal_signatures(const action &a, const action &b)
Compares the signatures of two actions.
void swap(sync &t1, sync &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const if_then &x)
std::string pp(const process::action_label_list &x, bool arg0)
Definition process.cpp:26
void make_left_merge(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(atermpp::aterm &t1, atermpp::aterm &t2) noexcept
Swaps two term_applss.
Definition aterm.h:364
expression builder that visits all sub expressions
Definition builder.h:32
static const atermpp::aterm Delta
static const atermpp::aterm UntypedProcessAssignment
static const atermpp::aterm Distribution
static const atermpp::aterm Allow
static const atermpp::aterm RenameExpr
static const atermpp::aterm Tau
static const atermpp::aterm ActId
static const atermpp::aterm Hide
static const atermpp::aterm LinearProcessInit
static const atermpp::aterm Rename
static const atermpp::aterm Process
static const atermpp::aterm IfThen
static const atermpp::aterm StochasticOperator
static const atermpp::aterm BInit
static const atermpp::aterm Merge
static const atermpp::aterm Action
static const atermpp::aterm MultActName
static const atermpp::aterm AtTime
static const atermpp::aterm Choice
static const atermpp::aterm Comm
static const atermpp::aterm ProcessAssignment
static const atermpp::aterm Sync
static const atermpp::aterm LMerge
static const atermpp::aterm ProcVarId
static const atermpp::aterm ProcExpr
static const atermpp::aterm Seq
static const atermpp::aterm Sum
static const atermpp::aterm UntypedMultiAction
static const atermpp::aterm Block
static const atermpp::aterm ProcEqn
static const atermpp::aterm CommExpr
static const atermpp::aterm IfThenElse
expression traverser that visits all sub expressions
Definition traverser.h:29
Substitution that maps data variables to data expressions. The substitution is stored as an assignmen...
assignment_sequence_substitution(const assignment_list &assignments_)
const data_expression & operator()(const variable &v) const
void apply(T &result, const data_expression &x)
Definition rewrite.h:39
rewrite_data_expressions_with_substitution_builder(Rewriter R_, Substitution sigma_)
Definition rewrite.h:64
A unary function that can be used in combination with replace_data_expressions to eliminate real numb...
fourier_motzkin_sigma(const rewriter &rewr_)
data_expression apply(const abstraction &d, bool negate) const
data_expression operator()(const data_expression &d) const
static constexpr bool is_identity_substitution
Generic substitution function. The substitution is stored as a mapping of variables to expressions.
const AssociativeContainer & m_map
map_substitution(const AssociativeContainer &m)
static constexpr bool is_identity_substitution
expression_type operator()(const variable_type &v) const
\brief Traverser class
Definition traverser.h:596
void update(lps::action_summand &x)
Definition builder.h:222
void apply(T &result, const lps::stochastic_process_initializer &x)
Definition builder.h:308
void update(lps::linear_process &x)
Definition builder.h:245
void apply(T &result, const lps::multi_action &x)
Definition builder.h:205
void apply(T &result, const lps::stochastic_distribution &x)
Definition builder.h:264
void update(lps::specification &x)
Definition builder.h:253
void update(lps::deadlock &x)
Definition builder.h:195
void update(lps::stochastic_linear_process &x)
Definition builder.h:289
void apply(T &result, const lps::process_initializer &x)
Definition builder.h:238
void update(lps::stochastic_action_summand &x)
Definition builder.h:271
void update(lps::deadlock_summand &x)
Definition builder.h:212
void update(lps::stochastic_specification &x)
Definition builder.h:297
Maintains a multiset of bound data variables during traversal.
Definition add_binding.h:23
void enter(const stochastic_specification &x)
Definition add_binding.h:93
void leave(const stochastic_process_initializer &x)
void enter(const action_summand &x)
Definition add_binding.h:31
void leave(const stochastic_specification &x)
Definition add_binding.h:98
void leave(const deadlock_summand &x)
Definition add_binding.h:58
void leave(const linear_process &x)
Definition add_binding.h:68
void enter(const stochastic_linear_process &x)
Definition add_binding.h:73
void leave(const action_summand &x)
Definition add_binding.h:36
void leave(const stochastic_linear_process &x)
Definition add_binding.h:78
void enter(const specification &x)
Definition add_binding.h:83
void enter(const deadlock_summand &x)
Definition add_binding.h:53
void enter(const stochastic_action_summand &x)
Definition add_binding.h:41
void leave(const specification &x)
Definition add_binding.h:88
void enter(const linear_process &x)
Definition add_binding.h:63
void enter(const stochastic_process_initializer &x)
void leave(const stochastic_action_summand &x)
Definition add_binding.h:47
void apply(T &result, data::where_clause &x)
void apply(const data::where_clause &x)
void update(lps::deadlock &x)
Definition builder.h:32
void update(lps::stochastic_specification &x)
Definition builder.h:153
void update(lps::specification &x)
Definition builder.h:99
void apply(T &result, const lps::process_initializer &x)
Definition builder.h:81
void apply(T &result, const lps::stochastic_process_initializer &x)
Definition builder.h:168
void update(lps::action_summand &x)
Definition builder.h:62
void apply(T &result, const lps::stochastic_distribution &x)
Definition builder.h:114
void update(lps::stochastic_linear_process &x)
Definition builder.h:142
void update(lps::stochastic_action_summand &x)
Definition builder.h:121
void apply(T &result, const lps::multi_action &x)
Definition builder.h:42
void update(lps::linear_process &x)
Definition builder.h:88
void update(lps::deadlock_summand &x)
Definition builder.h:49
void apply(const lps::action_summand &x)
Definition traverser.h:547
void apply(const lps::multi_action &x)
Definition traverser.h:540
void apply(const lps::specification &x)
Definition traverser.h:561
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:569
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:576
void apply(const lps::stochastic_specification &x)
Definition traverser.h:583
void apply(const lps::linear_process &x)
Definition traverser.h:554
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:240
void apply(const lps::multi_action &x)
Definition traverser.h:172
void apply(const lps::deadlock &x)
Definition traverser.h:162
void apply(const lps::stochastic_specification &x)
Definition traverser.h:248
void apply(const lps::specification &x)
Definition traverser.h:215
void apply(const lps::deadlock_summand &x)
Definition traverser.h:183
void apply(const lps::action_summand &x)
Definition traverser.h:191
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:230
void apply(const lps::stochastic_distribution &x)
Definition traverser.h:223
void apply(const lps::linear_process &x)
Definition traverser.h:207
void apply(const lps::stochastic_process_initializer &x)
Definition traverser.h:256
void apply(const lps::process_initializer &x)
Definition traverser.h:200
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:495
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:484
void apply(const lps::action_summand &x)
Definition traverser.h:440
void apply(const lps::specification &x)
Definition traverser.h:466
void apply(const lps::process_initializer &x)
Definition traverser.h:450
void apply(const lps::stochastic_distribution &x)
Definition traverser.h:476
void apply(const lps::linear_process &x)
Definition traverser.h:457
void apply(const lps::deadlock_summand &x)
Definition traverser.h:431
void apply(const lps::stochastic_process_initializer &x)
Definition traverser.h:514
void apply(const lps::stochastic_specification &x)
Definition traverser.h:504
void apply(const lps::multi_action &x)
Definition traverser.h:420
void apply(const lps::deadlock &x)
Definition traverser.h:410
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:106
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:117
void apply(const lps::stochastic_specification &x)
Definition traverser.h:126
void apply(const lps::stochastic_process_initializer &x)
Definition traverser.h:136
void apply(const lps::stochastic_distribution &x)
Definition traverser.h:98
void apply(const lps::multi_action &x)
Definition traverser.h:42
void apply(const lps::process_initializer &x)
Definition traverser.h:72
void apply(const lps::action_summand &x)
Definition traverser.h:62
void apply(const lps::specification &x)
Definition traverser.h:88
void apply(const lps::deadlock_summand &x)
Definition traverser.h:53
void apply(const lps::deadlock &x)
Definition traverser.h:32
void apply(const lps::linear_process &x)
Definition traverser.h:79
void apply(const lps::linear_process &x)
Definition traverser.h:329
void apply(const lps::specification &x)
Definition traverser.h:338
void apply(const lps::stochastic_process_initializer &x)
Definition traverser.h:384
void apply(const lps::deadlock &x)
Definition traverser.h:282
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:366
void apply(const lps::multi_action &x)
Definition traverser.h:292
void apply(const lps::action_summand &x)
Definition traverser.h:312
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:355
void apply(const lps::deadlock_summand &x)
Definition traverser.h:303
void apply(const lps::stochastic_distribution &x)
Definition traverser.h:347
void apply(const lps::stochastic_specification &x)
Definition traverser.h:375
void apply(const lps::process_initializer &x)
Definition traverser.h:322
void update(lps::action_summand &x)
Definition builder.h:364
void update(lps::deadlock &x)
Definition builder.h:334
void apply(T &result, const lps::multi_action &x)
Definition builder.h:344
void apply(T &result, const lps::stochastic_process_initializer &x)
Definition builder.h:464
void update(lps::specification &x)
Definition builder.h:401
void apply(T &result, const lps::stochastic_distribution &x)
Definition builder.h:413
void update(lps::linear_process &x)
Definition builder.h:390
void update(lps::stochastic_action_summand &x)
Definition builder.h:420
void update(lps::stochastic_specification &x)
Definition builder.h:452
void apply(T &result, const lps::process_initializer &x)
Definition builder.h:383
void update(lps::stochastic_linear_process &x)
Definition builder.h:441
void update(lps::deadlock_summand &x)
Definition builder.h:351
void apply(T &result, const stochastic_distribution &x, data::data_expression_list &pars)
In the code below, it is essential that the assignments are also updated. They are passed by referenc...
void apply(T &result, const stochastic_distribution &x, data::assignment_list &assignments)
In the code below, it is essential that the assignments are also updated. They are passed by referenc...
void do_action_summand(ActionSummand &x, const data::variable_list &v)
add_capture_avoiding_replacement(data::detail::capture_avoiding_substitution_updater< Substitution > &sigma)
Function object that checks if a sort is a singleton sort. Note that it is an approximation,...
Definition remove.h:36
is_singleton_sort(const data::data_specification &data_spec)
Definition remove.h:39
bool operator()(const data::sort_expression &s) const
Definition remove.h:43
const data::data_specification & m_data_spec
Definition remove.h:37
Function object that checks if a summand has a false condition.
Definition remove.h:25
bool operator()(const summand_base &s) const
Definition remove.h:26
Traverser for removing parameters from LPS data types. These parameters can be either process paramet...
Definition remove.h:58
void apply(atermpp::term_list< T > &result, const data::assignment_list &x)
Removes parameters from a list of assignments. Assignments to removed parameters are removed.
Definition remove.h:101
void apply(T &result, const stochastic_process_initializer &x)
Definition remove.h:156
void apply(T &result, const process_initializer &x)
Definition remove.h:149
void update(std::set< data::variable > &x)
Removes parameters from a set container.
Definition remove.h:73
const std::set< data::variable > & to_be_removed
Definition remove.h:65
void apply(atermpp::term_list< T > &result, const data::variable_list &x)
Removes parameters from a list of variables.
Definition remove.h:83
void update(linear_process &x)
Removes parameters from a linear_process.
Definition remove.h:111
data::data_expression_list remove_expressions(const data::data_expression_list &e)
Removes expressions from e at the corresponding positions of process_parameters.
Definition remove.h:130
void update(stochastic_specification &x)
Removes parameters from a linear process specification.
Definition remove.h:175
void update(specification &x)
Removes parameters from a linear process specification.
Definition remove.h:166
remove_parameters_builder(const std::set< data::variable > &to_be_removed_)
Definition remove.h:68
void update(stochastic_linear_process &x)
Removes parameters from a linear_process.
Definition remove.h:121
Data structure to store the statistics about summands in a linear process.
Options for linearisation.
Definition linearise.h:25
t_lin_method lin_method
Definition linearise.h:26
mcrl2::data::rewriter::strategy rewrite_strategy
Definition linearise.h:41
\brief Builder class
Definition builder.h:476
\brief Traverser class
Definition traverser.h:397
bool operator()(const core::identifier_string &s1, const core::identifier_string &s2) const
void apply(T &result, const process::process_equation &x)
Definition builder.h:405
void apply(T &result, const process::rename &x)
Definition builder.h:487
void apply(T &result, const process::left_merge &x)
Definition builder.h:567
void apply(T &result, const process::bounded_init &x)
Definition builder.h:551
void apply(T &result, const process::process_expression &x)
Definition builder.h:599
void apply(T &result, const process::block &x)
Definition builder.h:471
void apply(T &result, const process::merge &x)
Definition builder.h:559
void apply(T &result, const process::sync &x)
Definition builder.h:511
void apply(T &result, const process::choice &x)
Definition builder.h:575
void apply(T &result, const process::if_then &x)
Definition builder.h:535
void apply(T &result, const process::action &x)
Definition builder.h:421
void apply(T &result, const process::delta &x)
Definition builder.h:445
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:437
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:591
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:583
void update(process::process_specification &x)
Definition builder.h:394
void apply(T &result, const process::allow &x)
Definition builder.h:503
void apply(T &result, const process::at &x)
Definition builder.h:519
void apply(T &result, const process::sum &x)
Definition builder.h:463
void apply(T &result, const process::seq &x)
Definition builder.h:527
void apply(T &result, const process::tau &x)
Definition builder.h:454
void apply(T &result, const process::comm &x)
Definition builder.h:495
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:413
void apply(T &result, const process::hide &x)
Definition builder.h:479
void apply(T &result, const process::if_then_else &x)
Definition builder.h:543
void apply(T &result, const process::process_instance &x)
Definition builder.h:429
Maintains a multiset of bound data variables during traversal.
Definition add_binding.h:24
void enter(const process::stochastic_operator &x)
Definition add_binding.h:43
void leave(const process::stochastic_operator &x)
Definition add_binding.h:48
void enter(const process::sum &x)
Definition add_binding.h:33
void leave(const process::sum &x)
Definition add_binding.h:38
void apply(const process::process_instance_assignment &x)
Definition add_binding.h:59
void apply(T &result, const data::where_clause &x)
void apply(const data::where_clause &x)
Definition add_binding.h:91
void apply(T &result, const process::sync &x)
Definition builder.h:1160
void apply(T &result, const process::rename &x)
Definition builder.h:1136
void apply(T &result, const process::if_then_else &x)
Definition builder.h:1192
void apply(T &result, const process::process_equation &x)
Definition builder.h:1059
void apply(T &result, const process::bounded_init &x)
Definition builder.h:1200
void apply(T &result, const process::at &x)
Definition builder.h:1168
void apply(T &result, const process::if_then &x)
Definition builder.h:1184
void apply(T &result, const process::choice &x)
Definition builder.h:1224
void apply(T &result, const process::tau &x)
Definition builder.h:1103
void apply(T &result, const process::merge &x)
Definition builder.h:1208
void apply(T &result, const process::left_merge &x)
Definition builder.h:1216
void apply(T &result, const process::sum &x)
Definition builder.h:1112
void apply(T &result, const process::seq &x)
Definition builder.h:1176
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:1240
void apply(T &result, const process::block &x)
Definition builder.h:1120
void apply(T &result, const process::allow &x)
Definition builder.h:1152
void apply(T &result, const process::action &x)
Definition builder.h:1067
void apply(T &result, const process::hide &x)
Definition builder.h:1128
void apply(T &result, const process::process_expression &x)
Definition builder.h:1249
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:1085
void apply(T &result, const process::comm &x)
Definition builder.h:1144
void apply(T &result, const process::delta &x)
Definition builder.h:1094
void apply(T &result, const process::process_instance &x)
Definition builder.h:1076
void update(process::process_specification &x)
Definition builder.h:1048
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:1232
void apply(T &result, const process::process_expression &x)
Definition builder.h:1574
void apply(T &result, const process::process_identifier &x)
Definition builder.h:1377
void apply(T &result, const process::process_instance &x)
Definition builder.h:1403
void apply(T &result, const process::delta &x)
Definition builder.h:1419
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:1411
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:1557
void apply(T &result, const process::choice &x)
Definition builder.h:1549
void apply(T &result, const process::at &x)
Definition builder.h:1493
void apply(T &result, const process::merge &x)
Definition builder.h:1533
void apply(T &result, const process::if_then &x)
Definition builder.h:1509
void apply(T &result, const process::comm &x)
Definition builder.h:1469
void apply(T &result, const process::process_equation &x)
Definition builder.h:1386
void apply(T &result, const process::left_merge &x)
Definition builder.h:1541
void apply(T &result, const process::sync &x)
Definition builder.h:1485
void apply(T &result, const process::tau &x)
Definition builder.h:1428
void update(process::process_specification &x)
Definition builder.h:1366
void apply(T &result, const process::hide &x)
Definition builder.h:1453
void apply(T &result, const process::if_then_else &x)
Definition builder.h:1517
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:1565
void apply(T &result, const process::rename &x)
Definition builder.h:1461
void apply(T &result, const process::seq &x)
Definition builder.h:1501
void apply(T &result, const process::block &x)
Definition builder.h:1445
void apply(T &result, const process::sum &x)
Definition builder.h:1437
void apply(T &result, const process::bounded_init &x)
Definition builder.h:1525
void apply(T &result, const process::action &x)
Definition builder.h:1394
void apply(T &result, const process::allow &x)
Definition builder.h:1477
void update(process::process_specification &x)
Definition builder.h:59
void apply(T &result, const process::sync &x)
Definition builder.h:188
void apply(T &result, const process::choice &x)
Definition builder.h:252
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:114
void apply(T &result, const process::process_instance &x)
Definition builder.h:106
void apply(T &result, const process::merge &x)
Definition builder.h:236
void apply(T &result, const process::seq &x)
Definition builder.h:204
void apply(T &result, const process::if_then &x)
Definition builder.h:212
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:90
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:260
void apply(T &result, const process::action &x)
Definition builder.h:98
void apply(T &result, const process::delta &x)
Definition builder.h:122
void apply(T &result, const process::if_then_else &x)
Definition builder.h:220
void apply(T &result, const process::left_merge &x)
Definition builder.h:244
void apply(T &result, const process::process_equation &x)
Definition builder.h:82
void apply(T &result, const process::hide &x)
Definition builder.h:156
void apply(T &result, const process::allow &x)
Definition builder.h:180
void apply(T &result, const process::rename &x)
Definition builder.h:164
void apply(T &result, const process::comm &x)
Definition builder.h:172
void apply(T &result, const process::sum &x)
Definition builder.h:140
void apply(T &result, const process::bounded_init &x)
Definition builder.h:228
void apply(T &result, const process::action_label &x)
Definition builder.h:52
void apply(T &result, const process::block &x)
Definition builder.h:148
void apply(T &result, const process::at &x)
Definition builder.h:196
void apply(T &result, const process::tau &x)
Definition builder.h:131
void apply(T &result, const process::process_identifier &x)
Definition builder.h:74
void apply(T &result, const process::process_expression &x)
Definition builder.h:276
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:268
void apply(const process::sync &x)
Definition traverser.h:1749
void apply(const process::if_then_else &x)
Definition traverser.h:1779
void apply(const process::block &x)
Definition traverser.h:1714
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:1826
void apply(const process::bounded_init &x)
Definition traverser.h:1787
void apply(const process::sum &x)
Definition traverser.h:1707
void apply(const process::hide &x)
Definition traverser.h:1721
void apply(const process::process_specification &x)
Definition traverser.h:1656
void apply(const process::action &x)
Definition traverser.h:1672
void apply(const process::left_merge &x)
Definition traverser.h:1803
void apply(const process::process_expression &x)
Definition traverser.h:1833
void apply(const process::comm &x)
Definition traverser.h:1735
void apply(const process::rename &x)
Definition traverser.h:1728
void apply(const process::tau &x)
Definition traverser.h:1700
void apply(const process::process_instance_assignment &x)
Definition traverser.h:1686
void apply(const process::action_label &x)
Definition traverser.h:1649
void apply(const process::stochastic_operator &x)
Definition traverser.h:1819
void apply(const process::choice &x)
Definition traverser.h:1811
void apply(const process::process_equation &x)
Definition traverser.h:1665
void apply(const process::if_then &x)
Definition traverser.h:1772
void apply(const process::process_instance &x)
Definition traverser.h:1679
void apply(const process::delta &x)
Definition traverser.h:1693
void apply(const process::merge &x)
Definition traverser.h:1795
void apply(const process::allow &x)
Definition traverser.h:1742
void apply(const process::seq &x)
Definition traverser.h:1764
void apply(const process::left_merge &x)
Definition traverser.h:536
void apply(const process::choice &x)
Definition traverser.h:544
void apply(const process::stochastic_operator &x)
Definition traverser.h:552
void apply(const process::action &x)
Definition traverser.h:402
void apply(const process::allow &x)
Definition traverser.h:472
void apply(const process::if_then_else &x)
Definition traverser.h:511
void apply(const process::process_specification &x)
Definition traverser.h:380
void apply(const process::bounded_init &x)
Definition traverser.h:520
void apply(const process::untyped_multi_action &x)
Definition traverser.h:395
void apply(const process::process_instance &x)
Definition traverser.h:409
void apply(const process::delta &x)
Definition traverser.h:423
void apply(const process::merge &x)
Definition traverser.h:528
void apply(const process::process_expression &x)
Definition traverser.h:567
void apply(const process::block &x)
Definition traverser.h:444
void apply(const process::process_equation &x)
Definition traverser.h:388
void apply(const process::if_then &x)
Definition traverser.h:503
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:560
void apply(const process::process_instance_assignment &x)
Definition traverser.h:416
void apply(const process::rename &x)
Definition traverser.h:458
void apply(const process::process_expression &x)
Definition traverser.h:1533
void apply(const process::process_specification &x)
Definition traverser.h:1300
void apply(const process::bounded_init &x)
Definition traverser.h:1484
void apply(const process::untyped_multi_action &x)
Definition traverser.h:1350
void apply(const process::process_identifier &x)
Definition traverser.h:1310
void apply(const process::communication_expression &x)
Definition traverser.h:1335
void apply(const process::process_equation &x)
Definition traverser.h:1318
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:1525
void apply(const process::if_then_else &x)
Definition traverser.h:1475
void apply(const process::rename_expression &x)
Definition traverser.h:1327
void apply(const process::action_name_multiset &x)
Definition traverser.h:1343
void apply(const process::left_merge &x)
Definition traverser.h:1500
void apply(const process::stochastic_operator &x)
Definition traverser.h:1516
void apply(const process::if_then &x)
Definition traverser.h:1467
void apply(const process::process_instance &x)
Definition traverser.h:1365
void apply(const process::process_instance_assignment &x)
Definition traverser.h:1373
void apply(const process::action_label &x)
Definition traverser.h:1292
void apply(const process::process_instance &x)
Definition traverser.h:705
void apply(const process::process_expression &x)
Definition traverser.h:859
void apply(const process::left_merge &x)
Definition traverser.h:829
void apply(const process::stochastic_operator &x)
Definition traverser.h:845
void apply(const process::if_then_else &x)
Definition traverser.h:805
void apply(const process::if_then &x)
Definition traverser.h:798
void apply(const process::process_instance_assignment &x)
Definition traverser.h:712
void apply(const process::bounded_init &x)
Definition traverser.h:813
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:852
void apply(const process::process_specification &x)
Definition traverser.h:683
void apply(const process::process_equation &x)
Definition traverser.h:691
void apply(const process::process_instance &x)
Definition traverser.h:102
void apply(const process::process_equation &x)
Definition traverser.h:78
void apply(const process::process_specification &x)
Definition traverser.h:61
void apply(const process::block &x)
Definition traverser.h:140
void apply(const process::process_identifier &x)
Definition traverser.h:71
void apply(const process::rename &x)
Definition traverser.h:154
void apply(const process::allow &x)
Definition traverser.h:168
void apply(const process::delta &x)
Definition traverser.h:118
void apply(const process::merge &x)
Definition traverser.h:224
void apply(const process::action &x)
Definition traverser.h:94
void apply(const process::action_label &x)
Definition traverser.h:54
void apply(const process::process_instance_assignment &x)
Definition traverser.h:110
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:257
void apply(const process::bounded_init &x)
Definition traverser.h:216
void apply(const process::choice &x)
Definition traverser.h:240
void apply(const process::if_then &x)
Definition traverser.h:199
void apply(const process::stochastic_operator &x)
Definition traverser.h:248
void apply(const process::process_expression &x)
Definition traverser.h:264
void apply(const process::left_merge &x)
Definition traverser.h:232
void apply(const process::untyped_multi_action &x)
Definition traverser.h:87
void apply(const process::if_then_else &x)
Definition traverser.h:207
void apply(const process::sync &x)
Definition traverser.h:1087
void apply(const process::process_equation &x)
Definition traverser.h:991
void apply(const process::comm &x)
Definition traverser.h:1073
void apply(const process::bounded_init &x)
Definition traverser.h:1128
void apply(const process::if_then_else &x)
Definition traverser.h:1119
void apply(const process::choice &x)
Definition traverser.h:1152
void apply(const process::tau &x)
Definition traverser.h:1037
void apply(const process::allow &x)
Definition traverser.h:1080
void apply(const process::process_instance &x)
Definition traverser.h:1014
void apply(const process::merge &x)
Definition traverser.h:1136
void apply(const process::process_specification &x)
Definition traverser.h:975
void apply(const process::process_identifier &x)
Definition traverser.h:984
void apply(const process::at &x)
Definition traverser.h:1095
void apply(const process::sum &x)
Definition traverser.h:1044
void apply(const process::untyped_multi_action &x)
Definition traverser.h:1000
void apply(const process::left_merge &x)
Definition traverser.h:1144
void apply(const process::stochastic_operator &x)
Definition traverser.h:1160
void apply(const process::process_instance_assignment &x)
Definition traverser.h:1022
void apply(const process::if_then &x)
Definition traverser.h:1111
void apply(const process::hide &x)
Definition traverser.h:1059
void apply(const process::seq &x)
Definition traverser.h:1103
void apply(const process::process_expression &x)
Definition traverser.h:1176
void apply(const process::rename &x)
Definition traverser.h:1066
void apply(const process::block &x)
Definition traverser.h:1052
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:1169
void apply(const process::delta &x)
Definition traverser.h:1030
void apply(const process::action &x)
Definition traverser.h:1007
void apply(T &result, const process::process_instance &x)
Definition builder.h:760
void apply(T &result, const process::choice &x)
Definition builder.h:906
void apply(T &result, const process::sync &x)
Definition builder.h:842
void apply(T &result, const process::sum &x)
Definition builder.h:794
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:914
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:922
void apply(T &result, const process::allow &x)
Definition builder.h:834
void apply(T &result, const process::bounded_init &x)
Definition builder.h:882
void apply(T &result, const process::comm &x)
Definition builder.h:826
void apply(T &result, const process::block &x)
Definition builder.h:802
void apply(T &result, const process::tau &x)
Definition builder.h:785
void apply(T &result, const process::action &x)
Definition builder.h:752
void apply(T &result, const process::left_merge &x)
Definition builder.h:898
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:744
void apply(T &result, const process::merge &x)
Definition builder.h:890
void apply(T &result, const process::seq &x)
Definition builder.h:858
void apply(T &result, const process::delta &x)
Definition builder.h:776
void apply(T &result, const process::hide &x)
Definition builder.h:810
void apply(T &result, const process::at &x)
Definition builder.h:850
void apply(T &result, const process::process_identifier &x)
Definition builder.h:728
void apply(T &result, const process::if_then_else &x)
Definition builder.h:874
void update(process::process_specification &x)
Definition builder.h:716
void apply(T &result, const process::process_equation &x)
Definition builder.h:736
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:768
void apply(T &result, const process::rename &x)
Definition builder.h:818
void apply(T &result, const process::if_then &x)
Definition builder.h:866
void apply(T &result, const process::process_expression &x)
Definition builder.h:930
void apply(T &result, const process::process_instance_assignment &x)
void apply(T &result, const stochastic_operator &x)
add_capture_avoiding_replacement(data::detail::capture_avoiding_substitution_updater< Substitution > &sigma)
data::assignment_list::const_iterator find_variable(const data::assignment_list &a, const data::variable &v) const
void check_not_empty(const Container &c, const std::string &msg, const process_expression &x)
Definition typecheck.h:171
void check_action_declared(const core::identifier_string &a, const process_expression &x)
Definition typecheck.h:149
action typecheck_action(const core::identifier_string &name, const data::data_expression_list &parameters)
Definition typecheck.h:227
typecheck_builder(data::data_type_checker &data_typechecker, const data::detail::variable_context &variable_context, const detail::process_context &process_context, const detail::action_context &action_context, const process_identifier *current_equation=nullptr)
Definition typecheck.h:131
void apply(T &result, const untyped_process_assignment &x)
Definition typecheck.h:276
const detail::process_context & m_process_context
Definition typecheck.h:127
void apply(T &result, const process::stochastic_operator &x)
Definition typecheck.h:601
void apply(T &result, const data::untyped_data_parameter &x)
Definition typecheck.h:354
data::data_type_checker & m_data_type_checker
Definition typecheck.h:125
void apply(T &result, const process::hide &x)
Definition typecheck.h:379
process_instance typecheck_process_instance(const core::identifier_string &name, const data::data_expression_list &parameters)
Definition typecheck.h:232
void apply(T &result, const process::if_then &x)
Definition typecheck.h:566
void check_duplicates_in_assignments(const data::untyped_identifier_assignment_list &assignments)
Definition typecheck.h:203
void check_rename_common_type(const core::identifier_string &a, const core::identifier_string &b, const process_expression &x)
Definition typecheck.h:195
bool is_action_name(const core::identifier_string &name)
Definition typecheck.h:217
void check_actions_declared(const core::identifier_string_list &act_list, const process_expression &x)
Definition typecheck.h:157
bool is_process_name(const core::identifier_string &name)
Definition typecheck.h:222
void check_not_equal(const T &first, const T &second, const std::string &msg, const process_expression &x)
Definition typecheck.h:180
void apply(T &result, const process::sum &x)
Definition typecheck.h:583
void check_assignments(const process_identifier &P, const process_identifier &Q, const std::vector< data::assignment > &assignments, const untyped_process_assignment &x) const
Definition typecheck.h:255
void apply(T &result, const process::allow &x)
Definition typecheck.h:532
data::detail::variable_context m_variable_context
Definition typecheck.h:126
const process_identifier * m_current_equation
Definition typecheck.h:129
void apply(T &result, const process::block &x)
Definition typecheck.h:389
static bool has_empty_intersection(const std::set< data::sort_expression_list > &s1, const std::set< data::sort_expression_list > &s2)
Definition typecheck.h:188
void apply(T &result, const process::action &x)
Definition typecheck.h:373
void apply(T &result, const process::rename &x)
Definition typecheck.h:397
std::string print_untyped_process_assignment(const untyped_process_assignment &x) const
Definition typecheck.h:241
std::set< data::sort_expression_list > action_sorts(const core::identifier_string &name)
Definition typecheck.h:144
void apply(T &result, const process::if_then_else &x)
Definition typecheck.h:573
void apply(T &result, const process::at &x)
Definition typecheck.h:559
void apply(T &result, const process::comm &x)
Definition typecheck.h:418
const detail::action_context & m_action_context
Definition typecheck.h:128
Base builder class for processes.
Definition builder.h:25
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:30
Base class for action_formula_traverser.
Definition traverser.h:31
void apply(const data::untyped_data_parameter &x)
Definition traverser.h:37
\brief Builder class
Definition builder.h:1033
make_substitution(const std::map< process_identifier, process_identifier > &map)
process_identifier operator()(const process_identifier &id) const
const std::map< process_identifier, process_identifier > & m_map
std::size_t operator()(const mcrl2::lps::multi_action &ma) const
std::size_t operator()(const mcrl2::process::action &t) const