implement NCSB complementation

* spot/twaalgos/isdet.cc,spot/twaalgos/isdet.hh: Two new functions to
highlight deterministic SCCs
* spot/twaalgos/complement.cc,spot/twaalgos/complement.hh:
Implementation of the NCSB complementation algorithm
* tests/Makefile.am, tests/python/complement_semidet.py: Test the
implementation
* NEWS: document function
This commit is contained in:
Antoine Martin 2018-06-05 15:11:47 +02:00
parent 8d233692b2
commit c717b58827
7 changed files with 617 additions and 1 deletions

View file

@ -19,6 +19,7 @@
#pragma once
#include <spot/twaalgos/sccinfo.hh>
#include <spot/twa/twagraph.hh>
namespace spot
@ -77,6 +78,16 @@ namespace spot
highlight_nondet_edges(twa_graph_ptr& aut, unsigned color);
/// @}
/// \brief Highlight the deterministic part of the automaton
///
/// In the case of a semideterministic automaton, highlights the
/// states reachable from any accepting SCC.
///
/// \param aut the automaton to process
/// \param color the color to give to states reachable from accepting SCCs.
SPOT_API void
highlight_semidet_sccs(scc_info& si, unsigned color);
/// \brief Return true iff \a aut is complete.
///
/// An automaton is complete if its translation relation is total,
@ -91,6 +102,10 @@ namespace spot
SPOT_API bool
is_semi_deterministic(const const_twa_graph_ptr& aut);
/// \brief Whether an SCC is in the deterministic part of an automaton
SPOT_API std::vector<bool>
semidet_sccs(scc_info& si);
/// \brief Set the deterministic and semi-deterministic properties
/// appropriately.
SPOT_API void check_determinism(twa_graph_ptr aut);