|
mCRL2
|
O(m log n)-time branching bisimulation algorithm published at CONCUR 2025. More...
Go to the source code of this file.
Namespaces | |
| namespace | mcrl2 |
| namespace | mcrl2::lts |
| The main LTS namespace. | |
| namespace | mcrl2::lts::detail |
| A base class for the lts_dot labelled transition system. | |
| namespace | mcrl2::lts::detail::bisimulation_gj |
Macros | |
| #define | INIT_WITHOUT_BLC_SETS |
| #define | linked_list simple_list |
| #define | non_bottom_states_NewBotSt non_bottom_states[3] |
| #define | bottom_size(coroutine) |
| #define | bottom_and_non_bottom_size(coroutine) |
| #define | abort_if_bottom_size_too_large(coroutine) |
| #define | abort_if_non_bottom_size_too_large_NewBotSt(i) |
| #define | abort_if_size_too_large(coroutine, i) |
| #define | new_start_bottom_states(idx) |
| #define | new_end_bottom_states(idx) |
| #define | new_end_bottom_states_NewBotSt (new_start_bottom_states_plus_one[2]) |
| #define | max_below_pivot min_block |
| #define | min_above_pivot max_block |
| #define | PRINT_SG_PL(counter, sg_string, pl_string) (counter) << (1 == (counter) ? (sg_string) : (pl_string)) |
| #define | PRINT_INT_PERCENTAGE(num, denom) (((num) * 200 + (denom)) / (denom) / 2) |
Typedefs | |
| using | mcrl2::lts::detail::bisimulation_gj::state_index = std::size_t |
| using | mcrl2::lts::detail::bisimulation_gj::transition_index = std::size_t |
| using | mcrl2::lts::detail::bisimulation_gj::label_index = std::size_t |
| using | mcrl2::lts::detail::bisimulation_gj::outgoing_transitions_it = fixed_vector< outgoing_transition_type >::iterator |
| using | mcrl2::lts::detail::bisimulation_gj::outgoing_transitions_const_it = fixed_vector< outgoing_transition_type >::const_iterator |
| using | mcrl2::lts::detail::bisimulation_gj::BLC_list_iterator = transition_index * |
| using | mcrl2::lts::detail::bisimulation_gj::BLC_list_iterator_or_null = transition_index * |
| using | mcrl2::lts::detail::bisimulation_gj::BLC_list_const_iterator = const transition_index * |
Functions | |
| static constexpr transition_index | mcrl2::lts::detail::bisimulation_gj::marked (enum subblocks subblock) |
| base marking value for a subblock | |
| static constexpr bool | mcrl2::lts::detail::bisimulation_gj::is_in_marked_range_of (transition_index counter, enum subblocks subblock) |
| checks whether a counter value is a marking for a given subblock | |
| template<class CONTAINER > | |
| static void | mcrl2::lts::detail::bisimulation_gj::clear (CONTAINER &c) |
| template<class LTS_TYPE > | |
| void | mcrl2::lts::detail::bisimulation_reduce_gj (LTS_TYPE &l, const bool branching=false, const bool preserve_divergence=false) |
| nonmember functions serving as interface with the rest of mCRL2 | |
| template<class LTS_TYPE > | |
| bool | mcrl2::lts::detail::destructive_bisimulation_compare_gj (LTS_TYPE &l1, LTS_TYPE &l2, const bool branching=false, const bool preserve_divergence=false, const bool generate_counter_examples=false, const std::string &="", bool=false) |
| Checks whether the two initial states of two LTSs are strong or (divergence-preserving) branching bisimilar. | |
| template<class LTS_TYPE > | |
| bool | mcrl2::lts::detail::bisimulation_compare_gj (const LTS_TYPE &l1, const LTS_TYPE &l2, const bool branching=false, const bool preserve_divergence=false) |
| Checks whether the two initial states of two LTSs are strong or (divergence-preserving) branching bisimilar. | |
Variables | |
| constexpr constellation_type * | mcrl2::lts::detail::bisimulation_gj::null_constellation =nullptr |
| constexpr transition_index | mcrl2::lts::detail::bisimulation_gj::null_transition =-1 |
| constexpr label_index | mcrl2::lts::detail::bisimulation_gj::null_action =-1 |
| constexpr state_index | mcrl2::lts::detail::bisimulation_gj::null_state =-1 |
| constexpr block_type * | mcrl2::lts::detail::bisimulation_gj::null_block =nullptr |
| constexpr transition_index | mcrl2::lts::detail::bisimulation_gj::undefined =0 |
| constexpr transition_index | mcrl2::lts::detail::bisimulation_gj::marked_range |
| the number of counter values that can be used for one subblock | |
| constexpr transition_index | mcrl2::lts::detail::bisimulation_gj::marked_NewBotSt =marked(NewBotSt) |
| counter value to indicate that a state is in the NewBotSt subset | |
| constexpr transition_index | mcrl2::lts::detail::bisimulation_gj::marked_HitSmall =marked_NewBotSt+1 |
O(m log n)-time branching bisimulation algorithm published at CONCUR 2025.
This algorithm is similar to liblts_bisim_dnj.h but it does not use bunches (i.e., partitions of transitions) to register which work has already been done. Instead, it uses a normal partition of states, similar to the first O(m log n) algorithm published in 2016/17. This algorithm should be slightly faster, but in particular use less memory than liblts_bisim_dnj.h. Otherwise the functionality is exactly the same.
Definition in file liblts_bisim_gj.h.
| #define abort_if_bottom_size_too_large | ( | coroutine | ) |
| #define abort_if_non_bottom_size_too_large_NewBotSt | ( | i | ) |
| #define abort_if_size_too_large | ( | coroutine, | |
| i | |||
| ) |
| #define bottom_and_non_bottom_size | ( | coroutine | ) |
| #define bottom_size | ( | coroutine | ) |
| #define INIT_WITHOUT_BLC_SETS |
Definition at line 28 of file liblts_bisim_gj.h.
| #define linked_list simple_list |
Definition at line 38 of file liblts_bisim_gj.h.
| #define max_below_pivot min_block |
| #define min_above_pivot max_block |
| #define new_end_bottom_states | ( | idx | ) |
| #define new_end_bottom_states_NewBotSt (new_start_bottom_states_plus_one[2]) |
| #define new_start_bottom_states | ( | idx | ) |
| #define non_bottom_states_NewBotSt non_bottom_states[3] |
| #define PRINT_INT_PERCENTAGE | ( | num, | |
| denom | |||
| ) | (((num) * 200 + (denom)) / (denom) / 2) |
| #define PRINT_SG_PL | ( | counter, | |
| sg_string, | |||
| pl_string | |||
| ) | (counter) << (1 == (counter) ? (sg_string) : (pl_string)) |