Commit 1da0afba authored by Maximilien Colange's avatar Maximilien Colange

Improve ltlsynt interface

To ease debugging and testing, ltlsynt can output the synthesized
strategy as an automaton, not just an aiger circuit.
Also, its exit code has been changed to something meaningful.

* bin/ltlsynt.cc: Various improvements: options, exit code, code style
* spot/twaalgos/aiger.hh, spot/twaalgos/aiger.cc,
  spot/twaalgos/Makefile.am: Move the aiger printer to separate files
* tests/core/ltlsynt.test: Clean up and update test file
* tests/Makefile.am: Add the test file to the test suite
* NEWS: document the new aiger printer
* doc/org/concepts.org: document the named property "synthesis-outputs",
  used by print_aiger
parent 502ddc6d
......@@ -44,8 +44,8 @@ New in spot 2.4.2.dev (not yet released)
also be used to detect unreliable measurements. See
https://spot.lrde.epita.fr/oaut.html#timing
- ltlsynt is a new tool for synthesizing AIGER circuits from LTL/PSL
formulas.
- ltlsynt is a new tool for synthesizing a controller from LTL/PSL
specifications.
- ltldo learned to limit the number of automata it outputs using -n.
......@@ -190,6 +190,15 @@ New in spot 2.4.2.dev (not yet released)
- The new spot::formula::is_leaf() method can be used to detect
formulas without children (atomic propositions, or constants).
- The new function spot::print_aiger() encodes an automaton as an
AIGER circuit and prints it. This is only possible for automata
whose acceptance condition is trivial. It relies on a new named
property "synthesis outputs" that describes which atomic
propositions are to be encoded as outputs of the circuits.
This function is used by ltlsynt to output the synthesized
controllers in the format required by the synthesis tools
competition SYNTCOMP.
Deprecation notices:
(These functions still work but compilers emit warnings.)
......
This diff is collapsed.
......@@ -1130,7 +1130,7 @@ Here is a list of named properties currently used inside Spot:
| ~incomplete-states~ | ~std::set<unsigned>~ | set of states numbers that should be displayed as incomplete (used internally by ~print_dot()~ when truncating large automata) |
| ~degen-levels~ | ~std::vector<unsigned>~ | level associated to each state by the degeneralization algorithm |
| ~simulated-states~ | ~std::vector<unsigned>~ | map states of the original automaton to states if the current automaton in the result of simulation-based reductions |
| ~synthesis-outputs~ | ~bdd~ | conjunction of controllable atomic propositions (used by ~print_aiger()~ to determine which propositions should be encoded as outputs of the circuit)
Objects referenced via named properties are automatically destroyed
when the automaton is destroyed, but this can be altered by passing a
custom destructor as a third parameter to =twa::set_named_prop()=.
......
......@@ -28,6 +28,7 @@ AM_CXXFLAGS = $(WARNING_CXXFLAGS)
twaalgosdir = $(pkgincludedir)/twaalgos
twaalgos_HEADERS = \
aiger.hh \
alternation.hh \
are_isomorphic.hh \
bfssteps.hh \
......@@ -93,6 +94,7 @@ twaalgos_HEADERS = \
noinst_LTLIBRARIES = libtwaalgos.la
libtwaalgos_la_SOURCES = \
aiger.cc \
alternation.cc \
are_isomorphic.cc \
bfssteps.cc \
......
This diff is collapsed.
// -*- coding: utf-8 -*-
// Copyright (C) 2017 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
//
// 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 <iosfwd>
#include <spot/misc/common.hh>
#include <spot/twa/fwd.hh>
namespace spot
{
/// \ingroup twa_io
/// \brief Encode and print an automaton as an AIGER circuit.
///
/// The circuit actually encodes the transition relation of the automaton, not
/// its acceptance condition. Therefore, this function will reject automata
/// whose acceptance condition is not trivial (i.e. true).
/// States are encoded by latches (or registers) in the circuit. Atomic
/// propositions are encoded as inputs and outputs of the circuit. To know
/// which AP should be encoded as outputs, print_aiger() relies on the named
/// property "synthesis-outputs", which is a bdd containing the conjunction of
/// such output propositions. All other AP are encoded as inputs. If the named
/// property is not set, all AP are encoded as inputs, and the circuit has no
/// output.
///
/// \param os The output stream to print on.
/// \param aut The automaton to output.
SPOT_API std::ostream&
print_aiger(std::ostream& os, const const_twa_ptr& aut);
}
......@@ -309,7 +309,8 @@ TESTS_twa = \
core/acc_word.test \
core/dca.test \
core/dnfstreett.test \
core/parity.test
core/parity.test \
core/ltlsynt.test
############################## PYTHON ##############################
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment