spot/spot/twaalgos/aiger.hh
Maximilien Colange 1da0afbafe 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
2017-11-23 14:46:50 +01:00

46 lines
1.9 KiB
C++

// -*- 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);
}