add ltlsynt executable

For now, ltlsynt only handles LTL realizability. It uses a reduction to
parity game followed by Calude et al.'s reduction from parity game to
reachability game.

* bin/ltlsynt.cc, bin/Makefile.am, bin/man/ltlsynt.x,
bin/man/Makefile.am, bin/.gitignore: New binary.
* doc/org/arch.tex, doc/Makefile.am, doc/org/tools.org,
doc/org/ltlsynt.org: Document it.
* spot/misc/game.cc, spot/misc/game.hh, spot/misc/Makefile.am: Parity
game wrapper for parity automata + reachability game interface from
Calude et al.'s paper.
This commit is contained in:
Thibaud Michaud 2017-09-10 22:47:50 +02:00
parent 7a11842613
commit 0821c97eb8
13 changed files with 812 additions and 4 deletions

View file

@ -100,6 +100,7 @@ ORG_FILES = \
org/ltldo.org \
org/ltlfilt.org \
org/ltlgrind.org \
org/ltlsynt.org \
org/oaut.org \
org/randaut.org \
org/randltl.org \

View file

@ -28,6 +28,7 @@
\texttt{dstar2tgba}\\
\texttt{ltlcross}\\
\texttt{ltlgrind}\\
\texttt{ltlsynt}\\
\texttt{ltldo}\\
\texttt{autcross}
};

55
doc/org/ltlsynt.org Normal file
View file

@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
#+TITLE: =ltlsynt=
#+DESCRIPTION: Spot command-line tool for synthesizing AIGER circuits from LTL/PSL formulas.
#+SETUPFILE: setup.org
#+HTML_LINK_UP: tools.html
* Basic usage
This tool answers whether a controller can be built given an LTL/PSL formula
specifying its behavior. =ltlsynt= is typically called with
the following three options:
- =--input=: a comma-separated list of input signal names
- =--output=: a comma-separated list of output signal names
- =--formula= or =--file=: the LTL/PSL specification.
The following example is unrealizable, because =a= is an input, so no circuit
can guarantee that it will be true eventually.
#+BEGIN_SRC sh :results verbatim :exports both
ltlsynt --input=a --output=b -f 'F a'
#+END_SRC
#+RESULTS:
#+begin_example
UNREALIZABLE
#+end_example
* TLSF
=ltlsynt= was made with the [[http://syntcomp.org/][SYNTCOMP]] competition in
mind, and more specifically the TLSF track of this competition. TLSF is a
high-level specification language created for the purpose of this competition.
Fortunately, the SYNTCOMP organizers also provide a tool called =syfco= which
can translate a TLSF specification to an LTL formula.
The following four steps show you how a TLSF specification called spec.tlsf can
be tested for realizability using =syfco= and =ltlsynt=:
#+BEGIN_SRC sh
LTL=$(syfco FILE -f ltlxba -m fully)
IN=$(syfco FILE -f ltlxba -m fully)
OUT=$(syfco FILE -f ltlxba -m fully)
ltlsynt --formula="$LTL" --input="$IN" --output="$OUT"
#+END_SRC
* Algorithm
The tool reduces the synthesis problem to a parity game, and solves the parity
game using Zielonka's recursive algorithm. The full reduction from LTL to
parity game is described in a paper yet to be written and published.
You can ask =ltlsynt= not to solve the game and print it instead (in the
PGSolver format) using the =--print-pg= option, and leaving you the choice of
an external solver such as PGSolver.

View file

@ -49,6 +49,7 @@ corresponding commands are hidden.
formula.
- [[file:ltldo.org][=ltldo=]] Run LTL/PSL formulas through other tools using common [[file:ioltl.org][input]]
and [[file:oaut.org][output]] interfaces.
- [[file:ltlsynt.org][=ltlsynt=]] Synthesize AIGER circuits from LTL/PSL specifications.
- [[file:dstar2tgba.org][=dstar2tgba=]] Convert \omega-automata with any acceptance into
variants of Büchi automata.
- [[file:randaut.org][=randaut=]] Generate random \omega-automata.
@ -73,8 +74,9 @@ convenience, you can browse their HTML versions:
[[./man/ltl2tgta.1.html][=ltl2tgta=]](1),
[[./man/ltlcross.1.html][=ltlcross=]](1),
[[./man/ltldo.1.html][=ltldo=]](1),
[[./man/ltlgrind.1.html][=ltlgrind=]](1),
[[./man/ltlfilt.1.html][=ltlfilt=]](1),
[[./man/ltlgrind.1.html][=ltlgrind=]](1),
[[./man/ltlsynt.1.html][=ltlsynt=]](1),
[[./man/randaut.1.html][=randaut=]](1),
[[./man/randltl.1.html][=randltl=]](1),
[[./man/spot-x.7.html][=spot-x=]](7),