_ => unreachable!("This refinement variant {refinement:?} can not be checked by is_failures_refinement"),
// The antichain data structure is used for storing explored states. However, as opposed to a discovered set it
spec_prime = VecSet::from_vec(tau_closure(merged_lts, spec_prime.to_vec(), &mut closure_cache, true));
trace!(" -[{}]-> ({}, {:?})", merged_lts.labels()[impl_transition.label], impl_transition.to, spec_prime);
// If the implementation state is not stable, then it cannot have any refusals (or is maximally accepting).
// refusals(impl) ⊆ refusals(spec) iff there exists a stable spec state s with enabled(s) ⊆ enabled(impl).
// Unstable spec states do not contribute to the refusals of the specification, so we can ignore them.
/// A naive implementation for checking that the refusals of an implementation state are contained in the refusals of a set of specification states.
fn refusals_contained_in_naive<L: LTS>(lts: &L, impl_state: StateIndex, spec_states: &VecSet<StateIndex>) -> bool {
fn refusals_set<L: LTS>(lts: &L, spec_states: &VecSet<StateIndex>) -> VecSet<VecSet<LabelIndex>> {
pub fn tau_closure<L: LTS>(lts: &L, mut states: Vec<StateIndex>, cache: &mut ClosureCache, extend: bool) -> Vec<StateIndex> {