60#define USE_SIMPLE_LIST
66#define USE_POOL_ALLOCATOR
86 #define ONLY_IF_POOL_ALLOCATOR(...) __VA_ARGS__
88 #error "Using the pool allocator also requires using the simple list"
106 template <
class T, std::size_t NR_ELEMENTS = 4000>
109 static_assert(std::is_trivially_destructible_v<T>);
111 static_assert(
sizeof(
void*) <=
sizeof(T));
115 char data[NR_ELEMENTS *
sizeof(T)]{};
116 pool_block_t* next_block;
118 pool_block_t(pool_block_t*
const new_next_block)
119 : next_block(new_next_block)
121 };
static_assert(
sizeof(T) <=
sizeof(pool_block_t::data));
125 pool_block_t* first_block;
128 void* begin_used_in_first_block;
131 void* first_free_T =
nullptr;
133 static void*& deref_void(
void* addr)
135 return *
static_cast<
void**>(addr);
140 : first_block(
new pool_block_t(
nullptr)),
141 begin_used_in_first_block(
142 &first_block->data[
sizeof(first_block->data)])
149 pool_block_t* block(first_block); assert(
nullptr != block);
152 pool_block_t* next_block = block->next_block;
156 while(
nullptr != block);
163 template <
class U,
class... Args>
164 U* construct_samesize(Args&&... args)
165 {
static_assert(
sizeof(T) ==
sizeof(U));
166 void* new_el; assert(
nullptr != first_block);
167 if (first_block->data +
sizeof(U) <= begin_used_in_first_block)
169 begin_used_in_first_block =
170 new_el =
static_cast<
char*>(begin_used_in_first_block) -
173 else if (
nullptr != first_free_T)
177 new_el = first_free_T;
178 first_free_T = deref_void(new_el);
182 first_block =
new pool_block_t(first_block);
183 begin_used_in_first_block =
184 new_el = &first_block->data[
sizeof(first_block->data) -
187 return new(new_el) U(std::forward<Args>(args)...);
193 template <
class U,
class... Args>
194 U* construct_othersize(Args&&... args)
195 {
static_assert(
sizeof(U) !=
sizeof(T));
196 void* new_el; assert(
nullptr != first_block);
197 if (first_block->data +
sizeof(U) <= begin_used_in_first_block)
199 begin_used_in_first_block =
200 new_el =
static_cast<
char*>(begin_used_in_first_block) -
205 if constexpr (
sizeof(T) * 2 <
sizeof(U))
209 while (first_block->data +
sizeof(T) <=
210 begin_used_in_first_block)
212 begin_used_in_first_block =
static_cast<
char*>
213 (begin_used_in_first_block) -
sizeof(T);
214 deref_void(begin_used_in_first_block) = first_free_T;
215 first_free_T = begin_used_in_first_block;
218 else if constexpr (
sizeof(T) <
sizeof(U))
222 if (first_block->data +
sizeof(T) <=
223 begin_used_in_first_block)
225 begin_used_in_first_block =
static_cast<
char*>
226 (begin_used_in_first_block) -
sizeof(T);
227 deref_void(begin_used_in_first_block) = first_free_T;
228 first_free_T = begin_used_in_first_block;
230 } assert(first_block->data +
sizeof(T) > begin_used_in_first_block);
231 first_block =
new pool_block_t(first_block);
232 begin_used_in_first_block =
233 new_el = &first_block->data[
sizeof(first_block->data) -
236 return new(new_el) U(std::forward<Args>(args)...);
240 template <
class U,
class... Args>
241 U* construct(Args&&... args)
243 static_assert(std::is_trivially_destructible_v<U>);
244 if constexpr (
sizeof(U) ==
sizeof(T))
246 return construct_samesize<U>(std::forward<Args>(args)...);
249 {
static_assert(
sizeof(U) <=
sizeof(first_block->data));
250 return construct_othersize<U>(std::forward<Args>(args)...);
262 void destroy(U*
const old_el)
263 {
static_assert(
sizeof(T) ==
sizeof(U));
265 static_assert(std::is_trivially_destructible_v<U>);
268 static std::less<
const void*>
const total_order;
269 for (
const pool_block_t* block(first_block);
270 assert(
nullptr != block),
271 total_order(old_el, block->data) ||
272 total_order(&block->data[
sizeof(block->data)], old_el + 1);
273 block = block->next_block )
276 deref_void(old_el) = first_free_T;
277 first_free_T =
static_cast<
void*>(old_el);
281 #define ONLY_IF_POOL_ALLOCATOR(...)
297 class const_iterator;
312 friend class simple_list;
313 friend class const_iterator;
314 friend class my_pool<entry>;
316 template <
class... Args>
317 entry(entry*
const new_next, entry*
const new_prev, Args&&... args)
320 data(std::forward<Args>(args)...)
330 static my_pool<entry>& get_pool()
332 static my_pool<entry> pool;
342 using value_type = T;
344 using reference = T&;
345 using difference_type = std::ptrdiff_t;
346 using iterator_category = std::forward_iterator_tag;
350 const_iterator(
const entry*
const new_ptr)
351 : ptr(
const_cast<entry*>(new_ptr))
354 friend class simple_list;
356 const_iterator() =
default;
357 const_iterator(
const const_iterator& other) =
default;
358 const_iterator& operator=(
const const_iterator& other) =
default;
360 const_iterator& operator++()
361 { assert(
nullptr != ptr);
366 const_iterator& operator--()
367 { assert(
nullptr != ptr);
368 ptr = ptr->prev; assert(
nullptr != ptr->next);
372 const_iterator operator++(
int)
373 { assert(
nullptr != ptr);
374 const_iterator temp(*
this);
379 const_iterator operator--(
int)
380 { assert(
nullptr != ptr);
381 const_iterator temp(*
this);
382 ptr = ptr->prev; assert(
nullptr != ptr->next);
386 const T& operator*()
const
387 { assert(
nullptr != ptr);
391 const T* operator->()
const
392 { assert(
nullptr != ptr);
396 bool operator==(
const const_iterator& other)
const
398 return ptr == other.ptr;
401 bool operator==(
const T*
const other)
const
402 { assert(
nullptr != other);
404 return ptr !=
nullptr && operator->() == other;
410 class iterator :
public const_iterator
413 using typename const_iterator::value_type;
414 using typename const_iterator::pointer;
415 using typename const_iterator::reference;
416 using typename const_iterator::difference_type;
417 using typename const_iterator::iterator_category;
419 iterator(entry*
const new_ptr) : const_iterator(new_ptr) { }
421 friend class simple_list;
423 iterator() =
default;
425 iterator(
const iterator& other) =
default;
427 iterator& operator=(
const iterator& other) =
default;
429 iterator& operator++(){const_iterator::operator++();
return *
this;}
431 iterator& operator--(){const_iterator::operator--();
return *
this;}
433 iterator operator++(
int)
435 iterator temp(*
this);
436 const_iterator::operator++();
440 iterator operator--(
int)
442 iterator temp(*
this);
443 const_iterator::operator--();
449 return const_cast<T&>(const_iterator::operator*());
452 T* operator->()
const
454 return const_cast<T*>(const_iterator::operator->());
462 class iterator_or_null :
public iterator
465 using typename iterator::value_type;
466 using typename iterator::pointer;
467 using typename iterator::reference;
468 using typename iterator::difference_type;
469 using typename iterator::iterator_category;
470 using iterator::operator*;
471 using iterator::operator->;
473 iterator_or_null() : iterator() { }
475 iterator_or_null(std::nullptr_t) : iterator()
477 const_iterator::ptr =
nullptr;
480 iterator_or_null(
const iterator& other) : iterator(other) { }
482 bool is_null()
const {
return nullptr == const_iterator::ptr; }
484 iterator_or_null& operator=(std::nullptr_t)
486 const_iterator::ptr =
nullptr;
495 static_assert(std::is_trivially_destructible_v<entry>);
502 for (iterator iter = begin(); end() != iter; )
504 iterator next = std::next(iter);
512 bool empty()
const {
return nullptr==first; }
515 iterator begin() {
return iterator(first); }
518 static iterator end() {
return iterator(
nullptr); }
521 const_iterator cbegin()
const {
return const_iterator(first); }
524 static const_iterator cend() {
return end(); }
527 const_iterator begin()
const {
return cbegin(); }
530 iterator before_end()
532 return iterator(first->prev);
535 const_iterator before_end()
const
537 return const_iterator(first->prev);
549 return first->prev->data;
552 bool check_linked_list()
const
558 const_iterator i = first;
559 if (
nullptr == i.ptr->prev)
563 while (
nullptr != i.ptr->next)
565 if (i.ptr->next->prev != i.ptr)
570 assert(i.ptr->prev->next == i.ptr);
572 return first->prev == i.ptr;
576 template<
class... Args>
577 iterator emplace(iterator pos, Args&&... args)
578 { assert(end()==pos || !empty()); assert(end()==pos ||
nullptr!=pos.ptr->prev);
580 assert(check_linked_list());
582 {
for(const_iterator i=begin(); i!=pos; ++i) { assert(end()!=i); } }
584 entry*
const prev = end() == pos
585 ? (empty() ?
nullptr : first->prev)
587 entry*
const new_entry(
589 get_pool().
template construct<entry>
593 (pos.ptr, prev, std::forward<Args>(args)...));
601 else if (
nullptr != prev)
605 prev->next = new_entry;
609 pos.ptr->prev = new_entry;
612 { assert(
nullptr != first);
613 first->prev = new_entry;
614 } assert(check_linked_list());
616 assert((end() == pos ? before_end() : pos.ptr->prev) == new_entry);
617 for (const_iterator i=begin(); i != new_entry; ++i) { assert(end() != i); }
619 return iterator(new_entry);
624 template <
class... Args>
625 iterator emplace_back(Args&&... args)
627 return emplace(end(), std::forward<Args>(args)...);
633 template<
class... Args>
634 iterator emplace_after(iterator pos, Args&&... args)
635 { assert(end()==pos || !empty()); assert(end()==pos || end()!=pos.ptr->prev);
637 assert(check_linked_list());
639 for (const_iterator i = begin(); i != pos; ++i) { assert(end() != i); }
642 entry*
const next = end() == pos ? begin().ptr : pos.ptr->next;
643 entry*
const new_entry(
645 get_pool().
template construct<entry>
649 (next, pos.ptr, std::forward<Args>(args)...));
655 new_entry->prev = empty() ? new_entry : before_end().ptr;
660 pos.ptr->next = new_entry;
661 } assert(
nullptr != first);
664 first->prev = new_entry;
668 next->prev = new_entry;
669 } assert(check_linked_list());
671 assert((end() == pos ? first : pos.ptr->next) == new_entry);
672 for (const_iterator i=begin(); i != new_entry; ++i) { assert(end() != i); }
674 return iterator(new_entry);
679 template<
class... Args>
680 iterator emplace_front(Args&&... args)
682 return emplace_after(end(), std::forward<Args>(args)...);
690 void splice_to_after(iterator
const to_pos, simple_list<T>& from_list,
691 iterator
const from_pos)
692 { assert(from_pos != to_pos);
694 assert(check_linked_list());
695 if (end() != to_pos) {
696 assert(!empty()); assert(
nullptr != to_pos.ptr->prev);
697 for(const_iterator i = begin(); i!=to_pos; ++i) { assert(end() != i); }
699 assert(end() != from_pos); assert(
nullptr != from_pos.ptr->prev);
700 assert(!from_list.empty()); assert(from_list.check_linked_list());
701 for (const_iterator i = from_list.begin(); i != from_pos; ++i) {
702 assert(from_list.end() != i);
705 if (from_pos.ptr != from_list.first)
706 { assert(
nullptr != from_list.first->next);
707 assert(from_pos == from_pos.ptr->prev->next);
708 from_pos.ptr->prev->next = from_pos.ptr->next;
709 if (
nullptr != from_pos.ptr->next)
711 assert(from_pos == from_pos.ptr->next->prev);
712 from_pos.ptr->next->prev = from_pos.ptr->prev;
716 assert(from_pos == from_list.first->prev);
717 from_list.first->prev = from_pos.ptr->prev;
722 assert(
nullptr == from_pos.ptr->prev->next);
723 from_list.first = from_pos.ptr->next;
724 if (!from_list.empty())
726 assert(from_pos == from_pos.ptr->next->prev);
727 from_pos.ptr->next->prev = from_pos.ptr->prev;
740 from_pos.ptr->prev = before_end().ptr;
744 first = from_pos.ptr;
748 from_pos.ptr->prev = to_pos.ptr;
749 next = to_pos.ptr->next;
750 to_pos.ptr->next = from_pos.ptr;
751 } assert(
nullptr != first);
752 from_pos.ptr->next = next;
755 first->prev = from_pos.ptr;
759 next->prev = from_pos.ptr;
760 } assert(check_linked_list()); assert(from_list.check_linked_list());
762 assert(from_pos == (end() == to_pos ? first : to_pos.ptr->next));
763 for (const_iterator i=begin(); i!=from_pos; ++i) { assert(i!=end()); }
764 if (end() != to_pos) {
765 for (const_iterator i=begin(); i!=to_pos; ++i) { assert(end() != i); }
777 void splice(iterator
const to_pos, simple_list<T>& from_list,
778 iterator
const from_pos)
779 { assert(from_pos != to_pos); assert(end() == to_pos || !empty());
781 assert(end() == to_pos ||
nullptr != to_pos.ptr->prev);
782 assert(check_linked_list());
783 if (end() != to_pos) {
784 for (const_iterator i=begin(); i!=to_pos; ++i) { assert(end() != i); }
786 assert(from_list.end() != from_pos); assert(
nullptr != from_pos.ptr->prev);
787 assert(!from_list.empty()); assert(from_list.check_linked_list());
788 for (const_iterator i=from_list.begin(); i!=from_pos; ++i) {
789 assert(from_list.end() != i);
792 if (from_pos != from_list.first)
793 { assert(
nullptr != from_list.first->next);
794 assert(from_pos.ptr == from_pos.ptr->prev->next);
795 from_pos.ptr->prev->next = from_pos.ptr->next;
796 if (
nullptr != from_pos.ptr->next)
798 assert(from_pos.ptr == from_pos.ptr->next->prev);
799 from_pos.ptr->next->prev = from_pos.ptr->prev;
803 assert(from_pos.ptr == from_list.first->prev);
804 from_list.first->prev = from_pos.ptr->prev;
809 assert(
nullptr == from_pos.ptr->prev->next);
810 from_list.first = from_pos.ptr->next;
811 if (!from_list.empty())
813 assert(from_pos.ptr == from_pos.ptr->next->prev);
814 from_pos.ptr->next->prev = from_pos.ptr->prev;
819 from_pos.ptr->next = to_pos.ptr;
825 from_pos.ptr->prev = from_pos.ptr;
826 first = from_pos.ptr; assert(check_linked_list()); assert(from_list.check_linked_list());
829 from_pos.ptr->prev = before_end().ptr;
830 from_pos.ptr->prev->next = from_pos.ptr;
831 first->prev = from_pos.ptr;
836 from_pos.ptr->prev = to_pos.ptr->prev;
837 to_pos.ptr->prev = from_pos.ptr;
838 if (to_pos.ptr == first)
842 first = from_pos.ptr;
846 from_pos.ptr->prev->next = from_pos.ptr;
848 } assert(check_linked_list()); assert(from_list.check_linked_list());
850 assert((end() == to_pos ? before_end().ptr
851 : iterator(to_pos.ptr->prev)) == from_pos.ptr);
852 for (const_iterator i=begin(); i != from_pos; ++i) { assert(end() != i); }
853 if (end() != to_pos) {
854 for (const_iterator i=begin(); i!=to_pos; ++i) { assert(end() != i); }
861 void erase(iterator
const pos)
862 { assert(end() != pos); assert(
nullptr != pos.ptr->prev); assert(!empty());
864 assert(check_linked_list());
865 for (const_iterator i = begin(); i != pos; ++i) { assert(end() != i); }
868 { assert(
nullptr != first->next);
869 assert(pos.ptr == pos.ptr->prev->next);
870 pos.ptr->prev->next = pos.ptr->next;
871 if (
nullptr != pos.ptr->next)
873 assert(pos.ptr == pos.ptr->next->prev);
874 pos.ptr->next->prev = pos.ptr->prev;
878 assert(pos.ptr == first->prev);
879 first->prev = pos.ptr->prev;
884 assert(
nullptr == pos.ptr->prev->next);
885 first = pos.ptr->next;
888 assert(pos.ptr == pos.ptr->next->prev);
889 pos.ptr->next->prev = pos.ptr->prev;
893 get_pool().destroy(pos.ptr);
906 iterator next(iterator pos)
910 { assert(end() != pos);
912 for (const_iterator i = begin(); i != pos; ++i) { assert(end() != i); }
914 return iterator(pos.ptr->next);
924 const_iterator next(const_iterator pos)
928 { assert(end() != pos);
930 for (const_iterator i = begin(); i != pos; ++i) { assert(end() != i); }
932 return const_iterator(pos.ptr->next);
939 iterator prev(iterator pos)
const
940 { assert(pos!=end());
942 for (const_iterator i = begin(); i != pos; ++i) { assert(end() != i); }
944 return begin() == pos ? end() : iterator(pos.ptr->prev);
951 const_iterator prev(const_iterator pos)
const
952 { assert(end() != pos);
954 for (const_iterator i = begin(); i != pos; ++i) { assert(end() != i); }
956 return begin() == pos ? end() : const_iterator(pos.ptr->prev);
960 bool operator==(
const simple_list& other)
const
962 const_iterator it = cbegin();
963 const_iterator other_it = other.cbegin();
966 if (cend() == other_it || *it != *other_it)
973 return end()==other_it;
978 using iterator_or_null_t =
typename simple_list<El>::iterator_or_null;
980 #define simple_list std::list
1071 if constexpr (
sizeof(
null) ==
sizeof(
iter))
#define mCRL2complexity(unit, call, info_for_debug)
Assigns work to a counter and checks for errors.
aterm & operator=(const aterm &other) noexcept=default
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
std::size_t m_top_of_stack
static constexpr std::size_t maximal_size_of_stack
std::array< unprotected_aterm_core, maximal_size_of_stack > m_stack
void initialise(const term_balanced_tree< Term > &tree)
const Term & dereference() const
Dereference operator.
iterator(const iterator &other)
bool equal(const iterator &other) const
Equality operator.
iterator(const term_balanced_tree< Term > &tree)
void increment()
Increments the iterator.
bool is_node() const
Returns true iff the tree is a node with a left and right subtree.
static void make_tree_helper(aterm &result, ForwardTraversalIterator &p, const std::size_t size, Transformer transformer)
term_balanced_tree & operator=(const term_balanced_tree &) noexcept=default
Assignment operator.
size_type size() const
Returns the size of the term_balanced_tree.
term_balanced_tree(term_balanced_tree &&) noexcept=default
Move constructor.
bool empty() const
Returns true if tree is empty.
static const aterm & empty_tree()
static void make_tree(aterm &result, ForwardTraversalIterator &p, const std::size_t size, Transformer transformer)
term_balanced_tree(ForwardTraversalIterator first, const std::size_t size)
Creates an term_balanced_tree with a copy of a range.
static const function_symbol & tree_single_node_function()
const aterm & left_branch() const
Get the left branch of the tree.
term_balanced_tree(const term_balanced_tree &) noexcept=default
Copy constructor.
term_balanced_tree(ForwardTraversalIterator first, const std::size_t size, Transformer transformer)
Creates an term_balanced_tree with a copy of a range, where a transformer is applied to each term bef...
static const function_symbol & tree_node_function()
const Term & operator[](std::size_t position) const
Element indexing operator.
iterator begin() const
Returns an iterator pointing to the beginning of the term_balanced_tree.
iterator end() const
Returns an iterator pointing to the end of the term_balanced_tree.
term_balanced_tree()
Default constructor. Creates an empty tree.
const aterm & right_branch() const
Get the left branch of the tree.
term_balanced_tree & operator=(term_balanced_tree &&) noexcept=default
Move assign operator.
term_balanced_tree(const aterm &tree)
Construction from aterm.
const Term & element_at(std::size_t position, std::size_t size) const
Get an element at the indicated position.
static const function_symbol & tree_empty_function()
friend void make_term_balanced_tree(term_balanced_tree< Term1 > &result, ForwardTraversalIterator p, std::size_t size, Transformer transformer)
term_balanced_tree(detail::_term_appl *t)
A unordered_map class in which aterms can be stored.
data_expression & operator=(data_expression &&) noexcept=default
sort_expression sort() const
Returns the sort of the data expression.
data_expression(const data_expression &) noexcept=default
Move semantics.
data_expression(data_expression &&) noexcept=default
Rewriter that operates on data expressions.
data_expression operator()(const data_expression &d) const
Rewrites a data expression.
void add_sort(const basic_sort &s)
Adds a sort to this specification.
\brief An untyped parameter
Action rename specification.
\brief A timed multi-action
multi_action(const multi_action &) noexcept=default
Move semantics.
const process::action_list & actions() const
multi_action(const process::action_list &actions=process::action_list(), data::data_expression time=data::undefined_real())
Constructor. Actions are sorted to establish the sorted-storage invariant.
This class contains labels for probabilistic transistions, consisting of a numerator and a denumerato...
static const data::rewriter & m_rewriter()
static probabilistic_data_expression one()
Constant one.
probabilistic_data_expression operator+(const probabilistic_data_expression &other) const
Standard addition operator. Note that the expression is not evaluated. For this the rewriter has to b...
probabilistic_data_expression(const data::data_expression &d)
Construct a probabilistic_data_expression from a data_expression, which must be of sort real.
bool operator==(const probabilistic_data_expression &other) const
probabilistic_data_expression(std::size_t enumerator, std::size_t denominator)
bool operator!=(const probabilistic_data_expression &other) const
bool operator>=(const probabilistic_data_expression &other) const
bool operator<(const probabilistic_data_expression &other) const
bool operator<=(const probabilistic_data_expression &other) const
bool operator>(const probabilistic_data_expression &other) const
probabilistic_data_expression(const std::string &enumerator, const std::string &denominator)
probabilistic_data_expression operator-(const probabilistic_data_expression &other) const
Standard subtraction operator.
static data::data_specification data_specification_with_real()
probabilistic_data_expression()
static probabilistic_data_expression zero()
Constant zero.
Linear process specification.
STATE & state()
Get the state in a state probability pair.
PROBABILITY m_probability
state_probability_pair(state_probability_pair &&p)=default
state_probability_pair & operator=(state_probability_pair &&p)=default
state_probability_pair(const state_probability_pair &p)=default
Copy constructor;.
state_probability_pair & operator=(const state_probability_pair &p)=default
Standard assignment.
const PROBABILITY & probability() const
get the probability from a state proability pair.
const STATE & state() const
Get the state from a state probability pair.
PROBABILITY & probability()
Set the probability in a state probability pair.
state_probability_pair(const STATE &state, const PROBABILITY &probability)
constructor.
bool operator==(const state_probability_pair &other) const
Standard equality operator.
Linear process specification.
A class containing the values for action labels for the .lts format.
action_label_lts & operator=(const action_label_lts &)=default
Copy assignment.
void hide_actions(const std::vector< std::string > &tau_actions)
Hide the actions with labels in tau_actions.
action_label_lts(const action_label_lts &)=default
Copy constructor.
static const action_label_lts & tau_action()
action_label_lts(const mcrl2::lps::multi_action &a)
Constructor.
action_label_lts()=default
Default constructor.
void set_truths(formula &f)
Compute and set the truth values of a formula f.
block_index_type target(observation_t obs)
state_type max_state_index
level_type gca_level(const block_index_type B1, const block_index_type B2)
Auxiliarry function that computes the level of the greatest common ancestor. In other words a lvl i s...
std::vector< block > blocks
std::vector< state_type > block_index_of_a_state
label_type label(observation_t obs)
bisim_partitioner_minimal_depth(LTS_TYPE &l, const std::size_t init_l2)
Creates a bisimulation partitioner for an LTS.
std::set< block_index_type > partition
mcrl2::state_formulas::state_formula dist_formula_mindepth(const std::size_t s, const std::size_t t)
Creates a state formula that distinguishes state s from state t.
formula distinguish(const block_index_type b1, const block_index_type b2)
Creates a formula that distinguishes a block b1 from the block b2.
std::vector< block_index_type > BL
~bisim_partitioner_minimal_depth()=default
Destroys this partitioner.
std::vector< bool > block_flags
std::vector< block_index_type > to_be_processed
regular_formulas::regular_formula create_regular_formula(const mcrl2::lps::multi_action &a) const
create_regular_formula Creates a regular formula that represents action a
bool in_same_class(const std::size_t s, const std::size_t t)
block_index_type lift_block(const block_index_type B1, level_type goal)
mcrl2::state_formulas::state_formula conjunction(std::vector< formula > &conjunctions)
conjunction Creates a conjunction of state formulas
std::vector< bool > state_flags
mcrl2::state_formulas::state_formula convert_formula(formula &f)
void split_BL(level_type lvl)
Performs the splits based on the blocks in Bsplit and the flags set in state_flags.
bool refine_partition(level_type lvl)
std::vector< bool > block_flags
state_type max_state_index
mcrl2::state_formulas::state_formula conjunction(std::set< mcrl2::state_formulas::state_formula > terms) const
conjunction Creates a conjunction of state formulas
regular_formulas::regular_formula create_regular_formula(const mcrl2::lts::action_label_string &a) const
create_regular_formula Creates a regular formula that represents action a
regular_formulas::regular_formula create_regular_formula(const mcrl2::lps::multi_action &a) const
create_regular_formula Creates a regular formula that represents action a
std::vector< bool > block_is_in_to_be_processed
std::vector< bool > state_flags
std::map< block_index_type, block_index_type > right_child
std::vector< block_index_type > BL
bool in_same_class(const std::size_t s, const std::size_t t) const
Returns whether two states are in the same bisimulation equivalence class.
mcrl2::state_formulas::state_formula until_formula(const mcrl2::state_formulas::state_formula &phi1, const label_type &a, const mcrl2::state_formulas::state_formula &phi2)
until_formula Creates a state formula that corresponds to the until operator phi1phi2 from HMLU
std::size_t get_eq_class(const std::size_t s) const
Gives the bisimulation equivalence class number of a state.
bisim_partitioner(LTS_TYPE &l, const bool branching=false, const bool preserve_divergence=false, const bool generate_counter_examples=false)
Creates a bisimulation partitioner for an LTS.
~bisim_partitioner()=default
Destroys this partitioner.
std::map< block_index_type, label_type > split_by_action
std::size_t num_eq_classes() const
Gives the number of bisimulation equivalence classes of the LTS.
mcrl2::state_formulas::state_formula counter_formula(std::size_t s, std::size_t t)
Creates a state formula that distinguishes state s from state t.
void order_recursively_on_tau_reachability(const state_type s, std::map< state_type, std::vector< state_type > > &inert_transition_map, std::vector< non_bottom_state > &new_non_bottom_states, std::set< state_type > &visited)
std::vector< block_index_type > to_be_processed
std::map< block_index_type, block_index_type > split_by_block
void refine_partion_with_respect_to_divergences()
void replace_transition_system(const bool branching, const bool preserve_divergences)
Replaces the transition relation of the current lts by the transitions of the bisimulation reduced tr...
std::vector< block > blocks
void order_on_tau_reachability(std::vector< non_bottom_state > &non_bottom_states)
void split_the_blocks_in_BL(bool &partition_is_unstable, const label_type splitter_label, const block_index_type splitter_block)
void refine_partition_until_it_becomes_stable(const bool branching, const bool preserve_divergence)
void create_initial_partition(const bool branching, const bool preserve_divergences)
std::vector< state_type > block_index_of_a_state
mcrl2::state_formulas::state_formula counter_formula_aux(const block_index_type B1, const block_index_type B2)
void check_internal_consistency_of_the_partitioning_data_structure(const bool branching, const bool preserve_divergence) const
outgoing_transitions_per_state_action_t outgoing_transitions
function object to compare two constln_t pointers based on their contents
A class that can be used to store counterexample trees and.
lts_type type()
Provides the type of this lts, in casu lts_aut.
bool operator==(const lts_aut_base &) const
Standard equality function.
void swap(lts_aut_base &) noexcept
Standard swap function.
void swap(lts_dot_base &) noexcept
The standard swap function.
lts_type type() const
The lts_type of state_label_dot. In this case lts_dot.
void clear()
Clear the transitions system.
const std::vector< std::string > & state_element_values(std::size_t idx) const
Provides the vector of strings that correspond to the values of the number at position idx in a vecto...
std::size_t add_state_element_value(std::size_t idx, const std::string &s)
Adds a string to the state element values for the idx-th position in a state vector....
void swap(lts_fsm_base &other) noexcept
Standard swap function.
bool operator==(const lts_fsm_base &other) const
lts_type type() const
The lts_type of this labelled transition system. In this case lts_fsm.
std::string state_element_value(std::size_t parameter_index, std::size_t element_index) const
Returns the element_index'th element for the parameter with index parameter_index.
std::string state_label_to_string(const state_label_fsm &l) const
Pretty print a state value of this FSM.
a base class for lts_lts_t and probabilistic_lts_t.
static lts_type type()
Yields the type of this lts, in this case lts_lts.
void set_process_parameters(const data::variable_list ¶ms)
Set the state parameters for this LTS.
lts_lts_base()=default
Default constructor.
bool operator==(const lts_lts_base &other) const
Standard equality function;.
process::action_label_list m_action_decls
void set_action_label_declarations(const process::action_label_list &decls)
Set the action label information for this LTS.
const data::variable & process_parameter(std::size_t i) const
Returns the i-th parameter of the state vectors stored in this LTS.
data::data_specification m_data_spec
const data::variable_list & process_parameters() const
Return the process parameters stored in this LTS.
void set_data(const data::data_specification &spec)
Set the mCRL2 data specification of this LTS.
void swap(lts_lts_base &l) noexcept
const process::action_label_list & action_label_declarations() const
Return action label declarations stored in this LTS.
data::variable_list m_parameters
A simple labelled transition format with only strings as action labels.
void load(const std::string &filename)
Load the labelled transition system from a file.
void load(std::istream &is)
Load the labelled transition system from an input stream.
void save(const std::string &filename) const
Save the labelled transition system to file.
A class to contain labelled transition systems in graphviz format.
void save(const std::string &filename) const
Save the labelled transition system to a file.
void save(std::ostream &os) const
Save the labelled transition system to a stream.
The class lts_fsm_t contains labelled transition systems in .fsm format.
void load(const std::string &filename)
Save the labelled transition system to file.
void save(const std::string &filename) const
Save the labelled transition system to file.
This class contains labelled transition systems in .lts format.
lts_lts_t()=default
Creates an object containing no information.
void save(const std::string &filename) const
Save the labelled transition system to file.
void load(const std::string &filename)
Load the labelled transition system from file.
A simple labelled transition format with only strings as action labels.
void load(const std::string &filename)
Load the labelled transition system from a file.
void load(std::istream &is)
Load the labelled transition system from an input stream.
void save(const std::string &filename) const
Save the labelled transition system to file.
A class to contain labelled transition systems in graphviz format.
void save(std::ostream &os) const
Save the labelled transition system to a stream.
void save(const std::string &filename) const
Save the labelled transition system to a file.
The class lts_fsm_t contains labelled transition systems in .fsm format.
This class contains probabilistic labelled transition systems in .lts format.
probabilistic_lts_lts_t()=default
Creates an object containing no information.
void load(const std::string &filename)
Load the labelled transition system from file.
void save(const std::string &filename) const
Save the labelled transition system to file.
A class that contains a labelled transition system.
probabilistic_lts(probabilistic_lts &&other)=default
Standard move constructor.
void set_initial_probabilistic_state(const PROBABILISTIC_STATE_T &state)
Sets the probabilistic initial state number of this LTS.
probabilistic_lts()=default
Creates an empty LTS.
const PROBABILISTIC_STATE_T & initial_probabilistic_state() const
Gets the initial state number of this LTS.
bool operator==(const probabilistic_lts &other) const
Standard equality operator.
labels_size_type num_probabilistic_states() const
Gets the number of probabilistic states of this LTS.
static constexpr bool is_probabilistic_lts
An indicator that this is a probabilistic lts.
void clear_probabilistic_states()
Clear the probabilistic states in this probabilistic transitions system.
states_size_type add_and_reset_probabilistic_state(PROBABILISTIC_STATE_T &s)
Adds a probabilistic state to this LTS and resets the state to empty.
void clear()
Clear the transitions system.
probabilistic_lts & operator=(probabilistic_lts &&other)=default
Standard assignment move operator.
void swap(probabilistic_lts &other) noexcept
Swap this lts with the supplied supplied LTS.
probabilistic_lts & operator=(const probabilistic_lts &other)=default
Standard assignment operator.
std::vector< PROBABILISTIC_STATE_T > m_probabilistic_states
probabilistic_lts(const probabilistic_lts &other)=default
Standard copy constructor.
states_size_type add_probabilistic_state(const PROBABILISTIC_STATE_T &s)
Adds a probabilistic state to this LTS.
states_size_type initial_state() const
PROBABILISTIC_STATE_T m_init_probabilistic_state
A class that contains a probabilistic state.
void set(const STATE &s)
Set this probabilistic state to a single state with probability one.
const_iterator begin() const
Gets an iterator over pairs of state and probability. This can only be used when the state is stored ...
void construct_internal_vector_representation()
Guarantee that this probabilistic state is internally stored as a vector, such that begin/end,...
probabilistic_state & operator=(const probabilistic_state &other)
Copy assignment constructor.
const_reverse_iterator rbegin() const
Gets a reverse iterator over pairs of state and probability. This can only be used when the state is ...
std::size_t size() const
Gets the number of probabilistic states in the vector representation of this state....
bool operator!=(const probabilistic_state &other) const
Standard equality operator.
iterator begin()
Gets an iterator over pairs of state and probability. This can only be used if the state is internall...
probabilistic_state & operator=(probabilistic_state &&other)=default
Move assignment operator.
STATE get() const
Get a probabilistic state if is is simple, i.e., consists of a single state.
void swap(probabilistic_state &other) noexcept
Swap this probabilistic state.
iterator end()
Gets the end iterator over pairs of state and probability.
reverse_iterator rbegin()
Gets a reverse iterator over pairs of state and probability. This can only be used if the state is in...
std::vector< state_probability_pair > m_probabilistic_state
const_iterator end() const
Gets the end iterator over pairs of state and probability.
reverse_iterator rend()
Gets the reverse end iterator over pairs of state and probability.
bool operator==(const probabilistic_state &other) const
Standard equality operator.
void clear()
Makes the probabilistic state empty.
probabilistic_state(probabilistic_state &&other)=default
Move constructor.
probabilistic_state(const STATE_PROBABILITY_PAIR_ITERATOR begin, const STATE_PROBABILITY_PAIR_ITERATOR end)
Creates a probabilistic state on the basis of state_probability_pairs.
STATE maximal_state() const
Provides the maximal state index in a probabilistic state.
probabilistic_state(const probabilistic_state &other)
Copy constructor.
void shrink_to_fit()
If a probabilistic state is ready, shrinking it to minimal size might be useful to reduce its memory ...
probabilistic_state()
Default constructor.
probabilistic_state(const STATE &s)
Constructor of a probabilistic state from a non probabilistic state.
void add(const STATE &s, const PROBABILITY &p)
Add a state with a probability to the probabilistic state.
const_reverse_iterator rend() const
Gets the reverse end iterator over pairs of state and probability.
Class for computing the signature for strong bisimulation.
Class for computing the signature for branching bisimulation.
Class for computing the signature for divergence preserving branching bisimulation.
Signature based reductions for labelled transition systems.
This class contains labels for states in dot format.
void set_name(const std::string &s)
This method sets the name of the state label to the string s.
std::string name() const
This method returns the string in the name field of a state label.
std::string label() const
This method returns the label in the name field of a state label.
void set_label(const std::string &s)
This method sets the label field of the state label to the string s.
state_label_dot(const std::string &state_name, const std::string &state_label)
A constructor setting the name and label of this state label to the indicated values.
std::string m_state_label
bool operator==(const state_label_dot &l) const
Standard comparison operator, comparing both the string in the name field, as well as the one in the ...
bool operator!=(const state_label_dot &l) const
Standard inequality operator. Just the negation of equality.
state_label_dot()=default
The default constructor.
This class contains state labels for the fsm format.
state_label_fsm()=default
Default constructor. The label becomes an empty vector.
state_label_fsm(const state_label_fsm &)=default
Copy constructor.
state_label_fsm & operator=(const state_label_fsm &)=default
Copy assignment.
static state_label_fsm number_to_label(const std::size_t n)
Create a state label consisting of a number as the only list element.
state_label_fsm(const std::vector< std::size_t > &v)
Default constructor. The label is set to the vector v.
state_label_fsm operator+(const state_label_fsm &l) const
An operator to concatenate two state labels. Fsm labels cannot be concatenated. Therefore,...
This class contains state labels for an labelled transition system in .lts format.
state_label_lts(const state_label_lts &)=default
Copy constructor.
state_label_lts operator+(const state_label_lts &l) const
An operator to concatenate two state labels.
state_label_lts(const super &l)
Construct a state label out of list of balanced trees of data expressions, representing a state label...
state_label_lts()=default
Default constructor.
state_label_lts(const lps::state &l)
Construct a state label out of a balanced tree of data expressions, representing a state label.
state_label_lts & operator=(const state_label_lts &)=default
Copy assignment.
static state_label_lts number_to_label(const std::size_t n)
Create a state label consisting of a number as the only list element.
state_label_lts(const CONTAINER &l)
Construct a single state label out of the elements in a container.
Process specification consisting of a data specification, action labels, a sequence of process equati...
\brief An untyped multi action or data application
#define PRINT_SG_PL(counter, sg_string, pl_string)
#define ONLY_IF_DEBUG(...)
include something in Debug mode
#define PRINT_INT_PERCENTAGE(num, denom)
#define INIT_WITHOUT_BLC_SETS
#define abort_if_non_bottom_size_too_large_NewBotSt(i)
#define bottom_size(coroutine)
#define new_start_bottom_states(idx)
#define new_end_bottom_states(idx)
#define abort_if_size_too_large(coroutine, i)
#define non_bottom_states_NewBotSt
#define new_end_bottom_states_NewBotSt
#define abort_if_bottom_size_too_large(coroutine)
#define bottom_and_non_bottom_size(coroutine)
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
global_function_symbol g_tree_node("@node@", 2)
global_function_symbol g_empty("@empty@", 0)
aterm g_empty_tree(g_empty)
global_function_symbol g_single_tree_node("@single_node@", 1)
std::string pp(const term_balanced_tree< Term > t)
bool is_aterm_balanced_tree(const aterm &t)
void make_term_balanced_tree(term_balanced_tree< Term > &result, ForwardTraversalIterator p, std::size_t size, Transformer transformer)
static data_specification const & default_specification()
Namespace for system defined sort bool_.
const function_symbol & false_()
Constructor for function symbol false.
const function_symbol & true_()
Constructor for function symbol true.
Namespace for system defined sort int_.
application cint(const data_expression &arg0)
Application of function symbol @cInt.
const basic_sort & int_()
Constructor for sort expression Int.
Namespace for system defined sort nat.
const basic_sort & nat()
Constructor for sort expression Nat.
application cnat(const data_expression &arg0)
Application of function symbol @cNat.
Namespace for system defined sort pos.
const basic_sort & pos()
Constructor for sort expression Pos.
Namespace for system defined sort real_.
data_expression & real_one()
application creal(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @cReal.
data_expression & real_zero()
const basic_sort & real_()
Constructor for sort expression Real.
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
application minus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol -.
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
application less(const data_expression &arg0, const data_expression &arg1)
Application of function symbol <.
bool is_untyped_data_parameter(const atermpp::aterm &x)
application equal_to(const data_expression &arg0, const data_expression &arg1)
Application of function symbol ==.
std::pair< std::set< data::variable >, std::set< data::variable > > read_write_parameters(const lps::action_summand &summand, const std::set< data::variable > &process_parameters)
Computes the read and written process parameters for the given summand.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
multi_action complete_multi_action(process::untyped_multi_action &x, const process::action_label_list &action_decls, const data::data_specification &data_spec=data::detail::default_specification())
void remove_common_divisor(std::size_t &enumerator, std::size_t &denominator)
void complete_action_rename_specification(action_rename_specification &x, const lps::stochastic_specification &spec)
process::untyped_multi_action parse_multi_action_new(const std::string &text)
multi_action complete_multi_action(process::untyped_multi_action &x, multi_action_type_checker &typechecker, const data::data_specification &data_spec=data::detail::default_specification())
std::size_t greatest_common_divisor(std::size_t x, std::size_t y)
action_rename_specification parse_action_rename_specification_new(const std::string &text)
The main namespace for the LPS library.
specification parse_linear_process_specification(const std::string &text)
Parses a linear process specification from a string.
void complete_data_specification(stochastic_specification &spec)
Adds all sorts that appear in the process of l to the data specification of l.
multi_action parse_multi_action(const std::string &text, const process::action_label_list &action_decls, const data::data_specification &data_spec=data::detail::default_specification())
Parses a multi_action from a string.
void parse_lps(std::istream &, Specification &)
process::action parse_action(const std::string &text, const process::action_label_list &action_decls, const data::data_specification &data_spec=data::detail::default_specification())
Parses an action from a string.
void complete_data_specification(specification &spec)
Adds all sorts that appear in the process of l to the data specification of l.
std::string pp(const probabilistic_data_expression &l)
multi_action parse_multi_action(std::stringstream &in, multi_action_type_checker &typechecker, const data::data_specification &data_spec=data::detail::default_specification())
Parses a multi_action from an input stream.
action_rename_specification parse_action_rename_specification(std::istream &in, const lps::stochastic_specification &spec)
Parses a process specification from an input stream.
std::ostream & operator<<(std::ostream &out, const probabilistic_data_expression &x)
Pretty print to an outstream.
multi_action parse_multi_action(std::stringstream &in, const process::action_label_list &action_decls, const data::data_specification &data_spec=data::detail::default_specification())
Parses a multi_action from an input stream.
action_rename_specification parse_action_rename_specification(const std::string &spec_string, const lps::stochastic_specification &spec)
Parses an action rename specification. Parses an action rename specification. If the action rename sp...
void parse_lps< specification >(std::istream &from, specification &result)
void make_state(state &result, ForwardTraversalIterator p, const std::size_t size)
void parse_lps< stochastic_specification >(std::istream &from, stochastic_specification &result)
Parses a stochastic linear process specification from an input stream.
std::string pp(const lps::state &x)
multi_action parse_multi_action(const std::string &text, multi_action_type_checker &typechecker, const data::data_specification &data_spec=data::detail::default_specification())
Parses a multi_action from a string.
void parse_lps(const std::string &text, Specification &result)
specification parse_linear_process_specification(std::istream &spec_stream)
Parses a linear process specification from an input stream.
void make_state(state &result, ForwardTraversalIterator p, const std::size_t size, Transformer transformer)
bool bisimulation_compare(const LTS_TYPE &l1, const LTS_TYPE &l2, bool branching=false, bool preserve_divergences=false, bool generate_counter_examples=false, const std::string &counter_example_file="", bool structured_output=false)
Checks whether the two initial states of two lts's are strong or branching bisimilar.
lts_type guess_format(std::string const &s, const bool be_verbose)
Determines the LTS format from a filename by its extension.
static const std::array< std::string, 5 > extension_strings
std::string supported_lts_formats_text(lts_type default_format, const std::set< lts_type > &supported)
Gives a textual list describing supported LTS formats.
std::string supported_lts_formats_text(const std::set< lts_type > &supported)
Gives a textual list describing supported LTS formats.
bool destructive_bisimulation_compare_minimal_depth(LTS_TYPE &l1, LTS_TYPE &l2, const std::string &counter_example_file)
std::string string_for_type(const lts_type type)
Gives a string representation of an LTS format.
void unmark_explicit_divergence_transitions(LTS_TYPE &l, const std::size_t divergent_transition_label)
std::string mime_type_for_type(const lts_type type)
Gives the MIME type associated with an LTS format.
void get_trans(const outgoing_transitions_per_state_t &begin, tree_set_store &tss, std::ptrdiff_t d, std::vector< transition > &d_trans, LTS_TYPE &aut)
lts_type parse_format(std::string const &s)
Determines the LTS format from a format specification string.
static const std::array< std::string, 5 > type_strings
std::string extension_for_type(const lts_type type)
Gives the filename extension associated with an LTS format.
LABEL_TYPE make_divergence_label(const std::string &s)
const std::set< lts_type > & supported_lts_formats()
Gives the set of all supported LTS formats.
std::string lts_extensions_as_string(const std::set< lts_type > &supported)
Gives a list of extensions for supported LTS formats.
std::string lts_extensions_as_string(const std::string &sep, const std::set< lts_type > &supported)
Gives a list of extensions for supported LTS formats.
std::size_t mark_explicit_divergence_transitions(LTS_TYPE &l)
bool destructive_bisimulation_compare(LTS_TYPE &l1, LTS_TYPE &l2, bool branching=false, bool preserve_divergences=false, bool generate_counter_examples=false, const std::string &counter_example_file="", bool structured_output=false)
Checks whether the two initial states of two lts's are strong or branching bisimilar.
void bisimulation_reduce(LTS_TYPE &l, bool branching=false, bool preserve_divergences=false)
Reduce transition system l with respect to strong or (divergence preserving) branching bisimulation.
bool lts_named_cmp(const std::array< std::string, Size > &N, T a, T b)
static const std::array< std::string, 5 > type_desc_strings
static const std::array< std::string, 5 > mime_type_strings
static const std::set< lts_type > & initialise_supported_lts_formats()
std::string pp(const state_label_dot &l)
Pretty print function for a state_label_dot. Only prints the label field.
std::string pp(const state_label_lts &label)
Pretty print a state value of this LTS.
bool is_deterministic(const LTS_TYPE &l)
Checks whether this LTS is deterministic.
outgoing_transitions_per_state_action_t transitions_per_outgoing_state_action_pair_reversed(const std::vector< transition > &trans)
Provide the transitions as a multimap accessible per from state and label, ordered backwardly.
action_label_lts parse_lts_action(const std::string &multi_action_string, const data::data_specification &data_spec, lps::multi_action_type_checker &typechecker)
Parse a string into an action label.
void group_transitions_on_label(std::vector< transition > &transitions, std::function< std::size_t(const transition &)> get_label, const std::size_t number_of_labels, const std::size_t tau_label_index)
std::size_t to(const outgoing_pair_t &p)
Target state of a label state pair.
std::string pp(const state_label_fsm &label)
Pretty print an fsm state label.
outgoing_transitions_per_state_action_t transitions_per_outgoing_state_action_pair(const std::vector< transition > &trans)
Provide the transitions as a multimap accessible per from state and label.
void sort_transitions(std::vector< transition > &transitions, const std::set< transition::size_type > &hidden_label_set, transition_sort_style ts=src_lbl_tgt)
Sorts the transitions using a sort style.
void determinise(LTS_TYPE &l)
Determinises this LTS.
std::string pp(const probabilistic_state< STATE, PROBABILITY > &l)
std::ostream & operator<<(std::ostream &out, const probabilistic_state< STATE, PROBABILITY > &l)
Pretty print to an outstream.
void reduce(LTS_TYPE &l, lts_equivalence eq)
Applies a reduction algorithm to this LTS.
bool compare(const LTS_TYPE &l1, const LTS_TYPE &l2, lts_equivalence eq, bool generate_counter_examples=false, const std::string &counter_example_file="", bool structured_output=false)
Checks whether this LTS is equivalent to another LTS.
outgoing_transitions_per_state_action_t transitions_per_outgoing_state_action_pair_reversed(const std::vector< transition > &trans, const std::set< transition::size_type > &hide_label_set)
Provide the transitions as a multimap accessible per from state and label, ordered backwardly.
bool destructive_compare(LTS_TYPE &l1, LTS_TYPE &l2, const lts_equivalence eq, const bool generate_counter_examples=false, const std::string &counter_example_file=std::string(), const bool structured_output=false)
Checks whether this LTS is equivalent to another LTS.
std::string pp(const action_label_lts &l)
Print the action label to string.
bool destructive_compare(LTS_TYPE &l1, LTS_TYPE &l2, lts_preorder pre, bool generate_counter_example, const std::string &counter_example_file="", bool structured_output=false, lps::exploration_strategy strategy=lps::es_breadth, bool preprocess=true)
Checks whether this LTS is smaller than another LTS according to a preorder.
outgoing_transitions_per_state_action_t transitions_per_outgoing_state_action_pair(const std::vector< transition > &trans, const std::set< transition::size_type > &hide_label_set)
Provide the transitions as a multimap accessible per from state and label.
void merge(LTS_TYPE &l1, const LTS_TYPE &l2)
Merge the second lts into the first lts.
bool reachability_check(lts< SL, AL, BASE > &l, bool remove_unreachable=false)
Checks whether all states in this LTS are reachable from the initial state and remove unreachable sta...
std::size_t label(const outgoing_pair_t &p)
Label of a pair of a label and target state.
std::size_t from(const outgoing_transitions_per_state_action_t::const_iterator &i)
From state of an iterator exploring transitions per outgoing state and action.
void group_transitions_on_label(const std::vector< transition >::iterator begin, const std::vector< transition >::iterator end, std::function< std::size_t(const transition &)> get_label, std::vector< std::pair< std::size_t, std::size_t > > &count_sum_transitions_per_action, const std::size_t tau_label_index=0, std::vector< std::size_t > &todo_stack=bogus_todo_stack)
bool reachability_check(probabilistic_lts< SL, AL, PROBABILISTIC_STATE, BASE > &l, bool remove_unreachable=false)
Checks whether all states in a probabilistic LTS are reachable from the initial state and remove unre...
bool compare(const LTS_TYPE &l1, const LTS_TYPE &l2, lts_preorder pre, bool generate_counter_example, const std::string &counter_example_file="", bool structured_output=false, lps::exploration_strategy strategy=lps::es_breadth, bool preprocess=true)
Checks whether this LTS is smaller than another LTS according to a preorder.
The main namespace for the Process library.
bool is_linear(const process_specification &p, bool verbose=false)
Returns true if the process specification is linear.
bool is_untyped_multi_action(const atermpp::aterm &x)
void swap(atermpp::term_balanced_tree< T > &t1, atermpp::term_balanced_tree< T > &t2) noexcept
Swaps two balanced trees.
#define USE_POOL_ALLOCATOR
static const atermpp::aterm StateMay
static const atermpp::aterm StateOr
static const atermpp::aterm UntypedRegFrm
static const atermpp::aterm StateFrm
static const atermpp::aterm StateYaled
static const atermpp::aterm RegAlt
static const atermpp::aterm ActNot
static const atermpp::aterm ActImp
static const atermpp::aterm ActTrue
static const atermpp::aterm StateInfimum
static const atermpp::aterm StateAnd
static const atermpp::aterm StateExists
static const atermpp::aterm RegTrans
static const atermpp::aterm ActOr
static const atermpp::aterm StateConstantMultiplyAlt
static const atermpp::aterm ActFrm
static const atermpp::aterm ActForall
static const atermpp::aterm StateYaledTimed
static const atermpp::aterm ActFalse
static const atermpp::aterm StateFalse
static const atermpp::aterm RegFrm
static const atermpp::aterm StateDelay
static const atermpp::aterm StatePlus
static const atermpp::aterm StateMinus
static const atermpp::aterm StateNu
static const atermpp::aterm ActAnd
static const atermpp::aterm StateDelayTimed
static const atermpp::aterm StateSupremum
static const atermpp::aterm StateSum
static const atermpp::aterm ActAt
static const atermpp::aterm ActExists
static const atermpp::aterm StateMu
static const atermpp::aterm RegTransOrNil
static const atermpp::aterm StateVar
static const atermpp::aterm StateImp
static const atermpp::aterm RegSeq
static const atermpp::aterm StateTrue
static const atermpp::aterm StateForall
static const atermpp::aterm StateMust
static const atermpp::aterm StateNot
static const atermpp::aterm ActMultAct
static const atermpp::aterm StateConstantMultiply
std::vector< state_type > bottom_states
block_index_type parent_block_index
block_index_type block_index
void swap(block &b) noexcept
std::vector< transition > non_inert_transitions
std::vector< non_bottom_state > non_bottom_states
std::vector< state_type > inert_transitions
non_bottom_state(const state_type s, const std::vector< state_type > &it)
non_bottom_state(const state_type s)
std::vector< state_type > states
void swap(block &b) noexcept
block_index_type block_index
std::vector< transition > transitions
block_index_type parent_block_index
Converts a process expression into linear process format. Use the convert member functions for this.
lps::specification convert(const process_specification &p)
Converts a process_specification into a specification. Throws non_linear_process if a non-linear sub-...
Converts a process expression into linear process format. Use the convert member functions for this.
lps::stochastic_specification convert(const process_specification &p)
Converts a process_specification into a stochastic_specification. Throws non_linear_process if a non-...
std::size_t operator()(const atermpp::term_balanced_tree< T > &t) const
std::size_t operator()(const mcrl2::lps::probabilistic_data_expression &p) const
std::size_t operator()(const mcrl2::lps::state_probability_pair< STATE, PROBABILITY > &p) const
std::size_t operator()(const mcrl2::lts::action_label_lts &as) const
std::size_t operator()(const mcrl2::lts::probabilistic_state< STATE, PROBABILITY > &p) const