org: run a spell checker on the documentation
* doc/org/autcross.org, doc/org/autfilt.org, doc/org/citing.org, doc/org/compile.org, doc/org/concepts.org, doc/org/csv.org, doc/org/dstar2tgba.org, doc/org/genaut.org, doc/org/genltl.org, doc/org/hierarchy.org, doc/org/hoa.org, doc/org/index.org, doc/org/install.org, doc/org/ltl2tgba.org, doc/org/ltl2tgta.org, doc/org/ltlcross.org, doc/org/ltlfilt.org, doc/org/ltlgrind.org, doc/org/ltlsynt.org, doc/org/oaut.org, doc/org/randaut.org, doc/org/randltl.org, doc/org/satmin.org, doc/org/tut.org, doc/org/tut01.org, doc/org/tut02.org, doc/org/tut03.org, doc/org/tut04.org, doc/org/tut10.org, doc/org/tut11.org, doc/org/tut12.org, doc/org/tut20.org, doc/org/tut21.org, doc/org/tut22.org, doc/org/tut23.org, doc/org/tut24.org, doc/org/tut30.org, doc/org/tut31.org, doc/org/tut50.org, doc/org/tut51.org, doc/org/tut52.org, doc/org/tut90.org, doc/org/upgrade2.org: Run ispell-buffer on all these. * bin/autfilt.cc, python/spot/__init__.py: Fix typos in help texts noticed while spell-checking the org files.
This commit is contained in:
parent
0fbc83e9c2
commit
f3b8bf8e56
45 changed files with 317 additions and 194 deletions
|
|
@ -185,7 +185,7 @@ static const argp_option options[] =
|
||||||
"match automata with a number of declared, but unused atomic "
|
"match automata with a number of declared, but unused atomic "
|
||||||
"propositions in RANGE", 0 },
|
"propositions in RANGE", 0 },
|
||||||
{ "acceptance-is", OPT_ACCEPTANCE_IS, "NAME|FORMULA", 0,
|
{ "acceptance-is", OPT_ACCEPTANCE_IS, "NAME|FORMULA", 0,
|
||||||
"match automata with given accetance condition", 0 },
|
"match automata with given acceptance condition", 0 },
|
||||||
{ "are-isomorphic", OPT_ARE_ISOMORPHIC, "FILENAME", 0,
|
{ "are-isomorphic", OPT_ARE_ISOMORPHIC, "FILENAME", 0,
|
||||||
"keep automata that are isomorphic to the automaton in FILENAME", 0 },
|
"keep automata that are isomorphic to the automaton in FILENAME", 0 },
|
||||||
{ "isomorphic", 0, nullptr, OPTION_ALIAS | OPTION_HIDDEN, nullptr, 0 },
|
{ "isomorphic", 0, nullptr, OPTION_ALIAS | OPTION_HIDDEN, nullptr, 0 },
|
||||||
|
|
|
||||||
|
|
@ -491,4 +491,13 @@ rm -f autcross.csv
|
||||||
# LocalWords: bQiY IubpMs dfmYfX NXLr zSwXhW bDOq og mUp QVurtU ap
|
# LocalWords: bQiY IubpMs dfmYfX NXLr zSwXhW bDOq og mUp QVurtU ap
|
||||||
# LocalWords: ok complementation Ai Aj gRqrd ubUpHb JxFi oQGbj SQT
|
# LocalWords: ok complementation Ai Aj gRqrd ubUpHb JxFi oQGbj SQT
|
||||||
# LocalWords: kWt Eo Xsc WXgCB vLwKMQ tI SXF qqlE KXplk ZFTCz PNY
|
# LocalWords: kWt Eo Xsc WXgCB vLwKMQ tI SXF qqlE KXplk ZFTCz PNY
|
||||||
# LocalWords: hUAK IjnFhD cWys ZqjdQh
|
# LocalWords: hUAK IjnFhD cWys ZqjdQh args ltlcross CSV SRC sed HB
|
||||||
|
# LocalWords: LBTT's LBTT lOYLT WGO UIX wx abng Eq WdZ CvfJ tYq dpa
|
||||||
|
# LocalWords: YvkfS ahOMS HdynHB PcREk XcblC tgba csv YPfmR bT DpL
|
||||||
|
# LocalWords: gpYcBB mxsGU fPCaeC hgYD xM YU Qu hwVVVD MLmVq edfVVE
|
||||||
|
# LocalWords: ATTR acc scc nondetstates noweb EOF ttpQt elszrt isDr
|
||||||
|
# LocalWords: rFJYtN BwKL KHA BSYDwC DjL hw PASD ltldo genltl Gp fP
|
||||||
|
# LocalWords: VyvQVJ fVtUyh cNgs MWSMMU oVyBs XF XFp Tgzsu aOBmny
|
||||||
|
# LocalWords: Sg al iPt iZ aA xyBCkm Ju FyS HU Xy rVG veUbt Rceyvf
|
||||||
|
# LocalWords: YXtcP imCn LwA xF aUm xdVyk UpeRPV kI yARu IDzrh
|
||||||
|
# LocalWords: parallelization xargs findutils moreutils
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#+TITLE: =autfilt=
|
#+TITLE: =autfilt=
|
||||||
#+DESCRIPTION: Spot command-line tool for filtering, tranforming, and converting ω-automata.
|
#+DESCRIPTION: Spot command-line tool for filtering, transforming, and converting ω-automata.
|
||||||
#+INCLUDE: setup.org
|
#+INCLUDE: setup.org
|
||||||
#+HTML_LINK_UP: tools.html
|
#+HTML_LINK_UP: tools.html
|
||||||
#+PROPERTY: header-args:sh :results verbatim :exports both
|
#+PROPERTY: header-args:sh :results verbatim :exports both
|
||||||
|
|
@ -9,10 +9,10 @@ The =autfilt= tool can filter, transform, and convert a stream of automata.
|
||||||
|
|
||||||
The tool operates a loop over 5 phases:
|
The tool operates a loop over 5 phases:
|
||||||
- input one automaton
|
- input one automaton
|
||||||
- optionally preprocess the automaton
|
- optionally pre-process the automaton
|
||||||
- optionally filter the automaton (i.e., decide whether to ignore the
|
- optionally filter the automaton (i.e., decide whether to ignore the
|
||||||
automaton or continue with it)
|
automaton or continue with it)
|
||||||
- optionally postprocess the automaton (to simply it or change its acceptance)
|
- optionally post-process the automaton (to simply it or change its acceptance)
|
||||||
- output the automaton
|
- output the automaton
|
||||||
|
|
||||||
The simplest way to use the tool is simply to use it for input and
|
The simplest way to use the tool is simply to use it for input and
|
||||||
|
|
@ -211,7 +211,7 @@ autfilt --help | sed -n '/Filtering options.*:/,/^$/p' | sed '1d;$d'
|
||||||
in RANGE
|
in RANGE
|
||||||
--accept-word=WORD keep automata that accept WORD
|
--accept-word=WORD keep automata that accept WORD
|
||||||
--acceptance-is=NAME|FORMULA
|
--acceptance-is=NAME|FORMULA
|
||||||
match automata with given accetance condition
|
match automata with given acceptance condition
|
||||||
--ap=RANGE match automata with a number of (declared) atomic
|
--ap=RANGE match automata with a number of (declared) atomic
|
||||||
propositions in RANGE
|
propositions in RANGE
|
||||||
--are-isomorphic=FILENAME keep automata that are isomorphic to the
|
--are-isomorphic=FILENAME keep automata that are isomorphic to the
|
||||||
|
|
@ -248,6 +248,8 @@ autfilt --help | sed -n '/Filtering options.*:/,/^$/p' | sed '1d;$d'
|
||||||
--is-weak keep only weak automata
|
--is-weak keep only weak automata
|
||||||
--nondet-states=RANGE keep automata whose number of nondeterministic
|
--nondet-states=RANGE keep automata whose number of nondeterministic
|
||||||
states is in RANGE
|
states is in RANGE
|
||||||
|
-N, --nth=RANGE assuming input automata are numbered from 1, keep
|
||||||
|
only those in RANGE
|
||||||
--rej-sccs=RANGE, --rejecting-sccs=RANGE
|
--rej-sccs=RANGE, --rejecting-sccs=RANGE
|
||||||
keep automata whose number of non-trivial
|
keep automata whose number of non-trivial
|
||||||
rejecting SCCs is in RANGE
|
rejecting SCCs is in RANGE
|
||||||
|
|
@ -809,7 +811,7 @@ randltl -n -1 a b | ltlfilt --simplify --remove-wm |
|
||||||
:header-args:sh: :results verbatim :exports code
|
:header-args:sh: :results verbatim :exports code
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
We know from a previous exemple that formula =a U b U c= accepts the
|
We know from a previous example that formula =a U b U c= accepts the
|
||||||
word =b; cycle{c}=. We can actually highlight the corresponding
|
word =b; cycle{c}=. We can actually highlight the corresponding
|
||||||
run in the automaton:
|
run in the automaton:
|
||||||
|
|
||||||
|
|
@ -868,3 +870,13 @@ ltl2tgba 'F((b R a) W Gb)' |
|
||||||
#+BEGIN_SRC sh :results silent :exports results
|
#+BEGIN_SRC sh :results silent :exports results
|
||||||
rm -f example.hoa aut-ex1.hoa
|
rm -f example.hoa aut-ex1.hoa
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
# LocalWords: utf html args pre LBTT's dstar lbtt SRC EOF DOTEXTRA
|
||||||
|
# LocalWords: rankdir invis init fi randaut acc SCCs det tgba sed
|
||||||
|
# LocalWords: CSV iw dges tates sccs ap SCC nondet rej triv ba Dax
|
||||||
|
# LocalWords: cobuchi coBuchi superset sbacc determinized al ATVA
|
||||||
|
# LocalWords: Safra Redziejowski cnf scc aN subautomaton destut dnf
|
||||||
|
# LocalWords: dualize APs rabin gra streett gsa instut NUM incr aut
|
||||||
|
# LocalWords: langmap preproc PicoSAT SATsolver SATSOLVER svg txt
|
||||||
|
# LocalWords: randltl ltlfilt uniq Fb XF ltldo wm Gb GFa FG hlword
|
||||||
|
# LocalWords: hlnondet
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ use the following reference:
|
||||||
of the library, [[file:tools.org][the tools]], the Python bindings), and provides many
|
of the library, [[file:tools.org][the tools]], the Python bindings), and provides many
|
||||||
references detailing more specific aspects.
|
references detailing more specific aspects.
|
||||||
|
|
||||||
|
|
||||||
* Other, more specific, references
|
* Other, more specific, references
|
||||||
|
|
||||||
Alternatively, you may also like to reference these papers to
|
Alternatively, you may also like to reference these papers to
|
||||||
|
|
@ -91,3 +90,11 @@ be more specific about a particular aspect of Spot.
|
||||||
|
|
||||||
For a while, this used to be the only paper presenting Spot as a
|
For a while, this used to be the only paper presenting Spot as a
|
||||||
model-checking library.
|
model-checking library.
|
||||||
|
|
||||||
|
# LocalWords: utf html Alexandre Duret Lutz Lewkowicz Amaury Xu pdf
|
||||||
|
# LocalWords: Fauchille Thibaud Michaud Etienne Proc ATVA LNCS TGBA
|
||||||
|
# LocalWords: ltlfilt randltl ltlcross tgba Eddine Fabrice Kordon
|
||||||
|
# LocalWords: Petri ToPNoC tgta Souheib Baarir LPAR Tomáš Babiak
|
||||||
|
# LocalWords: František Blahoudek Joachim Křetínský Müller Strejček
|
||||||
|
# LocalWords: CAV Maximilien Colange ltlsynt Christel Baier
|
||||||
|
# LocalWords: Poitrenaud Volendam
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ greetings and the Spot version:
|
||||||
|
|
||||||
|
|
||||||
To successfully compile this example program, we need a C++ compiler,
|
To successfully compile this example program, we need a C++ compiler,
|
||||||
obvisously. On this page, we are going to assume that you use =g++=
|
obviously. On this page, we are going to assume that you use =g++=
|
||||||
(version 7 or later), but other compilers like =clang++= share the
|
(version 7 or later), but other compilers like =clang++= share the
|
||||||
same user interface. To successfully build the =hello= program, we
|
same user interface. To successfully build the =hello= program, we
|
||||||
might need to tell the compiler several things:
|
might need to tell the compiler several things:
|
||||||
|
|
@ -55,7 +55,7 @@ might need to tell the compiler several things:
|
||||||
|
|
||||||
In the likely case linking was made against the shared library
|
In the likely case linking was made against the shared library
|
||||||
=libspot.so=, the dynamic loader will have to locate =libspot.so=
|
=libspot.so=, the dynamic loader will have to locate =libspot.so=
|
||||||
everytime the =hello= program is started, so this too might require
|
every time the =hello= program is started, so this too might require
|
||||||
some fiddling, for instance using the environment variable
|
some fiddling, for instance using the environment variable
|
||||||
=LD_LIBRARY_PATH= if the library has not been installed in a standard
|
=LD_LIBRARY_PATH= if the library has not been installed in a standard
|
||||||
location.
|
location.
|
||||||
|
|
@ -146,7 +146,7 @@ it every time you want to run a binary that depends on Spot.
|
||||||
|
|
||||||
* Case 4: You compiled Spot yourself, but did not install it
|
* Case 4: You compiled Spot yourself, but did not install it
|
||||||
|
|
||||||
We do not recommand this, but it is possible to compile programs
|
We do not recommend this, but it is possible to compile programs
|
||||||
that uses an uninstalled version of Spot.
|
that uses an uninstalled version of Spot.
|
||||||
|
|
||||||
So you would just compile Spot in some directory (let's call it
|
So you would just compile Spot in some directory (let's call it
|
||||||
|
|
@ -178,7 +178,7 @@ There are at least two traps with this scenario:
|
||||||
archive/ (some file with a =*.la= extension) that is an abstraction
|
archive/ (some file with a =*.la= extension) that is an abstraction
|
||||||
for a library (be it static, shared, or both), and its dependencies
|
for a library (be it static, shared, or both), and its dependencies
|
||||||
or options. During =make install=, these /Libtool archives/ are
|
or options. During =make install=, these /Libtool archives/ are
|
||||||
transformed into actuall shared or static libraries, installed and
|
transformed into actual shared or static libraries, installed and
|
||||||
configured properly. But since in this scenario =make install= is
|
configured properly. But since in this scenario =make install= is
|
||||||
not run, you have to deal with the /Libtool archives/ directly.
|
not run, you have to deal with the /Libtool archives/ directly.
|
||||||
|
|
||||||
|
|
@ -205,7 +205,7 @@ the desired result. See the [[http://www.gnu.org/software/libtool/manual/][GNU
|
||||||
* Other libraries
|
* Other libraries
|
||||||
|
|
||||||
If your program has to handle BDDs directly (for instance if you are
|
If your program has to handle BDDs directly (for instance if you are
|
||||||
[[file:tut22.org][creating an automaton]] explicitely), or if your system does not support
|
[[file:tut22.org][creating an automaton]] explicitly), or if your system does not support
|
||||||
one library requiring another, you will need to link with the =bddx=
|
one library requiring another, you will need to link with the =bddx=
|
||||||
library. This should be as simple as adding =-lbddx= after =-lspot=
|
library. This should be as simple as adding =-lbddx= after =-lspot=
|
||||||
in the first three cases.
|
in the first three cases.
|
||||||
|
|
@ -234,8 +234,8 @@ will turn on assertions, and debugging options, while
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
will disable assertions and enable more optimizations.
|
will disable assertions and enable more optimizations.
|
||||||
|
|
||||||
If you are writing programs against Spot, we recommand to compile Spot
|
If you are writing programs against Spot, we recommend to compile Spot
|
||||||
with =--enable-devel= while your are developping your programs (the
|
with =--enable-devel= while your are developing your programs (the
|
||||||
assertions in Spot can be useful to diagnose problems in your program,
|
assertions in Spot can be useful to diagnose problems in your program,
|
||||||
or in Spot), and then use =--disable-devel= once you are confident and
|
or in Spot), and then use =--disable-devel= once you are confident and
|
||||||
desire speed.
|
desire speed.
|
||||||
|
|
@ -245,3 +245,7 @@ will default to =--disable-devel=.
|
||||||
|
|
||||||
Development versions (i.e., versions ending with a letter) default to
|
Development versions (i.e., versions ending with a letter) default to
|
||||||
=--enable-devel=.
|
=--enable-devel=.
|
||||||
|
|
||||||
|
# LocalWords: utf html args SRC nThis preprocessor libspot lspot LD
|
||||||
|
# LocalWords: dev subdirectory sudo ldconfig ld usr Libtool libtool
|
||||||
|
# LocalWords: portably gdb BDDs bddx lbddx libbddx Wextra Og devel
|
||||||
|
|
|
||||||
|
|
@ -496,7 +496,7 @@ formula. Everything here is case-sensitive.
|
||||||
|
|
||||||
#+BEGIN_SRC python :results verbatim raw :exports results
|
#+BEGIN_SRC python :results verbatim raw :exports results
|
||||||
import spot
|
import spot
|
||||||
# org-mode recognize | as a table delemiter even in ~|~ or =|= but the
|
# org-mode recognizes | as a table delimiter even in ~|~ or =|= but the
|
||||||
# documented workaround to use \vert{} does not work in ~\vert{}~ or =\vert{}=.
|
# documented workaround to use \vert{} does not work in ~\vert{}~ or =\vert{}=.
|
||||||
# So until we have a better solution, let's leave the =...= mode to display
|
# So until we have a better solution, let's leave the =...= mode to display
|
||||||
# \vert{} characters.
|
# \vert{} characters.
|
||||||
|
|
@ -567,7 +567,7 @@ edge will have the same effect as forking the automaton to evaluate
|
||||||
the rest of the word simultaneously from each universal destination.
|
the rest of the word simultaneously from each universal destination.
|
||||||
A run of an alternating automaton can therefore be pictured as a tree.
|
A run of an alternating automaton can therefore be pictured as a tree.
|
||||||
The tree is accepting if all its branches satisfy the acceptance condition.
|
The tree is accepting if all its branches satisfy the acceptance condition.
|
||||||
(See the [[http://adl.github.io/hoaf/][Hanoi Omega-Automa format]] for more precise semantics.)
|
(See the [[http://adl.github.io/hoaf/][Hanoi Omega-Automata format]] for more precise semantics.)
|
||||||
|
|
||||||
For instance the following alternating co-Büchi ω-automaton was
|
For instance the following alternating co-Büchi ω-automaton was
|
||||||
generated by [[https://sourceforge.net/projects/ltl3ba/][=ltl3ba 1.1.3=]] for the LTL formula =GF(a <-> Xb)=.
|
generated by [[https://sourceforge.net/projects/ltl3ba/][=ltl3ba 1.1.3=]] for the LTL formula =GF(a <-> Xb)=.
|
||||||
|
|
@ -1033,7 +1033,7 @@ layers.
|
||||||
built upon the =libspot= or =libspotgen= libraries
|
built upon the =libspot= or =libspotgen= libraries
|
||||||
- =libspotltsmin= is a library that helps interfacing Spot with
|
- =libspotltsmin= is a library that helps interfacing Spot with
|
||||||
dynamic libraries that [[http://fmt.cs.utwente.nl/tools/ltsmin/][LTSmin]] uses to represent state-spaces. It
|
dynamic libraries that [[http://fmt.cs.utwente.nl/tools/ltsmin/][LTSmin]] uses to represent state-spaces. It
|
||||||
currently supports libraries generated from promela models using
|
currently supports libraries generated from Promela models using
|
||||||
SpinS or a patched version of DiVinE, but you have to install
|
SpinS or a patched version of DiVinE, but you have to install
|
||||||
those third-party tools first. See [[https://gitlab.lrde.epita.fr/spot/spot/blob/next/tests/ltsmin/README][=tests/ltsmin/README=]]
|
those third-party tools first. See [[https://gitlab.lrde.epita.fr/spot/spot/blob/next/tests/ltsmin/README][=tests/ltsmin/README=]]
|
||||||
for details.
|
for details.
|
||||||
|
|
@ -1163,3 +1163,17 @@ set right before the automaton is output. The notable exception is
|
||||||
=product-states=, which is a property present in automata returned by
|
=product-states=, which is a property present in automata returned by
|
||||||
=spot::product()= function in case it is necessary to know the origins
|
=spot::product()= function in case it is necessary to know the origins
|
||||||
of each state.
|
of each state.
|
||||||
|
|
||||||
|
# LocalWords: utf html args ap ltl boolean automata ap BDD bdd BDDs
|
||||||
|
# LocalWords: boolean acyclic subformulas Reif buchi BuDDy BDDs ap
|
||||||
|
# LocalWords: ldots Minterms minterms Automata automata boolean bdd
|
||||||
|
# LocalWords: minterms Automata automata buchi Büchi iff SRC ltl GF
|
||||||
|
# LocalWords: tgba svg txt mathit Xb automata te hoa EOF autfilt ba
|
||||||
|
# LocalWords: arg bdd Büchi iff buchi SRC ltl tgba GFa GFb autfilt
|
||||||
|
# LocalWords: gba svg txt automata acc GF tba implem SRC Streett fi
|
||||||
|
# LocalWords: dstar FGb twa ltlfilt neverclaim GFp tmp init od Bd
|
||||||
|
# LocalWords: LBTT's lbtt LBT DRA Safra Sig ltldo FGp tl pdf psl
|
||||||
|
# LocalWords: libbddx libspot libddx libspotgen libspotltsmin SpinS
|
||||||
|
# LocalWords: LTSmin DiVinE ltsmin IPython Jupyter SCC SCCs trival
|
||||||
|
# LocalWords: flagname newval degen dnf streett degeneralize const
|
||||||
|
# LocalWords: aiger
|
||||||
|
|
|
||||||
|
|
@ -197,15 +197,15 @@ randltl -n 2 a b | ltlfilt --remove-wm |
|
||||||
cat results.csv
|
cat results.csv
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
: "formula","tool","exit_status","exit_code","time","states","edges","transitions","acc","scc","nonacc_scc","terminal_scc","weak_scc","strong_scc","nondet_states","nondet_aut","terminal_aut","weak_aut","strong_aut","product_states","product_transitions","product_scc"
|
: "formula","tool","exit_status","exit_code","time","states","edges","transitions","acc","scc","nondet_states","nondet_aut","complete_aut","product_states","product_transitions","product_scc"
|
||||||
: "(1)","ltl2tgba -s %f >%N","ok",0,0.0247303,1,1,1,1,1,0,1,0,0,0,0,1,0,0,200,3994,1
|
: "0","ltl2tgba -s %f >%N","ok",0,0.0447891,1,1,0,1,1,0,0,0,1,0,1
|
||||||
: "(1)","ltl3ba -f %s >%N","ok",0,0.00314673,1,1,1,1,1,0,1,0,0,0,0,1,0,0,200,3994,1
|
: "0","ltl3ba -f %s >%N","ok",0,0.010318,1,0,0,1,1,0,0,0,1,0,1
|
||||||
: "(0)","ltl2tgba -s %f >%N","ok",0,0.0246916,1,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1
|
: "1","ltl2tgba -s %f >%N","ok",0,0.0448043,1,1,1,1,1,0,0,1,200,4199,1
|
||||||
: "(0)","ltl3ba -f %s >%N","ok",0,0.00343519,1,0,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1
|
: "1","ltl3ba -f %s >%N","ok",0,0.0101865,1,1,1,1,1,0,0,1,200,4199,1
|
||||||
: "(!(G((F(b)) | (F(!((b) | (G(b))))))))","ltl2tgba -s %f >%N","ok",0,0.0233752,1,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1
|
: "!(F(!(b)))","ltl2tgba -s %f >%N","ok",0,0.0432052,1,1,1,1,1,0,0,0,200,2059,1
|
||||||
: "(!(G((F(b)) | (F(!((b) | (G(b))))))))","ltl3ba -f %s >%N","ok",0,0.00316933,1,0,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1
|
: "!(F(!(b)))","ltl3ba -f %s >%N","ok",0,0.0103946,1,1,1,1,1,0,0,0,200,2059,1
|
||||||
: "(G((F(b)) | (F(!((b) | (G(b)))))))","ltl2tgba -s %f >%N","ok",0,0.0238983,1,1,1,1,1,0,1,0,0,0,0,1,0,0,200,4083,1
|
: "F(!(b))","ltl2tgba -s %f >%N","ok",0,0.043252,2,3,4,1,2,0,0,1,400,8264,2
|
||||||
: "(G((F(b)) | (F(!((b) | (G(b)))))))","ltl3ba -f %s >%N","ok",0,0.00315896,1,1,1,1,1,0,1,0,0,0,0,1,0,0,200,4083,1
|
: "F(!(b))","ltl3ba -f %s >%N","ok",0,0.009877,2,3,4,1,2,0,0,1,400,8264,2
|
||||||
|
|
||||||
If we run =ltlfilt= on the first column, it will process the =formula=
|
If we run =ltlfilt= on the first column, it will process the =formula=
|
||||||
header as if it was an LTL formula.
|
header as if it was an LTL formula.
|
||||||
|
|
@ -285,3 +285,8 @@ cat result.csv
|
||||||
: "!((F(p0)) -> ((!(p1)) U (p0)))","ltl2tgba","ok",0,0.0243147,3,5,10,1,3,2,1,0,0,0,0,1,0,0,0,0,598,10398,4,"HOA: v1 name: ""Fp0 & (p1 R !p0)"" States: 3 Start: 1 AP: 2 ""p1"" ""p0"" acc-name: Buchi Acceptance: 1 Inf(0) properties: trans-labels explicit-labels state-acc deterministic stutter-invariant weak --BODY-- State: 0 {0} [t] 0 State: 1 [!0&!1] 1 [0&!1] 2 State: 2 [1] 0 [!1] 2 --END--"
|
: "!((F(p0)) -> ((!(p1)) U (p0)))","ltl2tgba","ok",0,0.0243147,3,5,10,1,3,2,1,0,0,0,0,1,0,0,0,0,598,10398,4,"HOA: v1 name: ""Fp0 & (p1 R !p0)"" States: 3 Start: 1 AP: 2 ""p1"" ""p0"" acc-name: Buchi Acceptance: 1 Inf(0) properties: trans-labels explicit-labels state-acc deterministic stutter-invariant weak --BODY-- State: 0 {0} [t] 0 State: 1 [!0&!1] 1 [0&!1] 2 State: 2 [1] 0 [!1] 2 --END--"
|
||||||
: "G((p0) -> (G(!(p1))))","ltl2tgba","ok",0,0.0201896,2,3,5,1,2,0,0,2,0,0,0,0,1,0,0,0,400,5025,2,"HOA: v1 name: ""G(!p0 | G!p1)"" States: 2 Start: 1 AP: 2 ""p0"" ""p1"" acc-name: Buchi Acceptance: 1 Inf(0) properties: trans-labels explicit-labels state-acc colored deterministic stutter-invariant weak --BODY-- State: 0 {0} [!1] 0 State: 1 {0} [0&!1] 0 [!0] 1 --END--"
|
: "G((p0) -> (G(!(p1))))","ltl2tgba","ok",0,0.0201896,2,3,5,1,2,0,0,2,0,0,0,0,1,0,0,0,400,5025,2,"HOA: v1 name: ""G(!p0 | G!p1)"" States: 2 Start: 1 AP: 2 ""p0"" ""p1"" acc-name: Buchi Acceptance: 1 Inf(0) properties: trans-labels explicit-labels state-acc colored deterministic stutter-invariant weak --BODY-- State: 0 {0} [!1] 0 State: 1 {0} [0&!1] 0 [!0] 1 --END--"
|
||||||
: "!(G((p0) -> (G(!(p1)))))","ltl2tgba","ok",0,0.0194598,3,6,12,1,3,2,1,0,0,0,0,1,0,0,0,1,600,12354,3,"HOA: v1 name: ""F(p0 & Fp1)"" States: 3 Start: 1 AP: 2 ""p0"" ""p1"" acc-name: Buchi Acceptance: 1 Inf(0) properties: trans-labels explicit-labels state-acc complete deterministic stutter-invariant terminal --BODY-- State: 0 [!1] 0 [1] 2 State: 1 [0&!1] 0 [!0] 1 [0&1] 2 State: 2 {0} [t] 2 --END--"
|
: "!(G((p0) -> (G(!(p1)))))","ltl2tgba","ok",0,0.0194598,3,6,12,1,3,2,1,0,0,0,0,1,0,0,0,1,600,12354,3,"HOA: v1 name: ""F(p0 & Fp1)"" States: 3 Start: 1 AP: 2 ""p0"" ""p1"" acc-name: Buchi Acceptance: 1 Inf(0) properties: trans-labels explicit-labels state-acc complete deterministic stutter-invariant terminal --BODY-- State: 0 [!1] 0 [1] 2 State: 1 [0&!1] 0 [!0] 1 [0&1] 2 State: 2 {0} [t] 2 --END--"
|
||||||
|
|
||||||
|
# LocalWords: utf CSV html args genltl randltl ltlfilt SRC gf csv
|
||||||
|
# LocalWords: GFp tgba dstar autfilt randaut Fp Xa ltlcross abc GFa
|
||||||
|
# LocalWords: GFb GFc GFd GFe wm ba acc scc nondet aut ok Fb Gb dac
|
||||||
|
# LocalWords: Buchi nonacc
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,7 @@ The =dstar2tgba= tool implements a 4-step process:
|
||||||
|
|
||||||
1. read the automaton
|
1. read the automaton
|
||||||
2. convert it into TGBA
|
2. convert it into TGBA
|
||||||
3. postprocess the resulting TGBA (simplifying the automaton, a degeneralizing it into a BA or Monitor if requested)
|
3. post-process the resulting TGBA (simplifying the automaton, degeneralizing it into a BA or Monitor if requested)
|
||||||
4. output the resulting automaton
|
4. output the resulting automaton
|
||||||
|
|
||||||
BTW, the above scenario is also exactly what you get with [[file:autfilt.org][=autfilt=]] if
|
BTW, the above scenario is also exactly what you get with [[file:autfilt.org][=autfilt=]] if
|
||||||
|
|
@ -298,7 +298,7 @@ For instance here is a complex command that will
|
||||||
- print it
|
- print it
|
||||||
- then convert the formula into =ltl2dstar='s input format, process
|
- then convert the formula into =ltl2dstar='s input format, process
|
||||||
it with =ltl2dstar= (using =ltl2tgba= as the actual LTL->BA
|
it with =ltl2dstar= (using =ltl2tgba= as the actual LTL->BA
|
||||||
transltor), and process the result with =dstar2tgba= to build a
|
translator), and process the result with =dstar2tgba= to build a
|
||||||
Büchi automaton (=-B=), favoring determinism if we can (=-D=),
|
Büchi automaton (=-B=), favoring determinism if we can (=-D=),
|
||||||
and finally displaying some statistics about this conversion.
|
and finally displaying some statistics about this conversion.
|
||||||
|
|
||||||
|
|
@ -433,3 +433,10 @@ Sometimes, as in the [[#streett_to_tgba_example][example for =GFa & GFb=]] the o
|
||||||
conversion happens to be deterministic. This is pure luck: Spot does
|
conversion happens to be deterministic. This is pure luck: Spot does
|
||||||
not implement any algorithm to preserve the determinism of Streett
|
not implement any algorithm to preserve the determinism of Streett
|
||||||
automata.
|
automata.
|
||||||
|
|
||||||
|
# LocalWords: utf dstar tgba html args LBTT's dstar's Ds GFb DRA ba
|
||||||
|
# LocalWords: fagfb ltlfilt SRC nba dsar DBA Acc Sig svg txt init
|
||||||
|
# LocalWords: fi streett GFa gfafgb gfagfb degeneralizing sed sbacc
|
||||||
|
# LocalWords: ouput lbtt GraphViz's SCCs hoaf neverclaim randltl wm
|
||||||
|
# LocalWords: Sst sst det Fc Gc GFc Xc XXFc XFc Gb SCC CNF buchi et
|
||||||
|
# LocalWords: Krishnan al vis Löding's cdot
|
||||||
|
|
|
||||||
|
|
@ -60,3 +60,6 @@ genaut --ks-nca=..5 --stats='%F=%L has %s states'
|
||||||
: ks-nca=3 has 7 states
|
: ks-nca=3 has 7 states
|
||||||
: ks-nca=4 has 9 states
|
: ks-nca=4 has 9 states
|
||||||
: ks-nca=5 has 11 states
|
: ks-nca=5 has 11 states
|
||||||
|
|
||||||
|
# LocalWords: utf genaut html args scalable SRC sed nca dsa nba svg
|
||||||
|
# LocalWords: kscobuchi txt
|
||||||
|
|
|
||||||
|
|
@ -339,9 +339,9 @@ sb-patterns=27,p0 | (p1 U p0)
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
Note that ~--sb-patterns=2 --sb-patterns=4 --sb-patterns=21..22~ also
|
Note that ~--sb-patterns=2 --sb-patterns=4 --sb-patterns=21..22~ also
|
||||||
have their complement formula listed as ~--sb-patterns=3
|
have their complement formulas listed as ~--sb-patterns=3
|
||||||
--sb-patterns=8 --sb-patterns=23..24~. So if you build the set of
|
--sb-patterns=8 --sb-patterns=23..24~. So if you build the set of
|
||||||
formula output by =genltl --sb-patterns= plus its negation, it will
|
formulas output by =genltl --sb-patterns= plus their negations, it will
|
||||||
contain only 46 formulas, not 54.
|
contain only 46 formulas, not 54.
|
||||||
|
|
||||||
#+BEGIN_SRC sh
|
#+BEGIN_SRC sh
|
||||||
|
|
@ -356,3 +356,6 @@ genltl --sb --pos --neg | ltlfilt --uniq --count
|
||||||
# LocalWords: ccj Xp XXp Xq XXq rv GFp lbt utf SETUPFILE html dac
|
# LocalWords: ccj Xp XXp Xq XXq rv GFp lbt utf SETUPFILE html dac
|
||||||
# LocalWords: Dwyer et al FMSP Etessami Holzmann sb Somenzi Bloem
|
# LocalWords: Dwyer et al FMSP Etessami Holzmann sb Somenzi Bloem
|
||||||
# LocalWords: CAV LaTeX Fq Fp pNN Gp XFp XF XGp FGp XG ltlfilt uniq
|
# LocalWords: CAV LaTeX Fq Fp pNN Gp XFp XF XGp FGp XG ltlfilt uniq
|
||||||
|
# LocalWords: args fxg GFa GFan GFz xn gxf hkrss liberouter Holeček
|
||||||
|
# LocalWords: kr DBA nlogn quasilinear kv Xb XXb XXXb FGa GFb beem
|
||||||
|
# LocalWords: Pelánek sejk GFai GFbn FGb FGbn Sikert al's tv uu pos
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ supported by Spot). The combination of these allowed operators only
|
||||||
makes it possible to express constraints on finite prefixes.
|
makes it possible to express constraints on finite prefixes.
|
||||||
|
|
||||||
/Obligations/ can be thought of as Boolean combinations of /safety/
|
/Obligations/ can be thought of as Boolean combinations of /safety/
|
||||||
and /guarentee/ properties, while /reactivity/ properties are Boolean
|
and /guarantee/ properties, while /reactivity/ properties are Boolean
|
||||||
combinations of /recurrence/ and /persistence/ properties. The
|
combinations of /recurrence/ and /persistence/ properties. The
|
||||||
negation of a /safety/ property is a /guarantee/ property (and
|
negation of a /safety/ property is a /guarantee/ property (and
|
||||||
vice-versa), and the same duality hold for /persistence/ and
|
vice-versa), and the same duality hold for /persistence/ and
|
||||||
|
|
@ -182,7 +182,7 @@ The order given above actually starts with the easier checks first and
|
||||||
keep the most complex tests at the end of the pipeline so they are
|
keep the most complex tests at the end of the pipeline so they are
|
||||||
applied to fewer formulas. Testing whether a formula is an LTL
|
applied to fewer formulas. Testing whether a formula is an LTL
|
||||||
formula is very cheap, testing if a formula is an obligation is harder
|
formula is very cheap, testing if a formula is an obligation is harder
|
||||||
(it may involves a translation to automata and a poweset
|
(it may involves a translation to automata and a powerset
|
||||||
construction), and testing whether a formula is a recurrence is the
|
construction), and testing whether a formula is a recurrence is the
|
||||||
most costly procedure (it involves a translation as well, plus
|
most costly procedure (it involves a translation as well, plus
|
||||||
conversion to deterministic Rabin automata, and an attempt to convert
|
conversion to deterministic Rabin automata, and an attempt to convert
|
||||||
|
|
@ -518,7 +518,7 @@ language larger than that of the property.
|
||||||
automata.
|
automata.
|
||||||
|
|
||||||
For the subclass of /obligation/ properties, using =-D= is a sure way
|
For the subclass of /obligation/ properties, using =-D= is a sure way
|
||||||
to obain a deterministic automaton (and even a minimal one), but for
|
to obtain a deterministic automaton (and even a minimal one), but for
|
||||||
the /recurrence/ properties that are not /obligations/ the translator
|
the /recurrence/ properties that are not /obligations/ the translator
|
||||||
does not make /too much/ effort to produce deterministic automata,
|
does not make /too much/ effort to produce deterministic automata,
|
||||||
even with =-D= (this might change in the future).
|
even with =-D= (this might change in the future).
|
||||||
|
|
@ -666,7 +666,7 @@ The translator is aware of that, so when it detects that the input
|
||||||
formula is a syntactic-persistence, it simplifies its translation
|
formula is a syntactic-persistence, it simplifies its translation
|
||||||
slightly to ensure that the output will use at most one acceptance
|
slightly to ensure that the output will use at most one acceptance
|
||||||
set. (It is possible to define a persistence properties using an LTL
|
set. (It is possible to define a persistence properties using an LTL
|
||||||
formula that is not a syntactic-persistance, in that case this
|
formula that is not a syntactic-persistence, in that case this
|
||||||
optimization is simply not applied.)
|
optimization is simply not applied.)
|
||||||
|
|
||||||
If the input is a weak property that is not syntactically weak, the
|
If the input is a weak property that is not syntactically weak, the
|
||||||
|
|
@ -723,3 +723,10 @@ $txt
|
||||||
[[file:hier-persistence-7.svg]]
|
[[file:hier-persistence-7.svg]]
|
||||||
|
|
||||||
That is indeed, a weak non-deterministic automaton.
|
That is indeed, a weak non-deterministic automaton.
|
||||||
|
|
||||||
|
# LocalWords: utf Pnueli html args PODC SCC subexpressions mathsf
|
||||||
|
# LocalWords: SRC ltlfilt vw GOPRT randltl genltl ltlgrind Dwyers
|
||||||
|
# LocalWords: et al FMSP dac uniq XFp psl Fb GF Gb FX GFb GXa wc tl
|
||||||
|
# LocalWords: powerset pdf FGb Xa Xb FXa GFa Löding IPL Dax ATVA
|
||||||
|
# LocalWords: tgba Löding's nondet hier oblig svg txt SCCs dstar
|
||||||
|
# LocalWords: XFb ltldo streett DBA FGa varphi
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
#+PROPERTY: header-args:sh :results verbatim :exports both
|
#+PROPERTY: header-args:sh :results verbatim :exports both
|
||||||
|
|
||||||
|
|
||||||
The [[http://adl.github.io/hoaf/][Hanoi Omega-Automa format]] is a textual representation of
|
The [[http://adl.github.io/hoaf/][Hanoi Omega-Automata format]] is a textual representation of
|
||||||
ω-automata labeled by Boolean formulas over a set of atomic
|
ω-automata labeled by Boolean formulas over a set of atomic
|
||||||
propositions, and using an arbitrary acceptance condition. The
|
propositions, and using an arbitrary acceptance condition. The
|
||||||
typical acceptances conditions like Büchi, generalized-Büchi,
|
typical acceptances conditions like Büchi, generalized-Büchi,
|
||||||
|
|
@ -680,7 +680,7 @@ The above table is for version 1 of the format. When version 1.1 is
|
||||||
selected (using =-H1.1=), some negated properties may be output. In
|
selected (using =-H1.1=), some negated properties may be output. In
|
||||||
particular, =stutter-sensitive= is replaced by =!stutter-invariant=.
|
particular, =stutter-sensitive= is replaced by =!stutter-invariant=.
|
||||||
The logic of not cluttering the output with all of =!terminal=,
|
The logic of not cluttering the output with all of =!terminal=,
|
||||||
=!weak=, and =!inhenrently-weak= is similar to the positive versions:
|
=!weak=, and =!inherently-weak= is similar to the positive versions:
|
||||||
=!inherently-weak= implies =!weak= which in turn implies =!terminal=,
|
=!inherently-weak= implies =!weak= which in turn implies =!terminal=,
|
||||||
so only one of those is emitted unless =-Hv= is used.
|
so only one of those is emitted unless =-Hv= is used.
|
||||||
|
|
||||||
|
|
@ -998,30 +998,6 @@ EOF
|
||||||
autfilt decorate.hoa -d'.#'
|
autfilt decorate.hoa -d'.#'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+RESULTS: decorate
|
|
||||||
#+begin_example
|
|
||||||
digraph "" {
|
|
||||||
rankdir=LR
|
|
||||||
label=<t<br/>[all]>
|
|
||||||
labelloc="t"
|
|
||||||
node [shape="circle"]
|
|
||||||
node [style="filled", fillcolor="#ffffa0"]
|
|
||||||
fontname="Lato"
|
|
||||||
node [fontname="Lato"]
|
|
||||||
edge [fontname="Lato"]
|
|
||||||
node[fontsize=12] fontsize=12 stylesheet="spot.css" edge[arrowhead=vee, arrowsize=.7, fontsize=12]
|
|
||||||
I [label="", style=invis, width=0]
|
|
||||||
I -> 1
|
|
||||||
0 [label=<0>]
|
|
||||||
0 -> 0 [label=<1>, taillabel="#1", style=bold, color="#FF4DA0"]
|
|
||||||
1 [label=<1>, style="bold,filled", color="#1F78B4"]
|
|
||||||
1 -> 2 [label=<1>, taillabel="#2", style=bold, color="#FF7F00"]
|
|
||||||
2 [label=<2>, style="bold,filled", color="#6A3D9A"]
|
|
||||||
2 -> 0 [label=<b>, taillabel="#3"]
|
|
||||||
2 -> 2 [label=<a & !b>, taillabel="#4"]
|
|
||||||
}
|
|
||||||
#+end_example
|
|
||||||
|
|
||||||
#+BEGIN_SRC dot :file decorate.svg :var txt=decorate :exports results
|
#+BEGIN_SRC dot :file decorate.svg :var txt=decorate :exports results
|
||||||
$txt
|
$txt
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
@ -1172,3 +1148,9 @@ State: 2 {0}
|
||||||
#+BEGIN_SRC sh :results silent :exports results
|
#+BEGIN_SRC sh :results silent :exports results
|
||||||
rm -f stvstracc.hoa sba.hoa stvstrlab.hoa decorate.hoa
|
rm -f stvstracc.hoa sba.hoa stvstrlab.hoa decorate.hoa
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
# LocalWords: html args Büchi accsets BDD SRC stvstracc EOF sed sba
|
||||||
|
# LocalWords: acc Buchi Hm tgba GFa Fb encodings parametered ary Hk
|
||||||
|
# LocalWords: bitsets randaut stvstrlab aut Hv hw bigwedge mathsf
|
||||||
|
# LocalWords: genltl gf GFp Fp parser's rankdir br labelloc ffffa
|
||||||
|
# LocalWords: fillcolor fontname svg txt Xa
|
||||||
|
|
|
||||||
|
|
@ -77,3 +77,6 @@ in any question (in English) or bug report without subscribing.
|
||||||
|
|
||||||
Our [[file:citing.org][citing page]] has a list of papers you could cite if you need to
|
Our [[file:citing.org][citing page]] has a list of papers you could cite if you need to
|
||||||
reference Spot in an academic publication.
|
reference Spot in an academic publication.
|
||||||
|
|
||||||
|
# LocalWords: utf psl acc LBTT DSTAR Pnueli DBA SCCs ltlcross GPL
|
||||||
|
# LocalWords: autcross LASTRELEASE LASTDATE Doxygen Jupyter IPython
|
||||||
|
|
|
||||||
|
|
@ -126,7 +126,7 @@ Once the repository is set up, you can simply install Spot with:
|
||||||
sudo dnf install spot python3-spot spot-devel spot-doc
|
sudo dnf install spot python3-spot spot-devel spot-doc
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
or a subset of those packages. The package =spot= contains the
|
or a subset of those packages. The package =spot= contains the
|
||||||
command-line tools, =python3-spot= contains the Python bindinges,
|
command-line tools, =python3-spot= contains the Python bindings,
|
||||||
=spot-devel= contains the C++ header files, and =spot-doc= the
|
=spot-devel= contains the C++ header files, and =spot-doc= the
|
||||||
documentation that you can also find online. Those packages depends
|
documentation that you can also find online. Those packages depends
|
||||||
on =libspot= that contains the shared libraries.
|
on =libspot= that contains the shared libraries.
|
||||||
|
|
@ -138,7 +138,7 @@ on =libspot= that contains the shared libraries.
|
||||||
|
|
||||||
The =master= branch of the git repository contains the code for the
|
The =master= branch of the git repository contains the code for the
|
||||||
latest released version, possibly with a few yet-to-be-released
|
latest released version, possibly with a few yet-to-be-released
|
||||||
bugfixes. The =next= branch is the main development branch, and contains
|
bug fixes. The =next= branch is the main development branch, and contains
|
||||||
the (working) code that should be part of the next major release.
|
the (working) code that should be part of the next major release.
|
||||||
|
|
||||||
To clone the git repository, use
|
To clone the git repository, use
|
||||||
|
|
@ -151,3 +151,8 @@ This should put you on the =next= branch by default. From there, read
|
||||||
the [[https://gitlab.lrde.epita.fr/spot/spot/blob/next/HACKING][HACKING]] file that should be at the top of your cloned repository:
|
the [[https://gitlab.lrde.epita.fr/spot/spot/blob/next/HACKING][HACKING]] file that should be at the top of your cloned repository:
|
||||||
it lists all the tools you should install before attempting to compile
|
it lists all the tools you should install before attempting to compile
|
||||||
the source tree.
|
the source tree.
|
||||||
|
|
||||||
|
# LocalWords: utf html LASTRELEASE LASTTARBALL LASTNEWS dev sudo
|
||||||
|
# LocalWords: libpython usr SRC README amd wget libspot GPG CFD pdf
|
||||||
|
# LocalWords: FECF ipython libbddx libspotltsmin dnf config repo
|
||||||
|
# LocalWords: lrde devel
|
||||||
|
|
|
||||||
|
|
@ -82,25 +82,6 @@ output by default)
|
||||||
#+BEGIN_SRC sh :exports none
|
#+BEGIN_SRC sh :exports none
|
||||||
ltl2tgba "Fa & GFb" -d
|
ltl2tgba "Fa & GFb" -d
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
#+RESULTS: dotex
|
|
||||||
#+begin_example
|
|
||||||
digraph G {
|
|
||||||
rankdir=LR
|
|
||||||
node [shape="circle"]
|
|
||||||
fontname="Lato"
|
|
||||||
node [fontname="Lato"]
|
|
||||||
edge [fontname="Lato"]
|
|
||||||
node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]
|
|
||||||
I [label="", style=invis, width=0]
|
|
||||||
I -> 1
|
|
||||||
0 [label="0"]
|
|
||||||
0 -> 0 [label=<b<br/><font color="#5DA5DA">⓿</font>>]
|
|
||||||
0 -> 0 [label=<!b>]
|
|
||||||
1 [label="1"]
|
|
||||||
1 -> 0 [label=<a>]
|
|
||||||
1 -> 1 [label=<!a>]
|
|
||||||
}
|
|
||||||
#+end_example
|
|
||||||
|
|
||||||
#+BEGIN_SRC dot :file dotex.svg :var txt=dotex :exports results
|
#+BEGIN_SRC dot :file dotex.svg :var txt=dotex :exports results
|
||||||
$txt
|
$txt
|
||||||
|
|
@ -249,40 +230,6 @@ as above, for comparison.
|
||||||
ltl2tgba -S 'GFa & GFb' -d
|
ltl2tgba -S 'GFa & GFb' -d
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+RESULTS: dotex2gba
|
|
||||||
#+begin_example
|
|
||||||
digraph G {
|
|
||||||
rankdir=LR
|
|
||||||
node [shape="circle"]
|
|
||||||
fontname="Lato"
|
|
||||||
node [fontname="Lato"]
|
|
||||||
edge [fontname="Lato"]
|
|
||||||
node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]
|
|
||||||
I [label="", style=invis, width=0]
|
|
||||||
I -> 0
|
|
||||||
0 [label=<0<br/><font color="#5DA5DA">⓿</font><font color="#F17CB0">❶</font>>]
|
|
||||||
0 -> 0 [label=<a & b>]
|
|
||||||
0 -> 1 [label=<!a & !b>]
|
|
||||||
0 -> 2 [label=<!a & b>]
|
|
||||||
0 -> 3 [label=<a & !b>]
|
|
||||||
1 [label=<1>]
|
|
||||||
1 -> 0 [label=<a & b>]
|
|
||||||
1 -> 1 [label=<!a & !b>]
|
|
||||||
1 -> 2 [label=<!a & b>]
|
|
||||||
1 -> 3 [label=<a & !b>]
|
|
||||||
2 [label=<2<br/><font color="#F17CB0">❶</font>>]
|
|
||||||
2 -> 0 [label=<a & b>]
|
|
||||||
2 -> 1 [label=<!a & !b>]
|
|
||||||
2 -> 2 [label=<!a & b>]
|
|
||||||
2 -> 3 [label=<a & !b>]
|
|
||||||
3 [label=<3<br/><font color="#5DA5DA">⓿</font>>]
|
|
||||||
3 -> 0 [label=<a & b>]
|
|
||||||
3 -> 1 [label=<!a & !b>]
|
|
||||||
3 -> 2 [label=<!a & b>]
|
|
||||||
3 -> 3 [label=<a & !b>]
|
|
||||||
}
|
|
||||||
#+end_example
|
|
||||||
|
|
||||||
#+BEGIN_SRC dot :file dotex2gba.svg :var txt=dotex2gba :exports results
|
#+BEGIN_SRC dot :file dotex2gba.svg :var txt=dotex2gba :exports results
|
||||||
$txt
|
$txt
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
@ -1060,7 +1007,7 @@ genltl --u-right=1..8 | ltl2tgba --stats '%s states and %e edges for "%f"'
|
||||||
|
|
||||||
Note that because no formula have been passed as argument to
|
Note that because no formula have been passed as argument to
|
||||||
=ltl2tgba=, it defaulted to reading them from standard input. Such a
|
=ltl2tgba=, it defaulted to reading them from standard input. Such a
|
||||||
behaviour can be requested explicitly with =-F -= if needed (e.g., to
|
behavior can be requested explicitly with =-F -= if needed (e.g., to
|
||||||
read from standard input in addition to processing other formula
|
read from standard input in addition to processing other formula
|
||||||
supplied with =-f=).
|
supplied with =-f=).
|
||||||
|
|
||||||
|
|
@ -1152,7 +1099,7 @@ page showing how to build them in Python and C++]].
|
||||||
|
|
||||||
Because Monitors accept every recognized run (in other words, they
|
Because Monitors accept every recognized run (in other words, they
|
||||||
only reject words that are not recognized), it makes little sense to
|
only reject words that are not recognized), it makes little sense to
|
||||||
use option =-C= to request /complete/ monitors. If uou combine =-C=
|
use option =-C= to request /complete/ monitors. If you combine =-C=
|
||||||
with =-M=, the result will output as a Büchi automaton if (and only
|
with =-M=, the result will output as a Büchi automaton if (and only
|
||||||
if) a sink state had to be added. For instance, here is the
|
if) a sink state had to be added. For instance, here is the
|
||||||
"complete" version of the previous monitor.
|
"complete" version of the previous monitor.
|
||||||
|
|
@ -1178,5 +1125,8 @@ $txt
|
||||||
# LocalWords: GraphViz's LBTT's neverclaim SPOT's init goto fi Gb
|
# LocalWords: GraphViz's LBTT's neverclaim SPOT's init goto fi Gb
|
||||||
# LocalWords: controled Gc gagbgc disjunction pre rewritings SCC Xa
|
# LocalWords: controled Gc gagbgc disjunction pre rewritings SCC Xa
|
||||||
# LocalWords: WDBA determinize degeneralization satisfiability SCCs
|
# LocalWords: WDBA determinize degeneralization satisfiability SCCs
|
||||||
# LocalWords: genltl nondeterministic eval setenv concat getenv
|
# LocalWords: genltl nondeterministic eval setenv concat getenv DG
|
||||||
# LocalWords: setq
|
# LocalWords: setq html args acc Buchi rankdir fontname Lato svg br
|
||||||
|
# LocalWords: fillcolor ffffa vee arrowsize gba hoaf processings dp
|
||||||
|
# LocalWords: ambig FGa fga fbgc fbgcfga determinized nosplit xltl
|
||||||
|
# LocalWords: det scc simul FGb xdet P'min p'min p'max CSV iw
|
||||||
|
|
|
||||||
|
|
@ -112,4 +112,5 @@ Other Models of Concurrency (ToPNoC VI), LNCS 7400, p. 94--112, 2012.
|
||||||
# LocalWords: Geldenhuys tgba SRC init invis nb Acc augb sed png fn
|
# LocalWords: Geldenhuys tgba SRC init invis nb Acc augb sed png fn
|
||||||
# LocalWords: cmdline Tpng txt Büchi livelock gba gta GFa GFb TGTAs
|
# LocalWords: cmdline Tpng txt Büchi livelock gba gta GFa GFb TGTAs
|
||||||
# LocalWords: gfagfb topnoc Eddine SALEM's ToPNoC LNCS eval setenv
|
# LocalWords: gfagfb topnoc Eddine SALEM's ToPNoC LNCS eval setenv
|
||||||
# LocalWords: concat getenv setq
|
# LocalWords: concat getenv setq utf html args svg TGBAs Alexandre
|
||||||
|
# LocalWords: Duret Lutz Fabrice Kordon Petri
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ Although =ltlcross= performs similar sanity checks as LBTT, it does
|
||||||
not implement any of the interactive features of LBTT. In our almost
|
not implement any of the interactive features of LBTT. In our almost
|
||||||
10-year usage of LBTT, we never had to use its interactive features to
|
10-year usage of LBTT, we never had to use its interactive features to
|
||||||
understand bugs in our translation. Therefore =ltlcross= will report
|
understand bugs in our translation. Therefore =ltlcross= will report
|
||||||
problems, maybe with a conterexample, but you will be on your own to
|
problems, maybe with a counterexample, but you will be on your own to
|
||||||
investigate and fix them (the =--grind= option may help you reduce the
|
investigate and fix them (the =--grind= option may help you reduce the
|
||||||
problem to a shorter formula).
|
problem to a shorter formula).
|
||||||
|
|
||||||
|
|
@ -659,7 +659,7 @@ showing two automata for =a U b=, the first automaton is deterministic
|
||||||
a nondeterministic state (state A2 has two possible successors for the
|
a nondeterministic state (state A2 has two possible successors for the
|
||||||
assignment $ab$) and is therefore not deterministic.
|
assignment $ab$) and is therefore not deterministic.
|
||||||
|
|
||||||
If option =--aumbiguous= was passed to =ltlcross=, the column
|
If option =--ambiguous= was passed to =ltlcross=, the column
|
||||||
=ambiguous_aut= holds a Boolean indicating whether the automaton is
|
=ambiguous_aut= holds a Boolean indicating whether the automaton is
|
||||||
ambiguous, i.e., if there exists a word that can be accepted by at
|
ambiguous, i.e., if there exists a word that can be accepted by at
|
||||||
least two different runs. (This information is not yet available for
|
least two different runs. (This information is not yet available for
|
||||||
|
|
@ -1420,7 +1420,7 @@ No problem detected.
|
||||||
into a =Makefile= that calls =ltlcross= for each of them.
|
into a =Makefile= that calls =ltlcross= for each of them.
|
||||||
|
|
||||||
For instance here is how to build a makefile called =ltlcross.mk=
|
For instance here is how to build a makefile called =ltlcross.mk=
|
||||||
testing ltl2tgbaand ltl3ba against all formulas produced by
|
testing =ltl2tgba= and =ltl3ba= against all formulas produced by
|
||||||
=genltl --eh=, and gathering statistics from all runs in =all.csv=.
|
=genltl --eh=, and gathering statistics from all runs in =all.csv=.
|
||||||
|
|
||||||
#+NAME: ltlcross.mk
|
#+NAME: ltlcross.mk
|
||||||
|
|
@ -1470,4 +1470,31 @@ rm -f results.csv results.json ltlcross.csv bogus-grind bogus ltlcross.mk
|
||||||
# LocalWords: CPs kXiZZS ILLzR wU CcMCaQ IOckzW tsT RZ TJXmT jb XRO
|
# LocalWords: CPs kXiZZS ILLzR wU CcMCaQ IOckzW tsT RZ TJXmT jb XRO
|
||||||
# LocalWords: nxqfd hS vNItGg acc scc nondetstates nondeterministic
|
# LocalWords: nxqfd hS vNItGg acc scc nondetstates nondeterministic
|
||||||
# LocalWords: cvs LaTeX datacols len ith otimes ltlcheck eval setq
|
# LocalWords: cvs LaTeX datacols len ith otimes ltlcheck eval setq
|
||||||
# LocalWords: setenv concat getenv
|
# LocalWords: setenv concat getenv utf html args SCCs nonaccepting
|
||||||
|
# LocalWords: dstar's lcr hvzgTC iYh nzjV rqfB OUNHEn qzVvdx eUfHTG
|
||||||
|
# LocalWords: infixed LBT's dstar parsers MWei nba streett mv dst
|
||||||
|
# LocalWords: Rabinizer MWRei rabinizer dra tela COMMANDFMT delag
|
||||||
|
# LocalWords: da dgra dpa ldba untrusted ne UWmAOs UALknk JlcYb Yqa
|
||||||
|
# LocalWords: vcaV jwQ eDh rE kjYd yDowOn zxU yf Dj NcC xUjPQ fD yl
|
||||||
|
# LocalWords: OCI kdqA ZsPBds IxFTSb hRJ OAV yTDisN CUj lF xWC fx
|
||||||
|
# LocalWords: aHi ATTR nondet aut ok degeneralized lor nonacc noweb
|
||||||
|
# LocalWords: EOF genltl gizrt os LiBWmP ztzWmc DCyLpz MeEivW oXCj
|
||||||
|
# LocalWords: APddNG un njT YNmfBO bGzWb rlrmnz KobkRW DFKnk IIcXH
|
||||||
|
# LocalWords: sYE ypOBqt rJtfR qK stderr dt str SRC datatable chr
|
||||||
|
# LocalWords: ok num acc scc nondet aut attr dcast SRC dt sep str
|
||||||
|
# LocalWords: chr ok num acc scc nondet aut selfref attr chr tgba
|
||||||
|
# LocalWords: dt SRC ltlcross svg ggplot aes abline colour hjust ba
|
||||||
|
# LocalWords: randltl eval lbtt ltlgrind OTHERFILENAME Fb modella
|
||||||
|
# LocalWords: lcr Nc CDjvYF LVv Sl EmhjSb GzR mwR gEcuQH UoNQx Qn
|
||||||
|
# LocalWords: IDRd VDFaS bkvvTT wMAQUJ qoYoWz ILwXXp avS MYCa vJss
|
||||||
|
# LocalWords: ItCKaM TG leC UXhs KwJJli kbRvp dups otaRtY bRLcyO GH
|
||||||
|
# LocalWords: DMJCE gHu gKcHMk UPD HUKX Dpno xyO fx vxmn wgw sd vt
|
||||||
|
# LocalWords: eA qHT qrbNOJ ceD Vz upQ EStxbg nUoj DgrW ohXyzM Vd
|
||||||
|
# LocalWords: bozRHC wYkQs TCxOYi uWKDhZ OkfrP aEdRAF vy Kv lcfpVl
|
||||||
|
# LocalWords: Hig Fc AvSorS AZkvCI Hd LNy pM tygKaf YHFrm GL iyV WD
|
||||||
|
# LocalWords: riOaKL RHWB iVlf Xli Ez Gy BLLY nQYO efo bF fFzkpv MQ
|
||||||
|
# LocalWords: FGa ltzvEc dqnX wmIXr yJesT HHyVWR scKnIH Wloux Rin
|
||||||
|
# LocalWords: SCCs bh PHg LvvYEm bcUDEs Pw REy parallelization src
|
||||||
|
# LocalWords: parallelize xargs findutils ltlfilt pnn formules mk
|
||||||
|
# LocalWords: moreutils's Makefile makefile fread externalptr Gp XF
|
||||||
|
# LocalWords: XFp XGp FGp GFp
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#+TITLE: =ltlfilt=
|
#+TITLE: =ltlfilt=
|
||||||
#+DESCRIPTION: Spot command-line tool for filtering, tranforming, and converting LTL formulas.
|
#+DESCRIPTION: Spot command-line tool for filtering, transforming, and converting LTL formulas.
|
||||||
#+INCLUDE: setup.org
|
#+INCLUDE: setup.org
|
||||||
#+HTML_LINK_UP: tools.html
|
#+HTML_LINK_UP: tools.html
|
||||||
#+PROPERTY: header-args:sh :results verbatim :exports both
|
#+PROPERTY: header-args:sh :results verbatim :exports both
|
||||||
|
|
@ -159,7 +159,7 @@ ltlfilt -f '(a & !b) & GF(a & !b) & FG(!c & a)' --relabel-bool=pnn
|
||||||
: p0 & GFp0 & FGp1
|
: p0 & GFp0 & FGp1
|
||||||
: p0 & p1 & GF(p0 & p1) & FG(p0 & p2)
|
: p0 & p1 & GF(p0 & p1) & FG(p0 & p2)
|
||||||
|
|
||||||
In the first formula, the independent =a & !b= and =!c= subformulae
|
In the first formula, the independent =a & !b= and =!c= subformulas
|
||||||
were respectively renamed =p0= and =p1=. In the second formula, =a &
|
were respectively renamed =p0= and =p1=. In the second formula, =a &
|
||||||
!b= and =!c & a= are dependent so they could not be renamed; instead
|
!b= and =!c & a= are dependent so they could not be renamed; instead
|
||||||
=a=, =!b= and =c= were renamed as =p0=, =p1= and =p2=.
|
=a=, =!b= and =c= were renamed as =p0=, =p1= and =p2=.
|
||||||
|
|
@ -595,4 +595,8 @@ rm -f ltlex.def ltlex.never scheck.ltl
|
||||||
# LocalWords: ltlfilt num toc LTL PSL syntaxes LBT's SRC GFp scheck
|
# LocalWords: ltlfilt num toc LTL PSL syntaxes LBT's SRC GFp scheck
|
||||||
# LocalWords: ltl EOF lbt Gp Fp Xp XFp XXp randltl ary nnf wm abc
|
# LocalWords: ltl EOF lbt Gp Fp Xp XFp XXp randltl ary nnf wm abc
|
||||||
# LocalWords: pnn Xb Fc XFb XXd sed boolean bsize nox Gb Fb Xa XGb
|
# LocalWords: pnn Xb Fc XFb XXd sed boolean bsize nox Gb Fb Xa XGb
|
||||||
# LocalWords: XF XXa
|
# LocalWords: XF XXa utf html args isop bool ap APs ltlf LTLf STR
|
||||||
|
# LocalWords: subexpressions unabbreviate substring eFGiMRW eFGiMW
|
||||||
|
# LocalWords: GF FG FGp hfe rdy req lup sr clk addr eq GFa XG Xc Xd
|
||||||
|
# LocalWords: subexpression ba neverclaim ltlex init fi ltldo siPSL
|
||||||
|
# LocalWords: subformula FXb FX CSV vw Pnueli LaTeX wc
|
||||||
|
|
|
||||||
|
|
@ -90,3 +90,4 @@ argument.
|
||||||
|
|
||||||
# LocalWords: ltlgrind num toc html ltlcross FILENAME SRC sed ap Gb
|
# LocalWords: ltlgrind num toc html ltlcross FILENAME SRC sed ap Gb
|
||||||
# LocalWords: const multop multops unary decrement disjunction Gc
|
# LocalWords: const multop multops unary decrement disjunction Gc
|
||||||
|
# LocalWords: utf args
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ The output is composed of two parts:
|
||||||
- the first one is a single line REALIZABLE or UNREALIZABLE;
|
- the first one is a single line REALIZABLE or UNREALIZABLE;
|
||||||
- the second one is an automaton describing the controller (if the input
|
- the second one is an automaton describing the controller (if the input
|
||||||
specification is realizable). In this example, the controller has a single
|
specification is realizable). In this example, the controller has a single
|
||||||
state, with two loops labelled by =a & b & c= and =(!a | !b) & !c=.
|
state, with two loops labeled by =a & b & c= and =(!a | !b) & !c=.
|
||||||
|
|
||||||
If a controller exists, then one with finite memory exists. Such controllers
|
If a controller exists, then one with finite memory exists. Such controllers
|
||||||
are easily represented as automata (or more specifically as I/O automata or
|
are easily represented as automata (or more specifically as I/O automata or
|
||||||
|
|
@ -107,3 +107,8 @@ You can also ask =ltlsynt= to print to obtained parity game into
|
||||||
[[https://github.com/tcsprojects/pgsolver][PGSolver]] format, with the flag
|
[[https://github.com/tcsprojects/pgsolver][PGSolver]] format, with the flag
|
||||||
=--print-pg=. Note that this flag deactivates the resolution of the parity
|
=--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.
|
game, which is to be deferred to one of the solvers from PGSolver.
|
||||||
|
|
||||||
|
# LocalWords: utf ltlsynt AIGER html args mapsto SRC acc aiger TLSF
|
||||||
|
# LocalWords: UNREALIZABLE unrealizable SYNTCOMP realizability Proc
|
||||||
|
# LocalWords: syfco ltlxba Zielonka's Thibaud Michaud Maximilien
|
||||||
|
# LocalWords: Colange PGSolver
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ Details about supported features of the HOA format can be found on a
|
||||||
|
|
||||||
The [[http://adl.github.io/hoaf/][HOA]] output should be the preferred format to use if you want to
|
The [[http://adl.github.io/hoaf/][HOA]] output should be the preferred format to use if you want to
|
||||||
pass automata between different tools. Since Spot 1.99.7, it is the
|
pass automata between different tools. Since Spot 1.99.7, it is the
|
||||||
default output format, but you can explicitely request it using the
|
default output format, but you can explicitly request it using the
|
||||||
=-H= parameter and this allows passing additional options to the HOA
|
=-H= parameter and this allows passing additional options to the HOA
|
||||||
printer.
|
printer.
|
||||||
|
|
||||||
|
|
@ -453,12 +453,12 @@ of the default horizontal layout), =c= requests circle states, =s=
|
||||||
causes strongly-connected components to be displayed, =n= causes the
|
causes strongly-connected components to be displayed, =n= causes the
|
||||||
name (see below) of the automaton to be displayed, and =a= causes the
|
name (see below) of the automaton to be displayed, and =a= causes the
|
||||||
acceptance condition to be shown as well. Option =b= causes sets to
|
acceptance condition to be shown as well. Option =b= causes sets to
|
||||||
be ouput as bullets (e.g., ⓿ instead of ={0}=); option =r= (for
|
be output as bullets (e.g., ⓿ instead of ={0}=); option =r= (for
|
||||||
rainbow) causes sets to be displayed in different colors, while option
|
rainbow) causes sets to be displayed in different colors, while option
|
||||||
=R= also uses colors, but it chooses them depending on whether a set
|
=R= also uses colors, but it chooses them depending on whether a set
|
||||||
is used with Fin-acceptance, Inf-acceptance, or both. Option
|
is used with Fin-acceptance, Inf-acceptance, or both. Option
|
||||||
=C(COLOR)= can be used to color all states using =COLOR=, and the
|
=C(COLOR)= can be used to color all states using =COLOR=, and the
|
||||||
option =f(FONT)= is used to select a fontname: it is often necessary
|
option =f(FONT)= is used to select a font name: it is often necessary
|
||||||
when =b= is used to ensure the characters ⓿, ❶, etc. are all selected
|
when =b= is used to ensure the characters ⓿, ❶, etc. are all selected
|
||||||
from the same font.
|
from the same font.
|
||||||
|
|
||||||
|
|
@ -623,7 +623,7 @@ Caveats:
|
||||||
compute the size of each label before calling GraphViz to layout the
|
compute the size of each label before calling GraphViz to layout the
|
||||||
graph. This is because GraphViz cannot compute the correct size of
|
graph. This is because GraphViz cannot compute the correct size of
|
||||||
mathematical formulas. Unfortunately, the release of =dot2tex
|
mathematical formulas. Unfortunately, the release of =dot2tex
|
||||||
2.9.0= contains a bug where sizes are intepreted as integers instead
|
2.9.0= contains a bug where sizes are interpreted as integers instead
|
||||||
of floats. This can cause labels or shapes to disappear. This bug
|
of floats. This can cause labels or shapes to disappear. This bug
|
||||||
of =dot2tex= was fixed in 2014, but at the time of writing
|
of =dot2tex= was fixed in 2014, but at the time of writing
|
||||||
(summer 2017) no new release of =dot2tex= has been made. To work around this,
|
(summer 2017) no new release of =dot2tex= has been made. To work around this,
|
||||||
|
|
@ -649,7 +649,7 @@ Most tools support a common set of statistics about the output
|
||||||
automaton (like =%s= for the number of states, =%t= for transitions,
|
automaton (like =%s= for the number of states, =%t= for transitions,
|
||||||
=%e= for edges, etc.). Additional statistics might be available
|
=%e= for edges, etc.). Additional statistics might be available
|
||||||
depending on what the tool does (for instance [[file:autfilt.org][=autfilt=]] also uses
|
depending on what the tool does (for instance [[file:autfilt.org][=autfilt=]] also uses
|
||||||
capitaized letters =%S=, =%T=, and =%E= to display the same statistics
|
capitalized letters =%S=, =%T=, and =%E= to display the same statistics
|
||||||
about the input automaton). All the available statistics are
|
about the input automaton). All the available statistics are
|
||||||
displayed when a tool is run with =--help=.
|
displayed when a tool is run with =--help=.
|
||||||
|
|
||||||
|
|
@ -760,7 +760,7 @@ genltl --or-gf=1..8 | ltl2tgba --high --stats='%f,%r,%R'
|
||||||
: GF(p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8),0.480063,0.48
|
: GF(p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8),0.480063,0.48
|
||||||
|
|
||||||
Note that =%r= is implemented using the most precise clock available
|
Note that =%r= is implemented using the most precise clock available
|
||||||
and usually has nano-second precision, while =%R= uses the =times()=
|
and usually has nanosecond precision, while =%R= uses the =times()=
|
||||||
system call (when available) and is usually only precise up to 1/100
|
system call (when available) and is usually only precise up to 1/100
|
||||||
of a second. However, as a wall-clock time, =%r= will also be
|
of a second. However, as a wall-clock time, =%r= will also be
|
||||||
affected by the load of the machine: if a machine is overloaded, or
|
affected by the load of the machine: if a machine is overloaded, or
|
||||||
|
|
@ -950,4 +950,9 @@ rm -f out-det0.hoa out-det1.hoa
|
||||||
# LocalWords: labelloc rankdir subgraph lp pos invis gv png cmdline
|
# LocalWords: labelloc rankdir subgraph lp pos invis gv png cmdline
|
||||||
# LocalWords: Tpng txt Hs Hm CSV Htl LBT dstar init goto fi Tpdf XF
|
# LocalWords: Tpng txt Hs Hm CSV Htl LBT dstar init goto fi Tpdf XF
|
||||||
# LocalWords: oaut vcsn randaut nondeterministic filename csv hoa
|
# LocalWords: oaut vcsn randaut nondeterministic filename csv hoa
|
||||||
# LocalWords: varphi lnot GFb FG
|
# LocalWords: varphi lnot GFb FG args SRC Büchi rEctangular svg GFa
|
||||||
|
# LocalWords: FGa od DOTEXTRA DOTDEFAULT pdf Tsvg vcsna cas EOF xyz
|
||||||
|
# LocalWords: vcsnA Brf Lato ffffa vee arrowsize tex neato circo mv
|
||||||
|
# LocalWords: LaTeX TikZ PSTricks formater autosize nominsize tmp
|
||||||
|
# LocalWords: latexmk sbarx cd sudo py iw dges tates Rscript genltl
|
||||||
|
# LocalWords: gf GFp nano ltldo tba randltl det
|
||||||
|
|
|
||||||
|
|
@ -65,11 +65,12 @@ $txt
|
||||||
|
|
||||||
* Acceptance condition
|
* Acceptance condition
|
||||||
|
|
||||||
The generation of the acceptance sets abn is controlled with the following four parameters:
|
The generation of the acceptance condition and acceptance sets is
|
||||||
|
controlled with the following four parameters:
|
||||||
|
|
||||||
- =-A ACCEPTANCE= (or =--acceptance=ACCEPTANCE=) controls both the acceptance condition,
|
- =-A ACCEPTANCE= (or =--acceptance=ACCEPTANCE=) controls both the
|
||||||
and the number of associated acceptance sets. The =ACCEPTANCE= argument is documented
|
acceptance condition, and the number of associated acceptance sets.
|
||||||
in =--help= as follows:
|
The =ACCEPTANCE= argument is documented in =--help= as follows:
|
||||||
#+BEGIN_SRC sh :exports results
|
#+BEGIN_SRC sh :exports results
|
||||||
randaut --help | sed -n '/^ \(ACCEPTANCE\|RANGE\)/,/^$/p'
|
randaut --help | sed -n '/^ \(ACCEPTANCE\|RANGE\)/,/^$/p'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
@ -99,7 +100,7 @@ randaut --help | sed -n '/^ \(ACCEPTANCE\|RANGE\)/,/^$/p'
|
||||||
|
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
When a range of the form $i..j$ is used, the actual value is taken as randomly
|
When a range of the form $i..j$ is used, the actual value is taken randomly
|
||||||
between $i$ and $j$ (included).
|
between $i$ and $j$ (included).
|
||||||
|
|
||||||
- =-a= (or =--acc-probability=) controls the probability that any
|
- =-a= (or =--acc-probability=) controls the probability that any
|
||||||
|
|
@ -137,30 +138,6 @@ $txt
|
||||||
randaut -Q3 -e0.4 -B -a0.7 2 --dot
|
randaut -Q3 -e0.4 -B -a0.7 2 --dot
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+RESULTS: randaut5
|
|
||||||
#+begin_example
|
|
||||||
digraph G {
|
|
||||||
rankdir=LR
|
|
||||||
node [shape="circle"]
|
|
||||||
fontname="Lato"
|
|
||||||
node [fontname="Lato"]
|
|
||||||
edge [fontname="Lato"]
|
|
||||||
node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]
|
|
||||||
I [label="", style=invis, width=0]
|
|
||||||
I -> 0
|
|
||||||
0 [label="0"]
|
|
||||||
0 -> 1 [label=<!p0 & !p1>]
|
|
||||||
0 -> 2 [label=<!p0 & !p1>]
|
|
||||||
1 [label="1", peripheries=2]
|
|
||||||
1 -> 1 [label=<!p0 & !p1>]
|
|
||||||
1 -> 0 [label=<p0 & p1>]
|
|
||||||
2 [label="2", peripheries=2]
|
|
||||||
2 -> 0 [label=<p0 & p1>]
|
|
||||||
2 -> 2 [label=<p0 & !p1>]
|
|
||||||
2 -> 1 [label=<!p0 & !p1>]
|
|
||||||
}
|
|
||||||
#+end_example
|
|
||||||
|
|
||||||
#+BEGIN_SRC dot :file randaut5.svg :var txt=randaut5 :exports results
|
#+BEGIN_SRC dot :file randaut5.svg :var txt=randaut5 :exports results
|
||||||
$txt
|
$txt
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
@ -237,7 +214,7 @@ automatically implies =--ba=.
|
||||||
|
|
||||||
Automata are send to standard output by default, by you can use =-o=
|
Automata are send to standard output by default, by you can use =-o=
|
||||||
to give a filename, or even a pattern for filenames. For instance the
|
to give a filename, or even a pattern for filenames. For instance the
|
||||||
following generates 20 automatas, but store them in different files
|
following generates 20 automata, but store them in different files
|
||||||
according to the acceptance condition. The format =%g= represent the
|
according to the acceptance condition. The format =%g= represent the
|
||||||
formula for the acceptance condition and would not make a nice
|
formula for the acceptance condition and would not make a nice
|
||||||
filename, but =%[s]g= is a short name for that acceptance condition
|
filename, but =%[s]g= is a short name for that acceptance condition
|
||||||
|
|
@ -300,3 +277,7 @@ $txt
|
||||||
|
|
||||||
You should be able to find each of the expected type of SCCs in the above picture.
|
You should be able to find each of the expected type of SCCs in the above picture.
|
||||||
The green rectangles mark the three SCCs that contain some accepting cycles.
|
The green rectangles mark the three SCCs that contain some accepting cycles.
|
||||||
|
|
||||||
|
# LocalWords: utf randaut html args SRC svg txt randltl sed Buchi
|
||||||
|
# LocalWords: acc ba rankdir hoaf lbtt Hl wc rautaut SCCs SCC sccs
|
||||||
|
# LocalWords: A'parity
|
||||||
|
|
|
||||||
|
|
@ -341,4 +341,5 @@ non-length-matching variant of the =and= operator.
|
||||||
# LocalWords: Xc GFb Gc Xb Fb XFb Xa dups ltlfilt Fc XXc GX GFc XG
|
# LocalWords: Xc GFb Gc Xb Fb XFb Xa dups ltlfilt Fc XXc GX GFc XG
|
||||||
# LocalWords: rewritings ltl ap GF ANDed GFa boolean EConcat eword
|
# LocalWords: rewritings ltl ap GF ANDed GFa boolean EConcat eword
|
||||||
# LocalWords: UConcat boolform andNLM concat Kleen eval setenv setq
|
# LocalWords: UConcat boolform andNLM concat Kleen eval setenv setq
|
||||||
# LocalWords: getenv
|
# LocalWords: getenv html args FGb nonnegative Fp FGp xargs LaTeX
|
||||||
|
# LocalWords: FGc subformula GXb fstar
|
||||||
|
|
|
||||||
|
|
@ -294,7 +294,7 @@ The following options can be used to fine-tune this procedure:
|
||||||
where is the difference? They both start by encoding the research of the
|
where is the difference? They both start by encoding the research of the
|
||||||
=N-1= step and then:
|
=N-1= step and then:
|
||||||
- =2= uses PicoSAT assumptions. It adds =sat-incr-steps= assumptions
|
- =2= uses PicoSAT assumptions. It adds =sat-incr-steps= assumptions
|
||||||
(each of them removing one more state) and then checks direclty the
|
(each of them removing one more state) and then checks directly the
|
||||||
=N-1-(sat-incr-steps)= step. If such automaton is found, the process is
|
=N-1-(sat-incr-steps)= step. If such automaton is found, the process is
|
||||||
restarted. Otherwise, a binary search begins between =N-1= and
|
restarted. Otherwise, a binary search begins between =N-1= and
|
||||||
=N-1-sat-incr-steps=. If not provided, =sat-incr-steps= default value
|
=N-1-sat-incr-steps=. If not provided, =sat-incr-steps= default value
|
||||||
|
|
@ -307,7 +307,7 @@ The following options can be used to fine-tune this procedure:
|
||||||
- =-x sat-minimize=4= :: enable SAT-based minimization. It tries to reduce the
|
- =-x sat-minimize=4= :: enable SAT-based minimization. It tries to reduce the
|
||||||
size of the automaton one state at a time. This option implies
|
size of the automaton one state at a time. This option implies
|
||||||
=-x tba-det=.
|
=-x tba-det=.
|
||||||
- =-x sat-incr-steps=N= :: set the value of =sat-incr-steps= to N. It doest not
|
- =-x sat-incr-steps=N= :: set the value of =sat-incr-steps= to N. It does not
|
||||||
make sense to use it without =-x sat-minimize=2= or =-x sat-minimize=3=.
|
make sense to use it without =-x sat-minimize=2= or =-x sat-minimize=3=.
|
||||||
- =-x sat-acc=$m$= :: attempt to build a minimal DTGBA with $m$ acceptance sets.
|
- =-x sat-acc=$m$= :: attempt to build a minimal DTGBA with $m$ acceptance sets.
|
||||||
This options implies =-x sat-minimize=.
|
This options implies =-x sat-minimize=.
|
||||||
|
|
@ -497,7 +497,7 @@ The =--sat-minimize= option takes a comma separated list of arguments
|
||||||
that can be any of the following:
|
that can be any of the following:
|
||||||
|
|
||||||
- =acc=DOUBLEQUOTEDSTRING= :: where the =DOUBLEQUOTEDSTRING= is an
|
- =acc=DOUBLEQUOTEDSTRING= :: where the =DOUBLEQUOTEDSTRING= is an
|
||||||
acceptance formula in the [[http://adl.github.io/hoaf/#acceptance][HOA syntax]], or a parametrized acceptance
|
acceptance formula in the [[http://adl.github.io/hoaf/#acceptance][HOA syntax]], or a parameterized acceptance
|
||||||
name (the different [[http://adl.github.io/hoaf/#acceptance-specifications][=acc-name:= options from HOA]]).
|
name (the different [[http://adl.github.io/hoaf/#acceptance-specifications][=acc-name:= options from HOA]]).
|
||||||
- =max-states=N= :: where =N= is an upper-bound on the maximum
|
- =max-states=N= :: where =N= is an upper-bound on the maximum
|
||||||
number of states of the constructed automaton.
|
number of states of the constructed automaton.
|
||||||
|
|
@ -515,7 +515,7 @@ that can be any of the following:
|
||||||
starting automaton. Now, where is the difference? They both start by
|
starting automaton. Now, where is the difference? They both start by
|
||||||
encoding the research of the =N-1= step and then:
|
encoding the research of the =N-1= step and then:
|
||||||
- =1= uses PicoSAT assumptions. It adds =steps= assumptions (each of
|
- =1= uses PicoSAT assumptions. It adds =steps= assumptions (each of
|
||||||
them removing one more state) and then checks direclty the
|
them removing one more state) and then checks directly the
|
||||||
=N-1-(sat-incr-steps)= step. If such automaton is found, the process is
|
=N-1-(sat-incr-steps)= step. If such automaton is found, the process is
|
||||||
restarted. Otherwise, a binary search begins between =N-1= and
|
restarted. Otherwise, a binary search begins between =N-1= and
|
||||||
=N-1-sat-incr-steps=. If not provided, =sat-incr-steps= defaults to 6.
|
=N-1-sat-incr-steps=. If not provided, =sat-incr-steps= defaults to 6.
|
||||||
|
|
@ -645,3 +645,10 @@ rm -f output.hoa output2.hoa
|
||||||
* Python interface
|
* Python interface
|
||||||
|
|
||||||
See the [[https://spot.lrde.epita.fr/ipynb/satmin.html][=satmin.ipynb=]] notebook.
|
See the [[https://spot.lrde.epita.fr/ipynb/satmin.html][=satmin.ipynb=]] notebook.
|
||||||
|
|
||||||
|
# LocalWords: utf html args SRC tgba dstar DTBA DT PicoSAT LPAR GF
|
||||||
|
# LocalWords: unminimized SATSOLVER det tba degeneralized gfaexxb
|
||||||
|
# LocalWords: svg txt BD ltlfilt DRA wm nba acc arg ltldo DBA WDBA
|
||||||
|
# LocalWords: SCC TCONG powerset incr DTGBA wdba FGa FGb autfiltsm
|
||||||
|
# LocalWords: Buchi GFa GFb DOUBLEQUOTEDSTRING langmap SATLOG csv
|
||||||
|
# LocalWords: src sed sys satmin ipynb
|
||||||
|
|
|
||||||
|
|
@ -90,3 +90,7 @@ real notebooks instead.
|
||||||
- [[https://spot.lrde.epita.fr/ipynb/stutter-inv.html][=stutter-inv.ipynb=]] working with stutter-invariant formulas properties.
|
- [[https://spot.lrde.epita.fr/ipynb/stutter-inv.html][=stutter-inv.ipynb=]] working with stutter-invariant formulas properties.
|
||||||
- [[https://spot.lrde.epita.fr/ipynb/satmin.html][=satmin.ipynb=]] Python interface for [[file:satmin.org][SAT-based minimization of deterministic ω-automata]].
|
- [[https://spot.lrde.epita.fr/ipynb/satmin.html][=satmin.ipynb=]] Python interface for [[file:satmin.org][SAT-based minimization of deterministic ω-automata]].
|
||||||
- [[https://spot.lrde.epita.fr/ipynb/twagraph-internals.html][=twagraph-internals.ipynb=]] Inner workings of the =twa_graph= class.
|
- [[https://spot.lrde.epita.fr/ipynb/twagraph-internals.html][=twagraph-internals.ipynb=]] Inner workings of the =twa_graph= class.
|
||||||
|
|
||||||
|
# LocalWords: utf html bdd IPython ipynb io randaut accparse acc
|
||||||
|
# LocalWords: cond randltl genltl genaut scc testingaut ltsmin dve
|
||||||
|
# LocalWords: DiVinE LTSmin pml twa atva inv satmin twagraph
|
||||||
|
|
|
||||||
|
|
@ -463,3 +463,8 @@ _formula_format(self, spec)
|
||||||
formating function for strings.
|
formating function for strings.
|
||||||
|
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
|
# LocalWords: utf html args ltlfilt LBT lbt SRC GFp FGp LBT's str
|
||||||
|
# LocalWords: parenth parsers stex iostream psl superset nullptr GF
|
||||||
|
# LocalWords: subformulas simplifier simp sp lq CSV formatspec
|
||||||
|
# LocalWords: LaTeX formating
|
||||||
|
|
|
||||||
|
|
@ -155,3 +155,7 @@ ltlfilt -ps --relabel-bool=pnn --define -f 'a U (a & b)'
|
||||||
This "Boolean sub-expression" relabeling is available in Python and
|
This "Boolean sub-expression" relabeling is available in Python and
|
||||||
C++ via the =relabel_bse= function. The interface is identical to
|
C++ via the =relabel_bse= function. The interface is identical to
|
||||||
=relabel=.
|
=relabel=.
|
||||||
|
|
||||||
|
# LocalWords: utf html args renamings SRC ltlfilt ps pnn ba prepend
|
||||||
|
# LocalWords: tmp defs init fi ltldo newname oldname str iostream
|
||||||
|
# LocalWords: abc Abc bool bse
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ constructors for each supported operator.
|
||||||
The Boolean constants true and false are returned by =formula::tt()=
|
The Boolean constants true and false are returned by =formula::tt()=
|
||||||
and =formula:ff()=. Atomic propositions can be built with
|
and =formula:ff()=. Atomic propositions can be built with
|
||||||
=formula::ap("name")=. Unary and binary operators use a
|
=formula::ap("name")=. Unary and binary operators use a
|
||||||
straighforward syntax like =formula::F(arg)= or =formula::U(first,
|
straightforward syntax like =formula::F(arg)= or =formula::U(first,
|
||||||
second)=, while n-ary operators take an initializer list as argument
|
second)=, while n-ary operators take an initializer list as argument
|
||||||
as in =formula::And({arg1, arg2, arg3})=.
|
as in =formula::And({arg1, arg2, arg3})=.
|
||||||
|
|
||||||
|
|
@ -48,7 +48,7 @@ Here is the list of supported operators:
|
||||||
formula::G(arg, min, max); // G[min..max] arg
|
formula::G(arg, min, max); // G[min..max] arg
|
||||||
formula::Closure(arg);
|
formula::Closure(arg);
|
||||||
formula::NegClosure(arg);
|
formula::NegClosure(arg);
|
||||||
formula::first_match(arg); // SVA's first match opetaror
|
formula::first_match(arg); // SVA's first match operator
|
||||||
// binary operators
|
// binary operators
|
||||||
formula::Xor(left, right);
|
formula::Xor(left, right);
|
||||||
formula::Implies(left, right);
|
formula::Implies(left, right);
|
||||||
|
|
@ -485,3 +485,8 @@ Here is the =F= and =G= exchange:
|
||||||
|
|
||||||
Like in C++, extra arguments to =map= and =traverse= are passed as
|
Like in C++, extra arguments to =map= and =traverse= are passed as
|
||||||
additional to the function given in the first argument.
|
additional to the function given in the first argument.
|
||||||
|
|
||||||
|
# LocalWords: utf html args accessor Unary arg ary initializer SRC
|
||||||
|
# LocalWords: unary SVA's tl pdf subformulas subformula memoization
|
||||||
|
# LocalWords: iostream FGa GFb GFc fga gfb gfc kindstar kindstr DFS
|
||||||
|
# LocalWords: enum subtrees gcount cpp GF Fb xchg fg GFa FGb countg
|
||||||
|
|
|
||||||
|
|
@ -132,3 +132,5 @@ int main()
|
||||||
|
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
: Equivalent
|
: Equivalent
|
||||||
|
|
||||||
|
# LocalWords: utf html args ltlfilt SRC eq lnot otimes ng iostream
|
||||||
|
|
|
||||||
|
|
@ -215,3 +215,6 @@ translate(formula, *args, dict=<spot.impl.bdd_dict; proxy of <Swig Object of typ
|
||||||
so check out the spot-x(7) man page for details.
|
so check out the spot-x(7) man page for details.
|
||||||
|
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
|
# LocalWords: utf html args SRC tgba GFa GFb init fi str aut xargs
|
||||||
|
# LocalWords: coBuchi StateBasedAcceptance SBAcc
|
||||||
|
|
|
||||||
|
|
@ -284,3 +284,7 @@ If your application requires monitors and you plan to build them with
|
||||||
Spot, it is very likely that you will want to convert the resulting
|
Spot, it is very likely that you will want to convert the resulting
|
||||||
automata to your own data structure. See [[file:tut21.org][how to print an automaton in
|
automata to your own data structure. See [[file:tut21.org][how to print an automaton in
|
||||||
a custom format]] to learn all you need to iterate over Spot's automata.
|
a custom format]] to learn all you need to iterate over Spot's automata.
|
||||||
|
|
||||||
|
# LocalWords: utf html args SRC tgba Xyellow svg txt acc det str
|
||||||
|
# LocalWords: aut monitorable ltlfilt d'Amorim Roşu CAV Tabakov DFA
|
||||||
|
# LocalWords: Vardi SystemC SCCs determinize powerset
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ perform some LTLf model checking, you should stop at step 3. Keep the
|
||||||
=alive= proposition in your property automaton, and also add it to the
|
=alive= proposition in your property automaton, and also add it to the
|
||||||
Kripke structure representing your system.
|
Kripke structure representing your system.
|
||||||
|
|
||||||
Alternatively, if your Kripke structure is already equiped with some
|
Alternatively, if your Kripke structure is already equipped with some
|
||||||
=dead= property (as introduced by default in our [[https://spot.lrde.epita.fr/ipynb/ltsmin-dve.html][=ltsmin= interface]]),
|
=dead= property (as introduced by default in our [[https://spot.lrde.epita.fr/ipynb/ltsmin-dve.html][=ltsmin= interface]]),
|
||||||
you could replace =alive= by =!dead= by using ~ltlfilt
|
you could replace =alive= by =!dead= by using ~ltlfilt
|
||||||
--from-ltl="!dead"~ (from the command-line), a running
|
--from-ltl="!dead"~ (from the command-line), a running
|
||||||
|
|
@ -255,3 +255,7 @@ operator:
|
||||||
- The strong next: =X[!] a= is true if =a= hold in the next step *and*
|
- The strong next: =X[!] a= is true if =a= hold in the next step *and*
|
||||||
there must be a next step. In particular =X[!]1= asserts that
|
there must be a next step. In particular =X[!]1= asserts that
|
||||||
there is a successor.
|
there is a successor.
|
||||||
|
|
||||||
|
# LocalWords: utf LTLf html args ltlf src ltlfilt Fc tgba svg txt
|
||||||
|
# LocalWords: ap De Giacomo Vardi IJCAI Dutta Memocode acc Buchi ba
|
||||||
|
# LocalWords: postprocess aut det str NFA DFA ltsmin iff
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,7 @@ can be specified if needed.
|
||||||
There are actually different C++ interfaces to the automaton parser,
|
There are actually different C++ interfaces to the automaton parser,
|
||||||
depending on your use case. For instance the parser is able to read a
|
depending on your use case. For instance the parser is able to read a
|
||||||
stream of automata stored in the same file, so that they could be
|
stream of automata stored in the same file, so that they could be
|
||||||
processed in a loop. For this, you would instanciate a
|
processed in a loop. For this, you would instantiate a
|
||||||
=spot::automaton_stream_parser= object and call its =parse()= method
|
=spot::automaton_stream_parser= object and call its =parse()= method
|
||||||
in a loop. Each call to this method will either return one
|
in a loop. Each call to this method will either return one
|
||||||
=spot::parsed_aut_ptr=, or =nullptr= if there is no more automaton to
|
=spot::parsed_aut_ptr=, or =nullptr= if there is no more automaton to
|
||||||
|
|
@ -319,3 +319,6 @@ State: 1 {0}
|
||||||
#+BEGIN_SRC sh :results silent :exports results
|
#+BEGIN_SRC sh :results silent :exports results
|
||||||
rm -f tut20.never
|
rm -f tut20.never
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
# LocalWords: utf html args SRC init od LBTT's dstar's acc Buchi fi
|
||||||
|
# LocalWords: str lbtt aut BDDs bdd ptr nullptr
|
||||||
|
|
|
||||||
|
|
@ -562,7 +562,7 @@ Here is the very same example, but written in Python:
|
||||||
for t in aut.out(s):
|
for t in aut.out(s):
|
||||||
print(" edge({} -> {})".format(t.src, t.dst))
|
print(" edge({} -> {})".format(t.src, t.dst))
|
||||||
# bdd_print_formula() is designed to print on a std::ostream, and
|
# bdd_print_formula() is designed to print on a std::ostream, and
|
||||||
# is inconveniant to use in Python. Instead we use
|
# is inconvenient to use in Python. Instead we use
|
||||||
# bdd_format_formula() as this simply returns a string.
|
# bdd_format_formula() as this simply returns a string.
|
||||||
print(" label =", spot.bdd_format_formula(bdict, t.cond))
|
print(" label =", spot.bdd_format_formula(bdict, t.cond))
|
||||||
print(" acc sets =", t.acc)
|
print(" acc sets =", t.acc)
|
||||||
|
|
@ -848,3 +848,7 @@ State 16:
|
||||||
#+BEGIN_SRC sh :results silent :exports results
|
#+BEGIN_SRC sh :results silent :exports results
|
||||||
rm -f tut21.hoa
|
rm -f tut21.hoa
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
# LocalWords: utf html args mathit src dst cond accsets tgba Fb Fc
|
||||||
|
# LocalWords: acc Buchi BDDs bdd ap ithvar aut const num init bdict
|
||||||
|
# LocalWords: varnum sep Templated
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ automata in Spot.
|
||||||
// States are numbered from 0.
|
// States are numbered from 0.
|
||||||
aut->new_states(3);
|
aut->new_states(3);
|
||||||
// The default initial state is 0, but it is always better to
|
// The default initial state is 0, but it is always better to
|
||||||
// specify it explicitely.
|
// specify it explicitly.
|
||||||
aut->set_init_state(0U);
|
aut->set_init_state(0U);
|
||||||
|
|
||||||
// new_edge() takes 3 mandatory parameters: source state,
|
// new_edge() takes 3 mandatory parameters: source state,
|
||||||
|
|
@ -109,7 +109,7 @@ State: 2
|
||||||
# States are numbered from 0.
|
# States are numbered from 0.
|
||||||
aut.new_states(3)
|
aut.new_states(3)
|
||||||
# The default initial state is 0, but it is always better to
|
# The default initial state is 0, but it is always better to
|
||||||
# specify it explicitely.
|
# specify it explicitly.
|
||||||
aut.set_init_state(0)
|
aut.set_init_state(0)
|
||||||
|
|
||||||
# new_edge() takes 3 mandatory parameters: source state, destination state,
|
# new_edge() takes 3 mandatory parameters: source state, destination state,
|
||||||
|
|
@ -202,7 +202,7 @@ whenever possible".
|
||||||
// States are numbered from 0.
|
// States are numbered from 0.
|
||||||
aut->new_states(3);
|
aut->new_states(3);
|
||||||
// The default initial state is 0, but it is always better to
|
// The default initial state is 0, but it is always better to
|
||||||
// specify it explicitely.
|
// specify it explicitly.
|
||||||
aut->set_init_state(0U);
|
aut->set_init_state(0U);
|
||||||
|
|
||||||
// new_edge() takes 3 mandatory parameters: source state,
|
// new_edge() takes 3 mandatory parameters: source state,
|
||||||
|
|
@ -267,7 +267,7 @@ State: 2
|
||||||
# States are numbered from 0.
|
# States are numbered from 0.
|
||||||
aut.new_states(3)
|
aut.new_states(3)
|
||||||
# The default initial state is 0, but it is always better to
|
# The default initial state is 0, but it is always better to
|
||||||
# specify it explicitely.
|
# specify it explicitly.
|
||||||
aut.set_init_state(0)
|
aut.set_init_state(0)
|
||||||
|
|
||||||
# new_edge() takes 3 mandatory parameters: source state, destination state,
|
# new_edge() takes 3 mandatory parameters: source state, destination state,
|
||||||
|
|
@ -405,3 +405,6 @@ State: 2
|
||||||
[0 | 1] 1 {0 2}
|
[0 | 1] 1 {0 2}
|
||||||
--END--
|
--END--
|
||||||
#+end_SRC
|
#+end_SRC
|
||||||
|
|
||||||
|
# LocalWords: utf html args SRC tgba TGBAs cpp bdd aut twa ap buchi
|
||||||
|
# LocalWords: ithvar init acc bdict BuDDy str sba setacc cond
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ edges (declared with =new_edge()=) and universal edges (declared with
|
||||||
// States are numbered from 0.
|
// States are numbered from 0.
|
||||||
aut->new_states(3);
|
aut->new_states(3);
|
||||||
// The default initial state is 0, but it is always better to
|
// The default initial state is 0, but it is always better to
|
||||||
// specify it explicitely.
|
// specify it explicitly.
|
||||||
aut->set_init_state(0U);
|
aut->set_init_state(0U);
|
||||||
|
|
||||||
// new_edge() takes 3 mandatory parameters: source state,
|
// new_edge() takes 3 mandatory parameters: source state,
|
||||||
|
|
@ -128,7 +128,7 @@ State: 2
|
||||||
# States are numbered from 0.
|
# States are numbered from 0.
|
||||||
aut.new_states(3)
|
aut.new_states(3)
|
||||||
# The default initial state is 0, but it is always better to
|
# The default initial state is 0, but it is always better to
|
||||||
# specify it explicitely.
|
# specify it explicitly.
|
||||||
aut.set_init_state(0);
|
aut.set_init_state(0);
|
||||||
|
|
||||||
# new_edge() takes 3 mandatory parameters: source state, destination state,
|
# new_edge() takes 3 mandatory parameters: source state, destination state,
|
||||||
|
|
@ -181,3 +181,6 @@ alternating automaton.
|
||||||
Once you have built an alternating automaton, you can [[file:tut31.org][remove the
|
Once you have built an alternating automaton, you can [[file:tut31.org][remove the
|
||||||
alternation]] to obtain a non-deterministic Büchi or generalized Büchi
|
alternation]] to obtain a non-deterministic Büchi or generalized Büchi
|
||||||
automaton.
|
automaton.
|
||||||
|
|
||||||
|
# LocalWords: utf html args GFa SRC txt cpp EOF aut svg bdd twa ap
|
||||||
|
# LocalWords: ithvar init bddtrue acc Buchi bdict BuDDy str
|
||||||
|
|
|
||||||
|
|
@ -239,3 +239,8 @@ State 2:
|
||||||
#+BEGIN_SRC sh :results silent :exports results
|
#+BEGIN_SRC sh :results silent :exports results
|
||||||
rm -f tut24.hoa
|
rm -f tut24.hoa
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
# LocalWords: utf html args noweb SRC acc Buchi EOF svg txt aut num
|
||||||
|
# LocalWords: nonalt init const src dst cond dest aut init dst SRC
|
||||||
|
# LocalWords: dests nonalt num src cond acc noweb bdict ui str ud
|
||||||
|
# LocalWords: bdd
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ any acceptance to Büchi acceptance.
|
||||||
We use =autfilt= with option =-B= to request Büchi acceptance and
|
We use =autfilt= with option =-B= to request Büchi acceptance and
|
||||||
state-based output and =-D= to express a preference for deterministic
|
state-based output and =-D= to express a preference for deterministic
|
||||||
output. Using option =-D/--deterministic= (or =--small=) actually
|
output. Using option =-D/--deterministic= (or =--small=) actually
|
||||||
activates the "postprocessing" routines of Spot: the acceptance will
|
activates the "post-processing" routines of Spot: the acceptance will
|
||||||
not only be changed to Büchi, but simplification routines (useless
|
not only be changed to Büchi, but simplification routines (useless
|
||||||
SCCs removal, simulation-based reductions, acceptance sets
|
SCCs removal, simulation-based reductions, acceptance sets
|
||||||
simplifications, WDBA-minimization, ...) will also be applied.
|
simplifications, WDBA-minimization, ...) will also be applied.
|
||||||
|
|
@ -84,7 +84,7 @@ $txt
|
||||||
|
|
||||||
In the general case transforming an automaton with a complex
|
In the general case transforming an automaton with a complex
|
||||||
acceptance condition into a Büchi automaton can make the output
|
acceptance condition into a Büchi automaton can make the output
|
||||||
bigger. However the postprocessing routines may manage to simplify
|
bigger. However the post-processing routines may manage to simplify
|
||||||
the result further.
|
the result further.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -139,7 +139,7 @@ Help on function postprocess in module spot:
|
||||||
postprocess(automaton, *args, formula=None, xargs=None)
|
postprocess(automaton, *args, formula=None, xargs=None)
|
||||||
Post process an automaton.
|
Post process an automaton.
|
||||||
|
|
||||||
This applies a number of simlification algorithms, depending on
|
This applies a number of simplification algorithms, depending on
|
||||||
the options supplied. Keep in mind that 'Deterministic' expresses
|
the options supplied. Keep in mind that 'Deterministic' expresses
|
||||||
just a preference that may not be satisfied if the input is
|
just a preference that may not be satisfied if the input is
|
||||||
not already 'Deterministic'.
|
not already 'Deterministic'.
|
||||||
|
|
@ -234,3 +234,7 @@ State: 4
|
||||||
#+BEGIN_SRC sh :results silent
|
#+BEGIN_SRC sh :results silent
|
||||||
rm -f tut30.hoa
|
rm -f tut30.hoa
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
# LocalWords: utf html args dstar SRC ltldo Xp XXp svg txt SCCs acc
|
||||||
|
# LocalWords: WDBA Buchi postprocess aut str xargs TGBA coBuchi
|
||||||
|
# LocalWords: StateBasedAcceptance SBAcc postprocessor
|
||||||
|
|
|
||||||
|
|
@ -174,3 +174,6 @@ State: 1
|
||||||
#+BEGIN_SRC sh :results silent
|
#+BEGIN_SRC sh :results silent
|
||||||
rm -f tut31.hoa
|
rm -f tut31.hoa
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
# LocalWords: utf html args SRC acc Buchi noweb EOF svg txt SCCs
|
||||||
|
# LocalWords: TGBA tgba aut str
|
||||||
|
|
|
||||||
|
|
@ -214,7 +214,7 @@ syntax of C++ works exactly as if we had typed
|
||||||
|
|
||||||
In the above =example()= function, the iterators =i= and =end= are
|
In the above =example()= function, the iterators =i= and =end= are
|
||||||
instances of the =internal::edge_iterator<spot::twa_graph::graph_t>=
|
instances of the =internal::edge_iterator<spot::twa_graph::graph_t>=
|
||||||
class, which redefines enough operators to act like an STL Foward
|
class, which redefines enough operators to act like an STL Forward
|
||||||
Iterator over all outgoing edges of =s=. Note that the =tmp= and =i=
|
Iterator over all outgoing edges of =s=. Note that the =tmp= and =i=
|
||||||
objects hold a pointer to the graph, but it does not really matter
|
objects hold a pointer to the graph, but it does not really matter
|
||||||
because the compiler will optimize this away.
|
because the compiler will optimize this away.
|
||||||
|
|
@ -444,7 +444,7 @@ the entire automaton in memory; if they prefer, they can compute it as
|
||||||
it is explored.
|
it is explored.
|
||||||
|
|
||||||
Naturally =twa_graph=, even if it stores the automaton graph
|
Naturally =twa_graph=, even if it stores the automaton graph
|
||||||
explicitly, is a subclasse of =twa=, so it also implements the
|
explicitly, is a subclass of =twa=, so it also implements the
|
||||||
on-the-fly interface but without computing anything.
|
on-the-fly interface but without computing anything.
|
||||||
|
|
||||||
** How this interface works
|
** How this interface works
|
||||||
|
|
@ -889,3 +889,8 @@ print it.
|
||||||
: 1->1
|
: 1->1
|
||||||
: 0->2
|
: 0->2
|
||||||
: 2->2
|
: 2->2
|
||||||
|
|
||||||
|
# LocalWords: utf html args twa twagraph ipynb SRC plantuml uml svg
|
||||||
|
# LocalWords: stl bool src dst succ distate typedef bdd ptr init
|
||||||
|
# LocalWords: cond acc aut FGa FGb tmp inlined DFS dfs num ish todo
|
||||||
|
# LocalWords: Subclasses otf iterable iter emplace srcit
|
||||||
|
|
|
||||||
|
|
@ -593,5 +593,5 @@ class, used to build on-the-fly product.
|
||||||
# LocalWords: nondeterministicaly kripke succ plantuml uml png iter
|
# LocalWords: nondeterministicaly kripke succ plantuml uml png iter
|
||||||
# LocalWords: bdd ptr const init bool dst cond acc pos ithvar ap ss
|
# LocalWords: bdd ptr const init bool dst cond acc pos ithvar ap ss
|
||||||
# LocalWords: xodd yodd str nullptr noweb cmdline Tpng cmd circo GF
|
# LocalWords: xodd yodd str nullptr noweb cmdline Tpng cmd circo GF
|
||||||
# LocalWords: txt LTL af preallocated deallocation destructor
|
# LocalWords: txt LTL af preallocated deallocation destructor svg
|
||||||
# LocalWords: unicity
|
# LocalWords: unicity kA src cpp tooltip
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ memory.
|
||||||
|
|
||||||
Our Kripke structure represent a model whose states consist of pairs
|
Our Kripke structure represent a model whose states consist of pairs
|
||||||
of modulo-3 integers $(x,y)$. At any state the possible actions
|
of modulo-3 integers $(x,y)$. At any state the possible actions
|
||||||
will be to increment any one of the two integer (nondeterministicaly).
|
will be to increment any one of the two integers (nondeterministically).
|
||||||
That increment is obviously done modulo 3. For instance state $(1,2)$
|
That increment is obviously done modulo 3. For instance state $(1,2)$
|
||||||
has two possible successors:
|
has two possible successors:
|
||||||
- $(2,2)$ if =x= was incremented, or
|
- $(2,2)$ if =x= was incremented, or
|
||||||
|
|
@ -303,3 +303,6 @@ read the C++ description for details.
|
||||||
#+BEGIN_SRC text :noweb yes
|
#+BEGIN_SRC text :noweb yes
|
||||||
<<demo-2py()>>
|
<<demo-2py()>>
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
# LocalWords: utf html kripke SRC bool bdd ithvar ap init noweb svg
|
||||||
|
# LocalWords: GraphViz's cmd circo txt GF af py bdddict ns str
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ automata agree on the BDD variables used to represent $a$ and $b$.
|
||||||
The =spot::bdd_dict= object is in charge of allocating BDD variables,
|
The =spot::bdd_dict= object is in charge of allocating BDD variables,
|
||||||
and ensuring that multiple users reuse the same variables for similar
|
and ensuring that multiple users reuse the same variables for similar
|
||||||
purpose. When a =twa_graph= automaton is constructed, it takes a
|
purpose. When a =twa_graph= automaton is constructed, it takes a
|
||||||
=bdd_dict= as argument. Everytime an atomic proposition is
|
=bdd_dict= as argument. Every time an atomic proposition is
|
||||||
registered through the =twa::register_ap()= method, the =bdd_dict=
|
registered through the =twa::register_ap()= method, the =bdd_dict=
|
||||||
is queried.
|
is queried.
|
||||||
|
|
||||||
|
|
@ -445,3 +445,8 @@ variables *anonymous* because their meaning is unknown the the
|
||||||
|
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
: [(0, 2), (0, 3), (1, 0), (1, 1), (2, 2), (2, 3), (3, 0), (3, 1)]
|
: [(0, 2), (0, 3), (1, 0), (1, 1), (2, 2), (2, 3), (3, 0), (3, 1)]
|
||||||
|
|
||||||
|
# LocalWords: utf bdd html args BDDs DAGs twa SRC aut ap bff src
|
||||||
|
# LocalWords: unregisters unregister dest init dst str num cond GF
|
||||||
|
# LocalWords: noweb XXa RuntimeError del v'i anonbase bddfalse isop
|
||||||
|
# LocalWords: ithvar
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ experience of updating a couple of projects that are using Spot.
|
||||||
=tgba_explicit_string= used to encode a TGBA using a graph whose
|
=tgba_explicit_string= used to encode a TGBA using a graph whose
|
||||||
state was named using LTL formulas, integers, or strings) are
|
state was named using LTL formulas, integers, or strings) are
|
||||||
replaced by a =twa_graph= class in which the representation is
|
replaced by a =twa_graph= class in which the representation is
|
||||||
more complact and efficient, but where states are necessarily
|
more compact and efficient, but where states are necessarily
|
||||||
numbered. Many algorithms have been rewritten on top of this
|
numbered. Many algorithms have been rewritten on top of this
|
||||||
=twa_graph= class, and this simplified them a lot.
|
=twa_graph= class, and this simplified them a lot.
|
||||||
|
|
||||||
|
|
@ -360,7 +360,7 @@ removed, ~8200 lines added), and brings some nice benefits:
|
||||||
- LTL/PSL formulas are now represented by lightweight formula
|
- LTL/PSL formulas are now represented by lightweight formula
|
||||||
objects (instead of pointers to children of an abstract
|
objects (instead of pointers to children of an abstract
|
||||||
formula class) that perform reference counting automatically.
|
formula class) that perform reference counting automatically.
|
||||||
- There is no hierachy anymore: all operators are represented by
|
- There is no hierarchy anymore: all operators are represented by
|
||||||
a single type of node in the syntax tree, and an enumerator is
|
a single type of node in the syntax tree, and an enumerator is
|
||||||
used to distinguish between operators.
|
used to distinguish between operators.
|
||||||
- Visitors have been replaced by member functions such as =map()=
|
- Visitors have been replaced by member functions such as =map()=
|
||||||
|
|
@ -665,3 +665,14 @@ for (auto i: aut->succ(s))
|
||||||
| ~tgba_succ_iterator::current_acceptance_conditions()~ | ~twa_succ_iterator::acc()~ | |
|
| ~tgba_succ_iterator::current_acceptance_conditions()~ | ~twa_succ_iterator::acc()~ | |
|
||||||
| ~tgba_succ_iterator::current_condition()~ | ~twa_succ_iterator::cond()~ | |
|
| ~tgba_succ_iterator::current_condition()~ | ~twa_succ_iterator::cond()~ | |
|
||||||
| ~tgba_succ_iterator::current_state()~ | ~twa_succ_iterator::dst()~ | |
|
| ~tgba_succ_iterator::current_state()~ | ~twa_succ_iterator::dst()~ | |
|
||||||
|
|
||||||
|
# LocalWords: utf html cpp BuDDy ptr TGBA tgba twa tgba renamings
|
||||||
|
# LocalWords: reimplemented cpp SRC bdd bddx BuDDy bvec bvecx fdd
|
||||||
|
# LocalWords: fddx dstarparse eltlparse iface kripke adhoc ltlast
|
||||||
|
# LocalWords: kripkeparse ltlenv ltlparse ltlvisit config sabaalgos
|
||||||
|
# LocalWords: neverparse saba taalgos tgbaalgos dualize tgbaparse
|
||||||
|
# LocalWords: libbdd libbddx lspot lbddx lbdd namespace ptr xargs
|
||||||
|
# LocalWords: typedefs sed aut taa tgta acc buchi myalgorithm succ
|
||||||
|
# LocalWords: iter num dst cond BDDs arg dstar dtgba dupexp bfs dfs
|
||||||
|
# LocalWords: instantiator hoaf lbtt tl simplifier boolean psl str
|
||||||
|
# LocalWords: lbt sclatex utg utf neverclaim scc
|
||||||
|
|
|
||||||
|
|
@ -780,7 +780,7 @@ _add_formula('are_equivalent', 'equivalent_to')
|
||||||
def postprocess(automaton, *args, formula=None, xargs=None):
|
def postprocess(automaton, *args, formula=None, xargs=None):
|
||||||
"""Post process an automaton.
|
"""Post process an automaton.
|
||||||
|
|
||||||
This applies a number of simlification algorithms, depending on
|
This applies a number of simplification algorithms, depending on
|
||||||
the options supplied. Keep in mind that 'Deterministic' expresses
|
the options supplied. Keep in mind that 'Deterministic' expresses
|
||||||
just a preference that may not be satisfied if the input is
|
just a preference that may not be satisfied if the input is
|
||||||
not already 'Deterministic'.
|
not already 'Deterministic'.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue