mCRL2
Loading...
Searching...
No Matches
mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE > Class Template Reference

#include <liblts_branching_bisim_minimal_depth.h>

Classes

struct  block
 

Public Member Functions

 branching_bisim_partitioner_minimal_depth (LTS_TYPE &l, const std::size_t init_l2)
 Creates a branching bisimulation partitioner for an LTS.
 
mcrl2::state_formulas::state_formula dist_formula_mindepth (size_t s, size_t t)
 Creates a state formula that distinguishes state s from state t.
 
bool in_same_class (const std::size_t s, const std::size_t t)
 

Private Types

typedef std::size_t block_index_type
 
typedef std::size_t level_type
 
typedef std::tuple< block_index_type, label_type, block_index_typebranching_observation_type
 
typedef std::set< branching_observation_typesignature_type
 
typedef std::pair< label_type, state_typeobservation
 
typedef std::pair< block_index_type, block_index_typeblockpair_type
 

Private Member Functions

bool is_tau (label_type l)
 
signature_type get_signature (state_type s)
 
std::size_t refine_partition ()
 
std::pair< block_index_type, block_index_typemin_split_blockpair (block_index_type b1, block_index_type b2)
 
mcrl2::state_formulas::state_formula conjunction (std::vector< mcrl2::state_formulas::state_formula > &conjunctions)
 conjunction Creates a conjunction of state formulas
 
regular_formulas::regular_formula make_tau_hat (regular_formulas::regular_formula &f)
 
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
 
void split_and_intersect (std::set< block_index_type > &truths, std::pair< block_index_type, block_index_type > liftedB1B2)
 
bool is_dist (std::set< blockpair_type > &dist_blockpairs, std::set< block_index_type > &to_dist)
 is_dist Checks if a given conjunction correctly exludes a set of blocks.
 
bool is_dist (const std::set< blockpair_type > &dist_blockpairs, const std::set< block_index_type > &to_dist, std::set< block_index_type > &truths)
 is_dist overloaded to also maintain the truth values computed at the end.
 
std::vector< mcrl2::state_formulas::state_formulafiltered_dist_conjunction (std::map< blockpair_type, mcrl2::state_formulas::state_formula > &Phi, std::set< block_index_type > &Tdist, std::set< block_index_type > &Truths)
 
mcrl2::state_formulas::state_formula dist_formula (block_index_type block_index1, block_index_type block_index2)
 

Private Attributes

LTS_TYPE & m_lts
 
state_type initial_l2
 
state_type max_state_index = 0
 
std::map< state_type, std::set< state_type > > silent_in
 
std::map< state_type, std::set< state_type > > silent_out
 
std::map< state_type, std::vector< observation > > trans_out
 
std::map< state_type, std::size_t > state2num_touched
 
std::map< state_type, block_index_typestate2block
 
std::map< state_type, signature_typestate2sig
 
std::vector< state_typebottom_states
 
std::map< level_type, std::set< block_index_type > > level2blocksidx
 
std::map< std::pair< block_index_type, block_index_type >, mcrl2::state_formulas::state_formulablockpair2formula
 
std::map< std::pair< block_index_type, block_index_type >, std::set< block_index_type > > blockpair2truths
 
std::vector< blockblocks
 

Detailed Description

template<class LTS_TYPE>
class mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >

Definition at line 34 of file liblts_branching_bisim_minimal_depth.h.

Member Typedef Documentation

◆ block_index_type

template<class LTS_TYPE >
typedef std::size_t mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::block_index_type
private

Definition at line 121 of file liblts_branching_bisim_minimal_depth.h.

◆ blockpair_type

template<class LTS_TYPE >
typedef std::pair<block_index_type, block_index_type> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::blockpair_type
private

Definition at line 127 of file liblts_branching_bisim_minimal_depth.h.

◆ branching_observation_type

template<class LTS_TYPE >
typedef std::tuple<block_index_type, label_type, block_index_type> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::branching_observation_type
private

Definition at line 124 of file liblts_branching_bisim_minimal_depth.h.

◆ level_type

template<class LTS_TYPE >
typedef std::size_t mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::level_type
private

Definition at line 122 of file liblts_branching_bisim_minimal_depth.h.

◆ observation

template<class LTS_TYPE >
typedef std::pair<label_type, state_type> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::observation
private

Definition at line 126 of file liblts_branching_bisim_minimal_depth.h.

◆ signature_type

template<class LTS_TYPE >
typedef std::set<branching_observation_type> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::signature_type
private

Definition at line 125 of file liblts_branching_bisim_minimal_depth.h.

