Commit 332694a4 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

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.
parent 5d76b912
...@@ -75,6 +75,11 @@ New in spot 1.99b (not yet released) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 ...@@ -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' ...@@ -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 &amp; b>] 0 -> 0 [label=<a &amp; b>]
0 -> 1 [label=<!b>] 0 -> 1 [label=<!b>]
0 -> 2 [label=<!a &amp; b>] 0 -> 2 [label=<!a &amp; b>]
1 [label=<1>] 1 [label="1"]
1 -> 0 [label=<a &amp; b>] 1 -> 0 [label=<a &amp; b>]
1 -> 1 [label=<!b>] 1 -> 1 [label=<!b>]
1 -> 2 [label=<!a &amp; b>] 1 -> 2 [label=<!a &amp; 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 ...@@ -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' ...@@ -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' ...@@ -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)' ...@@ -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' ...@@ -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 &amp; c>] 1 -> 0 [label=<!b &amp; c>]
1 -> 1 [label=<b &amp; c>] 1 -> 1 [label=<b &amp; c>]
1 -> 2 [label=<b &amp; !c>] 1 -> 2 [label=<b &amp; !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 &amp; b>] 3 -> 2 [label=<!a &amp; b>]
3 -> 3 [label=<a &amp; b>] 3 -> 3 [label=<a &amp; b>]
3 -> 5 [label=<a &amp; !b>] 3 -> 5 [label=<a &amp; !b>]
4 [label=<4<br/><font color="#5DA5DA">⓿</font>>] 4 [label="4", peripheries=2]
4 -> 0 [label=<!a &amp; c>] 4 -> 0 [label=<!a &amp; c>]
4 -> 4 [label=<a &amp; c>] 4 -> 4 [label=<a &amp; c>]
4 -> 5 [label=<a &amp; !c>] 4 -> 5 [label=<a &amp; !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 &amp; !b &amp; c>] 6 -> 0 [label=<!a &amp; !b &amp; c>]
6 -> 1 [label=<!a &amp; b &amp; c>] 6 -> 1 [label=<!a &amp; b &amp; c>]
6 -> 2 [label=<!a &amp; b &amp; !c>] 6 -> 2 [label=<!a &amp; b &amp; !c>]
...@@ -461,10 +477,110 @@ You can augment the number of terms in the disjunction to magnify the ...@@ -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 &amp; !b>]
0 -> 2 [label=<1>]
0 -> 3 [label=<a | b>]
0 -> 4 [label=<!a &amp; !b>]
1 [label="1", peripheries=2]
1 -> 1 [label=<!a &amp; !b>]
2 [label="2", peripheries=2]
2 -> 2 [label=<b>]
2 -> 5 [label=<!b>]
3 [label="3"]
3 -> 1 [label=<!a &amp; !b>]
3 -> 3 [label=<a | b>]
3 -> 4 [label=<!a &amp; !b>]
4 [label="4"]
4 -> 3 [label=<a | b>]
4 -> 4 [label=<!a &amp; !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 ...@@ -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 ...@@ -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: ...@@ -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[] = ...@@ -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[] = ...@@ -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[] = ...@@ -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[] = ...@@ -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 }
}; };
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment