update ltlsynt documentation

closes #355

* doc/org/citing.org, bin/man/ltlsynt.x: add SYNT2018 paper
* doc/org/ltlsynt.org: fix documentation
This commit is contained in:
Maximilien Colange 2018-06-13 14:27:48 +02:00
parent fbc372e292
commit f2128360a7
3 changed files with 76 additions and 38 deletions

View file

@ -1,3 +1,11 @@
.\" -*- coding: utf-8 -*- .\" -*- coding: utf-8 -*-
[NAME] [NAME]
ltlsynt \- synthesize AIGER circuits from LTL specifications ltlsynt \- reactive synthesis from LTL specifications
[BIBLIOGRAPHY]
If you would like to give a reference to this tool in an article,
we suggest you cite the following paper:
.TP
\(bu
Thibaud Michaud, Maximilien Colange: Reactive Synthesis from LTL
Specification with Spot. Proceedings of SYNT@CAV'18.

View file

@ -68,6 +68,11 @@ be more specific about a particular aspect of Spot.
Presents the automaton format [[file:hoa.org][supported by Spot]] and [[http://adl.github.io/hoaf/support.html][several other Presents the automaton format [[file:hoa.org][supported by Spot]] and [[http://adl.github.io/hoaf/support.html][several other
tools]]. tools]].
- *Reactive Synthesis from LTL Specification with Spot*,
/Thibaud Michaud/, /Maximilien Colange/.
In Proc. of SYNT@CAV'18. to appear. ([[https://www.lrde.epita.fr/~max/bibtexbrowser.php?key=michaud.18.synt&bib=perso.bib][bib]] | [[https://www.lrde.epita.fr/dload/papers/michaud.18.synt.pdf][pdf]])
Presents the tool [[file:ltlsynt.org][=ltlsynt=]].
* Obsolete reference * Obsolete reference

View file

@ -6,46 +6,61 @@
* Basic usage * Basic usage
This tool synthesizes [[http://fmv.jku.at/aiger/][AIGER]] circuits from LTL/PSL This tool synthesizes controllers from LTL/PSL formulas.
formulas. =ltlsynt= is typically called with the following three options:
- =--input=: a comma-separated list of input signal names Consider a set $I$ of /input/ atomic propositions, a set $O$ of output atomic
- =--output=: a comma-separated list of output signal names propositions, and a PSL formula \phi over the propositions in $I \cup O$. A
- =--formula= or =--file=: the LTL/PSL specification. =controller= realizing \phi is a function $c: 2^{I \cup O} \times 2^I \mapsto
2^O$ such that, for every \omega-word $(u_i)_{i \in N} \in (2^I)^\omega$ over
the input propositions, the word $(u_i \cup c(u_0 \dots u_{i-1}, u_i))_{i \in
N}$ satisfies \phi.
The following example illustrates the synthesis of an =AND= gate. We call the two =ltlsynt= has three mandatory options:
inputs =a= and =b=, and the output =c=. We want the relationship between the - =--ins=: a comma-separated list of input atomic propositions;
inputs and the output to always hold, so we prefix the propositional formula - =--outs=: a comma-separated list of output atomic propositions;
with a =G= operator: - =--formula= or =--file=: a LTL/PSL specification.
The following example illustrates the synthesis of a controller acting as an
=AND= gate. We have two inputs =a= and =b= and one output =c=, and we want =c=
to always be the =AND= of the two inputs:
#+BEGIN_SRC sh :results verbatim :exports both #+BEGIN_SRC sh :results verbatim :exports both
ltlsynt --input=a,b --output=c --formula 'G (a & b <=> c)' ltlsynt --ins=a,b --outs=c -f 'G (a & b <=> c)'
#+END_SRC #+END_SRC
#+RESULTS: #+RESULTS:
#+begin_example #+begin_example
REALIZABLE REALIZABLE
aag 3 2 0 1 1 HOA: v1
2 States: 1
4 Start: 0
6 AP: 3 "b" "c" "a"
6 2 4 acc-name: all
i0 a Acceptance: 0 t
i1 b properties: trans-labels explicit-labels state-acc deterministic
o0 c --BODY--
State: 0
[0&1&2] 0
[!0&!1 | !1&!2] 0
--END--
#+end_example #+end_example
The output is composed of two sections. The first one is a single line The output is composed of two parts:
containing either REALIZABLE or UNREALIZABLE, and the second one is an AIGER - the first one is a single line REALIZABLE or UNREALIZABLE;
circuit that satisfies the specification (or nothing if it is unrealizable). - the second one is an automaton describing the controller (if the input
In this example, the generated circuit contains, as expected, a single =AND= specification is realizable). In this example, the controller has a single
gate linking the two inputs to the output. state, with two loops labelled by =a & b & c= and =(!a | !b) & !c=.
The following example is unrealizable, because =a= is an input, so no circuit If a controller exists, then one with finite memory exists. Such controllers
can guarantee that it will be true eventually. are easily represented as automata (or more specifically as I/O automata or
transducers). In the automaton representing the controller, the acceptance
condition is irrelevant and trivially true.
The following example illustrates the case of an unrealizable specification. As
=a= is an input proposition, there is no way to guarantee that it will
eventually hold.
#+BEGIN_SRC sh :results verbatim :exports both #+BEGIN_SRC sh :results verbatim :exports both
ltlsynt --input=a --output=b -f 'F a' ltlsynt --ins=a --outs=b -f 'F a'
#+END_SRC #+END_SRC
#+RESULTS: #+RESULTS:
@ -53,13 +68,23 @@ ltlsynt --input=a --output=b -f 'F a'
UNREALIZABLE UNREALIZABLE
#+end_example #+end_example
By default, the controller is output in HOA format, but it can be output as an
[[http://fmv.jku.at/aiger/][AIGER]] circuit thanks to the =--aiger= flag. This
is the output format required for the [[http://syntcomp.org/][SYNTCOMP]]
competition.
The generation of a controller can be disabled with the flag =--realizability=.
In this case, =ltlsynt= output is limited to REALIZABLE or UNREALIZABLE.
* TLSF * TLSF
=ltlsynt= was made with the [[http://syntcomp.org/][SYNTCOMP]] competition in =ltlsynt= was made with the [[http://syntcomp.org/][SYNTCOMP]] competition in
mind, and more specifically the TLSF track of this competition. TLSF is a mind, and more specifically the TLSF track of this competition. TLSF is a
high-level specification language created for the purpose of this competition. high-level specification language created for the purpose of this competition.
Fortunately, the SYNTCOMP organizers also provide a tool called =syfco= which Fortunately, the SYNTCOMP organizers also provide a tool called
can translate a TLSF specification to an LTL formula. [[https://github.com/reactive-systems/syfco][=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 The following four steps show you how a TLSF specification called spec.tlsf can
be synthesized using =syfco= and =ltlsynt=: be synthesized using =syfco= and =ltlsynt=:
@ -68,19 +93,19 @@ be synthesized using =syfco= and =ltlsynt=:
LTL=$(syfco FILE -f ltlxba -m fully) LTL=$(syfco FILE -f ltlxba -m fully)
IN=$(syfco FILE -f ltlxba -m fully) IN=$(syfco FILE -f ltlxba -m fully)
OUT=$(syfco FILE -f ltlxba -m fully) OUT=$(syfco FILE -f ltlxba -m fully)
ltlsynt --formula="$LTL" --input="$IN" --output="$OUT" ltlsynt --formula="$LTL" --ins="$IN" --outs="$OUT"
#+END_SRC #+END_SRC
* Algorithm * Algorithm
The tool reduces the synthesis problem to a parity game, and solves the parity 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 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. parity game is described in the following paper:
- *Reactive Synthesis from LTL Specification with Spot*, /Thibaud Michaud/,
/Maximilien Colange/. In Proc. of SYNT@CAV'18. to appear.
You can also ask =ltlsynt= to print to obtained parity game into
[[https://github.com/tcsprojects/pgsolver][PGSolver]] format, with the flag
=--print-pg=. Note that this flag deactivates the resolution of the parity
game, which is to be deferred to one of the solvers from PGSolver.
You can control the parity game solving step in two ways:
- By choosing a different algorithm using the =--algo= option. The default is
=rec= for Zielonka's recursive algorithm, and as of now the only other
available option is =qp= for Calude et al.'s quasi-polynomial time algorithm.
- By asking =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.