Constructor & Destructor Documentation

◆ branching_bisim_partitioner_minimal_depth()

template<class LTS_TYPE >
mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::branching_bisim_partitioner_minimal_depth ( LTS_TYPE &  l,
const std::size_t  init_l2 
)
inline

Creates a branching bisimulation partitioner for an LTS.

This partitioner is specifically for creating minimal depth counter-examples for branching bisimulation. It guarantees stability w.r.t. the old partition before considering new splitter blocks. This might cause this implementation to be less efficient than other partitioners.

Parameters
lReference to the LTS.
init_l2reference to the initial state of lts2.

Definition at line 44 of file liblts_branching_bisim_minimal_depth.h.

Member Function Documentation

◆ conjunction()

template<class LTS_TYPE >
mcrl2::state_formulas::state_formula mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::conjunction ( std::vector< mcrl2::state_formulas::state_formula > &  conjunctions)
inlineprivate

conjunction Creates a conjunction of state formulas

Parameters
termsThe terms of the conjunction
Returns
The conjunctive state formula

Definition at line 265 of file liblts_branching_bisim_minimal_depth.h.

◆ create_regular_formula() [1/2]

template<class LTS_TYPE >
regular_formulas::regular_formula mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::create_regular_formula ( const mcrl2::lps::multi_action a) const
inlineprivate

create_regular_formula Creates a regular formula that represents action a

In case the action comes from an LTS in the lts format.

Parameters
aThe action for which to create a regular formula
Returns
The created regular formula

Definition at line 300 of file liblts_branching_bisim_minimal_depth.h.

◆ create_regular_formula() [2/2]

template<class LTS_TYPE >
regular_formulas::regular_formula mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::create_regular_formula ( const mcrl2::lts::action_label_string a) const
inlineprivate

create_regular_formula Creates a regular formula that represents action a

In case the action comes from an LTS in the lts format.

Parameters
aThe action for which to create a regular formula
Returns
The created regular formula

Definition at line 287 of file liblts_branching_bisim_minimal_depth.h.

◆ dist_formula()

template<class LTS_TYPE >
mcrl2::state_formulas::state_formula mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::dist_formula ( block_index_type  block_index1,
block_index_type  block_index2 
)
inlineprivate

Definition at line 401 of file liblts_branching_bisim_minimal_depth.h.

◆ dist_formula_mindepth()

template<class LTS_TYPE >
mcrl2::state_formulas::state_formula mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::dist_formula_mindepth ( size_t  s,
size_t  t 
)
inline

Creates a state formula that distinguishes state s from state t.

The states s and t are non branching bisimilar states. A distinguishign state formula phi is returned, which has the property that s \in \sem{phi} and t \not\in\sem{phi}. Based on the preprint "Minimal Depth Distinguishing Formulas without Until for Branching Bisimulation", 2024 by Jan Martens and Jan Friso Groote.

Parameters
[in]sThe state number for which the resulting formula should be true
[in]tThe state number for which the resulting formula should be false
Returns
A minimal observation depth distinguishing state formula, that is often also minimum negation-depth and irreducible.

Definition at line 106 of file liblts_branching_bisim_minimal_depth.h.

◆ filtered_dist_conjunction()

template<class LTS_TYPE >
std::vector< mcrl2::state_formulas::state_formula > mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::filtered_dist_conjunction ( std::map< blockpair_type, mcrl2::state_formulas::state_formula > &  Phi,
std::set< block_index_type > &  Tdist,
std::set< block_index_type > &  Truths 
)
inlineprivate

Definition at line 373 of file liblts_branching_bisim_minimal_depth.h.

◆ get_signature()

template<class LTS_TYPE >
signature_type mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::get_signature ( state_type  s)
inlineprivate

Definition at line 177 of file liblts_branching_bisim_minimal_depth.h.

◆ in_same_class()

template<class LTS_TYPE >
bool mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::in_same_class ( const std::size_t  s,
const std::size_t  t 
)
inline

Definition at line 114 of file liblts_branching_bisim_minimal_depth.h.

◆ is_dist() [1/2]

template<class LTS_TYPE >
bool mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::is_dist ( const std::set< blockpair_type > &  dist_blockpairs,
const std::set< block_index_type > &  to_dist,
std::set< block_index_type > &  truths 
)
inlineprivate

is_dist overloaded to also maintain the truth values computed at the end.

Definition at line 350 of file liblts_branching_bisim_minimal_depth.h.

◆ is_dist() [2/2]

