spot/tests/python/highlighting.ipynb
Alexandre Duret-Lutz 71fef458e1 python: define our own SVG DisplayObject
This is to workaround differences in minidom's pretty-printing that
occurred between Python 3.7 and 3.8.

* python/spot/jupyter.py (SVG): New class.
* python/spot/__init__.py: Use it.
* tests/python/_altscc.ipynb, tests/python/alternation.ipynb,
tests/python/automata.ipynb, tests/python/formulas.ipynb,
tests/python/gen.ipynb, tests/python/highlighting.ipynb,
tests/python/ltsmin-dve.ipynb, tests/python/ltsmin-pml.ipynb,
tests/python/product.ipynb, tests/python/randaut.ipynb,
tests/python/testingaut.ipynb, tests/python/twagraph-internals.ipynb,
tests/python/word.ipynb: Adjust.
2019-12-08 13:29:26 +01:00

3611 lines
236 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import spot\n",
"spot.setup()\n",
"from IPython.display import display"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook shows you different ways in which states or transitions can be highlighted in Spot. \n",
"\n",
"It should be noted that highlighting works using some special [named properties](https://spot.lrde.epita.fr/concepts.html#named-properties): basically, two maps that are attached to the automaton, and associated state or edge numbers to color numbers. This named properties are fragile: they will be lost if the automaton is transformed into a new automaton, and they can become meaningless of the automaton is modified in place (e.g., if the transitions or states are reordered).\n",
"\n",
"Nonetheless, highlighting is OK to use right before displaying or printing the automaton. The `dot` and `hoa` printer both know how to represent highlighted states and transitions.\n",
"\n",
"# Manual highlighting"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"a = spot.translate('a U b U c')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `#` option of `print_dot()` can be used to display the internal number of each transition "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"307pt\" height=\"165pt\"\n",
" viewBox=\"0.00 0.00 307.00 164.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 160.8)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-160.8 303,-160.8 303,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"126.5\" y=\"-126.6\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 2 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- I&#45;&gt;2 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-62C2.79,-62 17.15,-62 30.63,-62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-62 30.94,-65.15 34.44,-62 30.94,-62 30.94,-62 30.94,-62 34.44,-62 30.94,-58.85 37.94,-62 37.94,-62\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-79.04C48.32,-88.86 50.45,-98 56,-98 60.17,-98 62.4,-92.86 62.71,-86.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-79.04 65.85,-85.88 62.54,-82.53 62.71,-86.03 62.71,-86.03 62.71,-86.03 62.54,-82.53 59.56,-86.18 62.38,-79.04 62.38,-79.04\"/>\n",
"<text text-anchor=\"start\" x=\"38\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !c</text>\n",
"<text text-anchor=\"middle\" x=\"41.12\" y=\"-82.84\" font-family=\"Lato\" font-size=\"14.00\">#6</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"277\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"277\" cy=\"-62\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"277\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.77,-66.21C102.23,-72.79 161.79,-84.18 212,-78 224.33,-76.48 237.7,-73.38 249.02,-70.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"255.78,-68.41 249.89,-73.33 252.41,-69.35 249.04,-70.3 249.04,-70.3 249.04,-70.3 252.41,-69.35 248.18,-67.27 255.78,-68.41 255.78,-68.41\"/>\n",
"<text text-anchor=\"start\" x=\"190.5\" y=\"-82.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"<text text-anchor=\"middle\" x=\"82.27\" y=\"-55.01\" font-family=\"Lato\" font-size=\"14.00\">#4</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"194\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"189.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.4,-56.69C97.4,-48.93 142.19,-34.44 169.63,-25.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"176.54,-23.33 170.85,-28.48 173.21,-24.4 169.88,-25.48 169.88,-25.48 169.88,-25.48 173.21,-24.4 168.91,-22.48 176.54,-23.33 176.54,-23.33\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-53.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b &amp; !c</text>\n",
"<text text-anchor=\"middle\" x=\"81.9\" y=\"-45.49\" font-family=\"Lato\" font-size=\"14.00\">#5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M269.32,-82.99C268.37,-93.09 270.93,-102 277,-102 281.55,-102 284.13,-96.99 284.74,-90.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"284.68,-82.99 287.88,-89.97 284.71,-86.49 284.73,-89.99 284.73,-89.99 284.73,-89.99 284.71,-86.49 281.58,-90.01 284.68,-82.99 284.68,-82.99\"/>\n",
"<text text-anchor=\"start\" x=\"272.5\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"middle\" x=\"260.82\" y=\"-86.79\" font-family=\"Lato\" font-size=\"14.00\">#1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M210.24,-26.28C221.74,-32.52 237.76,-41.23 251.11,-48.48\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"257.42,-51.91 249.77,-51.33 254.34,-50.24 251.27,-48.57 251.27,-48.57 251.27,-48.57 254.34,-50.24 252.77,-45.8 257.42,-51.91 257.42,-51.91\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-43.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"<text text-anchor=\"middle\" x=\"218.74\" y=\"-30.08\" font-family=\"Lato\" font-size=\"14.00\">#2</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M187.27,-35.04C185.89,-44.86 188.14,-54 194,-54 198.4,-54 200.76,-48.86 201.09,-42.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"200.73,-35.04 204.23,-41.87 200.91,-38.53 201.08,-42.03 201.08,-42.03 201.08,-42.03 200.91,-38.53 197.93,-42.18 200.73,-35.04 200.73,-35.04\"/>\n",
"<text text-anchor=\"start\" x=\"175.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">b &amp; !c</text>\n",
"<text text-anchor=\"middle\" x=\"178.77\" y=\"-38.84\" font-family=\"Lato\" font-size=\"14.00\">#3</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.show('.#')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using these numbers you can selectively hightlight some transitions. The second argument is a color number (from a list of predefined colors)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"307pt\" height=\"165pt\"\n",
" viewBox=\"0.00 0.00 307.00 164.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 160.8)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-160.8 303,-160.8 303,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"126.5\" y=\"-126.6\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 2 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- I&#45;&gt;2 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-62C2.79,-62 17.15,-62 30.63,-62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-62 30.94,-65.15 34.44,-62 30.94,-62 30.94,-62 30.94,-62 34.44,-62 30.94,-58.85 37.94,-62 37.94,-62\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-79.04C48.32,-88.86 50.45,-98 56,-98 60.17,-98 62.4,-92.86 62.71,-86.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-79.04 65.85,-85.88 62.54,-82.53 62.71,-86.03 62.71,-86.03 62.71,-86.03 62.54,-82.53 59.56,-86.18 62.38,-79.04 62.38,-79.04\"/>\n",
"<text text-anchor=\"start\" x=\"38\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !c</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"277\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"277\" cy=\"-62\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"277\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M73.77,-66.21C102.23,-72.79 161.79,-84.18 212,-78 224.33,-76.48 237.7,-73.38 249.02,-70.3\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"255.78,-68.41 249.89,-73.33 252.54,-69.83 249.17,-70.78 249.04,-70.3 248.9,-69.82 252.27,-68.87 248.18,-67.27 255.78,-68.41 255.78,-68.41\"/>\n",
"<text text-anchor=\"start\" x=\"190.5\" y=\"-82.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"194\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"189.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M73.4,-56.69C97.4,-48.93 142.19,-34.44 169.63,-25.56\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"176.54,-23.33 170.85,-28.48 173.36,-24.88 170.03,-25.96 169.88,-25.48 169.72,-25.01 173.05,-23.93 168.91,-22.48 176.54,-23.33 176.54,-23.33\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-53.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b &amp; !c</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M269.32,-82.99C268.37,-93.09 270.93,-102 277,-102 281.55,-102 284.13,-96.99 284.74,-90.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"284.68,-82.99 287.88,-89.97 284.71,-86.49 284.73,-89.99 284.73,-89.99 284.73,-89.99 284.71,-86.49 281.58,-90.01 284.68,-82.99 284.68,-82.99\"/>\n",
"<text text-anchor=\"start\" x=\"272.5\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M210.24,-26.28C221.74,-32.52 237.76,-41.23 251.11,-48.48\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"257.42,-51.91 249.77,-51.33 254.11,-50.68 251.03,-49.01 251.27,-48.57 251.51,-48.13 254.58,-49.8 252.77,-45.8 257.42,-51.91 257.42,-51.91\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-43.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M187.27,-35.04C185.89,-44.86 188.14,-54 194,-54 198.4,-54 200.76,-48.86 201.09,-42.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"200.73,-35.04 204.23,-41.87 200.91,-38.53 201.08,-42.03 201.08,-42.03 201.08,-42.03 200.91,-38.53 197.93,-42.18 200.73,-35.04 200.73,-35.04\"/>\n",
"<text text-anchor=\"start\" x=\"175.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">b &amp; !c</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299f824b0> >"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.highlight_edges([2, 4, 5], 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that these `highlight_` functions work for edges and states, and come with both singular (changing the color of single state or edge) and plural versions.\n",
"\n",
"They modify the automaton in place."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"307pt\" height=\"165pt\"\n",
" viewBox=\"0.00 0.00 307.00 164.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 160.8)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-160.8 303,-160.8 303,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"126.5\" y=\"-126.6\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 2 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- I&#45;&gt;2 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-62C2.79,-62 17.15,-62 30.63,-62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-62 30.94,-65.15 34.44,-62 30.94,-62 30.94,-62 30.94,-62 34.44,-62 30.94,-58.85 37.94,-62 37.94,-62\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#ff7f00\" stroke-width=\"2\" d=\"M49.62,-79.04C48.32,-88.86 50.45,-98 56,-98 60.17,-98 62.4,-92.86 62.71,-86.14\"/>\n",
"<polygon fill=\"#ff7f00\" stroke=\"#ff7f00\" stroke-width=\"2\" points=\"62.38,-79.04 65.85,-85.88 63.04,-82.51 63.21,-86.01 62.71,-86.03 62.21,-86.05 62.04,-82.56 59.56,-86.18 62.38,-79.04 62.38,-79.04\"/>\n",
"<text text-anchor=\"start\" x=\"38\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !c</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#1f78b4\" stroke-width=\"2\" cx=\"277\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"#1f78b4\" stroke-width=\"2\" cx=\"277\" cy=\"-62\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"277\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M73.77,-66.21C102.23,-72.79 161.79,-84.18 212,-78 224.33,-76.48 237.7,-73.38 249.02,-70.3\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"255.78,-68.41 249.89,-73.33 252.54,-69.83 249.17,-70.78 249.04,-70.3 248.9,-69.82 252.27,-68.87 248.18,-67.27 255.78,-68.41 255.78,-68.41\"/>\n",
"<text text-anchor=\"start\" x=\"190.5\" y=\"-82.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#1f78b4\" stroke-width=\"2\" cx=\"194\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"189.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M73.4,-56.69C97.4,-48.93 142.19,-34.44 169.63,-25.56\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"176.54,-23.33 170.85,-28.48 173.36,-24.88 170.03,-25.96 169.88,-25.48 169.72,-25.01 173.05,-23.93 168.91,-22.48 176.54,-23.33 176.54,-23.33\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-53.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b &amp; !c</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M269.32,-82.99C268.37,-93.09 270.93,-102 277,-102 281.55,-102 284.13,-96.99 284.74,-90.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"284.68,-82.99 287.88,-89.97 284.71,-86.49 284.73,-89.99 284.73,-89.99 284.73,-89.99 284.71,-86.49 281.58,-90.01 284.68,-82.99 284.68,-82.99\"/>\n",
"<text text-anchor=\"start\" x=\"272.5\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M210.24,-26.28C221.74,-32.52 237.76,-41.23 251.11,-48.48\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"257.42,-51.91 249.77,-51.33 254.11,-50.68 251.03,-49.01 251.27,-48.57 251.51,-48.13 254.58,-49.8 252.77,-45.8 257.42,-51.91 257.42,-51.91\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-43.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M187.27,-35.04C185.89,-44.86 188.14,-54 194,-54 198.4,-54 200.76,-48.86 201.09,-42.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"200.73,-35.04 204.23,-41.87 200.91,-38.53 201.08,-42.03 201.08,-42.03 201.08,-42.03 200.91,-38.53 197.93,-42.18 200.73,-35.04 200.73,-35.04\"/>\n",
"<text text-anchor=\"start\" x=\"175.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">b &amp; !c</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa; proxy of <Swig Object of type 'std::shared_ptr< spot::twa > *' at 0x7f5299f82f90> >"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.highlight_edge(6, 2).highlight_states((0, 1), 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The plural version can take a list or tuple of state numbers (as above) or of Booleans (as below). In the latter case the indices of the True values give the states to highlight."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"307pt\" height=\"165pt\"\n",
" viewBox=\"0.00 0.00 307.00 164.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 160.8)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-160.8 303,-160.8 303,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"126.5\" y=\"-126.6\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 2 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"56\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- I&#45;&gt;2 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-62C2.79,-62 17.15,-62 30.63,-62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-62 30.94,-65.15 34.44,-62 30.94,-62 30.94,-62 30.94,-62 34.44,-62 30.94,-58.85 37.94,-62 37.94,-62\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#ff7f00\" stroke-width=\"2\" d=\"M49.62,-79.04C48.32,-88.86 50.45,-98 56,-98 60.17,-98 62.4,-92.86 62.71,-86.14\"/>\n",
"<polygon fill=\"#ff7f00\" stroke=\"#ff7f00\" stroke-width=\"2\" points=\"62.38,-79.04 65.85,-85.88 63.04,-82.51 63.21,-86.01 62.71,-86.03 62.21,-86.05 62.04,-82.56 59.56,-86.18 62.38,-79.04 62.38,-79.04\"/>\n",
"<text text-anchor=\"start\" x=\"38\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !c</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#1f78b4\" stroke-width=\"2\" cx=\"277\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"#1f78b4\" stroke-width=\"2\" cx=\"277\" cy=\"-62\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"277\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M73.77,-66.21C102.23,-72.79 161.79,-84.18 212,-78 224.33,-76.48 237.7,-73.38 249.02,-70.3\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"255.78,-68.41 249.89,-73.33 252.54,-69.83 249.17,-70.78 249.04,-70.3 248.9,-69.82 252.27,-68.87 248.18,-67.27 255.78,-68.41 255.78,-68.41\"/>\n",
"<text text-anchor=\"start\" x=\"190.5\" y=\"-82.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"194\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"189.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M73.4,-56.69C97.4,-48.93 142.19,-34.44 169.63,-25.56\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"176.54,-23.33 170.85,-28.48 173.36,-24.88 170.03,-25.96 169.88,-25.48 169.72,-25.01 173.05,-23.93 168.91,-22.48 176.54,-23.33 176.54,-23.33\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-53.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b &amp; !c</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M269.32,-82.99C268.37,-93.09 270.93,-102 277,-102 281.55,-102 284.13,-96.99 284.74,-90.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"284.68,-82.99 287.88,-89.97 284.71,-86.49 284.73,-89.99 284.73,-89.99 284.73,-89.99 284.71,-86.49 281.58,-90.01 284.68,-82.99 284.68,-82.99\"/>\n",
"<text text-anchor=\"start\" x=\"272.5\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#ff4da0\" stroke-width=\"2\" d=\"M210.24,-26.28C221.74,-32.52 237.76,-41.23 251.11,-48.48\"/>\n",
"<polygon fill=\"#ff4da0\" stroke=\"#ff4da0\" stroke-width=\"2\" points=\"257.42,-51.91 249.77,-51.33 254.11,-50.68 251.03,-49.01 251.27,-48.57 251.51,-48.13 254.58,-49.8 252.77,-45.8 257.42,-51.91 257.42,-51.91\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-43.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M187.27,-35.04C185.89,-44.86 188.14,-54 194,-54 198.4,-54 200.76,-48.86 201.09,-42.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"200.73,-35.04 204.23,-41.87 200.91,-38.53 201.08,-42.03 201.08,-42.03 201.08,-42.03 200.91,-38.53 197.93,-42.18 200.73,-35.04 200.73,-35.04\"/>\n",
"<text text-anchor=\"start\" x=\"175.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">b &amp; !c</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299f824b0> >"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.highlight_states([False, True, True], 5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Saving to HOA 1.1\n",
"\n",
"When saving to HOA format, the highlighting is only output if version 1.1 of the format is selected, because the headers `spot.highlight.edges` and `spot.highlight.states` contain dots, which are disallowed in version 1. Compare these two outputs:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"HOA: v1\n",
"States: 3\n",
"Start: 2\n",
"AP: 3 \"a\" \"b\" \"c\"\n",
"acc-name: Buchi\n",
"Acceptance: 1 Inf(0)\n",
"properties: trans-labels explicit-labels state-acc deterministic\n",
"properties: stutter-invariant terminal\n",
"--BODY--\n",
"State: 0 {0}\n",
"[t] 0\n",
"State: 1\n",
"[2] 0\n",
"[1&!2] 1\n",
"State: 2\n",
"[2] 0\n",
"[!0&1&!2] 1\n",
"[0&!2] 2\n",
"--END--\n",
"\n",
"HOA: v1.1\n",
"States: 3\n",
"Start: 2\n",
"AP: 3 \"a\" \"b\" \"c\"\n",
"acc-name: Buchi\n",
"Acceptance: 1 Inf(0)\n",
"properties: trans-labels explicit-labels state-acc !complete\n",
"properties: deterministic stutter-invariant terminal\n",
"spot.highlight.states: 0 0 1 5 2 5\n",
"spot.highlight.edges: 2 1 4 1 5 1 6 2\n",
"--BODY--\n",
"State: 0 {0}\n",
"[t] 0\n",
"State: 1\n",
"[2] 0\n",
"[1&!2] 1\n",
"State: 2\n",
"[2] 0\n",
"[!0&1&!2] 1\n",
"[0&!2] 2\n",
"--END--\n"
]
}
],
"source": [
"print(a.to_str('HOA', '1'))\n",
"print()\n",
"print(a.to_str('HOA', '1.1'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Highlighting a run\n",
"\n",
"One use of this highlighting is to highlight a run in an automaton.\n",
"\n",
"The following few command generate an automaton, then an accepting run on this automaton, and highlight that accepting run on the automaton. Note that a run knows the automaton from which it was generated, so calling `highlight()` will directly decorate that automaton."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"386pt\" height=\"276pt\"\n",
" viewBox=\"0.00 0.00 386.00 276.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 272)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-272 382,-272 382,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"168\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"190\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"206\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"166\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 4 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- I&#45;&gt;4 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-105C2.79,-105 17.15,-105 30.63,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-105 30.94,-108.15 34.44,-105 30.94,-105 30.94,-105 30.94,-105 34.44,-105 30.94,-101.85 37.94,-105 37.94,-105\"/>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"137\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"137\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.14,-105C85.12,-105 99.52,-105 111.67,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"118.89,-105 111.89,-108.15 115.39,-105 111.89,-105 111.89,-105 111.89,-105 115.39,-105 111.89,-101.85 118.89,-105 118.89,-105\"/>\n",
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M129.97,-121.66C128.41,-131.62 130.75,-141 137,-141 141.69,-141 144.18,-135.73 144.47,-128.89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"144.03,-121.66 147.6,-128.46 144.24,-125.16 144.46,-128.65 144.46,-128.65 144.46,-128.65 144.24,-125.16 141.31,-128.84 144.03,-121.66 144.03,-121.66\"/>\n",
"<text text-anchor=\"start\" x=\"123.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"360\" cy=\"-129\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"360\" y=\"-125.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M145.49,-120.89C158.32,-145.98 187.11,-193.85 228,-213 273.19,-234.16 321.36,-181.07 344.69,-149.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"349.01,-143.93 347.43,-151.44 346.95,-146.75 344.88,-149.58 344.88,-149.58 344.88,-149.58 346.95,-146.75 342.34,-147.72 349.01,-143.93 349.01,-143.93\"/>\n",
"<text text-anchor=\"start\" x=\"228\" y=\"-220.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.11,-105C173.32,-105 202.31,-105 222.96,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"230.15,-105 223.15,-108.15 226.65,-105 223.15,-105 223.15,-105 223.15,-105 226.65,-105 223.15,-101.85 230.15,-105 230.15,-105\"/>\n",
"<text text-anchor=\"start\" x=\"174.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M151.87,-93.98C171.2,-78.62 206.34,-50.7 228.22,-33.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"233.74,-28.93 230.22,-35.75 231,-31.11 228.26,-33.28 228.26,-33.28 228.26,-33.28 231,-31.11 226.3,-30.82 233.74,-28.93 233.74,-28.93\"/>\n",
"<text text-anchor=\"start\" x=\"173\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M355.18,-146.41C354.28,-156.09 355.89,-165 360,-165 363.02,-165 364.69,-160.19 365.01,-153.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"364.82,-146.41 368.15,-153.33 364.91,-149.91 365,-153.41 365,-153.41 365,-153.41 364.91,-149.91 361.85,-153.49 364.82,-146.41 364.82,-146.41\"/>\n",
"<text text-anchor=\"start\" x=\"353.5\" y=\"-183.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"352\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.73,-145.6C347.24,-166.86 349.66,-195 360,-195 369.25,-195 372.16,-172.49 368.74,-152.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"367.27,-145.6 371.81,-151.79 368,-149.02 368.73,-152.44 368.73,-152.44 368.73,-152.44 368,-149.02 365.64,-153.1 367.27,-145.6 367.27,-145.6\"/>\n",
"<text text-anchor=\"start\" x=\"355.5\" y=\"-198.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M243.5,-122.41C242.57,-132.09 244.23,-141 248.5,-141 251.63,-141 253.36,-136.19 253.69,-129.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.5,-122.41 256.83,-129.33 253.59,-125.91 253.68,-129.41 253.68,-129.41 253.68,-129.41 253.59,-125.91 250.53,-129.49 253.5,-122.41 253.5,-122.41\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"240.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M240.96,-121.6C235.27,-142.86 237.78,-171 248.5,-171 258.09,-171 261.11,-148.49 257.56,-128.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"256.04,-121.6 260.62,-127.75 256.79,-125.01 257.55,-128.43 257.55,-128.43 257.55,-128.43 256.79,-125.01 254.47,-129.11 256.04,-121.6 256.04,-121.6\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M262.06,-30.73C281.62,-50.56 319.39,-88.85 341.57,-111.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"346.59,-116.42 339.43,-113.64 344.13,-113.92 341.67,-111.43 341.67,-111.43 341.67,-111.43 344.13,-113.92 343.91,-109.22 346.59,-116.42 346.59,-116.42\"/>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-96.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M238.93,-33.54C236.23,-43.91 239.42,-54 248.5,-54 255.45,-54 258.95,-48.08 259,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"258.07,-33.54 262.1,-40.08 258.53,-37.01 258.98,-40.48 258.98,-40.48 258.98,-40.48 258.53,-37.01 255.85,-40.89 258.07,-33.54 258.07,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f529a7caa50> >"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = spot.translate('X (F(Ga <-> b) & GF!b)'); b"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Prefix:\n",
" 4\n",
" | 1\n",
" 0\n",
" | !a & !b\n",
"Cycle:\n",
" 1\n",
" | !b\t{0}\n",
"\n"
]
}
],
"source": [
"r = b.accepting_run(); print(r)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"r.highlight(5) # the parameter is a color number"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The call of `highlight(5)` on the accepting run `r` modified the original automaton `b`:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"386pt\" height=\"276pt\"\n",
" viewBox=\"0.00 0.00 386.00 276.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 272)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-272 382,-272 382,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"168\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"190\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"206\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"166\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 4 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- I&#45;&gt;4 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-105C2.79,-105 17.15,-105 30.63,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-105 30.94,-108.15 34.44,-105 30.94,-105 30.94,-105 30.94,-105 34.44,-105 30.94,-101.85 37.94,-105 37.94,-105\"/>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"137\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"137\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M74.14,-105C85.12,-105 99.52,-105 111.67,-105\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"118.89,-105 111.89,-108.15 115.39,-105.5 111.89,-105.5 111.89,-105 111.89,-104.5 115.39,-104.5 111.89,-101.85 118.89,-105 118.89,-105\"/>\n",
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M129.97,-121.66C128.41,-131.62 130.75,-141 137,-141 141.69,-141 144.18,-135.73 144.47,-128.89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"144.03,-121.66 147.6,-128.46 144.24,-125.16 144.46,-128.65 144.46,-128.65 144.46,-128.65 144.24,-125.16 141.31,-128.84 144.03,-121.66 144.03,-121.66\"/>\n",
"<text text-anchor=\"start\" x=\"123.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"360\" cy=\"-129\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"360\" y=\"-125.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M145.49,-120.89C158.32,-145.98 187.11,-193.85 228,-213 273.19,-234.16 321.36,-181.07 344.69,-149.85\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"349.01,-143.93 347.43,-151.44 347.35,-147.05 345.29,-149.87 344.88,-149.58 344.48,-149.28 346.55,-146.46 342.34,-147.72 349.01,-143.93 349.01,-143.93\"/>\n",
"<text text-anchor=\"start\" x=\"228\" y=\"-220.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.11,-105C173.32,-105 202.31,-105 222.96,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"230.15,-105 223.15,-108.15 226.65,-105 223.15,-105 223.15,-105 223.15,-105 226.65,-105 223.15,-101.85 230.15,-105 230.15,-105\"/>\n",
"<text text-anchor=\"start\" x=\"174.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M151.87,-93.98C171.2,-78.62 206.34,-50.7 228.22,-33.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"233.74,-28.93 230.22,-35.75 231,-31.11 228.26,-33.28 228.26,-33.28 228.26,-33.28 231,-31.11 226.3,-30.82 233.74,-28.93 233.74,-28.93\"/>\n",
"<text text-anchor=\"start\" x=\"173\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M355.18,-146.41C354.28,-156.09 355.89,-165 360,-165 363.02,-165 364.69,-160.19 365.01,-153.81\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"364.82,-146.41 368.15,-153.33 365.41,-149.9 365.5,-153.4 365,-153.41 364.5,-153.42 364.41,-149.92 361.85,-153.49 364.82,-146.41 364.82,-146.41\"/>\n",
"<text text-anchor=\"start\" x=\"353.5\" y=\"-183.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"352\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.73,-145.6C347.24,-166.86 349.66,-195 360,-195 369.25,-195 372.16,-172.49 368.74,-152.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"367.27,-145.6 371.81,-151.79 368,-149.02 368.73,-152.44 368.73,-152.44 368.73,-152.44 368,-149.02 365.64,-153.1 367.27,-145.6 367.27,-145.6\"/>\n",
"<text text-anchor=\"start\" x=\"355.5\" y=\"-198.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M243.5,-122.41C242.57,-132.09 244.23,-141 248.5,-141 251.63,-141 253.36,-136.19 253.69,-129.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.5,-122.41 256.83,-129.33 253.59,-125.91 253.68,-129.41 253.68,-129.41 253.68,-129.41 253.59,-125.91 250.53,-129.49 253.5,-122.41 253.5,-122.41\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"240.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M240.96,-121.6C235.27,-142.86 237.78,-171 248.5,-171 258.09,-171 261.11,-148.49 257.56,-128.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"256.04,-121.6 260.62,-127.75 256.79,-125.01 257.55,-128.43 257.55,-128.43 257.55,-128.43 256.79,-125.01 254.47,-129.11 256.04,-121.6 256.04,-121.6\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M262.06,-30.73C281.62,-50.56 319.39,-88.85 341.57,-111.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"346.59,-116.42 339.43,-113.64 344.13,-113.92 341.67,-111.43 341.67,-111.43 341.67,-111.43 344.13,-113.92 343.91,-109.22 346.59,-116.42 346.59,-116.42\"/>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-96.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M238.93,-33.54C236.23,-43.91 239.42,-54 248.5,-54 255.45,-54 258.95,-48.08 259,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"258.07,-33.54 262.1,-40.08 258.53,-37.01 258.98,-40.48 258.98,-40.48 258.98,-40.48 258.53,-37.01 255.85,-40.89 258.07,-33.54 258.07,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f529a7caa50> >"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Highlighting an accepting run in an automaton with arbitrary acceptance\n",
"\n",
"This is not as easy as finding accepting runs in (generalized) Büchi automata, so let's have a few example for testing."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"639pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 638.68 360.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.641025641025641 0.641025641025641) rotate(0) translate(4 556)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-556 989.5,-556 989.5,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"348.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\">(Inf(</text>\n",
"<text text-anchor=\"start\" x=\"373.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"389.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"432.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"448.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; Inf(</text>\n",
"<text text-anchor=\"start\" x=\"491.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"<text text-anchor=\"start\" x=\"507.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\">)) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"550.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"566.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\">)) &amp; Fin(</text>\n",
"<text text-anchor=\"start\" x=\"616.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"632.75\" y=\"-537.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-192\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-188.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-192C2.79,-192 17.15,-192 30.63,-192\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-192 30.94,-195.15 34.44,-192 30.94,-192 30.94,-192 30.94,-192 34.44,-192 30.94,-188.85 37.94,-192 37.94,-192\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-209.04C48.32,-218.86 50.45,-228 56,-228 60.17,-228 62.4,-222.86 62.71,-216.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-209.04 65.85,-215.88 62.54,-212.53 62.71,-216.03 62.71,-216.03 62.71,-216.03 62.54,-212.53 59.56,-216.18 62.38,-209.04 62.38,-209.04\"/>\n",
"<text text-anchor=\"start\" x=\"35.5\" y=\"-246.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"48\" y=\"-231.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"164.5\" cy=\"-368\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"164.5\" y=\"-364.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;9 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M66.08,-207.01C85.02,-238.31 128.8,-310.65 150.63,-346.73\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"154.44,-353.03 148.12,-348.67 152.2,-350.3 150.39,-347.3 150.82,-347.04 151.25,-346.78 153.06,-349.78 153.51,-345.41 154.44,-353.03 154.44,-353.03\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-318.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"101\" y=\"-303.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"276\" cy=\"-192\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"276\" y=\"-188.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.52,-187.53C90.91,-183.08 119.14,-176.54 144,-174 181.78,-170.13 225.44,-178.78 251.61,-185.38\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"258.5,-187.18 250.93,-188.46 255.11,-186.3 251.73,-185.42 251.73,-185.42 251.73,-185.42 255.11,-186.3 252.52,-182.37 258.5,-187.18 258.5,-187.18\"/>\n",
"<text text-anchor=\"start\" x=\"146\" y=\"-191.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"148.5\" y=\"-177.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"164.5\" y=\"-177.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;5 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>9&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M174.84,-352.99C194.31,-321.69 239.32,-249.35 261.77,-213.27\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"265.69,-206.97 264.66,-214.58 263.84,-209.94 261.99,-212.91 261.99,-212.91 261.99,-212.91 263.84,-209.94 259.32,-211.25 265.69,-206.97 265.69,-206.97\"/>\n",
"<text text-anchor=\"start\" x=\"203\" y=\"-309.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"746.5\" cy=\"-296\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"746.5\" y=\"-292.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;1 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>9&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M182.04,-363.3C203.35,-357.68 241.62,-349 275,-349 275,-349 275,-349 444.5,-349 549.44,-349 671.88,-317.37 722.16,-302.98\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"729.04,-300.99 723.19,-305.96 725.82,-302.44 722.45,-303.41 722.31,-302.93 722.18,-302.45 725.54,-301.48 721.44,-299.91 729.04,-300.99 729.04,-300.99\"/>\n",
"<text text-anchor=\"start\" x=\"425\" y=\"-352.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"858\" cy=\"-362\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"858\" y=\"-358.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;8 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>9&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M170.78,-385.13C182.9,-420.64 216.31,-499 275,-499 275,-499 275,-499 747.5,-499 804.69,-499 836.9,-425.26 850,-385.98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"852.23,-379.07 853.08,-386.7 851.16,-382.41 850.08,-385.74 850.08,-385.74 850.08,-385.74 851.16,-382.41 847.08,-384.77 852.23,-379.07 852.23,-379.07\"/>\n",
"<text text-anchor=\"start\" x=\"495\" y=\"-517.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"504\" y=\"-502.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;0 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>5&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M258.06,-194.74C233.1,-198.45 184.99,-204.35 144,-202 122.62,-200.78 98.42,-197.87 80.99,-195.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"73.95,-194.53 81.32,-192.37 77.42,-195.01 80.89,-195.49 80.89,-195.49 80.89,-195.49 77.42,-195.01 80.46,-198.61 73.95,-194.53 73.95,-194.53\"/>\n",
"<text text-anchor=\"start\" x=\"144\" y=\"-220.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"156.5\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"389\" cy=\"-192\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"389\" y=\"-188.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M294.34,-192C313,-192 342.8,-192 363.76,-192\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"370.78,-192 363.78,-195.15 367.28,-192 363.78,-192 363.78,-192 363.78,-192 367.28,-192 363.78,-188.85 370.78,-192 370.78,-192\"/>\n",
"<text text-anchor=\"start\" x=\"312\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"324.5\" y=\"-195.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;9 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M733.51,-309.28C730.91,-312.38 728.27,-315.73 726,-319 716.68,-332.4 719.82,-339.75 708,-351 682.09,-375.67 671.78,-387 636,-387 275,-387 275,-387 275,-387 245.01,-387 211.07,-380 189.04,-374.49\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"182.04,-372.7 189.6,-371.39 185.56,-373.08 188.95,-373.95 188.82,-374.44 188.7,-374.92 185.31,-374.05 188.04,-377.49 182.04,-372.7 182.04,-372.7\"/>\n",
"<text text-anchor=\"start\" x=\"425\" y=\"-405.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"435.5\" y=\"-390.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;8 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M764.43,-298.02C780.4,-300.57 804.44,-306.17 822,-318 830.64,-323.82 838.17,-332.45 844,-340.52\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"848.12,-346.53 841.56,-342.53 846.14,-343.64 844.16,-340.75 844.16,-340.75 844.16,-340.75 846.14,-343.64 846.76,-338.97 848.12,-346.53 848.12,-346.53\"/>\n",
"<text text-anchor=\"start\" x=\"786.5\" y=\"-336.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"795.5\" y=\"-321.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;9 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>8&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M845.78,-375.69C827.52,-396.32 789.19,-433 747.5,-433 275,-433 275,-433 275,-433 237.86,-433 202.31,-405.01 182.26,-385.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"177.26,-380.84 184.46,-383.51 179.76,-383.3 182.25,-385.76 182.25,-385.76 182.25,-385.76 179.76,-383.3 180.04,-388 177.26,-380.84 177.26,-380.84\"/>\n",
"<text text-anchor=\"start\" x=\"491.5\" y=\"-451.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"504\" y=\"-436.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"967\" cy=\"-284\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"967\" y=\"-280.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;7 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>8&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M872.99,-351.8C891.65,-338.2 924.81,-314.02 946.08,-298.52\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"952.01,-294.2 948.21,-300.87 949.18,-296.26 946.35,-298.32 946.35,-298.32 946.35,-298.32 949.18,-296.26 944.5,-295.78 952.01,-294.2 952.01,-294.2\"/>\n",
"<text text-anchor=\"start\" x=\"894\" y=\"-337.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"635\" cy=\"-238\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"635\" y=\"-234.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;8 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M647.32,-251.34C663.32,-269.52 694.16,-302.19 726,-323 749.84,-338.58 757.76,-339.68 785,-348 800.66,-352.78 818.75,-356.29 832.89,-358.6\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"839.88,-359.7 832.48,-361.73 836.42,-359.16 832.96,-358.61 832.96,-358.61 832.96,-358.61 836.42,-359.16 833.45,-355.5 839.88,-359.7 839.88,-359.7\"/>\n",
"<text text-anchor=\"start\" x=\"726\" y=\"-360.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"738.5\" y=\"-345.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M625.77,-253.54C623.17,-263.91 626.25,-274 635,-274 641.7,-274 645.08,-268.08 645.12,-260.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"644.23,-253.54 648.23,-260.1 644.67,-257.01 645.1,-260.49 645.1,-260.49 645.1,-260.49 644.67,-257.01 641.98,-260.88 644.23,-253.54 644.23,-253.54\"/>\n",
"<text text-anchor=\"start\" x=\"618\" y=\"-292.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"627\" y=\"-277.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;6 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M617.65,-243.5C599.8,-249.19 570.24,-257.7 544,-261 515.78,-264.55 508.09,-265.48 480,-261 454.6,-256.95 445.59,-258.42 425,-243 415.13,-235.61 407.07,-224.58 401.19,-214.67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"397.63,-208.37 403.81,-212.93 399.35,-211.42 401.07,-214.47 401.07,-214.47 401.07,-214.47 399.35,-211.42 398.33,-216.02 397.63,-208.37 397.63,-208.37\"/>\n",
"<text text-anchor=\"start\" x=\"493.5\" y=\"-281.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"496\" y=\"-267.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"512\" y=\"-267.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;7 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>2&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M653.28,-240.41C708.08,-248.05 878.1,-271.75 941.68,-280.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"948.89,-281.62 941.53,-283.77 945.43,-281.13 941.96,-280.65 941.96,-280.65 941.96,-280.65 945.43,-281.13 942.4,-277.53 948.89,-281.62 948.89,-281.62\"/>\n",
"<text text-anchor=\"start\" x=\"785\" y=\"-266.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;1 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>6&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M400,-177.41C414.87,-156.94 444.87,-120.19 480,-102 527.56,-77.38 551.6,-58.07 599,-83 676.46,-123.73 720.91,-225.99 737.7,-272.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"740.07,-279.11 734.76,-273.56 738.9,-275.81 737.73,-272.51 737.73,-272.51 737.73,-272.51 738.9,-275.81 740.7,-271.46 740.07,-279.11 740.07,-279.11\"/>\n",
"<text text-anchor=\"start\" x=\"562\" y=\"-86.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;2 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>6&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M405.37,-199.6C411.37,-202.3 418.38,-205.13 425,-207 459.42,-216.75 562.73,-229.64 609.96,-235.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"617.04,-236.06 609.72,-238.37 613.57,-235.65 610.09,-235.24 610.09,-235.24 610.09,-235.24 613.57,-235.65 610.46,-232.11 617.04,-236.06 617.04,-236.06\"/>\n",
"<text text-anchor=\"start\" x=\"495\" y=\"-243.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"480\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"496\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"512\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"528\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"512\" cy=\"-129\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"512\" y=\"-125.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;3 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>6&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M405.32,-184.02C426.6,-172.94 465.19,-152.85 489.38,-140.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"495.8,-136.91 491.05,-142.94 492.7,-138.53 489.59,-140.15 489.59,-140.15 489.59,-140.15 492.7,-138.53 488.14,-137.35 495.8,-136.91 495.8,-136.91\"/>\n",
"<text text-anchor=\"start\" x=\"426.5\" y=\"-191.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"435.5\" y=\"-176.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;1 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>7&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M948.93,-284.94C910.4,-287.05 816.54,-292.21 771.88,-294.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"764.65,-295.06 771.46,-291.53 768.14,-294.87 771.63,-294.67 771.63,-294.67 771.63,-294.67 768.14,-294.87 771.81,-297.82 764.65,-295.06 764.65,-295.06\"/>\n",
"<text text-anchor=\"start\" x=\"841\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;7 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>7&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M957.77,-299.54C955.17,-309.91 958.25,-320 967,-320 973.7,-320 977.08,-314.08 977.12,-306.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"976.23,-299.54 980.23,-306.1 976.67,-303.01 977.1,-306.49 977.1,-306.49 977.1,-306.49 976.67,-303.01 973.98,-306.88 976.23,-299.54 976.23,-299.54\"/>\n",
"<text text-anchor=\"start\" x=\"948.5\" y=\"-337.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"951\" y=\"-323.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"967\" y=\"-323.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M528.24,-136.94C546.47,-146.94 577.26,-165.44 599,-187 607.76,-195.69 615.7,-206.84 621.8,-216.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"625.53,-222.6 619.19,-218.27 623.7,-219.61 621.87,-216.63 621.87,-216.63 621.87,-216.63 623.7,-219.61 624.56,-214.98 625.53,-222.6 625.53,-222.6\"/>\n",
"<text text-anchor=\"start\" x=\"562\" y=\"-204.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"564.5\" y=\"-190.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"580.5\" y=\"-190.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M500.76,-143.42C496.83,-154.17 500.58,-165 512,-165 520.92,-165 525.16,-158.39 524.72,-150.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"523.24,-143.42 527.78,-149.61 523.97,-146.84 524.7,-150.26 524.7,-150.26 524.7,-150.26 523.97,-146.84 521.61,-150.92 523.24,-143.42 523.24,-143.42\"/>\n",
"<text text-anchor=\"start\" x=\"491.5\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"496\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"512\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"635\" cy=\"-37\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"635\" y=\"-33.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M529.99,-127.47C548.76,-124.99 578.97,-118.55 599,-102 611.87,-91.36 620.71,-74.72 626.28,-60.93\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"628.9,-54.03 629.36,-61.7 627.66,-57.31 626.42,-60.58 626.42,-60.58 626.42,-60.58 627.66,-57.31 623.47,-59.46 628.9,-54.03 628.9,-54.03\"/>\n",
"<text text-anchor=\"start\" x=\"562\" y=\"-139.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"572.5\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M618.79,-29.15C596.3,-18.29 552.54,0 513,0 163.5,0 163.5,0 163.5,0 88.11,0 65.64,-114.59 59.32,-166.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"58.5,-173.94 56.16,-166.63 58.9,-170.46 59.29,-166.98 59.29,-166.98 59.29,-166.98 58.9,-170.46 62.42,-167.34 58.5,-173.94 58.5,-173.94\"/>\n",
"<text text-anchor=\"start\" x=\"315.5\" y=\"-3.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;5 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>4&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M616.97,-37.96C580.3,-40.56 491.81,-49.73 425,-80 372.11,-103.96 320.36,-149.67 294.34,-174.65\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"289.19,-179.65 292.02,-172.52 291.7,-177.21 294.21,-174.78 294.21,-174.78 294.21,-174.78 291.7,-177.21 296.4,-177.04 289.19,-179.65 289.19,-179.65\"/>\n",
"<text text-anchor=\"start\" x=\"425\" y=\"-98.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"435.5\" y=\"-83.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;1 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>4&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M652.47,-32.02C668.66,-28.25 693.05,-25.7 708,-39 742.09,-69.31 745.72,-212.27 745.74,-270.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"745.73,-277.9 742.59,-270.89 745.73,-274.4 745.74,-270.9 745.74,-270.9 745.74,-270.9 745.73,-274.4 748.89,-270.91 745.73,-277.9 745.73,-277.9\"/>\n",
"<text text-anchor=\"start\" x=\"671\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"681.5\" y=\"-42.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299fa0bd0> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"734pt\" height=\"214pt\"\n",
" viewBox=\"0.00 0.00 734.00 213.97\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.6756756756756757 0.6756756756756757) rotate(0) translate(4 312)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-312 1080,-312 1080,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"361\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"386\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"<text text-anchor=\"start\" x=\"402\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; ((Fin(</text>\n",
"<text text-anchor=\"start\" x=\"456\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"472\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"519\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"535\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\">) | Inf(</text>\n",
"<text text-anchor=\"start\" x=\"572\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"<text text-anchor=\"start\" x=\"588\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\">))) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"639\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"655\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\">)|Fin(</text>\n",
"<text text-anchor=\"start\" x=\"687\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"703\" y=\"-293.8\" font-family=\"Lato\" font-size=\"14.00\">)))</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-175\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-171.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-175C2.79,-175 17.15,-175 30.63,-175\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-175 30.94,-178.15 34.44,-175 30.94,-175 30.94,-175 30.94,-175 34.44,-175 30.94,-171.85 37.94,-175 37.94,-175\"/>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"285.5\" cy=\"-104\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"285.5\" y=\"-100.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;8 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M70.29,-163.74C87,-150.3 117.11,-128.34 147,-118 185.09,-104.82 232.4,-102.91 260.43,-103.15\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"267.46,-103.26 260.41,-106.3 263.95,-103.71 260.45,-103.65 260.46,-103.15 260.47,-102.65 263.97,-102.71 260.51,-100 267.46,-103.26 267.46,-103.26\"/>\n",
"<text text-anchor=\"start\" x=\"148\" y=\"-136.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"157\" y=\"-121.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"165\" cy=\"-175\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-171.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;6 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.19,-175C91.9,-175 119.65,-175 139.62,-175\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.85,-175 139.85,-178.15 143.35,-175 139.85,-175 139.85,-175 139.85,-175 143.35,-175 139.85,-171.85 146.85,-175 146.85,-175\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-193.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"102.5\" y=\"-178.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"395.5\" cy=\"-67\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"395.5\" y=\"-63.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;3 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>8&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M302.9,-98.38C321.17,-92.12 350.82,-81.96 371.42,-74.91\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"378.3,-72.55 372.7,-77.8 375.15,-74.16 371.84,-75.29 371.67,-74.82 371.51,-74.35 374.82,-73.21 370.65,-71.84 378.3,-72.55 378.3,-72.55\"/>\n",
"<text text-anchor=\"start\" x=\"322\" y=\"-107.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"324.5\" y=\"-93.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"<text text-anchor=\"start\" x=\"340.5\" y=\"-93.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;8 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>6&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M176.8,-160.93C183.18,-153.35 191.8,-144.29 201,-138 211.16,-131.05 240.33,-119.81 261.34,-112.18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"268.11,-109.74 262.59,-115.07 264.81,-110.92 261.52,-112.11 261.52,-112.11 261.52,-112.11 264.81,-110.92 260.45,-109.15 268.11,-109.74 268.11,-109.74\"/>\n",
"<text text-anchor=\"start\" x=\"206.5\" y=\"-155.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"201\" y=\"-141.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"217\" y=\"-141.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"233\" y=\"-141.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"608\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"608\" y=\"-176.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;7 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>6&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M183.26,-176.18C206.32,-177.66 248.47,-180 284.5,-180 284.5,-180 284.5,-180 503,-180 530.3,-180 561.62,-180 582.7,-180\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"589.7,-180 582.7,-183.15 586.2,-180 582.7,-180 582.7,-180 582.7,-180 586.2,-180 582.7,-176.85 589.7,-180 589.7,-180\"/>\n",
"<text text-anchor=\"start\" x=\"377\" y=\"-198.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"387.5\" y=\"-183.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"827.5\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"827.5\" y=\"-176.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"948.5\" cy=\"-131\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"948.5\" y=\"-127.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;9 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M845.65,-178.83C863.14,-177.07 890.66,-172.71 912,-162 918.69,-158.64 925.13,-153.72 930.65,-148.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"935.84,-143.91 932.9,-151 933.29,-146.31 930.74,-148.71 930.74,-148.71 930.74,-148.71 933.29,-146.31 928.58,-146.41 935.84,-143.91 935.84,-143.91\"/>\n",
"<text text-anchor=\"start\" x=\"869.5\" y=\"-193.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"864\" y=\"-179.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"880\" y=\"-179.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"<text text-anchor=\"start\" x=\"896\" y=\"-179.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;1 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>9&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M931.05,-125.81C913.39,-121.25 885.04,-116.89 864,-128 852.39,-134.13 843.86,-145.95 838.08,-156.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"834.83,-163.32 835.12,-155.65 836.39,-160.19 837.94,-157.05 837.94,-157.05 837.94,-157.05 836.39,-160.19 840.76,-158.45 834.83,-163.32 834.83,-163.32\"/>\n",
"<text text-anchor=\"start\" x=\"871\" y=\"-146.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"880\" y=\"-131.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;3 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>9&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M936.18,-117.59C916.61,-96.02 874.17,-56 828.5,-56 501,-56 501,-56 501,-56 473.26,-56 441.6,-59.88 420.47,-63.03\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"413.46,-64.11 419.9,-59.93 416.92,-63.58 420.38,-63.05 420.38,-63.05 420.38,-63.05 416.92,-63.58 420.85,-66.16 413.46,-64.11 413.46,-64.11\"/>\n",
"<text text-anchor=\"start\" x=\"644\" y=\"-73.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"646.5\" y=\"-59.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"662.5\" y=\"-59.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1058\" cy=\"-203\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1058\" y=\"-199.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;5 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>9&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M964,-140.71C982.78,-153.29 1015.61,-175.28 1036.82,-189.48\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1042.73,-193.44 1035.16,-192.17 1039.82,-191.5 1036.92,-189.55 1036.92,-189.55 1036.92,-189.55 1039.82,-191.5 1038.67,-186.93 1042.73,-193.44 1042.73,-193.44\"/>\n",
"<text text-anchor=\"start\" x=\"985\" y=\"-195.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"995.5\" y=\"-180.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"717.5\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"717.5\" y=\"-176.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M735.85,-180C753.8,-180 781.98,-180 802.15,-180\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"809.19,-180 802.19,-183.15 805.69,-180 802.19,-180 802.19,-180 802.19,-180 805.69,-180 802.19,-176.85 809.19,-180 809.19,-180\"/>\n",
"<text text-anchor=\"start\" x=\"754\" y=\"-183.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M386.52,-82.92C384.18,-93.15 387.17,-103 395.5,-103 401.88,-103 405.13,-97.23 405.25,-89.93\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"404.48,-82.92 408.37,-89.53 405.36,-86.34 405.74,-89.82 405.24,-89.87 404.74,-89.93 404.36,-86.45 402.11,-90.22 404.48,-82.92 404.48,-82.92\"/>\n",
"<text text-anchor=\"start\" x=\"377\" y=\"-121.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"387.5\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"502\" cy=\"-123\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"502\" y=\"-119.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M411.92,-75.26C429.85,-84.87 459.55,-100.79 479.68,-111.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"485.86,-114.89 478.2,-114.36 482.77,-113.23 479.69,-111.58 479.69,-111.58 479.69,-111.58 482.77,-113.23 481.18,-108.8 485.86,-114.89 485.86,-114.89\"/>\n",
"<text text-anchor=\"start\" x=\"432\" y=\"-120.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"433\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"449\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M494.79,-139.97C481.86,-171.96 448.84,-238 396.5,-238 164,-238 164,-238 164,-238 129.5,-238 120.91,-227.82 92,-209 85.4,-204.7 78.97,-199.04 73.47,-193.57\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"68.3,-188.23 75.43,-191.07 70.73,-190.74 73.16,-193.26 73.16,-193.26 73.16,-193.26 70.73,-190.74 70.9,-195.45 68.3,-188.23 68.3,-188.23\"/>\n",
"<text text-anchor=\"start\" x=\"267\" y=\"-255.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"269.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"285.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;9 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M520.08,-121.87C525.78,-121.53 532.16,-121.2 538,-121 682.81,-115.98 719.1,-117.89 864,-117 885.33,-116.87 891.04,-113.02 912,-117 916.44,-117.84 921.04,-119.23 925.39,-120.82\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"931.98,-123.41 924.31,-123.78 928.72,-122.13 925.46,-120.85 925.46,-120.85 925.46,-120.85 928.72,-122.13 926.62,-117.92 931.98,-123.41 931.98,-123.41\"/>\n",
"<text text-anchor=\"start\" x=\"699\" y=\"-135.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"709.5\" y=\"-120.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;7 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>4&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M520.05,-122.96C534.78,-123.64 556.13,-126.43 572,-136 581.06,-141.46 588.72,-150.18 594.54,-158.43\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"598.63,-164.58 592.13,-160.49 596.69,-161.66 594.76,-158.75 594.76,-158.75 594.76,-158.75 596.69,-161.66 597.38,-157 598.63,-164.58 598.63,-164.58\"/>\n",
"<text text-anchor=\"start\" x=\"538\" y=\"-154.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"547\" y=\"-139.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;2 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>7&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M626.27,-180C644.14,-180 672.19,-180 692.27,-180\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"699.27,-180 692.27,-183.15 695.77,-180 692.27,-180 692.27,-180 692.27,-180 695.77,-180 692.27,-176.85 699.27,-180 699.27,-180\"/>\n",
"<text text-anchor=\"start\" x=\"645.5\" y=\"-198.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"654.5\" y=\"-183.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;5 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>7&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M617.78,-195.27C633.83,-220.94 670.5,-270 716.5,-270 716.5,-270 716.5,-270 949.5,-270 986.44,-270 1021.19,-241.15 1040.72,-221.31\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1045.58,-216.24 1043.01,-223.47 1043.16,-218.76 1040.74,-221.29 1040.74,-221.29 1040.74,-221.29 1043.16,-218.76 1038.46,-219.11 1045.58,-216.24 1045.58,-216.24\"/>\n",
"<text text-anchor=\"start\" x=\"809\" y=\"-273.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;1 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1040.35,-207.37C1006.1,-215.52 925.8,-230.3 864,-208 857.49,-205.65 851.26,-201.6 845.88,-197.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"840.41,-192.6 847.77,-194.77 843.07,-194.88 845.72,-197.16 845.72,-197.16 845.72,-197.16 843.07,-194.88 843.67,-199.55 840.41,-192.6 840.41,-192.6\"/>\n",
"<text text-anchor=\"start\" x=\"930\" y=\"-222.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;3 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1055.89,-184.99C1051.76,-135.3 1032.85,0 949.5,0 501,0 501,0 501,0 465.15,0 431.76,-28.29 412.78,-48.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"407.82,-53.44 410.28,-46.17 410.2,-50.88 412.58,-48.32 412.58,-48.32 412.58,-48.32 410.2,-50.88 414.89,-50.46 407.82,-53.44 407.82,-53.44\"/>\n",
"<text text-anchor=\"start\" x=\"699\" y=\"-17.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"701.5\" y=\"-3.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"717.5\" y=\"-3.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299fa0bd0> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Title: i G F a G F b Pages: 1 -->\n",
"<svg width=\"516pt\" height=\"285pt\"\n",
" viewBox=\"0.00 0.00 516.24 285.27\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 281.27)\">\n",
"<title>i G F a G F b</title>\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-281.27 512.24,-281.27 512.24,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"137.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\">(Fin(</text>\n",
"<text text-anchor=\"start\" x=\"165.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"181.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\">) &amp; Inf(</text>\n",
"<text text-anchor=\"start\" x=\"224.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"240.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\">)) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"287.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"303.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\">) &amp; Inf(</text>\n",
"<text text-anchor=\"start\" x=\"346.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"362.62\" y=\"-263.07\" font-family=\"Lato\" font-size=\"14.00\">))</text>\n",
"<text text-anchor=\"start\" x=\"225.12\" y=\"-249.07\" font-family=\"Lato\" font-size=\"14.00\">[Rabin 2]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"64.87\" cy=\"-55.27\" rx=\"26.74\" ry=\"26.74\"/>\n",
"<text text-anchor=\"start\" x=\"60.37\" y=\"-59.07\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"<text text-anchor=\"start\" x=\"56.87\" y=\"-44.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.05,-55.27C1.95,-55.27 16.07,-55.27 30.7,-55.27\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.86,-55.27 30.86,-58.42 34.36,-55.27 30.86,-55.27 30.86,-55.27 30.86,-55.27 34.36,-55.27 30.86,-52.12 37.86,-55.27 37.86,-55.27\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M56.67,-81.09C56.21,-91.45 58.94,-100.14 64.87,-100.14 69.32,-100.14 71.97,-95.25 72.82,-88.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"73.07,-81.09 75.98,-88.19 72.95,-84.59 72.83,-88.09 72.83,-88.09 72.83,-88.09 72.95,-84.59 69.68,-87.98 73.07,-81.09 73.07,-81.09\"/>\n",
"<text text-anchor=\"start\" x=\"46.37\" y=\"-103.94\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"195.61\" cy=\"-152.27\" rx=\"26.74\" ry=\"26.74\"/>\n",
"<text text-anchor=\"start\" x=\"191.11\" y=\"-156.07\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"187.61\" y=\"-141.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M74.66,-80.38C81.69,-96.9 93.14,-117.71 109.74,-130.27 124.61,-141.52 144.68,-147.04 161.57,-149.74\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"168.59,-150.73 161.22,-152.87 165.06,-150.74 161.59,-150.25 161.66,-149.75 161.73,-149.26 165.2,-149.75 162.1,-146.63 168.59,-150.73 168.59,-150.73\"/>\n",
"<text text-anchor=\"start\" x=\"109.74\" y=\"-150.07\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"474.3\" cy=\"-79.27\" rx=\"33.88\" ry=\"33.88\"/>\n",
"<text text-anchor=\"start\" x=\"469.8\" y=\"-83.07\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"<text text-anchor=\"start\" x=\"458.3\" y=\"-69.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"474.3\" y=\"-69.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M90.15,-45.71C96.44,-43.58 103.27,-41.58 109.74,-40.27 221.99,-17.62 255.03,-14.04 367.36,-36.27 391.5,-41.05 417.11,-51.28 437.1,-60.57\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"443.66,-63.67 435.98,-63.52 440.49,-62.18 437.33,-60.68 437.33,-60.68 437.33,-60.68 440.49,-62.18 438.68,-57.83 443.66,-63.67 443.66,-63.67\"/>\n",
"<text text-anchor=\"start\" x=\"242.48\" y=\"-27.07\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"333.42\" cy=\"-79.27\" rx=\"33.88\" ry=\"33.88\"/>\n",
"<text text-anchor=\"start\" x=\"328.92\" y=\"-83.07\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"<text text-anchor=\"start\" x=\"317.42\" y=\"-69.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"333.42\" y=\"-69.07\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M91.91,-57.61C138.55,-61.81 236.62,-70.64 292.04,-75.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"299.24,-76.28 291.98,-78.79 295.75,-75.97 292.27,-75.65 292.27,-75.65 292.27,-75.65 295.75,-75.97 292.55,-72.52 299.24,-76.28 299.24,-76.28\"/>\n",
"<text text-anchor=\"start\" x=\"178.61\" y=\"-73.07\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M176.52,-132.89C169,-125.53 159.91,-117.44 150.74,-111.27 134.08,-100.05 126.68,-103.06 109.74,-92.27 103.18,-88.09 96.54,-83.02 90.48,-77.98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"85.09,-73.4 92.46,-75.54 87.76,-75.67 90.42,-77.94 90.42,-77.94 90.42,-77.94 87.76,-75.67 88.38,-80.34 85.09,-73.4 85.09,-73.4\"/>\n",
"<text text-anchor=\"start\" x=\"111.74\" y=\"-115.07\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M183.8,-176.73C182.67,-187.67 186.61,-197.14 195.61,-197.14 202.5,-197.14 206.42,-191.59 207.38,-184.08\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"207.42,-176.73 210.53,-183.75 207.9,-180.23 207.88,-183.73 207.38,-183.73 206.88,-183.73 206.9,-180.23 204.23,-183.71 207.42,-176.73 207.42,-176.73\"/>\n",
"<text text-anchor=\"start\" x=\"175.11\" y=\"-200.94\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M212.24,-173.53C219.76,-182.11 229.53,-191.17 240.48,-196.27 313.76,-230.39 356.83,-243.59 422.36,-196.27 447.09,-178.41 459.96,-145.91 466.57,-119.69\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"468.19,-112.83 469.64,-120.37 467.39,-116.24 466.58,-119.64 466.58,-119.64 466.58,-119.64 467.39,-116.24 463.51,-118.92 468.19,-112.83 468.19,-112.83\"/>\n",
"<text text-anchor=\"start\" x=\"314.92\" y=\"-230.07\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M222.46,-149.21C240.01,-146.28 263.25,-140.7 281.48,-130.27 290.57,-125.07 299.16,-117.82 306.61,-110.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"311.57,-105.28 308.97,-112.5 309.14,-107.8 306.7,-110.31 306.7,-110.31 306.7,-110.31 309.14,-107.8 304.44,-108.12 311.57,-105.28 311.57,-105.28\"/>\n",
"<text text-anchor=\"start\" x=\"243.98\" y=\"-149.07\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;0 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>3&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M449.37,-56.15C441.29,-49.31 431.89,-42.31 422.36,-37.27 365.42,-7.17 345.55,-9.91 281.48,-3.27 204.69,4.69 181.84,-1.67 109.74,-29.27 104.39,-31.32 98.95,-33.99 93.79,-36.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"87.45,-40.52 91.93,-34.28 90.48,-38.76 93.51,-37.01 93.51,-37.01 93.51,-37.01 90.48,-38.76 95.09,-39.73 87.45,-40.52 87.45,-40.52\"/>\n",
"<text text-anchor=\"start\" x=\"242.48\" y=\"-7.07\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M448.96,-102.44C428.78,-120.14 398.46,-143.44 367.36,-155.27 314.52,-175.36 296.51,-171.79 240.48,-164.27 236.57,-163.74 232.51,-162.97 228.51,-162.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"221.43,-160.29 228.98,-158.93 224.82,-161.14 228.22,-161.98 228.22,-161.98 228.22,-161.98 224.82,-161.14 227.46,-165.04 221.43,-160.29 221.43,-160.29\"/>\n",
"<text text-anchor=\"start\" x=\"312.92\" y=\"-173.07\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M461.19,-110.71C460.91,-122 465.28,-131.21 474.3,-131.21 481.35,-131.21 485.56,-125.59 486.93,-117.75\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"487.42,-110.71 490.08,-117.91 487.18,-114.2 486.94,-117.7 486.94,-117.7 486.94,-117.7 487.18,-114.2 483.79,-117.48 487.42,-110.71 487.42,-110.71\"/>\n",
"<text text-anchor=\"start\" x=\"455.8\" y=\"-135.01\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M440.31,-79.27C420.69,-79.27 395.65,-79.27 374.85,-79.27\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"367.69,-79.27 374.69,-76.12 371.19,-79.27 374.69,-79.27 374.69,-79.27 374.69,-79.27 371.19,-79.27 374.69,-82.42 367.69,-79.27 367.69,-79.27\"/>\n",
"<text text-anchor=\"start\" x=\"386.86\" y=\"-83.07\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M301.22,-67.25C279.51,-59.54 249.69,-50.27 222.48,-46.27 180.07,-40.04 130.62,-44.87 98.81,-49.52\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"91.51,-50.63 97.96,-46.46 94.97,-50.1 98.43,-49.58 98.43,-49.58 98.43,-49.58 94.97,-50.1 98.9,-52.69 91.51,-50.63 91.51,-50.63\"/>\n",
"<text text-anchor=\"start\" x=\"177.11\" y=\"-50.07\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M300.34,-86.88C281.98,-92.09 259,-100.09 240.48,-111.27 233.09,-115.73 225.89,-121.6 219.53,-127.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"214.4,-132.42 217.27,-125.3 216.93,-130 219.45,-127.57 219.45,-127.57 219.45,-127.57 216.93,-130 221.63,-129.84 214.4,-132.42 214.4,-132.42\"/>\n",
"<text text-anchor=\"start\" x=\"240.48\" y=\"-115.07\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M364.95,-66.6C371.57,-64.39 378.61,-62.43 385.36,-61.27 401.57,-58.49 406.15,-58.49 422.36,-61.27 426.79,-62.03 431.35,-63.13 435.83,-64.43\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"442.77,-66.6 435.15,-67.52 439.43,-65.56 436.09,-64.51 436.09,-64.51 436.09,-64.51 439.43,-65.56 437.03,-61.51 442.77,-66.6 442.77,-66.6\"/>\n",
"<text text-anchor=\"start\" x=\"385.36\" y=\"-65.07\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M320.31,-110.71C320.03,-122 324.4,-131.21 333.42,-131.21 340.47,-131.21 344.68,-125.59 346.05,-117.75\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"346.53,-110.71 349.2,-117.91 346.29,-114.2 346.05,-117.7 346.05,-117.7 346.05,-117.7 346.29,-114.2 342.91,-117.48 346.53,-110.71 346.53,-110.71\"/>\n",
"<text text-anchor=\"start\" x=\"316.42\" y=\"-135.01\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299fa0e10> >"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def show_accrun(string):\n",
" aut = spot.automaton(string)\n",
" run = aut.accepting_run()\n",
" run.highlight(5)\n",
" display(aut)\n",
"\n",
"show_accrun(\"\"\"\n",
"HOA: v1 States: 10 Start: 0 AP: 2 \"a\" \"b\" Acceptance: 5 (Inf(1) | (Fin(0)\n",
"& Inf(4)) | Fin(2)) & Fin(3) properties: trans-labels explicit-labels\n",
"trans-acc --BODY-- State: 0 [0&1] 9 {3} [!0&!1] 0 {3} [0&!1] 5 {0 1} State:\n",
"1 [0&!1] 9 {4} [0&1] 8 {3} State: 2 [!0&!1] 8 {0} [!0&1] 6 {2 4} [0&1]\n",
"2 {3} [!0&1] 7 State: 3 [0&!1] 2 {0 4} [!0&!1] 3 {1 3} [!0&1] 4 {0} State: 4\n",
"[0&!1] 5 {2} [0&1] 0 [!0&1] 1 {0} State: 5 [!0&!1] 0 {3} [!0&!1] 6 {3} State: 6\n",
"[0&1] 3 {2} [!0&1] 1 [0&1] 2 {0 1 3 4} State: 7 [0&1] 1 [!0&1] 7 {0 2}\n",
"State: 8 [!0&1] 7 [!0&!1] 9 {0} State: 9 [0&1] 8 {3} [0&!1] 5 [0&!1]\n",
"1 --END--\n",
"\"\"\")\n",
"show_accrun(\"\"\"\n",
"HOA: v1 States: 10 Start: 0 AP: 2 \"a\" \"b\" Acceptance: 6 Fin(5) &\n",
"((Fin(1) & (Inf(3) | Inf(4))) | Fin(0) | Fin(2)) properties: trans-labels\n",
"explicit-labels trans-acc --BODY-- State: 0 [0&1] 8 {0} [0&!1] 6 {2}\n",
"State: 1 [!0&1] 9 {0 4 5} State: 2 [!0&1] 1 State: 3 [0&!1] 3 {2}\n",
"[0&1] 4 {3 5} State: 4 [0&1] 7 {5} [0&!1] 9 {2} [!0&1] 0 {0 2} State:\n",
"5 [!0&1] 1 [!0&1] 3 {2 3} State: 6 [0&!1] 8 {1 2 5} [!0&1] 7 {3} State:\n",
"7 [0&1] 2 {0} [!0&1] 5 State: 8 [0&!1] 3 {4 5} State: 9 [!0&1] 3 {1 2}\n",
"[0&1] 1 {4} [0&!1] 5 {2} --END--\"\"\")\n",
"show_accrun(\"\"\"\n",
"HOA: v1 States: 4 properties: implicit-labels trans-labels no-univ-branch\n",
"deterministic complete tool: \"ltl2dstar\" \"0.5.4\" name: \"i G F a G F b\"\n",
"comment: \"Union{Safra[NBA=2],Safra[NBA=2]}\" acc-name: Rabin 2 Acceptance:\n",
"4 (Fin(0)&Inf(1))|(Fin(2)&Inf(3)) Start: 0 AP: 2 \"a\" \"b\" --BODY-- State:\n",
"0 {0} 1 0 3 2 State: 1 {1} 1 0 3 2 State: 2 {0 3} 1 0 3 2 State: 3 {1 3}\n",
"1 0 3 2 --END--\n",
"\"\"\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Highlighting from a product\n",
"\n",
"Pretty often, accepting runs are found in a product but we want to display them on one of the original automata. This can be done by projecting the runs on those automata before displaying them."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"171pt\" height=\"125pt\"\n",
" viewBox=\"0.00 0.00 171.00 124.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 120.8)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-120.8 167,-120.8 167,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"58.5\" y=\"-86.6\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 1 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- I&#45;&gt;1 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-22C2.79,-22 17.15,-22 30.63,-22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-22 30.94,-25.15 34.44,-22 30.94,-22 30.94,-22 30.94,-22 34.44,-22 30.94,-18.85 37.94,-22 37.94,-22\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-39.04C48.32,-48.86 50.45,-58 56,-58 60.17,-58 62.4,-52.86 62.71,-46.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-39.04 65.85,-45.88 62.54,-42.53 62.71,-46.03 62.71,-46.03 62.71,-46.03 62.54,-42.53 59.56,-46.18 62.38,-39.04 62.38,-39.04\"/>\n",
"<text text-anchor=\"start\" x=\"37.5\" y=\"-61.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"141\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"141\" cy=\"-22\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"141\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.2,-22C85.07,-22 99.39,-22 111.89,-22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"119,-22 112,-25.15 115.5,-22 112,-22 112,-22 112,-22 115.5,-22 112,-18.85 119,-22 119,-22\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-25.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M132.99,-42.58C131.89,-52.84 134.55,-62 141,-62 145.83,-62 148.54,-56.85 149.13,-49.95\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"149.01,-42.58 152.27,-49.53 149.06,-46.08 149.12,-49.58 149.12,-49.58 149.12,-49.58 149.06,-46.08 145.97,-49.63 149.01,-42.58 149.01,-42.58\"/>\n",
"<text text-anchor=\"middle\" x=\"141\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299f828a0> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"82pt\" height=\"161pt\"\n",
" viewBox=\"0.00 0.00 82.00 161.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 157)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-157 78,-157 78,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"16\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"38\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"54\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"14\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-18C2.79,-18 17.15,-18 30.63,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-18 30.94,-21.15 34.44,-18 30.94,-18 30.94,-18 30.94,-18 34.44,-18 30.94,-14.85 37.94,-18 37.94,-18\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M52.76,-35.78C52.21,-45.31 53.29,-54 56,-54 57.99,-54 59.1,-49.32 59.33,-43.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"59.24,-35.78 62.48,-42.74 59.28,-39.28 59.33,-42.78 59.33,-42.78 59.33,-42.78 59.28,-39.28 56.18,-42.82 59.24,-35.78 59.24,-35.78\"/>\n",
"<text text-anchor=\"start\" x=\"50.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M50.68,-35.42C47.65,-52.79 49.43,-72 56,-72 61.7,-72 63.79,-57.55 62.27,-42.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"61.32,-35.42 65.39,-41.93 61.79,-38.89 62.26,-42.36 62.26,-42.36 62.26,-42.36 61.79,-38.89 59.14,-42.78 61.32,-35.42 61.32,-35.42\"/>\n",
"<text text-anchor=\"start\" x=\"52.5\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"48\" y=\"-75.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299f82b40> >"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"left = spot.translate('a U b')\n",
"right = spot.translate('GFa')\n",
"display(left, right)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"227pt\" height=\"164pt\"\n",
" viewBox=\"0.00 0.00 227.00 164.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 160.5)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-160.5 223,-160.5 223,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"88.5\" y=\"-142.3\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"110.5\" y=\"-142.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"126.5\" y=\"-142.3\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"86.5\" y=\"-128.3\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"65\" cy=\"-21.5\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"55\" y=\"-17.8\" font-family=\"Lato\" font-size=\"14.00\">1,0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.05,-21.5C1.95,-21.5 16.1,-21.5 30.76,-21.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-21.5 30.94,-24.65 34.44,-21.5 30.94,-21.5 30.94,-21.5 30.94,-21.5 34.44,-21.5 30.94,-18.35 37.94,-21.5 37.94,-21.5\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M57.14,-38.91C55.68,-48.58 58.3,-57.5 65,-57.5 69.92,-57.5 72.64,-52.69 73.16,-46.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"72.86,-38.91 76.29,-45.77 73,-42.4 73.14,-45.9 73.14,-45.9 73.14,-45.9 73,-42.4 70,-46.03 72.86,-38.91 72.86,-38.91\"/>\n",
"<text text-anchor=\"start\" x=\"46.5\" y=\"-61.3\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"192\" cy=\"-21.5\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"182\" y=\"-17.8\" font-family=\"Lato\" font-size=\"14.00\">0,0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M92.2,-21.5C111.29,-21.5 137.28,-21.5 157.82,-21.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"164.83,-21.5 157.83,-24.65 161.33,-21.5 157.83,-21.5 157.83,-21.5 157.83,-21.5 161.33,-21.5 157.83,-18.35 164.83,-21.5 164.83,-21.5\"/>\n",
"<text text-anchor=\"start\" x=\"110\" y=\"-25.3\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M86.91,-10.4C94.03,-7.19 102.18,-4.11 110,-2.5 126.1,0.83 130.9,0.83 147,-2.5 152.5,-3.63 158.16,-5.49 163.51,-7.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"170.09,-10.4 162.41,-10.57 166.87,-9.04 163.64,-7.67 163.64,-7.67 163.64,-7.67 166.87,-9.04 164.88,-4.77 170.09,-10.4 170.09,-10.4\"/>\n",
"<text text-anchor=\"start\" x=\"111.5\" y=\"-6.3\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M186.43,-39.28C185.48,-48.81 187.34,-57.5 192,-57.5 195.42,-57.5 197.33,-52.81 197.73,-46.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"197.57,-39.28 200.88,-46.21 197.65,-42.78 197.73,-46.28 197.73,-46.28 197.73,-46.28 197.65,-42.78 194.58,-46.35 197.57,-39.28 197.57,-39.28\"/>\n",
"<text text-anchor=\"start\" x=\"186.5\" y=\"-61.3\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M182.93,-38.64C177.59,-56.08 180.62,-75.5 192,-75.5 201.87,-75.5 205.46,-60.9 202.75,-45.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"201.07,-38.64 205.77,-44.71 201.89,-42.04 202.71,-45.44 202.71,-45.44 202.71,-45.44 201.89,-42.04 199.64,-46.18 201.07,-38.64 201.07,-38.64\"/>\n",
"<text text-anchor=\"start\" x=\"188.5\" y=\"-94.3\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"184\" y=\"-79.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f529a7cad20> >"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prod = spot.product(left, right); prod"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Prefix:\n",
" 1,0\n",
" | !a & b\n",
"Cycle:\n",
" 0,0\n",
" | a\t{0}\n",
"\n"
]
}
],
"source": [
"run = prod.accepting_run(); print(run)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"run.highlight(5)\n",
"# Note that by default project() needs to know on which side you project, but it cannot \n",
"# guess it. The left-side is assumed unless you pass True as a second argument.\n",
"run.project(left).highlight(5)\n",
"run.project(right, True).highlight(5)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"227pt\" height=\"164pt\"\n",
" viewBox=\"0.00 0.00 227.00 164.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 160.5)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-160.5 223,-160.5 223,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"88.5\" y=\"-142.3\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"110.5\" y=\"-142.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"126.5\" y=\"-142.3\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"86.5\" y=\"-128.3\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"65\" cy=\"-21.5\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"55\" y=\"-17.8\" font-family=\"Lato\" font-size=\"14.00\">1,0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.05,-21.5C1.95,-21.5 16.1,-21.5 30.76,-21.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-21.5 30.94,-24.65 34.44,-21.5 30.94,-21.5 30.94,-21.5 30.94,-21.5 34.44,-21.5 30.94,-18.35 37.94,-21.5 37.94,-21.5\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M57.14,-38.91C55.68,-48.58 58.3,-57.5 65,-57.5 69.92,-57.5 72.64,-52.69 73.16,-46.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"72.86,-38.91 76.29,-45.77 73,-42.4 73.14,-45.9 73.14,-45.9 73.14,-45.9 73,-42.4 70,-46.03 72.86,-38.91 72.86,-38.91\"/>\n",
"<text text-anchor=\"start\" x=\"46.5\" y=\"-61.3\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"192\" cy=\"-21.5\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"182\" y=\"-17.8\" font-family=\"Lato\" font-size=\"14.00\">0,0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M92.2,-21.5C111.29,-21.5 137.28,-21.5 157.82,-21.5\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"164.83,-21.5 157.83,-24.65 161.33,-22 157.83,-22 157.83,-21.5 157.83,-21 161.33,-21 157.83,-18.35 164.83,-21.5 164.83,-21.5\"/>\n",
"<text text-anchor=\"start\" x=\"110\" y=\"-25.3\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M86.91,-10.4C94.03,-7.19 102.18,-4.11 110,-2.5 126.1,0.83 130.9,0.83 147,-2.5 152.5,-3.63 158.16,-5.49 163.51,-7.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"170.09,-10.4 162.41,-10.57 166.87,-9.04 163.64,-7.67 163.64,-7.67 163.64,-7.67 166.87,-9.04 164.88,-4.77 170.09,-10.4 170.09,-10.4\"/>\n",
"<text text-anchor=\"start\" x=\"111.5\" y=\"-6.3\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M186.43,-39.28C185.48,-48.81 187.34,-57.5 192,-57.5 195.42,-57.5 197.33,-52.81 197.73,-46.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"197.57,-39.28 200.88,-46.21 197.65,-42.78 197.73,-46.28 197.73,-46.28 197.73,-46.28 197.65,-42.78 194.58,-46.35 197.57,-39.28 197.57,-39.28\"/>\n",
"<text text-anchor=\"start\" x=\"186.5\" y=\"-61.3\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M182.93,-38.64C177.59,-56.08 180.62,-75.5 192,-75.5 201.87,-75.5 205.46,-60.9 202.75,-45.64\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"201.07,-38.64 205.77,-44.71 202.37,-41.92 203.19,-45.33 202.71,-45.44 202.22,-45.56 201.4,-42.16 199.64,-46.18 201.07,-38.64 201.07,-38.64\"/>\n",
"<text text-anchor=\"start\" x=\"188.5\" y=\"-94.3\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"184\" y=\"-79.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f529a7cad20> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"171pt\" height=\"125pt\"\n",
" viewBox=\"0.00 0.00 171.00 124.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 120.8)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-120.8 167,-120.8 167,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"58.5\" y=\"-86.6\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 1 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- I&#45;&gt;1 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-22C2.79,-22 17.15,-22 30.63,-22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-22 30.94,-25.15 34.44,-22 30.94,-22 30.94,-22 30.94,-22 34.44,-22 30.94,-18.85 37.94,-22 37.94,-22\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-39.04C48.32,-48.86 50.45,-58 56,-58 60.17,-58 62.4,-52.86 62.71,-46.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-39.04 65.85,-45.88 62.54,-42.53 62.71,-46.03 62.71,-46.03 62.71,-46.03 62.54,-42.53 59.56,-46.18 62.38,-39.04 62.38,-39.04\"/>\n",
"<text text-anchor=\"start\" x=\"37.5\" y=\"-61.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"141\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"141\" cy=\"-22\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"141\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M74.2,-22C85.07,-22 99.39,-22 111.89,-22\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"119,-22 112,-25.15 115.5,-22.5 112,-22.5 112,-22 112,-21.5 115.5,-21.5 112,-18.85 119,-22 119,-22\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-25.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M132.99,-42.58C131.89,-52.84 134.55,-62 141,-62 145.83,-62 148.54,-56.85 149.13,-49.95\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"149.01,-42.58 152.27,-49.53 149.56,-46.07 149.62,-49.57 149.12,-49.58 148.62,-49.59 148.56,-46.09 145.97,-49.63 149.01,-42.58 149.01,-42.58\"/>\n",
"<text text-anchor=\"middle\" x=\"141\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299f828a0> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"82pt\" height=\"161pt\"\n",
" viewBox=\"0.00 0.00 82.00 161.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 157)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-157 78,-157 78,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"16\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"38\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"54\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"14\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-18C2.79,-18 17.15,-18 30.63,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-18 30.94,-21.15 34.44,-18 30.94,-18 30.94,-18 30.94,-18 34.44,-18 30.94,-14.85 37.94,-18 37.94,-18\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M52.76,-35.78C52.21,-45.31 53.29,-54 56,-54 57.99,-54 59.1,-49.32 59.33,-43.05\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"59.24,-35.78 62.48,-42.74 59.78,-39.28 59.83,-42.77 59.33,-42.78 58.83,-42.79 58.78,-39.29 56.18,-42.82 59.24,-35.78 59.24,-35.78\"/>\n",
"<text text-anchor=\"start\" x=\"50.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M50.68,-35.42C47.65,-52.79 49.43,-72 56,-72 61.7,-72 63.79,-57.55 62.27,-42.39\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"61.32,-35.42 65.39,-41.93 62.29,-38.82 62.76,-42.29 62.26,-42.36 61.77,-42.42 61.29,-38.96 59.14,-42.78 61.32,-35.42 61.32,-35.42\"/>\n",
"<text text-anchor=\"start\" x=\"52.5\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"48\" y=\"-75.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299f82b40> >"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(prod, left, right)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The projection also works for products generated on-the-fly, but the on-the-fly product itself cannot be highlighted (it does not store states or transitions). "
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Prefix:\n",
" 0 * 3\n",
" | a & !b\n",
" 1 * 2\n",
" | a\t{0}\n",
" 1 * 1\n",
" | a\t{0}\n",
" 1 * 0\n",
" | a & b\t{0}\n",
"Cycle:\n",
" 1 * 4\n",
" | a\t{0,1}\n",
"\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"687pt\" height=\"262pt\"\n",
" viewBox=\"0.00 0.00 686.57 262.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 258)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-258 682.57,-258 682.57,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"292.28\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"314.28\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"330.28\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">)&amp;Inf(</text>\n",
"<text text-anchor=\"start\" x=\"366.28\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"382.28\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"295.28\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\">[gen. Büchi 2]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"68.55\" cy=\"-166\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"53.05\" y=\"-162.3\" font-family=\"Lato\" font-size=\"14.00\">0 * 3</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.05,-166C1.96,-166 15.7,-166 30.46,-166\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.73,-166 30.73,-169.15 34.23,-166 30.73,-166 30.73,-166 30.73,-166 34.23,-166 30.73,-162.85 37.73,-166 37.73,-166\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"202.64\" cy=\"-193\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"187.14\" y=\"-189.3\" font-family=\"Lato\" font-size=\"14.00\">1 * 2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M97.56,-171.73C117.7,-175.84 145,-181.42 166.59,-185.83\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"173.67,-187.28 166.18,-188.97 170.24,-186.58 166.81,-185.88 166.81,-185.88 166.81,-185.88 170.24,-186.58 167.44,-182.79 173.67,-187.28 173.67,-187.28\"/>\n",
"<text text-anchor=\"start\" x=\"117.09\" y=\"-185.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"202.64\" cy=\"-139\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"187.14\" y=\"-135.3\" font-family=\"Lato\" font-size=\"14.00\">2 * 2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M97.56,-160.27C117.7,-156.16 145,-150.58 166.59,-146.17\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"173.67,-144.72 167.44,-149.21 170.24,-145.42 166.81,-146.12 166.81,-146.12 166.81,-146.12 170.24,-145.42 166.18,-143.03 173.67,-144.72 173.67,-144.72\"/>\n",
"<text text-anchor=\"start\" x=\"129.09\" y=\"-158.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"315.74\" cy=\"-182\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"300.24\" y=\"-178.3\" font-family=\"Lato\" font-size=\"14.00\">1 * 1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M232.83,-190.11C246.75,-188.73 263.55,-187.07 278.3,-185.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"285.36,-184.91 278.7,-188.73 281.87,-185.25 278.39,-185.6 278.39,-185.6 278.39,-185.6 281.87,-185.25 278.08,-182.46 285.36,-184.91 285.36,-184.91\"/>\n",
"<text text-anchor=\"start\" x=\"255.69\" y=\"-206.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"251.19\" y=\"-191.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M228.57,-148.65C244.73,-154.9 265.9,-163.1 283.22,-169.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"289.89,-172.38 282.22,-172.79 286.62,-171.12 283.36,-169.86 283.36,-169.86 283.36,-169.86 286.62,-171.12 284.5,-166.92 289.89,-172.38 289.89,-172.38\"/>\n",
"<text text-anchor=\"start\" x=\"255.69\" y=\"-166.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"315.74\" cy=\"-117\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"300.24\" y=\"-113.3\" font-family=\"Lato\" font-size=\"14.00\">2 * 1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M225.75,-127.04C233.56,-123.42 242.55,-119.89 251.19,-118 259.86,-116.1 269.36,-115.29 278.32,-115.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"285.35,-115.03 278.37,-118.23 281.85,-115.06 278.35,-115.08 278.35,-115.08 278.35,-115.08 281.85,-115.06 278.33,-111.93 285.35,-115.03 285.35,-115.03\"/>\n",
"<text text-anchor=\"middle\" x=\"259.19\" y=\"-121.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"428.83\" cy=\"-171\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"413.33\" y=\"-167.3\" font-family=\"Lato\" font-size=\"14.00\">1 * 0</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;5 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>3&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M345.93,-179.11C359.85,-177.73 376.65,-176.07 391.4,-174.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"398.45,-173.91 391.8,-177.73 394.97,-174.25 391.49,-174.6 391.49,-174.6 391.49,-174.6 394.97,-174.25 391.18,-171.46 398.45,-173.91 398.45,-173.91\"/>\n",
"<text text-anchor=\"start\" x=\"368.78\" y=\"-195.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"364.28\" y=\"-180.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;5 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>4&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M339.76,-128.19C356.74,-136.44 379.98,-147.74 398.33,-156.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"404.84,-159.83 397.17,-159.6 401.69,-158.3 398.55,-156.77 398.55,-156.77 398.55,-156.77 401.69,-158.3 399.92,-153.93 404.84,-159.83 404.84,-159.83\"/>\n",
"<text text-anchor=\"start\" x=\"368.78\" y=\"-150.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"428.83\" cy=\"-106\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"413.33\" y=\"-102.3\" font-family=\"Lato\" font-size=\"14.00\">2 * 0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;6 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M344.25,-110.28C350.78,-108.95 357.75,-107.73 364.28,-107 372.85,-106.04 382.11,-105.57 390.83,-105.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"398.01,-105.29 391.06,-108.54 394.51,-105.34 391.01,-105.39 391.01,-105.39 391.01,-105.39 394.51,-105.34 390.97,-102.24 398.01,-105.29 398.01,-105.29\"/>\n",
"<text text-anchor=\"middle\" x=\"372.28\" y=\"-110.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"648.02\" cy=\"-120\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"632.52\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\">1 * 4</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;7 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M457.78,-164.44C497.28,-155.16 569.41,-138.23 612.3,-128.15\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"619.18,-126.54 613.08,-131.2 615.77,-127.34 612.36,-128.14 612.36,-128.14 612.36,-128.14 615.77,-127.34 611.64,-125.07 619.18,-126.54 619.18,-126.54\"/>\n",
"<text text-anchor=\"start\" x=\"517.93\" y=\"-171.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"526.93\" y=\"-156.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;7 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>6&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M459.57,-107.92C498.89,-110.45 568.13,-114.91 610.55,-117.65\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"617.64,-118.11 610.45,-120.8 614.14,-117.88 610.65,-117.66 610.65,-117.66 610.65,-117.66 614.14,-117.88 610.85,-114.51 617.64,-118.11 617.64,-118.11\"/>\n",
"<text text-anchor=\"start\" x=\"517.93\" y=\"-118.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"534.93\" cy=\"-18\" rx=\"30.59\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"519.43\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2 * 4</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;8 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>6&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M447.02,-91.47C464.5,-76.69 491.68,-53.71 510.99,-37.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"516.71,-32.55 513.4,-39.48 514.04,-34.81 511.37,-37.07 511.37,-37.07 511.37,-37.07 514.04,-34.81 509.33,-34.67 516.71,-32.55 516.71,-32.55\"/>\n",
"<text text-anchor=\"start\" x=\"477.38\" y=\"-68.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;7 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>7&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M638.1,-137.04C636.07,-146.86 639.38,-156 648.02,-156 654.5,-156 657.98,-150.86 658.46,-144.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"657.94,-137.04 661.59,-143.79 658.2,-140.53 658.45,-144.02 658.45,-144.02 658.45,-144.02 658.2,-140.53 655.31,-144.25 657.94,-137.04 657.94,-137.04\"/>\n",
"<text text-anchor=\"start\" x=\"644.52\" y=\"-173.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"632.02\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"648.02\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;7 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>8&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M552.41,-32.99C565.26,-44.68 583.53,-61.34 599.47,-76 607.95,-83.79 617.25,-92.39 625.36,-99.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"630.76,-104.9 623.49,-102.46 628.19,-102.52 625.63,-100.14 625.63,-100.14 625.63,-100.14 628.19,-102.52 627.77,-97.83 630.76,-104.9 630.76,-104.9\"/>\n",
"<text text-anchor=\"start\" x=\"587.97\" y=\"-94.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"583.47\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;8 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>8&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M525.64,-35.41C523.91,-45.09 527,-54 534.93,-54 540.74,-54 543.96,-49.19 544.57,-42.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"544.21,-35.41 547.69,-42.25 544.38,-38.91 544.55,-42.4 544.55,-42.4 544.55,-42.4 544.38,-38.91 541.4,-42.55 544.21,-35.41 544.21,-35.41\"/>\n",
"<text text-anchor=\"start\" x=\"530.43\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"526.93\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_product; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_product > *' at 0x7f5299fa0ea0> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"255pt\" height=\"165pt\"\n",
" viewBox=\"0.00 0.00 255.00 164.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 160.8)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-160.8 251,-160.8 251,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"100.5\" y=\"-126.6\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-62C2.79,-62 17.15,-62 30.63,-62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-62 30.94,-65.15 34.44,-62 30.94,-62 30.94,-62 30.94,-62 34.44,-62 30.94,-58.85 37.94,-62 37.94,-62\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"225\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"225\" cy=\"-62\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"225\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M73.35,-67.11C86.58,-70.97 105.79,-75.94 123,-78 139.33,-79.95 143.68,-80.01 160,-78 172.33,-76.48 185.7,-73.38 197.02,-70.3\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"203.78,-68.41 197.89,-73.33 200.54,-69.83 197.17,-70.78 197.04,-70.3 196.9,-69.82 200.27,-68.87 196.18,-67.27 203.78,-68.41 203.78,-68.41\"/>\n",
"<text text-anchor=\"start\" x=\"123\" y=\"-82.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"141.5\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"141.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.32,-53.93C85.38,-47.05 104.31,-37.07 118.91,-29.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"125.28,-26.02 120.56,-32.07 122.19,-27.65 119.09,-29.28 119.09,-29.28 119.09,-29.28 122.19,-27.65 117.62,-26.5 125.28,-26.02 125.28,-26.02\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-45.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M217.32,-82.99C216.37,-93.09 218.93,-102 225,-102 229.55,-102 232.13,-96.99 232.74,-90.22\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"232.68,-82.99 235.88,-89.97 233.21,-86.49 233.23,-89.99 232.73,-89.99 232.23,-89.99 232.21,-86.49 229.58,-90.01 232.68,-82.99 232.68,-82.99\"/>\n",
"<text text-anchor=\"start\" x=\"221.5\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M157.83,-26.28C169.4,-32.52 185.52,-41.23 198.96,-48.48\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"205.31,-51.91 197.65,-51.35 202.23,-50.24 199.15,-48.58 199.15,-48.58 199.15,-48.58 202.23,-50.24 200.64,-45.81 205.31,-51.91 205.31,-51.91\"/>\n",
"<text text-anchor=\"start\" x=\"178\" y=\"-43.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M134.47,-34.66C132.91,-44.62 135.25,-54 141.5,-54 146.19,-54 148.68,-48.73 148.97,-41.89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"148.53,-34.66 152.1,-41.46 148.74,-38.16 148.96,-41.65 148.96,-41.65 148.96,-41.65 148.74,-38.16 145.81,-41.84 148.53,-34.66 148.53,-34.66\"/>\n",
"<text text-anchor=\"middle\" x=\"141.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299fa0a80> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"414pt\" height=\"125pt\"\n",
" viewBox=\"0.00 0.00 414.00 124.80\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 120.8)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-120.8 410,-120.8 410,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"180\" y=\"-86.6\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 3 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- I&#45;&gt;3 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-22C2.79,-22 17.15,-22 30.63,-22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-22 30.94,-25.15 34.44,-22 30.94,-22 30.94,-22 30.94,-22 34.44,-22 30.94,-18.85 37.94,-22 37.94,-22\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"137\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"137\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M74.14,-22C85.12,-22 99.52,-22 111.67,-22\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"118.89,-22 111.89,-25.15 115.39,-22.5 111.89,-22.5 111.89,-22 111.89,-21.5 115.39,-21.5 111.89,-18.85 118.89,-22 118.89,-22\"/>\n",
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-25.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"299\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"299\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"384\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"384\" cy=\"-22\" rx=\"22\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"384\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M317.2,-22C328.07,-22 342.39,-22 354.89,-22\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"362,-22 355,-25.15 358.5,-22.5 355,-22.5 355,-22 355,-21.5 358.5,-21.5 355,-18.85 362,-22 362,-22\"/>\n",
"<text text-anchor=\"start\" x=\"335\" y=\"-25.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M375.99,-42.58C374.89,-52.84 377.55,-62 384,-62 388.83,-62 391.54,-56.85 392.13,-49.95\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"392.01,-42.58 395.27,-49.53 392.56,-46.07 392.62,-49.57 392.12,-49.58 391.62,-49.59 391.56,-46.09 388.97,-49.63 392.01,-42.58 392.01,-42.58\"/>\n",
"<text text-anchor=\"middle\" x=\"384\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"218\" cy=\"-22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"218\" y=\"-18.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M236.14,-22C247.12,-22 261.52,-22 273.67,-22\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"280.89,-22 273.89,-25.15 277.39,-22.5 273.89,-22.5 273.89,-22 273.89,-21.5 277.39,-21.5 273.89,-18.85 280.89,-22 280.89,-22\"/>\n",
"<text text-anchor=\"middle\" x=\"258.5\" y=\"-25.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M155.14,-22C166.12,-22 180.52,-22 192.67,-22\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"199.89,-22 192.89,-25.15 196.39,-22.5 192.89,-22.5 192.89,-22 192.89,-21.5 196.39,-21.5 192.89,-18.85 199.89,-22 199.89,-22\"/>\n",
"<text text-anchor=\"middle\" x=\"177.5\" y=\"-25.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299fa0480> >"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"left2 = spot.translate('!b & FG a')\n",
"right2 = spot.translate('XXXb')\n",
"prod2 = spot.otf_product(left2, right2) # Note \"otf_product()\"\n",
"run2 = prod2.accepting_run()\n",
"run2.project(left2).highlight(5)\n",
"run2.project(right2, True).highlight(5)\n",
"print(run2)\n",
"display(prod2, left2, right2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Highlighting nondeterminism\n",
"\n",
"Sometimes its is hard to locate non-deterministic states inside a large automaton. Here are two functions that can help for that."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"386pt\" height=\"276pt\"\n",
" viewBox=\"0.00 0.00 386.00 276.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 272)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-272 382,-272 382,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"168\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"190\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"206\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"166\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 4 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- I&#45;&gt;4 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-105C2.79,-105 17.15,-105 30.63,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-105 30.94,-108.15 34.44,-105 30.94,-105 30.94,-105 30.94,-105 34.44,-105 30.94,-101.85 37.94,-105 37.94,-105\"/>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"137\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"137\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.14,-105C85.12,-105 99.52,-105 111.67,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"118.89,-105 111.89,-108.15 115.39,-105 111.89,-105 111.89,-105 111.89,-105 115.39,-105 111.89,-101.85 118.89,-105 118.89,-105\"/>\n",
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M129.97,-121.66C128.41,-131.62 130.75,-141 137,-141 141.69,-141 144.18,-135.73 144.47,-128.89\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"144.03,-121.66 147.6,-128.46 144.74,-125.13 144.96,-128.62 144.46,-128.65 143.96,-128.68 143.74,-125.19 141.31,-128.84 144.03,-121.66 144.03,-121.66\"/>\n",
"<text text-anchor=\"start\" x=\"123.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"360\" cy=\"-129\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"360\" y=\"-125.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M145.49,-120.89C158.32,-145.98 187.11,-193.85 228,-213 273.19,-234.16 321.36,-181.07 344.69,-149.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"349.01,-143.93 347.43,-151.44 346.95,-146.75 344.88,-149.58 344.88,-149.58 344.88,-149.58 346.95,-146.75 342.34,-147.72 349.01,-143.93 349.01,-143.93\"/>\n",
"<text text-anchor=\"start\" x=\"228\" y=\"-220.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M155.11,-105C173.32,-105 202.31,-105 222.96,-105\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"230.15,-105 223.15,-108.15 226.65,-105.5 223.15,-105.5 223.15,-105 223.15,-104.5 226.65,-104.5 223.15,-101.85 230.15,-105 230.15,-105\"/>\n",
"<text text-anchor=\"start\" x=\"174.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M151.87,-93.98C171.2,-78.62 206.34,-50.7 228.22,-33.32\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"233.74,-28.93 230.22,-35.75 231.32,-31.5 228.57,-33.68 228.26,-33.28 227.95,-32.89 230.69,-30.71 226.3,-30.82 233.74,-28.93 233.74,-28.93\"/>\n",
"<text text-anchor=\"start\" x=\"173\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M355.18,-146.41C354.28,-156.09 355.89,-165 360,-165 363.02,-165 364.69,-160.19 365.01,-153.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"364.82,-146.41 368.15,-153.33 364.91,-149.91 365,-153.41 365,-153.41 365,-153.41 364.91,-149.91 361.85,-153.49 364.82,-146.41 364.82,-146.41\"/>\n",
"<text text-anchor=\"start\" x=\"353.5\" y=\"-183.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"352\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.73,-145.6C347.24,-166.86 349.66,-195 360,-195 369.25,-195 372.16,-172.49 368.74,-152.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"367.27,-145.6 371.81,-151.79 368,-149.02 368.73,-152.44 368.73,-152.44 368.73,-152.44 368,-149.02 365.64,-153.1 367.27,-145.6 367.27,-145.6\"/>\n",
"<text text-anchor=\"start\" x=\"355.5\" y=\"-198.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M243.5,-122.41C242.57,-132.09 244.23,-141 248.5,-141 251.63,-141 253.36,-136.19 253.69,-129.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.5,-122.41 256.83,-129.33 253.59,-125.91 253.68,-129.41 253.68,-129.41 253.68,-129.41 253.59,-125.91 250.53,-129.49 253.5,-122.41 253.5,-122.41\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"240.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M240.96,-121.6C235.27,-142.86 237.78,-171 248.5,-171 258.09,-171 261.11,-148.49 257.56,-128.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"256.04,-121.6 260.62,-127.75 256.79,-125.01 257.55,-128.43 257.55,-128.43 257.55,-128.43 256.79,-125.01 254.47,-129.11 256.04,-121.6 256.04,-121.6\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M262.06,-30.73C281.62,-50.56 319.39,-88.85 341.57,-111.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"346.59,-116.42 339.43,-113.64 344.13,-113.92 341.67,-111.43 341.67,-111.43 341.67,-111.43 344.13,-113.92 343.91,-109.22 346.59,-116.42 346.59,-116.42\"/>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-96.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M238.93,-33.54C236.23,-43.91 239.42,-54 248.5,-54 255.45,-54 258.95,-48.08 259,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"258.07,-33.54 262.1,-40.08 258.53,-37.01 258.98,-40.48 258.98,-40.48 258.98,-40.48 258.53,-37.01 255.85,-40.89 258.07,-33.54 258.07,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299fa0930> >"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = spot.translate('X (F(Ga <-> b) & GF!b)')\n",
"spot.highlight_nondet_states(b, 5)\n",
"spot.highlight_nondet_edges(b, 4)\n",
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Disappearing highlights\n",
"\n",
"As explained at the top of this notebook, named properties (such as highlights) are fragile, and you should not really on them being preserved across algorithms. In-place algorithm are probably the worst, because they might modify the automaton and ignore the attached named properties. \n",
"\n",
"`randomize()` is one such in-place algorithm: it reorder states or transitions of the automaton. By doing so it renumber the states and edges, and that process would completely invalidate the highlights information. Fortunately `randomize()` know about highlights: it will preserve highlighted states, but it will drop all highlighted edges."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"386pt\" height=\"299pt\"\n",
" viewBox=\"0.00 0.00 386.00 299.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 295)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-295 382,-295 382,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"168\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"190\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"206\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"166\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 3 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- I&#45;&gt;3 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-105C2.79,-105 17.15,-105 30.63,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-105 30.94,-108.15 34.44,-105 30.94,-105 30.94,-105 30.94,-105 34.44,-105 30.94,-101.85 37.94,-105 37.94,-105\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"137\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"137\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.14,-105C85.12,-105 99.52,-105 111.67,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"118.89,-105 111.89,-108.15 115.39,-105 111.89,-105 111.89,-105 111.89,-105 115.39,-105 111.89,-101.85 118.89,-105 118.89,-105\"/>\n",
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-156\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-152.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M243.5,-173.41C242.57,-183.09 244.23,-192 248.5,-192 251.63,-192 253.36,-187.19 253.69,-180.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.5,-173.41 256.83,-180.33 253.59,-176.91 253.68,-180.41 253.68,-180.41 253.68,-180.41 253.59,-176.91 250.53,-180.49 253.5,-173.41 253.5,-173.41\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"240.5\" y=\"-195.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M240.96,-172.6C235.27,-193.86 237.78,-222 248.5,-222 258.09,-222 261.11,-199.49 257.56,-179.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"256.04,-172.6 260.62,-178.75 256.79,-176.01 257.55,-179.43 257.55,-179.43 257.55,-179.43 256.79,-176.01 254.47,-180.11 256.04,-172.6 256.04,-172.6\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"360\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"360\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M355.18,-79.41C354.28,-89.09 355.89,-98 360,-98 363.02,-98 364.69,-93.19 365.01,-86.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"364.82,-79.41 368.15,-86.33 364.91,-82.91 365,-86.41 365,-86.41 365,-86.41 364.91,-82.91 361.85,-86.49 364.82,-79.41 364.82,-79.41\"/>\n",
"<text text-anchor=\"start\" x=\"353.5\" y=\"-116.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"352\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.73,-78.6C347.24,-99.86 349.66,-128 360,-128 369.25,-128 372.16,-105.49 368.74,-85.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"367.27,-78.6 371.81,-84.79 368,-82.02 368.73,-85.44 368.73,-85.44 368.73,-85.44 368,-82.02 365.64,-86.1 367.27,-78.6 367.27,-78.6\"/>\n",
"<text text-anchor=\"start\" x=\"355.5\" y=\"-131.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M265.66,-24.49C284.36,-32.01 315.3,-44.44 336.39,-52.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"343.13,-55.62 335.46,-55.94 339.88,-54.32 336.64,-53.01 336.64,-53.01 336.64,-53.01 339.88,-54.32 337.81,-50.09 343.13,-55.62 343.13,-55.62\"/>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-50.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M238.93,-33.54C236.23,-43.91 239.42,-54 248.5,-54 255.45,-54 258.95,-48.08 259,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"258.07,-33.54 262.1,-40.08 258.53,-37.01 258.98,-40.48 258.98,-40.48 258.98,-40.48 258.53,-37.01 255.85,-40.89 258.07,-33.54 258.07,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M153.69,-112.31C172.47,-121.06 204.05,-135.76 225.33,-145.67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"231.84,-148.71 224.16,-148.61 228.67,-147.23 225.49,-145.75 225.49,-145.75 225.49,-145.75 228.67,-147.23 226.82,-142.9 231.84,-148.71 231.84,-148.71\"/>\n",
"<text text-anchor=\"start\" x=\"174.5\" y=\"-141.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;1 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M154.88,-101.72C169.47,-98.88 191.13,-94.67 210,-91 254.12,-82.42 305.58,-72.4 335.02,-66.67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"342.02,-65.31 335.75,-69.74 338.58,-65.98 335.15,-66.64 335.15,-66.64 335.15,-66.64 338.58,-65.98 334.54,-63.55 342.02,-65.31 342.02,-65.31\"/>\n",
"<text text-anchor=\"start\" x=\"228\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;2 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M151.22,-93.89C157.74,-88.45 165.74,-81.83 173,-76 191.5,-61.14 212.91,-44.54 228.01,-32.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"233.67,-28.57 230.04,-35.33 230.9,-30.7 228.12,-32.83 228.12,-32.83 228.12,-32.83 230.9,-30.7 226.2,-30.33 233.67,-28.57 233.67,-28.57\"/>\n",
"<text text-anchor=\"start\" x=\"173\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M129.97,-121.66C128.41,-131.62 130.75,-141 137,-141 141.69,-141 144.18,-135.73 144.47,-128.89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"144.03,-121.66 147.6,-128.46 144.24,-125.16 144.46,-128.65 144.46,-128.65 144.46,-128.65 144.24,-125.16 141.31,-128.84 144.03,-121.66 144.03,-121.66\"/>\n",
"<text text-anchor=\"start\" x=\"123.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299fa0930> >"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.randomize(b); b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Highlighting with partial output\n",
"\n",
"For simplicity, rendering of partial automata is actually implemented by copying the original automaton and marking some states as \"incomplete\". This also allows the same display code to work with automata generated on-the-fly. However since there is a copy, propagating the highlighting information requires extra work. Let's make sure it has been done:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"386pt\" height=\"299pt\"\n",
" viewBox=\"0.00 0.00 386.00 299.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 295)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-295 382,-295 382,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"168\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"190\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"206\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"166\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 3 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- I&#45;&gt;3 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-105C2.79,-105 17.15,-105 30.63,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-105 30.94,-108.15 34.44,-105 30.94,-105 30.94,-105 30.94,-105 34.44,-105 30.94,-101.85 37.94,-105 37.94,-105\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"137\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"137\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.14,-105C85.12,-105 99.52,-105 111.67,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"118.89,-105 111.89,-108.15 115.39,-105 111.89,-105 111.89,-105 111.89,-105 115.39,-105 111.89,-101.85 118.89,-105 118.89,-105\"/>\n",
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-156\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-152.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M243.5,-173.41C242.57,-183.09 244.23,-192 248.5,-192 251.63,-192 253.36,-187.19 253.69,-180.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.5,-173.41 256.83,-180.33 253.59,-176.91 253.68,-180.41 253.68,-180.41 253.68,-180.41 253.59,-176.91 250.53,-180.49 253.5,-173.41 253.5,-173.41\"/>\n",
"<text text-anchor=\"start\" x=\"230\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"<text text-anchor=\"start\" x=\"240.5\" y=\"-195.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M240.96,-172.6C235.27,-193.86 237.78,-222 248.5,-222 258.09,-222 261.11,-199.49 257.56,-179.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"256.04,-172.6 260.62,-178.75 256.79,-176.01 257.55,-179.43 257.55,-179.43 257.55,-179.43 256.79,-176.01 254.47,-180.11 256.04,-172.6 256.04,-172.6\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"360\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"360\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M355.18,-79.41C354.28,-89.09 355.89,-98 360,-98 363.02,-98 364.69,-93.19 365.01,-86.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"364.82,-79.41 368.15,-86.33 364.91,-82.91 365,-86.41 365,-86.41 365,-86.41 364.91,-82.91 361.85,-86.49 364.82,-79.41 364.82,-79.41\"/>\n",
"<text text-anchor=\"start\" x=\"353.5\" y=\"-116.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"352\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.73,-78.6C347.24,-99.86 349.66,-128 360,-128 369.25,-128 372.16,-105.49 368.74,-85.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"367.27,-78.6 371.81,-84.79 368,-82.02 368.73,-85.44 368.73,-85.44 368.73,-85.44 368,-82.02 365.64,-86.1 367.27,-78.6 367.27,-78.6\"/>\n",
"<text text-anchor=\"start\" x=\"355.5\" y=\"-131.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M265.66,-24.49C284.36,-32.01 315.3,-44.44 336.39,-52.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"343.13,-55.62 335.46,-55.94 339.88,-54.32 336.64,-53.01 336.64,-53.01 336.64,-53.01 339.88,-54.32 337.81,-50.09 343.13,-55.62 343.13,-55.62\"/>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-50.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M238.93,-33.54C236.23,-43.91 239.42,-54 248.5,-54 255.45,-54 258.95,-48.08 259,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"258.07,-33.54 262.1,-40.08 258.53,-37.01 258.98,-40.48 258.98,-40.48 258.98,-40.48 258.53,-37.01 255.85,-40.89 258.07,-33.54 258.07,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M153.69,-112.31C172.47,-121.06 204.05,-135.76 225.33,-145.67\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"231.84,-148.71 224.16,-148.61 228.46,-147.68 225.28,-146.2 225.49,-145.75 225.71,-145.3 228.88,-146.78 226.82,-142.9 231.84,-148.71 231.84,-148.71\"/>\n",
"<text text-anchor=\"start\" x=\"174.5\" y=\"-141.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;1 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M154.88,-101.72C169.47,-98.88 191.13,-94.67 210,-91 254.12,-82.42 305.58,-72.4 335.02,-66.67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"342.02,-65.31 335.75,-69.74 338.58,-65.98 335.15,-66.64 335.15,-66.64 335.15,-66.64 338.58,-65.98 334.54,-63.55 342.02,-65.31 342.02,-65.31\"/>\n",
"<text text-anchor=\"start\" x=\"228\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;2 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M151.22,-93.89C157.74,-88.45 165.74,-81.83 173,-76 191.5,-61.14 212.91,-44.54 228.01,-32.91\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"233.67,-28.57 230.04,-35.33 231.2,-31.09 228.42,-33.23 228.12,-32.83 227.82,-32.43 230.59,-30.3 226.2,-30.33 233.67,-28.57 233.67,-28.57\"/>\n",
"<text text-anchor=\"start\" x=\"173\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M129.97,-121.66C128.41,-131.62 130.75,-141 137,-141 141.69,-141 144.18,-135.73 144.47,-128.89\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"144.03,-121.66 147.6,-128.46 144.74,-125.13 144.96,-128.62 144.46,-128.65 143.96,-128.68 143.74,-125.19 141.31,-128.84 144.03,-121.66 144.03,-121.66\"/>\n",
"<text text-anchor=\"start\" x=\"123.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5299fa0930> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"386pt\" height=\"206pt\"\n",
" viewBox=\"0.00 0.00 386.00 205.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 201.5)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-201.5 382,-201.5 382,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"168\" y=\"-183.3\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"190\" y=\"-183.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"206\" y=\"-183.3\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"166\" y=\"-169.3\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"51.5\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-105C2.79,-105 17.15,-105 30.63,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-105 30.94,-108.15 34.44,-105 30.94,-105 30.94,-105 30.94,-105 34.44,-105 30.94,-101.85 37.94,-105 37.94,-105\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"137\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"132.5\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.14,-105C85.12,-105 99.52,-105 111.67,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"118.89,-105 111.89,-108.15 115.39,-105 111.89,-105 111.89,-105 111.89,-105 115.39,-105 111.89,-101.85 118.89,-105 118.89,-105\"/>\n",
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M129.97,-121.66C128.41,-131.62 130.75,-141 137,-141 141.69,-141 144.18,-135.73 144.47,-128.89\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"144.03,-121.66 147.6,-128.46 144.74,-125.13 144.96,-128.62 144.46,-128.65 143.96,-128.68 143.74,-125.19 141.31,-128.84 144.03,-121.66 144.03,-121.66\"/>\n",
"<text text-anchor=\"start\" x=\"123.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"<!-- u1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>u1</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"transparent\" points=\"261.5,-161.5 235.5,-161.5 235.5,-138.5 261.5,-138.5 261.5,-161.5\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-146.3\" font-family=\"Lato\" font-size=\"14.00\">...</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;u1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;u1</title>\n",
"<path fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" d=\"M154.16,-111.64C174.04,-119.81 207.74,-133.66 228.74,-142.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"235.34,-145 227.67,-145.26 232.11,-143.67 228.87,-142.34 228.87,-142.34 228.87,-142.34 232.11,-143.67 230.07,-139.43 235.34,-145 235.34,-145\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"360\" cy=\"-62\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"360\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M154.88,-101.72C169.47,-98.88 191.13,-94.67 210,-91 254.12,-82.42 305.58,-72.4 335.02,-66.67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"342.02,-65.31 335.75,-69.74 338.58,-65.98 335.15,-66.64 335.15,-66.64 335.15,-66.64 338.58,-65.98 334.54,-63.55 342.02,-65.31 342.02,-65.31\"/>\n",
"<text text-anchor=\"start\" x=\"228\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"248.5\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"248.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M151.22,-93.89C157.74,-88.45 165.74,-81.83 173,-76 191.5,-61.14 212.91,-44.54 228.01,-32.91\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"233.67,-28.57 230.04,-35.33 231.2,-31.09 228.42,-33.23 228.12,-32.83 227.82,-32.43 230.59,-30.3 226.2,-30.33 233.67,-28.57 233.67,-28.57\"/>\n",
"<text text-anchor=\"start\" x=\"173\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M355.18,-79.41C354.28,-89.09 355.89,-98 360,-98 363.02,-98 364.69,-93.19 365.01,-86.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"364.82,-79.41 368.15,-86.33 364.91,-82.91 365,-86.41 365,-86.41 365,-86.41 364.91,-82.91 361.85,-86.49 364.82,-79.41 364.82,-79.41\"/>\n",
"<text text-anchor=\"start\" x=\"353.5\" y=\"-116.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"352\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.73,-78.6C347.24,-99.86 349.66,-128 360,-128 369.25,-128 372.16,-105.49 368.74,-85.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"367.27,-78.6 371.81,-84.79 368,-82.02 368.73,-85.44 368.73,-85.44 368.73,-85.44 368,-82.02 365.64,-86.1 367.27,-78.6 367.27,-78.6\"/>\n",
"<text text-anchor=\"start\" x=\"355.5\" y=\"-131.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M265.66,-24.49C284.36,-32.01 315.3,-44.44 336.39,-52.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"343.13,-55.62 335.46,-55.94 339.88,-54.32 336.64,-53.01 336.64,-53.01 336.64,-53.01 339.88,-54.32 337.81,-50.09 343.13,-55.62 343.13,-55.62\"/>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-50.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M238.93,-33.54C236.23,-43.91 239.42,-54 248.5,-54 255.45,-54 258.95,-48.08 259,-40.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"258.07,-33.54 262.1,-40.08 258.53,-37.01 258.98,-40.48 258.98,-40.48 258.98,-40.48 258.53,-37.01 255.85,-40.89 258.07,-33.54 258.07,-33.54\"/>\n",
"<text text-anchor=\"start\" x=\"231.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"226pt\" height=\"113pt\"\n",
" viewBox=\"0.00 0.00 226.00 113.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 109)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-109 222,-109 222,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"88\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"110\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"126\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"86\" y=\"-76.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"51.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-18C2.79,-18 17.15,-18 30.63,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-18 30.94,-21.15 34.44,-18 30.94,-18 30.94,-18 30.94,-18 34.44,-18 30.94,-14.85 37.94,-18 37.94,-18\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"137\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"132.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.14,-18C85.12,-18 99.52,-18 111.67,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"118.89,-18 111.89,-21.15 115.39,-18 111.89,-18 111.89,-18 111.89,-18 115.39,-18 111.89,-14.85 118.89,-18 118.89,-18\"/>\n",
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M130.62,-35.04C129.32,-44.86 131.45,-54 137,-54 141.17,-54 143.4,-48.86 143.71,-42.14\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"143.38,-35.04 146.85,-41.88 144.04,-38.51 144.21,-42.01 143.71,-42.03 143.21,-42.05 143.04,-38.56 140.56,-42.18 143.38,-35.04 143.38,-35.04\"/>\n",
"<text text-anchor=\"start\" x=\"123.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a | b</text>\n",
"</g>\n",
"<!-- u1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>u1</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"transparent\" points=\"218,-29.5 192,-29.5 192,-6.5 218,-6.5 218,-29.5\"/>\n",
"<text text-anchor=\"middle\" x=\"205\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">...</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;u1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;u1</title>\n",
"<path fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" d=\"M155.34,-18C164.38,-18 175.46,-18 184.77,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"191.77,-18 184.77,-21.15 188.27,-18 184.77,-18 184.77,-18 184.77,-18 188.27,-18 184.77,-14.85 191.77,-18 191.77,-18\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"spot.highlight_nondet_edges(b, 4) # let's get those highlighted edges back\n",
"display(b, b.show('.<4'), b.show('.<2'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Highlighting languages\n",
"\n",
"For deterministic automata, the function `spot.highlight_languages()` can be used to highlight states that recognize the same language. This can be a great help in reading automata. States with a colored border share their language, and states with a black border all have a language different from all other states."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"652pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 652.06 360.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.8849557522123894 0.8849557522123894) rotate(0) translate(4 404)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-404 735,-404 735,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"344.5\" y=\"-385.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"366.5\" y=\"-385.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"382.5\" y=\"-385.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"342.5\" y=\"-371.8\" font-family=\"Lato\" font-size=\"14.00\">[Büchi]</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"green\" points=\"470,-154 470,-356 723,-356 723,-154 470,-154\"/>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster_1</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"391,-152 391,-204 443,-204 443,-152 391,-152\"/>\n",
"</g>\n",
"<g id=\"clust3\" class=\"cluster\">\n",
"<title>cluster_2</title>\n",
"<polygon fill=\"none\" stroke=\"green\" points=\"139,-181 139,-283 327.5,-283 327.5,-181 139,-181\"/>\n",
"</g>\n",
"<g id=\"clust4\" class=\"cluster\">\n",
"<title>cluster_3</title>\n",
"<polygon fill=\"none\" stroke=\"green\" points=\"139,-8 139,-108 191,-108 191,-8 139,-8\"/>\n",
"</g>\n",
"<g id=\"clust5\" class=\"cluster\">\n",
"<title>cluster_4</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"30,-102 30,-154 82,-154 82,-102 30,-102\"/>\n",
"</g>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-128\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-124.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-128C2.79,-128 17.15,-128 30.63,-128\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-128 30.94,-131.15 34.44,-128 30.94,-128 30.94,-128 30.94,-128 34.44,-128 30.94,-124.85 37.94,-128 37.94,-128\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"417\" cy=\"-178\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"417\" y=\"-174.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.32,-130.41C132.85,-138.56 323.46,-165.11 391.55,-174.59\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"398.86,-175.61 391.49,-177.77 395.39,-175.13 391.93,-174.65 391.93,-174.65 391.93,-174.65 395.39,-175.13 392.36,-171.53 398.86,-175.61 398.86,-175.61\"/>\n",
"<text text-anchor=\"start\" x=\"211.5\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#1f78b4\" stroke-width=\"2\" cx=\"165\" cy=\"-207\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-203.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M70.99,-138.33C89.73,-152.17 123.1,-176.8 144.36,-192.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"150.01,-196.67 142.51,-195.05 147.19,-194.59 144.38,-192.51 144.38,-192.51 144.38,-192.51 147.19,-194.59 146.25,-189.98 150.01,-196.67 150.01,-196.67\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"165\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-30.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M70.12,-116.47C88.97,-99.91 123.82,-69.3 145.34,-50.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"150.77,-45.62 147.59,-52.61 148.14,-47.93 145.51,-50.24 145.51,-50.24 145.51,-50.24 148.14,-47.93 143.43,-47.87 150.77,-45.62 150.77,-45.62\"/>\n",
"<text text-anchor=\"start\" x=\"107\" y=\"-98.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#ff4da0\" stroke-width=\"2\" cx=\"496\" cy=\"-237\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"496\" y=\"-233.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#ff4da0\" stroke-width=\"2\" cx=\"584\" cy=\"-231\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"584\" y=\"-227.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;6 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M511.72,-227.46C517.75,-224.08 524.96,-220.7 532,-219 541.35,-216.74 551.67,-218.39 560.58,-221.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"567.36,-223.47 559.72,-224.15 564.06,-222.32 560.75,-221.17 560.75,-221.17 560.75,-221.17 564.06,-222.32 561.78,-218.2 567.36,-223.47 567.36,-223.47\"/>\n",
"<text text-anchor=\"start\" x=\"534.5\" y=\"-222.8\" font-family=\"Lato\" font-size=\"14.00\">!c</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#ff4da0\" stroke-width=\"2\" cx=\"697\" cy=\"-236\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"697\" y=\"-232.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;7 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>4&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M509.43,-224.76C522.34,-212.99 543.72,-195.99 566,-189 605.86,-176.5 651.61,-202.72 676.82,-220.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"682.47,-224.96 674.96,-223.34 679.65,-222.88 676.83,-220.8 676.83,-220.8 676.83,-220.8 679.65,-222.88 678.7,-218.27 682.47,-224.96 682.47,-224.96\"/>\n",
"<text text-anchor=\"start\" x=\"580.5\" y=\"-192.8\" font-family=\"Lato\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;4 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>6&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M565.92,-232.56C560.22,-233.05 553.84,-233.58 548,-234 539.24,-234.63 529.63,-235.22 521.14,-235.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"514.01,-236.11 520.82,-232.58 517.5,-235.92 521,-235.72 521,-235.72 521,-235.72 517.5,-235.92 521.17,-238.87 514.01,-236.11 514.01,-236.11\"/>\n",
"<text text-anchor=\"start\" x=\"533.5\" y=\"-253.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"532\" y=\"-238.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M576.33,-247.29C574.48,-257.39 577.04,-267 584,-267 589.22,-267 591.96,-261.59 592.23,-254.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"591.67,-247.29 595.34,-254.03 591.93,-250.78 592.2,-254.27 592.2,-254.27 592.2,-254.27 591.93,-250.78 589.06,-254.51 591.67,-247.29 591.67,-247.29\"/>\n",
"<text text-anchor=\"start\" x=\"565.5\" y=\"-270.8\" font-family=\"Lato\" font-size=\"14.00\">b &amp; !c</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;7 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>6&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M600.69,-223.82C606.61,-221.47 613.49,-219.17 620,-218 637.93,-214.78 643.29,-213.71 661,-218 665.73,-219.14 670.54,-221.05 675.01,-223.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"681.28,-226.46 673.62,-226.02 678.18,-224.84 675.07,-223.23 675.07,-223.23 675.07,-223.23 678.18,-224.84 676.53,-220.43 681.28,-226.46 681.28,-226.46\"/>\n",
"<text text-anchor=\"start\" x=\"623.5\" y=\"-221.8\" font-family=\"Lato\" font-size=\"14.00\">b &amp; c</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;4 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>7&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M682.42,-247.13C665.03,-260.59 633.39,-282.49 602,-291 570.52,-299.53 557.81,-288.93 532,-269 526.13,-264.47 520.07,-259.17 514.67,-254.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"509.52,-249.39 516.78,-251.87 512.07,-251.78 514.63,-254.17 514.63,-254.17 514.63,-254.17 512.07,-251.78 512.48,-256.47 509.52,-249.39 509.52,-249.39\"/>\n",
"<text text-anchor=\"start\" x=\"579.5\" y=\"-311.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"576\" y=\"-296.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;6 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>7&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M678.79,-235.41C663.39,-234.86 640.18,-233.97 620,-233 616.53,-232.83 612.88,-232.64 609.29,-232.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"602.09,-232.04 609.25,-229.29 605.58,-232.23 609.08,-232.43 609.08,-232.43 609.08,-232.43 605.58,-232.23 608.9,-235.58 602.09,-232.04 602.09,-232.04\"/>\n",
"<text text-anchor=\"start\" x=\"620\" y=\"-237.8\" font-family=\"Lato\" font-size=\"14.00\">!b &amp; !c</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;7 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>7&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M687.43,-251.54C684.73,-261.91 687.92,-272 697,-272 703.95,-272 707.45,-266.08 707.5,-258.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"706.57,-251.54 710.6,-258.08 707.03,-255.01 707.48,-258.48 707.48,-258.48 707.48,-258.48 707.03,-255.01 704.35,-258.89 706.57,-251.54 706.57,-251.54\"/>\n",
"<text text-anchor=\"start\" x=\"678.5\" y=\"-275.8\" font-family=\"Lato\" font-size=\"14.00\">!b &amp; c</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M432.18,-187.75C440.41,-193.5 450.91,-201 460,-208 465.42,-212.17 471.18,-216.84 476.43,-221.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"481.89,-225.76 474.49,-223.68 479.2,-223.51 476.51,-221.27 476.51,-221.27 476.51,-221.27 479.2,-223.51 478.54,-218.85 481.89,-225.76 481.89,-225.76\"/>\n",
"<text text-anchor=\"start\" x=\"453\" y=\"-211.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M171.13,-224.14C176.26,-237.91 185.64,-256.33 201,-265 290.95,-315.78 421.39,-269.3 472.9,-247.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"479.35,-244.37 474.19,-250.06 476.14,-245.77 472.93,-247.17 472.93,-247.17 472.93,-247.17 476.14,-245.77 471.67,-244.29 479.35,-244.37 479.35,-244.37\"/>\n",
"<text text-anchor=\"start\" x=\"357\" y=\"-287.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M182.63,-202.22C188.41,-200.69 194.95,-199.11 201,-198 269.27,-185.45 351.25,-180.59 391.4,-178.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"398.86,-178.56 391.99,-181.99 395.36,-178.7 391.86,-178.84 391.86,-178.84 391.86,-178.84 395.36,-178.7 391.73,-175.7 398.86,-178.56 398.86,-178.56\"/>\n",
"<text text-anchor=\"start\" x=\"281\" y=\"-189.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.77,-222.54C153.17,-232.91 156.25,-243 165,-243 171.7,-243 175.08,-237.08 175.12,-229.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"174.23,-222.54 178.23,-229.1 174.67,-226.01 175.1,-229.49 175.1,-229.49 175.1,-229.49 174.67,-226.01 171.98,-229.88 174.23,-222.54 174.23,-222.54\"/>\n",
"<text text-anchor=\"start\" x=\"132\" y=\"-246.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b &amp; !c</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#1f78b4\" stroke-width=\"2\" cx=\"301.5\" cy=\"-231\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"301.5\" y=\"-227.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M182.87,-204.5C202.53,-202.19 235.81,-200.17 263,-208 269.12,-209.76 275.23,-212.81 280.69,-216.13\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"286.76,-220.09 279.17,-218.91 283.83,-218.18 280.89,-216.27 280.89,-216.27 280.89,-216.27 283.83,-218.18 282.61,-213.63 286.76,-220.09 286.76,-220.09\"/>\n",
"<text text-anchor=\"start\" x=\"201\" y=\"-211.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b &amp; c</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;4 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>5&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M319.58,-231.53C353.83,-232.6 430.98,-235 470.56,-236.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"477.96,-236.47 470.86,-239.4 474.46,-236.36 470.96,-236.25 470.96,-236.25 470.96,-236.25 474.46,-236.36 471.06,-233.1 477.96,-236.47 477.96,-236.47\"/>\n",
"<text text-anchor=\"start\" x=\"413.5\" y=\"-238.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;1 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M316.77,-221.44C323.63,-217.05 332.07,-211.96 340,-208 357.28,-199.37 377.68,-191.44 392.99,-185.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"399.63,-183.53 394.1,-188.84 396.34,-184.7 393.04,-185.88 393.04,-185.88 393.04,-185.88 396.34,-184.7 391.98,-182.91 399.63,-183.53 399.63,-183.53\"/>\n",
"<text text-anchor=\"start\" x=\"340\" y=\"-211.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;2 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>5&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M283.3,-231.41C263.22,-231.48 229.18,-230.33 201,-223 196.59,-221.85 192.04,-220.18 187.74,-218.34\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"181.25,-215.37 188.93,-215.42 184.43,-216.83 187.62,-218.29 187.62,-218.29 187.62,-218.29 184.43,-216.83 186.31,-221.15 181.25,-215.37 181.25,-215.37\"/>\n",
"<text text-anchor=\"start\" x=\"213.5\" y=\"-249.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"<text text-anchor=\"start\" x=\"224\" y=\"-234.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.77,-49.54C153.17,-59.91 156.25,-70 165,-70 171.7,-70 175.08,-64.08 175.12,-56.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"174.23,-49.54 178.23,-56.1 174.67,-53.01 175.1,-56.49 175.1,-56.49 175.1,-56.49 174.67,-53.01 171.98,-56.88 174.23,-49.54 174.23,-49.54\"/>\n",
"<text text-anchor=\"start\" x=\"160.5\" y=\"-88.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"157\" y=\"-73.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aut = spot.translate('(b W Xa) & GF(c <-> Xb) | a', 'generic', 'det')\n",
"spot.highlight_languages(aut)\n",
"aut.show('.bas')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}