spot/spot/twaalgos/sbacc.hh
Alexandre Duret-Lutz 20bcc216a0 introduce the original-classes named property
* doc/org/concepts.org, NEWS: Document it.
* spot/twaalgos/determinize.cc, spot/twaalgos/determinize.hh,
spot/twaalgos/sbacc.cc, spot/twaalgos/sbacc.hh: Use it.
* spot/twa/twagraph.cc: Update it on defrag.
* spot/twa/twa.cc (copy_named_properties_of): Copy it.
* tests/python/det.py: New file.
* tests/Makefile.am: Add it.
* python/spot/impl.i (get_original_states, get_original_classes): New
methods, to help with the tests.
2021-12-17 22:36:16 +01:00

58 lines
2.4 KiB
C++

// -*- coding: utf-8 -*-
// Copyright (C) 2015, 2021 Laboratoire de Recherche et Développement
// de l'Epita.
//
// This file is part of Spot, a model checking library.
//
// Spot is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// Spot is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
// License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#include <spot/twa/twagraph.hh>
namespace spot
{
/// \ingroup twa_algorithms
/// \brief Transform an automaton to use state-based acceptance
///
/// This transformation is independent on the acceptance condition
/// used. The implementation supports alternating automata.
///
/// It works by creating an automaton whose states correspond to
/// pairs (s,colors) for each edge entering state s with colors. In
/// other words, we are pushing colors from the edges to their
/// outgoing states. The implementation is also able to pull colors
/// on incoming states in cases where that helps.
///
/// When called on automata that are already known to have
/// state-based acceptance, this function returns the input
/// unmodified, not a copy.
///
/// Trues states (any state with an accepting self-loop labeled by
/// true) are merged in the process.
///
/// The output will have a named property called "original-states"
/// that is a vector indexed by the produced states, and giving the
/// corresponding state in the input automaton. If the input
/// automaton also had an "original-states" property, the two
/// vectors will be composed, so the `original-states[s]` in the
/// output will contains the value of `original-states[y] if state s
/// was created from state y.
///
/// If the input has a property named "original-classes", then the
/// above "original-state" property is replaced by an
/// "original-classes" property such that
/// original-classes[s] is the class of the original state of s.
SPOT_API twa_graph_ptr sbacc(twa_graph_ptr aut);
}