/// Checks for (strong) trace inclusion, i.e., whether all traces of the implementation are also traces of the specification.
/// Checks for weak trace inclusion, i.e., whether all weak traces of the implementation are also weak traces of the specification.
/// Checks for stable failures inclusion, i.e., whether all stable failures of the implementation are also stable failures of the specification.
/// Checks for impossible futures inclusion, i.e., whether all impossible futures of the implementation are also impossible futures of the specification.
RefinementType::Weaktrace | RefinementType::ImpossibleFutures => (Equivalence::BranchingBisim, false),
"Initial states are in the same block after strong bisimulation reduction, skipping refinement check."
let (preprocess_lts, initial_spec, partition) = branching_bisim_sigref(merged_lts, initial_spec, timing);
"Initial states are in the same block after branching bisimulation reduction, skipping refinement check."
_ => unimplemented!("Preprocessing for refinement type {refinement:?} has not been implemented yet."),
is_failures_refinement(&merged_lts, initial_spec, refinement, strategy, &mut ce_constructor);
// Reconstruct a trace from the counter example tree, relabelling the indices to their actual labels.
// Reconstruct a trace from the counter example tree, relabelling the indices to their actual labels.
let (result, _, _) = is_impossible_futures_refinement(&merged_lts, initial_spec, strategy, &mut ());