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:
parent
7caf2b83d6
commit
838bfb2ae3
21 changed files with 1500 additions and 1193 deletions
|
|
@ -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 & !b<br/><font color="#5DA5DA">⓿</font>>]
|
||||
0 -> 2 [label=<!a & b>]
|
||||
0 -> 3 [label=<a & b>]
|
||||
0 -> 3 [label=<a & !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 & b>]
|
||||
1 -> 0 [label=<a & !b<br/><font color="#5DA5DA">⓿</font>>]
|
||||
1 -> 1 [label=<!a & b>]
|
||||
1 -> 1 [label=<!a & !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 & !b>]
|
||||
2 -> 1 [label=<!a & b<br/><font color="#5DA5DA">⓿</font>>]
|
||||
2 -> 1 [label=<!a & !b>]
|
||||
2 -> 3 [label=<a & 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 & b<br/><font color="#5DA5DA">⓿</font>>]
|
||||
3 -> 2 [label=<!a & !b>]
|
||||
3 -> 3 [label=<a & b<br/><font color="#5DA5DA">⓿</font>>]
|
||||
3 -> 3 [label=<a & !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 & b>]
|
||||
0 -> 1 [label=<!b>]
|
||||
0 -> 2 [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}"]
|
||||
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 & b>]
|
||||
2 -> 5 [label=<a & 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 & !b<br/><font color="#5DA5DA">⓿</font>>]
|
||||
3 -> 2 [label=<a & 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 & !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"]
|
||||
5 -> 1 [label=<a & b>]
|
||||
5 -> 3 [label=<!a & b>]
|
||||
5 -> 4 [label=<!a & !b>]
|
||||
5 -> 5 [label=<a & !b>]
|
||||
}
|
||||
#+end_example
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue