12#ifndef MCRL2_PROCESS_ALLOW_SET_H
13#define MCRL2_PROCESS_ALLOW_SET_H
23std::ostream&
operator<<(std::ostream& out,
const allow_set& x);
32 std::set<core::identifier_string>
I;
36 return A.empty() &&
I.empty();
48 alpha.insert(*
I.begin());
88 explicit allow_set(
const multi_action_name_set& A_,
bool A_includes_subsets_ =
false,
const std::set<core::identifier_string>& I_ = std::set<core::identifier_string>())
112 result.insert(alpha);
134 if (
A.size() != other.
A.size())
136 return A.size() < other.
A.size();
138 if (
I.size() != other.
I.size())
140 return I.size() < other.
I.size();
142 auto m = std::mismatch(
A.begin(),
A.end(), other.
A.begin());
143 if (m.first !=
A.end())
145 return *m.first < *m.second;
162 if (x.
A.empty() && x.
I.empty())
171namespace alphabet_operations {
197 result.insert(alpha);
207 bool removed =
false;
216 result.insert(alpha);
224 return { result, removed };
231 std::pair<multi_action_name_set, bool> A1A2 =
bounded_concat(A1, A2, A);
293 mCRL2log(
log::trace) <<
"rename_inverse(" << R <<
", " << x <<
") = " << result << std::endl;
301 mCRL2log(
log::trace) <<
"comm_inverse(" << C <<
", " << x <<
") = " << result << std::endl;
323 if (result.
A.size() <= 1000)
329 mCRL2log(
log::debug) <<
"allow_set::subsets: skipped remove_subsets on a set of " << result.
A.size() <<
" elements." << std::endl;
add your file description here.
Term containing a string.
const_iterator end() const
Returns a const_iterator pointing to the end of the term_list.
const_iterator begin() const
Returns a const_iterator pointing to the beginning of the term_list.
const_iterator end() const
const_iterator begin() const
\brief A multiset of action names
\brief The allow operator
\brief The block operator
Standard exception class for reporting runtime errors.
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
std::string pp(const identifier_string &x)
allow_set left_arrow(const allow_set &x, const multi_action_name_set &A)
std::pair< multi_action_name_set, bool > bounded_concat(const multi_action_name_set &A1, const multi_action_name_set &A2, const allow_set &A)
multi_action_name_set set_union(const multi_action_name_set &A1, const multi_action_name_set &A2)
multi_action_name_set remove_subsets(const multi_action_name_set &A)
allow_set hide_inverse(const core::identifier_string_list &I, const allow_set &x)
multi_action_name_set left_arrow2(const multi_action_name_set &A, const std::set< core::identifier_string > &I, const multi_action_name_set &A2)
multi_action_name_set set_intersection(const allow_set &A1, const multi_action_name_set &A)
multi_action_name multiset_union(const multi_action_name &alpha, const multi_action_name &beta)
bool subset_includes(const allow_set &A, const multi_action_name &alpha)
bool includes(const multi_action_name &x, const multi_action_name &y)
bool contains(const multi_action_name &alpha, const core::identifier_string &a)
std::pair< multi_action_name_set, bool > bounded_left_merge(const multi_action_name_set &A1, const multi_action_name_set &A2, const allow_set &A)
allow_set block(const core::identifier_string_list &B, const allow_set &x)
multi_action_name hide(const multi_action_name &alpha, const std::set< core::identifier_string > &I)
std::pair< multi_action_name_set, bool > bounded_merge(const multi_action_name_set &A1, const multi_action_name_set &A2, const allow_set &A)
std::pair< multi_action_name_set, bool > bounded_sync(const multi_action_name_set &A1, const multi_action_name_set &A2, const allow_set &A)
multi_action_name_set comm_inverse1(const communication_expression_list &C, const multi_action_name_set &A)
allow_set rename_inverse(const rename_expression_list &R, const allow_set &x)
allow_set subsets(const allow_set &x)
allow_set comm_inverse(const communication_expression_list &C, const allow_set &x)
std::string pp(const action_label &x)
std::set< multi_action_name > multi_action_name_set
Represents a set of multi action names.
multi_action_name_set alphabet(const process_expression &x, const std::vector< process_equation > &equations)
std::ostream & operator<<(std::ostream &out, const action_label &x)
bool contains(const atermpp::indexed_set< Key, ThreadSafe, Hash, Equals, Allocator, KeyTable > &c, const typename atermpp::indexed_set< Key, ThreadSafe, Hash, Equals, Allocator, KeyTable >::key_type &v, const std::size_t thread_index=0)
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
void swap(atermpp::unprotected_aterm_core &t1, atermpp::unprotected_aterm_core &t2) noexcept
Swaps two aterms.
add your file description here.
Represents the set AI*. If the attribute A_includes_subsets is true, also subsets of the elements are...
bool operator==(const allow_set &other) const
bool contains(const multi_action_name &alpha) const
Returns true if the allow set contains the multi action name alpha.
multi_action_name_set intersect(const multi_action_name_set &alphabet) const
Returns the intersection of the allow set with alphabet.
allow_set(const multi_action_name_set &A_, bool A_includes_subsets_=false, const std::set< core::identifier_string > &I_=std::set< core::identifier_string >())
bool check_invariant() const
std::set< core::identifier_string > I
multi_action_name pick_element() const
bool operator<(const allow_set &other) const
void establish_invariant()
Represents the name of a multi action.