mCRL2
Loading...
Searching...
No Matches
linearise_communication.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_communication.h
10/// \brief Apply the rename operator to action summands.
11
12#ifndef MCRL2_LPS_LINEARISE_COMMUNICATION_H
13#define MCRL2_LPS_LINEARISE_COMMUNICATION_H
14
15#include "mcrl2/atermpp/aterm_list.h"
16#include "mcrl2/core/detail/print_utility.h"
17#include "mcrl2/lps/linearise_allow_block.h"
18#include "mcrl2/lps/linearise_utility.h"
19#include "mcrl2/lps/stochastic_action_summand.h"
20#include "mcrl2/lps/sumelm.h"
21#include "mcrl2/lps/detail/configuration.h"
22#include "mcrl2/process/process_expression.h"
23
24#include <optional>
25
26namespace mcrl2
27{
28
29namespace lps
30{
31
32namespace detail
33{
34
35/// Get a sorted list of action names that appear in any of the elements of allowlist
36/// The result does not contain duplicates.
37/// We use this to remove possible communication results that are not relevant because they
38/// are guaranteed to be removed from the result after the fact.
40{
41 std::vector<core::identifier_string> result;
42 for (const process::action_name_multiset& l : allowlist)
43 {
44 const core::identifier_string_list& names = l.names();
45 result.insert(result.end(), names.begin(), names.end());
46 }
47 std::sort(result.begin(), result.end(), action_name_compare());
48 const auto it = std::unique(result.begin(), result.end());
49 result.erase(it, result.end());
50
51 return result;
52}
53
54/// a tuple_list contains pairs of actions (multi-action) and the condition under which this action
55/// can occur.
57{
60
61 std::size_t size() const
62 {
63 assert(actions.size() == conditions.size());
64 return actions.size();
65 }
66
67 tuple_list() = default;
68
69 tuple_list(const std::vector<process::action_list>& actions_, const std::vector<data::data_expression>& conditions_)
72 {}
73
74 tuple_list(std::vector<process::action_list>&& actions_, std::vector<data::data_expression>&& conditions_)
77 {}
78};
79
80/// Extends the list S to S ++ [(a \oplus alpha, c \land c') | (alpha, c') \in T]
81///
82/// Note that by using move semantics for L, we force the caller to transfer ownership of L to this function,
83/// and make it explicit that L should not be used by the caller afterwards.
84/// If firstaction == action(), it is not added to the multiactions in L', but the conditions will be strengthened.
85/// \pre condition != sort_bool::false_()
86inline void addActionCondition(const process::action& a, const data::data_expression& c, tuple_list&& L, tuple_list& S)
87{
88 assert(c != data::sort_bool::false_()); // It makes no sense to add an action with condition false, as it cannot
89 // happen anyhow.
90
92 {
93 S.actions.insert(S.actions.end(),
94 std::make_move_iterator(L.actions.begin()),
95 std::make_move_iterator(L.actions.end()));
96 }
97 else
98 {
99 for (process::action_list& m : L.actions)
100 {
101 m = insert(a, m);
102 S.actions.emplace_back(std::move(m));
103 }
104 }
105
107 {
108 S.conditions.insert(S.conditions.end(),
109 std::make_move_iterator(L.conditions.begin()),
110 std::make_move_iterator(L.conditions.end()));
111 }
112 else
113 {
114 // Strengthen the conditions in L with condition and append to S.
115 for (const data::data_expression& x : L.conditions)
116 {
117 S.conditions.emplace_back(data::lazy::and_(x, c));
118 }
119 }
120}
121
122/// Data structure to store the communication function more efficiently.
124{
125protected:
126 /// Left-hand sides of communication expressions
128
129 /// Right-hand sides of communication expressions
131
132 /// Temporary data using in determining whether communication is allowed.
133 /// See usages of the data structure below.
136
138 {
139 for (std::size_t i = 0; i < size(); ++i)
140 {
141 m_lhs_iters[i] = m_lhs[i].begin();
142 m_match_failed[i] = false;
143 }
144 }
145
146 /// Check if m is contained in a lhs in the communication entry. (in fact, it must be a prefix).
147 /// Returns true if this is the case, false otherwise.
148 /// Postcondition: for every i such that m is not contained in lhs[i], match_failed[i] is true.
149 /// NB: resets temporary data before performing computations.
150 bool match_multiaction(const process::action_list& multi_action)
151 {
152 assert(std::is_sorted(multi_action.begin(), multi_action.end(), action_compare()));
153
155
156 // m must match a lhs; check every action
157 for (const process::action& action : multi_action)
158 {
159 // check every lhs for actionname
160 bool comm_ok = false;
161 for (std::size_t i = 0; i < size(); ++i)
162 {
163 if (m_match_failed[i]) // lhs i does not match
164 {
165 continue;
166 }
167 if (m_lhs_iters[i] == m_lhs[i].end()) // lhs cannot match actionname
168 {
169 m_match_failed[i] = true;
170 continue;
171 }
172 if (action.label().name() != *m_lhs_iters[i])
173 {
174 // no match
175 m_match_failed[i] = true;
176 }
177 else
178 {
179 // possible match; on to next action
180 ++m_lhs_iters[i];
181 comm_ok = true;
182 }
183 }
184
185 if (!comm_ok) // no (possibly) matching lhs
186 {
187 return false;
188 }
189 }
190
191 // There must be an lhs that contains m.
192 return true;
193 }
194
195 // Initialization of lhs, defined as static function so it can be used in the constructor.
196 // Allows lhs to be defined as const.
199 {
200 std::vector<core::identifier_string_list> result;
201 for (const process::communication_expression& l : communications)
202 {
203 const core::identifier_string_list& names = l.action_name().names();
204 assert(std::is_sorted(names.begin(), names.end(), action_name_compare()));
205 result.emplace_back(names.begin(), names.end());
206 }
207 return result;
208 }
209
210 // Initialization of rhs, defined as static function so it can be used in the constructor.
211 // Allows rhs to be defined as const.
213 {
214 std::vector<core::identifier_string> result;
215 for (const process::communication_expression& l : communications)
216 {
217 result.push_back(l.name());
218 }
219 return result;
220 }
221
222public:
223 // comm_entries are not copyable.
224 comm_entry(const comm_entry&) = delete;
225 comm_entry& operator=(const comm_entry&) = delete;
226
227 explicit comm_entry(const process::communication_expression_list& communications)
232 {}
233
234 ~comm_entry() = default;
235
236 std::size_t size() const
237 {
238 assert(m_lhs.size() == m_rhs.size());
239 assert(m_rhs.size() == m_lhs_iters.size());
240 assert(m_lhs_iters.size() == m_match_failed.size());
241 return m_lhs.size();
242 }
243
244 /// Determine if there exists a communication expression a1|...|an -> b in comm_table
245 /// such that m' = a1|...|an , where m' is the multiset of actionnames for multiaction m.
246 /// That is, the actions in m consting of actions and data occur in C, such tat a communication
247 /// can take place.
248 ///
249 /// if \exists_{(b,c) \in C} b = \mu(m), return c, otherwise return action_label()
251 {
252 assert(std::is_sorted(m.begin(), m.end(), action_compare()));
253
254 process::action_label result; // if no match found, return process::action_label()
255
257 {
258 // There is a lhs that has m as prefix. Find it, and determine if the lhs matches m completely.
259 for (std::size_t i = 0; i < size(); ++i)
260 {
261 // lhs i matches only if comm_table[i] is empty
262 if ((!m_match_failed[i]) && m_lhs_iters[i] == m_lhs[i].end())
263 {
264 if (m_rhs[i] == process::tau())
265 {
266 throw mcrl2::runtime_error("Cannot linearise a process with a communication operator, containing a "
267 "communication that results in tau or that has an empty right hand side");
268 }
269 result = process::action_label(m_rhs[i], m.begin()->label().sorts());
270 break;
271 }
272 }
273 }
274
275 return result;
276 }
277
278 /// Calculate \exists_{o,c} (\mu(m) \oplus o, c) \in C, with o \subseteq n
279 ///
280 /// The function calculates whether the actions in m (consisting of actions and data) occur in a left hand side
281 /// of a communication a1|...|ak -> b in C (that is, the names of m are a subbag of a1|...|ak), and the actions
282 /// a1|...|ak that are not in m are in n. I.e., there is a subbag o of n such that m+o can communicate.
284 {
285 assert(std::is_sorted(m.begin(), m.end(), action_compare()));
286 assert(std::is_sorted(n.begin(), n.end(), action_compare()));
287
288 /* this function indicates whether the actions in m
289 consisting of actions and data occur in C, such that
290 a communication might take place (i.e. m is a subbag
291 of the lhs of a communication in C).
292 if n is not empty, then all actions of a matching communication
293 that are not in m should be in n (i.e. there must be a
294 subbag o of n such that m+o can communicate. */
295 bool result = false;
296
298 {
299 // the rest of actions of lhs that are not in m should be in n
300 // rest[i] contains the part of n in which lhs i has to find matching actions
301 // if rest[i] cannot match the next remaining action in the left hand side, stored in m_lhs_iters[i], i.e.,
302 // rest[i] becomes empty before matching all actions in the lhs, we set it to std::nullopt. N.B. when rest[i]
303 // becomes empty after matching all actions in the lhs, rest[i].empty() is a meaningful result: we have a
304 // successful match.
305 std::vector<std::optional<process::action_list::const_iterator>> rest(size(),
306 n.begin()); // pairs of iterator into n; the second element of the pair indicates the end of the range in n.
307
308 // check every lhs
309 for (std::size_t i = 0; i < size(); ++i)
310 {
311 if (m_match_failed[i]) // lhs i did not contain m
312 {
313 continue;
314 }
315
316 // as long as there are still unmatched actions in lhs i...
317 while (m_lhs_iters[i] != m_lhs[i].end())
318 {
319 assert(rest[i] != std::nullopt);
320 // .. find them in rest[i]
321 if (*rest[i] == n.end()) // no luck
322 {
323 rest[i] = std::nullopt;
324 break;
325 }
326 // get first action in lhs i
327 const core::identifier_string& comm_name = *m_lhs_iters[i];
328 core::identifier_string rest_name = (*rest[i])->label().name();
329 // find it in rest[i]
330 while (comm_name != rest_name)
331 {
332 ++(*rest[i]);
333 if (*rest[i] == n.end()) // no more
334 {
335 rest[i] = std::nullopt;
336 break;
337 }
338 rest_name = (*rest[i])->label().name();
339 }
340 if (comm_name != rest_name) // action was not found
341 {
342 break;
343 }
344
345 // action found; try next
346 ++(*rest[i]);
347 ++m_lhs_iters[i];
348 }
349
350 if (rest[i] != std::nullopt) // lhs was found in rest[i]
351 {
352 result = true;
353 break;
354 }
355 }
356 }
357
358 return result;
359 }
360};
361
362template <typename DataRewriter>
364{
365public:
366 apply_communication_algorithm(const process::action& termination_action,
367 DataRewriter& data_rewriter,
368 const process::communication_expression_list& communications,
369 const process::action_name_multiset_list& allowlist,
370 bool is_allow,
371 bool is_block)
372 : m_terminationAction(termination_action),
373 m_data_rewriter(data_rewriter),
379 m_is_allow(is_allow),
380 m_is_block(is_block)
381 {}
382
384
385 /// Calculate the communication operator applied to a multiaction.
386 ///
387 /// As the actions in the multiaction can be parameterized with open data expressions, for every subset of
388 /// communication expressions that match the multiaction, the result contains a multiaction (in which the particular
389 /// subset of communication expressions has been applied), and a corresponding condition that requires that the
390 /// parameters are equal for the actions in the left-hand-sides of the matching communication expressions.
391 /// Multiactions whose condition is false may be removed.
392 ///
393 /// This is the function $\overline{\gamma}$ in M. v. Weerdenburg. Calculation of Communication with Open Terms in
394 /// GenSpect Process Algebra.
395 ///
396 /// \param m The multiaction to which the communication operator is applied
397 /// \param C The communication expressions to be applied
398 /// \param RewriteTerm The rewriter that should be used to simplify the conditions.
400 {
401 assert(std::is_sorted(m.begin(), m.end(), action_compare()));
402 const process::action_list r;
403 return makeMultiActionConditionList_aux(m, r);
404 }
405
406 /// Apply the communication composition to a list of action summands.
408 deadlock_summand_vector& deadlock_summands,
409 bool nosumelm,
410 bool nodeltaelimination,
411 bool ignore_time)
412 {
413 assert(!(m_is_allow && m_is_block));
414
415 /* We follow the implementation of Muck van Weerdenburg, described in
416 a note: Calculation of communication with open terms. */
417
419 ? "- calculating the communication operator modulo the allow operator on "
420 : m_is_block
421 ? "- calculating the communication operator modulo the block operator on "
422 : "- calculating the communication operator on ")
423 << action_summands.size() << " action summands";
424
425 [[maybe_unused]]
426 lps_statistics_t lps_statistics_before = get_statistics(action_summands, deadlock_summands);
427 // number of summands filtered out after construction of intermediate result (all potential results of communication
428 // that may be allowed/are not blocked)
429 [[maybe_unused]]
430 std::size_t disallowed_summands = 0; // removed by allow
431 [[maybe_unused]]
432 std::size_t blocked_summands = 0; // removed by block
433 [[maybe_unused]]
434 std::size_t false_condition_summands = 0; // removed because condition is false
435
436 mCRL2log(mcrl2::log::trace) << "Calculating communication operator using a set of " << m_communications.size()
437 << " communication expressions." << std::endl;
438 mCRL2log(mcrl2::log::trace) << "Communication expressions: " << std::endl
439 << core::detail::print_set(m_communications) << std::endl;
440 mCRL2log(mcrl2::log::trace) << "Allow list: " << std::endl << core::detail::print_set(m_allowlist) << std::endl;
441
442 deadlock_summand_vector resulting_deadlock_summands;
443 deadlock_summands.swap(resulting_deadlock_summands);
444
445 const bool inline_allow = m_is_allow || m_is_block;
446 if (inline_allow)
447 {
448 // Inline allow is only supported for ignore_time,
449 // for in other cases generation of delta summands cannot be inlined in any simple way.
450 assert(!nodeltaelimination && ignore_time);
451 deadlock_summands.push_back(deadlock_summand(data::variable_list(), data::sort_bool::true_(), deadlock()));
452 }
453
454 stochastic_action_summand_vector resulting_action_summands;
455
456 for (const stochastic_action_summand& smmnd : action_summands)
457 {
458 const data::variable_list& sumvars = smmnd.summation_variables();
459 const process::action_list& multiaction = smmnd.multi_action().actions();
460 const data::data_expression& time = smmnd.multi_action().time();
461 const data::data_expression& condition = smmnd.condition();
462 const data::assignment_list& nextstate = smmnd.assignments();
463 const stochastic_distribution& dist = smmnd.distribution();
464
465 if (!inline_allow)
466 {
467 /* Recall a delta summand for every non delta summand.
468 * The reason for this is that with communication, the
469 * conditions for summands can become much more complex.
470 * Many of the actions in these summands are replaced by
471 * delta's later on. Due to the more complex conditions it
472 * will be hard to remove them. By adding a default delta
473 * with a simple condition, makes this job much easier
474 * later on, and will in general reduce the number of delta
475 * summands in the whole system */
476
477 // Create new list of summand variables containing only those that occur in the condition or the timestamp.
478 data::variable_list newsumvars;
479 atermpp::make_term_list(
480 newsumvars,
481 sumvars.begin(),
482 sumvars.end(),
483 [](const data::variable& v) { return v; },
484 [&condition, &time](const data::variable& v)
485 { return occursinterm(condition, v) || occursinterm(time, v); });
486
487 resulting_deadlock_summands.emplace_back(newsumvars, condition, deadlock(time));
488 }
489
490 /* the multiactionconditionlist is a list containing
491 tuples, with a multiaction and the condition,
492 expressing whether the multiaction can happen. All
493 conditions exclude each other. Furthermore, the list
494 is not empty. If no communications can take place,
495 the original multiaction is delivered, with condition
496 true. */
497
498 // We calculate the communication operator on the multiaction in this single summand. As the actions in the
499 // multiaction can be parameterized with open data expressions, for every subset of applicable communication
500 // expressions this list in principle contains one summand (unless the condition can be rewritten to false, in
501 // which case it is omitted).
502
503 mCRL2log(mcrl2::log::trace) << "Calculating communication on multiaction with " << multiaction.size()
504 << " actions." << std::endl;
505 mCRL2log(mcrl2::log::trace) << " Multiaction: " << process::pp(multiaction) << std::endl;
506
507 const tuple_list multiactionconditionlist = apply(multiaction);
508
509 mCRL2log(mcrl2::log::trace) << "Calculating communication on multiaction with " << multiaction.size()
510 << " actions results in " << multiactionconditionlist.size() << " potential summands"
511 << std::endl;
512
513 for (std::size_t i = 0; i < multiactionconditionlist.size(); ++i)
514 {
515 const process::action_list& multiaction = multiactionconditionlist.actions[i];
516
517 if (m_is_allow && !allow_(m_allowlist, multiaction, m_terminationAction))
518 {
519 if constexpr (EnableLineariseStatistics) {
520 ++disallowed_summands;
521 }
522
523 continue;
524 }
525 if (m_is_block && encap(m_allowlist, multiaction))
526 {
527 if constexpr (EnableLineariseStatistics) {
528 ++blocked_summands;
529 }
530 continue;
531 }
532
533 const data::data_expression communicationcondition = m_data_rewriter(multiactionconditionlist.conditions[i]);
534
535 const data::data_expression newcondition = m_data_rewriter(data::lazy::and_(condition, communicationcondition));
536 stochastic_action_summand new_summand(sumvars,
537 newcondition,
538 smmnd.multi_action().has_time() ? multi_action(multiaction, smmnd.multi_action().time())
539 : multi_action(multiaction),
540 nextstate,
541 dist);
542 if (!nosumelm)
543 {
544 if (sumelm(new_summand))
545 {
546 new_summand.condition() = m_data_rewriter(new_summand.condition());
547 }
548 }
549 if constexpr (EnableLineariseStatistics)
550 {
551 if (new_summand.condition() == data::sort_bool::false_())
552 {
553 ++false_condition_summands;
554 }
555 }
556
557 if (new_summand.condition() != data::sort_bool::false_())
558 {
559 resulting_action_summands.push_back(new_summand);
560 }
561 }
562 }
563
564 action_summands.swap(resulting_action_summands);
565
566 /* Now the resulting delta summands must be added again */
567 if (!inline_allow && !nodeltaelimination)
568 {
569 for (const deadlock_summand& summand : resulting_deadlock_summands)
570 {
571 insert_timed_delta_summand(action_summands, deadlock_summands, summand, ignore_time);
572 }
573 }
574
575 if constexpr (EnableLineariseStatistics)
576 {
577 lps_statistics_t lps_statistics_after = get_statistics(action_summands, deadlock_summands);
578 std::cout << log_comm_application(lps_statistics_before,
579 lps_statistics_after,
580 disallowed_summands,
581 blocked_summands,
582 false_condition_summands);
583 }
584
585 mCRL2log(mcrl2::log::verbose) << " resulting in " << action_summands.size() << " action summands and "
586 << deadlock_summands.size() << " delta summands\n";
587 }
588
589protected:
590
592 DataRewriter& m_data_rewriter;
594 const process::action_name_multiset_list m_allowlist; // This is a list of list of identifierstring.
595 const std::vector<core::identifier_string> m_blocked_actions; // used only if m_is_block is set
596 const std::vector<core::identifier_string> m_allowed_actions; // used only if m_is_allow is set
598 const bool
599 m_is_allow; // If is_allow or is_block is set, perform inline allow/block filtering. They are mutually exclusive
600 const bool m_is_block;
601
602 std::string log_comm_application(const lps_statistics_t& lps_statistics_before,
603 const lps_statistics_t& lps_statistics_after,
604 const std::size_t disallowed_summands,
605 const std::size_t blocked_summands,
606 const std::size_t false_condition_summands,
607 size_t indent = 0) const
608 {
609 std::string indent_str(indent, ' ');
610 std::ostringstream os;
611
612 os << indent_str << "- operator: comm" << std::endl;
613
614 indent += 2;
615 indent_str = std::string(indent, ' ');
616 os << indent_str << "number of communication expressions: " << m_communications.size() << std::endl;
617 if (m_is_allow)
618 {
619 os << indent_str << "number of allow expressions: " << m_allowlist.size() << std::endl;
620 }
621 if (m_is_block)
622 {
623 os << indent_str << "number of block expressions: " << m_blocked_actions.size() << std::endl;
624 }
625
626 os << indent_str << "before:" << std::endl
627 << print(lps_statistics_before, indent + 2) << indent_str << "after:" << std::endl
628 << print(lps_statistics_after, indent + 2) << indent_str << "removed from intermediate result:" << std::endl;
629
630 indent += 2;
631 indent_str = std::string(indent, ' ');
632 if (m_is_allow)
633 {
634 os << indent_str << "disallowed summands: " << disallowed_summands << std::endl;
635 }
636 if (m_is_block)
637 {
638 os << indent_str << "blocked summands: " << blocked_summands << std::endl;
639 }
640
641 os << indent_str << "summands with false condition: " << false_condition_summands << std::endl;
642
643 return os.str();
644 }
645
646 /// Static initialization function to ensure m_allowed_actions can be const.
650 {
651 std::vector<core::identifier_string> result;
652 if (is_allow)
653 {
654 result = get_actions(allow_list);
655 // Ensure that the termination action is always allowed, even when it is not an explicit part of
656 // the list of allowed actions.
657 // We maintains sort order of the vector
658 std::vector<core::identifier_string>::iterator it
659 = std::upper_bound(result.begin(), result.end(), termination_action.label().name(), action_name_compare());
660 result.insert(it, termination_action.label().name());
661 }
662
663 return result;
664 }
665
666 /// Calculate data expression for pairwise equality of the elements of l1 and l2.
667 ///
668 /// If the lengths of l1 and l2 differ, or for some index i, the sort l1[i] and l2[i] is different, the pairwise
669 /// match is false, otherwise an expression equivalent to \bigwegde_i (l1[i] == l2[i]) is returned.
671 const data::data_expression_list& l2) const
672 {
674
675 if (l1.size() != l2.size())
676 {
678 }
679
680 auto i1 = l1.begin();
681 auto i2 = l2.begin();
682
683 while (i1 != l1.end() && i2 != l2.end() && result != data::sort_bool::false_())
684 {
685 if (i1->sort() != i2->sort())
686 {
687 result = data::sort_bool::false_();
688 }
689 else
690 {
691 result = data::lazy::and_(result, m_data_rewriter(equal_to(*i1++, *i2++)));
692 }
693 }
694
695 return result;
696 }
697
698 /// Determine if the action is allowable, that is, it is part of an allow expression
699 /// and it is not part of a block expression
700 bool maybe_allowed(const process::action_label& a) const
701 {
702 assert(std::is_sorted(m_allowed_actions.begin(), m_allowed_actions.end(), action_name_compare()));
703 assert(std::is_sorted(m_blocked_actions.begin(), m_blocked_actions.end(), action_name_compare()));
704 assert(!m_is_block || m_allowed_actions.empty());
705 assert(!m_is_allow || m_blocked_actions.empty());
706
707 return !(m_is_allow || m_is_block)
708 || (m_is_allow
709 && std::binary_search(m_allowed_actions.begin(),
710 m_allowed_actions.end(),
711 a.name(),
712 action_name_compare()))
713 || (m_is_block
714 && !std::binary_search(m_blocked_actions.begin(),
715 m_blocked_actions.end(),
716 a.name(),
717 action_name_compare()));
718 }
719
720 /// Calculate the communication operator applied to a multiaction.
721 ///
722 /// This is the function $\overline(\gamma, C, r)$ as described in M. v. Weerdenburg. Calculation of Communication
723 /// with Open Terms in GenSpect Process Algebra.
724 ///
725 /// \param m_first Start of a range of multiactions to which the communication operator should be applied
726 /// \param m_last End of a range of multiactions to which the communication operator should be applied
727 /// \param C The communication expressions that must be applied to the multiaction
728 /// \param r
729 /// \param RewriteTerm Data rewriter for simplifying expressions.
731 {
732 assert(std::is_sorted(m.begin(), m.end(), action_compare()));
733 assert(std::is_sorted(r.begin(), r.end(), action_compare()));
734
735 tuple_list S; // result
736
737 // if m = [], then S := { (r, \psi(r, C)) }
738 if (m.empty())
739 {
740 if (r.empty())
741 {
742 S.conditions.emplace_back(data::sort_bool::true_());
743 }
744 else
745 {
746 S.conditions.emplace_back(psi(r));
747 }
748
749 // TODO: Why don't we insert r here, as van Weerdenburg writes?
750 S.actions.emplace_back();
751 }
752 else
753 {
754 // m = [a(d)] \oplus n
755 const process::action& a = m.front();
756 const process::action_list& m_tail = m.tail();
757
758 // S = \phi(a(d), d, [], n, C, r)
759 S = phi({a}, a.arguments(), process::action_list(), m_tail, r);
760
761 // addActionCondition adds a to every multiaction in T; so if a is not part of any allowed action,
762 // we can skip this part.
764 {
765 // T = \overline{\gamma}(n, C, [a(d)] \oplus r)
766 tuple_list T = makeMultiActionConditionList_aux(m_tail, insert(a, r));
767
768 // S := S \cup \{ (a,true) \oplus t \mid t \in T \}
769 // TODO: van Weerdenburg in his note only calculates S := S \cup T. Understand why that is not correct.
770 addActionCondition(a, data::sort_bool::true_(), std::move(T), S);
771 }
772 }
773 return S;
774 }
775
776 /// Calculate $\phi(m, d, w, n, C, r)$ as described in M. v. Weerdenburg. Calculation of Communication
777 /// with Open Terms in GenSpect Process Algebra.
778 ///
779 /// phi is a function that yields a list of pairs indicating how the actions in m|w|n can communicate.
780 /// The pairs contain the resulting multi action and a condition on data indicating when communication can take place.
781 /// In the communication all actions of m, none of w and a subset of n can take part in the communication.
782 /// d is the data parameter of the communication and comm_table contains a list of multiaction action pairs
783 /// indicating possible communications.
785 const data::data_expression_list& d,
786 const process::action_list& w,
787 const process::action_list& n,
788 const process::action_list& r)
789 {
790 assert(std::is_sorted(m.begin(), m.end(), action_compare()));
791 assert(std::is_sorted(w.begin(), w.end(), action_compare()));
792 assert(std::is_sorted(n.begin(), n.end(), action_compare()));
793 assert(std::is_sorted(r.begin(), r.end(), action_compare()));
794
795 tuple_list S;
796
797 // \exists_{o,c} (\mu(m) \oplus o, c) \in C, with o \subseteq n
798 if (m_comm_table.might_communicate(m, n))
799 {
800 if (n.empty()) // b \land n = []
801 {
802 // There is communication expression whose lhs matches m, result is c.
803 const process::action_label c = m_comm_table.can_communicate(m); /* returns process::action_label() if no
804 communication is possible */
805
807 {
808 // \exists_{(b,c) \in C} b = \mu(m)
809 // the result of the communication is part of an allow, not in the block set.
810 // Calculate communication for multiaction w.
811 // T := \overline{\gamma}(w, C)
813
814 // S := \{ (c(d) \oplus r, e) \mid (r,e) \in T \}
815 addActionCondition(process::action(c, d), data::sort_bool::true_(), std::move(T), S);
816 }
817 }
818 else
819 {
820 // n = [a(f)] \oplus o
821 const process::action& a = n.front();
822 const process::action_list& n_tail = n.tail();
823
825 if (condition == data::sort_bool::false_())
826 {
827 // a(f) cannot take part in communication as the arguments do not match. Move to w and continue with next
828 // action
829 S = phi(m, d, insert(a, w), n_tail, r);
830 }
831 else
832 {
833 tuple_list T = phi(insert(a, m), d, w, n_tail, r);
834
835 S = phi(m, d, insert(a, w), n_tail, r);
836 addActionCondition(process::action(), condition, std::move(T), S);
837 }
838 }
839 }
840
841 return S;
842 }
843
844 bool xi(const process::action_list& alpha, const process::action_list& beta)
845 {
846 bool result = false;
847
848 if (beta.empty())
849 {
850 result = m_comm_table.can_communicate(alpha) != process::action_label();
851 }
852 else
853 {
854 const process::action_list alpha_ = insert(beta.front(), alpha);
855
856 if (m_comm_table.can_communicate(alpha_) != process::action_label())
857 {
858 result = true;
859 }
860 else
861 {
862 const process::action_list& beta_tail = beta.tail();
863 if (m_comm_table.might_communicate(alpha_, beta_tail))
864 {
865 result = xi(alpha, beta_tail);
866 }
867
868 result = result || xi(alpha, beta_tail);
869 }
870 }
871 return result;
872 }
873
875 {
876 assert(std::is_sorted(alpha.begin(), alpha.end(), action_compare()));
878
879 process::action_list actl; // used in inner loop.
880 while (!alpha.empty())
881 {
882 process::action_list beta = alpha.tail();
883
884 while (!beta.empty())
885 {
886 actl = process::action_list();
887 actl = insert(alpha.front(), actl);
888 actl = insert(beta.front(), actl);
889 const process::action_list& beta_tail = beta.tail();
890 if (m_comm_table.might_communicate(actl, beta_tail) && xi(actl, beta_tail))
891 {
892 // sort and remove duplicates??
893 cond = data::lazy::or_(cond, pairwise_equal_to(alpha.front().arguments(), beta.front().arguments()));
894 }
895 beta = beta_tail;
896 }
897
898 alpha = alpha.tail();
899 }
900 cond = data::lazy::not_(cond);
901 return cond;
902 }
903};
904} // namespace detail
905
907 const process::action_name_multiset_list& allowlist, // This is a list of list of identifierstring.
908 const bool is_allow, // If is_allow or is_block is set, perform inline allow/block filtering.
909 const bool is_block,
910 stochastic_action_summand_vector& action_summands,
911 deadlock_summand_vector& deadlock_summands,
912 const process::action& terminationAction,
913 const bool nosumelm,
914 const bool nodeltaelimination,
915 const bool ignore_time,
916 const std::function<data::data_expression(const data::data_expression&)>& RewriteTerm)
917
918{
919 return detail::apply_communication_algorithm(terminationAction,
920 RewriteTerm,
921 communications,
922 allowlist,
923 is_allow,
924 is_block)
925 .apply(action_summands, deadlock_summands, nosumelm, nodeltaelimination, ignore_time);
926}
927
928} // namespace lps
929
930} // namespace mcrl2
931
932#endif // MCRL2_LPS_LINEARISE_COMMUNICATION_H
aterm_string(const std::string &s)
Constructor that allows construction from a string.
aterm_string & operator=(const aterm_string &t) noexcept=default
const aterm & operator[](const size_type i) const
Returns the i-th argument.
Definition aterm.h:187
const function_symbol & function() const
Returns the function symbol belonging to an aterm.
Definition aterm.h:144
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
aterm(const function_symbol &sym)
Constructor.
Definition aterm.h:128
term_appl_iterator< aterm > iterator
Iterator used to iterate through an term_appl.
Definition aterm.h:42
bool operator==(const function_symbol &f) const
Equality test.
A list of aterm objects.
Definition aterm_list.h:24
void swap(unprotected_aterm_core &t) noexcept
Swaps this term with its argument.
Definition aterm_core.h:152
bool operator<(const unprotected_aterm_core &t) const
Comparison operator for two unprotected aterms.
Definition aterm_core.h:104
bool operator==(const unprotected_aterm_core &t) const
Comparison operator.
Definition aterm_core.h:83
bool defined() const
Returns true if this term is not equal to the term assigned by the default constructor of aterms,...
Definition aterm_core.h:143
bool operator!=(const unprotected_aterm_core &t) const
Inequality operator on two unprotected aterms.
Definition aterm_core.h:92
An abstraction expression.
Definition abstraction.h:26
const variable_list & variables() const
Definition abstraction.h:63
const data_expression & body() const
Definition abstraction.h:68
const binder_type & binding_operator() const
Definition abstraction.h:58
\brief A sort alias
Definition alias.h:26
alias(const basic_sort &name, const sort_expression &reference)
\brief Constructor Z12.
Definition alias.h:42
\brief Assignment expression
Definition assignment.h:27
\brief Assignment of a data expression to a variable
Definition assignment.h:91
const data_expression & rhs() const
Definition assignment.h:122
const variable & lhs() const
Definition assignment.h:117
\brief A basic sort
Definition basic_sort.h:26
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:108
data_expression(const data_expression &) noexcept=default
Move semantics.
void translate_user_notation()
Translate user notation within the equations of the data specification.
const function_symbol_vector & user_defined_mappings() const
Gets all user defined mappings in this specification.
data_specification()
Default constructor. Generate a data specification that contains only booleans and positive numbers.
const function_symbol_vector & constructors(const sort_expression &s, const bool do_not_normalize=false) const
Gets all constructors of a sort including those that are system defined.
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
inequality_inconsistency_cache_base * m_cache
bool is_consistent(const std::vector< linear_inequality > &inequalities_in_) const
inequality_inconsistency_cache_base & operator=(const inequality_inconsistency_cache_base &)=delete
inequality_inconsistency_cache_base(const node_type node, const linear_inequality &inequality, inequality_inconsistency_cache_base *present_branch, 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_)
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 sort_expression & sort() const
function_symbol(const std::string &name, const sort_expression &sort)
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 class 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.
void 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.
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:81
data_expression operator()(const data_expression &d) const
Rewrites a data expression.
Definition rewriter.h:158
Identifier generator that stores the identifiers of the context in a set. Using the operator()() and ...
void add_identifier(const core::identifier_string &s) override
Adds the identifier s to the context.
\brief A sort expression
sort_expression & operator=(const sort_expression &) noexcept=default
\brief An argument of a constructor of a structured sort
\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:182
const core::identifier_string & lhs() const
Definition assignment.h:213
\brief A data variable
Definition variable.h:28
variable(const std::string &name, const sort_expression &sort)
Constructor.
Definition variable.h:69
const core::identifier_string & name() const
Definition variable.h:38
variable & operator=(variable &&) noexcept=default
const sort_expression & sort() const
Definition variable.h:43
variable & operator=(const variable &) noexcept=default
\brief A where expression
where_clause(const atermpp::aterm &term)
const data_expression & body() const
const assignment_expression_list & declarations() const
logger(const log_level_t l)
Default constructor.
Definition logger.h:164
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)
Swaps the contents.
data::data_expression_list next_state(const data::variable_list &process_parameters) const
Returns the next state corresponding to this summand.
Definition lps.cpp:68
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.
summand_base super
The super class.
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:26
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:62
lps::detail::lps_algorithm< Specification > super
Definition constelm.h:27
bool is_constant(const data::data_expression &x, const std::set< data::variable > &global_variables) const
Definition constelm.h:97
void remove_parameters(data::mutable_map_substitution<> &sigma)
Applies the substitution computed by compute_constant_parameters.
Definition constelm.h:234
const DataRewriter & R
The rewriter used by the constelm algorithm.
Definition constelm.h:41
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:43
bool m_ignore_conditions
If true, conditions are not evaluated and assumed to be true.
Definition constelm.h:35
constelm_algorithm(Specification &spec, const DataRewriter &R_)
Constructor.
Definition constelm.h:114
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:79
void run(bool instantiate_global_variables=false, bool ignore_conditions=false)
Runs the constelm algorithm.
Definition constelm.h:259
std::map< data::variable, std::size_t > m_index_of
Maps process parameters to their index.
Definition constelm.h:38
data::mutable_map_substitution compute_constant_parameters(bool instantiate_global_variables=false, bool ignore_conditions=false)
Computes constant parameters.
Definition constelm.h:125
bool m_instantiate_global_variables
If true, then the algorithm is allowed to instantiate free variables as a side effect.
Definition constelm.h:32
LPS summand containing a deadlock.
deadlock_summand & operator=(const deadlock_summand &) noexcept=default
summand_base super
The super class.
lps::deadlock m_deadlock
The deadlock of the summand.
deadlock_summand(deadlock_summand &&) noexcept=default
void swap(deadlock_summand &other)
Swaps the contents.
deadlock_summand & operator=(deadlock_summand &&) noexcept=default
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:26
bool operator!=(const deadlock &other) const
Comparison operator.
Definition deadlock.h:74
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:32
deadlock(data::data_expression time=data::undefined_real())
Constructor.
Definition deadlock.h:36
bool has_time() const
Returns true if time is available.
Definition deadlock.h:42
std::string to_string() const
Returns a string representation of the deadlock.
Definition deadlock.h:62
const data::data_expression & time() const
Returns the time.
Definition deadlock.h:49
void swap(deadlock &other)
Swaps the contents.
Definition deadlock.h:80
data::data_expression & time()
Returns the time.
Definition deadlock.h:56
bool operator==(const deadlock &other) const
Comparison operator.
Definition deadlock.h:68
void apply(stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, bool nosumelm, bool nodeltaelimination, bool ignore_time)
Apply the communication composition to a list of action summands.
tuple_list makeMultiActionConditionList_aux(const process::action_list &m, const process::action_list &r)
const process::action_name_multiset_list m_allowlist
const process::communication_expression_list m_communications
tuple_list apply(const process::action_list &m)
const std::vector< core::identifier_string > m_blocked_actions
data::data_expression psi(process::action_list alpha)
apply_communication_algorithm(const process::action &termination_action, DataRewriter &data_rewriter, const process::communication_expression_list &communications, const process::action_name_multiset_list &allowlist, bool is_allow, bool is_block)
bool maybe_allowed(const process::action_label &a) const
const std::vector< core::identifier_string > m_allowed_actions
bool xi(const process::action_list &alpha, const process::action_list &beta)
data::data_expression pairwise_equal_to(const data::data_expression_list &l1, const data::data_expression_list &l2) const
static const std::vector< core::identifier_string > init_allowed_actions(bool is_allow, const process::action_name_multiset_list &allow_list, const process::action &termination_action)
Static initialization function to ensure m_allowed_actions can be const.
tuple_list phi(const process::action_list &m, const data::data_expression_list &d, const process::action_list &w, const process::action_list &n, const process::action_list &r)
std::string log_comm_application(const lps_statistics_t &lps_statistics_before, const lps_statistics_t &lps_statistics_after, const std::size_t disallowed_summands, const std::size_t blocked_summands, const std::size_t false_condition_summands, size_t indent=0) const
Data structure to store the communication function more efficiently.
const std::vector< core::identifier_string_list > m_lhs
Left-hand sides of communication expressions.
~comm_entry()=default
static std::vector< core::identifier_string_list > init_lhs(const process::communication_expression_list &communications)
static std::vector< core::identifier_string > init_rhs(const process::communication_expression_list &communications)
const std::vector< core::identifier_string > m_rhs
Right-hand sides of communication expressions.
bool match_multiaction(const process::action_list &multi_action)
process::action_label can_communicate(const process::action_list &m)
comm_entry(const process::communication_expression_list &communications)
std::vector< bool > m_match_failed
void reset_temporary_data()
std::vector< core::identifier_string_list::const_iterator > m_lhs_iters
comm_entry & operator=(const comm_entry &)=delete
comm_entry(const comm_entry &)=delete
std::size_t size() const
bool might_communicate(const process::action_list &m, const process::action_list &n)
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.
ActionSummand action_summand_type
The action summand type.
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.
linear_process_base< action_summand > super
\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.
bool operator==(const multi_action &other) const
multi_action sort_actions() const
Returns the multiaction in which the list of actions is sorted.
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.
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.
LinearProcess process_type
The process type.
InitialProcessExpression & initial_process()
Returns a reference to the initial process.
InitialProcessExpression initial_process_type
The initial process type.
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_base< linear_process, process_initializer > super
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(stochastic_action_summand &&) noexcept=default
const stochastic_distribution & distribution() const
Returns the distribution of this summand.
void swap(stochastic_action_summand &other)
Swaps the contents.
stochastic_action_summand(const action_summand &s)
Constructor.
stochastic_action_summand & operator=(stochastic_action_summand &&) noexcept=default
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.
linear_process_base< stochastic_action_summand > super
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.
specification_base< stochastic_linear_process, stochastic_process_initializer > super
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:25
const data::data_expression & condition() const
Returns the condition expression.
Definition summand.h:60
const data::variable_list & summation_variables() const
Returns the sequence of summation variables.
Definition summand.h:53
void swap(summand_base &other)
Swaps the contents.
Definition summand.h:73
data::variable_list m_summation_variables
The summation variables of the summand.
Definition summand.h:28
data::data_expression & condition()
Returns the condition expression.
Definition summand.h:67
summand_base()
Constructor.
Definition summand.h:35
data::data_expression m_condition
The condition of the summand.
Definition summand.h:31
data::variable_list & summation_variables()
Returns the sequence of summation variables.
Definition summand.h:46
summand_base(const data::variable_list &summation_variables, const data::data_expression &condition)
Constructor.
Definition summand.h:39
\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()
\brief Default constructor X3.
action_name_multiset & operator=(const action_name_multiset &) noexcept=default
action_name_multiset(const atermpp::aterm &term)
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)
\brief Constructor Z12.
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()
\brief Default constructor X3.
block(const core::identifier_string_list &block_set, const process_expression &operand)
\brief Constructor Z14.
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)
data::sorts_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
data::sorts_list matching_action_sorts(const core::identifier_string &name) const
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
data::sorts_list matching_process_sorts(const core::identifier_string &name, const data::data_expression_list &parameters) 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)
\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_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:591
process_expression typecheck_process_expression(const data::detail::variable_context &variables, const process_expression &x, const process_identifier *current_equation=nullptr)
Definition typecheck.h:672
detail::action_context m_action_context
Definition typecheck.h:592
data::detail::variable_context m_variable_context
Definition typecheck.h:594
process_type_checker(const data::data_specification &dataspec=data::data_specification())
Default constructor.
Definition typecheck.h:621
void operator()(process_specification &procspec)
Typecheck the process specification procspec.
Definition typecheck.h:636
static std::vector< process_identifier > equation_identifiers(const std::vector< process_equation > &equations)
Definition typecheck.h:596
detail::process_context m_process_context
Definition typecheck.h:593
process_type_checker(const data::data_specification &dataspec, const VariableContainer &variables, const ActionLabelContainer &action_labels, const ProcessIdentifierContainer &process_identifiers)
Definition typecheck.h:608
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:630
\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(untyped_process_assignment &&) noexcept=default
untyped_process_assignment(const untyped_process_assignment &) noexcept=default
Move semantics.
Standard exception class for reporting runtime errors.
Definition exception.h:27
process_expression processbody
objectdatatype(const objectdatatype &o)=default
process_expression representedprocess
variable_list old_parameters
bool free_variables_defined
~objectdatatype()=default
process::action_label_list multi_action_names
processstatustype processstatus
identifier_string objectname
objectdatatype()=default
objectdatatype & operator=(const objectdatatype &o)=default
objecttype object
std::set< variable > free_variables
process_identifier process_representing_action
variable_list parameters
enumeratedtype(const enumeratedtype &e)
enumeratedtype(const std::size_t n, specification_basic_type &spec)
void operator=(const enumeratedtype &e)
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)
action_list linMergeMultiActionList(const action_list &ma1, const action_list &ma2)
const objectdatatype & objectIndex(const aterm &o) const
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 guarantee_that_parameters_have_unique_type_body(const process_expression &t, std::set< process_identifier > &visited_processes, std::set< identifier_string > &used_variable_names, maintain_variables_in_rhs< mutable_map_substitution<> > &parameter_mapping, std::set< variable > &variables_in_lhs_of_parameter_mapping)
static action_list hide_(const identifier_string_list &hidelist, const action_list &multiaction)
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)
stochastic_action_summand collect_sum_arg_arg_cond(const enumtype &e, std::size_t n, const stochastic_action_summand_vector &action_summands, const variable_list &parameters)
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)
void detail_check_objectdata(const aterm &o) const
assignment_list argscollect_regular2(const process_expression &t, variable_list &vl)
void guarantee_that_parameters_have_unique_type(const process_identifier &procId, std::set< process_identifier > &visited_processes, std::set< identifier_string > &used_variable_names, maintain_variables_in_rhs< mutable_map_substitution<> > &parameter_mapping, std::set< variable > &variables_in_lhs_of_parameter_mapping)
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)
void guarantee_that_parameters_have_unique_type(const process_identifier &procId)
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
void find_free_variables_process(const process_expression &p, std::set< variable > &free_variables_in_p)
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)
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)
static void hidecomposition(const identifier_string_list &hidelist, stochastic_action_summand_vector &action_summands)
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)
static variable_list joinparameters(const variable_list &par1, const variable_list &par2)
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)
variable_list collectparameterlist(const std::set< process_identifier > &pCRLprocs)
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)
static bool alreadypresent(variable &var, const variable_list &vl)
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)
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)
std::vector< std::vector< process_instance_assignment > > representedprocesses
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
objectdatatype & objectIndex(const aterm &o)
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)
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="")
const std::set< variable > & get_free_variables(objectdatatype &object)
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)
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)
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
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)
std::set< data::variable > sigma_variables(const SUBSTITUTION &sigma)
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)
@ multiAction
Definition linearise.cpp:76
@ GNFalpha
Definition linearise.cpp:78
@ mCRLbusy
Definition linearise.cpp:73
@ mCRL
Definition linearise.cpp:71
@ GNF
Definition linearise.cpp:77
@ mCRLlin
Definition linearise.cpp:74
@ pCRL
Definition linearise.cpp:75
@ mCRLdone
Definition linearise.cpp:72
@ GNFbusy
Definition linearise.cpp:79
@ unknown
Definition linearise.cpp:70
@ error
Definition linearise.cpp:80
@ func
Definition linearise.cpp:89
@ act
Definition linearise.cpp:90
@ sorttype
Definition linearise.cpp:93
@ multiact
Definition linearise.cpp:94
@ proc
Definition linearise.cpp:91
@ _map
Definition linearise.cpp:88
@ none
Definition linearise.cpp:87
@ variable_
Definition linearise.cpp:92
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
Definition logger.h:391
The main namespace for the aterm++ library.
Definition algorithm.h:21
term_list< aterm > aterm_list
A term_list with elements of type aterm.
Definition aterm_list.h:497
const atermpp::function_symbol & function_symbol_TimedMultAct()
const atermpp::function_symbol & function_symbol_BInit()
const atermpp::function_symbol & function_symbol_Choice()
const atermpp::function_symbol & function_symbol_UntypedProcessAssignment()
const atermpp::function_symbol & function_symbol_Allow()
const atermpp::function_symbol & function_symbol_Merge()
const atermpp::function_symbol & function_symbol_Rename()
const atermpp::function_symbol & function_symbol_ProcSpec()
const atermpp::function_symbol & function_symbol_ActId()
const atermpp::function_symbol & function_symbol_Block()
const atermpp::function_symbol & function_symbol_Sum()
const atermpp::function_symbol & function_symbol_AtTime()
const atermpp::function_symbol & function_symbol_GlobVarSpec()
const atermpp::function_symbol & function_symbol_Comm()
const atermpp::function_symbol & function_symbol_ProcEqn()
const atermpp::function_symbol & function_symbol_Delta()
const atermpp::function_symbol & function_symbol_Action()
const atermpp::function_symbol & function_symbol_Distribution()
const atermpp::function_symbol & function_symbol_LinearProcessInit()
const atermpp::function_symbol & function_symbol_RenameExpr()
const atermpp::function_symbol & function_symbol_MultActName()
const atermpp::function_symbol & function_symbol_Process()
const atermpp::function_symbol & function_symbol_IfThenElse()
const atermpp::function_symbol & function_symbol_CommExpr()
const atermpp::function_symbol & function_symbol_Sync()
const atermpp::function_symbol & function_symbol_Seq()
const atermpp::function_symbol & function_symbol_ProcVarId()
const atermpp::function_symbol & function_symbol_LinProcSpec()
const atermpp::function_symbol & function_symbol_ProcessAssignment()
const atermpp::function_symbol & function_symbol_UntypedMultiAction()
const atermpp::function_symbol & function_symbol_IfThen()
const atermpp::function_symbol & function_symbol_ProcessInit()
const atermpp::function_symbol & function_symbol_LinearProcessSummand()
const atermpp::function_symbol & function_symbol_Hide()
const atermpp::function_symbol & function_symbol_StochasticOperator()
const atermpp::function_symbol & function_symbol_ActSpec()
const atermpp::function_symbol & function_symbol_ProcEqnSpec()
const atermpp::function_symbol & function_symbol_LMerge()
std::string pp(const core::identifier_string &x)
Definition core.cpp:26
atermpp::term_list< identifier_string > identifier_string_list
\brief list of identifier_strings
atermpp::aterm_string identifier_string
String type of the LPS library. Identifier strings are represented internally as ATerms.
atermpp::function_symbol linear_inequality_equal()
const lhs_t map_to_lhs_type(const map_based_lhs_t &lhs)
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....
const lhs_t remove_variable_and_divide(const lhs_t &lhs, const variable &v, const data_expression &f, const rewriter &r)
data_expression parse_data_expression(const std::string &text)
Definition data.cpp:224
data_expression negate_inequality(const data_expression &e)
const lhs_t subtract(const lhs_t &argument, const lhs_t &e, const rewriter &r)
data_specification parse_data_specification_new(const std::string &text)
Definition data.cpp:235
const lhs_t map_to_lhs_type(const map_based_lhs_t &lhs, const data_expression &factor, const rewriter &r)
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:79
rewrite_data_expressions_builder< Builder, Rewriter > make_rewrite_data_expressions_builder(Rewriter R)
Definition rewrite.h:48
variable_list parse_variable_declaration_list(const std::string &text)
Definition data.cpp:246
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:213
atermpp::function_symbol linear_inequality_less()
void emplace_back_if_not_zero(std::vector< detail::variable_with_a_rational_factor > &r, const variable &v, const data_expression &f)
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:31
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 lhs_t add(const data_expression &v, const lhs_t &argument, const rewriter &r)
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)
std::map< variable, data_expression > map_based_lhs_t
const lhs_t add(const lhs_t &argument, const lhs_t &e, const rewriter &r)
atermpp::aterm data_specification_to_aterm(const data_specification &s)
Definition data_io.cpp:44
atermpp::function_symbol linear_inequality_less_equal()
lhs_t meta_operation_lhs(const lhs_t &argument1, const lhs_t &argument2, OPERATION operation, const rewriter &r)
const lhs_t subtract(const lhs_t &argument, const data_expression &v, const rewriter &r)
std::string pp(const detail::lhs_t &lhs)
const lhs_t meta_operation_constant(const lhs_t &argument, const data_expression &v, const rewriter &r)
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.
const lhs_t multiply(const lhs_t &argument, const data_expression &v, const rewriter &r)
atermpp::function_symbol f_variable_with_a_rational_factor()
const lhs_t divide(const lhs_t &argument, const data_expression &v, const rewriter &r)
sort_expression parse_sort_expression(const std::string &text)
Definition data.cpp:203
A collection of utilities for lazy expression construction.
data_expression not_(data_expression const &p)
Returns an expression equivalent to not p.
data_expression and_(data_expression const &p, data_expression const &q)
Returns an expression equivalent to p or q.
data_expression or_(data_expression const &p, data_expression const &q)
Returns an expression equivalent to p and q.
Namespace for system defined sort bool_.
Definition bool.h:32
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
Definition bool.h:345
const basic_sort & bool_()
Constructor for sort expression Bool.
Definition bool.h:44
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
Definition bool.h:493
bool is_implies_application(const atermpp::aterm &e)
Recogniser for application of =>.
Definition bool.h:409
application not_(const data_expression &arg0)
Application of function symbol !.
Definition bool.h:197
application or_(const data_expression &arg0, const data_expression &arg1)
Application of function symbol ||.
Definition bool.h:324
const function_symbol & false_()
Constructor for function symbol false.
Definition bool.h:109
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
Definition bool.h:281
bool is_not_application(const atermpp::aterm &e)
Recogniser for application of !.
Definition bool.h:217
const function_symbol & true_()
Constructor for function symbol true.
Definition bool.h:77
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
Definition bool.h:481
Namespace for system defined sort int_.
bool is_cint_application(const atermpp::aterm &e)
Recogniser for application of @cInt.
Definition int1.h:124
Namespace for system defined sort nat.
bool is_natural_constant(const data_expression &n)
Determines whether n is a natural constant.
Namespace for system defined sort pos.
const basic_sort & pos()
Constructor for sort expression Pos.
Definition pos1.h:45
Namespace for system defined sort real_.
function_symbol plus(const sort_expression &s0, const sort_expression &s1)
Definition real1.h:1059
function_symbol times(const sort_expression &s0, const sort_expression &s1)
Definition real1.h:1237
bool is_zero(const atermpp::aterm &e)
function_symbol divides(const sort_expression &s0, const sort_expression &s1)
Definition real1.h:1407
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:1136
data_expression & real_zero()
bool is_creal_application(const atermpp::aterm &e)
Recogniser for application of @cReal.
Definition real1.h:153
function_symbol minus(const sort_expression &s0, const sort_expression &s1)
Definition real1.h:1152
const basic_sort & real_()
Constructor for sort expression Real.
Definition real1.h:48
bool is_real(const sort_expression &e)
Recogniser for sort expression Real.
Definition real1.h:58
application times(const data_expression &arg0, const data_expression &arg1)
Application of function symbol *.
Definition real1.h:1285
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:735
bool is_times_application(const atermpp::aterm &e)
Recogniser for application of *.
Definition real1.h:1306
function_symbol negate(const sort_expression &s0)
Definition real1.h:810
bool is_negate_application(const atermpp::aterm &e)
Recogniser for application of -.
Definition real1.h:877
bool is_minus_application(const atermpp::aterm &e)
Recogniser for application of -.
Definition real1.h:1221
Namespace for all data library functionality.
Definition data.cpp:22
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,.
atermpp::term_list< assignment_expression > assignment_expression_list
\brief list of assignment_expressions
Definition assignment.h:50
std::vector< assignment > assignment_vector
\brief vector of assignments
Definition assignment.h:149
T rewrite(const T &x, Rewriter R, const Substitution &sigma, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition rewrite.h:134
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:114
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:287
data_expression & real_one()
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:276
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:312
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:429
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)
std::vector< alias > alias_vector
\brief vector of aliass
Definition alias.h:75
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:171
atermpp::term_list< function_symbol > function_symbol_list
\brief list of function_symbols
data_expression & real_minus_one()
bool is_simple_substitution(const map_substitution< AssociativeContainer > &sigma)
atermpp::term_list< untyped_data_parameter > untyped_data_parameter_list
\brief list of untyped_data_parameters
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:380
void optimized_or(Term &result, const Term &p, const Term &q)
Make a conjunction, and optimize if possible.
atermpp::term_list< sort_expression_list > sorts_list
Definition typecheck.h:369
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:334
application less_equal(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <=.
Definition standard.h:295
std::string pp(const data::variable &x)
Definition data.cpp:81
variable_list parse_variables(const std::string &text)
Definition parse.h:365
application real_abs(const data_expression &arg)
T rewrite(const T &x, Rewriter R, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition rewrite.h:104
void count_occurrences(const std::vector< linear_inequality > &inequalities, std::map< variable, std::size_t > &nr_positive_occurrences, std::map< variable, std::size_t > &nr_negative_occurrences, const rewriter &r)
application less(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <.
Definition standard.h:258
data::data_expression translate_user_notation(const data::data_expression &x)
Definition data.cpp:89
data_specification parse_data_specification(std::istream &in)
Parses a and type checks a data specification.
Definition parse.h:62
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:345
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:250
std::vector< variable > variable_vector
\brief vector of variables
Definition variable.h:89
application if_(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol if.
Definition standard.h:219
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)
atermpp::term_list< sort_expression > sort_expression_list
\brief list of sort_expressions
std::vector< data_expression > data_expression_vector
\brief vector of data_expressions
data::function_symbol parse_function_symbol(const std::string &text, const std::string &dataspec_text="")
Definition parse.h:410
void swap(data_expression &t1, data_expression &t2)
\brief swap overload
static void pivot_and_update(const variable &xi, const variable &xj, const data_expression &v, const data_expression &v_delta_correction, std::map< variable, data_expression > &beta, std::map< variable, data_expression > &beta_delta_correction, std::set< variable > &basic_variables, std::map< variable, detail::lhs_t > &working_equalities, const rewriter &r)
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:203
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.
std::vector< structured_sort_constructor > structured_sort_constructor_vector
\brief vector of structured_sort_constructors
bool is_zero(const data_expression &e)
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
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)
atermpp::term_list< data_expression > data_expression_list
\brief list of data_expressions
data_expression rewrite_with_memory(const data_expression &t, const rewriter &r)
data_expression & real_zero()
bool is_a_redundant_inequality(const std::vector< linear_inequality > &inequalities, const std::vector< linear_inequality > ::iterator i, const rewriter &r)
Indicate whether an inequality from a set of inequalities is redundant.
application greater(const data_expression &arg0, const data_expression &arg1)
Application of function symbol >
Definition standard.h:332
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:354
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:188
atermpp::term_list< variable > variable_list
\brief list of variables
std::pair< basic_sort_vector, alias_vector > parse_sort_specification(const std::string &text)
Definition data.cpp:258
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:399
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
application real_negate(const data_expression &arg)
void rewrite(T &x, Rewriter R, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition rewrite.h:91
atermpp::term_list< assignment > assignment_list
\brief list of assignments
Definition assignment.h:146
bool is_inconsistent(const std::vector< linear_inequality > &inequalities_in, const rewriter &r, const bool use_cache=true)
Determine whether a list of data expressions is inconsistent.
std::string pp(const data::sort_expression &x)
Definition data.cpp:69
void rewrite(T &x, Rewriter R, const Substitution &sigma, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition rewrite.h:119
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:144
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.
data_expression min(const data_expression &e1, const data_expression &e2, const rewriter &)
std::vector< basic_sort > basic_sort_vector
vector of basic sorts
Definition basic_sort.h:94
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:218
std::vector< function_symbol > function_symbol_vector
\brief vector of function_symbols
atermpp::term_list< untyped_identifier_assignment > untyped_identifier_assignment_list
\brief list of untyped_identifier_assignments
Definition assignment.h:242
data_specification parse_data_specification(const std::string &text)
Parses a and type checks a data specification.
Definition parse.h:79
std::vector< structured_sort_constructor_argument > structured_sort_constructor_argument_vector
\brief vector of structured_sort_constructor_arguments
void optimized_forall(Term &result, const VariableSequence &l, const Term &p, bool remove_variables=false)
Make a universal quantification.
std::string pp(const data::data_expression &x)
Definition data.cpp:52
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
atermpp::term_list< structured_sort_constructor > structured_sort_constructor_list
\brief list of structured_sort_constructors
std::string pp(const data::sort_expression_list &x)
Definition data.cpp:25
@ warning
Definition logger.h:34
@ verbose
Definition logger.h:37
bool mCRL2logEnabled(const log_level_t level)
Definition logger.h:383
constexpr bool EnableLineariseStatistics
If true, statistics are logged for the linearisation of allow and block operators.
void addActionCondition(const process::action &a, const data::data_expression &c, tuple_list &&L, tuple_list &S)
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)
data::mutable_map_substitution instantiate_global_variables(Specification &lpsspec)
Eliminates the global variables of an LPS, by substituting a constant value for them....
std::vector< core::identifier_string > get_actions(const process::action_name_multiset_list &allowlist)
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:21
lps_statistics_t get_statistics(const stochastic_action_summand_vector &action_summands, const deadlock_summand_vector &deadlock_summands)
Get statistics for action and deadlock summands.
std::set< core::identifier_string > find_identifiers(const T &x)
Definition find.h:105
void find_function_symbols(const T &x, OutputIterator o)
Definition find.h:138
std::vector< multi_action > multi_action_vector
\brief vector of multi_actions
std::string pp(const lps::stochastic_process_initializer &x)
Definition lps.cpp:36
std::string pp(const lps::stochastic_distribution &x)
Definition lps.cpp:34
std::set< data::variable > find_all_variables(const lps::linear_process &x)
Definition lps.cpp:44
void make_stochastic_distribution(atermpp::aterm &t, const ARGUMENTS &... args)
std::set< data::sort_expression > find_sort_expressions(const lps::stochastic_specification &x)
Definition lps.cpp:43
std::set< data::variable > find_free_variables(const lps::stochastic_specification &x)
Definition lps.cpp:53
multi_action rename(const process::rename_expression_list &renamings, const multi_action &multi_action)
void complete_data_specification(stochastic_specification &spec)
Adds all sorts that appear in the process of l to the data specification of l.
std::set< process::action_label > find_action_labels(const T &x)
Returns all action labels that occur in an object.
Definition find.h:181
std::vector< stochastic_action_summand > stochastic_action_summand_vector
\brief vector of stochastic_action_summands
std::vector< stochastic_process_initializer > stochastic_process_initializer_vector
\brief vector of stochastic_process_initializers
process::communication_expression_list sort_communications(const process::communication_expression_list &communications)
stochastic_action_summand rename(const process::rename_expression_list &renamings, const stochastic_action_summand &summand)
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:160
void swap(deadlock_summand &t1, deadlock_summand &t2)
\brief swap overload
core::identifier_string_list insert(const core::identifier_string &s, core::identifier_string_list l)
insert an action name into the list, while preserving the sorting of action names.
std::string pp_with_summand_numbers(const specification &x)
Definition lps.cpp:74
std::string pp(const lps::process_initializer &x)
Definition lps.cpp:31
bool operator!=(const stochastic_specification &spec1, const stochastic_specification &spec2)
Inequality operator.
process::action rename(const process::rename_expression_list &renamings, const process::action &action)
Apply renamings to a single action.
std::set< data::variable > find_all_variables(const lps::stochastic_specification &x)
Definition lps.cpp:47
process::action_list insert(const process::action &act, process::action_list l)
bool check_well_typedness(const specification &x)
Definition lps.cpp:102
bool is_stochastic_process_initializer(const atermpp::aterm &x)
bool implies_condition(const data::data_expression &c1, const data::data_expression &c2)
void swap(stochastic_distribution &t1, stochastic_distribution &t2)
\brief swap overload
void complete_data_specification(specification &spec)
Adds all sorts that appear in the process of l to the data specification of l.
bool allow_(const process::action_name_multiset_list &allow_list, 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< data::variable > find_free_variables(const lps::linear_process &x)
Definition lps.cpp:50
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.
atermpp::term_list< process_initializer > process_initializer_list
\brief list of process_initializers
std::string pp(const lps::stochastic_specification &x)
Definition lps.cpp:37
void rewrite(T &x, Rewriter R, const Substitution &sigma, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition rewrite.h:55
bool check_well_typedness(const linear_process &x)
Definition lps.cpp:92
atermpp::term_list< stochastic_process_initializer > stochastic_process_initializer_list
\brief list of stochastic_process_initializers
atermpp::term_list< action_summand > action_summand_list
\brief list of action_summands
void replace_variables_capture_avoiding(T &x, Substitution &sigma, data::set_identifier_generator &id_generator, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
void find_free_variables(const T &x, OutputIterator o)
Definition find.h:52
std::set< data::variable > find_all_variables(const T &x)
Definition find.h:40
std::set< data::function_symbol > find_function_symbols(const lps::stochastic_specification &x)
Definition lps.cpp:59
bool occursinterm(const data::data_expression &t, const data::variable &var)
void find_sort_expressions(const T &x, OutputIterator o)
Definition find.h:117
std::string pp(const lps::linear_process &x)
Definition lps.cpp:29
lps_statistics_t get_statistics(const stochastic_action_summand_vector &action_summands)
bool operator<(const stochastic_action_summand &x, const stochastic_action_summand &y)
Comparison operator for action summands.
void swap(stochastic_process_initializer &t1, stochastic_process_initializer &t2)
\brief swap overload
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:79
std::set< data::variable > find_free_variables_with_bound(const T &x, VariableContainer const &bound)
Definition find.h:84
std::vector< deadlock_summand > deadlock_summand_vector
\brief vector of deadlock_summands
void remove_parameters(Object &x, const std::set< data::variable > &to_be_removed)
Rewrites an LPS data type.
Definition remove.h:190
void replace_variables_capture_avoiding(T &x, Substitution &sigma, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
std::string pp(const lps::deadlock &x)
Definition lps.cpp:27
atermpp::term_list< stochastic_action_summand > stochastic_action_summand_list
\brief list of stochastic_action_summands
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:63
void swap(deadlock &t1, deadlock &t2)
\brief swap overload
Definition deadlock.h:108
bool allow_(const process::action_name_multiset &allow_action, const process::action_list &multi_action, const process::action &termination_action)
std::string description(const t_lin_method lin_method)
std::string pp(const lps::multi_action &x)
Definition lps.cpp:30
std::set< data::variable > find_free_variables(const lps::specification &x)
Definition lps.cpp:52
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:271
atermpp::term_list< multi_action > multi_action_list
\brief list of multi_actions
std::string log_rename_application(const lps_statistics_t &lps_statistics_before, const lps_statistics_t &lps_statistics_after, const std::size_t num_rename_expressions, size_t indent=0)
std::string pp(const lps::specification &x)
Definition lps.cpp:32
void normalize_sorts(lps::specification &x, const data::sort_specification &)
Definition lps.cpp:39
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:54
bool operator==(const specification &spec1, const specification &spec2)
Equality operator.
std::set< process::action_label > find_action_labels(const lps::linear_process &x)
Definition lps.cpp:62
lps::multi_action normalize_sorts(const lps::multi_action &x, const data::sort_specification &sortspec)
Definition lps.cpp:38
void swap(process_initializer &t1, process_initializer &t2)
\brief swap overload
std::set< data::variable > find_free_variables(const lps::stochastic_linear_process &x)
Definition lps.cpp:51
std::string print(const lps_statistics_t &stats, std::size_t indent=0)
Print statistics of lps as indented block in YAML format.
std::set< data::function_symbol > find_function_symbols(const lps::specification &x)
Definition lps.cpp:58
std::set< data::variable > find_free_variables(const lps::stochastic_process_initializer &x)
Definition lps.cpp:57
void communicationcomposition(const process::communication_expression_list &communications, const process::action_name_multiset_list &allowlist, const bool is_allow, const bool is_block, stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const process::action &terminationAction, const bool nosumelm, const bool nodeltaelimination, const bool ignore_time, const std::function< data::data_expression(const data::data_expression &)> &RewriteTerm)
atermpp::term_list< stochastic_distribution > stochastic_distribution_list
\brief list of stochastic_distributions
bool operator==(const stochastic_specification &spec1, const stochastic_specification &spec2)
process::action_list sort_actions(const process::action_list &actions, const std::function< bool(const process::action &, const process::action &)> &cmp=[](const process::action &t1, const process::action &t2){ return action_compare()(t1, t2);})
std::set< data::variable > find_free_variables(const lps::multi_action &x)
Definition lps.cpp:55
void insert_timed_delta_summand(const stochastic_action_summand_vector &action_summands, deadlock_summand_vector &deadlock_summands, const deadlock_summand &s, const bool ignore_time)
void swap(stochastic_action_summand &t1, stochastic_action_summand &t2)
\brief swap overload
void swap(action_summand &t1, action_summand &t2)
\brief swap overload
T replace_variables_capture_avoiding(const T &x, Substitution &sigma, data::set_identifier_generator &id_generator, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
void remove_redundant_assignments(Specification &lpsspec)
Removes redundant assignments of the form x = x from an LPS specification.
Definition remove.h:247
void swap(multi_action &t1, multi_action &t2)
\brief swap overload
atermpp::term_list< deadlock_summand > deadlock_summand_list
\brief list of deadlock_summands
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)
std::string pp(const lps::deadlock_summand &x)
Definition lps.cpp:28
bool operator!=(const specification &spec1, const specification &spec2)
Inequality operator.
void normalize_sorts(lps::stochastic_specification &x, const data::sort_specification &)
Definition lps.cpp:40
std::set< data::variable > find_free_variables(const lps::process_initializer &x)
Definition lps.cpp:56
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)
void rewrite(T &x, Rewriter R, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition rewrite.h:27
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.
stochastic_distribution replace_variables_capture_avoiding(const stochastic_distribution &x, data::data_expression_list &pars, Substitution &sigma, data::set_identifier_generator &id_generator)
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:211
bool check_well_typedness(const Object &o)
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:229
T rewrite(const T &x, Rewriter R, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition rewrite.h:40
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.
atermpp::term_list< deadlock > deadlock_list
\brief list of deadlocks
Definition deadlock.h:89
std::set< data::sort_expression > find_sort_expressions(const T &x)
Definition find.h:126
void make_stochastic_process_initializer(atermpp::aterm &t, ARGUMENTS... args)
std::istream & operator>>(std::istream &is, t_lin_method &l)
std::string pp(const lps::stochastic_linear_process &x)
Definition lps.cpp:35
void find_identifiers(const T &x, OutputIterator o)
Definition find.h:96
void rename(const process::rename_expression_list &renamings, lps::stochastic_action_summand_vector &action_summands)
void find_free_variables_with_bound(const T &x, OutputIterator o, const VariableContainer &bound)
Definition find.h:63
std::set< data::variable > find_free_variables(const T &x)
Definition find.h:72
process::action_name_multiset_list sort_multi_action_labels(const process::action_name_multiset_list &l)
std::vector< process_initializer > process_initializer_vector
\brief vector of process_initializers
std::set< data::variable > find_all_variables(const lps::multi_action &x)
Definition lps.cpp:49
atermpp::aterm linear_process_to_aterm(const linear_process_base< ActionSummand > &p)
Conversion to aterm.
T rewrite(const T &x, Rewriter R, const Substitution &sigma, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition rewrite.h:70
std::set< data::sort_expression > find_sort_expressions(const lps::specification &x)
Definition lps.cpp:42
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 print_lin_method(const t_lin_method lin_method)
String representation of a linearisation method.
std::vector< action_summand > action_summand_vector
\brief vector of action_summands
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)
void remove_trivial_summands(Specification &spec)
Removes summands with condition equal to false from a linear process specification.
Definition remove.h:199
bool operator<(const action_summand &x, const action_summand &y)
Comparison operator for action summands.
std::string pp(const lps::stochastic_action_summand &x)
Definition lps.cpp:33
T replace_variables_capture_avoiding(const T &x, Substitution &sigma, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
std::vector< stochastic_distribution > stochastic_distribution_vector
\brief vector of stochastic_distributions
std::set< data::variable > find_all_variables(const lps::specification &x)
Definition lps.cpp:46
bool subsumes(const stochastic_action_summand &as, const deadlock_summand &ds)
bool check_well_typedness(const stochastic_specification &x)
Definition lps.cpp:107
std::set< data::variable > find_all_variables(const lps::deadlock &x)
Definition lps.cpp:48
atermpp::aterm action_summand_to_aterm(const action_summand &s)
Conversion to aterm.
stochastic_distribution replace_variables_capture_avoiding(const stochastic_distribution &x, data::data_expression_list &pars, Substitution &sigma)
std::set< data::variable > find_all_variables(const lps::stochastic_linear_process &x)
Definition lps.cpp:45
bool check_well_typedness(const stochastic_linear_process &x)
Definition lps.cpp:97
bool subsumes(const deadlock_summand &ds1, const deadlock_summand &ds2)
Determine if delta summand ds1 subsumes delta summand ds2.
lps::multi_action translate_user_notation(const lps::multi_action &x)
Definition lps.cpp:41
void find_all_variables(const T &x, OutputIterator o)
Definition find.h:31
std::vector< deadlock > deadlock_vector
\brief vector of deadlocks
Definition deadlock.h:92
std::set< core::identifier_string > find_identifiers(const lps::stochastic_specification &x)
Definition lps.cpp:61
std::set< data::function_symbol > find_function_symbols(const T &x)
Definition find.h:147
void find_action_labels(const T &x, OutputIterator o)
Returns all action labels that occur in an object.
Definition find.h:172
atermpp::aterm action_summand_to_aterm(const stochastic_action_summand &s)
Conversion to aterm.
std::string pp(const lps::action_summand &x)
Definition lps.cpp:26
std::set< core::identifier_string > find_identifiers(const lps::specification &x)
Definition lps.cpp:60
process::action_list rename(const process::rename_expression_list &renamings, const process::action_list &actions)
process::action_name_multiset sort_action_names(const process::action_name_multiset &action_labels, const std::function< bool(const core::identifier_string &, const core::identifier_string &)> &cmp=[](const core::identifier_string &t1, const core::identifier_string &t2){ return action_name_compare()(t1, t2);})
std::string pp_with_summand_numbers(const stochastic_specification &x)
Definition lps.cpp:83
std::set< process::action_label > find_action_labels(const lps::specification &x)
Definition lps.cpp:64
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:151
process_specification parse_process_specification_new(const std::string &text)
Definition process.cpp:138
bool multi_actions_contains(const core::identifier_string_list &a, const action_name_multiset_list &A)
Definition typecheck.h:78
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:575
bool equal_multi_actions(core::identifier_string_list a1, core::identifier_string_list a2)
Definition typecheck.h:92
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:126
The main namespace for the Process library.
bool is_at(const atermpp::aterm &x)
void replace_sort_expressions(T &x, const Substitution &sigma, bool innermost, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:26
std::set< core::identifier_string > find_identifiers(const process::process_specification &x)
Definition process.cpp:80
void swap(delta &t1, delta &t2)
\brief swap overload
atermpp::term_list< process_equation > process_equation_list
\brief list of process_equations
std::string pp(const process::comm &x)
Definition process.cpp:43
void find_identifiers(const T &x, OutputIterator o)
Definition find.h:194
void swap(process_instance &t1, process_instance &t2)
\brief swap overload
void make_allow(atermpp::aterm &t, const ARGUMENTS &... args)
process::action normalize_sorts(const process::action &x, const data::sort_specification &sortspec)
Definition process.cpp:66
void complete_data_specification(process_specification &)
Adds all sorts that appear in the process specification spec to the data specification of spec.
T replace_variables_capture_avoiding(const T &x, Substitution &sigma, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
void normalize_sorts(process::process_equation_vector &x, const data::sort_specification &sortspec)
Definition process.cpp:68
std::set< data::variable > find_free_variables(const process::action &x)
Definition process.cpp:78
std::string pp(const process::action_vector &x)
Definition process.cpp:26
void make_choice(atermpp::aterm &t, const ARGUMENTS &... args)
T replace_process_identifiers(const T &x, const Substitution &sigma, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:197
std::string pp(const process::untyped_multi_action &x)
Definition process.cpp:64
std::vector< process_expression > process_expression_vector
\brief vector of process_expressions
void find_action_labels(const T &x, OutputIterator o)
Returns all action labels that occur in an object.
Definition find.h:258
void swap(action_label &t1, action_label &t2)
\brief swap overload
void make_process_identifier(atermpp::aterm &t, const ARGUMENTS &... args)
std::set< data::sort_expression > find_sort_expressions(const process::process_specification &x)
Definition process.cpp:76
bool is_process_instance(const atermpp::aterm &x)
std::string pp(const process::block &x)
Definition process.cpp:40
void swap(hide &t1, hide &t2)
\brief swap overload
process::action_label_list normalize_sorts(const process::action_label_list &x, const data::sort_specification &sortspec)
Definition process.cpp:67
std::string pp(const process::untyped_process_assignment &x)
Definition process.cpp:65
std::set< data::sort_expression > find_sort_expressions(const process::process_equation_vector &x)
Definition process.cpp:74
void replace_variables_capture_avoiding(T &x, Substitution &sigma, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
std::string pp(const process::at &x)
Definition process.cpp:39
void make_merge(atermpp::aterm &t, const ARGUMENTS &... args)
void replace_process_identifiers(T &x, const Substitution &sigma, typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value >::type *=0)
Definition replace.h:188
void replace_free_variables(T &x, const Substitution &sigma, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:113
std::string pp(const process::stochastic_operator &x)
Definition process.cpp:60
void make_at(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(untyped_multi_action &t1, untyped_multi_action &t2)
\brief swap overload
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:702
void normalize_sorts(process::process_specification &x, const data::sort_specification &)
Definition process.cpp:69
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:111
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:130
bool is_process_expression(const atermpp::aterm &x)
bool is_process_instance_assignment(const atermpp::aterm &x)
std::string pp(const process::process_specification &x)
Definition process.cpp:56
void swap(sync &t1, sync &t2)
\brief swap overload
void replace_variables_capture_avoiding(T &x, Substitution &sigma, data::set_identifier_generator &id_generator, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
void swap(communication_expression &t1, communication_expression &t2)
\brief swap overload
bool is_tau(const atermpp::aterm &x)
std::string pp(const process::process_instance &x)
Definition process.cpp:54
std::set< data::variable > find_free_variables(const T &x)
Definition find.h:170
std::string pp(const process::process_equation_list &x)
Definition process.cpp:33
void swap(merge &t1, merge &t2)
\brief swap overload
void make_action(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const process::action_label_list &x)
Definition process.cpp:27
bool is_seq(const atermpp::aterm &x)
void make_sync(atermpp::aterm &t, const ARGUMENTS &... args)
std::set< data::sort_expression > find_sort_expressions(const T &x)
Definition find.h:224
std::vector< rename_expression > rename_expression_vector
\brief vector of rename_expressions
bool is_merge(const atermpp::aterm &x)
std::string pp(const process::choice &x)
Definition process.cpp:42
std::string pp(const process::process_instance_assignment &x)
Definition process.cpp:55
std::set< data::sort_expression > find_sort_expressions(const process::action_label_list &x)
Definition process.cpp:73
void make_if_then_else(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_action_label(const atermpp::aterm &x)
std::string pp(const process::rename_expression &x)
Definition process.cpp:58
void make_hide(atermpp::aterm &t, const ARGUMENTS &... args)
std::vector< untyped_multi_action > untyped_multi_action_vector
\brief vector of untyped_multi_actions
T replace_free_variables(const T &x, const Substitution &sigma, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:125
void swap(choice &t1, choice &t2)
\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:278
bool is_allow(const atermpp::aterm &x)
atermpp::term_list< rename_expression > rename_expression_list
\brief list of rename_expressions
std::vector< communication_expression > communication_expression_vector
\brief vector of communication_expressions
void swap(if_then &t1, if_then &t2)
\brief swap overload
void swap(rename &t1, rename &t2)
\brief swap overload
bool is_process_specification(const atermpp::aterm &x)
Test for a process specification expression.
std::string pp(const process::process_identifier &x)
Definition process.cpp:53
void swap(process_equation &t1, process_equation &t2)
\brief swap overload
std::string pp(const process::action &x)
Definition process.cpp:35
void make_if_then(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(comm &t1, comm &t2)
\brief swap overload
void replace_data_expressions(T &x, const Substitution &sigma, bool innermost, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:48
T replace_free_variables(const T &x, const Substitution &sigma, const VariableContainer &bound_variables, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:152
void swap(tau &t1, tau &t2)
\brief swap overload
std::set< process::action_label > find_action_labels(const T &x)
Returns all action labels that occur in an object.
Definition find.h:267
bool is_bounded_init(const atermpp::aterm &x)
std::string pp(const process::seq &x)
Definition process.cpp:59
bool is_delta(const atermpp::aterm &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:687
void find_sort_expressions(const T &x, OutputIterator o)
Definition find.h:215
void replace_free_variables(T &x, const Substitution &sigma, const VariableContainer &bound_variables, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:139
std::vector< process_equation > process_equation_vector
\brief vector of process_equations
std::set< data::sort_expression > find_sort_expressions(const process::process_expression &x)
Definition process.cpp:75
void swap(left_merge &t1, left_merge &t2)
\brief swap overload
void make_block(atermpp::aterm &t, const ARGUMENTS &... args)
process::process_expression translate_user_notation(const process::process_expression &x)
Definition process.cpp:71
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:56
void swap(bounded_init &t1, bounded_init &t2)
\brief swap overload
std::string pp(const process::delta &x)
Definition process.cpp:45
bool is_process_identifier(const atermpp::aterm &x)
bool is_block(const atermpp::aterm &x)
void translate_user_notation(process::process_specification &x)
Definition process.cpp:72
void swap(stochastic_operator &t1, stochastic_operator &t2)
\brief swap overload
void swap(sum &t1, sum &t2)
\brief swap overload
bool is_if_then_else(const atermpp::aterm &x)
atermpp::term_list< process_expression > process_expression_list
\brief list of process_expressions
void make_action_label(atermpp::aterm &t, const ARGUMENTS &... args)
process::action translate_user_notation(const process::action &x)
Definition process.cpp:70
bool is_comm(const atermpp::aterm &x)
void find_function_symbols(const T &x, OutputIterator o)
Definition find.h:236
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:138
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:83
bool is_action(const atermpp::aterm &x)
std::string pp(const process::left_merge &x)
Definition process.cpp:49
std::string pp(const process::communication_expression &x)
Definition process.cpp:44
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:117
void normalize_sorts(T &x, const data::sort_specification &sortspec, typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
void swap(allow &t1, allow &t2)
\brief swap overload
std::set< core::identifier_string > find_identifiers(const T &x)
Definition find.h:203
bool is_left_merge(const atermpp::aterm &x)
std::string pp(const process::hide &x)
Definition process.cpp:46
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:28
T replace_all_variables(const T &x, const Substitution &sigma, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:100
atermpp::term_list< action_label > action_label_list
\brief list of action_labels
std::string pp(const process::process_identifier_list &x)
Definition process.cpp:29
void make_communication_expression(atermpp::aterm &t, const ARGUMENTS &... args)
std::vector< action > action_vector
\brief vector of actions
void swap(seq &t1, seq &t2)
\brief swap overload
void make_stochastic_operator(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_action_name_multiset(const atermpp::aterm &x)
T replace_sort_expressions(const T &x, const Substitution &sigma, bool innermost, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:36
std::string pp(const process::sum &x)
Definition process.cpp:61
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:89
std::string pp(const process::allow &x)
Definition process.cpp:38
std::string pp(const process::if_then_else &x)
Definition process.cpp:48
std::string pp(const process::process_expression_list &x)
Definition process.cpp:31
atermpp::term_list< action > action_list
\brief list of actions
void replace_variables(T &x, const Substitution &sigma, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:71
std::set< data::function_symbol > find_function_symbols(const T &x)
Definition find.h:245
bool is_untyped_multi_action(const atermpp::aterm &x)
std::string pp(const process::rename &x)
Definition process.cpp:57
void swap(process_expression &t1, process_expression &t2)
\brief swap overload
void make_process_instance(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const process::action_name_multiset &x)
Definition process.cpp:37
std::string pp(const process::tau &x)
Definition process.cpp:63
bool is_hide(const atermpp::aterm &x)
void replace_all_variables(T &x, const Substitution &sigma, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:91
T normalize_sorts(const T &x, const data::sort_specification &sortspec, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
std::string pp(const process::process_expression &x)
Definition process.cpp:52
void swap(if_then_else &t1, if_then_else &t2)
\brief swap overload
void swap(block &t1, block &t2)
\brief swap overload
data::sorts_list sorts_list_intersection(const data::sorts_list &sorts1, const data::sorts_list &sorts2)
Definition typecheck.h:43
bool is_if_then(const atermpp::aterm &x)
void find_free_variables(const T &x, OutputIterator o)
Definition find.h:150
std::string pp(const process::merge &x)
Definition process.cpp:50
void find_all_variables(const T &x, OutputIterator o)
Definition find.h:129
std::string pp(const process::bounded_init &x)
Definition process.cpp:41
void make_untyped_process_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_instance_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_choice(const atermpp::aterm &x)
bool operator==(const process_specification &spec1, const process_specification &spec2)
Equality operator.
void make_comm(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const process::action_list &x)
Definition process.cpp:25
process_identifier parse_process_identifier(std::string text, const data::data_specification &dataspec)
Parses a process identifier.
Definition parse.h:64
bool is_stochastic_operator(const atermpp::aterm &x)
T replace_variables(const T &x, const Substitution &sigma, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:80
void swap(process_instance_assignment &t1, process_instance_assignment &t2)
\brief swap overload
void swap(process_identifier &t1, process_identifier &t2)
\brief swap overload
bool is_process_equation(const atermpp::aterm &x)
atermpp::term_list< untyped_multi_action > untyped_multi_action_list
\brief list of untyped_multi_actions
atermpp::term_list< process_identifier > process_identifier_list
\brief list of process_identifiers
T replace_data_expressions(const T &x, const Substitution &sigma, bool innermost, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Definition replace.h:58
std::set< data::variable > find_free_variables_with_bound(const T &x, VariableContainer const &bound)
Definition find.h:182
void swap(action_name_multiset &t1, action_name_multiset &t2)
\brief swap overload
void find_free_variables_with_bound(const T &x, OutputIterator o, const VariableContainer &bound)
Definition find.h:161
void make_untyped_multi_action(atermpp::aterm &t, const ARGUMENTS &... args)
void make_bounded_init(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_rename_expression(const atermpp::aterm &x)
std::vector< action_name_multiset > action_name_multiset_vector
\brief vector of action_name_multisets
std::set< data::variable > find_free_variables(const process::process_specification &x)
Definition process.cpp:79
atermpp::term_list< communication_expression > communication_expression_list
\brief list of communication_expressions
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:290
void make_process_equation(atermpp::aterm &t, const ARGUMENTS &... args)
void make_action_name_multiset(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(rename_expression &t1, rename_expression &t2)
\brief swap overload
bool operator!=(const process_specification &spec1, const process_specification &spec2)
Inequality operator.
atermpp::term_list< action_name_multiset > action_name_multiset_list
\brief list of action_name_multisets
std::set< data::variable > find_all_variables(const process::action &x)
Definition process.cpp:77
bool is_rename(const atermpp::aterm &x)
std::vector< action_label > action_label_vector
\brief vector of action_labels
process_expression parse_process_expression(const std::string &text, const std::string &procspec_text)
Parses and type checks a process expression.
Definition parse.h:105
bool is_untyped_process_assignment(const atermpp::aterm &x)
void make_rename(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const process::if_then &x)
Definition process.cpp:47
void make_seq(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sync(const atermpp::aterm &x)
T replace_variables_capture_avoiding(const T &x, Substitution &sigma, data::set_identifier_generator &id_generator, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
void make_sum(atermpp::aterm &t, const ARGUMENTS &... args)
process_specification parse_process_specification(std::istream &in)
Parses a process specification from an input stream.
Definition parse.h:43
std::string pp(const process::action_label &x)
Definition process.cpp:36
std::string pp(const process::sync &x)
Definition process.cpp:62
std::string pp(const process::process_equation &x)
Definition process.cpp:51
bool equal_signatures(const action &a, const action &b)
Compares the signatures of two actions.
void swap(at &t1, at &t2)
\brief swap overload
void swap(action &t1, action &t2)
\brief swap overload
std::vector< process_identifier > process_identifier_vector
\brief vector of process_identifiers
void swap(untyped_process_assignment &t1, untyped_process_assignment &t2)
\brief swap overload
void make_left_merge(atermpp::aterm &t, const ARGUMENTS &... args)
std::pair< std::string, std::string > separate_keyword_section(const std::string &text1, const std::string &keyword, const std::vector< std::string > &all_keywords, bool repeat_keyword=false)
std::string read_text(std::istream &in)
Read text from a stream.
void trim(std::string &text)
Remove all trailing and leading spaces from the input.
std::string regex_replace(const std::string &src, const std::string &dest, const std::string &text)
Regular expression replacement in a string.
std::string trim_copy(const std::string &text)
Remove all trailing and leading spaces from the input.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
void swap(atermpp::aterm &t1, atermpp::aterm &t2) noexcept
Swaps two term_applss.
Definition aterm.h:475
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
static const atermpp::function_symbol Rename
static const atermpp::function_symbol Allow
static const atermpp::function_symbol ProcEqn
static const atermpp::function_symbol Delta
static const atermpp::function_symbol ProcessAssignment
static const atermpp::function_symbol IfThenElse
static const atermpp::function_symbol Hide
static const atermpp::function_symbol UntypedProcessAssignment
static const atermpp::function_symbol ActId
static const atermpp::function_symbol TimedMultAct
static const atermpp::function_symbol ProcVarId
static const atermpp::function_symbol BInit
static const atermpp::function_symbol RenameExpr
static const atermpp::function_symbol UntypedMultiAction
static const atermpp::function_symbol StochasticOperator
static const atermpp::function_symbol LinProcSpec
static const atermpp::function_symbol Choice
static const atermpp::function_symbol Sync
static const atermpp::function_symbol Sum
static const atermpp::function_symbol ProcSpec
static const atermpp::function_symbol Action
static const atermpp::function_symbol CommExpr
static const atermpp::function_symbol Comm
static const atermpp::function_symbol AtTime
static const atermpp::function_symbol MultActName
static const atermpp::function_symbol LinearProcess
static const atermpp::function_symbol Process
static const atermpp::function_symbol Merge
static const atermpp::function_symbol LinearProcessInit
static const atermpp::function_symbol Block
static const atermpp::function_symbol Seq
static const atermpp::function_symbol IfThen
static const atermpp::function_symbol Distribution
static const atermpp::function_symbol LMerge
static const atermpp::function_symbol Tau
Contains type information for terms.
Definition term_traits.h:24
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
normalize_sorts_function(const sort_specification &sort_spec)
Builder< rewrite_data_expressions_builder< Builder, Rewriter > > super
Definition rewrite.h:27
void apply(T &result, const data_expression &x)
Definition rewrite.h:40
Builder< rewrite_data_expressions_with_substitution_builder< Builder, Rewriter, Substitution > > super
Definition rewrite.h:56
rewrite_data_expressions_with_substitution_builder(Rewriter R_, Substitution sigma_)
Definition rewrite.h:65
A unary function that can be used in combination with replace_data_expressions to eliminate real numb...
fourier_motzkin_sigma(const rewriter &rewr_)
const data_expression operator()(const data_expression &d) const
const data_expression apply(const abstraction &d, bool negate) const
Generic substitution function. The substitution is stored as a mapping of variables to expressions.
const expression_type operator()(const variable_type &v) const
const AssociativeContainer & m_map
map_substitution(const AssociativeContainer &m)
AssociativeContainer::mapped_type expression_type
AssociativeContainer::key_type variable_type
bool operator()(const process::action &a1, const process::action &a2) const
bool operator()(const process::action_label &a1, const process::action_label &a2) const
\brief Traverser class
Definition traverser.h:599
bool operator()(const core::identifier_string &s1, const core::identifier_string &s2) const
void update(lps::action_summand &x)
Definition builder.h:230
void apply(T &result, const lps::stochastic_process_initializer &x)
Definition builder.h:318
void update(lps::linear_process &x)
Definition builder.h:254
void apply(T &result, const lps::multi_action &x)
Definition builder.h:212
void apply(T &result, const lps::stochastic_distribution &x)
Definition builder.h:273
void update(lps::specification &x)
Definition builder.h:262
void update(lps::deadlock &x)
Definition builder.h:202
void update(lps::stochastic_linear_process &x)
Definition builder.h:299
void apply(T &result, const lps::process_initializer &x)
Definition builder.h:246
void update(lps::stochastic_action_summand &x)
Definition builder.h:281
void update(lps::deadlock_summand &x)
Definition builder.h:220
void update(lps::stochastic_specification &x)
Definition builder.h:307
Builder< Derived > super
Definition builder.h:196
Maintains a multiset of bound data variables during traversal.
Definition add_binding.h:26
void enter(const stochastic_specification &x)
Definition add_binding.h:96
void leave(const stochastic_process_initializer &x)
void enter(const action_summand &x)
Definition add_binding.h:34
void leave(const stochastic_specification &x)
data::add_data_variable_binding< Builder, Derived > super
Definition add_binding.h:27
void leave(const deadlock_summand &x)
Definition add_binding.h:61
void leave(const linear_process &x)
Definition add_binding.h:71
void enter(const stochastic_linear_process &x)
Definition add_binding.h:76
void leave(const action_summand &x)
Definition add_binding.h:39
void leave(const stochastic_linear_process &x)
Definition add_binding.h:81
void enter(const specification &x)
Definition add_binding.h:86
void enter(const deadlock_summand &x)
Definition add_binding.h:56
void enter(const stochastic_action_summand &x)
Definition add_binding.h:44
void leave(const specification &x)
Definition add_binding.h:91
void enter(const linear_process &x)
Definition add_binding.h:66
void enter(const stochastic_process_initializer &x)
void leave(const stochastic_action_summand &x)
Definition add_binding.h:50
add_data_variable_binding< Builder, Derived > super
void apply(T &result, data::where_clause &x)
add_data_variable_binding< Builder, Derived > super
void apply(const data::where_clause &x)
void update(lps::deadlock &x)
Definition builder.h:35
void update(lps::stochastic_specification &x)
Definition builder.h:159
void update(lps::specification &x)
Definition builder.h:104
void apply(T &result, const lps::process_initializer &x)
Definition builder.h:85
void apply(T &result, const lps::stochastic_process_initializer &x)
Definition builder.h:174
void update(lps::action_summand &x)
Definition builder.h:66
Builder< Derived > super
Definition builder.h:29
void apply(T &result, const lps::stochastic_distribution &x)
Definition builder.h:119
void update(lps::stochastic_linear_process &x)
Definition builder.h:148
void update(lps::stochastic_action_summand &x)
Definition builder.h:127
void apply(T &result, const lps::multi_action &x)
Definition builder.h:45
void update(lps::linear_process &x)
Definition builder.h:93
void update(lps::deadlock_summand &x)
Definition builder.h:53
void apply(const lps::action_summand &x)
Definition traverser.h:550
void apply(const lps::multi_action &x)
Definition traverser.h:543
void apply(const lps::specification &x)
Definition traverser.h:564
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:572
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:579
void apply(const lps::stochastic_specification &x)
Definition traverser.h:586
void apply(const lps::linear_process &x)
Definition traverser.h:557
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:243
void apply(const lps::multi_action &x)
Definition traverser.h:175
void apply(const lps::deadlock &x)
Definition traverser.h:165
void apply(const lps::stochastic_specification &x)
Definition traverser.h:251
void apply(const lps::specification &x)
Definition traverser.h:218
void apply(const lps::deadlock_summand &x)
Definition traverser.h:186
void apply(const lps::action_summand &x)
Definition traverser.h:194
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:233
void apply(const lps::stochastic_distribution &x)
Definition traverser.h:226
void apply(const lps::linear_process &x)
Definition traverser.h:210
void apply(const lps::stochastic_process_initializer &x)
Definition traverser.h:259
void apply(const lps::process_initializer &x)
Definition traverser.h:203
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:498
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:487
void apply(const lps::action_summand &x)
Definition traverser.h:443
void apply(const lps::specification &x)
Definition traverser.h:469
void apply(const lps::process_initializer &x)
Definition traverser.h:453
void apply(const lps::stochastic_distribution &x)
Definition traverser.h:479
void apply(const lps::linear_process &x)
Definition traverser.h:460
void apply(const lps::deadlock_summand &x)
Definition traverser.h:434
void apply(const lps::stochastic_process_initializer &x)
Definition traverser.h:517
void apply(const lps::stochastic_specification &x)
Definition traverser.h:507
void apply(const lps::multi_action &x)
Definition traverser.h:423
void apply(const lps::deadlock &x)
Definition traverser.h:413
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:109
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:120
void apply(const lps::stochastic_specification &x)
Definition traverser.h:129
void apply(const lps::stochastic_process_initializer &x)
Definition traverser.h:139
void apply(const lps::stochastic_distribution &x)
Definition traverser.h:101
void apply(const lps::multi_action &x)
Definition traverser.h:45
void apply(const lps::process_initializer &x)
Definition traverser.h:75
void apply(const lps::action_summand &x)
Definition traverser.h:65
void apply(const lps::specification &x)
Definition traverser.h:91
void apply(const lps::deadlock_summand &x)
Definition traverser.h:56
void apply(const lps::deadlock &x)
Definition traverser.h:35
void apply(const lps::linear_process &x)
Definition traverser.h:82
void apply(const lps::linear_process &x)
Definition traverser.h:332
void apply(const lps::specification &x)
Definition traverser.h:341
void apply(const lps::stochastic_process_initializer &x)
Definition traverser.h:387
void apply(const lps::deadlock &x)
Definition traverser.h:285
void apply(const lps::stochastic_linear_process &x)
Definition traverser.h:369
void apply(const lps::multi_action &x)
Definition traverser.h:295
void apply(const lps::action_summand &x)
Definition traverser.h:315
void apply(const lps::stochastic_action_summand &x)
Definition traverser.h:358
void apply(const lps::deadlock_summand &x)
Definition traverser.h:306
void apply(const lps::stochastic_distribution &x)
Definition traverser.h:350
void apply(const lps::stochastic_specification &x)
Definition traverser.h:378
void apply(const lps::process_initializer &x)
Definition traverser.h:325
Builder< Derived > super
Definition builder.h:339
void update(lps::action_summand &x)
Definition builder.h:376
void update(lps::deadlock &x)
Definition builder.h:345
void apply(T &result, const lps::multi_action &x)
Definition builder.h:355
void apply(T &result, const lps::stochastic_process_initializer &x)
Definition builder.h:478
void update(lps::specification &x)
Definition builder.h:414
void apply(T &result, const lps::stochastic_distribution &x)
Definition builder.h:426
void update(lps::linear_process &x)
Definition builder.h:403
void update(lps::stochastic_action_summand &x)
Definition builder.h:434
void update(lps::stochastic_specification &x)
Definition builder.h:466
void apply(T &result, const lps::process_initializer &x)
Definition builder.h:395
void update(lps::stochastic_linear_process &x)
Definition builder.h:455
void update(lps::deadlock_summand &x)
Definition builder.h:363
process::detail::add_capture_avoiding_replacement< Builder, Derived, Substitution > super
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:39
is_singleton_sort(const data::data_specification &data_spec)
Definition remove.h:42
bool operator()(const data::sort_expression &s) const
Definition remove.h:46
const data::data_specification & m_data_spec
Definition remove.h:40
Function object that checks if a summand has a false condition.
Definition remove.h:28
bool operator()(const summand_base &s) const
Definition remove.h:29
Traverser for removing parameters from LPS data types. These parameters can be either process paramet...
Definition remove.h:61
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:104
void apply(T &result, const stochastic_process_initializer &x)
Definition remove.h:159
void apply(T &result, const process_initializer &x)
Definition remove.h:152
void update(std::set< data::variable > &x)
Removes parameters from a set container.
Definition remove.h:76
const std::set< data::variable > & to_be_removed
Definition remove.h:68
void apply(atermpp::term_list< T > &result, const data::variable_list &x)
Removes parameters from a list of variables.
Definition remove.h:86
void update(linear_process &x)
Removes parameters from a linear_process.
Definition remove.h:114
data_expression_builder< remove_parameters_builder > super
Definition remove.h:62
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:133
void update(stochastic_specification &x)
Removes parameters from a linear process specification.
Definition remove.h:178
void update(specification &x)
Removes parameters from a linear process specification.
Definition remove.h:169
remove_parameters_builder(const std::set< data::variable > &to_be_removed_)
Definition remove.h:71
void update(stochastic_linear_process &x)
Removes parameters from a linear_process.
Definition remove.h:124
std::vector< process::action_list > actions
std::vector< data::data_expression > conditions
tuple_list(std::vector< process::action_list > &&actions_, std::vector< data::data_expression > &&conditions_)
tuple_list(const std::vector< process::action_list > &actions_, const std::vector< data::data_expression > &conditions_)
Data structure to store the statistics about summands in a linear process.
std::optional< size_t > deadlock_summand_count
Options for linearisation.
Definition linearise.h:28
t_lin_method lin_method
Definition linearise.h:29
mcrl2::data::rewriter::strategy rewrite_strategy
Definition linearise.h:44
\brief Builder class
Definition builder.h:491
\brief Traverser class
Definition traverser.h:400
void apply(T &result, const process::process_equation &x)
Definition builder.h:419
void apply(T &result, const process::rename &x)
Definition builder.h:513
void apply(T &result, const process::left_merge &x)
Definition builder.h:603
void apply(T &result, const process::bounded_init &x)
Definition builder.h:585
void apply(T &result, const process::process_expression &x)
Definition builder.h:639
void apply(T &result, const process::block &x)
Definition builder.h:495
void apply(T &result, const process::merge &x)
Definition builder.h:594
void apply(T &result, const process::sync &x)
Definition builder.h:540
void apply(T &result, const process::choice &x)
Definition builder.h:612
void apply(T &result, const process::if_then &x)
Definition builder.h:567
void apply(T &result, const process::action &x)
Definition builder.h:437
void apply(T &result, const process::delta &x)
Definition builder.h:464
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:455
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:630
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:621
void update(process::process_specification &x)
Definition builder.h:408
void apply(T &result, const process::allow &x)
Definition builder.h:531
void apply(T &result, const process::at &x)
Definition builder.h:549
void apply(T &result, const process::sum &x)
Definition builder.h:486
void apply(T &result, const process::seq &x)
Definition builder.h:558
void apply(T &result, const process::tau &x)
Definition builder.h:475
void apply(T &result, const process::comm &x)
Definition builder.h:522
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:428
void apply(T &result, const process::hide &x)
Definition builder.h:504
void apply(T &result, const process::if_then_else &x)
Definition builder.h:576
void apply(T &result, const process::process_instance &x)
Definition builder.h:446
Maintains a multiset of bound data variables during traversal.
Definition add_binding.h:27
void enter(const process::stochastic_operator &x)
Definition add_binding.h:46
void leave(const process::stochastic_operator &x)
Definition add_binding.h:51
void enter(const process::sum &x)
Definition add_binding.h:36
void leave(const process::sum &x)
Definition add_binding.h:41
data::add_data_variable_binding< Builder, Derived > super
Definition add_binding.h:28
void apply(T &result, const data::where_clause &x)
Definition add_binding.h:92
add_data_variable_binding< Builder, Derived > super
Definition add_binding.h:83
void apply(const data::where_clause &x)
Definition add_binding.h:70
add_data_variable_binding< Builder, Derived > super
Definition add_binding.h:62
void apply(T &result, const process::sync &x)
Definition builder.h:1246
void apply(T &result, const process::rename &x)
Definition builder.h:1219
void apply(T &result, const process::if_then_else &x)
Definition builder.h:1282
void apply(T &result, const process::process_equation &x)
Definition builder.h:1128
void apply(T &result, const process::bounded_init &x)
Definition builder.h:1291
void apply(T &result, const process::at &x)
Definition builder.h:1255
void apply(T &result, const process::if_then &x)
Definition builder.h:1273
void apply(T &result, const process::choice &x)
Definition builder.h:1318
void apply(T &result, const process::tau &x)
Definition builder.h:1181
void apply(T &result, const process::merge &x)
Definition builder.h:1300
void apply(T &result, const process::left_merge &x)
Definition builder.h:1309
void apply(T &result, const process::sum &x)
Definition builder.h:1192
void apply(T &result, const process::seq &x)
Definition builder.h:1264
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:1336
void apply(T &result, const process::block &x)
Definition builder.h:1201
void apply(T &result, const process::allow &x)
Definition builder.h:1237
void apply(T &result, const process::action &x)
Definition builder.h:1137
void apply(T &result, const process::hide &x)
Definition builder.h:1210
void apply(T &result, const process::process_expression &x)
Definition builder.h:1347
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:1159
void apply(T &result, const process::comm &x)
Definition builder.h:1228
void apply(T &result, const process::delta &x)
Definition builder.h:1170
void apply(T &result, const process::process_instance &x)
Definition builder.h:1148
void update(process::process_specification &x)
Definition builder.h:1117
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:1327
void apply(T &result, const process::process_expression &x)
Definition builder.h:1702
void apply(T &result, const process::process_identifier &x)
Definition builder.h:1476
void apply(T &result, const process::process_instance &x)
Definition builder.h:1507
void apply(T &result, const process::delta &x)
Definition builder.h:1525
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:1516
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:1682
void apply(T &result, const process::choice &x)
Definition builder.h:1673
void apply(T &result, const process::at &x)
Definition builder.h:1610
void apply(T &result, const process::merge &x)
Definition builder.h:1655
void apply(T &result, const process::if_then &x)
Definition builder.h:1628
void apply(T &result, const process::comm &x)
Definition builder.h:1583
void apply(T &result, const process::process_equation &x)
Definition builder.h:1487
void apply(T &result, const process::left_merge &x)
Definition builder.h:1664
void apply(T &result, const process::sync &x)
Definition builder.h:1601
void apply(T &result, const process::tau &x)
Definition builder.h:1536
void update(process::process_specification &x)
Definition builder.h:1465
void apply(T &result, const process::hide &x)
Definition builder.h:1565
void apply(T &result, const process::if_then_else &x)
Definition builder.h:1637
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:1691
void apply(T &result, const process::rename &x)
Definition builder.h:1574
void apply(T &result, const process::seq &x)
Definition builder.h:1619
void apply(T &result, const process::block &x)
Definition builder.h:1556
void apply(T &result, const process::sum &x)
Definition builder.h:1547
void apply(T &result, const process::bounded_init &x)
Definition builder.h:1646
void apply(T &result, const process::action &x)
Definition builder.h:1496
void apply(T &result, const process::allow &x)
Definition builder.h:1592
void update(process::process_specification &x)
Definition builder.h:45
void apply(T &result, const process::sync &x)
Definition builder.h:190
void apply(T &result, const process::choice &x)
Definition builder.h:262
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:105
void apply(T &result, const process::process_instance &x)
Definition builder.h:96
void apply(T &result, const process::merge &x)
Definition builder.h:244
void apply(T &result, const process::seq &x)
Definition builder.h:208
void apply(T &result, const process::if_then &x)
Definition builder.h:217
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:78
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:271
void apply(T &result, const process::action &x)
Definition builder.h:87
void apply(T &result, const process::delta &x)
Definition builder.h:114
void apply(T &result, const process::if_then_else &x)
Definition builder.h:226
void apply(T &result, const process::left_merge &x)
Definition builder.h:253
void apply(T &result, const process::process_equation &x)
Definition builder.h:69
void apply(T &result, const process::hide &x)
Definition builder.h:154
void apply(T &result, const process::allow &x)
Definition builder.h:181
void apply(T &result, const process::rename &x)
Definition builder.h:163
void apply(T &result, const process::comm &x)
Definition builder.h:172
void apply(T &result, const process::sum &x)
Definition builder.h:136
void apply(T &result, const process::bounded_init &x)
Definition builder.h:235
void apply(T &result, const process::action_label &x)
Definition builder.h:37
void apply(T &result, const process::block &x)
Definition builder.h:145
void apply(T &result, const process::at &x)
Definition builder.h:199
void apply(T &result, const process::tau &x)
Definition builder.h:125
void apply(T &result, const process::process_identifier &x)
Definition builder.h:60
void apply(T &result, const process::process_expression &x)
Definition builder.h:289
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:280
void apply(const process::sync &x)
Definition traverser.h:1735
void apply(const process::if_then_else &x)
Definition traverser.h:1765
void apply(const process::block &x)
Definition traverser.h:1700
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:1812
void apply(const process::bounded_init &x)
Definition traverser.h:1773
void apply(const process::sum &x)
Definition traverser.h:1693
void apply(const process::hide &x)
Definition traverser.h:1707
void apply(const process::process_specification &x)
Definition traverser.h:1642
void apply(const process::action &x)
Definition traverser.h:1658
void apply(const process::left_merge &x)
Definition traverser.h:1789
void apply(const process::process_expression &x)
Definition traverser.h:1819
void apply(const process::comm &x)
Definition traverser.h:1721
void apply(const process::rename &x)
Definition traverser.h:1714
void apply(const process::tau &x)
Definition traverser.h:1686
void apply(const process::process_instance_assignment &x)
Definition traverser.h:1672
void apply(const process::action_label &x)
Definition traverser.h:1635
void apply(const process::stochastic_operator &x)
Definition traverser.h:1805
void apply(const process::choice &x)
Definition traverser.h:1797
void apply(const process::process_equation &x)
Definition traverser.h:1651
void apply(const process::if_then &x)
Definition traverser.h:1758
void apply(const process::process_instance &x)
Definition traverser.h:1665
void apply(const process::delta &x)
Definition traverser.h:1679
void apply(const process::merge &x)
Definition traverser.h:1781
void apply(const process::allow &x)
Definition traverser.h:1728
void apply(const process::seq &x)
Definition traverser.h:1750
void apply(const process::left_merge &x)
Definition traverser.h:522
void apply(const process::choice &x)
Definition traverser.h:530
void apply(const process::stochastic_operator &x)
Definition traverser.h:538
void apply(const process::action &x)
Definition traverser.h:388
void apply(const process::allow &x)
Definition traverser.h:458
void apply(const process::if_then_else &x)
Definition traverser.h:497
void apply(const process::process_specification &x)
Definition traverser.h:366
void apply(const process::bounded_init &x)
Definition traverser.h:506
void apply(const process::untyped_multi_action &x)
Definition traverser.h:381
void apply(const process::process_instance &x)
Definition traverser.h:395
void apply(const process::delta &x)
Definition traverser.h:409
void apply(const process::merge &x)
Definition traverser.h:514
void apply(const process::process_expression &x)
Definition traverser.h:553
void apply(const process::block &x)
Definition traverser.h:430
void apply(const process::process_equation &x)
Definition traverser.h:374
void apply(const process::if_then &x)
Definition traverser.h:489
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:546
void apply(const process::process_instance_assignment &x)
Definition traverser.h:402
void apply(const process::rename &x)
Definition traverser.h:444
void apply(const process::process_expression &x)
Definition traverser.h:1519
void apply(const process::process_specification &x)
Definition traverser.h:1286
void apply(const process::bounded_init &x)
Definition traverser.h:1470
void apply(const process::untyped_multi_action &x)
Definition traverser.h:1336
void apply(const process::process_identifier &x)
Definition traverser.h:1296
void apply(const process::communication_expression &x)
Definition traverser.h:1321
void apply(const process::process_equation &x)
Definition traverser.h:1304
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:1511
void apply(const process::if_then_else &x)
Definition traverser.h:1461
void apply(const process::rename_expression &x)
Definition traverser.h:1313
void apply(const process::action_name_multiset &x)
Definition traverser.h:1329
void apply(const process::left_merge &x)
Definition traverser.h:1486
void apply(const process::stochastic_operator &x)
Definition traverser.h:1502
void apply(const process::if_then &x)
Definition traverser.h:1453
void apply(const process::process_instance &x)
Definition traverser.h:1351
void apply(const process::process_instance_assignment &x)
Definition traverser.h:1359
void apply(const process::action_label &x)
Definition traverser.h:1278
void apply(const process::process_instance &x)
Definition traverser.h:691
void apply(const process::process_expression &x)
Definition traverser.h:845
void apply(const process::left_merge &x)
Definition traverser.h:815
void apply(const process::stochastic_operator &x)
Definition traverser.h:831
void apply(const process::if_then_else &x)
Definition traverser.h:791
void apply(const process::if_then &x)
Definition traverser.h:784
void apply(const process::process_instance_assignment &x)
Definition traverser.h:698
void apply(const process::bounded_init &x)
Definition traverser.h:799
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:838
void apply(const process::process_specification &x)
Definition traverser.h:669
void apply(const process::process_equation &x)
Definition traverser.h:677
void apply(const process::process_instance &x)
Definition traverser.h:88
void apply(const process::process_equation &x)
Definition traverser.h:64
void apply(const process::process_specification &x)
Definition traverser.h:47
void apply(const process::block &x)
Definition traverser.h:126
void apply(const process::process_identifier &x)
Definition traverser.h:57
void apply(const process::rename &x)
Definition traverser.h:140
void apply(const process::allow &x)
Definition traverser.h:154
void apply(const process::delta &x)
Definition traverser.h:104
void apply(const process::merge &x)
Definition traverser.h:210
void apply(const process::action &x)
Definition traverser.h:80
void apply(const process::action_label &x)
Definition traverser.h:40
void apply(const process::process_instance_assignment &x)
Definition traverser.h:96
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:243
void apply(const process::bounded_init &x)
Definition traverser.h:202
void apply(const process::choice &x)
Definition traverser.h:226
void apply(const process::if_then &x)
Definition traverser.h:185
void apply(const process::stochastic_operator &x)
Definition traverser.h:234
void apply(const process::process_expression &x)
Definition traverser.h:250
void apply(const process::left_merge &x)
Definition traverser.h:218
void apply(const process::untyped_multi_action &x)
Definition traverser.h:73
void apply(const process::if_then_else &x)
Definition traverser.h:193
void apply(const process::sync &x)
Definition traverser.h:1073
void apply(const process::process_equation &x)
Definition traverser.h:977
void apply(const process::comm &x)
Definition traverser.h:1059
void apply(const process::bounded_init &x)
Definition traverser.h:1114
void apply(const process::if_then_else &x)
Definition traverser.h:1105
void apply(const process::choice &x)
Definition traverser.h:1138
void apply(const process::tau &x)
Definition traverser.h:1023
void apply(const process::allow &x)
Definition traverser.h:1066
void apply(const process::process_instance &x)
Definition traverser.h:1000
void apply(const process::merge &x)
Definition traverser.h:1122
void apply(const process::process_specification &x)
Definition traverser.h:961
void apply(const process::process_identifier &x)
Definition traverser.h:970
void apply(const process::at &x)
Definition traverser.h:1081
void apply(const process::sum &x)
Definition traverser.h:1030
void apply(const process::untyped_multi_action &x)
Definition traverser.h:986
void apply(const process::left_merge &x)
Definition traverser.h:1130
void apply(const process::stochastic_operator &x)
Definition traverser.h:1146
void apply(const process::process_instance_assignment &x)
Definition traverser.h:1008
void apply(const process::if_then &x)
Definition traverser.h:1097
void apply(const process::hide &x)
Definition traverser.h:1045
void apply(const process::seq &x)
Definition traverser.h:1089
void apply(const process::process_expression &x)
Definition traverser.h:1162
void apply(const process::rename &x)
Definition traverser.h:1052
void apply(const process::block &x)
Definition traverser.h:1038
void apply(const process::untyped_process_assignment &x)
Definition traverser.h:1155
void apply(const process::delta &x)
Definition traverser.h:1016
void apply(const process::action &x)
Definition traverser.h:993
void apply(T &result, const process::process_instance &x)
Definition builder.h:805
void apply(T &result, const process::choice &x)
Definition builder.h:971
void apply(T &result, const process::sync &x)
Definition builder.h:899
void apply(T &result, const process::sum &x)
Definition builder.h:845
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:980
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:989
void apply(T &result, const process::allow &x)
Definition builder.h:890
void apply(T &result, const process::bounded_init &x)
Definition builder.h:944
void apply(T &result, const process::comm &x)
Definition builder.h:881
void apply(T &result, const process::block &x)
Definition builder.h:854
void apply(T &result, const process::tau &x)
Definition builder.h:834
void apply(T &result, const process::action &x)
Definition builder.h:796
void apply(T &result, const process::left_merge &x)
Definition builder.h:962
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:787
void apply(T &result, const process::merge &x)
Definition builder.h:953
void apply(T &result, const process::seq &x)
Definition builder.h:917
void apply(T &result, const process::delta &x)
Definition builder.h:823
void apply(T &result, const process::hide &x)
Definition builder.h:863
void apply(T &result, const process::at &x)
Definition builder.h:908
Builder< Derived > super
Definition builder.h:751
void apply(T &result, const process::process_identifier &x)
Definition builder.h:769
void apply(T &result, const process::if_then_else &x)
Definition builder.h:935
void update(process::process_specification &x)
Definition builder.h:757
void apply(T &result, const process::process_equation &x)
Definition builder.h:778
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:814
void apply(T &result, const process::rename &x)
Definition builder.h:872
void apply(T &result, const process::if_then &x)
Definition builder.h:926
void apply(T &result, const process::process_expression &x)
Definition builder.h:998
data::detail::add_capture_avoiding_replacement< Builder, Derived, Substitution > super
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:180
void check_action_declared(const core::identifier_string &a, const process_expression &x)
Definition typecheck.h:158
action typecheck_action(const core::identifier_string &name, const data::data_expression_list &parameters)
Definition typecheck.h:237
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:140
void apply(T &result, const untyped_process_assignment &x)
Definition typecheck.h:285
const detail::process_context & m_process_context
Definition typecheck.h:136
void apply(T &result, const process::stochastic_operator &x)
Definition typecheck.h:555
void apply(T &result, const data::untyped_data_parameter &x)
Definition typecheck.h:345
data::data_type_checker & m_data_type_checker
Definition typecheck.h:134
void apply(T &result, const process::hide &x)
Definition typecheck.h:369
process_instance typecheck_process_instance(const core::identifier_string &name, const data::data_expression_list &parameters)
Definition typecheck.h:242
void apply(T &result, const process::if_then &x)
Definition typecheck.h:520
void check_rename_common_type(const core::identifier_string &a, const core::identifier_string &b, const process_expression &x)
Definition typecheck.h:204
bool is_action_name(const core::identifier_string &name)
Definition typecheck.h:227
void check_actions_declared(const core::identifier_string_list &act_list, const process_expression &x)
Definition typecheck.h:166
bool is_process_name(const core::identifier_string &name)
Definition typecheck.h:232
static std::map< core::identifier_string, data::data_expression > make_assignment_map(const data::untyped_identifier_assignment_list &assignments)
Definition typecheck.h:212
void check_not_equal(const T &first, const T &second, const std::string &msg, const process_expression &x)
Definition typecheck.h:189
void apply(T &result, const process::sum &x)
Definition typecheck.h:537
static bool has_empty_intersection(const data::sorts_list &s1, const data::sorts_list &s2)
Definition typecheck.h:197
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:264
void apply(T &result, const process::allow &x)
Definition typecheck.h:486
data::detail::variable_context m_variable_context
Definition typecheck.h:135
process_expression_builder< typecheck_builder > super
Definition typecheck.h:131
const process_identifier * m_current_equation
Definition typecheck.h:138
void apply(T &result, const process::block &x)
Definition typecheck.h:379
data::sorts_list action_sorts(const core::identifier_string &name)
Definition typecheck.h:153
void apply(T &result, const process::action &x)
Definition typecheck.h:363
void apply(T &result, const process::rename &x)
Definition typecheck.h:387
std::string print_untyped_process_assignment(const untyped_process_assignment &x) const
Definition typecheck.h:250
void apply(T &result, const process::if_then_else &x)
Definition typecheck.h:527
void apply(T &result, const process::at &x)
Definition typecheck.h:513
void apply(T &result, const process::comm &x)
Definition typecheck.h:408
const detail::action_context & m_action_context
Definition typecheck.h:137
process_identifier_assignment(const process_identifier &lhs_, const process_identifier &rhs_)
Definition replace.h:173
process_identifier operator()(const process_identifier &x) const
Definition replace.h:177
\brief Builder class
Definition builder.h:1102
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 atermpp::aterm &t) const
Definition aterm.h:483
std::size_t operator()(const atermpp::detail::reference_aterm< T > &t) const
std::size_t operator()(const mcrl2::lps::multi_action &ma) const
std::size_t operator()(const mcrl2::process::action &t) const