/// Mirrors the `saturation` × `chaining` matrix of the mCRL2 `lpsreach` tool. Saturation and chaining
/// do not change the resulting reachable set, only how quickly the symbolic representation converges.
/// Like [Self::Saturation], but after each group all earlier groups are re-applied to a fixpoint.
/// Performs reachability analysis using the given initial state, transitions and [ReachabilityOptions].
/// Returns `(todo1, deadlocks)`: the states reachable this step (the caller subtracts the already
// Potential deadlocks start as the whole frontier; a state is removed as soon as a group is found
// Regular breadth-first, or chaining where successors found by earlier groups feed later groups.
/// Removes from `deadlocks` every state that has a `group` transition into `todo1`, i.e. every state
/// that is not actually a deadlock with respect to `group`. Uses the relational predecessor (the
let with_successor = todo1.relational_predecessor(group.relation(), group.meta(), deadlocks)?;
/// Explores the `anderson.4` fixture with the given strategy and returns the reachable state count.
let mut lts = read_sylvan(&ldd_manager, &mut &bytes[..]).expect("Loading should work correctly");