spot/tests/python/games.ipynb
philipp 4260b17fba New game api
Introduce a new, uniform way to create and solve
games.
Games can now be created directly from specification
using creat_game, uniformly solved using
solve_game and transformed into a strategy
using create_strategy.
Strategy are mealy machines, which can be minimized.

* bin/ltlsynt.cc: Minor adaption
* spot/twaalgos/game.cc: solve_game, setters and getters
for named properties
* spot/twaalgos/game.hh: Here too
* spot/twaalgos/mealy_machine.cc: Minor adaption
* spot/twaalgos/synthesis.cc: create_game, create_strategy and
minimize_strategy
* spot/twaalgos/synthesis.hh: Here too
* tests/core/ltlsynt.test: Adapting
* tests/python/aiger.py
, tests/python/games.ipynb
, tests/python/mealy.py
, tests/python/parity.py
, tests/python/split.py: Adapting
2021-09-16 14:53:47 +02:00

3571 lines
234 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, agame 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",
"- max odd parity acceptance: player 0 can win if the maximal value seen infinitely often is even"
]
},
{
"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 - The \"old\" way\n",
"\n",
"Solving a game is done my calling `solve_safety_game()` or `solve_parity_game()`. This 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 function 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_safety_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": [
"# Solving a game - The new interface\n",
"\n",
"A strategy/control circuit can now be derived more conveniently from a LTL/PSL specification.\n",
"The process is decomposed in to three steps:\n",
"- Creating the game\n",
"- Solving the game\n",
"- Obtaining the strategy\n",
"\n",
"Each of these steps is parametrized by the same options structure called game_info."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"game has 28 states, and 53 edges.\n",
"output propositions are ('o0',)\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=\"357pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 356.67 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.36101083032490977 0.36101083032490977) rotate(0) translate(4 993.22)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-993.22 983.99,-993.22 983.99,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"378.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"399.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"415.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"457.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"473.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"519.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"535.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"573.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"589.49\" y=\"-975.02\" font-family=\"Lato\" font-size=\"14.00\">)))</text>\n",
"<text text-anchor=\"start\" x=\"434.49\" y=\"-961.02\" font-family=\"Lato\" font-size=\"14.00\">[parity max odd 4]</text>\n",
"<!-- I -->\n",
"<!-- 9 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-623.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-619.52\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- I&#45;&gt;9 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-623.22C2.79,-623.22 17.15,-623.22 30.63,-623.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-623.22 30.94,-626.37 34.44,-623.22 30.94,-623.22 30.94,-623.22 30.94,-623.22 34.44,-623.22 30.94,-620.07 37.94,-623.22 37.94,-623.22\"/>\n",
"</g>\n",
"<!-- 24 -->\n",
"<g id=\"node26\" class=\"node\">\n",
"<title>24</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"188.33,-750.22 158.17,-732.22 188.33,-714.22 218.5,-732.22 188.33,-750.22\"/>\n",
"<text text-anchor=\"middle\" x=\"188.33\" y=\"-728.52\" font-family=\"Lato\" font-size=\"14.00\">24</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;24 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>9&#45;&gt;24</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M66.21,-638.28C72.66,-648.08 81.91,-660.75 92,-670.22 114.34,-691.19 144.63,-709.52 165.02,-720.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"171.27,-724.08 163.62,-723.53 168.19,-722.42 165.11,-720.76 165.11,-720.76 165.11,-720.76 168.19,-722.42 166.61,-717.99 171.27,-724.08 171.27,-724.08\"/>\n",
"<text text-anchor=\"start\" x=\"96\" y=\"-724.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"108\" y=\"-709.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 25 -->\n",
"<g id=\"node27\" class=\"node\">\n",
"<title>25</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"399.66,-694.22 369.5,-676.22 399.66,-658.22 429.83,-676.22 399.66,-694.22\"/>\n",
"<text text-anchor=\"middle\" x=\"399.66\" y=\"-672.52\" font-family=\"Lato\" font-size=\"14.00\">25</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;25 -->\n",
"<g id=\"edge29\" class=\"edge\">\n",
"<title>9&#45;&gt;25</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M71.42,-632.69C77.53,-636.26 84.88,-639.99 92,-642.22 186.6,-671.89 304.7,-676.43 362.88,-676.67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"370.01,-676.68 363,-679.82 366.51,-676.68 363.01,-676.67 363.01,-676.67 363.01,-676.67 366.51,-676.68 363.01,-673.52 370.01,-676.68 370.01,-676.68\"/>\n",
"<text text-anchor=\"start\" x=\"166.33\" y=\"-686.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"180.33\" y=\"-671.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 26 -->\n",
"<g id=\"node28\" class=\"node\">\n",
"<title>26</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"188.33,-397.22 158.17,-379.22 188.33,-361.22 218.5,-379.22 188.33,-397.22\"/>\n",
"<text text-anchor=\"middle\" x=\"188.33\" y=\"-375.52\" font-family=\"Lato\" font-size=\"14.00\">26</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;26 -->\n",
"<g id=\"edge30\" class=\"edge\">\n",
"<title>9&#45;&gt;26</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M64.16,-606.96C70.99,-591.65 81.75,-568.16 92,-548.22 120.48,-492.85 157.54,-429.33 175.94,-398.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"179.57,-392.18 178.7,-399.81 177.78,-395.19 175.99,-398.2 175.99,-398.2 175.99,-398.2 177.78,-395.19 173.28,-396.59 179.57,-392.18 179.57,-392.18\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-567.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"108\" y=\"-552.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 27 -->\n",
"<g id=\"node29\" class=\"node\">\n",
"<title>27</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"267,-584.22 236.83,-566.22 267,-548.22 297.16,-566.22 267,-584.22\"/>\n",
"<text text-anchor=\"middle\" x=\"267\" y=\"-562.52\" font-family=\"Lato\" font-size=\"14.00\">27</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;27 -->\n",
"<g id=\"edge31\" class=\"edge\">\n",
"<title>9&#45;&gt;27</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.33,-617.92C79.2,-616.06 85.88,-613.99 92,-612.22 143.42,-597.35 203.94,-581.79 238.35,-573.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.29,-571.37 239.27,-576.13 241.89,-572.22 238.5,-573.08 238.5,-573.08 238.5,-573.08 241.89,-572.22 237.73,-570.02 245.29,-571.37 245.29,-571.37\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-631.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"108\" y=\"-616.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"333.33\" cy=\"-762.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"333.33\" y=\"-758.52\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>10</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"478.33,-826.22 448.16,-808.22 478.33,-790.22 508.49,-808.22 478.33,-826.22\"/>\n",
"<text text-anchor=\"middle\" x=\"478.33\" y=\"-804.52\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;10 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M338.49,-779.57C343.17,-794.86 352.44,-816.21 369.33,-826.22 396.12,-842.1 432.85,-830.29 455.82,-819.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"462.2,-816.65 457.26,-822.53 459.05,-818.17 455.89,-819.69 455.89,-819.69 455.89,-819.69 459.05,-818.17 454.53,-816.85 462.2,-816.65 462.2,-816.65\"/>\n",
"<text text-anchor=\"start\" x=\"393.66\" y=\"-852.02\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-837.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>11</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"478.33,-641.22 448.16,-623.22 478.33,-605.22 508.49,-623.22 478.33,-641.22\"/>\n",
"<text text-anchor=\"middle\" x=\"478.33\" y=\"-619.52\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;11 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M336,-744.36C339.68,-709.53 349.72,-634.61 369.33,-619.22 392.84,-600.77 428.9,-606.83 452.79,-614.04\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"459.49,-616.19 451.86,-617.05 456.16,-615.12 452.82,-614.05 452.82,-614.05 452.82,-614.05 456.16,-615.12 453.79,-611.05 459.49,-616.19 459.49,-616.19\"/>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-638.02\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-623.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;0 -->\n",
"<g id=\"edge32\" class=\"edge\">\n",
"<title>10&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M458.47,-801.74C449.81,-798.79 439.4,-795.28 429.99,-792.22 403.13,-783.48 396.29,-781.68 369.33,-773.22 365.53,-772.03 361.5,-770.77 357.58,-769.53\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"350.71,-767.38 358.33,-766.47 354.05,-768.42 357.39,-769.47 357.39,-769.47 357.39,-769.47 354.05,-768.42 356.44,-772.48 350.71,-767.38 350.71,-767.38\"/>\n",
"<text text-anchor=\"start\" x=\"391.16\" y=\"-811.02\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-796.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"583.66\" cy=\"-662.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"583.66\" y=\"-658.52\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;1 -->\n",
"<g id=\"edge33\" class=\"edge\">\n",
"<title>11&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M497.32,-630.02C514.73,-636.59 541.17,-646.56 560,-653.67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"566.56,-656.15 558.9,-656.62 563.29,-654.91 560.01,-653.68 560.01,-653.68 560.01,-653.68 563.29,-654.91 561.12,-650.73 566.56,-656.15 566.56,-656.15\"/>\n",
"<text text-anchor=\"start\" x=\"528.66\" y=\"-667.02\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"529.16\" y=\"-652.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>12</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"715.99,-735.22 685.82,-717.22 715.99,-699.22 746.16,-717.22 715.99,-735.22\"/>\n",
"<text text-anchor=\"middle\" x=\"715.99\" y=\"-713.52\" font-family=\"Lato\" font-size=\"14.00\">12</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;12 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M596,-675.93C602.3,-682.7 610.67,-690.42 619.66,-695.22 639.05,-705.6 663.2,-711.11 682.35,-714.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"689.42,-715.01 682.05,-717.16 685.96,-714.52 682.49,-714.04 682.49,-714.04 682.49,-714.04 685.96,-714.52 682.93,-710.92 689.42,-715.01 689.42,-715.01\"/>\n",
"<text text-anchor=\"start\" x=\"637.66\" y=\"-730.02\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-715.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>13</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"715.99,-523.22 685.82,-505.22 715.99,-487.22 746.16,-505.22 715.99,-523.22\"/>\n",
"<text text-anchor=\"middle\" x=\"715.99\" y=\"-501.52\" font-family=\"Lato\" font-size=\"14.00\">13</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;13 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M585.97,-644.21C589.09,-606.95 598.35,-523.46 619.66,-506.22 638.76,-490.76 667.78,-492.9 688.78,-497.42\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"695.85,-499.1 688.31,-500.55 692.44,-498.29 689.03,-497.48 689.03,-497.48 689.03,-497.48 692.44,-498.29 689.76,-494.42 695.85,-499.1 695.85,-499.1\"/>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-525.02\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-510.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;0 -->\n",
"<g id=\"edge34\" class=\"edge\">\n",
"<title>12&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M702.13,-727.16C693.04,-733.58 680.27,-741.42 667.66,-745.22 556.15,-778.81 414.28,-770.14 358.45,-764.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"351.46,-764.17 358.74,-761.72 354.95,-764.52 358.43,-764.86 358.43,-764.86 358.43,-764.86 354.95,-764.52 358.12,-767.99 351.46,-764.17 351.46,-764.17\"/>\n",
"<text text-anchor=\"start\" x=\"526.66\" y=\"-786.02\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"529.16\" y=\"-771.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;1 -->\n",
"<g id=\"edge35\" class=\"edge\">\n",
"<title>13&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M714.16,-522.35C711.79,-551.44 702.68,-610.42 667.66,-642.22 659.12,-649.98 630.28,-655.7 608.98,-658.99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"601.81,-660.05 608.27,-655.91 605.27,-659.54 608.74,-659.02 608.74,-659.02 608.74,-659.02 605.27,-659.54 609.2,-662.14 601.81,-660.05 601.81,-660.05\"/>\n",
"<text text-anchor=\"start\" x=\"633.16\" y=\"-675.02\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-660.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"817.32\" cy=\"-604.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"817.32\" y=\"-600.52\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>14</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"949.65,-437.22 919.49,-419.22 949.65,-401.22 979.82,-419.22 949.65,-437.22\"/>\n",
"<text text-anchor=\"middle\" x=\"949.65\" y=\"-415.52\" font-family=\"Lato\" font-size=\"14.00\">14</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;14 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M824.68,-587.49C830.62,-573.33 840.49,-553.02 853.32,-538.22 870.62,-518.27 883.78,-522.95 901.32,-503.22 918.21,-484.23 931.72,-458.22 939.91,-440.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"942.89,-433.47 942.93,-441.15 941.47,-436.67 940.05,-439.87 940.05,-439.87 940.05,-439.87 941.47,-436.67 937.17,-438.6 942.89,-433.47 942.89,-433.47\"/>\n",
"<text text-anchor=\"start\" x=\"871.32\" y=\"-557.02\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-542.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 15 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>15</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"949.65,-596.22 919.49,-578.22 949.65,-560.22 979.82,-578.22 949.65,-596.22\"/>\n",
"<text text-anchor=\"middle\" x=\"949.65\" y=\"-574.52\" font-family=\"Lato\" font-size=\"14.00\">15</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;15 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M830.89,-592.38C837.13,-587.29 845.09,-581.91 853.32,-579.22 874.25,-572.39 899.17,-572.39 918.28,-573.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"925.3,-574.63 918.03,-577.11 921.81,-574.3 918.33,-573.97 918.33,-573.97 918.33,-573.97 921.81,-574.3 918.63,-570.83 925.3,-574.63 925.3,-574.63\"/>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-598.02\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-583.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 15&#45;&gt;2 -->\n",
"<g id=\"edge36\" class=\"edge\">\n",
"<title>15&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M936.81,-588.82C927.79,-596.13 914.69,-605.24 901.32,-609.22 882.01,-614.99 859.07,-612.97 842.21,-609.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"834.93,-608.52 842.4,-606.78 838.36,-609.2 841.8,-609.87 841.8,-609.87 841.8,-609.87 838.36,-609.2 841.19,-612.97 834.93,-608.52 834.93,-608.52\"/>\n",
"<text text-anchor=\"start\" x=\"872.82\" y=\"-631.02\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-616.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"583.66\" cy=\"-874.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"583.66\" y=\"-870.52\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;12 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M597.22,-862.16C603.58,-856.5 611.64,-849.97 619.66,-845.22 639.4,-833.54 651.17,-842.18 667.66,-826.22 691.98,-802.69 704.56,-764.56 710.47,-740.21\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"712.09,-733.12 713.6,-740.65 711.31,-736.53 710.53,-739.94 710.53,-739.94 710.53,-739.94 711.31,-736.53 707.46,-739.24 712.09,-733.12 712.09,-733.12\"/>\n",
"<text text-anchor=\"start\" x=\"637.66\" y=\"-864.02\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-849.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 16 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>16</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"715.99,-866.22 685.82,-848.22 715.99,-830.22 746.16,-848.22 715.99,-866.22\"/>\n",
"<text text-anchor=\"middle\" x=\"715.99\" y=\"-844.52\" font-family=\"Lato\" font-size=\"14.00\">16</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;16 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M601.26,-878.52C618.3,-882.18 645.39,-885.87 667.66,-879.22 678.31,-876.05 688.79,-869.62 697.17,-863.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"703.14,-858.82 699.54,-865.59 700.38,-860.96 697.61,-863.1 697.61,-863.1 697.61,-863.1 700.38,-860.96 695.68,-860.61 703.14,-858.82 703.14,-858.82\"/>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-901.02\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-886.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;2 -->\n",
"<g id=\"edge37\" class=\"edge\">\n",
"<title>16&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M722.76,-834.05C739.25,-793.54 786.7,-676.99 806.96,-627.21\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"809.64,-620.64 809.92,-628.31 808.32,-623.89 807,-627.13 807,-627.13 807,-627.13 808.32,-623.89 804.08,-625.94 809.64,-620.64 809.64,-620.64\"/>\n",
"<text text-anchor=\"start\" x=\"764.32\" y=\"-745.02\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"764.82\" y=\"-730.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;3 -->\n",
"<g id=\"edge38\" class=\"edge\">\n",
"<title>16&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M709.77,-862.55C702.93,-878.94 689.2,-904.97 667.66,-916.22 648.75,-926.1 638.98,-925.27 619.66,-916.22 610.48,-911.92 602.87,-903.9 597.11,-896.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"593.08,-890.07 599.62,-894.1 595.05,-892.97 597.01,-895.86 597.01,-895.86 597.01,-895.86 595.05,-892.97 594.4,-897.63 593.08,-890.07 593.08,-890.07\"/>\n",
"<text text-anchor=\"start\" x=\"633.16\" y=\"-942.02\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-927.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"817.32\" cy=\"-121.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"817.32\" y=\"-117.52\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;14 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M819.86,-139.05C823.53,-177.82 833.99,-268.2 853.32,-291.22 868.08,-308.79 884.83,-294.27 901.32,-310.22 914.37,-322.85 931.86,-369.68 941.51,-397.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"943.79,-404.36 938.55,-398.75 942.66,-401.05 941.53,-397.73 941.53,-397.73 941.53,-397.73 942.66,-401.05 944.51,-396.72 943.79,-404.36 943.79,-404.36\"/>\n",
"<text text-anchor=\"start\" x=\"871.32\" y=\"-329.02\" font-family=\"Lato\" font-size=\"14.00\">i0</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-314.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 17 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>17</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"949.65,-172.22 919.49,-154.22 949.65,-136.22 979.82,-154.22 949.65,-172.22\"/>\n",
"<text text-anchor=\"middle\" x=\"949.65\" y=\"-150.52\" font-family=\"Lato\" font-size=\"14.00\">17</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;17 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M834.63,-126.64C840.49,-128.51 847.18,-130.55 853.32,-132.22 875.56,-138.27 901,-144.09 920,-148.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"926.95,-149.72 919.45,-151.32 923.53,-148.98 920.11,-148.24 920.11,-148.24 920.11,-148.24 923.53,-148.98 920.77,-145.16 926.95,-149.72 926.95,-149.72\"/>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-163.02\" font-family=\"Lato\" font-size=\"14.00\">!i0</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-148.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;4 -->\n",
"<g id=\"edge39\" class=\"edge\">\n",
"<title>17&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M941.76,-140.63C934.01,-127.02 920.03,-106.91 901.32,-98.22 881.97,-89.24 873.76,-92.11 853.32,-98.22 847.84,-99.86 842.41,-102.67 837.53,-105.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"831.68,-109.79 835.67,-103.23 834.57,-107.81 837.45,-105.83 837.45,-105.83 837.45,-105.83 834.57,-107.81 839.23,-108.43 831.68,-109.79 831.68,-109.79\"/>\n",
"<text text-anchor=\"start\" x=\"872.82\" y=\"-117.02\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-102.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"817.32\" cy=\"-366.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"817.32\" y=\"-362.52\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;14 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M830.13,-379.4C836.43,-385.67 844.66,-392.76 853.32,-397.22 872.87,-407.3 897.03,-412.81 916.13,-415.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"923.19,-416.82 915.81,-418.93 919.72,-416.32 916.26,-415.81 916.26,-415.81 916.26,-415.81 919.72,-416.32 916.71,-412.7 923.19,-416.82 923.19,-416.82\"/>\n",
"<text text-anchor=\"start\" x=\"857.32\" y=\"-431.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-416.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;15 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M822.2,-383.85C826.89,-401.55 836.36,-428.67 853.32,-446.22 869.76,-463.24 884.91,-452.19 901.32,-469.22 924.8,-493.59 937.63,-531.48 943.81,-555.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"945.52,-562.56 940.8,-556.51 944.69,-559.16 943.86,-555.76 943.86,-555.76 943.86,-555.76 944.69,-559.16 946.92,-555.01 945.52,-562.56 945.52,-562.56\"/>\n",
"<text text-anchor=\"start\" x=\"855.32\" y=\"-488.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-473.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;17 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>5&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M818.62,-347.94C819.94,-318.54 826.08,-260.01 853.32,-220.22 863.03,-206.04 902.2,-181.42 927.21,-166.59\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"933.54,-162.86 929.1,-169.13 930.52,-164.64 927.51,-166.41 927.51,-166.41 927.51,-166.41 930.52,-164.64 925.91,-163.7 933.54,-162.86 933.54,-162.86\"/>\n",
"<text text-anchor=\"start\" x=\"855.32\" y=\"-239.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-224.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 18 -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>18</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"949.65,-331.22 919.49,-313.22 949.65,-295.22 979.82,-313.22 949.65,-331.22\"/>\n",
"<text text-anchor=\"middle\" x=\"949.65\" y=\"-309.52\" font-family=\"Lato\" font-size=\"14.00\">18</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;18 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>5&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M835.39,-363.36C852.56,-360.1 879.54,-353.94 901.32,-344.22 911.19,-339.82 921.31,-333.48 929.65,-327.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"935.65,-323.39 931.79,-330.03 932.8,-325.43 929.95,-327.47 929.95,-327.47 929.95,-327.47 932.8,-325.43 928.12,-324.9 935.65,-323.39 935.65,-323.39\"/>\n",
"<text text-anchor=\"start\" x=\"853.32\" y=\"-378.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-363.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 18&#45;&gt;5 -->\n",
"<g id=\"edge40\" class=\"edge\">\n",
"<title>18&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M941.21,-300.1C933.21,-287.46 919.19,-269.12 901.32,-261.22 881.81,-252.6 870.63,-248.75 853.32,-261.22 828.32,-279.25 820.91,-315.91 818.86,-340.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"818.38,-348.08 815.69,-340.89 818.61,-344.59 818.84,-341.09 818.84,-341.09 818.84,-341.09 818.61,-344.59 821.98,-341.3 818.38,-348.08 818.38,-348.08\"/>\n",
"<text text-anchor=\"start\" x=\"872.82\" y=\"-280.02\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"869.32\" y=\"-265.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node18\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"333.33\" cy=\"-260.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"333.33\" y=\"-256.52\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;10 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>6&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M334.89,-278.21C337.44,-355.65 348.64,-658.4 369.33,-695.22 385.64,-724.26 406.75,-715.36 429.99,-739.22 444.58,-754.2 457.73,-774.15 466.45,-788.75\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"470.13,-795.04 463.87,-790.59 468.36,-792.02 466.59,-789 466.59,-789 466.59,-789 468.36,-792.02 469.31,-787.41 470.13,-795.04 470.13,-795.04\"/>\n",
"<text text-anchor=\"start\" x=\"379.66\" y=\"-758.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-743.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;11 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>6&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M341.49,-276.48C357.85,-313.8 398.94,-408.61 429.99,-489.22 445.15,-528.58 461.17,-575.12 470.14,-601.7\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"472.48,-608.65 467.26,-603.02 471.36,-605.33 470.24,-602.02 470.24,-602.02 470.24,-602.02 471.36,-605.33 473.23,-601.01 472.48,-608.65 472.48,-608.65\"/>\n",
"<text text-anchor=\"start\" x=\"377.66\" y=\"-508.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-493.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 19 -->\n",
"<g id=\"node19\" class=\"node\">\n",
"<title>19</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"478.33,-127.22 448.16,-109.22 478.33,-91.22 508.49,-109.22 478.33,-127.22\"/>\n",
"<text text-anchor=\"middle\" x=\"478.33\" y=\"-105.52\" font-family=\"Lato\" font-size=\"14.00\">19</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;19 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>6&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M335.8,-242.34C339.18,-206.24 348.82,-126.65 369.33,-110.22 392.14,-91.95 427.21,-95.56 451.16,-101.18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"458.2,-102.96 450.64,-104.3 454.81,-102.1 451.42,-101.24 451.42,-101.24 451.42,-101.24 454.81,-102.1 452.19,-98.19 458.2,-102.96 458.2,-102.96\"/>\n",
"<text text-anchor=\"start\" x=\"377.66\" y=\"-129.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-114.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 20 -->\n",
"<g id=\"node20\" class=\"node\">\n",
"<title>20</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"478.33,-225.22 448.16,-207.22 478.33,-189.22 508.49,-207.22 478.33,-225.22\"/>\n",
"<text text-anchor=\"middle\" x=\"478.33\" y=\"-203.52\" font-family=\"Lato\" font-size=\"14.00\">20</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;20 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>6&#45;&gt;20</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M342.47,-244.41C348.48,-234.51 357.62,-222.48 369.33,-216.22 392.98,-203.58 423.79,-202.22 446.44,-203.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"453.49,-204.01 446.28,-206.66 450,-203.76 446.51,-203.51 446.51,-203.51 446.51,-203.51 450,-203.76 446.73,-200.37 453.49,-204.01 453.49,-204.01\"/>\n",
"<text text-anchor=\"start\" x=\"375.66\" y=\"-235.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-220.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;4 -->\n",
"<g id=\"edge41\" class=\"edge\">\n",
"<title>19&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M485.9,-95.66C493.75,-80.74 508.15,-56.94 526.66,-42.22 577.46,-1.83 603.6,6.2 667.66,-4.22 720.23,-12.78 741.92,-6.38 781.32,-42.22 797.05,-56.53 806.09,-79.22 811.03,-96.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"812.9,-103.71 808.07,-97.74 812.01,-100.32 811.11,-96.94 811.11,-96.94 811.11,-96.94 812.01,-100.32 814.16,-96.13 812.9,-103.71 812.9,-103.71\"/>\n",
"<text text-anchor=\"start\" x=\"633.16\" y=\"-23.02\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-8.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;6 -->\n",
"<g id=\"edge42\" class=\"edge\">\n",
"<title>19&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M463.96,-118.67C454.64,-125.08 441.8,-133.57 429.99,-140.22 403.95,-154.89 389.61,-147.28 369.33,-169.22 352.24,-187.71 343.19,-215.43 338.61,-235.42\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"337.12,-242.4 335.5,-234.9 337.85,-238.98 338.58,-235.56 338.58,-235.56 338.58,-235.56 337.85,-238.98 341.67,-236.22 337.12,-242.4 337.12,-242.4\"/>\n",
"<text text-anchor=\"start\" x=\"391.16\" y=\"-188.02\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-173.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 20&#45;&gt;4 -->\n",
"<g id=\"edge43\" class=\"edge\">\n",
"<title>20&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M487.48,-194.11C506.41,-165.08 556.59,-95.9 619.66,-70.22 681.47,-45.05 759.35,-84.96 795.78,-107.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"802.08,-111.47 794.48,-110.39 799.12,-109.6 796.16,-107.73 796.16,-107.73 796.16,-107.73 799.12,-109.6 797.85,-105.07 802.08,-111.47 802.08,-111.47\"/>\n",
"<text text-anchor=\"start\" x=\"633.16\" y=\"-89.02\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-74.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node21\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"583.66\" cy=\"-211.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"583.66\" y=\"-207.52\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 20&#45;&gt;7 -->\n",
"<g id=\"edge44\" class=\"edge\">\n",
"<title>20&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M508.6,-207.2C520.7,-207.3 534.86,-207.58 547.66,-208.22 551.13,-208.4 554.79,-208.64 558.38,-208.92\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"565.58,-209.52 558.35,-212.08 562.1,-209.23 558.61,-208.94 558.61,-208.94 558.61,-208.94 562.1,-209.23 558.87,-205.8 565.58,-209.52 565.58,-209.52\"/>\n",
"<text text-anchor=\"start\" x=\"528.66\" y=\"-227.02\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"529.16\" y=\"-212.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;12 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>7&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M585.53,-229.4C588.77,-294.24 600.97,-511.67 619.66,-536.22 633.55,-554.48 652.2,-538.27 667.66,-555.22 702.89,-593.88 712,-657.39 714.29,-692.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"714.7,-699.71 711.17,-692.89 714.51,-696.21 714.31,-692.72 714.31,-692.72 714.31,-692.72 714.51,-696.21 717.46,-692.54 714.7,-699.71 714.7,-699.71\"/>\n",
"<text text-anchor=\"start\" x=\"623.66\" y=\"-574.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-559.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;13 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>7&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M586.31,-229.2C590.15,-267.38 600.81,-354.88 619.66,-377.22 634.45,-394.76 651.17,-380.27 667.66,-396.22 691.98,-419.76 704.56,-457.88 710.47,-482.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"712.09,-489.33 707.46,-483.21 711.31,-485.91 710.53,-482.5 710.53,-482.5 710.53,-482.5 711.31,-485.91 713.6,-481.8 712.09,-489.33 712.09,-489.33\"/>\n",
"<text text-anchor=\"start\" x=\"621.66\" y=\"-415.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-400.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 21 -->\n",
"<g id=\"node22\" class=\"node\">\n",
"<title>21</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"715.99,-260.22 685.82,-242.22 715.99,-224.22 746.16,-242.22 715.99,-260.22\"/>\n",
"<text text-anchor=\"middle\" x=\"715.99\" y=\"-238.52\" font-family=\"Lato\" font-size=\"14.00\">21</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;21 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>7&#45;&gt;21</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M601.88,-210.09C618.93,-209.47 645.61,-209.85 667.66,-216.22 677.42,-219.04 687.4,-224.14 695.66,-229.07\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"701.61,-232.77 694.01,-231.75 698.64,-230.92 695.67,-229.08 695.67,-229.08 695.67,-229.08 698.64,-230.92 697.33,-226.4 701.61,-232.77 701.61,-232.77\"/>\n",
"<text text-anchor=\"start\" x=\"621.66\" y=\"-235.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-220.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 22 -->\n",
"<g id=\"node23\" class=\"node\">\n",
"<title>22</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"715.99,-139.22 685.82,-121.22 715.99,-103.22 746.16,-121.22 715.99,-139.22\"/>\n",
"<text text-anchor=\"middle\" x=\"715.99\" y=\"-117.52\" font-family=\"Lato\" font-size=\"14.00\">22</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;22 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>7&#45;&gt;22</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M596.23,-198.08C602.73,-191.12 611.2,-182.71 619.66,-176.22 642.81,-158.46 672.27,-142.32 692.27,-132.18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"698.67,-128.98 693.82,-134.93 695.54,-130.55 692.41,-132.11 692.41,-132.11 692.41,-132.11 695.54,-130.55 691,-129.3 698.67,-128.98 698.67,-128.98\"/>\n",
"<text text-anchor=\"start\" x=\"619.66\" y=\"-195.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-180.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 21&#45;&gt;4 -->\n",
"<g id=\"edge45\" class=\"edge\">\n",
"<title>21&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M726.88,-230.18C744.14,-209.15 779.91,-165.58 800.6,-140.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"805.27,-134.69 803.26,-142.09 803.05,-137.39 800.83,-140.1 800.83,-140.1 800.83,-140.1 803.05,-137.39 798.39,-138.1 805.27,-134.69 805.27,-134.69\"/>\n",
"<text text-anchor=\"start\" x=\"764.32\" y=\"-201.02\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"764.82\" y=\"-186.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 21&#45;&gt;6 -->\n",
"<g id=\"edge46\" class=\"edge\">\n",
"<title>21&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M689.46,-244.58C682.4,-245.18 674.74,-245.78 667.66,-246.22 552,-253.54 413.51,-257.97 358.53,-259.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"351.34,-259.76 358.25,-256.41 354.84,-259.66 358.34,-259.56 358.34,-259.56 358.34,-259.56 354.84,-259.66 358.43,-262.71 351.34,-259.76 351.34,-259.76\"/>\n",
"<text text-anchor=\"start\" x=\"526.66\" y=\"-273.02\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"529.16\" y=\"-258.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 22&#45;&gt;4 -->\n",
"<g id=\"edge47\" class=\"edge\">\n",
"<title>22&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M746.26,-121.22C760.74,-121.22 778.03,-121.22 791.81,-121.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"799.06,-121.22 792.06,-124.37 795.56,-121.22 792.06,-121.22 792.06,-121.22 792.06,-121.22 795.56,-121.22 792.06,-118.07 799.06,-121.22 799.06,-121.22\"/>\n",
"<text text-anchor=\"start\" x=\"764.32\" y=\"-140.02\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"764.82\" y=\"-125.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 22&#45;&gt;7 -->\n",
"<g id=\"edge48\" class=\"edge\">\n",
"<title>22&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M698.47,-113.62C678.01,-105.45 643,-95.71 619.66,-112.22 596.29,-128.75 588.42,-162.24 585.83,-185.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"585.16,-192.9 582.67,-185.63 585.48,-189.41 585.8,-185.92 585.8,-185.92 585.8,-185.92 585.48,-189.41 588.94,-186.22 585.16,-192.9 585.16,-192.9\"/>\n",
"<text text-anchor=\"start\" x=\"633.16\" y=\"-131.02\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-116.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node24\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"583.66\" cy=\"-482.22\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"583.66\" y=\"-478.52\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;12 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>8&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M585.91,-500.1C588.47,-523.46 596.22,-564.31 619.66,-589.22 635.38,-605.93 651.17,-592.27 667.66,-608.22 691.98,-631.76 704.56,-669.88 710.47,-694.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"712.09,-701.33 707.46,-695.21 711.31,-697.91 710.53,-694.5 710.53,-694.5 710.53,-694.5 711.31,-697.91 713.6,-693.8 712.09,-701.33 712.09,-701.33\"/>\n",
"<text text-anchor=\"start\" x=\"623.66\" y=\"-627.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-612.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;16 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>8&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M586.73,-500.25C593.39,-557.83 614.14,-734.21 619.66,-745.22 633.02,-771.92 647.33,-770.35 667.66,-792.22 679.32,-804.77 691.8,-819.6 701.01,-830.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"705.51,-836.36 698.65,-832.93 703.3,-833.65 701.09,-830.94 701.09,-830.94 701.09,-830.94 703.3,-833.65 703.53,-828.95 705.51,-836.36 705.51,-836.36\"/>\n",
"<text text-anchor=\"start\" x=\"621.66\" y=\"-811.02\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-796.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;21 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>8&#45;&gt;21</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M583.85,-464.2C583.2,-430.14 586.06,-355.29 619.66,-305.22 624.52,-297.98 667.71,-270.95 694.26,-254.74\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"700.29,-251.07 695.95,-257.4 697.3,-252.89 694.31,-254.71 694.31,-254.71 694.31,-254.71 697.3,-252.89 692.68,-252.01 700.29,-251.07 700.29,-251.07\"/>\n",
"<text text-anchor=\"start\" x=\"621.66\" y=\"-324.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-309.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 23 -->\n",
"<g id=\"node25\" class=\"node\">\n",
"<title>23</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"715.99,-384.22 685.82,-366.22 715.99,-348.22 746.16,-366.22 715.99,-384.22\"/>\n",
"<text text-anchor=\"middle\" x=\"715.99\" y=\"-362.52\" font-family=\"Lato\" font-size=\"14.00\">23</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;23 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>8&#45;&gt;23</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M597.37,-470.4C603.77,-464.8 611.81,-458.24 619.66,-453.22 639.58,-440.47 649.42,-445.29 667.66,-430.22 682.67,-417.82 695.5,-399.67 704,-385.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"707.81,-379.49 706.93,-387.11 706.02,-382.49 704.22,-385.5 704.22,-385.5 704.22,-385.5 706.02,-382.49 701.52,-383.88 707.81,-379.49 707.81,-379.49\"/>\n",
"<text text-anchor=\"start\" x=\"619.66\" y=\"-472.02\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-457.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 23&#45;&gt;5 -->\n",
"<g id=\"edge49\" class=\"edge\">\n",
"<title>23&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M746.26,-366.22C760.74,-366.22 778.03,-366.22 791.81,-366.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"799.06,-366.22 792.06,-369.37 795.56,-366.22 792.06,-366.22 792.06,-366.22 792.06,-366.22 795.56,-366.22 792.06,-363.07 799.06,-366.22 799.06,-366.22\"/>\n",
"<text text-anchor=\"start\" x=\"764.32\" y=\"-385.02\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"764.82\" y=\"-370.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 23&#45;&gt;8 -->\n",
"<g id=\"edge50\" class=\"edge\">\n",
"<title>23&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M700.79,-357.08C680.64,-345.39 643.55,-328.74 619.66,-347.22 602.41,-360.57 592.1,-422.01 587.51,-457.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"586.62,-464.32 584.37,-456.98 587.05,-460.85 587.49,-457.37 587.49,-457.37 587.49,-457.37 587.05,-460.85 590.62,-457.77 586.62,-464.32 586.62,-464.32\"/>\n",
"<text text-anchor=\"start\" x=\"633.16\" y=\"-366.02\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"635.66\" y=\"-351.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 24&#45;&gt;0 -->\n",
"<g id=\"edge51\" class=\"edge\">\n",
"<title>24&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M211.05,-736.78C237.3,-742.29 281.32,-751.52 308.49,-757.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"315.34,-758.66 307.85,-760.31 311.92,-757.94 308.49,-757.22 308.49,-757.22 308.49,-757.22 311.92,-757.94 309.14,-754.14 315.34,-758.66 315.34,-758.66\"/>\n",
"<text text-anchor=\"start\" x=\"262.5\" y=\"-772.02\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"259\" y=\"-757.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 25&#45;&gt;3 -->\n",
"<g id=\"edge52\" class=\"edge\">\n",
"<title>25&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M424.04,-679.89C456.63,-686.25 515.35,-702.47 547.66,-740.22 574.03,-771.04 580.84,-819.44 582.42,-848.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"582.72,-855.9 579.28,-849.04 582.57,-852.41 582.43,-848.91 582.43,-848.91 582.43,-848.91 582.57,-852.41 585.57,-848.78 582.72,-855.9 582.72,-855.9\"/>\n",
"<text text-anchor=\"start\" x=\"473.83\" y=\"-726.02\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"470.33\" y=\"-711.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 26&#45;&gt;6 -->\n",
"<g id=\"edge53\" class=\"edge\">\n",
"<title>26&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M201.52,-369.08C226.47,-348.32 283.5,-300.86 313.34,-276.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"318.93,-271.38 315.56,-278.27 316.24,-273.61 313.55,-275.85 313.55,-275.85 313.55,-275.85 316.24,-273.61 311.53,-273.43 318.93,-271.38 318.93,-271.38\"/>\n",
"<text text-anchor=\"start\" x=\"262.5\" y=\"-357.02\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"259\" y=\"-342.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 27&#45;&gt;8 -->\n",
"<g id=\"edge54\" class=\"edge\">\n",
"<title>27&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M288.16,-560.84C343.83,-545.98 499.5,-504.42 559.07,-488.52\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"566.17,-486.63 560.22,-491.47 562.78,-487.53 559.4,-488.43 559.4,-488.43 559.4,-488.43 562.78,-487.53 558.59,-485.39 566.17,-486.63 566.17,-486.63\"/>\n",
"<text text-anchor=\"start\" x=\"395.16\" y=\"-557.02\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-542.02\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f7249801c30> >"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Create the game\n",
"gi = spot.game_info()\n",
"gi.s = spot.game_info.solver_LAR #Use lar solver\n",
"\n",
"#Todo arena changes when executed multiple times\n",
"game = spot.create_game(\"G((F(i0) && F(i1))->(G(i1<->(X(o0)))))\", [\"o0\"], gi)\n",
"print(\"game has \", game.num_states(), \" states, and \", game.num_edges(), \" edges.\")\n",
"print(\"output propositions are \", spot.get_synthesis_output_aps(game))\n",
"display(game)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found a solution: True\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=\"444pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 444.30 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.5025125628140703 0.5025125628140703) rotate(0) translate(4 713.88)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-713.88 881.99,-713.88 881.99,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"327.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"348.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"364.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"406.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"422.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"468.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"484.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"522.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"538.49\" y=\"-695.68\" font-family=\"Lato\" font-size=\"14.00\">)))</text>\n",
"<text text-anchor=\"start\" x=\"383.49\" y=\"-681.68\" font-family=\"Lato\" font-size=\"14.00\">[parity max odd 4]</text>\n",
"<!-- I -->\n",
"<!-- 9 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"56\" cy=\"-441.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-438.18\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- I&#45;&gt;9 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-441.88C2.79,-441.88 17.15,-441.88 30.63,-441.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-441.88 30.94,-445.03 34.44,-441.88 30.94,-441.88 30.94,-441.88 30.94,-441.88 34.44,-441.88 30.94,-438.73 37.94,-441.88 37.94,-441.88\"/>\n",
"</g>\n",
"<!-- 24 -->\n",
"<g id=\"node26\" class=\"node\">\n",
"<title>24</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"156.33,-545.88 126.17,-527.88 156.33,-509.88 186.5,-527.88 156.33,-545.88\"/>\n",
"<text text-anchor=\"middle\" x=\"156.33\" y=\"-524.18\" font-family=\"Lato\" font-size=\"14.00\">24</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;24 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>9&#45;&gt;24</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M67,-456.72C73.5,-465.74 82.5,-477.17 92,-485.88 104.67,-497.5 120.85,-508.17 133.68,-515.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"140.05,-519.58 132.42,-518.76 137.03,-517.81 134.01,-516.04 134.01,-516.04 134.01,-516.04 137.03,-517.81 135.6,-513.32 140.05,-519.58 140.05,-519.58\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-500.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 25 -->\n",
"<g id=\"node27\" class=\"node\">\n",
"<title>25</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"367.66,-496.88 337.5,-478.88 367.66,-460.88 397.83,-478.88 367.66,-496.88\"/>\n",
"<text text-anchor=\"middle\" x=\"367.66\" y=\"-475.18\" font-family=\"Lato\" font-size=\"14.00\">25</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;25 -->\n",
"<g id=\"edge29\" class=\"edge\">\n",
"<title>9&#45;&gt;25</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.62,-446.7C79.4,-448.23 85.95,-449.8 92,-450.88 177.85,-466.2 280.41,-473.89 332.56,-477.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"339.57,-477.47 332.4,-480.2 336.08,-477.26 332.59,-477.05 332.59,-477.05 332.59,-477.05 336.08,-477.26 332.77,-473.91 339.57,-477.47 339.57,-477.47\"/>\n",
"<text text-anchor=\"start\" x=\"148.33\" y=\"-467.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 26 -->\n",
"<g id=\"node28\" class=\"node\">\n",
"<title>26</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"156.33,-320.88 126.17,-302.88 156.33,-284.88 186.5,-302.88 156.33,-320.88\"/>\n",
"<text text-anchor=\"middle\" x=\"156.33\" y=\"-299.18\" font-family=\"Lato\" font-size=\"14.00\">26</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;26 -->\n",
"<g id=\"edge30\" class=\"edge\">\n",
"<title>9&#45;&gt;26</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M65.31,-426.2C72.05,-413.87 82.03,-396.39 92,-381.88 107.34,-359.55 127.15,-335.48 140.5,-319.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"145.11,-314.5 142.93,-321.86 142.83,-317.16 140.54,-319.81 140.54,-319.81 140.54,-319.81 142.83,-317.16 138.16,-317.76 145.11,-314.5 145.11,-314.5\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-385.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 27 -->\n",
"<g id=\"node29\" class=\"node\">\n",
"<title>27</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"235,-409.88 204.83,-391.88 235,-373.88 265.16,-391.88 235,-409.88\"/>\n",
"<text text-anchor=\"middle\" x=\"235\" y=\"-388.18\" font-family=\"Lato\" font-size=\"14.00\">27</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;27 -->\n",
"<g id=\"edge31\" class=\"edge\">\n",
"<title>9&#45;&gt;27</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.65,-437.17C104.31,-428.51 169.93,-409.98 207.02,-399.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"214.04,-397.52 208.16,-402.45 210.67,-398.47 207.3,-399.42 207.3,-399.42 207.3,-399.42 210.67,-398.47 206.45,-396.39 214.04,-397.52 214.04,-397.52\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-435.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"301.33\" cy=\"-549.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"301.33\" y=\"-546.18\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>10</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"446.33,-613.88 416.16,-595.88 446.33,-577.88 476.49,-595.88 446.33,-613.88\"/>\n",
"<text text-anchor=\"middle\" x=\"446.33\" y=\"-592.18\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;10 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M309.12,-566.33C314.8,-577.75 324.13,-592.09 337.33,-598.88 362.61,-611.89 395.82,-608.44 418.7,-603.46\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"425.75,-601.81 419.65,-606.47 422.34,-602.61 418.93,-603.41 418.93,-603.41 418.93,-603.41 422.34,-602.61 418.21,-600.34 425.75,-601.81 425.75,-601.81\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-611.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>11</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"446.33,-458.88 416.16,-440.88 446.33,-422.88 476.49,-440.88 446.33,-458.88\"/>\n",
"<text text-anchor=\"middle\" x=\"446.33\" y=\"-437.18\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;11 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M301.88,-531.71C302.36,-505.77 307.57,-458.81 337.33,-436.88 361.14,-419.32 396.6,-424.91 420.31,-431.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"427.27,-433.95 419.65,-434.89 423.93,-432.91 420.58,-431.88 420.58,-431.88 420.58,-431.88 423.93,-432.91 421.51,-428.87 427.27,-433.95 427.27,-433.95\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-440.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;0 -->\n",
"<g id=\"edge32\" class=\"edge\">\n",
"<title>10&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M426.47,-589.4C417.81,-586.45 407.4,-582.94 397.99,-579.88 371.13,-571.13 364.29,-569.34 337.33,-560.88 333.53,-559.69 329.5,-558.42 325.58,-557.19\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"318.71,-555.03 326.33,-554.12 322.2,-555.6 325.54,-556.65 325.39,-557.13 325.24,-557.61 321.9,-556.56 324.44,-560.13 318.71,-555.03 318.71,-555.03\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-583.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"546.66\" cy=\"-467.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"546.66\" y=\"-464.18\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;1 -->\n",
"<g id=\"edge33\" class=\"edge\">\n",
"<title>11&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M467.7,-446.47C483.65,-450.85 505.84,-456.94 522.46,-461.51\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"529.22,-463.36 521.63,-464.55 525.71,-462.92 522.33,-461.99 522.47,-461.51 522.6,-461.03 525.97,-461.95 523.3,-458.47 529.22,-463.36 529.22,-463.36\"/>\n",
"<text text-anchor=\"start\" x=\"494.66\" y=\"-460.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>12</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"646.99,-537.88 616.82,-519.88 646.99,-501.88 677.16,-519.88 646.99,-537.88\"/>\n",
"<text text-anchor=\"middle\" x=\"646.99\" y=\"-516.18\" font-family=\"Lato\" font-size=\"14.00\">12</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;12 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M560.07,-480.53C566.39,-486.43 574.47,-493.17 582.66,-497.88 593.69,-504.22 606.85,-509.15 618.3,-512.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"625.18,-514.78 617.58,-515.8 621.83,-513.78 618.48,-512.78 618.48,-512.78 618.48,-512.78 621.83,-513.78 619.38,-509.76 625.18,-514.78 625.18,-514.78\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-508.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>13</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"646.99,-385.88 616.82,-367.88 646.99,-349.88 677.16,-367.88 646.99,-385.88\"/>\n",
"<text text-anchor=\"middle\" x=\"646.99\" y=\"-364.18\" font-family=\"Lato\" font-size=\"14.00\">13</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;13 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M548.2,-449.61C549.99,-426.48 556.9,-387.4 582.66,-368.88 592.79,-361.59 606.38,-360.57 618.37,-361.69\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"625.59,-362.62 618.24,-364.85 622.12,-362.17 618.65,-361.72 618.65,-361.72 618.65,-361.72 622.12,-362.17 619.05,-358.6 625.59,-362.62 625.59,-362.62\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-372.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;0 -->\n",
"<g id=\"edge34\" class=\"edge\">\n",
"<title>12&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M620.35,-522.12C556.13,-527.72 389.06,-542.31 326.47,-547.77\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"319.37,-548.39 326.07,-544.64 322.81,-547.59 326.3,-547.28 326.34,-547.78 326.39,-548.28 322.9,-548.58 326.62,-550.92 319.37,-548.39 319.37,-548.39\"/>\n",
"<text text-anchor=\"start\" x=\"494.66\" y=\"-535.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;1 -->\n",
"<g id=\"edge35\" class=\"edge\">\n",
"<title>13&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M642.61,-383.44C637.19,-404.41 624.43,-441.26 598.66,-459.88 590.98,-465.43 580.94,-467.76 571.8,-468.58\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"564.73,-468.95 571.56,-465.44 568.2,-468.27 571.7,-468.09 571.72,-468.59 571.75,-469.08 568.25,-469.27 571.89,-471.73 564.73,-468.95 564.73,-468.95\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-469.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"747.32\" cy=\"-438.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"747.32\" y=\"-435.18\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>14</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"847.65,-323.88 817.49,-305.88 847.65,-287.88 877.82,-305.88 847.65,-323.88\"/>\n",
"<text text-anchor=\"middle\" x=\"847.65\" y=\"-302.18\" font-family=\"Lato\" font-size=\"14.00\">14</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;14 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M758.85,-424.64C776.9,-400.22 813.74,-350.39 833.48,-323.7\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"837.65,-318.06 836.02,-325.56 835.97,-321.17 833.89,-323.99 833.48,-323.69 833.08,-323.39 835.16,-320.58 830.95,-321.82 837.65,-318.06 837.65,-318.06\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-391.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 15 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>15</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"847.65,-437.88 817.49,-419.88 847.65,-401.88 877.82,-419.88 847.65,-437.88\"/>\n",
"<text text-anchor=\"middle\" x=\"847.65\" y=\"-416.18\" font-family=\"Lato\" font-size=\"14.00\">15</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;15 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M763.05,-429.39C769.09,-426.03 776.3,-422.64 783.32,-420.88 793.11,-418.43 804.01,-417.6 813.98,-417.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"821.04,-417.65 814,-420.71 817.54,-417.6 814.04,-417.56 814.04,-417.56 814.04,-417.56 817.54,-417.6 814.08,-414.41 821.04,-417.65 821.04,-417.65\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-424.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 15&#45;&gt;2 -->\n",
"<g id=\"edge36\" class=\"edge\">\n",
"<title>15&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M828.98,-427.11C820.21,-430.37 809.37,-433.92 799.32,-435.88 790.7,-437.56 781.12,-438.39 772.61,-438.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"765.46,-439.01 772.36,-435.63 768.96,-438.89 772.46,-438.78 772.46,-438.78 772.46,-438.78 768.96,-438.89 772.56,-441.92 765.46,-439.01 765.46,-439.01\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-441.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"546.66\" cy=\"-639.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"546.66\" y=\"-636.18\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;12 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M562.23,-630.28C573.12,-622.64 587.91,-611.21 598.66,-598.88 614.42,-580.79 627.97,-556.76 636.48,-539.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"639.6,-533.7 639.3,-541.37 638.04,-536.83 636.48,-539.96 636.48,-539.96 636.48,-539.96 638.04,-536.83 633.66,-538.56 639.6,-533.7 639.6,-533.7\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-617.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 16 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>16</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"646.99,-638.88 616.82,-620.88 646.99,-602.88 677.16,-620.88 646.99,-638.88\"/>\n",
"<text text-anchor=\"middle\" x=\"646.99\" y=\"-617.18\" font-family=\"Lato\" font-size=\"14.00\">16</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;16 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M564.8,-640.01C574.76,-639.8 587.51,-639.05 598.66,-636.88 606.19,-635.41 614.17,-633.05 621.39,-630.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"628.31,-628.11 622.78,-633.43 625.02,-629.28 621.72,-630.46 621.72,-630.46 621.72,-630.46 625.02,-629.28 620.66,-627.5 628.31,-628.11 628.31,-628.11\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-642.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;2 -->\n",
"<g id=\"edge37\" class=\"edge\">\n",
"<title>16&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M655.22,-607.5C672.08,-576.3 714.1,-498.52 734.64,-460.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"737.98,-454.31 737.43,-461.97 736.32,-457.39 734.66,-460.47 734.66,-460.47 734.66,-460.47 736.32,-457.39 731.88,-458.97 737.98,-454.31 737.98,-454.31\"/>\n",
"<text text-anchor=\"start\" x=\"695.32\" y=\"-533.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;3 -->\n",
"<g id=\"edge38\" class=\"edge\">\n",
"<title>16&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M635.62,-632.39C626.79,-641.27 613.25,-652.85 598.66,-657.88 588.66,-661.32 577.58,-658.25 568.31,-653.73\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"561.93,-650.25 569.58,-650.83 565.24,-651.49 568.31,-653.16 568.08,-653.6 567.84,-654.04 564.76,-652.37 566.57,-656.37 561.93,-650.25 561.93,-650.25\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-662.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"747.32\" cy=\"-92.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"747.32\" y=\"-89.18\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;14 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M751.38,-110.49C755.93,-133.83 765.89,-175.79 783.32,-207.88 788.59,-217.58 792.91,-217.89 799.32,-226.88 813.14,-246.24 826.88,-269.77 835.97,-286.09\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"839.56,-292.61 833.42,-288 837.44,-289.79 835.74,-286.72 836.18,-286.48 836.62,-286.24 838.31,-289.31 838.94,-284.96 839.56,-292.61 839.56,-292.61\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-230.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 17 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>17</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"847.65,-133.88 817.49,-115.88 847.65,-97.88 877.82,-115.88 847.65,-133.88\"/>\n",
"<text text-anchor=\"middle\" x=\"847.65\" y=\"-112.18\" font-family=\"Lato\" font-size=\"14.00\">17</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;17 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M765,-96.78C779.58,-100.19 801.05,-105.21 818.31,-109.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"825.42,-110.91 817.89,-112.39 822.02,-110.12 818.61,-109.32 818.61,-109.32 818.61,-109.32 822.02,-110.12 819.32,-106.25 825.42,-110.91 825.42,-110.91\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-108.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;4 -->\n",
"<g id=\"edge39\" class=\"edge\">\n",
"<title>17&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M835.3,-104.94C826.34,-97.1 813.08,-87.2 799.32,-82.88 790.22,-80.02 779.94,-81.23 771,-83.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"764.17,-85.76 769.92,-80.67 767.51,-84.72 770.85,-83.68 770.85,-83.68 770.85,-83.68 767.51,-84.72 771.79,-86.68 764.17,-85.76 764.17,-85.76\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-86.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"747.32\" cy=\"-267.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"747.32\" y=\"-264.18\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;14 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M763.87,-275.37C769.89,-278.17 776.87,-281.29 783.32,-283.88 795.49,-288.76 809.21,-293.6 820.76,-297.5\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"827.64,-299.79 820,-300.57 824.16,-299.16 820.84,-298.05 821,-297.58 821.16,-297.1 824.48,-298.21 821.99,-294.59 827.64,-299.79 827.64,-299.79\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-293.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;15 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M757.93,-282.73C775.89,-310.49 814.51,-370.19 834.34,-400.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"838.28,-406.93 831.83,-402.76 836.38,-403.99 834.48,-401.05 834.48,-401.05 834.48,-401.05 836.38,-403.99 837.12,-399.34 838.28,-406.93 838.28,-406.93\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-347.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;17 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>5&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M751.86,-250.17C756.56,-229.71 766.31,-195.69 783.32,-170.88 794.82,-154.11 812.61,-139.27 826.42,-129.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"832.44,-124.99 828.54,-131.6 829.58,-127.01 826.72,-129.03 826.72,-129.03 826.72,-129.03 829.58,-127.01 824.91,-126.46 832.44,-124.99 832.44,-124.99\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-174.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 18 -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>18</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"847.65,-239.88 817.49,-221.88 847.65,-203.88 877.82,-221.88 847.65,-239.88\"/>\n",
"<text text-anchor=\"middle\" x=\"847.65\" y=\"-218.18\" font-family=\"Lato\" font-size=\"14.00\">18</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;18 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>5&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M764.51,-261.2C774.6,-256.96 787.8,-251.28 799.32,-245.88 807.66,-241.97 816.71,-237.45 824.64,-233.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"831,-230.12 826.22,-236.13 827.89,-231.73 824.77,-233.33 824.77,-233.33 824.77,-233.33 827.89,-231.73 823.33,-230.53 831,-230.12 831,-230.12\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-256.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 18&#45;&gt;5 -->\n",
"<g id=\"edge40\" class=\"edge\">\n",
"<title>18&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M835.89,-210.52C822.9,-198.25 800.66,-181.83 783.32,-192.88 766.14,-203.82 757.26,-225.64 752.75,-242.94\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"751.07,-250.03 749.62,-242.49 751.88,-246.62 752.68,-243.21 752.68,-243.21 752.68,-243.21 751.88,-246.62 755.75,-243.94 751.07,-250.03 751.07,-250.03\"/>\n",
"<text text-anchor=\"start\" x=\"783.32\" y=\"-196.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node18\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"301.33\" cy=\"-182.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"301.33\" y=\"-179.18\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;10 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>6&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M302.45,-201.01C303.13,-260.19 307.65,-446.87 337.33,-497.88 354.08,-526.67 373.38,-519.44 397.99,-541.88 410.12,-552.93 422.29,-566.9 431.25,-577.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"435.88,-583.59 429.03,-580.12 433.68,-580.87 431.49,-578.15 431.49,-578.15 431.49,-578.15 433.68,-580.87 433.94,-576.17 435.88,-583.59 435.88,-583.59\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-545.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;11 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>6&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M312.09,-197.83C330.01,-225.53 368.99,-286.93 397.99,-340.88 412.46,-367.78 427.21,-399.85 436.32,-420.28\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"439.18,-426.74 433.47,-421.62 437.77,-423.54 436.35,-420.34 436.35,-420.34 436.35,-420.34 437.77,-423.54 439.23,-419.07 439.18,-426.74 439.18,-426.74\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-344.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 19 -->\n",
"<g id=\"node19\" class=\"node\">\n",
"<title>19</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"446.33,-94.88 416.16,-76.88 446.33,-58.88 476.49,-76.88 446.33,-94.88\"/>\n",
"<text text-anchor=\"middle\" x=\"446.33\" y=\"-73.18\" font-family=\"Lato\" font-size=\"14.00\">19</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;19 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>6&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M302.41,-164.77C303.63,-140.43 309.83,-97.89 337.33,-77.88 360.82,-60.78 395.45,-64.02 419.12,-69.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"426.09,-70.9 418.55,-72.34 422.68,-70.08 419.28,-69.27 419.28,-69.27 419.28,-69.27 422.68,-70.08 420.01,-66.21 426.09,-70.9 426.09,-70.9\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-81.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 20 -->\n",
"<g id=\"node20\" class=\"node\">\n",
"<title>20</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"446.33,-154.88 416.16,-136.88 446.33,-118.88 476.49,-136.88 446.33,-154.88\"/>\n",
"<text text-anchor=\"middle\" x=\"446.33\" y=\"-133.18\" font-family=\"Lato\" font-size=\"14.00\">20</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;20 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>6&#45;&gt;20</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M314.48,-170.02C320.74,-164.17 328.84,-157.71 337.33,-153.88 360.02,-143.63 387.81,-139.43 409.52,-137.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"416.63,-137.28 409.86,-140.89 413.14,-137.51 409.65,-137.75 409.65,-137.75 409.65,-137.75 413.14,-137.51 409.44,-134.6 416.63,-137.28 416.63,-137.28\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-157.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;4 -->\n",
"<g id=\"edge41\" class=\"edge\">\n",
"<title>19&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M455.57,-64.24C463.99,-52.33 478.15,-34.86 494.66,-24.88 535.16,-0.38 551.56,2.88 598.66,-1.88 649.5,-7.02 670.59,5.99 711.32,-24.88 725.51,-35.63 734.44,-53.77 739.72,-68.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"742.03,-75.58 736.84,-69.93 740.93,-72.26 739.83,-68.94 739.83,-68.94 739.83,-68.94 740.93,-72.26 742.82,-67.95 742.03,-75.58 742.03,-75.58\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-5.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;6 -->\n",
"<g id=\"edge42\" class=\"edge\">\n",
"<title>19&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M427.1,-83.55C398.2,-94.25 344.39,-114.66 337.33,-120.88 325.48,-131.31 316.74,-146.77 310.96,-159.64\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"308.2,-166.09 308.05,-158.42 309.12,-162.68 310.49,-159.46 310.95,-159.66 311.41,-159.85 310.04,-163.07 313.85,-160.89 308.2,-166.09 308.2,-166.09\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-124.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 20&#45;&gt;4 -->\n",
"<g id=\"edge43\" class=\"edge\">\n",
"<title>20&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M461.48,-127.5C489.61,-109.69 555.13,-72.15 616.66,-65.88 643.48,-63.15 650.83,-60.88 677.32,-65.88 693.68,-68.97 711.14,-75.83 724.4,-81.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"730.92,-84.93 723.25,-84.81 727.75,-83.44 724.59,-81.96 724.59,-81.96 724.59,-81.96 727.75,-83.44 725.92,-79.1 730.92,-84.93 730.92,-84.93\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-76.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node21\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"546.66\" cy=\"-136.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"546.66\" y=\"-133.18\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 20&#45;&gt;7 -->\n",
"<g id=\"edge44\" class=\"edge\">\n",
"<title>20&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M476.56,-136.88C490.8,-136.88 507.71,-136.88 521.25,-136.88\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"528.38,-136.88 521.38,-140.03 524.88,-137.38 521.38,-137.38 521.38,-136.88 521.38,-136.38 524.88,-136.38 521.38,-133.73 528.38,-136.88 528.38,-136.88\"/>\n",
"<text text-anchor=\"start\" x=\"494.66\" y=\"-140.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;12 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>7&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M546.89,-155.18C545.82,-197.46 547.13,-304.4 582.66,-383.88 587.16,-393.96 592.96,-393.42 598.66,-402.88 617.39,-433.97 631.69,-473.81 639.46,-498.06\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"641.57,-504.76 636.47,-499.03 640.52,-501.43 639.47,-498.09 639.47,-498.09 639.47,-498.09 640.52,-501.43 642.48,-497.14 641.57,-504.76 641.57,-504.76\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-406.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;13 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>7&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M550.49,-154.69C555.05,-180.78 565.31,-230.56 582.66,-269.88 584.51,-274.08 615.56,-321.56 633.48,-348.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"637.51,-355 631.04,-350.88 635.59,-352.07 633.67,-349.15 633.67,-349.15 633.67,-349.15 635.59,-352.07 636.3,-347.42 637.51,-355 637.51,-355\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-297.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 21 -->\n",
"<g id=\"node22\" class=\"node\">\n",
"<title>21</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"646.99,-189.88 616.82,-171.88 646.99,-153.88 677.16,-171.88 646.99,-189.88\"/>\n",
"<text text-anchor=\"middle\" x=\"646.99\" y=\"-168.18\" font-family=\"Lato\" font-size=\"14.00\">21</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;21 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>7&#45;&gt;21</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M564.25,-142.22C574.26,-145.48 587.23,-149.8 598.66,-153.88 605.99,-156.49 613.9,-159.45 621.13,-162.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"628.07,-164.86 620.41,-165.3 624.81,-163.61 621.54,-162.36 621.54,-162.36 621.54,-162.36 624.81,-163.61 622.67,-159.42 628.07,-164.86 628.07,-164.86\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-157.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 22 -->\n",
"<g id=\"node23\" class=\"node\">\n",
"<title>22</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"646.99,-110.88 616.82,-92.88 646.99,-74.88 677.16,-92.88 646.99,-110.88\"/>\n",
"<text text-anchor=\"middle\" x=\"646.99\" y=\"-89.18\" font-family=\"Lato\" font-size=\"14.00\">22</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;22 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>7&#45;&gt;22</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M563.46,-129.81C579.51,-122.63 604.55,-111.42 622.84,-103.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"629.24,-100.37 624.14,-106.11 626.05,-101.8 622.85,-103.23 622.85,-103.23 622.85,-103.23 626.05,-101.8 621.57,-100.36 629.24,-100.37 629.24,-100.37\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-124.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 21&#45;&gt;4 -->\n",
"<g id=\"edge45\" class=\"edge\">\n",
"<title>21&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M660.44,-161.87C677.28,-148.34 707.47,-124.09 727.2,-108.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"732.71,-103.81 729.22,-110.65 729.98,-106.01 727.25,-108.2 727.25,-108.2 727.25,-108.2 729.98,-106.01 725.28,-105.74 732.71,-103.81 732.71,-103.81\"/>\n",
"<text text-anchor=\"start\" x=\"695.32\" y=\"-136.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 21&#45;&gt;6 -->\n",
"<g id=\"edge46\" class=\"edge\">\n",
"<title>21&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M617.88,-172.78C551.91,-174.89 388.11,-180.13 326.38,-182.11\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"319.37,-182.33 326.27,-178.96 322.85,-181.72 326.35,-181.61 326.37,-182.11 326.38,-182.61 322.89,-182.72 326.47,-185.26 319.37,-182.33 319.37,-182.33\"/>\n",
"<text text-anchor=\"start\" x=\"494.66\" y=\"-180.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 22&#45;&gt;4 -->\n",
"<g id=\"edge47\" class=\"edge\">\n",
"<title>22&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M677.23,-92.88C691.46,-92.88 708.38,-92.88 721.91,-92.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"729.04,-92.88 722.04,-96.03 725.54,-92.88 722.04,-92.88 722.04,-92.88 722.04,-92.88 725.54,-92.88 722.04,-89.73 729.04,-92.88 729.04,-92.88\"/>\n",
"<text text-anchor=\"start\" x=\"695.32\" y=\"-96.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 22&#45;&gt;7 -->\n",
"<g id=\"edge48\" class=\"edge\">\n",
"<title>22&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M622.01,-89.63C609.66,-89.01 594.72,-89.97 582.66,-95.88 573.68,-100.28 566.11,-108.14 560.32,-115.81\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"556.26,-121.58 557.71,-114.04 557.86,-118.43 559.88,-115.57 560.29,-115.86 560.7,-116.15 558.68,-119.01 562.86,-117.67 556.26,-121.58 556.26,-121.58\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-99.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node24\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"546.66\" cy=\"-361.88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"546.66\" y=\"-358.18\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;12 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>8&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M555.87,-377.62C562.56,-390 572.51,-407.49 582.66,-421.88 589.02,-430.9 592.24,-431.89 598.66,-440.88 612.47,-460.24 626.21,-483.77 635.3,-500.09\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"638.9,-506.61 632.76,-502 637.21,-503.55 635.52,-500.48 635.52,-500.48 635.52,-500.48 637.21,-503.55 638.28,-498.96 638.9,-506.61 638.9,-506.61\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-444.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;16 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>8&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M551.45,-379.47C560.47,-421.34 582.48,-523.46 582.66,-523.88 595.19,-553.89 617.16,-584.69 631.65,-603.31\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"636.25,-609.14 629.44,-605.6 634.08,-606.39 631.91,-603.65 631.91,-603.65 631.91,-603.65 634.08,-606.39 634.38,-601.69 636.25,-609.14 636.25,-609.14\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-558.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;21 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>8&#45;&gt;21</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M549.31,-343.7C552.4,-317.21 560.84,-267.2 582.66,-230.88 593.69,-212.51 612.09,-196.29 626.22,-185.53\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"631.98,-181.27 628.23,-187.96 629.17,-183.35 626.36,-185.43 626.36,-185.43 626.36,-185.43 629.17,-183.35 624.48,-182.9 631.98,-181.27 631.98,-181.27\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-234.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 23 -->\n",
"<g id=\"node25\" class=\"node\">\n",
"<title>23</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"646.99,-285.88 616.82,-267.88 646.99,-249.88 677.16,-267.88 646.99,-285.88\"/>\n",
"<text text-anchor=\"middle\" x=\"646.99\" y=\"-264.18\" font-family=\"Lato\" font-size=\"14.00\">23</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;23 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>8&#45;&gt;23</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M560.51,-349.59C578.21,-332.67 610.1,-302.18 629.53,-283.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"634.66,-278.71 631.77,-285.83 632.13,-281.13 629.6,-283.55 629.6,-283.55 629.6,-283.55 632.13,-281.13 627.42,-281.27 634.66,-278.71 634.66,-278.71\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-329.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 23&#45;&gt;5 -->\n",
"<g id=\"edge49\" class=\"edge\">\n",
"<title>23&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M677.23,-267.88C691.46,-267.88 708.38,-267.88 721.91,-267.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"729.04,-267.88 722.04,-271.03 725.54,-267.88 722.04,-267.88 722.04,-267.88 722.04,-267.88 725.54,-267.88 722.04,-264.73 729.04,-267.88 729.04,-267.88\"/>\n",
"<text text-anchor=\"start\" x=\"695.32\" y=\"-271.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 23&#45;&gt;8 -->\n",
"<g id=\"edge50\" class=\"edge\">\n",
"<title>23&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M631.56,-259.04C617.77,-251.86 597.02,-244.47 582.66,-254.88 557.02,-273.46 549.82,-311.38 547.98,-336.71\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"547.58,-343.82 544.83,-336.65 547.28,-340.3 547.47,-336.8 547.97,-336.83 548.47,-336.86 548.28,-340.35 551.12,-337.01 547.58,-343.82 547.58,-343.82\"/>\n",
"<text text-anchor=\"start\" x=\"582.66\" y=\"-258.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 24&#45;&gt;0 -->\n",
"<g id=\"edge51\" class=\"edge\">\n",
"<title>24&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M180.63,-531.46C206.96,-535.51 249.62,-542.08 276.26,-546.18\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"283.33,-547.26 275.93,-549.31 279.79,-547.22 276.33,-546.69 276.41,-546.2 276.48,-545.7 279.94,-546.24 276.89,-543.08 283.33,-547.26 283.33,-547.26\"/>\n",
"<text text-anchor=\"start\" x=\"227\" y=\"-547.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 25&#45;&gt;3 -->\n",
"<g id=\"edge52\" class=\"edge\">\n",
"<title>25&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M394.68,-480.88C426.36,-484.7 479.5,-495.79 510.66,-527.88 533.52,-551.42 541.47,-589.69 544.22,-614.82\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"544.89,-621.85 541.09,-615.19 544.06,-618.42 543.73,-614.93 544.23,-614.89 544.72,-614.84 545.06,-618.32 547.36,-614.59 544.89,-621.85 544.89,-621.85\"/>\n",
"<text text-anchor=\"start\" x=\"438.33\" y=\"-506.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 26&#45;&gt;6 -->\n",
"<g id=\"edge53\" class=\"edge\">\n",
"<title>26&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M169.52,-292.65C194.47,-271.71 251.5,-223.85 281.34,-198.81\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"286.93,-194.12 283.59,-201.04 284.57,-196.76 281.89,-199.01 281.57,-198.62 281.24,-198.24 283.93,-195.99 279.54,-196.21 286.93,-194.12 286.93,-194.12\"/>\n",
"<text text-anchor=\"start\" x=\"227\" y=\"-264.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 27&#45;&gt;8 -->\n",
"<g id=\"edge54\" class=\"edge\">\n",
"<title>27&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M261.34,-389.42C319.81,-383.76 463.56,-369.83 521.18,-364.25\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"528.41,-363.55 521.75,-367.36 524.97,-364.38 521.49,-364.72 521.44,-364.22 521.39,-363.73 524.88,-363.39 521.14,-361.09 528.41,-363.55 528.41,-363.55\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-384.68\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Solve the game\n",
"print(\"Found a solution: \", spot.solve_game(game))\n",
"spot.highlight_strategy(game)\n",
"game.show('.g')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"minimization lvl 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=\"729pt\" height=\"302pt\"\n",
" viewBox=\"0.00 0.00 729.00 302.14\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.8264462809917356 0.8264462809917356) rotate(0) translate(4 363)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-363 881.5,-363 881.5,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"435.75\" y=\"-343.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"427.75\" y=\"-328.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",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-108\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-104.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-108C2.79,-108 17.15,-108 30.63,-108\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-108 30.94,-111.15 34.44,-108 30.94,-108 30.94,-108 30.94,-108 34.44,-108 30.94,-104.85 37.94,-108 37.94,-108\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"707\" cy=\"-166\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"707\" y=\"-162.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.12,-106.74C103.8,-104.63 166.74,-100.47 220,-99 411.71,-93.71 459.34,-119.51 648,-154 659.34,-156.07 671.87,-158.63 682.38,-160.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"689.29,-162.33 681.79,-163.95 685.87,-161.6 682.44,-160.87 682.44,-160.87 682.44,-160.87 685.87,-161.6 683.1,-157.79 689.29,-162.33 689.29,-162.33\"/>\n",
"<text text-anchor=\"start\" x=\"320\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"340\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"340\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M67.13,-93.71C73.42,-85.86 82.17,-76.61 92,-71 165.44,-29.11 268.33,-20.26 314.68,-18.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"321.88,-18.19 314.99,-21.58 318.38,-18.31 314.88,-18.43 314.88,-18.43 314.88,-18.43 318.38,-18.31 314.78,-15.28 321.88,-18.19 321.88,-18.19\"/>\n",
"<text text-anchor=\"start\" x=\"158\" y=\"-46.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"340\" cy=\"-223\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"340\" y=\"-219.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M68.51,-121.48C85.81,-140.76 120.51,-175.79 158,-193 210.29,-217.01 278.92,-222.07 314.78,-222.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"321.92,-223.11 314.86,-226.12 318.42,-223.04 314.92,-222.97 314.92,-222.97 314.92,-222.97 318.42,-223.04 314.98,-219.83 321.92,-223.11 321.92,-223.11\"/>\n",
"<text text-anchor=\"start\" x=\"158\" y=\"-211.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"180\" cy=\"-133\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"180\" y=\"-129.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.71,-111.42C94.76,-115.74 131.09,-123.18 155.08,-128.1\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"162.1,-129.54 154.61,-131.22 158.67,-128.83 155.25,-128.13 155.25,-128.13 155.25,-128.13 158.67,-128.83 155.88,-125.05 162.1,-129.54 162.1,-129.54\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-128.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M694.16,-178.92C688.31,-190.13 692.59,-202 707,-202 718.49,-202 723.54,-194.47 722.15,-185.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"719.84,-178.92 725.07,-184.53 720.96,-182.23 722.09,-185.55 722.09,-185.55 722.09,-185.55 720.96,-182.23 719.11,-186.56 719.84,-178.92 719.84,-178.92\"/>\n",
"<text text-anchor=\"start\" x=\"684\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"851\" cy=\"-242\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"851\" y=\"-238.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;5 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M725.19,-164.03C747.79,-162.35 787.81,-162.61 815,-181 828.01,-189.79 836.78,-205.14 842.29,-218.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"844.87,-224.84 839.39,-219.48 843.6,-221.59 842.32,-218.33 842.32,-218.33 842.32,-218.33 843.6,-221.59 845.25,-217.18 844.87,-224.84 844.87,-224.84\"/>\n",
"<text text-anchor=\"start\" x=\"766\" y=\"-184.8\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; o0</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=\"black\" d=\"M358.16,-18.19C407.36,-19.51 551.56,-28.78 648,-91 668.27,-104.08 684.34,-126.76 694.37,-143.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"698.05,-150.2 691.84,-145.68 696.31,-147.16 694.58,-144.12 694.58,-144.12 694.58,-144.12 696.31,-147.16 697.31,-142.56 698.05,-150.2 698.05,-150.2\"/>\n",
"<text text-anchor=\"start\" x=\"490.5\" y=\"-50.8\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.61,-31.29C322.31,-42.4 326.44,-54 340,-54 350.8,-54 355.62,-46.63 354.45,-38.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"352.39,-31.29 357.46,-37.06 353.42,-34.64 354.44,-37.99 354.44,-37.99 354.44,-37.99 353.42,-34.64 351.43,-38.91 352.39,-31.29 352.39,-31.29\"/>\n",
"<text text-anchor=\"start\" x=\"313.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M357.93,-219.73C364.23,-218.53 371.44,-217.18 378,-216 422.37,-208.03 433.47,-206.01 478,-199 552.36,-187.3 640.61,-174.97 682.14,-169.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"689.1,-168.3 682.6,-172.37 685.64,-168.78 682.17,-169.25 682.17,-169.25 682.17,-169.25 685.64,-168.78 681.74,-166.13 689.1,-168.3 689.1,-168.3\"/>\n",
"<text text-anchor=\"start\" x=\"478\" y=\"-202.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.61,-236.29C322.31,-247.4 326.44,-259 340,-259 350.8,-259 355.62,-251.63 354.45,-243.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"352.39,-236.29 357.46,-242.06 353.42,-239.64 354.44,-242.99 354.44,-242.99 354.44,-242.99 353.42,-239.64 351.43,-243.91 352.39,-236.29 352.39,-236.29\"/>\n",
"<text text-anchor=\"start\" x=\"301\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;5 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M351.26,-237.54C358.01,-246.22 367.52,-256.9 378,-264 417.23,-290.58 431.35,-292.65 478,-301 610.05,-324.65 769.37,-272.5 827.44,-250.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"834.01,-248.37 828.57,-253.79 830.73,-249.61 827.46,-250.85 827.46,-250.85 827.46,-250.85 830.73,-249.61 826.35,-247.9 834.01,-248.37 834.01,-248.37\"/>\n",
"<text text-anchor=\"start\" x=\"570\" y=\"-309.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"515\" cy=\"-241\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"515\" y=\"-237.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M358.08,-221.57C381.31,-219.98 424.08,-218.33 460,-224 470.37,-225.64 481.48,-228.87 490.91,-232.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"497.76,-234.5 490.11,-235.13 494.46,-233.33 491.16,-232.16 491.16,-232.16 491.16,-232.16 494.46,-233.33 492.21,-229.19 497.76,-234.5 497.76,-234.5\"/>\n",
"<text text-anchor=\"start\" x=\"378\" y=\"-227.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;1 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>4&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M198.17,-134.08C275.52,-138.94 591.75,-158.82 681.9,-164.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"688.96,-164.93 681.78,-167.63 685.47,-164.71 681.98,-164.49 681.98,-164.49 681.98,-164.49 685.47,-164.71 682.17,-161.35 688.96,-164.93 688.96,-164.93\"/>\n",
"<text text-anchor=\"start\" x=\"380\" y=\"-154.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;2 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>4&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M195.02,-122.79C223.18,-102.3 286.66,-56.09 319.1,-32.48\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"324.78,-28.35 320.98,-35.01 321.95,-30.41 319.12,-32.47 319.12,-32.47 319.12,-32.47 321.95,-30.41 317.27,-29.92 324.78,-28.35 324.78,-28.35\"/>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;3 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>4&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M194.42,-144.5C201.66,-150.29 210.94,-157.11 220,-162 254.15,-180.44 268.4,-172.58 302,-192 308.64,-195.84 315.26,-200.89 321.03,-205.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"326.48,-210.62 319.14,-208.34 323.85,-208.3 321.23,-205.98 321.23,-205.98 321.23,-205.98 323.85,-208.3 323.31,-203.62 326.48,-210.62 326.48,-210.62\"/>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-195.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M169.29,-147.79C165.81,-158.42 169.38,-169 180,-169 188.13,-169 192.13,-162.8 192,-155.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"190.71,-147.79 195.02,-154.14 191.31,-151.24 191.92,-154.69 191.92,-154.69 191.92,-154.69 191.31,-151.24 188.82,-155.23 190.71,-147.79 190.71,-147.79\"/>\n",
"<text text-anchor=\"start\" x=\"137.5\" y=\"-172.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;1 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>5&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M834.91,-233.93C809.58,-220.37 758.41,-192.98 729.38,-177.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"723.2,-174.13 730.85,-174.66 726.28,-175.78 729.37,-177.44 729.37,-177.44 729.37,-177.44 726.28,-175.78 727.88,-180.21 723.2,-174.13 723.2,-174.13\"/>\n",
"<text text-anchor=\"start\" x=\"766\" y=\"-224.8\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>5&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M840.85,-257.17C837.77,-267.66 841.16,-278 851,-278 858.54,-278 862.29,-271.94 862.25,-264.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"861.15,-257.17 865.32,-263.61 861.68,-260.63 862.2,-264.09 862.2,-264.09 862.2,-264.09 861.68,-260.63 859.09,-264.56 861.15,-257.17 861.15,-257.17\"/>\n",
"<text text-anchor=\"start\" x=\"824.5\" y=\"-281.8\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;1 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>6&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M532.52,-235.71C543.2,-232.32 557.4,-227.84 570,-224 604.57,-213.46 614.92,-215.57 648,-201 661.14,-195.21 674.93,-186.99 685.77,-179.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"691.78,-176 687.67,-182.48 688.86,-177.93 685.94,-179.86 685.94,-179.86 685.94,-179.86 688.86,-177.93 684.2,-177.23 691.78,-176 691.78,-176\"/>\n",
"<text text-anchor=\"start\" x=\"570\" y=\"-227.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;3 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>6&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M497.01,-242.86C471.03,-245.22 420.02,-248.02 378,-239 373.03,-237.93 367.91,-236.19 363.12,-234.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"356.39,-231.27 364.07,-231.21 359.59,-232.68 362.8,-234.09 362.8,-234.09 362.8,-234.09 359.59,-232.68 361.53,-236.97 356.39,-231.27 356.39,-231.27\"/>\n",
"<text text-anchor=\"start\" x=\"378\" y=\"-248.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;5 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>6&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M533.02,-241.05C587.95,-241.22 760.67,-241.73 825.28,-241.93\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"832.61,-241.95 825.6,-245.08 829.11,-241.94 825.61,-241.93 825.61,-241.93 825.61,-241.93 829.11,-241.94 825.62,-238.78 832.61,-241.95 832.61,-241.95\"/>\n",
"<text text-anchor=\"start\" x=\"666\" y=\"-244.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M500.99,-252.8C493.26,-264.33 497.93,-277 515,-277 528.87,-277 534.56,-268.64 532.05,-259.31\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"529.01,-252.8 534.82,-257.81 530.49,-255.97 531.97,-259.14 531.97,-259.14 531.97,-259.14 530.49,-255.97 529.11,-260.47 529.01,-252.8 529.01,-252.8\"/>\n",
"<text text-anchor=\"start\" x=\"472.5\" y=\"-280.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"minimization lvl 1\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=\"340pt\" height=\"167pt\"\n",
" viewBox=\"0.00 0.00 339.50 166.54\" 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 162.54)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-162.54 335.5,-162.54 335.5,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"162.75\" y=\"-143.34\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"154.75\" y=\"-128.34\" font-family=\"Lato\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-24.54\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-20.84\" 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,-24.54C2.79,-24.54 17.15,-24.54 30.63,-24.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-24.54 30.94,-27.69 34.44,-24.54 30.94,-24.54 30.94,-24.54 30.94,-24.54 34.44,-24.54 30.94,-21.39 37.94,-24.54 37.94,-24.54\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"178\" cy=\"-69.54\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"178\" y=\"-65.84\" 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=\"M67.88,-38.23C74.16,-45.17 82.67,-53.05 92,-57.54 111.04,-66.69 135.05,-69.39 152.7,-69.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"159.84,-70.1 152.78,-73.12 156.34,-70.04 152.84,-69.97 152.84,-69.97 152.84,-69.97 156.34,-70.04 152.9,-66.82 159.84,-70.1 159.84,-70.1\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-72.34\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74,-25.25C90.46,-26.47 115.83,-29.74 136,-38.54 144.02,-42.04 151.9,-47.4 158.58,-52.69\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"164.35,-57.46 156.95,-55.42 161.66,-55.23 158.96,-53 158.96,-53 158.96,-53 161.66,-55.23 160.97,-50.57 164.35,-57.46 164.35,-57.46\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-42.34\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"305\" cy=\"-24.54\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"305\" y=\"-20.84\" 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=\"M74.08,-23.37C79.78,-23.03 86.16,-22.71 92,-22.54 170.63,-20.29 190.37,-20.29 269,-22.54 272.47,-22.64 276.13,-22.79 279.72,-22.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"286.92,-23.37 279.76,-26.13 283.42,-23.18 279.93,-22.98 279.93,-22.98 279.93,-22.98 283.42,-23.18 280.1,-19.84 286.92,-23.37 286.92,-23.37\"/>\n",
"<text text-anchor=\"start\" x=\"156\" y=\"-24.34\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.27,-19.45C92.37,-13.77 125.12,-4.92 154,-1.54 198.87,3.71 250.93,-8.39 280.41,-16.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"287.41,-19.04 279.8,-20.06 284.05,-18.04 280.7,-17.04 280.7,-17.04 280.7,-17.04 284.05,-18.04 281.6,-14.02 287.41,-19.04 287.41,-19.04\"/>\n",
"<text text-anchor=\"start\" x=\"154\" y=\"-5.34\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M167.29,-84.33C163.81,-94.96 167.38,-105.54 178,-105.54 186.13,-105.54 190.13,-99.34 190,-91.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"188.71,-84.33 193.02,-90.68 189.31,-87.78 189.92,-91.23 189.92,-91.23 189.92,-91.23 189.31,-87.78 186.82,-91.77 188.71,-84.33 188.71,-84.33\"/>\n",
"<text text-anchor=\"start\" x=\"155\" y=\"-109.34\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M196.13,-70.31C214.92,-70.47 245.52,-68.72 269,-57.54 276.01,-54.2 282.55,-48.93 288.03,-43.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"293.14,-38.26 290.56,-45.49 290.71,-40.79 288.29,-43.31 288.29,-43.31 288.29,-43.31 290.71,-40.79 286.02,-41.13 293.14,-38.26 293.14,-38.26\"/>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-72.34\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; o0</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=\"black\" d=\"M286.92,-25.01C269.45,-26.02 241.87,-29.13 220,-38.54 211.97,-42 204.08,-47.35 197.39,-52.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"191.63,-57.42 195,-50.53 194.32,-55.19 197.02,-52.95 197.02,-52.95 197.02,-52.95 194.32,-55.19 199.03,-55.38 191.63,-57.42 191.63,-57.42\"/>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-42.34\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M294.85,-39.71C291.77,-50.2 295.16,-60.54 305,-60.54 312.54,-60.54 316.29,-54.48 316.25,-46.93\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"315.15,-39.71 319.32,-46.15 315.68,-43.17 316.2,-46.63 316.2,-46.63 316.2,-46.63 315.68,-43.17 313.09,-47.1 315.15,-39.71 315.15,-39.71\"/>\n",
"<text text-anchor=\"start\" x=\"278.5\" y=\"-64.34\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"minimization lvl 2\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=\"208pt\" height=\"119pt\"\n",
" viewBox=\"0.00 0.00 208.00 118.84\" 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 114.84)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-114.84 204,-114.84 204,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"97\" y=\"-95.64\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"89\" y=\"-80.64\" font-family=\"Lato\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 1 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-21.84\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-18.14\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- I&#45;&gt;1 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-21.84C2.79,-21.84 17.15,-21.84 30.63,-21.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-21.84 30.94,-24.99 34.44,-21.84 30.94,-21.84 30.94,-21.84 30.94,-21.84 34.44,-21.84 30.94,-18.69 37.94,-21.84 37.94,-21.84\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-38.88C48.32,-48.7 50.45,-57.84 56,-57.84 60.17,-57.84 62.4,-52.7 62.71,-45.99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-38.88 65.85,-45.72 62.54,-42.38 62.71,-45.87 62.71,-45.87 62.71,-45.87 62.54,-42.38 59.56,-46.02 62.38,-38.88 62.38,-38.88\"/>\n",
"<text text-anchor=\"start\" x=\"29.5\" y=\"-61.64\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"177\" cy=\"-21.84\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"177\" y=\"-18.14\" font-family=\"Lato\" font-size=\"14.00\">0</text>\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=\"M74.05,-21.84C94.46,-21.84 128.78,-21.84 151.9,-21.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"158.98,-21.84 151.98,-24.99 155.48,-21.84 151.98,-21.84 151.98,-21.84 151.98,-21.84 155.48,-21.84 151.98,-18.69 158.98,-21.84 158.98,-21.84\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-25.64\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M161.28,-12.3C155.25,-8.93 148.04,-5.55 141,-3.84 119.83,1.28 113.17,1.28 92,-3.84 87.27,-4.99 82.46,-6.89 77.99,-9.04\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"71.72,-12.3 76.47,-6.27 74.82,-10.68 77.93,-9.07 77.93,-9.07 77.93,-9.07 74.82,-10.68 79.38,-11.86 71.72,-12.3 71.72,-12.3\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-7.64\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M166.85,-37.01C163.77,-47.51 167.16,-57.84 177,-57.84 184.54,-57.84 188.29,-51.78 188.25,-44.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"187.15,-37.01 191.32,-43.46 187.68,-40.47 188.2,-43.93 188.2,-43.93 188.2,-43.93 187.68,-40.47 185.09,-44.4 187.15,-37.01 187.15,-37.01\"/>\n",
"<text text-anchor=\"start\" x=\"154\" y=\"-61.64\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; o0</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"minimization lvl 3\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=\"208pt\" height=\"120pt\"\n",
" viewBox=\"0.00 0.00 208.00 120.02\" 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 116.02)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-116.02 204,-116.02 204,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"97\" y=\"-96.82\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"89\" y=\"-81.82\" font-family=\"Lato\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-23.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-19.32\" 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,-23.02C2.79,-23.02 17.15,-23.02 30.63,-23.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-23.02 30.94,-26.17 34.44,-23.02 30.94,-23.02 30.94,-23.02 30.94,-23.02 34.44,-23.02 30.94,-19.87 37.94,-23.02 37.94,-23.02\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-40.06C48.32,-49.88 50.45,-59.02 56,-59.02 60.17,-59.02 62.4,-53.88 62.71,-47.16\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-40.06 65.85,-46.9 62.54,-43.55 62.71,-47.05 62.71,-47.05 62.71,-47.05 62.54,-43.55 59.56,-47.2 62.38,-40.06 62.38,-40.06\"/>\n",
"<text text-anchor=\"start\" x=\"29.5\" y=\"-62.82\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"177\" cy=\"-23.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"177\" y=\"-19.32\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.05,-23.02C94.46,-23.02 128.78,-23.02 151.9,-23.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"158.98,-23.02 151.98,-26.17 155.48,-23.02 151.98,-23.02 151.98,-23.02 151.98,-23.02 155.48,-23.02 151.98,-19.87 158.98,-23.02 158.98,-23.02\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-26.82\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M161.69,-13.15C155.6,-9.53 148.24,-5.86 141,-4.02 119.89,1.34 113.11,1.34 92,-4.02 87.14,-5.25 82.22,-7.32 77.67,-9.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"71.31,-13.15 75.91,-7.01 74.37,-11.46 77.44,-9.76 77.44,-9.76 77.44,-9.76 74.37,-11.46 78.96,-12.52 71.31,-13.15 71.31,-13.15\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-7.82\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M166.85,-38.19C163.77,-48.68 167.16,-59.02 177,-59.02 184.54,-59.02 188.29,-52.96 188.25,-45.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"187.15,-38.19 191.32,-44.63 187.68,-41.65 188.2,-45.11 188.2,-45.11 188.2,-45.11 187.68,-41.65 185.09,-45.58 187.15,-38.19 187.15,-38.19\"/>\n",
"<text text-anchor=\"start\" x=\"154\" y=\"-62.82\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; o0</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"minimization lvl 4\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=\"212pt\" height=\"120pt\"\n",
" viewBox=\"0.00 0.00 211.50 120.02\" 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 116.02)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-116.02 207.5,-116.02 207.5,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"98.75\" y=\"-96.82\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"90.75\" y=\"-81.82\" font-family=\"Lato\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-23.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-19.32\" 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,-23.02C2.79,-23.02 17.15,-23.02 30.63,-23.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-23.02 30.94,-26.17 34.44,-23.02 30.94,-23.02 30.94,-23.02 30.94,-23.02 34.44,-23.02 30.94,-19.87 37.94,-23.02 37.94,-23.02\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-40.06C48.32,-49.88 50.45,-59.02 56,-59.02 60.17,-59.02 62.4,-53.88 62.71,-47.16\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-40.06 65.85,-46.9 62.54,-43.55 62.71,-47.05 62.71,-47.05 62.71,-47.05 62.54,-43.55 59.56,-47.2 62.38,-40.06 62.38,-40.06\"/>\n",
"<text text-anchor=\"start\" x=\"33\" y=\"-62.82\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"177\" cy=\"-23.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"177\" y=\"-19.32\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.05,-23.02C94.46,-23.02 128.78,-23.02 151.9,-23.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"158.98,-23.02 151.98,-26.17 155.48,-23.02 151.98,-23.02 151.98,-23.02 151.98,-23.02 155.48,-23.02 151.98,-19.87 158.98,-23.02 158.98,-23.02\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-26.82\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M161.69,-13.15C155.6,-9.53 148.24,-5.86 141,-4.02 119.89,1.34 113.11,1.34 92,-4.02 87.14,-5.25 82.22,-7.32 77.67,-9.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"71.31,-13.15 75.91,-7.01 74.37,-11.46 77.44,-9.76 77.44,-9.76 77.44,-9.76 74.37,-11.46 78.96,-12.52 71.31,-13.15 71.31,-13.15\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-7.82\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M166.85,-38.19C163.77,-48.68 167.16,-59.02 177,-59.02 184.54,-59.02 188.29,-52.96 188.25,-45.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"187.15,-38.19 191.32,-44.63 187.68,-41.65 188.2,-45.11 188.2,-45.11 188.2,-45.11 187.68,-41.65 185.09,-45.58 187.15,-38.19 187.15,-38.19\"/>\n",
"<text text-anchor=\"start\" x=\"150.5\" y=\"-62.82\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"minimization lvl 5\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=\"208pt\" height=\"120pt\"\n",
" viewBox=\"0.00 0.00 208.00 120.02\" 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 116.02)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-116.02 204,-116.02 204,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"97\" y=\"-96.82\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"89\" y=\"-81.82\" font-family=\"Lato\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-23.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-19.32\" 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,-23.02C2.79,-23.02 17.15,-23.02 30.63,-23.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-23.02 30.94,-26.17 34.44,-23.02 30.94,-23.02 30.94,-23.02 30.94,-23.02 34.44,-23.02 30.94,-19.87 37.94,-23.02 37.94,-23.02\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.62,-40.06C48.32,-49.88 50.45,-59.02 56,-59.02 60.17,-59.02 62.4,-53.88 62.71,-47.16\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.38,-40.06 65.85,-46.9 62.54,-43.55 62.71,-47.05 62.71,-47.05 62.71,-47.05 62.54,-43.55 59.56,-47.2 62.38,-40.06 62.38,-40.06\"/>\n",
"<text text-anchor=\"start\" x=\"29.5\" y=\"-62.82\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"177\" cy=\"-23.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"177\" y=\"-19.32\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.05,-23.02C94.46,-23.02 128.78,-23.02 151.9,-23.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"158.98,-23.02 151.98,-26.17 155.48,-23.02 151.98,-23.02 151.98,-23.02 151.98,-23.02 155.48,-23.02 151.98,-19.87 158.98,-23.02 158.98,-23.02\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-26.82\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M161.69,-13.15C155.6,-9.53 148.24,-5.86 141,-4.02 119.89,1.34 113.11,1.34 92,-4.02 87.14,-5.25 82.22,-7.32 77.67,-9.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"71.31,-13.15 75.91,-7.01 74.37,-11.46 77.44,-9.76 77.44,-9.76 77.44,-9.76 74.37,-11.46 78.96,-12.52 71.31,-13.15 71.31,-13.15\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-7.82\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M166.85,-38.19C163.77,-48.68 167.16,-59.02 177,-59.02 184.54,-59.02 188.29,-52.96 188.25,-45.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"187.15,-38.19 191.32,-44.63 187.68,-41.65 188.2,-45.11 188.2,-45.11 188.2,-45.11 187.68,-41.65 185.09,-45.58 187.15,-38.19 187.15,-38.19\"/>\n",
"<text text-anchor=\"start\" x=\"154\" y=\"-62.82\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; o0</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create the strategy\n",
"# We have different strategies for minimization:\n",
"# 0 : No minimizaiton\n",
"# 1 : DFA minimization\n",
"# 2 : Inclusion based minimization with output assignement\n",
"# 3 : SAT based exact minimization\n",
"# 4 : First 1 then 3 (exact)\n",
"# 5 : First 2 then 3 (not exact)\n",
"for i in range(6):\n",
" print(\"minimization lvl \", i)\n",
" gi.minimize_lvl = i #Use inclusion with output assignement to minimize the strategy\n",
" strat = spot.create_strategy(game, gi)\n",
" display(strat.show())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Input/Output\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": 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=\"567pt\" height=\"338pt\"\n",
" viewBox=\"0.00 0.00 566.58 337.76\" 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 333.76)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-333.76 562.58,-333.76 562.58,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"197.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"220.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"236.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"282.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"298.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"336.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"352.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\">))</text>\n",
"<text text-anchor=\"start\" x=\"223.79\" y=\"-301.56\" font-family=\"Lato\" font-size=\"14.00\">[parity max odd 3]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-171.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-168.06\" 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,-171.76C2.79,-171.76 17.15,-171.76 30.63,-171.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-171.76 30.94,-174.91 34.44,-171.76 30.94,-171.76 30.94,-171.76 30.94,-171.76 34.44,-171.76 30.94,-168.61 37.94,-171.76 37.94,-171.76\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"148.98,-163.76 126.02,-145.76 148.98,-127.76 171.94,-145.76 148.98,-163.76\"/>\n",
"<text text-anchor=\"middle\" x=\"148.98\" y=\"-142.06\" 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=\"M69.9,-159.68C76.09,-154.68 83.92,-149.43 92,-146.76 101.41,-143.65 112.21,-142.86 121.8,-143.03\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"128.85,-143.33 121.72,-146.18 125.35,-143.18 121.86,-143.04 121.86,-143.04 121.86,-143.04 125.35,-143.18 121.99,-139.89 128.85,-143.33 128.85,-143.33\"/>\n",
"<text text-anchor=\"start\" x=\"94.5\" y=\"-165.56\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-150.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"148.98,-217.76 126.02,-199.76 148.98,-181.76 171.94,-199.76 148.98,-217.76\"/>\n",
"<text text-anchor=\"middle\" x=\"148.98\" y=\"-196.06\" 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=\"M73.69,-176.89C88.1,-181.33 109.07,-187.78 125.05,-192.7\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"132.01,-194.84 124.39,-195.79 128.66,-193.81 125.32,-192.78 125.32,-192.78 125.32,-192.78 128.66,-193.81 126.24,-189.77 132.01,-194.84 132.01,-194.84\"/>\n",
"<text text-anchor=\"start\" x=\"96.5\" y=\"-205.56\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-190.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"241.96\" cy=\"-60.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"241.96\" y=\"-57.06\" 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=\"M160.06,-136.34C175.16,-122.24 203.86,-95.42 222.7,-77.82\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"228.21,-72.67 225.24,-79.75 225.65,-75.06 223.09,-77.45 223.09,-77.45 223.09,-77.45 225.65,-75.06 220.94,-75.15 228.21,-72.67 228.21,-72.67\"/>\n",
"<text text-anchor=\"start\" x=\"191.96\" y=\"-126.56\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"189.96\" y=\"-111.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"241.96\" cy=\"-182.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"241.96\" y=\"-179.06\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M170.91,-146.58C181.75,-147.62 194.98,-149.89 205.96,-154.76 212.12,-157.49 218.12,-161.58 223.37,-165.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"228.73,-170.36 221.36,-168.22 226.07,-168.09 223.4,-165.83 223.4,-165.83 223.4,-165.83 226.07,-168.09 225.44,-163.43 228.73,-170.36 228.73,-170.36\"/>\n",
"<text text-anchor=\"start\" x=\"193.96\" y=\"-173.56\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"189.96\" y=\"-158.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"black\" d=\"M167.95,-196.4C181.93,-193.79 201.45,-190.14 216.79,-187.27\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"223.94,-185.94 217.64,-190.32 220.5,-186.58 217.06,-187.22 217.06,-187.22 217.06,-187.22 220.5,-186.58 216.48,-184.13 223.94,-185.94 223.94,-185.94\"/>\n",
"<text text-anchor=\"start\" x=\"193.96\" y=\"-210.56\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"189.96\" y=\"-195.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"427.92\" cy=\"-140.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"427.92\" y=\"-137.06\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M160.75,-208.85C168.39,-214.75 179.16,-222.01 189.96,-225.76 275.06,-255.28 319.26,-296.01 391.92,-242.76 413.34,-227.05 401.22,-210.86 409.92,-185.76 412.38,-178.66 415.21,-170.99 417.85,-164.03\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"420.4,-157.35 420.84,-165.01 419.15,-160.62 417.9,-163.89 417.9,-163.89 417.9,-163.89 419.15,-160.62 414.96,-162.76 420.4,-157.35 420.4,-157.35\"/>\n",
"<text text-anchor=\"start\" x=\"279.96\" y=\"-282.56\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"277.96\" y=\"-267.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"528.25,-71.76 505.29,-53.76 528.25,-35.76 551.21,-53.76 528.25,-71.76\"/>\n",
"<text text-anchor=\"middle\" x=\"528.25\" y=\"-50.06\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M257.63,-51.19C263.78,-47.39 271.08,-43.12 277.96,-39.76 319.9,-19.23 330.01,-10.35 375.92,-1.76 425.97,7.61 481.93,-23.1 509.68,-41.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"515.79,-45.4 508.22,-44.11 512.88,-43.45 509.98,-41.5 509.98,-41.5 509.98,-41.5 512.88,-43.45 511.74,-38.88 515.79,-45.4 515.79,-45.4\"/>\n",
"<text text-anchor=\"start\" x=\"378.42\" y=\"-20.56\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-5.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"334.94,-124.76 311.98,-106.76 334.94,-88.76 357.89,-106.76 334.94,-124.76\"/>\n",
"<text text-anchor=\"middle\" x=\"334.94\" y=\"-103.06\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;7 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M258.39,-68.56C273.79,-76.35 297.5,-88.33 314.24,-96.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"320.51,-99.97 312.84,-99.62 317.38,-98.39 314.26,-96.81 314.26,-96.81 314.26,-96.81 317.38,-98.39 315.68,-94 320.51,-99.97 320.51,-99.97\"/>\n",
"<text text-anchor=\"start\" x=\"282.46\" y=\"-104.56\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"277.96\" y=\"-89.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"334.94,-222.76 311.98,-204.76 334.94,-186.76 357.89,-204.76 334.94,-222.76\"/>\n",
"<text text-anchor=\"middle\" x=\"334.94\" y=\"-201.06\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;8 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M259.64,-186.79C273.79,-190.21 294.25,-195.16 310.12,-199\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"317.05,-200.67 309.5,-202.09 313.65,-199.85 310.24,-199.03 310.24,-199.03 310.24,-199.03 313.65,-199.85 310.98,-195.97 317.05,-200.67 317.05,-200.67\"/>\n",
"<text text-anchor=\"start\" x=\"281.46\" y=\"-213.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"277.96\" y=\"-198.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M442.18,-129.03C460.14,-113.14 492.15,-84.82 511.36,-67.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"516.89,-62.92 513.73,-69.92 514.27,-65.24 511.65,-67.56 511.65,-67.56 511.65,-67.56 514.27,-65.24 509.56,-65.2 516.89,-62.92 516.89,-62.92\"/>\n",
"<text text-anchor=\"start\" x=\"466.42\" y=\"-125.56\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"463.92\" y=\"-110.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;7 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M409.86,-142.24C399.69,-142.52 386.71,-141.81 375.92,-137.76 366.67,-134.29 357.82,-127.88 350.82,-121.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"345.4,-116.81 352.69,-119.22 347.98,-119.18 350.56,-121.55 350.56,-121.55 350.56,-121.55 347.98,-119.18 348.43,-123.87 345.4,-116.81 345.4,-116.81\"/>\n",
"<text text-anchor=\"start\" x=\"380.42\" y=\"-159.56\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-144.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</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=\"M505.57,-54.29C453.62,-55.57 322.27,-58.81 267.52,-60.15\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"260.31,-60.33 267.23,-57.01 263.81,-60.25 267.31,-60.16 267.31,-60.16 267.31,-60.16 263.81,-60.25 267.39,-63.31 260.31,-60.33 260.31,-60.33\"/>\n",
"<text text-anchor=\"start\" x=\"379.42\" y=\"-75.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-60.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;5 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>7&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.29,-102.15C363.83,-99.77 379.4,-98.37 391.92,-103.76 400.16,-107.31 407.38,-113.87 413.08,-120.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"417.5,-126 410.66,-122.51 415.31,-123.27 413.12,-120.54 413.12,-120.54 413.12,-120.54 415.31,-123.27 415.57,-118.57 417.5,-126 417.5,-126\"/>\n",
"<text text-anchor=\"start\" x=\"379.42\" y=\"-122.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-107.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;4 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>8&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.6,-192.49C320.95,-181.1 309.32,-164.86 293.96,-157.76 282.73,-152.57 270.27,-158.46 260.47,-165.83\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"255.04,-170.26 258.47,-163.39 257.75,-168.04 260.47,-165.83 260.47,-165.83 260.47,-165.83 257.75,-168.04 262.46,-168.27 255.04,-170.26 255.04,-170.26\"/>\n",
"<text text-anchor=\"start\" x=\"281.96\" y=\"-176.56\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"277.96\" y=\"-161.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"427.92\" cy=\"-212.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"427.92\" y=\"-209.06\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;9 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>8&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M356.13,-206.53C369.86,-207.74 388.1,-209.35 402.62,-210.62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"409.84,-211.26 402.59,-213.78 406.35,-210.95 402.86,-210.64 402.86,-210.64 402.86,-210.64 406.35,-210.95 403.14,-207.51 409.84,-211.26 409.84,-211.26\"/>\n",
"<text text-anchor=\"start\" x=\"377.92\" y=\"-227.56\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-212.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"528.25,-229.76 498.08,-211.76 528.25,-193.76 558.41,-211.76 528.25,-229.76\"/>\n",
"<text text-anchor=\"middle\" x=\"528.25\" y=\"-208.06\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;10 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>9&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M441.39,-200.41C447.61,-195.11 455.58,-189.52 463.92,-186.76 479.35,-181.65 496.47,-189.25 509.02,-197.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"514.78,-201.34 507.23,-199.96 511.9,-199.36 509.02,-197.37 509.02,-197.37 509.02,-197.37 511.9,-199.36 510.81,-194.78 514.78,-201.34 514.78,-201.34\"/>\n",
"<text text-anchor=\"start\" x=\"467.42\" y=\"-205.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"463.92\" y=\"-190.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;9 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>10&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M503.51,-215.16C491.63,-216.48 477.02,-217.51 463.92,-216.76 460.44,-216.56 456.77,-216.25 453.17,-215.89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"445.97,-215.1 453.27,-212.73 449.45,-215.48 452.93,-215.87 452.93,-215.87 452.93,-215.87 449.45,-215.48 452.59,-219 445.97,-215.1 445.97,-215.1\"/>\n",
"<text text-anchor=\"start\" x=\"467.42\" y=\"-235.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"463.92\" y=\"-220.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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 0x7f724981b2d0> >"
]
},
"execution_count": 11,
"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": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"HOA: v1\n",
"States: 11\n",
"Start: 0\n",
"AP: 2 \"b\" \"a\"\n",
"acc-name: parity max odd 3\n",
"Acceptance: 3 Fin(2) & (Inf(1) | Fin(0))\n",
"properties: trans-labels explicit-labels trans-acc colored complete\n",
"properties: deterministic\n",
"spot-state-player: 0 1 1 0 0 0 1 1 1 0 1\n",
"--BODY--\n",
"State: 0\n",
"[!1] 1 {1}\n",
"[1] 2 {1}\n",
"State: 1\n",
"[!0] 3 {1}\n",
"[0] 4 {1}\n",
"State: 2\n",
"[!0] 5 {1}\n",
"[0] 4 {1}\n",
"State: 3\n",
"[!1] 6 {1}\n",
"[1] 7 {2}\n",
"State: 4\n",
"[t] 8 {2}\n",
"State: 5\n",
"[!1] 6 {1}\n",
"[1] 7 {2}\n",
"State: 6\n",
"[t] 3 {1}\n",
"State: 7\n",
"[t] 5 {2}\n",
"State: 8\n",
"[!0] 9 {1}\n",
"[0] 4 {2}\n",
"State: 9\n",
"[t] 10 {1}\n",
"State: 10\n",
"[t] 9 {1}\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": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.solve_parity_game(game)"
]
},
{
"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=\"567pt\" height=\"338pt\"\n",
" viewBox=\"0.00 0.00 566.58 337.76\" 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 333.76)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-333.76 562.58,-333.76 562.58,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"197.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"220.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"236.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"282.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"298.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"336.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"352.79\" y=\"-315.56\" font-family=\"Lato\" font-size=\"14.00\">))</text>\n",
"<text text-anchor=\"start\" x=\"223.79\" y=\"-301.56\" font-family=\"Lato\" font-size=\"14.00\">[parity max odd 3]</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=\"-171.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-168.06\" 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,-171.76C2.79,-171.76 17.15,-171.76 30.63,-171.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-171.76 30.94,-174.91 34.44,-171.76 30.94,-171.76 30.94,-171.76 30.94,-171.76 34.44,-171.76 30.94,-168.61 37.94,-171.76 37.94,-171.76\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"148.98,-163.76 126.02,-145.76 148.98,-127.76 171.94,-145.76 148.98,-163.76\"/>\n",
"<text text-anchor=\"middle\" x=\"148.98\" y=\"-142.06\" 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=\"M69.9,-159.68C76.09,-154.68 83.92,-149.43 92,-146.76 101.41,-143.65 112.21,-142.86 121.8,-143.03\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"128.85,-143.33 121.72,-146.18 125.35,-143.18 121.86,-143.04 121.86,-143.04 121.86,-143.04 125.35,-143.18 121.99,-139.89 128.85,-143.33 128.85,-143.33\"/>\n",
"<text text-anchor=\"start\" x=\"94.5\" y=\"-165.56\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-150.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"148.98,-217.76 126.02,-199.76 148.98,-181.76 171.94,-199.76 148.98,-217.76\"/>\n",
"<text text-anchor=\"middle\" x=\"148.98\" y=\"-196.06\" 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=\"M73.69,-176.89C88.1,-181.33 109.07,-187.78 125.05,-192.7\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"132.01,-194.84 124.39,-195.79 128.66,-193.81 125.32,-192.78 125.32,-192.78 125.32,-192.78 128.66,-193.81 126.24,-189.77 132.01,-194.84 132.01,-194.84\"/>\n",
"<text text-anchor=\"start\" x=\"96.5\" y=\"-205.56\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-190.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"241.96\" cy=\"-60.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"241.96\" y=\"-57.06\" 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=\"M160.06,-136.34C175.16,-122.24 203.86,-95.42 222.7,-77.82\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"228.21,-72.67 225.24,-79.75 225.65,-75.06 223.09,-77.45 223.09,-77.45 223.09,-77.45 225.65,-75.06 220.94,-75.15 228.21,-72.67 228.21,-72.67\"/>\n",
"<text text-anchor=\"start\" x=\"191.96\" y=\"-126.56\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"189.96\" y=\"-111.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"241.96\" cy=\"-182.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"241.96\" y=\"-179.06\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M170.91,-146.58C181.75,-147.62 194.98,-149.89 205.96,-154.76 212.12,-157.49 218.12,-161.58 223.37,-165.8\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"228.73,-170.36 221.36,-168.22 225.74,-168.48 223.08,-166.21 223.4,-165.83 223.72,-165.44 226.39,-167.71 225.44,-163.43 228.73,-170.36 228.73,-170.36\"/>\n",
"<text text-anchor=\"start\" x=\"193.96\" y=\"-173.56\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"189.96\" y=\"-158.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"#33a02c\" stroke-width=\"2\" d=\"M167.95,-196.4C181.93,-193.79 201.45,-190.14 216.79,-187.27\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"223.94,-185.94 217.64,-190.32 220.6,-187.07 217.15,-187.72 217.06,-187.22 216.97,-186.73 220.41,-186.09 216.48,-184.13 223.94,-185.94 223.94,-185.94\"/>\n",
"<text text-anchor=\"start\" x=\"193.96\" y=\"-210.56\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"189.96\" y=\"-195.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"427.92\" cy=\"-140.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"427.92\" y=\"-137.06\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M160.75,-208.85C168.39,-214.75 179.16,-222.01 189.96,-225.76 275.06,-255.28 319.26,-296.01 391.92,-242.76 413.34,-227.05 401.22,-210.86 409.92,-185.76 412.38,-178.66 415.21,-170.99 417.85,-164.03\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"420.4,-157.35 420.84,-165.01 419.15,-160.62 417.9,-163.89 417.9,-163.89 417.9,-163.89 419.15,-160.62 414.96,-162.76 420.4,-157.35 420.4,-157.35\"/>\n",
"<text text-anchor=\"start\" x=\"279.96\" y=\"-282.56\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"277.96\" y=\"-267.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"528.25,-71.76 505.29,-53.76 528.25,-35.76 551.21,-53.76 528.25,-71.76\"/>\n",
"<text text-anchor=\"middle\" x=\"528.25\" y=\"-50.06\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M257.63,-51.19C263.78,-47.39 271.08,-43.12 277.96,-39.76 319.9,-19.23 330.01,-10.35 375.92,-1.76 425.97,7.61 481.93,-23.1 509.68,-41.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"515.79,-45.4 508.22,-44.11 512.88,-43.45 509.98,-41.5 509.98,-41.5 509.98,-41.5 512.88,-43.45 511.74,-38.88 515.79,-45.4 515.79,-45.4\"/>\n",
"<text text-anchor=\"start\" x=\"378.42\" y=\"-20.56\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-5.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"334.94,-124.76 311.98,-106.76 334.94,-88.76 357.89,-106.76 334.94,-124.76\"/>\n",
"<text text-anchor=\"middle\" x=\"334.94\" y=\"-103.06\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;7 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M258.39,-68.56C273.79,-76.35 297.5,-88.33 314.24,-96.8\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"320.51,-99.97 312.84,-99.62 317.16,-98.84 314.03,-97.26 314.26,-96.81 314.49,-96.36 317.61,-97.94 315.68,-94 320.51,-99.97 320.51,-99.97\"/>\n",
"<text text-anchor=\"start\" x=\"282.46\" y=\"-104.56\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"277.96\" y=\"-89.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</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=\"334.94,-222.76 311.98,-204.76 334.94,-186.76 357.89,-204.76 334.94,-222.76\"/>\n",
"<text text-anchor=\"middle\" x=\"334.94\" y=\"-201.06\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;8 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M259.64,-186.79C273.79,-190.21 294.25,-195.16 310.12,-199\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"317.05,-200.67 309.5,-202.09 313.65,-199.85 310.24,-199.03 310.24,-199.03 310.24,-199.03 313.65,-199.85 310.98,-195.97 317.05,-200.67 317.05,-200.67\"/>\n",
"<text text-anchor=\"start\" x=\"281.46\" y=\"-213.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"277.96\" y=\"-198.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M442.18,-129.03C460.14,-113.14 492.15,-84.82 511.36,-67.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"516.89,-62.92 513.73,-69.92 514.27,-65.24 511.65,-67.56 511.65,-67.56 511.65,-67.56 514.27,-65.24 509.56,-65.2 516.89,-62.92 516.89,-62.92\"/>\n",
"<text text-anchor=\"start\" x=\"466.42\" y=\"-125.56\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"463.92\" y=\"-110.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;7 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M409.86,-142.24C399.69,-142.52 386.71,-141.81 375.92,-137.76 366.67,-134.29 357.82,-127.88 350.82,-121.79\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"345.4,-116.81 352.69,-119.22 348.32,-118.81 350.9,-121.18 350.56,-121.55 350.22,-121.91 347.64,-119.55 348.43,-123.87 345.4,-116.81 345.4,-116.81\"/>\n",
"<text text-anchor=\"start\" x=\"380.42\" y=\"-159.56\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-144.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</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=\"M505.57,-54.29C453.62,-55.57 322.27,-58.81 267.52,-60.15\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"260.31,-60.33 267.23,-57.01 263.81,-60.25 267.31,-60.16 267.31,-60.16 267.31,-60.16 263.81,-60.25 267.39,-63.31 260.31,-60.33 260.31,-60.33\"/>\n",
"<text text-anchor=\"start\" x=\"379.42\" y=\"-75.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-60.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;5 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>7&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.29,-102.15C363.83,-99.77 379.4,-98.37 391.92,-103.76 400.16,-107.31 407.38,-113.87 413.08,-120.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"417.5,-126 410.66,-122.51 415.31,-123.27 413.12,-120.54 413.12,-120.54 413.12,-120.54 415.31,-123.27 415.57,-118.57 417.5,-126 417.5,-126\"/>\n",
"<text text-anchor=\"start\" x=\"379.42\" y=\"-122.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-107.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;4 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>8&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.6,-192.49C320.95,-181.1 309.32,-164.86 293.96,-157.76 282.73,-152.57 270.27,-158.46 260.47,-165.83\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"255.04,-170.26 258.47,-163.39 257.75,-168.04 260.47,-165.83 260.47,-165.83 260.47,-165.83 257.75,-168.04 262.46,-168.27 255.04,-170.26 255.04,-170.26\"/>\n",
"<text text-anchor=\"start\" x=\"281.96\" y=\"-176.56\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"277.96\" y=\"-161.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"427.92\" cy=\"-212.76\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"427.92\" y=\"-209.06\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;9 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>8&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M356.13,-206.53C369.86,-207.74 388.1,-209.35 402.62,-210.62\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"409.84,-211.26 402.59,-213.78 406.31,-211.45 402.82,-211.14 402.86,-210.64 402.91,-210.15 406.39,-210.45 403.14,-207.51 409.84,-211.26 409.84,-211.26\"/>\n",
"<text text-anchor=\"start\" x=\"377.92\" y=\"-227.56\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"375.92\" y=\"-212.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"528.25,-229.76 498.08,-211.76 528.25,-193.76 558.41,-211.76 528.25,-229.76\"/>\n",
"<text text-anchor=\"middle\" x=\"528.25\" y=\"-208.06\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;10 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>9&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M441.39,-200.41C447.61,-195.11 455.58,-189.52 463.92,-186.76 479.35,-181.65 496.47,-189.25 509.02,-197.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"514.78,-201.34 507.23,-199.96 511.9,-199.36 509.02,-197.37 509.02,-197.37 509.02,-197.37 511.9,-199.36 510.81,-194.78 514.78,-201.34 514.78,-201.34\"/>\n",
"<text text-anchor=\"start\" x=\"467.42\" y=\"-205.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"463.92\" y=\"-190.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;9 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>10&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M503.51,-215.16C491.63,-216.48 477.02,-217.51 463.92,-216.76 460.44,-216.56 456.77,-216.25 453.17,-215.89\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"445.97,-215.1 453.27,-212.73 449.51,-214.99 452.98,-215.37 452.93,-215.87 452.88,-216.36 449.4,-215.98 452.59,-219 445.97,-215.1 445.97,-215.1\"/>\n",
"<text text-anchor=\"start\" x=\"467.42\" y=\"-235.56\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"463.92\" y=\"-220.56\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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 0x7f724981bdb0> >"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.highlight_strategy(game)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Reading an aiger-file</h2>\n",
"\n",
"<p>Read an aiger file. Note that we do not support the full \n",
" <a href=\"http://fmv.jku.at/aiger/FORMAT.aiger\">syntax</a>, but are restricted to:\n",
" <ul>\n",
" <li>Input variables start at index 2 and are consecutively numbered.</li>\n",
" <li>Latch variables start at index (1 + #inputs) * 2 and are consecutively numbered.</li>\n",
" <li>If inputs or outputs are named in the comments, all of them have to be named.</li>\n",
" <li>Gate number $n$ can only have latches, inputs or previously defined gates ($<n$). </li>\n",
" </ul>\n",
"</p>"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"aag 5 2 0 2 3\n",
"2\n",
"4\n",
"10\n",
"6\n",
"6 2 4\n",
"8 3 5\n",
"10 7 9\n",
"i0 a\n",
"i1 b\n",
"o0 c\n",
"o1 d\n",
"\n"
]
}
],
"source": [
"#aiger file \n",
"aag_txt = \"\"\"aag 5 2 0 2 3\n",
"2\n",
"4\n",
"10\n",
"6\n",
"6 2 4\n",
"8 3 5\n",
"10 7 9\n",
"i0 a\n",
"i1 b\n",
"o0 c\n",
"o1 d\n",
"\"\"\"\n",
"print(aag_txt)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"this_aig = spot.aiger_circuit(aag_txt)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"202pt\" height=\"289pt\"\n",
" viewBox=\"0.00 0.00 202.39 289.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 285.5)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-285.5 198.39,-285.5 198.39,4 -4,4\"/>\n",
"<!-- 2 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"44.2,-46 5.2,-11.5 83.19,-11.5 44.2,-46\"/>\n",
"<text text-anchor=\"middle\" x=\"44.2\" y=\"-19.3\" font-family=\"Times,serif\" font-size=\"14.00\">i0</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>6</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"129.2\" cy=\"-100\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"129.2\" y=\"-96.3\" font-family=\"Times,serif\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;6 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>2&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M56.74,-35.07C70.27,-47 92.03,-66.21 108.18,-80.46\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"106.23,-83.4 116.04,-87.39 110.86,-78.15 106.23,-83.4\"/>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>8</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"65.2\" cy=\"-100\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"65.2\" y=\"-96.3\" font-family=\"Times,serif\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;8 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>2&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.17,-41.77C51.92,-51.58 55.37,-63.89 58.36,-74.59\"/>\n",
"<ellipse fill=\"black\" stroke=\"black\" cx=\"59.46\" cy=\"-78.53\" rx=\"4\" ry=\"4\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>4</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"140.2,-46 101.2,-11.5 179.19,-11.5 140.2,-46\"/>\n",
"<text text-anchor=\"middle\" x=\"140.2\" y=\"-19.3\" font-family=\"Times,serif\" font-size=\"14.00\">i1</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;6 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>4&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M137.31,-43.71C136.05,-52.28 134.55,-62.48 133.19,-71.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"129.72,-71.32 131.73,-81.72 136.64,-72.34 129.72,-71.32\"/>\n",
"</g>\n",
"<!-- 4&#45;&gt;8 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>4&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M128.48,-35.72C116.36,-47.83 97.3,-66.9 83.26,-80.94\"/>\n",
"<ellipse fill=\"black\" stroke=\"black\" cx=\"80.41\" cy=\"-83.79\" rx=\"4\" ry=\"4\"/>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>10</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"65.2\" cy=\"-176.75\" rx=\"23\" ry=\"23\"/>\n",
"<text text-anchor=\"middle\" x=\"65.2\" y=\"-173.05\" font-family=\"Times,serif\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;10 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>6&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M117.75,-114.36C108.69,-124.95 95.81,-139.99 85.07,-152.53\"/>\n",
"<ellipse fill=\"black\" stroke=\"black\" cx=\"82.29\" cy=\"-155.79\" rx=\"4\" ry=\"4\"/>\n",
"</g>\n",
"<!-- o1o1 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>o1o1</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"150.2,-235.5 194.59,-270 105.8,-270 150.2,-235.5\"/>\n",
"<text text-anchor=\"middle\" x=\"150.2\" y=\"-254.8\" font-family=\"Times,serif\" font-size=\"14.00\">o1</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;o1o1 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>6&#45;&gt;o1o1:s</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M133.55,-117.85C139.22,-141.22 148.58,-185.13 150.01,-225.36\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.51,-225.56 150.2,-235.5 153.51,-225.43 146.51,-225.56\"/>\n",
"</g>\n",
"<!-- 8&#45;&gt;10 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>8&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M65.2,-118.34C65.2,-126.54 65.2,-136.58 65.2,-145.95\"/>\n",
"<ellipse fill=\"black\" stroke=\"black\" cx=\"65.2\" cy=\"-149.95\" rx=\"4\" ry=\"4\"/>\n",
"</g>\n",
"<!-- o0o0 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>o0o0</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"44.2,-235.5 88.59,-270 -0.2,-270 44.2,-235.5\"/>\n",
"<text text-anchor=\"middle\" x=\"44.2\" y=\"-254.8\" font-family=\"Times,serif\" font-size=\"14.00\">o0</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;o0o0 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>10&#45;&gt;o0o0:s</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M54.45,-196.9C50.57,-205.12 46.74,-215.16 45.07,-225.34\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"41.57,-225.23 44.2,-235.5 48.54,-225.83 41.57,-225.23\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(this_aig.show())"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"aag 5 2 0 2 3\n",
"2\n",
"4\n",
"10\n",
"6\n",
"6 2 4\n",
"8 3 5\n",
"10 7 9\n",
"i0 i0\n",
"i1 i1\n",
"o0 o0\n",
"o1 o1\n",
"\n"
]
}
],
"source": [
"print(this_aig.to_str())"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"((2, 4), (3, 5), (7, 9))\n"
]
}
],
"source": [
"print(this_aig.gates())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Verifying an implementation</h2>\n",
"\n",
"<p>\n",
" An aiger circuit can be transformed into a monitor. If the aiger represents the implementation of a strategy in the context of active control, it can be check for correctness. This is done by computing the intersecting of the monitor and the negation of the specification.\n",
"</p>"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"535pt\" height=\"115pt\"\n",
" viewBox=\"0.00 0.00 535.00 115.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 111)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-111 531,-111 531,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"260.5\" y=\"-91.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"252.5\" y=\"-76.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",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"263.5\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"263.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M208.65,-18C210.29,-18 224.65,-18 238.13,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.44,-18 238.44,-21.15 241.94,-18 238.44,-18 238.44,-18 238.44,-18 241.94,-18 238.44,-14.85 245.44,-18 245.44,-18\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M257.12,-35.04C255.82,-44.86 257.95,-54 263.5,-54 267.67,-54 269.9,-48.86 270.21,-42.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"269.88,-35.04 273.35,-41.88 270.04,-38.53 270.21,-42.03 270.21,-42.03 270.21,-42.03 270.04,-38.53 267.06,-42.18 269.88,-35.04 269.88,-35.04\"/>\n",
"<text text-anchor=\"start\" x=\"0\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">(!i0 &amp; !i1 &amp; !o0 &amp; !o1) | (!i0 &amp; i1 &amp; o0 &amp; !o1) | (i0 &amp; !i1 &amp; o0 &amp; !o1) | (i0 &amp; i1 &amp; !o0 &amp; o1)</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 0x7f72497abfc0> >"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"aigasmon = this_aig.as_automaton()\n",
"display(aigasmon)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}