dotty: colored acceptance sets

This implement several new options for --dot in order to
allow emptiness sets to be output as colored ⓿ or ❶...
Also add a SPOT_DOTDEFAULT environment variable.

* NEWS, src/bin/man/spot-x.x, src/bin/common_aoutput.cc,
src/bin/dstar2tgba.cc: Document the new options.
* doc/org/.dir-locals.el, doc/org/init.el.in: Setup
SPOT_DOTEXTRA and SPOT_DOTDEFAULT for all documents.
* doc/org/autfilt.org, doc/org/dstar2tgba.org, doc/org/ltl2tgba.org,
doc/org/ltldo.org, doc/org/oaut.org, doc/org/randaut.org,
doc/org/satmin.org: Adjust to this new setup.
* src/misc/escape.cc, src/misc/escape.hh (escape_html): New function.
* src/tgba/acc.cc, src/tgba/acc.hh (to_text, to_html): New method.
* src/tgbaalgos/dotty.cc: Implement the new options.
* src/tgbatest/readsave.test, wrap/python/tests/automata.ipynb: More
tests.
* wrap/python/spot.py: Make sure the default argument for
dotty_reachable is None, so that SPOT_DOTDEFAULT is honored.
This commit is contained in:
Alexandre Duret-Lutz 2015-03-17 09:08:20 +01:00
parent 7caf2b83d6
commit 838bfb2ae3
21 changed files with 1500 additions and 1193 deletions

View file

