fn translate(&mut self, initial_state: StateIndex, initial_equation_index: usize) -> Result<(), MercError> {
// We store (state, formula, N) into the queue, where N is the vertex number assigned to this pair. This means
/// Translate a single vertex (s, Ψ) into the variability parity game vertex and its outgoing edges.
/// The `fts` and `parsed_labels` are used to find the outgoing transitions matching the modalities in the formula.
pub fn translate_vertex(&mut self, s: StateIndex, formula: &'a StateFrm, vertex_index: VertexIndex) {
self.vertices[vertex_index] = (Player::Odd, Priority::new(0)); // The priority and owner do not matter here
fn translate_equation(&mut self, s: StateIndex, equation_index: usize, vertex_index: VertexIndex) {
// (s, μ X. Ψ) →_P odd, (s, Ψ[x := μ X. Ψ]), 2 * floor(AD(Ψ)/2) + 1. In Rust division is already floor.
// (s, ν X. Ψ) →_P even, (s, Ψ[x := ν X. Ψ]), 2 * (AD(Ψ)/2). In Rust division is already floor.
RegFrm::Choice { lhs, rhs } => match_regular_formula(lhs, action) || match_regular_formula(rhs, action),
ActFrmBinaryOp::Union => match_action_formula(lhs, action) || match_action_formula(rhs, action),
ActFrmBinaryOp::Intersect => match_action_formula(lhs, action) && match_action_formula(rhs, action),
let formula = UntypedStateFrmSpec::parse(include_str!("../../../examples/vpg/running_example.mcf")).unwrap();
let _vpg = translate(&manager_ref, &fts, fd.configuration().clone(), &formula.formula).unwrap();