template<class LTS_TYPE >
bool mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::is_dist ( std::set< blockpair_type > &  dist_blockpairs,
std::set< block_index_type > &  to_dist 
)
inlineprivate

is_dist Checks if a given conjunction correctly exludes a set of blocks.

Parameters
dist_blockpairsThe blockpairs that were used to generate the conjuncts.
to_distThe set of blocks that should be excluded by the conjunction, forall b\in to_dist. b\not\in\sem{phi_dist_blockpairs}.
Returns
True if the conjunction correctly excludes the set of blocks, false otherwise.

Definition at line 335 of file liblts_branching_bisim_minimal_depth.h.

◆ is_tau()

template<class LTS_TYPE >
bool mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::is_tau ( label_type  l)
inlineprivate

Definition at line 172 of file liblts_branching_bisim_minimal_depth.h.

◆ make_tau_hat()

◆ min_split_blockpair()

template<class LTS_TYPE >
std::pair< block_index_type, block_index_type > mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::min_split_blockpair ( block_index_type  b1,
block_index_type  b2 
)
inlineprivate

Definition at line 249 of file liblts_branching_bisim_minimal_depth.h.

◆ refine_partition()

template<class LTS_TYPE >
std::size_t mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::refine_partition ( )
inlineprivate

Definition at line 199 of file liblts_branching_bisim_minimal_depth.h.

◆ split_and_intersect()

template<class LTS_TYPE >
void mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::split_and_intersect ( std::set< block_index_type > &  truths,
std::pair< block_index_type, block_index_type liftedB1B2 
)
inlineprivate

Definition at line 306 of file liblts_branching_bisim_minimal_depth.h.

Member Data Documentation

◆ blockpair2formula

template<class LTS_TYPE >
std::map<std::pair<block_index_type, block_index_type>, mcrl2::state_formulas::state_formula> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::blockpair2formula
private

Definition at line 138 of file liblts_branching_bisim_minimal_depth.h.

◆ blockpair2truths

template<class LTS_TYPE >
std::map<std::pair<block_index_type, block_index_type>, std::set<block_index_type> > mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::blockpair2truths
private

Definition at line 139 of file liblts_branching_bisim_minimal_depth.h.

◆ blocks

template<class LTS_TYPE >
std::vector<block> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::blocks
private

Definition at line 167 of file liblts_branching_bisim_minimal_depth.h.

◆ bottom_states

template<class LTS_TYPE >
std::vector<state_type> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::bottom_states
private

Definition at line 135 of file liblts_branching_bisim_minimal_depth.h.

◆ initial_l2

template<class LTS_TYPE >
state_type mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::initial_l2
private

Definition at line 119 of file liblts_branching_bisim_minimal_depth.h.

◆ level2blocksidx

template<class LTS_TYPE >
std::map<level_type, std::set<block_index_type> > mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::level2blocksidx
private

Definition at line 136 of file liblts_branching_bisim_minimal_depth.h.

◆ m_lts

template<class LTS_TYPE >
LTS_TYPE& mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::m_lts
private

Definition at line 118 of file liblts_branching_bisim_minimal_depth.h.

◆ max_state_index

template<class LTS_TYPE >
state_type mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::max_state_index = 0
private

Definition at line 120 of file liblts_branching_bisim_minimal_depth.h.

◆ silent_in

template<class LTS_TYPE >
std::map<state_type, std::set<state_type> > mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::silent_in
private

Definition at line 129 of file liblts_branching_bisim_minimal_depth.h.

◆ silent_out

template<class LTS_TYPE >
std::map<state_type, std::set<state_type> > mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::silent_out
private

Definition at line 130 of file liblts_branching_bisim_minimal_depth.h.

◆ state2block

template<class LTS_TYPE >
std::map<state_type, block_index_type> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::state2block
private

Definition at line 133 of file liblts_branching_bisim_minimal_depth.h.

◆ state2num_touched

template<class LTS_TYPE >
std::map<state_type, std::size_t> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::state2num_touched
private

Definition at line 132 of file liblts_branching_bisim_minimal_depth.h.

◆ state2sig

template<class LTS_TYPE >
std::map<state_type, signature_type> mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::state2sig
private

Definition at line 134 of file liblts_branching_bisim_minimal_depth.h.

◆ trans_out

template<class LTS_TYPE >
std::map<state_type, std::vector<observation> > mcrl2::lts::detail::branching_bisim_partitioner_minimal_depth< LTS_TYPE >::trans_out
private

Definition at line 131 of file liblts_branching_bisim_minimal_depth.h.


The documentation for this class was generated from the following file: