document -U
* doc/org/.dir-locals.el, doc/org/init.el.in: Use 'B' instead of 'b' for default Dot output. * doc/org/oaut.org: Adjust. * NEWS, doc/org/ltl2tgba.org: Document -U. * src/bin/common_post.cc, src/bin/ltl2tgba.cc: Fix location of help text for -U.
This commit is contained in:
parent
5d76b9127b
commit
332694a485
7 changed files with 185 additions and 59 deletions
16
NEWS
16
NEWS
|
|
@ -75,6 +75,11 @@ New in spot 1.99b (not yet released)
|
||||||
in a pipe, and it also takes care of some necessary format
|
in a pipe, and it also takes care of some necessary format
|
||||||
conversion.
|
conversion.
|
||||||
|
|
||||||
|
- ltl2tgba has a new option, -U, to produce unambiguous automata.
|
||||||
|
In unambiguous automata any word this recognized by at most one
|
||||||
|
accepting run (but there might be several ways to reject a
|
||||||
|
word). This works for LTL and PSL formulas.
|
||||||
|
|
||||||
- ltlcross will work with translator producing automata with any
|
- ltlcross will work with translator producing automata with any
|
||||||
acceptance condition, provided the output is in the HOA format.
|
acceptance condition, provided the output is in the HOA format.
|
||||||
So it can effectively be used to validate tools producing Rabin
|
So it can effectively be used to validate tools producing Rabin
|
||||||
|
|
@ -131,7 +136,8 @@ New in spot 1.99b (not yet released)
|
||||||
ltl2tgba --check 'formula'
|
ltl2tgba --check 'formula'
|
||||||
additional checks will be performed, and the automaton
|
additional checks will be performed, and the automaton
|
||||||
will be accurately marked as either 'stutter-invariant'
|
will be accurately marked as either 'stutter-invariant'
|
||||||
or 'stutter-sensitive'.
|
or 'stutter-sensitive'. Another check performed by
|
||||||
|
--check is testing whether the automaton is unambiguous.
|
||||||
|
|
||||||
- ltlcross (and ltldo) have a list of hard-coded shorthands
|
- ltlcross (and ltldo) have a list of hard-coded shorthands
|
||||||
for some existing tools. So for instance running
|
for some existing tools. So for instance running
|
||||||
|
|
@ -222,10 +228,10 @@ New in spot 1.99b (not yet released)
|
||||||
--spin=6 (or -s6 for short).
|
--spin=6 (or -s6 for short).
|
||||||
|
|
||||||
- Support for building unambiguous automata. ltl_to_tgba() has a
|
- Support for building unambiguous automata. ltl_to_tgba() has a
|
||||||
new options to produce unambiguous TGBA, i.e., TGBAs in which
|
new options to produce unambiguous TGBA (used by ltl2tgba -U as
|
||||||
every word is accepted by at most one path. The ltl2tgba
|
discussed above). The function is_unambiguous() will check
|
||||||
command line has a new option, --unambigous (or -U) to produce
|
whether an automaton is unambigous, and this is used by
|
||||||
these automata, and autfilt has a --is-unambiguous filter.
|
autfilt --is-unmabiguous.
|
||||||
|
|
||||||
* Noteworthy code changes
|
* Noteworthy code changes
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
(setq org-babel-sh-command (concat "PATH=../../src/bin"
|
(setq org-babel-sh-command (concat "PATH=../../src/bin"
|
||||||
path-separator
|
path-separator
|
||||||
"$PATH sh"))
|
"$PATH sh"))
|
||||||
(setenv "SPOT_DOTDEFAULT" "brf(Lato)")
|
(setenv "SPOT_DOTDEFAULT" "Brf(Lato)")
|
||||||
(setenv "SPOT_DOTEXTRA" "node[style=filled, fillcolor=\"#ffffa0\"] edge[arrowhead=vee, arrowsize=.7]")
|
(setenv "SPOT_DOTEXTRA" "node[style=filled, fillcolor=\"#ffffa0\"] edge[arrowhead=vee, arrowsize=.7]")
|
||||||
(org-babel-do-load-languages 'org-babel-load-languages
|
(org-babel-do-load-languages 'org-babel-load-languages
|
||||||
'((sh . t)
|
'((sh . t)
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
(setq org-babel-sh-command
|
(setq org-babel-sh-command
|
||||||
(concat "PATH=@abs_top_builddir@/src/bin" path-separator "$PATH sh"))
|
(concat "PATH=@abs_top_builddir@/src/bin" path-separator "$PATH sh"))
|
||||||
|
|
||||||
(setenv "SPOT_DOTDEFAULT" "brf(Lato)")
|
(setenv "SPOT_DOTDEFAULT" "Brf(Lato)")
|
||||||
(setenv "SPOT_DOTEXTRA"
|
(setenv "SPOT_DOTEXTRA"
|
||||||
"node[style=filled, fillcolor=\"#ffffa0\"] edge[arrowhead=vee, arrowsize=.7]")
|
"node[style=filled, fillcolor=\"#ffffa0\"] edge[arrowhead=vee, arrowsize=.7]")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ ltl2tgba "Fa & GFb" | dot -Tpdf > tgba.pdf
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
|
|
||||||
The result would look like this (note that in this documentation
|
The result would look like this (note that in this documentation
|
||||||
we use some [[file:aout.org][environement variables]] to produce a more colorful
|
we use some [[file:aout.org][environment variables]] to produce a more colorful
|
||||||
output by default)
|
output by default)
|
||||||
#+NAME: dotex
|
#+NAME: dotex
|
||||||
#+BEGIN_SRC sh :results verbatim :exports none
|
#+BEGIN_SRC sh :results verbatim :exports none
|
||||||
|
|
@ -140,21 +140,22 @@ ltl2tgba -B 'GFa & GFb'
|
||||||
#+begin_example
|
#+begin_example
|
||||||
digraph G {
|
digraph G {
|
||||||
rankdir=LR
|
rankdir=LR
|
||||||
|
node [shape="circle"]
|
||||||
fontname="Lato"
|
fontname="Lato"
|
||||||
node [fontname="Lato"]
|
node [fontname="Lato"]
|
||||||
edge [fontname="Lato"]
|
edge [fontname="Lato"]
|
||||||
node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]
|
node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]
|
||||||
I [label="", style=invis, width=0]
|
I [label="", style=invis, width=0]
|
||||||
I -> 0
|
I -> 0
|
||||||
0 [label=<0<br/><font color="#5DA5DA">⓿</font>>]
|
0 [label="0", peripheries=2]
|
||||||
0 -> 0 [label=<a & b>]
|
0 -> 0 [label=<a & b>]
|
||||||
0 -> 1 [label=<!b>]
|
0 -> 1 [label=<!b>]
|
||||||
0 -> 2 [label=<!a & b>]
|
0 -> 2 [label=<!a & b>]
|
||||||
1 [label=<1>]
|
1 [label="1"]
|
||||||
1 -> 0 [label=<a & b>]
|
1 -> 0 [label=<a & b>]
|
||||||
1 -> 1 [label=<!b>]
|
1 -> 1 [label=<!b>]
|
||||||
1 -> 2 [label=<!a & b>]
|
1 -> 2 [label=<!a & b>]
|
||||||
2 [label=<2>]
|
2 [label="2"]
|
||||||
2 -> 0 [label=<a>]
|
2 -> 0 [label=<a>]
|
||||||
2 -> 2 [label=<!a>]
|
2 -> 2 [label=<!a>]
|
||||||
}
|
}
|
||||||
|
|
@ -166,13 +167,13 @@ $txt
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:dotex2ba.png]]
|
[[file:dotex2ba.png]]
|
||||||
|
|
||||||
Although accepting states in the Büchi automaton are pictured with
|
Although accepting states in the Büchi automaton are (traditionally)
|
||||||
double-lines, internally this automaton is still handled as a TGBA
|
pictured with double-lines, internally this automaton is still handled
|
||||||
with a single acceptance set such that the transitions
|
as a TGBA with a single acceptance set such that the transitions
|
||||||
leaving the state are either all accepting, or all non-accepting.
|
leaving the state are either all accepting, or all non-accepting. You
|
||||||
You can see this underlying TGBA if you pass the =--dot=t= option
|
can see this underlying TGBA if you pass the =--dot=t= option (the =t=
|
||||||
(the =t= requests the use of transition-based acceptance at it
|
requests the use of transition-based acceptance as it is done
|
||||||
is done internally):
|
internally):
|
||||||
|
|
||||||
#+BEGIN_SRC sh :results verbatim :exports code
|
#+BEGIN_SRC sh :results verbatim :exports code
|
||||||
ltl2tgba --dot=t -B 'GFa & GFb'
|
ltl2tgba --dot=t -B 'GFa & GFb'
|
||||||
|
|
@ -223,15 +224,21 @@ ltl2tgba --help | sed -n '/Output format:/,/^$/p' | sed '1d;$d'
|
||||||
#+begin_example
|
#+begin_example
|
||||||
-8, --utf8 enable UTF-8 characters in output (ignored with
|
-8, --utf8 enable UTF-8 characters in output (ignored with
|
||||||
--lbtt or --spin)
|
--lbtt or --spin)
|
||||||
--dot[=a|b|c|f(FONT)|h|n|N|r|R|s|t|v]
|
--check[=PROP] test for the additional property PROP and output
|
||||||
GraphViz's format (default). Add letters for (a)
|
the result in the HOA format (implies -H). PROP
|
||||||
acceptance display, (b) acceptance sets as
|
may be any prefix of 'all' (default),
|
||||||
bullets,(c) circular nodes, (f(FONT)) use FONT,
|
'unambiguous', or 'stutter-invariant'.
|
||||||
(h) horizontal layout, (v) vertical layout, (n)
|
--dot[=1|a|b|B|c|e|f(FONT)|h|n|N|o|r|R|s|t|v]
|
||||||
with name, (N) without name, (r) rainbow colors
|
GraphViz's format (default). Add letters for (1)
|
||||||
for acceptance set, (R) color acceptance set by
|
force numbered states, (a) acceptance display, (b)
|
||||||
Inf/Fin, (s) with SCCs, (t) force transition-based
|
acceptance sets as bullets, (B) bullets except for
|
||||||
acceptance.
|
Büchi/co-Büchi automata, (c) force circular
|
||||||
|
nodes, (e) force elliptic nodes, (f(FONT)) use
|
||||||
|
FONT, (h) horizontal layout, (v) vertical layout,
|
||||||
|
(n) with name, (N) without name, (o) ordered
|
||||||
|
transitions, (r) rainbow colors for acceptance
|
||||||
|
sets, (R) color acceptance sets by Inf/Fin, (s)
|
||||||
|
with SCCs, (t) force transition-based acceptance.
|
||||||
-H, --hoaf[=i|s|t|m|l] Output the automaton in HOA format. Add letters
|
-H, --hoaf[=i|s|t|m|l] Output the automaton in HOA format. Add letters
|
||||||
to select (i) use implicit labels for complete
|
to select (i) use implicit labels for complete
|
||||||
deterministic automata, (s) prefer state-based
|
deterministic automata, (s) prefer state-based
|
||||||
|
|
@ -240,7 +247,7 @@ ltl2tgba --help | sed -n '/Output format:/,/^$/p' | sed '1d;$d'
|
||||||
transition-based acceptance, (l) single-line
|
transition-based acceptance, (l) single-line
|
||||||
output
|
output
|
||||||
--lbtt[=t] LBTT's format (add =t to force transition-based
|
--lbtt[=t] LBTT's format (add =t to force transition-based
|
||||||
acceptance even on Büchi automata)
|
acceptance even on Büchi automata)
|
||||||
--name=FORMAT set the name of the output automaton
|
--name=FORMAT set the name of the output automaton
|
||||||
-o, --output=FORMAT send output to a file named FORMAT instead of
|
-o, --output=FORMAT send output to a file named FORMAT instead of
|
||||||
standard output. The first automaton sent to a
|
standard output. The first automaton sent to a
|
||||||
|
|
@ -340,49 +347,57 @@ ltl2tgba -s --lenient '(a < b) U (process[2]@ok)'
|
||||||
: skip
|
: skip
|
||||||
: }
|
: }
|
||||||
|
|
||||||
|
|
||||||
* Do you favor deterministic or small automata?
|
* Do you favor deterministic or small automata?
|
||||||
|
|
||||||
The translation procedure can be controled by a few switches. A first
|
The translation procedure can be controled by a few switches. A first
|
||||||
set of options specifies the intent of the translation: whenever
|
set of options specifies the intent of the translation: whenever
|
||||||
possible, would you prefer a small automaton or a deterministic
|
possible, would you prefer a small automaton (=--small=) or a
|
||||||
automaton?
|
deterministic (=--deterministic=) automaton?
|
||||||
|
|
||||||
#+BEGIN_SRC sh :results verbatim :exports results
|
#+BEGIN_SRC sh :results verbatim :exports results
|
||||||
ltl2tgba --help | sed -n '/Translation intent:/,/^$/p' | sed '1d;$d'
|
ltl2tgba --help | sed -n '/Translation intent:/,/^$/p' | sed '1d;$d'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
: -a, --any no preference
|
: -a, --any no preference, do not bother making it small or
|
||||||
|
: deterministic
|
||||||
: -C, --complete output a complete automaton (combine with other
|
: -C, --complete output a complete automaton (combine with other
|
||||||
: intents)
|
: intents)
|
||||||
: -D, --deterministic prefer deterministic automata
|
: -D, --deterministic prefer deterministic automata
|
||||||
: --small prefer small automata (default)
|
: --small prefer small automata (default)
|
||||||
|
: -U, --unambiguous output unambiguous automata (combine with other
|
||||||
|
: intents)
|
||||||
|
|
||||||
The =--any= option tells the translator that it should not target any
|
The =--any= option tells the translator that it should attempt to
|
||||||
particular form of result: any automaton denoting the given formula is
|
reduce or produce a deterministic result result: any automaton
|
||||||
OK. This effectively disables post-processings and speeds up the
|
denoting the given formula is OK. This effectively disables
|
||||||
translation.
|
post-processings and speeds up the translation.
|
||||||
|
|
||||||
With the =-D= option, the translator will /attempt/ to produce a
|
With the =-D= or =--deterministic= option, the translator will
|
||||||
deterministic automaton, even if this requires a lot of states. =ltl2tgba=
|
/attempt/ to produce a deterministic automaton, even if this requires
|
||||||
knows how to produce the minimal deterministic Büchi automaton for
|
a lot of states. =ltl2tgba= knows how to produce the minimal
|
||||||
any obligation property (this includes safety properties).
|
deterministic Büchi automaton for any obligation property (this
|
||||||
|
includes safety properties).
|
||||||
|
|
||||||
With the =--small= option (the default), the translator will not
|
With the =--small= option (the default), the translator will not
|
||||||
produce a deterministic automaton when it knows how to build smaller
|
produce a deterministic automaton when it knows how to build smaller
|
||||||
automaton.
|
automaton.
|
||||||
|
|
||||||
|
Note that options =--deterministic= and =--small= express
|
||||||
|
/preferences/. They certainly do /not/ guarantee that the output will
|
||||||
|
be deterministic, or will be the smallest automaton possible.
|
||||||
|
|
||||||
An example formula where the difference between =-D= and =--small= is
|
An example formula where the difference between =-D= and =--small= is
|
||||||
flagrant is =Ga|Gb|Gc=:
|
flagrant is =Ga|Gb|Gc=:
|
||||||
|
|
||||||
#+NAME: gagbgc1
|
#+NAME: gagbgc1
|
||||||
#+BEGIN_SRC sh :results verbatim :exports code
|
#+BEGIN_SRC sh :results verbatim :exports code
|
||||||
ltl2tgba "Ga|Gb|Gc"
|
ltl2tgba 'Ga|Gb|Gc'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
#+RESULTS: gagbgc1
|
#+RESULTS: gagbgc1
|
||||||
#+begin_example
|
#+begin_example
|
||||||
digraph G {
|
digraph G {
|
||||||
rankdir=LR
|
rankdir=LR
|
||||||
|
node [shape="circle"]
|
||||||
fontname="Lato"
|
fontname="Lato"
|
||||||
node [fontname="Lato"]
|
node [fontname="Lato"]
|
||||||
edge [fontname="Lato"]
|
edge [fontname="Lato"]
|
||||||
|
|
@ -416,31 +431,32 @@ ltl2tgba -D 'Ga|Gb|Gc'
|
||||||
#+begin_example
|
#+begin_example
|
||||||
digraph G {
|
digraph G {
|
||||||
rankdir=LR
|
rankdir=LR
|
||||||
|
node [shape="circle"]
|
||||||
fontname="Lato"
|
fontname="Lato"
|
||||||
node [fontname="Lato"]
|
node [fontname="Lato"]
|
||||||
edge [fontname="Lato"]
|
edge [fontname="Lato"]
|
||||||
node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]
|
node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]
|
||||||
I [label="", style=invis, width=0]
|
I [label="", style=invis, width=0]
|
||||||
I -> 6
|
I -> 6
|
||||||
0 [label=<0<br/><font color="#5DA5DA">⓿</font>>]
|
0 [label="0", peripheries=2]
|
||||||
0 -> 0 [label=<c>]
|
0 -> 0 [label=<c>]
|
||||||
1 [label=<1<br/><font color="#5DA5DA">⓿</font>>]
|
1 [label="1", peripheries=2]
|
||||||
1 -> 0 [label=<!b & c>]
|
1 -> 0 [label=<!b & c>]
|
||||||
1 -> 1 [label=<b & c>]
|
1 -> 1 [label=<b & c>]
|
||||||
1 -> 2 [label=<b & !c>]
|
1 -> 2 [label=<b & !c>]
|
||||||
2 [label=<2<br/><font color="#5DA5DA">⓿</font>>]
|
2 [label="2", peripheries=2]
|
||||||
2 -> 2 [label=<b>]
|
2 -> 2 [label=<b>]
|
||||||
3 [label=<3<br/><font color="#5DA5DA">⓿</font>>]
|
3 [label="3", peripheries=2]
|
||||||
3 -> 2 [label=<!a & b>]
|
3 -> 2 [label=<!a & b>]
|
||||||
3 -> 3 [label=<a & b>]
|
3 -> 3 [label=<a & b>]
|
||||||
3 -> 5 [label=<a & !b>]
|
3 -> 5 [label=<a & !b>]
|
||||||
4 [label=<4<br/><font color="#5DA5DA">⓿</font>>]
|
4 [label="4", peripheries=2]
|
||||||
4 -> 0 [label=<!a & c>]
|
4 -> 0 [label=<!a & c>]
|
||||||
4 -> 4 [label=<a & c>]
|
4 -> 4 [label=<a & c>]
|
||||||
4 -> 5 [label=<a & !c>]
|
4 -> 5 [label=<a & !c>]
|
||||||
5 [label=<5<br/><font color="#5DA5DA">⓿</font>>]
|
5 [label="5", peripheries=2]
|
||||||
5 -> 5 [label=<a>]
|
5 -> 5 [label=<a>]
|
||||||
6 [label=<6<br/><font color="#5DA5DA">⓿</font>>]
|
6 [label="6", peripheries=2]
|
||||||
6 -> 0 [label=<!a & !b & c>]
|
6 -> 0 [label=<!a & !b & c>]
|
||||||
6 -> 1 [label=<!a & b & c>]
|
6 -> 1 [label=<!a & b & c>]
|
||||||
6 -> 2 [label=<!a & b & !c>]
|
6 -> 2 [label=<!a & b & !c>]
|
||||||
|
|
@ -461,10 +477,110 @@ You can augment the number of terms in the disjunction to magnify the
|
||||||
difference. For N terms, the =--small= automaton has N+1 states,
|
difference. For N terms, the =--small= automaton has N+1 states,
|
||||||
while the =--deterministic= automaton needs 2^N-1 states.
|
while the =--deterministic= automaton needs 2^N-1 states.
|
||||||
|
|
||||||
Add the =--complete= option if you want to obtain a complete
|
Add the =-C= or =--complete= option if you want to obtain a complete
|
||||||
automaton, with a sink state capturing that rejected words that would
|
automaton, with a sink state capturing that rejected words that would
|
||||||
not otherwise have a run in the output automaton.
|
not otherwise have a run in the output automaton.
|
||||||
|
|
||||||
|
Add the =-U= or =--unambiguous= option if you want unambiguous
|
||||||
|
automata to be produced. An automaton is unambiguous if any word is
|
||||||
|
recognized by at most one accepting run of the automaton (however a
|
||||||
|
word can be rejected by multiple runs, so unambiguous automata can be
|
||||||
|
non-deterministic).
|
||||||
|
|
||||||
|
The following example is an ambiguous Büchi automaton, because the are
|
||||||
|
two ways to accept a run that repeats continuously the configuration
|
||||||
|
$\bar ab$.
|
||||||
|
|
||||||
|
#+NAME: ambig1
|
||||||
|
#+BEGIN_SRC sh :results verbatim :exports code
|
||||||
|
ltl2tgba -B 'GFa -> GFb'
|
||||||
|
#+END_SRC
|
||||||
|
#+RESULTS: ambig1
|
||||||
|
#+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", peripheries=2]
|
||||||
|
0 -> 0 [label=<!a>]
|
||||||
|
1 [label="1"]
|
||||||
|
1 -> 0 [label=<!a>]
|
||||||
|
1 -> 1 [label=<1>]
|
||||||
|
1 -> 2 [label=<b>]
|
||||||
|
2 [label="2", peripheries=2]
|
||||||
|
2 -> 2 [label=<b>]
|
||||||
|
2 -> 3 [label=<!b>]
|
||||||
|
3 [label="3"]
|
||||||
|
3 -> 2 [label=<b>]
|
||||||
|
3 -> 3 [label=<!b>]
|
||||||
|
}
|
||||||
|
#+end_example
|
||||||
|
|
||||||
|
#+BEGIN_SRC dot :file ambig1.png :cmdline -Tpng :var txt=ambig1 :exports results
|
||||||
|
$txt
|
||||||
|
#+END_SRC
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:ambig1.png]]
|
||||||
|
|
||||||
|
Here is an unambiguous automaton for the same formula, in which there
|
||||||
|
is only one run that recognizes this example word:
|
||||||
|
|
||||||
|
#+NAME: ambig2
|
||||||
|
#+BEGIN_SRC sh :results verbatim :exports code
|
||||||
|
ltl2tgba -B -U 'GFa -> GFb'
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+RESULTS: ambig2
|
||||||
|
#+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=<!a & !b>]
|
||||||
|
0 -> 2 [label=<1>]
|
||||||
|
0 -> 3 [label=<a | b>]
|
||||||
|
0 -> 4 [label=<!a & !b>]
|
||||||
|
1 [label="1", peripheries=2]
|
||||||
|
1 -> 1 [label=<!a & !b>]
|
||||||
|
2 [label="2", peripheries=2]
|
||||||
|
2 -> 2 [label=<b>]
|
||||||
|
2 -> 5 [label=<!b>]
|
||||||
|
3 [label="3"]
|
||||||
|
3 -> 1 [label=<!a & !b>]
|
||||||
|
3 -> 3 [label=<a | b>]
|
||||||
|
3 -> 4 [label=<!a & !b>]
|
||||||
|
4 [label="4"]
|
||||||
|
4 -> 3 [label=<a | b>]
|
||||||
|
4 -> 4 [label=<!a & !b>]
|
||||||
|
5 [label="5"]
|
||||||
|
5 -> 2 [label=<b>]
|
||||||
|
5 -> 5 [label=<!b>]
|
||||||
|
}
|
||||||
|
#+end_example
|
||||||
|
|
||||||
|
#+BEGIN_SRC dot :file ambig2.png :cmdline -Tpng :var txt=ambig2 :exports results
|
||||||
|
$txt
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:ambig2.png]]
|
||||||
|
|
||||||
|
|
||||||
|
Unlike =--small= and =--deterministic= that express preferences,
|
||||||
|
options =--complete= and =--unambiguous= do guarantee that the output
|
||||||
|
will be complete and unambiguous.
|
||||||
|
|
||||||
|
|
||||||
A last parameter that can be used to tune the translation is the amount
|
A last parameter that can be used to tune the translation is the amount
|
||||||
of pre- and post-processing performed. These two steps can be adjusted
|
of pre- and post-processing performed. These two steps can be adjusted
|
||||||
|
|
@ -486,8 +602,8 @@ syntactic implications are performed. At =--high= level, language
|
||||||
containment is used instead of syntactic implications.
|
containment is used instead of syntactic implications.
|
||||||
|
|
||||||
Post-processings are cleanups and simplifications of the automaton
|
Post-processings are cleanups and simplifications of the automaton
|
||||||
produced by the core translator. The algorithms used during post-processing
|
produced by the core translator. The algorithms used during
|
||||||
are
|
post-processing are
|
||||||
- SCC filtering: removing useless strongly connected components,
|
- SCC filtering: removing useless strongly connected components,
|
||||||
and useless acceptance sets.
|
and useless acceptance sets.
|
||||||
- direct simulation: merge states based on suffix inclusion.
|
- direct simulation: merge states based on suffix inclusion.
|
||||||
|
|
@ -496,6 +612,7 @@ are
|
||||||
- WDBA minimization: determinize and minimize automata representing
|
- WDBA minimization: determinize and minimize automata representing
|
||||||
obligation properties.
|
obligation properties.
|
||||||
- degeneralization: convert a TGBA into a BA
|
- degeneralization: convert a TGBA into a BA
|
||||||
|
- BA simulation (again direct or iterated)
|
||||||
|
|
||||||
The chaining of these various algorithms depends on the selected
|
The chaining of these various algorithms depends on the selected
|
||||||
combination of optimization level (=--low=, =--medium=, =--high=),
|
combination of optimization level (=--low=, =--medium=, =--high=),
|
||||||
|
|
|
||||||
|
|
@ -822,7 +822,7 @@ The dot output can also be customized via two environment variables:
|
||||||
variables set:
|
variables set:
|
||||||
|
|
||||||
#+BEGIN_SRC sh :results verbatim :exports code
|
#+BEGIN_SRC sh :results verbatim :exports code
|
||||||
export SPOT_DOTDEFAULT='brf(Lato)'
|
export SPOT_DOTDEFAULT='Brf(Lato)'
|
||||||
export SPOT_DOTEXTRA='node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]'
|
export SPOT_DOTEXTRA='node[style=filled, fillcolor="#ffffa0"] edge[arrowhead=vee, arrowsize=.7]'
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,12 @@ static const argp_option options[] =
|
||||||
{
|
{
|
||||||
/**************************************************/
|
/**************************************************/
|
||||||
{ 0, 0, 0, 0, "Translation intent:", 20 },
|
{ 0, 0, 0, 0, "Translation intent:", 20 },
|
||||||
{ "small", OPT_SMALL, 0, 0, "prefer small automata (default)", 20 },
|
{ "small", OPT_SMALL, 0, 0, "prefer small automata (default)", 0 },
|
||||||
{ "deterministic", 'D', 0, 0, "prefer deterministic automata", 20 },
|
{ "deterministic", 'D', 0, 0, "prefer deterministic automata", 0 },
|
||||||
{ "any", 'a', 0, 0, "no preference", 20 },
|
{ "any", 'a', 0, 0, "no preference, do not bother making it small "
|
||||||
|
"or deterministic", 0 },
|
||||||
{ "complete", 'C', 0, 0, "output a complete automaton (combine "
|
{ "complete", 'C', 0, 0, "output a complete automaton (combine "
|
||||||
"with other intents)", 20 },
|
"with other intents)", 0 },
|
||||||
/**************************************************/
|
/**************************************************/
|
||||||
{ 0, 0, 0, 0, "Optimization level:", 21 },
|
{ 0, 0, 0, 0, "Optimization level:", 21 },
|
||||||
{ "low", OPT_LOW, 0, 0, "minimal optimizations (fast)", 0 },
|
{ "low", OPT_LOW, 0, 0, "minimal optimizations (fast)", 0 },
|
||||||
|
|
@ -57,7 +58,8 @@ static const argp_option options_disabled[] =
|
||||||
{ 0, 0, 0, 0, "Translation intent:", 20 },
|
{ 0, 0, 0, 0, "Translation intent:", 20 },
|
||||||
{ "small", OPT_SMALL, 0, 0, "prefer small automata", 0 },
|
{ "small", OPT_SMALL, 0, 0, "prefer small automata", 0 },
|
||||||
{ "deterministic", 'D', 0, 0, "prefer deterministic automata", 0 },
|
{ "deterministic", 'D', 0, 0, "prefer deterministic automata", 0 },
|
||||||
{ "any", 'a', 0, 0, "no preference (default)", 0 },
|
{ "any", 'a', 0, 0, "no preference, do not bother making it small "
|
||||||
|
"or deterministic (default)", 0 },
|
||||||
{ "complete", 'C', 0, 0, "output a complete automaton (combine "
|
{ "complete", 'C', 0, 0, "output a complete automaton (combine "
|
||||||
"with other intents)", 0 },
|
"with other intents)", 0 },
|
||||||
/**************************************************/
|
/**************************************************/
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,8 @@ static const argp_option options[] =
|
||||||
{ "%f", 0, 0, OPTION_DOC | OPTION_NO_USAGE,
|
{ "%f", 0, 0, OPTION_DOC | OPTION_NO_USAGE,
|
||||||
"the formula, in Spot's syntax", 4 },
|
"the formula, in Spot's syntax", 4 },
|
||||||
/**************************************************/
|
/**************************************************/
|
||||||
{ "unambiguous", 'U', 0, 0, "produce unambiguous automata", 20 },
|
{ "unambiguous", 'U', 0, 0, "output unambiguous automata "
|
||||||
|
"(combine with other intents)", 20 },
|
||||||
{ 0, 0, 0, 0, "Miscellaneous options:", -1 },
|
{ 0, 0, 0, 0, "Miscellaneous options:", -1 },
|
||||||
{ "extra-options", 'x', "OPTS", 0,
|
{ "extra-options", 'x', "OPTS", 0,
|
||||||
"fine-tuning options (see spot-x (7))", 0 },
|
"fine-tuning options (see spot-x (7))", 0 },
|
||||||
|
|
@ -76,7 +77,7 @@ const struct argp_child children[] =
|
||||||
{ &finput_argp, 0, 0, 1 },
|
{ &finput_argp, 0, 0, 1 },
|
||||||
{ &aoutput_argp, 0, 0, 0 },
|
{ &aoutput_argp, 0, 0, 0 },
|
||||||
{ &aoutput_o_format_argp, 0, 0, 0 },
|
{ &aoutput_o_format_argp, 0, 0, 0 },
|
||||||
{ &post_argp, 0, 0, 20 },
|
{ &post_argp, 0, 0, 0 },
|
||||||
{ &misc_argp, 0, 0, -1 },
|
{ &misc_argp, 0, 0, -1 },
|
||||||
{ 0, 0, 0, 0 }
|
{ 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue