.sat_count::<u64, FxBuildHasher>(lts.state_variables().len() as u32, &mut SatCountCache::default());
// In the sigref algorithm, the partition is defined over the next state. When we compute the signature
// we then get (s, a, b), since in the signature we need to consider the block of the next state.
let group_signature = variable_rename(manager_ref, &group_signature, &state_substitution)?;
/// Computes a partitioning of the transition groups for the given LTS based on the split signature option.
/// Two transition groups are combined if they share action labels, this ensures that in split signature mode
fn combine_transition_groups(manager_ref: &BDDManagerRef, lts: &SymbolicLtsBdd) -> Result<Vec<Vec<usize>>, MercError> {
// In split signature mode we must ensure that the action labels of all transition groups are disjoint. We do this by merging
/// Display helper that prints all vectors represented by the given signature BDD as numbers, by decoding
/// Display helper that prints all vectors represented by the given signature BDD as numbers, by decoding
fn new(signature: &'a BDDFunction, variables: &'a Vec<VarNo>, num_of_bits: &'a [u32], block_bits: u32) -> Self {
let block_variable_names = (0..num_of_bits).map(|i| format!("b_{}", i)).collect::<Vec<String>>();
let _expected_partition = sigref_symbolic(&manager_ref, <s_bdd, &mut Timing::new(), false, false).unwrap();
let lts_bdd_split = SymbolicLtsBdd::from_symbolic_lts(&mut storage, &manager_ref_split, <s).unwrap();
sigref_symbolic(&manager_ref_split, <s_bdd_split, &mut Timing::new(), false, false).unwrap();