@ -96,6 +96,7 @@ ltl2tgba -D -x sat-minimize "GF(a <-> XXb)" --stats='states=%s, det=%d'
We can draw it:
#+NAME: gfaexxb3
#+BEGIN_SRC sh :results verbatim :exports code
ltl2tgba -D -x sat-minimize "GF(a <-> XXb)"
#+END_SRC
@ -103,57 +104,32 @@ ltl2tgba -D -x sat-minimize "GF(a <-> XXb)"
#+begin_example
digraph G {
rankdir=LR
fontname="Lato"
node [fontname="Lato"]
edge [fontname="Lato"]
node[style=filled, fillcolor="#ffffa0"]
I [label="", style=invis, width=0]
I -> 0
0 [label="0"]
0 -> 1 [label="!b\n{0}"]
0 -> 1 [label="a & b"]
0 -> 2 [label="!a & b"]
0 -> 1 [label=<!a &amp; !b<br/><font color="#5DA5DA">⓿</font>>]
0 -> 2 [label=<!a &amp; b>]
0 -> 3 [label=<a &amp; b>]
0 -> 3 [label=<a &amp; !b<br/><font color="#5DA5DA">⓿</font>>]
1 [label="1"]
1 -> 1 [label="a & b\n{0}"]
1 -> 1 [label="a & !b"]
1 -> 2 [label="!a & !b"]
1 -> 3 [label="!a & b\n{0}"]
1 -> 0 [label=<a &amp; b>]
1 -> 0 [label=<a &amp; !b<br/><font color="#5DA5DA">⓿</font>>]
1 -> 1 [label=<!a &amp; b>]
1 -> 1 [label=<!a &amp; !b<br/><font color="#5DA5DA">⓿</font>>]
2 [label="2"]
2 -> 0 [label="a & !b"]
2 -> 1 [label="b\n{0}"]
2 -> 3 [label="!a & !b"]
2 -> 0 [label=<a &amp; !b>]
2 -> 1 [label=<!a &amp; b<br/><font color="#5DA5DA">⓿</font>>]
2 -> 1 [label=<!a &amp; !b>]
2 -> 3 [label=<a &amp; b<br/><font color="#5DA5DA">⓿</font>>]
3 [label="3"]
3 -> 0 [label="a & b"]
3 -> 0 [label="a & !b\n{0}"]
3 -> 3 [label="!a & b"]
3 -> 3 [label="!a & !b\n{0}"]
}
#+end_example
#+NAME: gfaexxb3
#+BEGIN_SRC sh :results verbatim :exports none
ltl2tgba -D -x sat-minimize "GF(a <-> XXb)" | sed 's/\\/\\\\/'
#+END_SRC
#+RESULTS: gfaexxb3
#+begin_example
digraph G {
rankdir=LR
I [label="", style=invis, width=0]
I -> 0
0 [label="0"]
0 -> 1 [label="!b\\n{0}"]
0 -> 1 [label="a & b"]
0 -> 2 [label="!a & b"]
1 [label="1"]
1 -> 1 [label="a & b\\n{0}"]
1 -> 1 [label="a & !b"]
1 -> 2 [label="!a & !b"]
1 -> 3 [label="!a & b\\n{0}"]
2 [label="2"]
2 -> 0 [label="a & !b"]
2 -> 1 [label="b\\n{0}"]
2 -> 3 [label="!a & !b"]
3 [label="3"]
3 -> 0 [label="a & b"]
3 -> 0 [label="a & !b\\n{0}"]
3 -> 3 [label="!a & b"]
3 -> 3 [label="!a & !b\\n{0}"]
3 -> 2 [label=<!a &amp; b<br/><font color="#5DA5DA">⓿</font>>]
3 -> 2 [label=<!a &amp; !b>]
3 -> 3 [label=<a &amp; b<br/><font color="#5DA5DA">⓿</font>>]
3 -> 3 [label=<a &amp; !b>]
}
#+end_example
@ -168,82 +144,45 @@ acceptance. If we want a traditional Büchi automaton, with
state-based acceptance, we only need to add the =-B= option. The
result will of course be slightly bigger.
#+NAME: gfaexxb4
#+BEGIN_SRC sh :results verbatim :exports code
ltl2tgba -BD -x sat-minimize "GF(a <-> XXb)"
#+END_SRC
#+RESULTS:
#+begin_example
digraph G {
rankdir=LR
I [label="", style=invis, width=0]
I -> 0
0 [label="0"]
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\n{0}"]
1 -> 2 [label="a & !b\n{0}"]
1 -> 3 [label="a & b\n{0}"]
1 -> 4 [label="!a & !b\n{0}"]
2 [label="2"]
2 -> 4 [label="!a\n{0}"]
2 -> 5 [label="a\n{0}"]
3 [label="3"]
3 -> 1 [label="!a & !b"]
3 -> 2 [label="a & !b"]
3 -> 4 [label="!a & b"]
3 -> 5 [label="a & b"]
4 [label="4"]
4 -> 0 [label="!a & !b"]
4 -> 1 [label="!a & b"]
4 -> 2 [label="a & b"]
4 -> 3 [label="a & !b"]
5 [label="5"]
5 -> 1 [label="b"]
5 -> 4 [label="!a & !b"]
5 -> 5 [label="a & !b"]
}
#+end_example
#+NAME: gfaexxb4
#+BEGIN_SRC sh :results verbatim :exports none
ltl2tgba -BD -x sat-minimize "GF(a <-> XXb)" | sed 's/\\/\\\\/'
#+END_SRC
#+RESULTS: gfaexxb4
#+begin_example
digraph G {
rankdir=LR
fontname="Lato"
node [fontname="Lato"]
edge [fontname="Lato"]
node[style=filled, fillcolor="#ffffa0"]
I [label="", style=invis, width=0]
I -> 0
0 [label="0"]
0 -> 0 [label="!a & b"]
0 -> 1 [label="!a & !b"]
0 -> 2 [label="a & !b"]
0 -> 3 [label="a & b"]
0 -> 0 [label=<!a &amp; b>]
0 -> 1 [label=<!b>]
0 -> 2 [label=<a &amp; b>]
1 [label="1"]
1 -> 0 [label="!a & b\\n{0}"]
1 -> 2 [label="a & !b\\n{0}"]
1 -> 3 [label="a & b\\n{0}"]
1 -> 4 [label="!a & !b\\n{0}"]
1 -> 4 [label=<!a<br/><font color="#5DA5DA">⓿</font>>]
1 -> 5 [label=<a<br/><font color="#5DA5DA">⓿</font>>]
2 [label="2"]
2 -> 4 [label="!a\\n{0}"]
2 -> 5 [label="a\\n{0}"]
2 -> 1 [label=<!b>]
2 -> 4 [label=<!a &amp; b>]
2 -> 5 [label=<a &amp; b>]
3 [label="3"]
3 -> 1 [label="!a & !b"]
3 -> 2 [label="a & !b"]
3 -> 4 [label="!a & b"]
3 -> 5 [label="a & b"]
3 -> 0 [label=<!a<br/><font color="#5DA5DA">⓿</font>>]
3 -> 1 [label=<a &amp; !b<br/><font color="#5DA5DA">⓿</font>>]
3 -> 2 [label=<a &amp; b<br/><font color="#5DA5DA">⓿</font>>]
4 [label="4"]
4 -> 0 [label="!a & !b"]
4 -> 1 [label="!a & b"]
4 -> 2 [label="a & b"]
4 -> 3 [label="a & !b"]
4 -> 0 [label=<!a &amp; !b>]
4 -> 1 [label=<a &amp; b>]
4 -> 2 [label=<a &amp; !b>]
4 -> 3 [label=<!a &amp; b>]
5 [label="5"]
5 -> 1 [label="b"]
5 -> 4 [label="!a & !b"]
5 -> 5 [label="a & !b"]
5 -> 1 [label=<a &amp; b>]
5 -> 3 [label=<!a &amp; b>]
5 -> 4 [label=<!a &amp; !b>]
5 -> 5 [label=<a &amp; !b>]
}
#+end_example