spot/tests/python/games.ipynb
Philipp Schlehuber e7e23d5ffc Adding option to solve parity games globally
Parity games have been solved semi-locally so far.
We deduced a strategy for the reachable part of the arena
This lead to some inconsistencies when not all state were
rachable.
Now you can chose to solve parity games truely globally.

* spot/twaalgos/game.cc, spot/twaalgos/game.hh: Here
* tests/python/games.ipynb: Test
2023-03-23 09:02:09 +01:00

2826 lines
181 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import spot\n",
"from buddy import bddtrue\n",
"spot.setup()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Support for games\n",
"\n",
"The support for games is currently quite rudimentary, as Spot currently only uses those games in `ltlsynt`.\n",
"\n",
"In essence, a game is just an ω-automaton with a property named `state-player` that stores the player owning each state. The players are named 0 and 1. The player owning a state can decide what the next transition from this state should be. The goal for player 1 is to force the play to be infinite and to satisfy the acceptance condition of the automaton, while the goal for player 0 is to prevent it by either forcing a finite play, or forcing an infinite play that does not satisfy the acceptance condition.\n",
"\n",
"The support is currently restricted to games that use:\n",
"- `t` acceptance: all infinite run are accepting, and player 0 can only win if it manages to force a finite play (this requires reaching states without successors).\n",
"- `parity` acceptance of any form (`max odd`, `max even`, `min odd`, `min even`): player 0 can win if the maximal (or minimal) value seen infinitely often is even (or odd)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Creating games from scratch\n",
"\n",
"Games can be [created like any automaton](https://spot.lrde.epita.fr/tut22.html). \n",
"Using `set_state_players()` will fix the state owners."
]
},
{
"cell_type": "code",
"execution_count": 2,
"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=\"495pt\" height=\"190pt\"\n",
" viewBox=\"0.00 0.00 495.00 190.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 186)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-186 491,-186 491,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"240.5\" y=\"-166.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"232.5\" y=\"-151.8\" font-family=\"Lato\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"64,-144 37,-126 64,-108 91,-126 64,-144\"/>\n",
"<text text-anchor=\"middle\" x=\"64\" y=\"-122.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.04,-126C1.93,-126 15.66,-126 29.98,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37,-126 30,-129.15 33.5,-126 30,-126 30,-126 30,-126 33.5,-126 30,-122.85 37,-126 37,-126\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"145\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"145\" y=\"-122.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=\"M82.53,-120.28C93.75,-119.1 108.43,-118.93 120.64,-119.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"127.86,-120.43 120.61,-122.94 124.38,-120.12 120.89,-119.8 120.89,-119.8 120.89,-119.8 124.38,-120.12 121.17,-116.66 127.86,-120.43 127.86,-120.43\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"145\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"145\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M78.05,-117.08C90.47,-108.59 109.36,-95.68 123.74,-85.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"129.6,-81.85 125.59,-88.4 126.71,-83.82 123.82,-85.8 123.82,-85.8 123.82,-85.8 126.71,-83.82 122.04,-83.2 129.6,-81.85 129.6,-81.85\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M127.86,-131.57C116.84,-132.84 102.04,-133.09 89.56,-132.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"82.53,-131.72 89.77,-129.16 86.02,-132.01 89.51,-132.3 89.51,-132.3 89.51,-132.3 86.02,-132.01 89.25,-135.44 82.53,-131.72 82.53,-131.72\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"226,-144 199,-126 226,-108 253,-126 226,-144\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-122.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M162.37,-120.41C173.4,-119.15 188.15,-118.92 200.56,-119.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.56,-120.29 200.32,-122.85 204.07,-120 200.58,-119.71 200.58,-119.71 200.58,-119.71 204.07,-120 200.84,-116.57 207.56,-120.29 207.56,-120.29\"/>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M160.49,-81.9C173.24,-90.62 191.89,-103.37 205.86,-112.92\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"211.91,-117.05 204.36,-115.7 209.02,-115.08 206.13,-113.1 206.13,-113.1 206.13,-113.1 209.02,-115.08 207.91,-110.5 211.91,-117.05 211.91,-117.05\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>4</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"226,-90 199,-72 226,-54 253,-72 226,-90\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M163.14,-72C171.54,-72 181.95,-72 191.82,-72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"198.87,-72 191.87,-75.15 195.37,-72 191.87,-72 191.87,-72 191.87,-72 195.37,-72 191.87,-68.85 198.87,-72 198.87,-72\"/>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"226,-36 199,-18 226,0 253,-18 226,-36\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M160.49,-62.1C173.24,-53.38 191.89,-40.63 205.86,-31.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"211.91,-26.95 207.91,-33.5 209.02,-28.92 206.13,-30.9 206.13,-30.9 206.13,-30.9 209.02,-28.92 204.36,-28.3 211.91,-26.95 211.91,-26.95\"/>\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=\"M207.56,-131.71C196.4,-132.89 181.78,-133.07 169.59,-132.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"162.37,-131.59 169.62,-129.08 165.85,-131.9 169.34,-132.22 169.34,-132.22 169.34,-132.22 165.85,-131.9 169.06,-135.35 162.37,-131.59 162.37,-131.59\"/>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"460,-90 433,-72 460,-54 487,-72 460,-90\"/>\n",
"<text text-anchor=\"middle\" x=\"460\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M246.38,-121.49C287.92,-111.82 385.57,-89.09 432.67,-78.13\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"439.51,-76.54 433.41,-81.19 436.1,-77.33 432.69,-78.12 432.69,-78.12 432.69,-78.12 436.1,-77.33 431.98,-75.06 439.51,-76.54 439.51,-76.54\"/>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"307\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"307\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">7</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=\"M244.53,-12.28C255.75,-11.1 270.43,-10.93 282.64,-11.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"289.86,-12.43 282.61,-14.94 286.38,-12.12 282.89,-11.8 282.89,-11.8 282.89,-11.8 286.38,-12.12 283.17,-8.66 289.86,-12.43 289.86,-12.43\"/>\n",
"</g>\n",
"<!-- 7&#45;&gt;6 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>7&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M289.86,-23.57C278.84,-24.84 264.04,-25.09 251.56,-24.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"244.53,-23.72 251.77,-21.16 248.02,-24.01 251.51,-24.3 251.51,-24.3 251.51,-24.3 248.02,-24.01 251.25,-27.44 244.53,-23.72 244.53,-23.72\"/>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"379\" cy=\"-49\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"379\" y=\"-45.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;8 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>7&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M323.88,-25.03C333.28,-29.2 345.33,-34.53 355.67,-39.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"362.18,-41.99 354.5,-42.04 358.98,-40.58 355.78,-39.16 355.78,-39.16 355.78,-39.16 358.98,-40.58 357.05,-36.28 362.18,-41.99 362.18,-41.99\"/>\n",
"</g>\n",
"<!-- 8&#45;&gt;5 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>8&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M396.37,-53.77C407.17,-56.91 421.54,-61.1 433.79,-64.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"440.72,-66.68 433.12,-67.75 437.36,-65.7 434,-64.72 434,-64.72 434,-64.72 437.36,-65.7 434.88,-61.7 440.72,-66.68 440.72,-66.68\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bdict = spot.make_bdd_dict();\n",
"game = spot.make_twa_graph(bdict)\n",
"game.new_states(9)\n",
"for (s, d) in ((0,1), (0, 3), \n",
" (1, 0), (1, 2),\n",
" (2, 1), (2, 5),\n",
" (3, 2), (3, 4), (3, 6),\n",
" (6, 7),\n",
" (7, 6), (7, 8),\n",
" (8, 5)):\n",
" game.new_edge(s, d, bddtrue)\n",
"spot.set_state_players(game, [True, False, True, False, True, True, True, False, False])\n",
"game.show('.g') # Use \"g\" to hide the irrelevant edge labels."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `set_state_players()` function takes a list of owner for each of the states in the automaton. In the output,\n",
"states from player 0 use circles, ellispes, or rectangle with rounded corners (mnemonic: 0 is round) while states from player 1 have a losanse shape (1 has only straight lines). \n",
"\n",
"\n",
"State ownership can also be manipulated by the following functions:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(True, False, True, False, True, True, True, False, False)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.get_state_players(game)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.get_state_player(game, 4)"
]
},
{
"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=\"495pt\" height=\"190pt\"\n",
" viewBox=\"0.00 0.00 495.00 190.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 186)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-186 491,-186 491,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"240.5\" y=\"-166.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"232.5\" y=\"-151.8\" font-family=\"Lato\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"64,-144 37,-126 64,-108 91,-126 64,-144\"/>\n",
"<text text-anchor=\"middle\" x=\"64\" y=\"-122.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.04,-126C1.93,-126 15.66,-126 29.98,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37,-126 30,-129.15 33.5,-126 30,-126 30,-126 30,-126 33.5,-126 30,-122.85 37,-126 37,-126\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"145\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"145\" y=\"-122.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=\"M82.53,-120.28C93.75,-119.1 108.43,-118.93 120.64,-119.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"127.86,-120.43 120.61,-122.94 124.38,-120.12 120.89,-119.8 120.89,-119.8 120.89,-119.8 124.38,-120.12 121.17,-116.66 127.86,-120.43 127.86,-120.43\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"145\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"145\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M78.05,-117.08C90.47,-108.59 109.36,-95.68 123.74,-85.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"129.6,-81.85 125.59,-88.4 126.71,-83.82 123.82,-85.8 123.82,-85.8 123.82,-85.8 126.71,-83.82 122.04,-83.2 129.6,-81.85 129.6,-81.85\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M127.86,-131.57C116.84,-132.84 102.04,-133.09 89.56,-132.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"82.53,-131.72 89.77,-129.16 86.02,-132.01 89.51,-132.3 89.51,-132.3 89.51,-132.3 86.02,-132.01 89.25,-135.44 82.53,-131.72 82.53,-131.72\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"226,-144 199,-126 226,-108 253,-126 226,-144\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-122.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M162.37,-120.41C173.4,-119.15 188.15,-118.92 200.56,-119.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.56,-120.29 200.32,-122.85 204.07,-120 200.58,-119.71 200.58,-119.71 200.58,-119.71 204.07,-120 200.84,-116.57 207.56,-120.29 207.56,-120.29\"/>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M160.49,-81.9C173.24,-90.62 191.89,-103.37 205.86,-112.92\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"211.91,-117.05 204.36,-115.7 209.02,-115.08 206.13,-113.1 206.13,-113.1 206.13,-113.1 209.02,-115.08 207.91,-110.5 211.91,-117.05 211.91,-117.05\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"226\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M163.14,-72C174.12,-72 188.52,-72 200.67,-72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.89,-72 200.89,-75.15 204.39,-72 200.89,-72 200.89,-72 200.89,-72 204.39,-72 200.89,-68.85 207.89,-72 207.89,-72\"/>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"226,-36 199,-18 226,0 253,-18 226,-36\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M160.49,-62.1C173.24,-53.38 191.89,-40.63 205.86,-31.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"211.91,-26.95 207.91,-33.5 209.02,-28.92 206.13,-30.9 206.13,-30.9 206.13,-30.9 209.02,-28.92 204.36,-28.3 211.91,-26.95 211.91,-26.95\"/>\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=\"M207.56,-131.71C196.4,-132.89 181.78,-133.07 169.59,-132.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"162.37,-131.59 169.62,-129.08 165.85,-131.9 169.34,-132.22 169.34,-132.22 169.34,-132.22 165.85,-131.9 169.06,-135.35 162.37,-131.59 162.37,-131.59\"/>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"460,-90 433,-72 460,-54 487,-72 460,-90\"/>\n",
"<text text-anchor=\"middle\" x=\"460\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M246.38,-121.49C287.92,-111.82 385.57,-89.09 432.67,-78.13\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"439.51,-76.54 433.41,-81.19 436.1,-77.33 432.69,-78.12 432.69,-78.12 432.69,-78.12 436.1,-77.33 431.98,-75.06 439.51,-76.54 439.51,-76.54\"/>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"307\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"307\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">7</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=\"M244.53,-12.28C255.75,-11.1 270.43,-10.93 282.64,-11.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"289.86,-12.43 282.61,-14.94 286.38,-12.12 282.89,-11.8 282.89,-11.8 282.89,-11.8 286.38,-12.12 283.17,-8.66 289.86,-12.43 289.86,-12.43\"/>\n",
"</g>\n",
"<!-- 7&#45;&gt;6 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>7&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M289.86,-23.57C278.84,-24.84 264.04,-25.09 251.56,-24.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"244.53,-23.72 251.77,-21.16 248.02,-24.01 251.51,-24.3 251.51,-24.3 251.51,-24.3 248.02,-24.01 251.25,-27.44 244.53,-23.72 244.53,-23.72\"/>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"379\" cy=\"-49\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"379\" y=\"-45.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;8 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>7&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M323.88,-25.03C333.28,-29.2 345.33,-34.53 355.67,-39.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"362.18,-41.99 354.5,-42.04 358.98,-40.58 355.78,-39.16 355.78,-39.16 355.78,-39.16 358.98,-40.58 357.05,-36.28 362.18,-41.99 362.18,-41.99\"/>\n",
"</g>\n",
"<!-- 8&#45;&gt;5 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>8&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M396.37,-53.77C407.17,-56.91 421.54,-61.1 433.79,-64.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"440.72,-66.68 433.12,-67.75 437.36,-65.7 434,-64.72 434,-64.72 434,-64.72 437.36,-65.7 434.88,-61.7 440.72,-66.68 440.72,-66.68\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.set_state_player(game, 4, False)\n",
"game.show('.g')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Solving a game\n",
"\n",
"Solving a game is done my calling `solve_game()`. This function actually dispatches to `solve_safety_game()` (if the acceptance is `t`) or to `solve_parity_game()` (if the acceptance is any parity condition). You may call these functions directly if desired, but using `solve_game()` makes it possible for future version of Spot to dispatch to some better function if we add some.\n",
"\n",
"These functions will attach two additional vectors into the game automaton: one vector stores the winner of each state, and one vector stores (memory-less) strategy for each state, i.e., the transition that should always be taken by the owner of this state in order to win. \n",
"\n",
"The return value of those functions is simply the winner for the initial state."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.solve_game(game)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calling the `highlight_strategy()` function can be used to decorate the `game` automaton using the winning regions and strategies. Below, green represent the winning region/strategy for player 1 and red those for player 0."
]
},
{
"cell_type": "code",
"execution_count": 7,
"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=\"495pt\" height=\"190pt\"\n",
" viewBox=\"0.00 0.00 495.00 190.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 186)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-186 491,-186 491,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"240.5\" y=\"-166.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"232.5\" y=\"-151.8\" font-family=\"Lato\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"64,-144 37,-126 64,-108 91,-126 64,-144\"/>\n",
"<text text-anchor=\"middle\" x=\"64\" y=\"-122.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.04,-126C1.93,-126 15.66,-126 29.98,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37,-126 30,-129.15 33.5,-126 30,-126 30,-126 30,-126 33.5,-126 30,-122.85 37,-126 37,-126\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"145\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"145\" y=\"-122.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=\"#33a02c\" stroke-width=\"2\" d=\"M82.53,-120.28C93.75,-119.1 108.43,-118.93 120.64,-119.78\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"127.86,-120.43 120.61,-122.94 124.33,-120.62 120.84,-120.3 120.89,-119.8 120.94,-119.3 124.42,-119.62 121.17,-116.66 127.86,-120.43 127.86,-120.43\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"145\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"145\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M78.05,-117.08C90.47,-108.59 109.36,-95.68 123.74,-85.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"129.6,-81.85 125.59,-88.4 126.71,-83.82 123.82,-85.8 123.82,-85.8 123.82,-85.8 126.71,-83.82 122.04,-83.2 129.6,-81.85 129.6,-81.85\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M127.86,-131.57C116.84,-132.84 102.04,-133.09 89.56,-132.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"82.53,-131.72 89.77,-129.16 86.02,-132.01 89.51,-132.3 89.51,-132.3 89.51,-132.3 86.02,-132.01 89.25,-135.44 82.53,-131.72 82.53,-131.72\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"226,-144 199,-126 226,-108 253,-126 226,-144\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-122.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M162.37,-120.41C173.4,-119.15 188.15,-118.92 200.56,-119.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.56,-120.29 200.32,-122.85 204.07,-120 200.58,-119.71 200.58,-119.71 200.58,-119.71 204.07,-120 200.84,-116.57 207.56,-120.29 207.56,-120.29\"/>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M160.49,-81.9C173.24,-90.62 191.89,-103.37 205.86,-112.92\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"211.91,-117.05 204.36,-115.7 209.02,-115.08 206.13,-113.1 206.13,-113.1 206.13,-113.1 209.02,-115.08 207.91,-110.5 211.91,-117.05 211.91,-117.05\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"226\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M163.14,-72C174.12,-72 188.52,-72 200.67,-72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.89,-72 200.89,-75.15 204.39,-72 200.89,-72 200.89,-72 200.89,-72 204.39,-72 200.89,-68.85 207.89,-72 207.89,-72\"/>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"226,-36 199,-18 226,0 253,-18 226,-36\"/>\n",
"<text text-anchor=\"middle\" x=\"226\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M160.49,-62.1C173.24,-53.38 191.89,-40.63 205.86,-31.08\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"211.91,-26.95 207.91,-33.5 209.31,-29.33 206.42,-31.31 206.13,-30.9 205.85,-30.48 208.74,-28.51 204.36,-28.3 211.91,-26.95 211.91,-26.95\"/>\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=\"#33a02c\" stroke-width=\"2\" d=\"M207.56,-131.71C196.4,-132.89 181.78,-133.07 169.59,-132.24\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"162.37,-131.59 169.62,-129.08 165.9,-131.41 169.39,-131.72 169.34,-132.22 169.3,-132.71 165.81,-132.4 169.06,-135.35 162.37,-131.59 162.37,-131.59\"/>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"460,-90 433,-72 460,-54 487,-72 460,-90\"/>\n",
"<text text-anchor=\"middle\" x=\"460\" y=\"-68.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M246.38,-121.49C287.92,-111.82 385.57,-89.09 432.67,-78.13\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"439.51,-76.54 433.41,-81.19 436.1,-77.33 432.69,-78.12 432.69,-78.12 432.69,-78.12 436.1,-77.33 431.98,-75.06 439.51,-76.54 439.51,-76.54\"/>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"307\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"307\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">7</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=\"M244.53,-12.28C255.75,-11.1 270.43,-10.93 282.64,-11.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"289.86,-12.43 282.61,-14.94 286.38,-12.12 282.89,-11.8 282.89,-11.8 282.89,-11.8 286.38,-12.12 283.17,-8.66 289.86,-12.43 289.86,-12.43\"/>\n",
"</g>\n",
"<!-- 7&#45;&gt;6 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>7&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M289.86,-23.57C278.84,-24.84 264.04,-25.09 251.56,-24.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"244.53,-23.72 251.77,-21.16 248.02,-24.01 251.51,-24.3 251.51,-24.3 251.51,-24.3 248.02,-24.01 251.25,-27.44 244.53,-23.72 244.53,-23.72\"/>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"379\" cy=\"-49\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"379\" y=\"-45.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;8 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>7&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M323.88,-25.03C333.28,-29.2 345.33,-34.53 355.67,-39.11\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"362.18,-41.99 354.5,-42.04 358.78,-41.03 355.58,-39.62 355.78,-39.16 355.98,-38.7 359.18,-40.12 357.05,-36.28 362.18,-41.99 362.18,-41.99\"/>\n",
"</g>\n",
"<!-- 8&#45;&gt;5 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>8&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M396.37,-53.77C407.17,-56.91 421.54,-61.1 433.79,-64.66\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"440.72,-66.68 433.12,-67.75 437.22,-66.18 433.86,-65.2 434,-64.72 434.14,-64.24 437.5,-65.22 434.88,-61.7 440.72,-66.68 440.72,-66.68\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.highlight_strategy(game)\n",
"game.show('.g')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Input/Output in HOA format\n",
"\n",
"An extension of the HOA format makes it possible to store the `state-player` property. This allows us to read the parity game constructed by `ltlsynt` using `spot.automaton()` like any other 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=\"553pt\" height=\"271pt\"\n",
" viewBox=\"0.00 0.00 552.58 270.53\" 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 266.53)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-266.53 548.58,-266.53 548.58,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"250.79\" y=\"-248.33\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"273.79\" y=\"-248.33\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"289.79\" y=\"-248.33\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"240.79\" y=\"-234.33\" font-family=\"Lato\" font-size=\"14.00\">[co&#45;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=\"-128.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-125.16\" 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,-128.86C2.79,-128.86 17.15,-128.86 30.63,-128.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-128.86 30.94,-132.01 34.44,-128.86 30.94,-128.86 30.94,-128.86 30.94,-128.86 34.44,-128.86 30.94,-125.71 37.94,-128.86 37.94,-128.86\"/>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"143.98,-119.86 121.02,-101.86 143.98,-83.86 166.94,-101.86 143.98,-119.86\"/>\n",
"<text text-anchor=\"middle\" x=\"143.98\" y=\"-98.16\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.87,-122C78.81,-119.57 85.65,-116.93 92,-114.86 100.68,-112.03 110.36,-109.43 118.93,-107.31\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"125.83,-105.64 119.76,-110.35 122.42,-106.46 119.02,-107.29 119.02,-107.29 119.02,-107.29 122.42,-106.46 118.28,-104.22 125.83,-105.64 125.83,-105.64\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-118.66\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"143.98,-173.86 121.02,-155.86 143.98,-137.86 166.94,-155.86 143.98,-173.86\"/>\n",
"<text text-anchor=\"middle\" x=\"143.98\" y=\"-152.16\" 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=\"M73.58,-134.07C86.83,-138.23 105.55,-144.11 120.21,-148.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"127.03,-150.85 119.41,-151.76 123.69,-149.81 120.36,-148.76 120.36,-148.76 120.36,-148.76 123.69,-149.81 121.3,-145.75 127.03,-150.85 127.03,-150.85\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-146.66\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"232.96\" cy=\"-116.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"232.96\" y=\"-113.16\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M163,-104.97C176.05,-107.22 193.83,-110.29 208.06,-112.74\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"215.14,-113.96 207.71,-115.88 211.69,-113.37 208.24,-112.77 208.24,-112.77 208.24,-112.77 211.69,-113.37 208.78,-109.67 215.14,-113.96 215.14,-113.96\"/>\n",
"<text text-anchor=\"start\" x=\"184.96\" y=\"-113.66\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"232.96\" cy=\"-55.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"232.96\" y=\"-52.16\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;3 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M158.19,-94.88C172.03,-87.55 194.01,-75.93 210.38,-67.28\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"216.57,-64 211.85,-70.06 213.47,-65.64 210.38,-67.27 210.38,-67.27 210.38,-67.27 213.47,-65.64 208.91,-64.49 216.57,-64 216.57,-64\"/>\n",
"<text text-anchor=\"start\" x=\"186.96\" y=\"-83.66\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"418.92\" cy=\"-187.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"418.92\" y=\"-184.16\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;2 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>6&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M159.42,-162.04C194.28,-176.56 286.13,-212.59 366.92,-224.86 373.95,-225.93 376.38,-227.67 382.92,-224.86 391.16,-221.31 398.38,-214.75 404.08,-208.13\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"408.5,-202.62 406.57,-210.06 406.31,-205.35 404.12,-208.08 404.12,-208.08 404.12,-208.08 406.31,-205.35 401.66,-206.11 408.5,-202.62 408.5,-202.62\"/>\n",
"<text text-anchor=\"start\" x=\"270.96\" y=\"-208.66\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;3 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>6&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M159.75,-150.14C171.09,-145.14 186.53,-136.93 196.96,-125.86 196.99,-125.83 210.6,-98.59 220.84,-78.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"224.03,-71.74 223.71,-79.41 222.46,-74.87 220.9,-78 220.9,-78 220.9,-78 222.46,-74.87 218.08,-76.59 224.03,-71.74 224.03,-71.74\"/>\n",
"<text text-anchor=\"start\" x=\"186.96\" y=\"-138.66\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>7</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"514.25,-137.86 491.29,-119.86 514.25,-101.86 537.21,-119.86 514.25,-137.86\"/>\n",
"<text text-anchor=\"middle\" x=\"514.25\" y=\"-116.16\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;7 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M251.01,-117.04C297.46,-117.54 426.64,-118.93 484.53,-119.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"491.56,-119.63 484.53,-122.7 488.06,-119.59 484.56,-119.55 484.56,-119.55 484.56,-119.55 488.06,-119.59 484.59,-116.4 491.56,-119.63 491.56,-119.63\"/>\n",
"<text text-anchor=\"start\" x=\"369.42\" y=\"-121.66\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"325.94,-183.86 302.98,-165.86 325.94,-147.86 348.89,-165.86 325.94,-183.86\"/>\n",
"<text text-anchor=\"middle\" x=\"325.94\" y=\"-162.16\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;8 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M249.39,-125.17C264.88,-133.51 288.77,-146.38 305.53,-155.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"311.79,-158.78 304.14,-158.24 308.71,-157.12 305.63,-155.46 305.63,-155.46 305.63,-155.46 308.71,-157.12 307.12,-152.69 311.79,-158.78 311.79,-158.78\"/>\n",
"<text text-anchor=\"start\" x=\"273.46\" y=\"-162.66\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"268.96\" y=\"-147.66\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;1 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>7&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M495.65,-116.11C470.71,-111 423.58,-102.12 382.92,-98.86 338.63,-95.32 287.24,-104.48 257.87,-111\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"250.89,-112.59 257.02,-107.96 254.3,-111.81 257.72,-111.03 257.72,-111.03 257.72,-111.03 254.3,-111.81 258.42,-114.1 250.89,-112.59 250.89,-112.59\"/>\n",
"<text text-anchor=\"middle\" x=\"374.92\" y=\"-102.66\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;2 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>8&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M338.12,-174.43C345.77,-179.74 356.39,-186.05 366.92,-188.86 375.61,-191.18 385.43,-191.5 394.12,-191.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"401.1,-190.51 394.36,-194.19 397.61,-190.78 394.12,-191.05 394.12,-191.05 394.12,-191.05 397.61,-190.78 393.87,-187.91 401.1,-190.51 401.1,-190.51\"/>\n",
"<text text-anchor=\"start\" x=\"370.42\" y=\"-209.66\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"366.92\" y=\"-194.66\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;7 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M434.09,-177.53C450.53,-165.56 477.65,-145.79 495.49,-132.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"501.6,-128.35 497.8,-135.02 498.77,-130.41 495.94,-132.47 495.94,-132.47 495.94,-132.47 498.77,-130.41 494.09,-129.92 501.6,-128.35 501.6,-128.35\"/>\n",
"<text text-anchor=\"start\" x=\"454.92\" y=\"-165.66\" font-family=\"Lato\" font-size=\"14.00\">!a</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=\"M406.32,-174.72C400.07,-168.65 391.82,-162.07 382.92,-158.86 372.14,-154.98 359.52,-156.1 348.99,-158.47\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"342.09,-160.27 348.07,-155.46 345.47,-159.39 348.86,-158.51 348.86,-158.51 348.86,-158.51 345.47,-159.39 349.65,-161.56 342.09,-160.27 342.09,-160.27\"/>\n",
"<text text-anchor=\"start\" x=\"371.42\" y=\"-177.66\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"366.92\" y=\"-162.66\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>9</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"325.94,-42.86 302.98,-24.86 325.94,-6.86 348.89,-24.86 325.94,-42.86\"/>\n",
"<text text-anchor=\"middle\" x=\"325.94\" y=\"-21.16\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;9 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M250.22,-50.32C264.76,-45.37 286.2,-38.06 302.39,-32.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"309.42,-30.15 303.81,-35.39 306.11,-31.28 302.79,-32.41 302.79,-32.41 302.79,-32.41 306.11,-31.28 301.78,-29.42 309.42,-30.15 309.42,-30.15\"/>\n",
"<text text-anchor=\"middle\" x=\"276.96\" y=\"-46.66\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;3 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>9&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M314.27,-15.58C302.73,-6.73 283.98,4.14 268.96,-3.86 257.42,-10 249.01,-21.82 243.33,-32.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"240.14,-39.19 240.37,-31.52 241.67,-36.05 243.2,-32.9 243.2,-32.9 243.2,-32.9 241.67,-36.05 246.03,-34.28 240.14,-39.19 240.14,-39.19\"/>\n",
"<text text-anchor=\"start\" x=\"272.96\" y=\"-22.66\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"268.96\" y=\"-7.66\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"418.92\" cy=\"-24.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"418.92\" y=\"-21.16\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;4 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>9&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M348.96,-24.86C362.36,-24.86 379.5,-24.86 393.34,-24.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"400.65,-24.86 393.65,-28.01 397.15,-24.86 393.65,-24.86 393.65,-24.86 393.65,-24.86 397.15,-24.86 393.65,-21.71 400.65,-24.86 400.65,-24.86\"/>\n",
"<text text-anchor=\"start\" x=\"368.92\" y=\"-28.66\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"514.25,-37.86 484.08,-19.86 514.25,-1.86 544.41,-19.86 514.25,-37.86\"/>\n",
"<text text-anchor=\"middle\" x=\"514.25\" y=\"-16.16\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;10 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M433.27,-13.43C439.44,-8.89 447.11,-4.2 454.92,-1.86 467.36,1.86 481.26,-2.11 492.37,-7.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"498.89,-10.55 491.22,-10.2 495.76,-8.97 492.64,-7.39 492.64,-7.39 492.64,-7.39 495.76,-8.97 494.06,-4.58 498.89,-10.55 498.89,-10.55\"/>\n",
"<text text-anchor=\"middle\" x=\"460.42\" y=\"-5.66\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;4 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>10&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M486.34,-21.3C473.06,-22.01 457.16,-22.87 444.25,-23.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"437.03,-23.94 443.86,-20.42 440.53,-23.76 444.02,-23.57 444.02,-23.57 444.02,-23.57 440.53,-23.76 444.19,-26.72 437.03,-23.94 437.03,-23.94\"/>\n",
"<text text-anchor=\"middle\" x=\"460.42\" y=\"-27.66\" 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 0x7fcbe436f840> >"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"game = spot.automaton(\"ltlsynt --ins=a --outs=b -f '!b & GFa <-> Gb' --print-game-hoa |\");\n",
"game"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the graphical output, player 0 is represented by circles (or ellipses or rounded rectangles depending on the situations), while player 1's states are diamond shaped. In the case of `ltlsynt`, player 0 plays the role of the environment, and player 1 plays the role of the controler.\n",
"\n",
"In the HOA output, a header `spot-state-player` (or `spot.state-player` in HOA 1.1) lists the owner of each state."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"HOA: v1\n",
"States: 11\n",
"Start: 0\n",
"AP: 2 \"b\" \"a\"\n",
"acc-name: co-Buchi\n",
"Acceptance: 1 Fin(0)\n",
"properties: trans-labels explicit-labels trans-acc complete\n",
"properties: deterministic\n",
"spot-state-player: 0 0 0 0 0 1 1 1 1 1 1\n",
"controllable-AP: 0\n",
"--BODY--\n",
"State: 0\n",
"[!1] 5\n",
"[1] 6\n",
"State: 1\n",
"[!1] 7\n",
"[1] 8 {0}\n",
"State: 2\n",
"[!1] 7\n",
"[1] 8 {0}\n",
"State: 3\n",
"[t] 9\n",
"State: 4\n",
"[t] 10\n",
"State: 5\n",
"[!0] 1\n",
"[0] 3\n",
"State: 6\n",
"[!0] 2\n",
"[0] 3\n",
"State: 7\n",
"[t] 1\n",
"State: 8\n",
"[t] 2 {0}\n",
"State: 9\n",
"[0] 3 {0}\n",
"[!0] 4\n",
"State: 10\n",
"[t] 4\n",
"--END--\n"
]
}
],
"source": [
"print(game.to_str('hoa'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here is the solution of this particular game."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.solve_parity_game(game)"
]
},
{
"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=\"553pt\" height=\"271pt\"\n",
" viewBox=\"0.00 0.00 552.58 270.53\" 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 266.53)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-266.53 548.58,-266.53 548.58,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"250.79\" y=\"-248.33\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"273.79\" y=\"-248.33\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"289.79\" y=\"-248.33\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"240.79\" y=\"-234.33\" font-family=\"Lato\" font-size=\"14.00\">[co&#45;Büchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"56\" cy=\"-128.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-125.16\" 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,-128.86C2.79,-128.86 17.15,-128.86 30.63,-128.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-128.86 30.94,-132.01 34.44,-128.86 30.94,-128.86 30.94,-128.86 30.94,-128.86 34.44,-128.86 30.94,-125.71 37.94,-128.86 37.94,-128.86\"/>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"143.98,-119.86 121.02,-101.86 143.98,-83.86 166.94,-101.86 143.98,-119.86\"/>\n",
"<text text-anchor=\"middle\" x=\"143.98\" y=\"-98.16\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.87,-122C78.81,-119.57 85.65,-116.93 92,-114.86 100.68,-112.03 110.36,-109.43 118.93,-107.31\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"125.83,-105.64 119.76,-110.35 122.42,-106.46 119.02,-107.29 119.02,-107.29 119.02,-107.29 122.42,-106.46 118.28,-104.22 125.83,-105.64 125.83,-105.64\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-118.66\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"143.98,-173.86 121.02,-155.86 143.98,-137.86 166.94,-155.86 143.98,-173.86\"/>\n",
"<text text-anchor=\"middle\" x=\"143.98\" y=\"-152.16\" 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=\"M73.58,-134.07C86.83,-138.23 105.55,-144.11 120.21,-148.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"127.03,-150.85 119.41,-151.76 123.69,-149.81 120.36,-148.76 120.36,-148.76 120.36,-148.76 123.69,-149.81 121.3,-145.75 127.03,-150.85 127.03,-150.85\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-146.66\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"232.96\" cy=\"-116.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"232.96\" y=\"-113.16\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M163,-104.97C176.05,-107.22 193.83,-110.29 208.06,-112.74\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"215.14,-113.96 207.71,-115.88 211.69,-113.37 208.24,-112.77 208.24,-112.77 208.24,-112.77 211.69,-113.37 208.78,-109.67 215.14,-113.96 215.14,-113.96\"/>\n",
"<text text-anchor=\"start\" x=\"184.96\" y=\"-113.66\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"232.96\" cy=\"-55.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"232.96\" y=\"-52.16\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;3 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M158.19,-94.88C172.03,-87.55 194.01,-75.93 210.38,-67.28\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"216.57,-64 211.85,-70.06 213.71,-66.08 210.61,-67.72 210.38,-67.27 210.14,-66.83 213.24,-65.2 208.91,-64.49 216.57,-64 216.57,-64\"/>\n",
"<text text-anchor=\"start\" x=\"186.96\" y=\"-83.66\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"418.92\" cy=\"-187.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"418.92\" y=\"-184.16\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;2 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>6&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M159.42,-162.04C194.28,-176.56 286.13,-212.59 366.92,-224.86 373.95,-225.93 376.38,-227.67 382.92,-224.86 391.16,-221.31 398.38,-214.75 404.08,-208.13\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"408.5,-202.62 406.57,-210.06 406.31,-205.35 404.12,-208.08 404.12,-208.08 404.12,-208.08 406.31,-205.35 401.66,-206.11 408.5,-202.62 408.5,-202.62\"/>\n",
"<text text-anchor=\"start\" x=\"270.96\" y=\"-208.66\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;3 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>6&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M159.75,-150.14C171.09,-145.14 186.53,-136.93 196.96,-125.86 196.99,-125.83 210.6,-98.59 220.84,-78.11\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"224.03,-71.74 223.71,-79.41 222.91,-75.09 221.34,-78.22 220.9,-78 220.45,-77.77 222.01,-74.64 218.08,-76.59 224.03,-71.74 224.03,-71.74\"/>\n",
"<text text-anchor=\"start\" x=\"186.96\" y=\"-138.66\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>7</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"514.25,-137.86 491.29,-119.86 514.25,-101.86 537.21,-119.86 514.25,-137.86\"/>\n",
"<text text-anchor=\"middle\" x=\"514.25\" y=\"-116.16\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;7 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M251.01,-117.04C297.46,-117.54 426.64,-118.93 484.53,-119.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"491.56,-119.63 484.53,-122.7 488.06,-119.59 484.56,-119.55 484.56,-119.55 484.56,-119.55 488.06,-119.59 484.59,-116.4 491.56,-119.63 491.56,-119.63\"/>\n",
"<text text-anchor=\"start\" x=\"369.42\" y=\"-121.66\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"325.94,-183.86 302.98,-165.86 325.94,-147.86 348.89,-165.86 325.94,-183.86\"/>\n",
"<text text-anchor=\"middle\" x=\"325.94\" y=\"-162.16\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;8 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M249.39,-125.17C264.88,-133.51 288.77,-146.38 305.53,-155.41\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"311.79,-158.78 304.14,-158.24 308.48,-157.56 305.39,-155.9 305.63,-155.46 305.87,-155.02 308.95,-156.68 307.12,-152.69 311.79,-158.78 311.79,-158.78\"/>\n",
"<text text-anchor=\"start\" x=\"273.46\" y=\"-162.66\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"268.96\" y=\"-147.66\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;1 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>7&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M495.65,-116.11C470.71,-111 423.58,-102.12 382.92,-98.86 338.63,-95.32 287.24,-104.48 257.87,-111\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"250.89,-112.59 257.02,-107.96 254.3,-111.81 257.72,-111.03 257.72,-111.03 257.72,-111.03 254.3,-111.81 258.42,-114.1 250.89,-112.59 250.89,-112.59\"/>\n",
"<text text-anchor=\"middle\" x=\"374.92\" y=\"-102.66\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;2 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>8&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M338.12,-174.43C345.77,-179.74 356.39,-186.05 366.92,-188.86 375.61,-191.18 385.43,-191.5 394.12,-191.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"401.1,-190.51 394.36,-194.19 397.61,-190.78 394.12,-191.05 394.12,-191.05 394.12,-191.05 397.61,-190.78 393.87,-187.91 401.1,-190.51 401.1,-190.51\"/>\n",
"<text text-anchor=\"start\" x=\"370.42\" y=\"-209.66\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"366.92\" y=\"-194.66\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;7 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M434.09,-177.53C450.53,-165.56 477.65,-145.79 495.49,-132.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"501.6,-128.35 497.8,-135.02 498.77,-130.41 495.94,-132.47 495.94,-132.47 495.94,-132.47 498.77,-130.41 494.09,-129.92 501.6,-128.35 501.6,-128.35\"/>\n",
"<text text-anchor=\"start\" x=\"454.92\" y=\"-165.66\" font-family=\"Lato\" font-size=\"14.00\">!a</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=\"#e31a1c\" stroke-width=\"2\" d=\"M406.32,-174.72C400.07,-168.65 391.82,-162.07 382.92,-158.86 372.14,-154.98 359.52,-156.1 348.99,-158.47\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"342.09,-160.27 348.07,-155.46 345.35,-158.9 348.74,-158.02 348.86,-158.51 348.99,-158.99 345.6,-159.87 349.65,-161.56 342.09,-160.27 342.09,-160.27\"/>\n",
"<text text-anchor=\"start\" x=\"371.42\" y=\"-177.66\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"366.92\" y=\"-162.66\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>9</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"325.94,-42.86 302.98,-24.86 325.94,-6.86 348.89,-24.86 325.94,-42.86\"/>\n",
"<text text-anchor=\"middle\" x=\"325.94\" y=\"-21.16\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;9 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M250.22,-50.32C264.76,-45.37 286.2,-38.06 302.39,-32.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"309.42,-30.15 303.81,-35.39 306.11,-31.28 302.79,-32.41 302.79,-32.41 302.79,-32.41 306.11,-31.28 301.78,-29.42 309.42,-30.15 309.42,-30.15\"/>\n",
"<text text-anchor=\"middle\" x=\"276.96\" y=\"-46.66\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;3 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>9&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M314.27,-15.58C302.73,-6.73 283.98,4.14 268.96,-3.86 257.42,-10 249.01,-21.82 243.33,-32.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"240.14,-39.19 240.37,-31.52 241.67,-36.05 243.2,-32.9 243.2,-32.9 243.2,-32.9 241.67,-36.05 246.03,-34.28 240.14,-39.19 240.14,-39.19\"/>\n",
"<text text-anchor=\"start\" x=\"272.96\" y=\"-22.66\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"268.96\" y=\"-7.66\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"418.92\" cy=\"-24.86\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"418.92\" y=\"-21.16\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;4 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>9&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M348.96,-24.86C362.36,-24.86 379.5,-24.86 393.34,-24.86\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"400.65,-24.86 393.65,-28.01 397.15,-25.36 393.65,-25.36 393.65,-24.86 393.65,-24.36 397.15,-24.36 393.65,-21.71 400.65,-24.86 400.65,-24.86\"/>\n",
"<text text-anchor=\"start\" x=\"368.92\" y=\"-28.66\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"514.25,-37.86 484.08,-19.86 514.25,-1.86 544.41,-19.86 514.25,-37.86\"/>\n",
"<text text-anchor=\"middle\" x=\"514.25\" y=\"-16.16\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;10 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M433.27,-13.43C439.44,-8.89 447.11,-4.2 454.92,-1.86 467.36,1.86 481.26,-2.11 492.37,-7.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"498.89,-10.55 491.22,-10.2 495.76,-8.97 492.64,-7.39 492.64,-7.39 492.64,-7.39 495.76,-8.97 494.06,-4.58 498.89,-10.55 498.89,-10.55\"/>\n",
"<text text-anchor=\"middle\" x=\"460.42\" y=\"-5.66\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;4 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>10&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M486.34,-21.3C473.06,-22.01 457.16,-22.87 444.25,-23.56\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"437.03,-23.94 443.86,-20.42 440.5,-23.26 444,-23.07 444.02,-23.57 444.05,-24.07 440.56,-24.26 444.19,-26.72 437.03,-23.94 437.03,-23.94\"/>\n",
"<text text-anchor=\"middle\" x=\"460.42\" y=\"-27.66\" 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 0x7fcbe436e9a0> >"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.highlight_strategy(game)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Input/Output in PGSolver format\n",
"\n",
"The automaton parser is also able to parse the [PGSolver](https://github.com/tcsprojects/pgsolver) format. Here are two examples from the manual of PGSolver. The support for C-style comments is not part of the PGSolver format.\n",
"\n",
"Note that we use diamond node for player 1, while PGSolver use those of player 0. Also in Spot the acceptance condition is what Player 1 should satisfy; player 0 has two way to not satisfy it: leading to a rejecting cycle, or to a state without successor. In PGSolver, the graph is assumed to be total (i.e. each state has a successor), so player 0 can only win by reaching a rejecting cycle, which is equivalent to a `parity max even` acceptance."
]
},
{
"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=\"698pt\" height=\"228pt\"\n",
" viewBox=\"0.00 0.00 698.00 228.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 224)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-224 694,-224 694,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"72\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"95\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6bf6ff\">❽</text>\n",
"<text text-anchor=\"start\" x=\"111\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"157\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#505050\">❼</text>\n",
"<text text-anchor=\"start\" x=\"173\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"215\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#c4c400\">❻</text>\n",
"<text text-anchor=\"start\" x=\"231\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"277\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</text>\n",
"<text text-anchor=\"start\" x=\"293\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"335\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"<text text-anchor=\"start\" x=\"351\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"397\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"413\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"455\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"471\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"517\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"533\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"571\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"587\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">))))))))</text>\n",
"<text text-anchor=\"start\" x=\"289.5\" y=\"-191.8\" font-family=\"Lato\" font-size=\"14.00\">[parity max odd 9]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M80.25,-167.01C80.25,-167.01 46.75,-142.99 46.75,-142.99 41.88,-139.5 41.88,-132.5 46.75,-129.01 46.75,-129.01 80.25,-104.99 80.25,-104.99 85.12,-101.5 94.88,-101.5 99.75,-104.99 99.75,-104.99 133.25,-129.01 133.25,-129.01 138.12,-132.5 138.12,-139.5 133.25,-142.99 133.25,-142.99 99.75,-167.01 99.75,-167.01 94.88,-170.5 85.12,-170.5 80.25,-167.01\"/>\n",
"<text text-anchor=\"start\" x=\"71.5\" y=\"-139.8\" font-family=\"Lato\" font-size=\"14.00\">Africa</text>\n",
"<text text-anchor=\"start\" x=\"82\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#c4c400\">❻</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.06,-136C2.06,-136 14.52,-136 29.77,-136\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"36.94,-136 29.94,-139.15 33.44,-136 29.94,-136 29.94,-136 29.94,-136 33.44,-136 29.94,-132.85 36.94,-136 36.94,-136\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>4</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M600.19,-178.8C600.19,-178.8 542.81,-151.2 542.81,-151.2 537.41,-148.6 537.41,-143.4 542.81,-140.8 542.81,-140.8 600.19,-113.2 600.19,-113.2 605.59,-110.6 616.41,-110.6 621.81,-113.2 621.81,-113.2 679.19,-140.8 679.19,-140.8 684.59,-143.4 684.59,-148.6 679.19,-151.2 679.19,-151.2 621.81,-178.8 621.81,-178.8 616.41,-181.4 605.59,-181.4 600.19,-178.8\"/>\n",
"<text text-anchor=\"start\" x=\"579.5\" y=\"-149.8\" font-family=\"Lato\" font-size=\"14.00\">Antarctica</text>\n",
"<text text-anchor=\"start\" x=\"603\" y=\"-134.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#e31a1c\">❺</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=\"black\" d=\"M137.52,-139.96C212.89,-150.81 366.34,-174.5 496,-161 510.18,-159.52 525.19,-157.04 539.5,-154.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"546.46,-153.11 540.16,-157.49 543.02,-153.75 539.58,-154.39 539.58,-154.39 539.58,-154.39 543.02,-153.75 539,-151.3 546.46,-153.11 546.46,-153.11\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M209,-99C209,-99 191,-99 191,-99 185,-99 179,-93 179,-87 179,-87 179,-73 179,-73 179,-67 185,-61 191,-61 191,-61 209,-61 209,-61 215,-61 221,-67 221,-73 221,-73 221,-87 221,-87 221,-93 215,-99 209,-99\"/>\n",
"<text text-anchor=\"start\" x=\"187\" y=\"-83.8\" font-family=\"Lato\" font-size=\"14.00\">Asia</text>\n",
"<text text-anchor=\"start\" x=\"192\" y=\"-68.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#505050\">❼</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=\"M116.59,-116.89C133.45,-106.96 155.45,-95.53 172.49,-87.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"178.98,-84.99 173.84,-90.69 175.78,-86.4 172.57,-87.81 172.57,-87.81 172.57,-87.81 175.78,-86.4 171.31,-84.92 178.98,-84.99 178.98,-84.99\"/>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M570.23,-164.47C548.47,-170.69 520.94,-176.4 496,-179 363.59,-192.79 206.38,-167.79 132.84,-150.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"125.99,-148.39 133.54,-147.01 129.38,-149.23 132.78,-150.06 132.78,-150.06 132.78,-150.06 129.38,-149.23 132.03,-153.12 125.99,-148.39 125.99,-148.39\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M178.7,-95.94C165.82,-103.81 148.69,-113.08 132.99,-120.83\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"126.36,-124.04 131.29,-118.15 129.51,-122.51 132.66,-120.99 132.66,-120.99 132.66,-120.99 129.51,-122.51 134.04,-123.82 126.36,-124.04 126.36,-124.04\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M217.67,-99.03C227.89,-109.28 241.89,-121.03 257,-127 350.27,-163.82 468.28,-161.38 541.45,-154.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"548.83,-154.1 542.15,-157.89 545.34,-154.43 541.86,-154.76 541.86,-154.76 541.86,-154.76 545.34,-154.43 541.57,-151.62 548.83,-154.1 548.83,-154.1\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>1</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M313.56,-112.08C313.56,-112.08 267.44,-85.92 267.44,-85.92 262.22,-82.96 262.22,-77.04 267.44,-74.08 267.44,-74.08 313.56,-47.92 313.56,-47.92 318.78,-44.96 329.22,-44.96 334.44,-47.92 334.44,-47.92 380.56,-74.08 380.56,-74.08 385.78,-77.04 385.78,-82.96 380.56,-85.92 380.56,-85.92 334.44,-112.08 334.44,-112.08 329.22,-115.04 318.78,-115.04 313.56,-112.08\"/>\n",
"<text text-anchor=\"start\" x=\"298.5\" y=\"-83.8\" font-family=\"Lato\" font-size=\"14.00\">America</text>\n",
"<text text-anchor=\"start\" x=\"316\" y=\"-68.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6bf6ff\">❽</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M221.15,-74.83C232.31,-73.79 246.86,-73.26 261.45,-73.25\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"268.6,-73.29 261.59,-76.4 265.1,-73.77 261.6,-73.75 261.6,-73.25 261.6,-72.75 265.1,-72.77 261.62,-70.1 268.6,-73.29 268.6,-73.29\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>3</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M484,-38C484,-38 439,-38 439,-38 433,-38 427,-32 427,-26 427,-26 427,-12 427,-12 427,-6 433,0 439,0 439,0 484,0 484,0 490,0 496,-6 496,-12 496,-12 496,-26 496,-26 496,-32 490,-38 484,-38\"/>\n",
"<text text-anchor=\"start\" x=\"435\" y=\"-22.8\" font-family=\"Lato\" font-size=\"14.00\">Australia</text>\n",
"<text text-anchor=\"start\" x=\"453.5\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#c4c400\">❻</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M211.36,-60.77C221.64,-47.44 238.52,-31.46 257,-24 310.09,-2.58 377.27,-2.63 419.58,-7.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"426.67,-8.79 419.31,-10.98 423.2,-8.33 419.73,-7.86 419.73,-7.86 419.73,-7.86 423.2,-8.33 420.15,-4.74 426.67,-8.79 426.67,-8.79\"/>\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=\"M372.06,-90.9C420.78,-102.18 497.05,-119.84 550.06,-132.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"557.05,-133.74 549.52,-135.23 553.64,-132.95 550.23,-132.16 550.23,-132.16 550.23,-132.16 553.64,-132.95 550.94,-129.09 557.05,-133.74 557.05,-133.74\"/>\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=\"M268.6,-86.71C254.61,-86.86 240.16,-86.54 228.22,-85.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"221.15,-85.17 228.37,-82.58 224.63,-85.44 228.12,-85.72 228.12,-85.72 228.12,-85.72 224.63,-85.44 227.87,-88.86 221.15,-85.17 221.15,-85.17\"/>\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=\"black\" d=\"M362.03,-63.33C380.03,-55.23 401.71,-45.47 420.14,-37.17\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"426.77,-34.19 421.68,-39.93 423.57,-35.62 420.38,-37.06 420.38,-37.06 420.38,-37.06 423.57,-35.62 419.09,-34.19 426.77,-34.19 426.77,-34.19\"/>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M484.58,-38.01C508.92,-58.97 548.34,-92.91 576.49,-117.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"581.96,-121.86 574.6,-119.68 579.31,-119.57 576.65,-117.29 576.65,-117.29 576.65,-117.29 579.31,-119.57 578.71,-114.9 581.96,-121.86 581.96,-121.86\"/>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M426.67,-21.43C385.09,-20.71 313.16,-19.34 257,-42 245.99,-46.44 235.55,-53.91 226.74,-61.16\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"221.19,-65.86 224.49,-58.93 223.54,-63.22 226.21,-60.96 226.53,-61.34 226.85,-61.72 224.18,-63.98 228.57,-63.74 221.19,-65.86 221.19,-65.86\"/>\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=\"697pt\" height=\"252pt\"\n",
" viewBox=\"0.00 0.00 697.00 252.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 248)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-248 693,-248 693,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"297\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"318\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"334\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"372\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"388\" y=\"-229.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"313\" y=\"-215.8\" font-family=\"Lato\" font-size=\"14.00\">[Streett 1]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M61,-76C61,-76 49,-76 49,-76 43,-76 37,-70 37,-64 37,-64 37,-50 37,-50 37,-44 43,-38 49,-38 49,-38 61,-38 61,-38 67,-38 73,-44 73,-50 73,-50 73,-64 73,-64 73,-70 67,-76 61,-76\"/>\n",
"<text text-anchor=\"start\" x=\"50.5\" y=\"-60.8\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"<text text-anchor=\"start\" x=\"47\" y=\"-45.8\" 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.15,-57C2.75,-57 16.68,-57 29.83,-57\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"36.98,-57 29.98,-60.15 33.48,-57 29.98,-57 29.98,-57 29.98,-57 33.48,-57 29.98,-53.85 36.98,-57 36.98,-57\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M133.27,-170.82C133.27,-170.82 116.73,-151.18 116.73,-151.18 112.86,-146.59 112.86,-137.41 116.73,-132.82 116.73,-132.82 133.27,-113.18 133.27,-113.18 137.14,-108.59 144.86,-108.59 148.73,-113.18 148.73,-113.18 165.27,-132.82 165.27,-132.82 169.14,-137.41 169.14,-146.59 165.27,-151.18 165.27,-151.18 148.73,-170.82 148.73,-170.82 144.86,-175.41 137.14,-175.41 133.27,-170.82\"/>\n",
"<text text-anchor=\"start\" x=\"136.5\" y=\"-145.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"133\" y=\"-130.8\" 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=\"black\" d=\"M73.4,-74.61C86.42,-87.78 104.29,-105.86 118.24,-119.98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"123.19,-124.99 116.03,-122.23 120.73,-122.5 118.27,-120.01 118.27,-120.01 118.27,-120.01 120.73,-122.5 120.51,-117.8 123.19,-124.99 123.19,-124.99\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M233,-109C233,-109 221,-109 221,-109 215,-109 209,-103 209,-97 209,-97 209,-83 209,-83 209,-77 215,-71 221,-71 221,-71 233,-71 233,-71 239,-71 245,-77 245,-83 245,-83 245,-97 245,-97 245,-103 239,-109 233,-109\"/>\n",
"<text text-anchor=\"start\" x=\"222.5\" y=\"-93.8\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"<text text-anchor=\"start\" x=\"219\" y=\"-78.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</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=\"#e31a1c\" stroke-width=\"2\" d=\"M73.24,-60.35C103.73,-66.27 167.26,-78.6 202.01,-85.34\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"208.97,-86.69 201.5,-88.45 205.44,-86.52 202,-85.85 202.1,-85.36 202.19,-84.87 205.63,-85.54 202.7,-82.27 208.97,-86.69 208.97,-86.69\"/>\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=\"M162.76,-129.15C174.84,-121.67 190.11,-112.22 202.61,-104.48\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"208.87,-100.61 204.57,-106.97 205.89,-102.45 202.91,-104.29 202.91,-104.29 202.91,-104.29 205.89,-102.45 201.26,-101.61 208.87,-100.61 208.87,-100.61\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M305.27,-170.82C305.27,-170.82 288.73,-151.18 288.73,-151.18 284.86,-146.59 284.86,-137.41 288.73,-132.82 288.73,-132.82 305.27,-113.18 305.27,-113.18 309.14,-108.59 316.86,-108.59 320.73,-113.18 320.73,-113.18 337.27,-132.82 337.27,-132.82 341.14,-137.41 341.14,-146.59 337.27,-151.18 337.27,-151.18 320.73,-170.82 320.73,-170.82 316.86,-175.41 309.14,-175.41 305.27,-170.82\"/>\n",
"<text text-anchor=\"start\" x=\"308.5\" y=\"-145.8\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"<text text-anchor=\"start\" x=\"305\" y=\"-130.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M173.18,-142C201.49,-142 243.33,-142 273.67,-142\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"280.73,-142 273.73,-145.15 277.23,-142.5 273.73,-142.5 273.73,-142 273.73,-141.5 277.23,-141.5 273.73,-138.85 280.73,-142 280.73,-142\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M245.4,-100.77C256.89,-107.88 272.15,-117.33 285.17,-125.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"291.36,-129.22 283.75,-128.21 288.38,-127.38 285.4,-125.54 285.4,-125.54 285.4,-125.54 288.38,-127.38 287.06,-122.86 291.36,-129.22 291.36,-129.22\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M405,-109C405,-109 393,-109 393,-109 387,-109 381,-103 381,-97 381,-97 381,-83 381,-83 381,-77 387,-71 393,-71 393,-71 405,-71 405,-71 411,-71 417,-77 417,-83 417,-83 417,-97 417,-97 417,-103 411,-109 405,-109\"/>\n",
"<text text-anchor=\"start\" x=\"394.5\" y=\"-93.8\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"<text text-anchor=\"start\" x=\"391\" y=\"-78.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M245.24,-90C275.61,-90 338.73,-90 373.58,-90\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"380.97,-90 373.97,-93.15 377.47,-90.5 373.97,-90.5 373.97,-90 373.97,-89.5 377.47,-89.5 373.97,-86.85 380.97,-90 380.97,-90\"/>\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=\"M334.76,-129.15C346.84,-121.67 362.11,-112.22 374.61,-104.48\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"380.87,-100.61 376.57,-106.97 377.89,-102.45 374.91,-104.29 374.91,-104.29 374.91,-104.29 377.89,-102.45 373.26,-101.61 380.87,-100.61 380.87,-100.61\"/>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M477.27,-170.82C477.27,-170.82 460.73,-151.18 460.73,-151.18 456.86,-146.59 456.86,-137.41 460.73,-132.82 460.73,-132.82 477.27,-113.18 477.27,-113.18 481.14,-108.59 488.86,-108.59 492.73,-113.18 492.73,-113.18 509.27,-132.82 509.27,-132.82 513.14,-137.41 513.14,-146.59 509.27,-151.18 509.27,-151.18 492.73,-170.82 492.73,-170.82 488.86,-175.41 481.14,-175.41 477.27,-170.82\"/>\n",
"<text text-anchor=\"start\" x=\"480.5\" y=\"-145.8\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"<text text-anchor=\"start\" x=\"477\" y=\"-130.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;5 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M345.18,-142C373.49,-142 415.33,-142 445.67,-142\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"452.73,-142 445.73,-145.15 449.23,-142.5 445.73,-142.5 445.73,-142 445.73,-141.5 449.23,-141.5 445.73,-138.85 452.73,-142 452.73,-142\"/>\n",
"</g>\n",
"<!-- 4&#45;&gt;5 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M417.4,-100.77C428.89,-107.88 444.15,-117.33 457.17,-125.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"463.36,-129.22 455.75,-128.21 460.38,-127.38 457.4,-125.54 457.4,-125.54 457.4,-125.54 460.38,-127.38 459.06,-122.86 463.36,-129.22 463.36,-129.22\"/>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M577,-104C577,-104 565,-104 565,-104 559,-104 553,-98 553,-92 553,-92 553,-78 553,-78 553,-72 559,-66 565,-66 565,-66 577,-66 577,-66 583,-66 589,-72 589,-78 589,-78 589,-92 589,-92 589,-98 583,-104 577,-104\"/>\n",
"<text text-anchor=\"start\" x=\"566.5\" y=\"-88.8\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"<text text-anchor=\"start\" x=\"563\" y=\"-73.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</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=\"#e31a1c\" stroke-width=\"2\" d=\"M417.24,-89.49C447.61,-88.6 510.73,-86.74 545.58,-85.72\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"552.97,-85.5 546.07,-88.86 549.49,-86.1 545.99,-86.21 545.97,-85.71 545.96,-85.21 549.46,-85.1 545.88,-82.56 552.97,-85.5 552.97,-85.5\"/>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M505.91,-128.49C518.16,-120.17 533.93,-109.47 546.76,-100.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"552.79,-96.68 548.77,-103.21 549.9,-98.64 547,-100.61 547,-100.61 547,-100.61 549.9,-98.64 545.23,-98 552.79,-96.68 552.79,-96.68\"/>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<path fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M649.27,-146.82C649.27,-146.82 632.73,-127.18 632.73,-127.18 628.86,-122.59 628.86,-113.41 632.73,-108.82 632.73,-108.82 649.27,-89.18 649.27,-89.18 653.14,-84.59 660.86,-84.59 664.73,-89.18 664.73,-89.18 681.27,-108.82 681.27,-108.82 685.14,-113.41 685.14,-122.59 681.27,-127.18 681.27,-127.18 664.73,-146.82 664.73,-146.82 660.86,-151.41 653.14,-151.41 649.27,-146.82\"/>\n",
"<text text-anchor=\"start\" x=\"652.5\" y=\"-121.8\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"<text text-anchor=\"start\" x=\"649\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;7 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M514.07,-138.04C543.32,-133.91 589.21,-127.43 620.85,-122.96\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"628.17,-121.93 621.68,-126.03 624.77,-122.91 621.31,-123.4 621.24,-122.91 621.17,-122.41 624.63,-121.92 620.8,-119.79 628.17,-121.93 628.17,-121.93\"/>\n",
"</g>\n",
"<!-- 6&#45;&gt;0 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>6&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M552.57,-76.81C522.26,-63.35 457.57,-38 400,-38 226,-38 226,-38 226,-38 173.82,-38 113.18,-46.95 80.28,-52.57\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"73.3,-53.78 79.66,-49.48 76.67,-52.69 80.12,-52.09 80.2,-52.58 80.29,-53.07 76.84,-53.67 80.74,-55.68 73.3,-53.78 73.3,-53.78\"/>\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=\"M589.4,-91.84C599.95,-95.98 613.68,-101.37 625.94,-106.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"632.56,-108.79 624.9,-109.16 629.31,-107.51 626.05,-106.23 626.05,-106.23 626.05,-106.23 629.31,-107.51 627.2,-103.3 632.56,-108.79 632.56,-108.79\"/>\n",
"</g>\n",
"<!-- 7&#45;&gt;0 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>7&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M641.33,-98.25C614.52,-64.66 554.08,0 486,0 226,0 226,0 226,0 171.36,0 111.74,-26.79 79.64,-43.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"73.22,-47.07 77.91,-40.99 76.31,-45.42 79.4,-43.77 79.4,-43.77 79.4,-43.77 76.31,-45.42 80.88,-46.55 73.22,-47.07 73.22,-47.07\"/>\n",
"</g>\n",
"<!-- 7&#45;&gt;1 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>7&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M638.75,-134.51C609.71,-160.49 548.11,-208 486,-208 312,-208 312,-208 312,-208 257.98,-208 200.45,-178.68 168.09,-159.13\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"161.96,-155.36 169.57,-156.34 165.2,-156.76 168.18,-158.6 167.92,-159.02 167.66,-159.45 164.68,-157.62 166.27,-161.71 161.96,-155.36 161.96,-155.36\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"a,b = spot.automata(\"\"\"\n",
"parity 4; /* Example 6 in the manual for PGSolver 4.1 */\n",
"0 6 1 4,2 \"Africa\";\n",
"4 5 1 0 \"Antarctica\";\n",
"1 8 1 2,4,3 \"America\";\n",
"3 6 0 4,2 \"Australia\";\n",
"2 7 0 3,1,0,4 \"Asia\";\n",
"parity 8; /* Example 7 in the manual for PGSolver 4.1 */\n",
"0 0 0 1,2;\n",
"1 1 1 2,3;\n",
"2 0 0 3,4;\n",
"3 1 1 4,5;\n",
"4 0 0 5,6;\n",
"5 1 1 6,7;\n",
"6 0 0 7,0;\n",
"7 1 1 0,1;\n",
"\"\"\")\n",
"spot.solve_game(a)\n",
"spot.highlight_strategy(a)\n",
"spot.solve_game(b)\n",
"spot.highlight_strategy(b)\n",
"display(a.show('.g'), b.show('.g'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To output a parity-game in PG-solver format, use `to_str('pg')`."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"parity 4;\n",
"0 6 1 4,2 \"Africa\";\n",
"2 7 0 3,1,0,4 \"Asia\";\n",
"4 5 1 0 \"Antarctica\";\n",
"1 8 1 2,4,3 \"America\";\n",
"3 6 0 4,2 \"Australia\";\n",
"parity 7;\n",
"0 0 0 1,2;\n",
"2 0 0 3,4;\n",
"4 0 0 5,6;\n",
"6 0 0 7,0;\n",
"7 1 1 0,1;\n",
"1 1 1 2,3;\n",
"3 1 1 4,5;\n",
"5 1 1 6,7;\n",
"\n"
]
}
],
"source": [
"print(a.to_str('pg') + b.to_str('pg'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Global vs local solver\n",
"\n",
"The parity game solver now supports \"local\" and global solutions.\n",
"\n",
"- \"Local\" solutions are the ones computed so far. A strategy is only computed for the part of the automaton that is rachable from the initial state\n",
"- Global solutions can now be obtained by setting the argument \"solve_globally\" to true. In this case a strategy will be computed even for states not reachable in the original automaton.\n"
]
},
{
"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=\"334pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 334.23 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.7092198581560284 0.7092198581560284) rotate(0) translate(4 502)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-502 465.79,-502 465.79,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"210.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"231.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"247.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"209.39\" y=\"-469.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=\"134.11\" cy=\"-98\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-94.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=\"M31.41,-112.99C33.49,-112.68 79.37,-105.92 108.79,-101.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"115.88,-100.54 109.41,-104.68 112.41,-101.05 108.95,-101.56 108.95,-101.56 108.95,-101.56 112.41,-101.05 108.49,-98.44 115.88,-100.54 115.88,-100.54\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"230.89,-170 207.93,-152 230.89,-134 253.85,-152 230.89,-170\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-148.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=\"M150.34,-106.68C166.84,-116.08 193.18,-131.09 210.99,-141.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"217.13,-144.73 209.49,-144 214.09,-143 211.05,-141.27 211.05,-141.27 211.05,-141.27 214.09,-143 212.61,-138.53 217.13,-144.73 217.13,-144.73\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-128.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"230.89,-116 207.93,-98 230.89,-80 253.85,-98 230.89,-116\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-94.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=\"M152.5,-98C165.82,-98 184.51,-98 200.18,-98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.6,-98 200.6,-101.15 204.1,-98 200.6,-98 200.6,-98 200.6,-98 204.1,-98 200.6,-94.85 207.6,-98 207.6,-98\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"334.67\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">3</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=\"M246.04,-145.46C263.02,-137.62 291.69,-124.39 311.59,-115.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"317.97,-112.25 312.94,-118.04 314.79,-113.72 311.62,-115.19 311.62,-115.19 311.62,-115.19 314.79,-113.72 310.3,-112.33 317.97,-112.25 317.97,-112.25\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-132.8\" font-family=\"Lato\" font-size=\"14.00\">1</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=\"M252.49,-99.42C268.96,-100.55 292.08,-102.14 309.44,-103.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"316.49,-103.82 309.29,-106.48 312.99,-103.58 309.5,-103.34 309.5,-103.34 309.5,-103.34 312.99,-103.58 309.72,-100.2 316.49,-103.82 316.49,-103.82\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"431.45,-92 408.5,-74 431.45,-56 454.41,-74 431.45,-92\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-70.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.18,-99.6C367.59,-94.56 390.71,-87 407.83,-81.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"414.76,-79.13 409.09,-84.3 411.44,-80.22 408.11,-81.31 408.11,-81.31 408.11,-81.31 411.44,-80.22 407.13,-78.31 414.76,-79.13 414.76,-79.13\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-95.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M412.27,-70.94C373.02,-64.94 277.67,-53.67 200.56,-71 185.48,-74.39 169.43,-80.96 157,-86.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"150.49,-89.9 155.44,-84.03 153.65,-88.38 156.8,-86.87 156.8,-86.87 156.8,-86.87 153.65,-88.38 158.16,-89.71 150.49,-89.9 150.49,-89.9\"/>\n",
"<text text-anchor=\"start\" x=\"282.72\" y=\"-80.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"279.22\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"30.33,-63 7.37,-45 30.33,-27 53.29,-45 30.33,-63\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-41.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;0 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>5&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M44.64,-51.93C61.66,-60.79 91.34,-76.25 111.59,-86.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"117.81,-90.03 110.15,-89.59 114.71,-88.41 111.6,-86.8 111.6,-86.8 111.6,-86.8 114.71,-88.41 113.06,-84 117.81,-90.03 117.81,-90.03\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-81.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"134.11\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.14,-40.54C64.89,-36.1 90.75,-29.24 109.54,-24.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"116.62,-22.38 110.66,-27.22 113.24,-23.27 109.85,-24.17 109.85,-24.17 109.85,-24.17 113.24,-23.27 109.04,-21.13 116.62,-22.38 116.62,-22.38\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-36.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;5 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>6&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M117.05,-11.84C106.03,-8.52 91.19,-5.87 78.66,-10 66.52,-14 54.94,-22.45 46.27,-30.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"40.77,-35.1 43.79,-28.05 43.35,-32.74 45.92,-30.37 45.92,-30.37 45.92,-30.37 43.35,-32.74 48.05,-32.69 40.77,-35.1 40.77,-35.1\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-13.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=\"134.11\" cy=\"-244\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-240.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"230.89,-316 207.93,-298 230.89,-280 253.85,-298 230.89,-316\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-294.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;8 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>7&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M150.34,-252.68C166.84,-262.08 193.18,-277.09 210.99,-287.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"217.13,-290.73 209.49,-290 214.09,-289 211.05,-287.27 211.05,-287.27 211.05,-287.27 214.09,-289 212.61,-284.53 217.13,-290.73 217.13,-290.73\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-274.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"230.89,-262 207.93,-244 230.89,-226 253.85,-244 230.89,-262\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-240.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;9 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>7&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M152.5,-244C165.82,-244 184.51,-244 200.18,-244\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.6,-244 200.6,-247.15 204.1,-244 200.6,-244 200.6,-244 200.6,-244 204.1,-244 200.6,-240.85 207.6,-244 207.6,-244\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-247.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"334.67\" cy=\"-251\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-247.3\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;10 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>8&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M246.04,-291.46C262.34,-283.94 289.39,-271.45 309.13,-262.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"315.52,-259.38 310.49,-265.18 312.34,-260.85 309.17,-262.32 309.17,-262.32 309.17,-262.32 312.34,-260.85 307.85,-259.46 315.52,-259.38 315.52,-259.38\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-278.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;10 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>9&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M252.49,-245.42C267.8,-246.47 288.87,-247.92 305.71,-249.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"313.11,-249.59 305.91,-252.25 309.62,-249.35 306.12,-249.11 306.12,-249.11 306.12,-249.11 309.62,-249.35 306.34,-245.96 313.11,-249.59 313.11,-249.59\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-251.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"431.45,-233 401.29,-215 431.45,-197 461.62,-215 431.45,-233\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-211.3\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;11 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>10&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M354.4,-243.89C369.13,-238.29 389.77,-230.45 405.84,-224.35\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"412.41,-221.85 406.98,-227.28 409.14,-223.1 405.87,-224.34 405.87,-224.34 405.87,-224.34 409.14,-223.1 404.75,-221.39 412.41,-221.85 412.41,-221.85\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;7 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>11&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M406.24,-211.9C363.91,-207.22 273.97,-200.5 200.56,-217 185.48,-220.39 169.43,-226.96 157,-232.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"150.49,-235.9 155.44,-230.03 153.65,-234.38 156.8,-232.87 156.8,-232.87 156.8,-232.87 153.65,-234.38 158.16,-235.71 150.49,-235.9 150.49,-235.9\"/>\n",
"<text text-anchor=\"start\" x=\"282.72\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"279.22\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>12</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"30.33,-224 0.17,-206 30.33,-188 60.5,-206 30.33,-224\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-202.3\" font-family=\"Lato\" font-size=\"14.00\">12</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;7 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>12&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.53,-212.79C66.49,-219.13 91.85,-228.6 110.19,-235.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"117.08,-238.02 109.42,-238.52 113.8,-236.79 110.53,-235.57 110.53,-235.57 110.53,-235.57 113.8,-236.79 111.63,-232.62 117.08,-238.02 117.08,-238.02\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-232.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>13</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"134.11\" cy=\"-179\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-175.3\" font-family=\"Lato\" font-size=\"14.00\">13</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;13 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>12&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.93,-200.54C67.58,-196.38 89.25,-190.64 106.26,-186.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"113.24,-184.27 107.28,-189.11 109.86,-185.17 106.47,-186.07 106.47,-186.07 106.47,-186.07 109.86,-185.17 105.67,-183.02 113.24,-184.27 113.24,-184.27\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-196.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;12 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>13&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M114.35,-171.49C103.69,-168.3 90.19,-166.11 78.66,-170 66.9,-173.97 55.74,-182.15 47.22,-189.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"41.77,-194.79 44.74,-187.72 44.33,-192.41 46.89,-190.02 46.89,-190.02 46.89,-190.02 44.33,-192.41 49.04,-192.33 41.77,-194.79 41.77,-194.79\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-173.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>14</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"134.11\" cy=\"-390\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">14</text>\n",
"</g>\n",
"<!-- 15 -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>15</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"230.89,-462 200.73,-444 230.89,-426 261.06,-444 230.89,-462\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-440.3\" font-family=\"Lato\" font-size=\"14.00\">15</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;15 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>14&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M152.5,-399.9C168.25,-408.88 191.53,-422.14 208.44,-431.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"214.81,-435.4 207.16,-434.68 211.76,-433.67 208.72,-431.94 208.72,-431.94 208.72,-431.94 211.76,-433.67 210.28,-429.2 214.81,-435.4 214.81,-435.4\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-420.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 16 -->\n",
"<g id=\"node18\" class=\"node\">\n",
"<title>16</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"230.89,-408 200.73,-390 230.89,-372 261.06,-390 230.89,-408\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">16</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;16 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>14&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.68,-390C166.6,-390 180.36,-390 193.05,-390\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"200.37,-390 193.37,-393.15 196.87,-390 193.37,-390 193.37,-390 193.37,-390 196.87,-390 193.37,-386.85 200.37,-390 200.37,-390\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-393.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 17 -->\n",
"<g id=\"node19\" class=\"node\">\n",
"<title>17</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"334.67\" cy=\"-390\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">17</text>\n",
"</g>\n",
"<!-- 15&#45;&gt;17 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>15&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M247.35,-435.8C263.94,-427 290.5,-412.91 309.78,-402.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"316.01,-399.37 311.31,-405.43 312.92,-401.01 309.83,-402.65 309.83,-402.65 309.83,-402.65 312.92,-401.01 308.35,-399.87 316.01,-399.37 316.01,-399.37\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-421.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;17 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>16&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M261.06,-390C275.27,-390 292.25,-390 306.22,-390\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"313.22,-390 306.22,-393.15 309.72,-390 306.22,-390 306.22,-390 306.22,-390 309.72,-390 306.22,-386.85 313.22,-390 313.22,-390\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-393.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 18 -->\n",
"<g id=\"node20\" class=\"node\">\n",
"<title>18</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"431.45,-378 401.29,-360 431.45,-342 461.62,-360 431.45,-378\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-356.3\" font-family=\"Lato\" font-size=\"14.00\">18</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;18 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>17&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M355.31,-383.78C369.51,-379.29 388.85,-373.17 404.34,-368.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"411.16,-366.11 405.44,-371.22 407.83,-367.16 404.49,-368.22 404.49,-368.22 404.49,-368.22 407.83,-367.16 403.54,-365.21 411.16,-366.11 411.16,-366.11\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-380.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 18&#45;&gt;14 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>18&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M405.63,-357.3C363.12,-353.35 273.88,-347.97 200.56,-363 186.24,-365.94 171.09,-371.97 158.98,-377.6\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"152.59,-380.66 157.54,-374.79 155.75,-379.15 158.9,-377.63 158.9,-377.63 158.9,-377.63 155.75,-379.15 160.26,-380.48 152.59,-380.66 152.59,-380.66\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-356.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 19 -->\n",
"<g id=\"node21\" class=\"node\">\n",
"<title>19</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"30.33,-370 0.17,-352 30.33,-334 60.5,-352 30.33,-370\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-348.3\" font-family=\"Lato\" font-size=\"14.00\">19</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;14 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>19&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.53,-358.79C65.58,-364.79 89.16,-373.59 107.18,-380.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"114.04,-382.88 106.38,-383.38 110.76,-381.65 107.48,-380.43 107.48,-380.43 107.48,-380.43 110.76,-381.65 108.58,-377.48 114.04,-382.88 114.04,-382.88\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-378.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 20 -->\n",
"<g id=\"node22\" class=\"node\">\n",
"<title>20</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"134.11\" cy=\"-318\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-314.3\" font-family=\"Lato\" font-size=\"14.00\">20</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;20 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>19&#45;&gt;20</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M50.48,-345.6C66.44,-340.27 89.34,-332.62 106.99,-326.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"113.71,-324.48 108.07,-329.69 110.39,-325.59 107.07,-326.7 107.07,-326.7 107.07,-326.7 110.39,-325.59 106.07,-323.71 113.71,-324.48 113.71,-324.48\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-339.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 20&#45;&gt;19 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>20&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M118.61,-305.5C107.54,-297.55 91.98,-289.82 78.66,-296 62.59,-303.46 50,-319.37 41.86,-332.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"38.22,-338.41 39.11,-330.78 40.02,-335.4 41.82,-332.4 41.82,-332.4 41.82,-332.4 40.02,-335.4 44.52,-334.02 38.22,-338.41 38.22,-338.41\"/>\n",
"<text text-anchor=\"start\" x=\"82.16\" y=\"-314.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"78.66\" y=\"-299.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 0x7fcbe4382370> >"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"arena = spot.make_twa_graph()\n",
"\n",
"arena.new_states(3*7)\n",
"arena.set_buchi()\n",
"\n",
"edges = [(0,1), (0,2), (1,3), (2,3), (3,4), (4,0), (5,0), (5,6), (6,5)]\n",
"\n",
"for src, dst in edges:\n",
" arena.new_edge(src, dst, bddtrue, [0] if src == 4 else [])\n",
" arena.new_edge(src + 7, dst + 7, bddtrue, [0] if src == 4 else [])\n",
" arena.new_edge(src + 14, dst + 14, bddtrue, [0] if src == 6 else [])\n",
"\n",
"arena.set_state_players(3*[False, True, True, False, True, True, False])\n",
"arena"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(0, 7, 10, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\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=\"334pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 334.23 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.7092198581560284 0.7092198581560284) rotate(0) translate(4 502)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-502 465.79,-502 465.79,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"210.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"231.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"247.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"209.39\" y=\"-469.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=\"#33a02c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-98\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-94.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=\"M31.41,-112.99C33.49,-112.68 79.37,-105.92 108.79,-101.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"115.88,-100.54 109.41,-104.68 112.41,-101.05 108.95,-101.56 108.95,-101.56 108.95,-101.56 112.41,-101.05 108.49,-98.44 115.88,-100.54 115.88,-100.54\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"230.89,-170 207.93,-152 230.89,-134 253.85,-152 230.89,-170\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-148.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=\"M150.34,-106.68C166.84,-116.08 193.18,-131.09 210.99,-141.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"217.13,-144.73 209.49,-144 214.09,-143 211.05,-141.27 211.05,-141.27 211.05,-141.27 214.09,-143 212.61,-138.53 217.13,-144.73 217.13,-144.73\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-128.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"230.89,-116 207.93,-98 230.89,-80 253.85,-98 230.89,-116\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-94.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=\"M152.5,-98C165.82,-98 184.51,-98 200.18,-98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.6,-98 200.6,-101.15 204.1,-98 200.6,-98 200.6,-98 200.6,-98 204.1,-98 200.6,-94.85 207.6,-98 207.6,-98\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"334.67\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">3</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=\"#33a02c\" stroke-width=\"2\" d=\"M246.04,-145.46C263.02,-137.62 291.69,-124.39 311.59,-115.2\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"317.97,-112.25 312.94,-118.04 315,-114.17 311.83,-115.64 311.62,-115.19 311.41,-114.73 314.58,-113.26 310.3,-112.33 317.97,-112.25 317.97,-112.25\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-132.8\" font-family=\"Lato\" font-size=\"14.00\">1</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=\"#33a02c\" stroke-width=\"2\" d=\"M252.49,-99.42C268.96,-100.55 292.08,-102.14 309.44,-103.33\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"316.49,-103.82 309.29,-106.48 312.96,-104.08 309.47,-103.84 309.5,-103.34 309.54,-102.84 313.03,-103.08 309.72,-100.2 316.49,-103.82 316.49,-103.82\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"431.45,-92 408.5,-74 431.45,-56 454.41,-74 431.45,-92\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-70.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.18,-99.6C367.59,-94.56 390.71,-87 407.83,-81.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"414.76,-79.13 409.09,-84.3 411.44,-80.22 408.11,-81.31 408.11,-81.31 408.11,-81.31 411.44,-80.22 407.13,-78.31 414.76,-79.13 414.76,-79.13\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-95.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M412.27,-70.94C373.02,-64.94 277.67,-53.67 200.56,-71 185.48,-74.39 169.43,-80.96 157,-86.77\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"150.49,-89.9 155.44,-84.03 153.43,-87.93 156.58,-86.42 156.8,-86.87 157.02,-87.32 153.86,-88.83 158.16,-89.71 150.49,-89.9 150.49,-89.9\"/>\n",
"<text text-anchor=\"start\" x=\"282.72\" y=\"-80.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"279.22\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"30.33,-63 7.37,-45 30.33,-27 53.29,-45 30.33,-63\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-41.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;0 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>5&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M44.64,-51.93C61.66,-60.79 91.34,-76.25 111.59,-86.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"117.81,-90.03 110.15,-89.59 114.71,-88.41 111.6,-86.8 111.6,-86.8 111.6,-86.8 114.71,-88.41 113.06,-84 117.81,-90.03 117.81,-90.03\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-81.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.14,-40.54C64.89,-36.1 90.75,-29.24 109.54,-24.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"116.62,-22.38 110.66,-27.22 113.24,-23.27 109.85,-24.17 109.85,-24.17 109.85,-24.17 113.24,-23.27 109.04,-21.13 116.62,-22.38 116.62,-22.38\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-36.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;5 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>6&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M117.05,-11.84C106.03,-8.52 91.19,-5.87 78.66,-10 66.52,-14 54.94,-22.45 46.27,-30.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"40.77,-35.1 43.79,-28.05 43.35,-32.74 45.92,-30.37 45.92,-30.37 45.92,-30.37 43.35,-32.74 48.05,-32.69 40.77,-35.1 40.77,-35.1\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-13.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=\"#e31a1c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-244\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-240.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"230.89,-316 207.93,-298 230.89,-280 253.85,-298 230.89,-316\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-294.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;8 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>7&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M150.34,-252.68C166.84,-262.08 193.18,-277.09 210.99,-287.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"217.13,-290.73 209.49,-290 214.09,-289 211.05,-287.27 211.05,-287.27 211.05,-287.27 214.09,-289 212.61,-284.53 217.13,-290.73 217.13,-290.73\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-274.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"230.89,-262 207.93,-244 230.89,-226 253.85,-244 230.89,-262\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-240.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;9 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>7&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M152.5,-244C165.82,-244 184.51,-244 200.18,-244\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.6,-244 200.6,-247.15 204.1,-244 200.6,-244 200.6,-244 200.6,-244 204.1,-244 200.6,-240.85 207.6,-244 207.6,-244\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-247.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"334.67\" cy=\"-251\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-247.3\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;10 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>8&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M246.04,-291.46C262.34,-283.94 289.39,-271.45 309.13,-262.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"315.52,-259.38 310.49,-265.18 312.34,-260.85 309.17,-262.32 309.17,-262.32 309.17,-262.32 312.34,-260.85 307.85,-259.46 315.52,-259.38 315.52,-259.38\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-278.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;10 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>9&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M252.49,-245.42C267.8,-246.47 288.87,-247.92 305.71,-249.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"313.11,-249.59 305.91,-252.25 309.62,-249.35 306.12,-249.11 306.12,-249.11 306.12,-249.11 309.62,-249.35 306.34,-245.96 313.11,-249.59 313.11,-249.59\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-251.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"431.45,-233 401.29,-215 431.45,-197 461.62,-215 431.45,-233\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-211.3\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;11 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>10&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M354.4,-243.89C369.13,-238.29 389.77,-230.45 405.84,-224.35\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"412.41,-221.85 406.98,-227.28 409.14,-223.1 405.87,-224.34 405.87,-224.34 405.87,-224.34 409.14,-223.1 404.75,-221.39 412.41,-221.85 412.41,-221.85\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;7 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>11&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M406.24,-211.9C363.91,-207.22 273.97,-200.5 200.56,-217 185.48,-220.39 169.43,-226.96 157,-232.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"150.49,-235.9 155.44,-230.03 153.65,-234.38 156.8,-232.87 156.8,-232.87 156.8,-232.87 153.65,-234.38 158.16,-235.71 150.49,-235.9 150.49,-235.9\"/>\n",
"<text text-anchor=\"start\" x=\"282.72\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"279.22\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>12</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"30.33,-224 0.17,-206 30.33,-188 60.5,-206 30.33,-224\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-202.3\" font-family=\"Lato\" font-size=\"14.00\">12</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;7 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>12&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.53,-212.79C66.49,-219.13 91.85,-228.6 110.19,-235.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"117.08,-238.02 109.42,-238.52 113.8,-236.79 110.53,-235.57 110.53,-235.57 110.53,-235.57 113.8,-236.79 111.63,-232.62 117.08,-238.02 117.08,-238.02\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-232.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>13</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-179\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-175.3\" font-family=\"Lato\" font-size=\"14.00\">13</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;13 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>12&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.93,-200.54C67.58,-196.38 89.25,-190.64 106.26,-186.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"113.24,-184.27 107.28,-189.11 109.86,-185.17 106.47,-186.07 106.47,-186.07 106.47,-186.07 109.86,-185.17 105.67,-183.02 113.24,-184.27 113.24,-184.27\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-196.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;12 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>13&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M114.35,-171.49C103.69,-168.3 90.19,-166.11 78.66,-170 66.9,-173.97 55.74,-182.15 47.22,-189.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"41.77,-194.79 44.74,-187.72 44.33,-192.41 46.89,-190.02 46.89,-190.02 46.89,-190.02 44.33,-192.41 49.04,-192.33 41.77,-194.79 41.77,-194.79\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-173.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>14</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-390\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">14</text>\n",
"</g>\n",
"<!-- 15 -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>15</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"230.89,-462 200.73,-444 230.89,-426 261.06,-444 230.89,-462\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-440.3\" font-family=\"Lato\" font-size=\"14.00\">15</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;15 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>14&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M152.5,-399.9C168.25,-408.88 191.53,-422.14 208.44,-431.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"214.81,-435.4 207.16,-434.68 211.76,-433.67 208.72,-431.94 208.72,-431.94 208.72,-431.94 211.76,-433.67 210.28,-429.2 214.81,-435.4 214.81,-435.4\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-420.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 16 -->\n",
"<g id=\"node18\" class=\"node\">\n",
"<title>16</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"230.89,-408 200.73,-390 230.89,-372 261.06,-390 230.89,-408\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">16</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;16 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>14&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.68,-390C166.6,-390 180.36,-390 193.05,-390\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"200.37,-390 193.37,-393.15 196.87,-390 193.37,-390 193.37,-390 193.37,-390 196.87,-390 193.37,-386.85 200.37,-390 200.37,-390\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-393.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 17 -->\n",
"<g id=\"node19\" class=\"node\">\n",
"<title>17</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"334.67\" cy=\"-390\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">17</text>\n",
"</g>\n",
"<!-- 15&#45;&gt;17 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>15&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M247.35,-435.8C263.94,-427 290.5,-412.91 309.78,-402.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"316.01,-399.37 311.31,-405.43 312.92,-401.01 309.83,-402.65 309.83,-402.65 309.83,-402.65 312.92,-401.01 308.35,-399.87 316.01,-399.37 316.01,-399.37\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-421.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;17 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>16&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M261.06,-390C275.27,-390 292.25,-390 306.22,-390\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"313.22,-390 306.22,-393.15 309.72,-390 306.22,-390 306.22,-390 306.22,-390 309.72,-390 306.22,-386.85 313.22,-390 313.22,-390\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-393.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 18 -->\n",
"<g id=\"node20\" class=\"node\">\n",
"<title>18</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"431.45,-378 401.29,-360 431.45,-342 461.62,-360 431.45,-378\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-356.3\" font-family=\"Lato\" font-size=\"14.00\">18</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;18 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>17&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M355.31,-383.78C369.51,-379.29 388.85,-373.17 404.34,-368.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"411.16,-366.11 405.44,-371.22 407.83,-367.16 404.49,-368.22 404.49,-368.22 404.49,-368.22 407.83,-367.16 403.54,-365.21 411.16,-366.11 411.16,-366.11\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-380.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 18&#45;&gt;14 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>18&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M405.63,-357.3C363.12,-353.35 273.88,-347.97 200.56,-363 186.24,-365.94 171.09,-371.97 158.98,-377.6\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"152.59,-380.66 157.54,-374.79 155.75,-379.15 158.9,-377.63 158.9,-377.63 158.9,-377.63 155.75,-379.15 160.26,-380.48 152.59,-380.66 152.59,-380.66\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-356.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 19 -->\n",
"<g id=\"node21\" class=\"node\">\n",
"<title>19</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"30.33,-370 0.17,-352 30.33,-334 60.5,-352 30.33,-370\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-348.3\" font-family=\"Lato\" font-size=\"14.00\">19</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;14 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>19&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.53,-358.79C65.58,-364.79 89.16,-373.59 107.18,-380.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"114.04,-382.88 106.38,-383.38 110.76,-381.65 107.48,-380.43 107.48,-380.43 107.48,-380.43 110.76,-381.65 108.58,-377.48 114.04,-382.88 114.04,-382.88\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-378.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 20 -->\n",
"<g id=\"node22\" class=\"node\">\n",
"<title>20</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-318\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-314.3\" font-family=\"Lato\" font-size=\"14.00\">20</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;20 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>19&#45;&gt;20</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M50.48,-345.6C66.44,-340.27 89.34,-332.62 106.99,-326.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"113.71,-324.48 108.07,-329.69 110.39,-325.59 107.07,-326.7 107.07,-326.7 107.07,-326.7 110.39,-325.59 106.07,-323.71 113.71,-324.48 113.71,-324.48\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-339.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 20&#45;&gt;19 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>20&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M118.61,-305.5C107.54,-297.55 91.98,-289.82 78.66,-296 62.59,-303.46 50,-319.37 41.86,-332.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"38.22,-338.41 39.11,-330.78 40.02,-335.4 41.82,-332.4 41.82,-332.4 41.82,-332.4 40.02,-335.4 44.52,-334.02 38.22,-338.41 38.22,-338.41\"/>\n",
"<text text-anchor=\"start\" x=\"82.16\" y=\"-314.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"78.66\" y=\"-299.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 0x7fcbe4382370> >"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 1) Solving the game locally\n",
"# Unreachable parts are ignored, all of them are \"won\" by the env,\n",
"# the associated strategy is the 0 edges indicating no strategy\n",
"spot.solve_parity_game(arena)\n",
"spot.highlight_strategy(arena)\n",
"print(arena.get_strategy())\n",
"arena"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(0, 7, 10, 0, 16, 19, 0, 0, 8, 11, 0, 17, 20, 0, 3, 0, 0, 15, 0, 24, 0)\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=\"334pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 334.23 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.7092198581560284 0.7092198581560284) rotate(0) translate(4 502)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-502 465.79,-502 465.79,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"210.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"231.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"247.39\" y=\"-483.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"209.39\" y=\"-469.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=\"#33a02c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-98\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-94.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=\"M31.41,-112.99C33.49,-112.68 79.37,-105.92 108.79,-101.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"115.88,-100.54 109.41,-104.68 112.41,-101.05 108.95,-101.56 108.95,-101.56 108.95,-101.56 112.41,-101.05 108.49,-98.44 115.88,-100.54 115.88,-100.54\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"230.89,-170 207.93,-152 230.89,-134 253.85,-152 230.89,-170\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-148.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=\"M150.34,-106.68C166.84,-116.08 193.18,-131.09 210.99,-141.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"217.13,-144.73 209.49,-144 214.09,-143 211.05,-141.27 211.05,-141.27 211.05,-141.27 214.09,-143 212.61,-138.53 217.13,-144.73 217.13,-144.73\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-128.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"230.89,-116 207.93,-98 230.89,-80 253.85,-98 230.89,-116\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-94.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=\"M152.5,-98C165.82,-98 184.51,-98 200.18,-98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.6,-98 200.6,-101.15 204.1,-98 200.6,-98 200.6,-98 200.6,-98 204.1,-98 200.6,-94.85 207.6,-98 207.6,-98\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"334.67\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">3</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=\"#33a02c\" stroke-width=\"2\" d=\"M246.04,-145.46C263.02,-137.62 291.69,-124.39 311.59,-115.2\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"317.97,-112.25 312.94,-118.04 315,-114.17 311.83,-115.64 311.62,-115.19 311.41,-114.73 314.58,-113.26 310.3,-112.33 317.97,-112.25 317.97,-112.25\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-132.8\" font-family=\"Lato\" font-size=\"14.00\">1</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=\"#33a02c\" stroke-width=\"2\" d=\"M252.49,-99.42C268.96,-100.55 292.08,-102.14 309.44,-103.33\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"316.49,-103.82 309.29,-106.48 312.96,-104.08 309.47,-103.84 309.5,-103.34 309.54,-102.84 313.03,-103.08 309.72,-100.2 316.49,-103.82 316.49,-103.82\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"431.45,-92 408.5,-74 431.45,-56 454.41,-74 431.45,-92\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-70.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.18,-99.6C367.59,-94.56 390.71,-87 407.83,-81.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"414.76,-79.13 409.09,-84.3 411.44,-80.22 408.11,-81.31 408.11,-81.31 408.11,-81.31 411.44,-80.22 407.13,-78.31 414.76,-79.13 414.76,-79.13\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-95.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>4&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M412.27,-70.94C373.02,-64.94 277.67,-53.67 200.56,-71 185.48,-74.39 169.43,-80.96 157,-86.77\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"150.49,-89.9 155.44,-84.03 153.43,-87.93 156.58,-86.42 156.8,-86.87 157.02,-87.32 153.86,-88.83 158.16,-89.71 150.49,-89.9 150.49,-89.9\"/>\n",
"<text text-anchor=\"start\" x=\"282.72\" y=\"-80.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"279.22\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"30.33,-63 7.37,-45 30.33,-27 53.29,-45 30.33,-63\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-41.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;0 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>5&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M44.64,-51.93C61.66,-60.79 91.34,-76.25 111.59,-86.79\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"117.81,-90.03 110.15,-89.59 114.47,-88.86 111.37,-87.24 111.6,-86.8 111.83,-86.35 114.94,-87.97 113.06,-84 117.81,-90.03 117.81,-90.03\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-81.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.14,-40.54C64.89,-36.1 90.75,-29.24 109.54,-24.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"116.62,-22.38 110.66,-27.22 113.24,-23.27 109.85,-24.17 109.85,-24.17 109.85,-24.17 113.24,-23.27 109.04,-21.13 116.62,-22.38 116.62,-22.38\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-36.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;5 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>6&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M117.05,-11.84C106.03,-8.52 91.19,-5.87 78.66,-10 66.52,-14 54.94,-22.45 46.27,-30.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"40.77,-35.1 43.79,-28.05 43.35,-32.74 45.92,-30.37 45.92,-30.37 45.92,-30.37 43.35,-32.74 48.05,-32.69 40.77,-35.1 40.77,-35.1\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-13.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=\"#33a02c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-244\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-240.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"230.89,-316 207.93,-298 230.89,-280 253.85,-298 230.89,-316\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-294.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;8 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>7&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M150.34,-252.68C166.84,-262.08 193.18,-277.09 210.99,-287.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"217.13,-290.73 209.49,-290 214.09,-289 211.05,-287.27 211.05,-287.27 211.05,-287.27 214.09,-289 212.61,-284.53 217.13,-290.73 217.13,-290.73\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-274.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"230.89,-262 207.93,-244 230.89,-226 253.85,-244 230.89,-262\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-240.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;9 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>7&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M152.5,-244C165.82,-244 184.51,-244 200.18,-244\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.6,-244 200.6,-247.15 204.1,-244 200.6,-244 200.6,-244 200.6,-244 204.1,-244 200.6,-240.85 207.6,-244 207.6,-244\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-247.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"334.67\" cy=\"-251\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-247.3\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;10 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>8&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M246.04,-291.46C262.34,-283.94 289.39,-271.45 309.13,-262.33\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"315.52,-259.38 310.49,-265.18 312.55,-261.3 309.38,-262.77 309.17,-262.32 308.96,-261.86 312.13,-260.4 307.85,-259.46 315.52,-259.38 315.52,-259.38\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-278.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;10 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>9&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M252.49,-245.42C267.8,-246.47 288.87,-247.92 305.71,-249.08\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"313.11,-249.59 305.91,-252.25 309.58,-249.84 306.09,-249.6 306.12,-249.11 306.16,-248.61 309.65,-248.85 306.34,-245.96 313.11,-249.59 313.11,-249.59\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-251.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"431.45,-233 401.29,-215 431.45,-197 461.62,-215 431.45,-233\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-211.3\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;11 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>10&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M354.4,-243.89C369.13,-238.29 389.77,-230.45 405.84,-224.35\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"412.41,-221.85 406.98,-227.28 409.14,-223.1 405.87,-224.34 405.87,-224.34 405.87,-224.34 409.14,-223.1 404.75,-221.39 412.41,-221.85 412.41,-221.85\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-239.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;7 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>11&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M406.24,-211.9C363.91,-207.22 273.97,-200.5 200.56,-217 185.48,-220.39 169.43,-226.96 157,-232.77\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"150.49,-235.9 155.44,-230.03 153.43,-233.93 156.58,-232.42 156.8,-232.87 157.02,-233.32 153.86,-234.83 158.16,-235.71 150.49,-235.9 150.49,-235.9\"/>\n",
"<text text-anchor=\"start\" x=\"282.72\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"279.22\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>12</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"30.33,-224 0.17,-206 30.33,-188 60.5,-206 30.33,-224\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-202.3\" font-family=\"Lato\" font-size=\"14.00\">12</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;7 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>12&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M49.53,-212.79C66.49,-219.13 91.85,-228.6 110.19,-235.44\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"117.08,-238.02 109.42,-238.52 113.63,-237.26 110.35,-236.04 110.53,-235.57 110.7,-235.1 113.98,-236.32 111.63,-232.62 117.08,-238.02 117.08,-238.02\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-232.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>13</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-179\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-175.3\" font-family=\"Lato\" font-size=\"14.00\">13</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;13 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>12&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.93,-200.54C67.58,-196.38 89.25,-190.64 106.26,-186.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"113.24,-184.27 107.28,-189.11 109.86,-185.17 106.47,-186.07 106.47,-186.07 106.47,-186.07 109.86,-185.17 105.67,-183.02 113.24,-184.27 113.24,-184.27\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-196.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;12 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>13&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M114.35,-171.49C103.69,-168.3 90.19,-166.11 78.66,-170 66.9,-173.97 55.74,-182.15 47.22,-189.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"41.77,-194.79 44.74,-187.72 44.33,-192.41 46.89,-190.02 46.89,-190.02 46.89,-190.02 44.33,-192.41 49.04,-192.33 41.77,-194.79 41.77,-194.79\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-173.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>14</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-390\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">14</text>\n",
"</g>\n",
"<!-- 15 -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>15</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"230.89,-462 200.73,-444 230.89,-426 261.06,-444 230.89,-462\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-440.3\" font-family=\"Lato\" font-size=\"14.00\">15</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;15 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>14&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M152.5,-399.9C168.25,-408.88 191.53,-422.14 208.44,-431.78\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"214.81,-435.4 207.16,-434.68 211.52,-434.11 208.48,-432.37 208.72,-431.94 208.97,-431.5 212.01,-433.24 210.28,-429.2 214.81,-435.4 214.81,-435.4\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-420.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 16 -->\n",
"<g id=\"node18\" class=\"node\">\n",
"<title>16</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"230.89,-408 200.73,-390 230.89,-372 261.06,-390 230.89,-408\"/>\n",
"<text text-anchor=\"middle\" x=\"230.89\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">16</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;16 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>14&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.68,-390C166.6,-390 180.36,-390 193.05,-390\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"200.37,-390 193.37,-393.15 196.87,-390 193.37,-390 193.37,-390 193.37,-390 196.87,-390 193.37,-386.85 200.37,-390 200.37,-390\"/>\n",
"<text text-anchor=\"middle\" x=\"178.06\" y=\"-393.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 17 -->\n",
"<g id=\"node19\" class=\"node\">\n",
"<title>17</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"334.67\" cy=\"-390\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"334.67\" y=\"-386.3\" font-family=\"Lato\" font-size=\"14.00\">17</text>\n",
"</g>\n",
"<!-- 15&#45;&gt;17 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>15&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M247.35,-435.8C263.94,-427 290.5,-412.91 309.78,-402.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"316.01,-399.37 311.31,-405.43 312.92,-401.01 309.83,-402.65 309.83,-402.65 309.83,-402.65 312.92,-401.01 308.35,-399.87 316.01,-399.37 316.01,-399.37\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-421.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;17 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>16&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M261.06,-390C275.27,-390 292.25,-390 306.22,-390\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"313.22,-390 306.22,-393.15 309.72,-390 306.22,-390 306.22,-390 306.22,-390 309.72,-390 306.22,-386.85 313.22,-390 313.22,-390\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-393.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 18 -->\n",
"<g id=\"node20\" class=\"node\">\n",
"<title>18</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"431.45,-378 401.29,-360 431.45,-342 461.62,-360 431.45,-378\"/>\n",
"<text text-anchor=\"middle\" x=\"431.45\" y=\"-356.3\" font-family=\"Lato\" font-size=\"14.00\">18</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;18 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>17&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M355.31,-383.78C369.51,-379.29 388.85,-373.17 404.34,-368.26\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"411.16,-366.11 405.44,-371.22 407.98,-367.64 404.64,-368.69 404.49,-368.22 404.34,-367.74 407.68,-366.68 403.54,-365.21 411.16,-366.11 411.16,-366.11\"/>\n",
"<text text-anchor=\"middle\" x=\"378.62\" y=\"-380.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 18&#45;&gt;14 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>18&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M405.63,-357.3C363.12,-353.35 273.88,-347.97 200.56,-363 186.24,-365.94 171.09,-371.97 158.98,-377.6\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"152.59,-380.66 157.54,-374.79 155.75,-379.15 158.9,-377.63 158.9,-377.63 158.9,-377.63 155.75,-379.15 160.26,-380.48 152.59,-380.66 152.59,-380.66\"/>\n",
"<text text-anchor=\"middle\" x=\"287.22\" y=\"-356.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 19 -->\n",
"<g id=\"node21\" class=\"node\">\n",
"<title>19</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"30.33,-370 0.17,-352 30.33,-334 60.5,-352 30.33,-370\"/>\n",
"<text text-anchor=\"middle\" x=\"30.33\" y=\"-348.3\" font-family=\"Lato\" font-size=\"14.00\">19</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;14 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>19&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.53,-358.79C65.58,-364.79 89.16,-373.59 107.18,-380.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"114.04,-382.88 106.38,-383.38 110.76,-381.65 107.48,-380.43 107.48,-380.43 107.48,-380.43 110.76,-381.65 108.58,-377.48 114.04,-382.88 114.04,-382.88\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-378.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 20 -->\n",
"<g id=\"node22\" class=\"node\">\n",
"<title>20</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"134.11\" cy=\"-318\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"134.11\" y=\"-314.3\" font-family=\"Lato\" font-size=\"14.00\">20</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;20 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>19&#45;&gt;20</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M50.48,-345.6C66.44,-340.27 89.34,-332.62 106.99,-326.73\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"113.71,-324.48 108.07,-329.69 110.55,-326.07 107.23,-327.17 107.07,-326.7 106.91,-326.23 110.23,-325.12 106.07,-323.71 113.71,-324.48 113.71,-324.48\"/>\n",
"<text text-anchor=\"middle\" x=\"86.66\" y=\"-339.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 20&#45;&gt;19 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>20&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M118.61,-305.5C107.54,-297.55 91.98,-289.82 78.66,-296 62.59,-303.46 50,-319.37 41.86,-332.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"38.22,-338.41 39.11,-330.78 40.02,-335.4 41.82,-332.4 41.82,-332.4 41.82,-332.4 40.02,-335.4 44.52,-334.02 38.22,-338.41 38.22,-338.41\"/>\n",
"<text text-anchor=\"start\" x=\"82.16\" y=\"-314.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"78.66\" y=\"-299.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 0x7fcbe4382370> >"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 1) Solving the game globally\n",
"# The whole automaton is considered in this case\n",
"spot.solve_parity_game(arena, True)\n",
"spot.highlight_strategy(arena)\n",
"print(arena.get_strategy())\n",
"arena"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}