73#include "mcrl2/lts/detail/check_complexity.h"
82#if !defined(NDEBUG) || defined(COUNT_WORK_BALANCE)
125 "2.4: while C contains a nontrivial constellation",
126 "2.10: for all s in SpB",
127 "3.29: Move Blue/Red to a new block NewB (set pointers to new block)",
128 "3.29: Move Blue/Red to a new block NewB (for all states s in NewB)",
129 "3.31: for all s in NewB",
132 "3.29: Move Blue/Red to a new block NewB (swap states)",
134 "3.6l: refine bottom state",
135 "3.15: refine visited state",
138 "3.6l: while Test is not empty (3.11l: s is blue)",
139 "3.15l: while Blue contains unvisited states",
142 "3.15r: while Red contains unvisited states",
145 "4.8: for all bottom states s in RfnB",
146 "4.15: for all old bottom states s in RedB (self-loop)",
149 "2.20: for all refinable blocks RfnB",
150 "2.17: Register that inert transitions from s go to NewC (B_to_C)",
151 "4.4: for all constellations C not in R reachable from RfnB",
154 "2.11: for all s_prime in in(s)",
155 "2.17: Register that inert transitions from s go to NewC (out)",
156 "2.17: Register that inert transitions from s go to NewC (swap "
158 "3.6l: refine outgoing transition to marked state",
160 "3.6/3.23l: refine outgoing transition",
161 "3.29: Move Blue/Red to a new block NewB (for all transitions in out(s))",
162 "3.32r: for all s_prime in out(s)",
164 "3.18: refine incoming transition",
165 "3.32l: for all s_prime in in(s)",
168 "3.6l: while Test is not empty (3.9l: s is red)",
169 "3.6l: while Test is not empty (3.9l: s is red) during postprocessing",
170 "3.18l: for all s_prime in in(s) \\ Red",
171 "3.23l: if ... s_prime has no transition to SpC",
174 "3.6r: while FromRed is not empty",
175 "3.18r: for all s_prime in in(s)",
178 "3.6l: refine outgoing transition (called from PostprocessNewBottom)",
179 "3.23l: refine outgoing transition (state is new bottom state)",
180 "4.4: for all transitions from new bottom states (a priori)",
181 "4.4: for all transitions from new bottom states (a posteriori)",
182 "4.12: for all blocks B with transitions to SpC that need postprocessing "
184 "4.12: for all blocks B with transitions to SpC that need postprocessing "
186 "4.15: for all old bottom states s in RedB",
192 "adapt_transitions_for_new_block()",
193 "create_initial_partition()",
196 "split(), find predecessors of a state in the smaller subblock",
197 "split(), while U-coroutine runs, find predecessors of a U-state",
198 "split(), while R-coroutine runs, find predecessors of a R-state",
199 "handle_new_noninert_transns()",
203 "refine_partition_until_it_becomes_stable(), find predecessors",
207 "refine_partition_until_it_becomes_stable(), stabilize",
208 "refine_partition_until_it_becomes_stable(), stabilize for large splitter",
209 "handle_new_noninert_transns(), make block_bunch-slice without bottom "
210 "states unstable (temporary counter)",
213 "move_out_slice_to_new_block()",
214 "split(), handle a transition from a state in the smaller subblock",
215 "split(), handle a transition to a state in the smaller subblock",
216 "split(), while U-coroutine runs, handle a transition to a U-state",
217 "split(), while U-coroutine runs, test noninert outgoing transitions",
218 "split(), while R-coroutine runs, handle a transition from a R-state",
219 "split(), while R-coroutine runs, handle a transition to a R-state",
220 "split(), the test for noninert transitions found a new bottom state",
221 "handle_new_noninert_transns(), make block_bunch-slice with bottom states "
223 "handle_new_noninert_transns(), make block_bunch-slice without bottom "
224 "states unstable (final counter)",
225 "refine_partition_until_it_becomes_stable(), stabilize block with bottom "
226 "states for new non-inert transitions",
227 "refine_partition_until_it_becomes_stable(), stabilize block without "
228 "bottom states for new non-inert transitions",
233 "refine_partition_until_it_becomes_stable(): find a splitter",
234 "splitB(): update BLC data structure of the smaller subblock",
237 "split_block_B_into_R_and_BminR(): carry out a split",
238 "split_block_B_into_R_and_BminR(): skip over a state",
239 "simple_splitB(): find a bottom state in the smaller subblock (i.e. in U)",
240 "simple_splitB(): find predecessors of a state in the smaller subblock",
241 "multiple_swap_states_in_block(): account for swapping states in the aborted subblock",
242 "multiple_swap_states_in_block(): swap states in the smaller subblock",
243 "simple_splitB(): find predecessors of a state in R",
244 "simple_splitB(): find predecessors of a state in U",
245 "stabilizeB(): prepare a block with new bottom states",
246 "stabilizeB(): distribute states over Phat",
247 "create_initial_partition(): set start_incoming_transitions",
250 "refine_partition_until_it_becomes_stable(): prepare tau-co-split",
251 "refine_partition_until_it_becomes_stable(): correct the end of calM",
252 "refine_partition_until_it_becomes_stable(): execute a main split",
253 "four_way_splitB(): handle a transition in the main splitter",
257 "handle a transition from a state of the smaller subblock",
258 "simple_splitB(): handle a transition to a state of the smaller subblock",
259 "refine_partition_until_it_becomes_stable(): find a cotransition",
260 "order_BLC_transitions(): sort transition",
261 "simple_splitB(): handle a transition (in the splitter) from an R-state",
262 "simple_splitB(): handle an (inert) transition to an R-state",
263 "simple_splitB(): handle an (inert) transition to a U-state",
264 "simple_splitB(): handle a transition from a potential U-state",
266 "the test for outgoing transitions found a new bottom state",
267 "splitB(): unmark transitions out of the new bottom block",
268 "splitB(): unmark transitions out of the new bottom block "
269 "(assigning work afterwards)",
270 "stabilizeB(): initialize Qhat",
271 "stabilizeB(): initialize Qhat (assigning work afterwards)",
272 "stabilizeB(): main loop",
273 "stabilizeB(): main loop (assigning work afterwards)",
274 "create_initial_partition(): refine block"
278#ifdef TEST_WORK_COUNTER_NAMES
280#define test_work_name(var, ctr)
283 assert((var) == ctr);
284 mCRL2log(log::debug) << "work_names[" #ctr "] = \""
285 << work_names[ctr] << "\".\n";
286 (var) = (enum counter_type) ((var) + 1
);
class for time complexity checks
static signed_trans_type sensible_work
counter to register the work balance for coroutines
static unsigned char log_n
value of floor(log2(n)) for easy access
static trans_type sensible_work_grand_total
the number of useful steps in the course of the whole algorithm
static trans_type no_of_waiting_cycles_grand_total
the number of waiting cycles in the course of the whole algorithm
static trans_type cancelled_work_grand_total
the number of cancelled steps (in aborted coroutines) in the course of the whole algorithm
static const char * work_names[TRANS_gj_MAX - BLOCK_MIN+1]
printable names of the counter types (for error messages)
static bool cannot_wait_before_reset
indicates whether waiting cycles are allowed
static trans_type no_of_waiting_cycles
the number of waiting cycles that have been done in the current accounting period
A base class for the lts_dot labelled transition system.
std::size_t trans_type
type used to store transition (numbers and) counts
std::make_signed< trans_type >::type signed_trans_type
type used to store differences between transition counters