spot/tests/python/games.ipynb
Alexandre Duret-Lutz 0ac5bbc05d ltlsynt: replace -x minimization-lvl=N by --simplify
* bin/ltlsynt.cc: Implement the new option, and make it default
to bisimulation with output assignment (a.k.a. bwoa).
* NEWS, bin/spot-x.cc, doc/org/ltlsynt.org: Update the documentation.
* spot/twaalgos/game.hh: Make bwoa the default.
* tests/core/ltlsynt.test: Add and adjust test cases.
* tests/python/games.ipynb: Adjust.
2021-10-06 18:00:24 +02:00

4373 lines
292 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 29 states, and 55 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=\"535pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 535.26 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.33)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-993.33 1478.88,-993.33 1478.88,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"625.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"646.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"662.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"704.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"720.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"766.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"782.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"820.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"836.94\" y=\"-975.13\" font-family=\"Lato\" font-size=\"14.00\">)))</text>\n",
"<text text-anchor=\"start\" x=\"681.94\" y=\"-961.13\" 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=\"-799.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-795.63\" 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,-799.33C2.79,-799.33 17.15,-799.33 30.63,-799.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-799.33 30.94,-802.48 34.44,-799.33 30.94,-799.33 30.94,-799.33 30.94,-799.33 34.44,-799.33 30.94,-796.18 37.94,-799.33 37.94,-799.33\"/>\n",
"</g>\n",
"<!-- 25 -->\n",
"<g id=\"node26\" class=\"node\">\n",
"<title>25</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"188.33,-727.33 158.17,-709.33 188.33,-691.33 218.5,-709.33 188.33,-727.33\"/>\n",
"<text text-anchor=\"middle\" x=\"188.33\" y=\"-705.63\" font-family=\"Lato\" font-size=\"14.00\">25</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;25 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>9&#45;&gt;25</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M71.2,-789.53C94.53,-773.42 141.04,-741.3 167.57,-722.98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"173.55,-718.85 169.58,-725.42 170.67,-720.84 167.79,-722.83 167.79,-722.83 167.79,-722.83 170.67,-720.84 166,-720.24 173.55,-718.85 173.55,-718.85\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-791.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"108\" y=\"-776.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 26 -->\n",
"<g id=\"node27\" class=\"node\">\n",
"<title>26</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"267,-882.33 236.83,-864.33 267,-846.33 297.16,-864.33 267,-882.33\"/>\n",
"<text text-anchor=\"middle\" x=\"267\" y=\"-860.63\" font-family=\"Lato\" font-size=\"14.00\">26</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;26 -->\n",
"<g id=\"edge29\" class=\"edge\">\n",
"<title>9&#45;&gt;26</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.4,-804.43C109.5,-815.66 196.08,-842.59 239.8,-856.18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"246.69,-858.33 239.07,-859.25 243.34,-857.29 240,-856.25 240,-856.25 240,-856.25 243.34,-857.29 240.94,-853.24 246.69,-858.33 246.69,-858.33\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-843.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"108\" y=\"-828.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 27 -->\n",
"<g id=\"node28\" class=\"node\">\n",
"<title>27</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"399.66,-542.33 369.5,-524.33 399.66,-506.33 429.83,-524.33 399.66,-542.33\"/>\n",
"<text text-anchor=\"middle\" x=\"399.66\" y=\"-520.63\" font-family=\"Lato\" font-size=\"14.00\">27</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;27 -->\n",
"<g id=\"edge30\" class=\"edge\">\n",
"<title>9&#45;&gt;27</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M64.52,-783.13C78.91,-753.63 112.97,-690.67 158,-652.33 226.89,-593.68 327.11,-551.24 373.44,-533.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"380.14,-530.98 374.71,-536.4 376.86,-532.22 373.59,-533.46 373.59,-533.46 373.59,-533.46 376.86,-532.22 372.48,-530.51 380.14,-530.98 380.14,-530.98\"/>\n",
"<text text-anchor=\"start\" x=\"166.33\" y=\"-671.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"180.33\" y=\"-656.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 28 -->\n",
"<g id=\"node29\" class=\"node\">\n",
"<title>28</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"556.99,-949.33 526.82,-931.33 556.99,-913.33 587.16,-931.33 556.99,-949.33\"/>\n",
"<text text-anchor=\"middle\" x=\"556.99\" y=\"-927.63\" font-family=\"Lato\" font-size=\"14.00\">28</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;28 -->\n",
"<g id=\"edge31\" class=\"edge\">\n",
"<title>9&#45;&gt;28</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M63.96,-815.52C70.02,-828.24 79.74,-845.84 92,-858.33 126.9,-893.89 137.5,-917.33 187.33,-917.33 187.33,-917.33 187.33,-917.33 400.66,-917.33 444.03,-917.33 493.93,-922.81 525.21,-926.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"532.37,-927.87 525.01,-930.06 528.9,-927.41 525.43,-926.94 525.43,-926.94 525.43,-926.94 528.9,-927.41 525.84,-923.82 532.37,-927.87 532.37,-927.87\"/>\n",
"<text text-anchor=\"start\" x=\"247\" y=\"-936.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"259\" y=\"-921.13\" 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=\"1098.65\" cy=\"-757.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1098.65\" y=\"-753.63\" 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=\"1230.98,-598.33 1200.82,-580.33 1230.98,-562.33 1261.15,-580.33 1230.98,-598.33\"/>\n",
"<text text-anchor=\"middle\" x=\"1230.98\" y=\"-576.63\" 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=\"M1111.68,-744.74C1128.54,-726.78 1159.7,-692.42 1182.65,-660.33 1196.74,-640.63 1210.58,-616.54 1219.62,-599.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1222.95,-593.8 1222.4,-601.45 1221.29,-596.88 1219.62,-599.96 1219.62,-599.96 1219.62,-599.96 1221.29,-596.88 1216.85,-598.46 1222.95,-593.8 1222.95,-593.8\"/>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-737.13\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-722.13\" 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=\"1230.98,-775.33 1200.82,-757.33 1230.98,-739.33 1261.15,-757.33 1230.98,-775.33\"/>\n",
"<text text-anchor=\"middle\" x=\"1230.98\" y=\"-753.63\" 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=\"M1116.69,-757.33C1136.09,-757.33 1168.36,-757.33 1193.51,-757.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1200.73,-757.33 1193.73,-760.48 1197.23,-757.33 1193.73,-757.33 1193.73,-757.33 1193.73,-757.33 1197.23,-757.33 1193.73,-754.18 1200.73,-757.33 1200.73,-757.33\"/>\n",
"<text text-anchor=\"start\" x=\"1152.65\" y=\"-776.13\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-761.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1335.76\" cy=\"-626.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1335.76\" y=\"-622.63\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;1 -->\n",
"<g id=\"edge32\" class=\"edge\">\n",
"<title>10&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1255.36,-576.67C1268.05,-575.74 1283.69,-576.36 1296.32,-582.33 1306.6,-587.2 1315.25,-596.24 1321.72,-604.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1325.85,-610.72 1319.24,-606.82 1323.84,-607.86 1321.82,-605 1321.82,-605 1321.82,-605 1323.84,-607.86 1324.39,-603.18 1325.85,-610.72 1325.85,-610.72\"/>\n",
"<text text-anchor=\"start\" x=\"1279.32\" y=\"-601.13\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"1279.82\" y=\"-586.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;0 -->\n",
"<g id=\"edge33\" class=\"edge\">\n",
"<title>11&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1218.14,-767.93C1209.12,-775.24 1196.02,-784.34 1182.65,-788.33 1162.21,-794.43 1154.6,-795.9 1134.65,-788.33 1127.71,-785.7 1121.25,-780.99 1115.83,-776.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1110.77,-771.03 1117.97,-773.7 1113.26,-773.49 1115.76,-775.95 1115.76,-775.95 1115.76,-775.95 1113.26,-773.49 1113.55,-778.19 1110.77,-771.03 1110.77,-771.03\"/>\n",
"<text text-anchor=\"start\" x=\"1150.15\" y=\"-812.13\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-797.13\" 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=\"1444.54,-697.33 1414.38,-679.33 1444.54,-661.33 1474.71,-679.33 1444.54,-697.33\"/>\n",
"<text text-anchor=\"middle\" x=\"1444.54\" y=\"-675.63\" 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=\"M1349.43,-638.53C1356.54,-644.85 1365.86,-652.28 1375.21,-657.33 1387.7,-664.08 1402.61,-669.17 1415.3,-672.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1422.1,-674.59 1414.52,-675.81 1418.72,-673.68 1415.34,-672.77 1415.34,-672.77 1415.34,-672.77 1418.72,-673.68 1416.16,-669.72 1422.1,-674.59 1422.1,-674.59\"/>\n",
"<text text-anchor=\"start\" x=\"1377.71\" y=\"-684.13\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"<text text-anchor=\"start\" x=\"1377.71\" y=\"-669.13\" 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=\"993.32,-745.33 963.15,-727.33 993.32,-709.33 1023.48,-727.33 993.32,-745.33\"/>\n",
"<text text-anchor=\"middle\" x=\"993.32\" y=\"-723.63\" 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=\"M1317.89,-622.94C1282.75,-616.59 1199.62,-605.38 1134.65,-626.33 1082.86,-643.03 1034.05,-686.73 1009.97,-710.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1004.94,-715.92 1007.6,-708.72 1007.39,-713.43 1009.85,-710.93 1009.85,-710.93 1009.85,-710.93 1007.39,-713.43 1012.09,-713.14 1004.94,-715.92 1004.94,-715.92\"/>\n",
"<text text-anchor=\"start\" x=\"1152.65\" y=\"-645.13\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-630.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;1 -->\n",
"<g id=\"edge34\" class=\"edge\">\n",
"<title>12&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1436.65,-665.74C1428.9,-652.13 1414.92,-632.01 1396.21,-623.33 1385.14,-618.19 1371.63,-618.43 1360.28,-620.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1353.19,-621.51 1359.49,-617.13 1356.63,-620.87 1360.07,-620.23 1360.07,-620.23 1360.07,-620.23 1356.63,-620.87 1360.65,-623.32 1353.19,-621.51 1353.19,-621.51\"/>\n",
"<text text-anchor=\"start\" x=\"1375.21\" y=\"-642.13\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"1377.71\" y=\"-627.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;0 -->\n",
"<g id=\"edge35\" class=\"edge\">\n",
"<title>13&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1014.24,-733.12C1031.43,-738.11 1056.27,-745.32 1074.37,-750.57\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1081.19,-752.55 1073.59,-753.63 1077.83,-751.58 1074.47,-750.6 1074.47,-750.6 1074.47,-750.6 1077.83,-751.58 1075.35,-747.58 1081.19,-752.55 1081.19,-752.55\"/>\n",
"<text text-anchor=\"start\" x=\"1041.65\" y=\"-765.13\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"1044.15\" y=\"-750.13\" 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=\"1098.65\" cy=\"-509.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1098.65\" y=\"-505.63\" 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=\"1230.98,-184.33 1200.82,-166.33 1230.98,-148.33 1261.15,-166.33 1230.98,-184.33\"/>\n",
"<text text-anchor=\"middle\" x=\"1230.98\" y=\"-162.63\" 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=\"M1105.52,-492.52C1111.26,-477.81 1121.12,-456.48 1134.65,-441.33 1151.73,-422.21 1169.34,-431.24 1182.65,-409.33 1220.73,-346.67 1183.76,-316.69 1200.65,-245.33 1205.47,-224.96 1214.07,-202.68 1220.71,-186.99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1223.61,-180.28 1223.73,-187.95 1222.22,-183.49 1220.84,-186.7 1220.84,-186.7 1220.84,-186.7 1222.22,-183.49 1217.94,-185.46 1223.61,-180.28 1223.61,-180.28\"/>\n",
"<text text-anchor=\"start\" x=\"1152.65\" y=\"-460.13\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-445.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 16 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>16</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"1230.98,-502.33 1200.82,-484.33 1230.98,-466.33 1261.15,-484.33 1230.98,-502.33\"/>\n",
"<text text-anchor=\"middle\" x=\"1230.98\" y=\"-480.63\" font-family=\"Lato\" font-size=\"14.00\">16</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;16 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1116.25,-513.94C1133.28,-517.89 1160.36,-521.98 1182.65,-515.33 1193.3,-512.15 1203.78,-505.73 1212.17,-499.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1218.14,-494.93 1214.53,-501.7 1215.37,-497.07 1212.6,-499.21 1212.6,-499.21 1212.6,-499.21 1215.37,-497.07 1210.67,-496.72 1218.14,-494.93 1218.14,-494.93\"/>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-537.13\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-522.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 15 -->\n",
"<g id=\"node30\" class=\"node\">\n",
"<title>15</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1335.76\" cy=\"-166.33\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1335.76\" y=\"-162.63\" font-family=\"Lato\" font-size=\"14.00\">15</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;15 -->\n",
"<g id=\"edge36\" class=\"edge\">\n",
"<title>14&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1244.58,-156.12C1257.4,-147.01 1277.93,-135.88 1296.32,-141.33 1302.46,-143.15 1308.54,-146.3 1313.99,-149.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1320.07,-153.91 1312.51,-152.56 1317.18,-151.93 1314.29,-149.96 1314.29,-149.96 1314.29,-149.96 1317.18,-151.93 1316.06,-147.36 1320.07,-153.91 1320.07,-153.91\"/>\n",
"<text text-anchor=\"start\" x=\"1283.32\" y=\"-160.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"1279.82\" y=\"-145.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;2 -->\n",
"<g id=\"edge38\" class=\"edge\">\n",
"<title>16&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1208.87,-479.4C1189.09,-475.77 1159.03,-472.78 1134.65,-481.33 1128.29,-483.56 1122.22,-487.49 1116.98,-491.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1111.64,-496.34 1114.87,-489.38 1114.29,-494.05 1116.93,-491.76 1116.93,-491.76 1116.93,-491.76 1114.29,-494.05 1119,-494.14 1111.64,-496.34 1111.64,-496.34\"/>\n",
"<text text-anchor=\"start\" x=\"1154.15\" y=\"-500.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-485.13\" 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=\"860.99\" cy=\"-825.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"860.99\" y=\"-821.63\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;13 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M878.68,-821.91C896.52,-817.6 924.95,-808.83 944.99,-793.33 960.95,-780.99 973.85,-761.82 982.13,-747.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"985.6,-741.03 984.98,-748.68 983.91,-744.09 982.22,-747.15 982.22,-747.15 982.22,-747.15 983.91,-744.09 979.46,-745.63 985.6,-741.03 985.6,-741.03\"/>\n",
"<text text-anchor=\"start\" x=\"914.99\" y=\"-835.13\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-820.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 17 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>17</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"755.65,-795.33 725.49,-777.33 755.65,-759.33 785.82,-777.33 755.65,-795.33\"/>\n",
"<text text-anchor=\"middle\" x=\"755.65\" y=\"-773.63\" font-family=\"Lato\" font-size=\"14.00\">17</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;17 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M842.76,-822.76C831.38,-820.65 816.35,-817.06 803.99,-811.33 793.39,-806.42 782.74,-799.03 774.22,-792.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"768.7,-787.96 776.13,-789.89 771.43,-790.15 774.16,-792.34 774.16,-792.34 774.16,-792.34 771.43,-790.15 772.18,-794.8 768.7,-787.96 768.7,-787.96\"/>\n",
"<text text-anchor=\"start\" x=\"806.49\" y=\"-837.13\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"<text text-anchor=\"start\" x=\"806.49\" y=\"-822.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;2 -->\n",
"<g id=\"edge39\" class=\"edge\">\n",
"<title>17&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M777.68,-772.38C820.81,-761.95 917.54,-737.05 944.99,-717.33 963.56,-703.98 1049.69,-579.51 1083.74,-529.75\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1087.82,-523.79 1086.47,-531.34 1085.84,-526.68 1083.87,-529.57 1083.87,-529.57 1083.87,-529.57 1085.84,-526.68 1081.27,-527.79 1087.82,-523.79 1087.82,-523.79\"/>\n",
"<text text-anchor=\"start\" x=\"912.49\" y=\"-757.13\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-742.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;3 -->\n",
"<g id=\"edge40\" class=\"edge\">\n",
"<title>17&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M777.83,-772.56C791.95,-770.48 810.5,-769.97 824.99,-777.33 835.54,-782.7 843.67,-792.91 849.43,-802.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"852.87,-808.73 846.71,-804.14 851.17,-805.67 849.47,-802.61 849.47,-802.61 849.47,-802.61 851.17,-805.67 852.22,-801.08 852.87,-808.73 852.87,-808.73\"/>\n",
"<text text-anchor=\"start\" x=\"803.99\" y=\"-796.13\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"806.49\" y=\"-781.13\" 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=\"1098.65\" cy=\"-330.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1098.65\" y=\"-326.63\" 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=\"M1100.66,-312.24C1103.27,-272.97 1111.71,-181.96 1134.65,-163.33 1154.17,-147.48 1184.07,-151.49 1205.17,-157.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1211.96,-159.41 1204.35,-160.42 1208.61,-158.41 1205.26,-157.4 1205.26,-157.4 1205.26,-157.4 1208.61,-158.41 1206.17,-154.38 1211.96,-159.41 1211.96,-159.41\"/>\n",
"<text text-anchor=\"start\" x=\"1152.65\" y=\"-182.13\" font-family=\"Lato\" font-size=\"14.00\">i0</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-167.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 18 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>18</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"1230.98,-290.33 1200.82,-272.33 1230.98,-254.33 1261.15,-272.33 1230.98,-290.33\"/>\n",
"<text text-anchor=\"middle\" x=\"1230.98\" y=\"-268.63\" font-family=\"Lato\" font-size=\"14.00\">18</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;18 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1104.99,-313.25C1110.21,-299.77 1119.59,-281.86 1134.65,-273.33 1155.05,-261.78 1182.05,-262.7 1202.11,-265.83\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1209.16,-267.07 1201.72,-268.96 1205.71,-266.46 1202.26,-265.86 1202.26,-265.86 1202.26,-265.86 1205.71,-266.46 1202.81,-262.76 1209.16,-267.07 1209.16,-267.07\"/>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-292.13\" font-family=\"Lato\" font-size=\"14.00\">!i0</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-277.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 18&#45;&gt;4 -->\n",
"<g id=\"edge41\" class=\"edge\">\n",
"<title>18&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1216.88,-282.28C1207.67,-288.92 1194.87,-297.47 1182.65,-303.33 1163.4,-312.56 1140.2,-319.81 1123.23,-324.46\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1116.37,-326.29 1122.32,-321.45 1119.75,-325.39 1123.13,-324.49 1123.13,-324.49 1123.13,-324.49 1119.75,-325.39 1123.95,-327.53 1116.37,-326.29 1116.37,-326.29\"/>\n",
"<text text-anchor=\"start\" x=\"1154.15\" y=\"-339.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-324.13\" 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=\"1098.65\" cy=\"-166.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1098.65\" y=\"-162.63\" 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=\"M1105.83,-149.66C1111.34,-137.44 1120.72,-121.75 1134.65,-114.33 1153.48,-104.31 1163.14,-105.71 1182.65,-114.33 1197.86,-121.06 1210.29,-135.35 1218.59,-147.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1222.54,-153.21 1216.05,-149.12 1220.61,-150.29 1218.67,-147.38 1218.67,-147.38 1218.67,-147.38 1220.61,-150.29 1221.29,-145.64 1222.54,-153.21 1222.54,-153.21\"/>\n",
"<text text-anchor=\"start\" x=\"1138.65\" y=\"-133.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-118.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;16 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1101,-184.3C1104.44,-225.91 1114.7,-327.38 1134.65,-354.33 1148.96,-373.66 1166.13,-361.85 1182.65,-379.33 1204.96,-402.94 1218.01,-438.86 1224.57,-461.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1226.48,-468.98 1221.61,-463.05 1225.56,-465.6 1224.65,-462.23 1224.65,-462.23 1224.65,-462.23 1225.56,-465.6 1227.69,-461.4 1226.48,-468.98 1226.48,-468.98\"/>\n",
"<text text-anchor=\"start\" x=\"1136.65\" y=\"-398.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-383.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;18 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>5&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1112.29,-178.2C1118.81,-184.15 1126.98,-191.33 1134.65,-197.33 1155.05,-213.28 1162.26,-214.38 1182.65,-230.33 1193.25,-238.63 1204.55,-248.61 1213.45,-256.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1218.66,-261.56 1211.38,-259.13 1216.08,-259.19 1213.51,-256.81 1213.51,-256.81 1213.51,-256.81 1216.08,-259.19 1215.65,-254.5 1218.66,-261.56 1218.66,-261.56\"/>\n",
"<text text-anchor=\"start\" x=\"1136.65\" y=\"-249.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-234.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 19 -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>19</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"1230.98,-52.33 1200.82,-34.33 1230.98,-16.33 1261.15,-34.33 1230.98,-52.33\"/>\n",
"<text text-anchor=\"middle\" x=\"1230.98\" y=\"-30.63\" font-family=\"Lato\" font-size=\"14.00\">19</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;19 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>5&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1100.89,-148.36C1103.88,-110.74 1112.96,-25.74 1134.65,-8.33 1156.84,9.48 1190.29,-6.7 1211.1,-20.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1217.12,-24.4 1209.56,-23.07 1214.23,-22.43 1211.33,-20.46 1211.33,-20.46 1211.33,-20.46 1214.23,-22.43 1213.1,-17.86 1217.12,-24.4 1217.12,-24.4\"/>\n",
"<text text-anchor=\"start\" x=\"1134.65\" y=\"-27.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-12.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;5 -->\n",
"<g id=\"edge42\" class=\"edge\">\n",
"<title>19&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1207.02,-38.29C1185.64,-43.09 1154.22,-53.2 1134.65,-73.33 1116.58,-91.92 1107.66,-120.73 1103.38,-141.36\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1102.05,-148.29 1100.28,-140.82 1102.71,-144.85 1103.37,-141.41 1103.37,-141.41 1103.37,-141.41 1102.71,-144.85 1106.47,-142.01 1102.05,-148.29 1102.05,-148.29\"/>\n",
"<text text-anchor=\"start\" x=\"1154.15\" y=\"-92.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-77.13\" 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=\"623.32\" cy=\"-501.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"623.32\" y=\"-497.63\" 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=\"M636.73,-513.35C643.06,-518.91 651.13,-525.18 659.32,-529.33 718.72,-559.43 738.1,-558.66 803.99,-568.33 878.66,-579.29 1104.86,-580.4 1193.66,-580.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1200.81,-580.4 1193.81,-583.55 1197.31,-580.4 1193.81,-580.4 1193.81,-580.4 1193.81,-580.4 1197.31,-580.4 1193.81,-577.25 1200.81,-580.4 1200.81,-580.4\"/>\n",
"<text text-anchor=\"start\" x=\"898.99\" y=\"-595.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-580.13\" 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=\"M631.61,-517.57C637.54,-529.08 646.96,-544.06 659.32,-553.33 683.95,-571.79 695.66,-566.11 725.32,-574.33 775.71,-588.29 1139.98,-655.11 1182.65,-685.33 1200.7,-698.12 1213.69,-720.16 1221.45,-736.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1224.45,-743.1 1218.68,-738.03 1223,-739.91 1221.55,-736.73 1221.55,-736.73 1221.55,-736.73 1223,-739.91 1224.42,-735.42 1224.45,-743.1 1224.45,-743.1\"/>\n",
"<text text-anchor=\"start\" x=\"900.99\" y=\"-639.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-624.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 20 -->\n",
"<g id=\"node19\" class=\"node\">\n",
"<title>20</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"755.65,-499.33 725.49,-481.33 755.65,-463.33 785.82,-481.33 755.65,-499.33\"/>\n",
"<text text-anchor=\"middle\" x=\"755.65\" y=\"-477.63\" font-family=\"Lato\" font-size=\"14.00\">20</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;20 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>6&#45;&gt;20</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M641.36,-498.72C662.43,-495.48 698.65,-489.93 724.47,-485.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"731.45,-484.89 725.01,-489.07 727.99,-485.42 724.53,-485.95 724.53,-485.95 724.53,-485.95 727.99,-485.42 724.06,-482.84 731.45,-484.89 731.45,-484.89\"/>\n",
"<text text-anchor=\"start\" x=\"659.32\" y=\"-514.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"675.32\" y=\"-499.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 21 -->\n",
"<g id=\"node20\" class=\"node\">\n",
"<title>21</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"755.65,-413.33 725.49,-395.33 755.65,-377.33 785.82,-395.33 755.65,-413.33\"/>\n",
"<text text-anchor=\"middle\" x=\"755.65\" y=\"-391.63\" font-family=\"Lato\" font-size=\"14.00\">21</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;21 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>6&#45;&gt;21</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M633.38,-486.11C639.77,-476.24 649.01,-463.55 659.32,-454.33 677.74,-437.87 686.32,-439.32 707.32,-426.33 716.38,-420.73 726.25,-414.32 734.62,-408.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"740.69,-404.75 736.6,-411.24 737.78,-406.68 734.86,-408.62 734.86,-408.62 734.86,-408.62 737.78,-406.68 733.12,-406 740.69,-404.75 740.69,-404.75\"/>\n",
"<text text-anchor=\"start\" x=\"661.32\" y=\"-473.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"675.32\" y=\"-458.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"M769.46,-471.21C793.3,-452.8 846.64,-413.6 896.99,-390.33 929.1,-375.49 1028.33,-348.54 1074.09,-336.47\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1080.96,-334.66 1074.99,-339.49 1077.58,-335.56 1074.19,-336.45 1074.19,-336.45 1074.19,-336.45 1077.58,-335.56 1073.39,-333.4 1080.96,-334.66 1080.96,-334.66\"/>\n",
"<text text-anchor=\"start\" x=\"910.49\" y=\"-409.13\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-394.13\" 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=\"860.99\" cy=\"-488.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"860.99\" y=\"-484.63\" 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=\"M784.97,-480.76C797.28,-480.77 811.87,-481.12 824.99,-482.33 828.58,-482.66 832.36,-483.16 836.05,-483.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"842.97,-484.87 835.55,-486.83 839.51,-484.3 836.06,-483.72 836.06,-483.72 836.06,-483.72 839.51,-484.3 836.58,-480.62 842.97,-484.87 842.97,-484.87\"/>\n",
"<text text-anchor=\"start\" x=\"805.99\" y=\"-501.13\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"806.49\" y=\"-486.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</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=\"M770.65,-386.26C795.07,-371.07 847.61,-341.16 896.99,-331.33 959.61,-318.87 1035.42,-323.74 1073.43,-327.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1080.52,-328.25 1073.23,-330.66 1077.04,-327.88 1073.56,-327.52 1073.56,-327.52 1073.56,-327.52 1077.04,-327.88 1073.88,-324.39 1080.52,-328.25 1080.52,-328.25\"/>\n",
"<text text-anchor=\"start\" x=\"910.49\" y=\"-350.13\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-335.13\" 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=\"M736.57,-388.7C715.83,-382.36 681.8,-375.94 659.32,-392.33 633.3,-411.3 626.2,-449.92 624.49,-475.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"624.13,-482.95 621.33,-475.8 624.3,-479.45 624.48,-475.95 624.48,-475.95 624.48,-475.95 624.3,-479.45 627.62,-476.11 624.13,-482.95 624.13,-482.95\"/>\n",
"<text text-anchor=\"start\" x=\"674.82\" y=\"-411.13\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"675.32\" y=\"-396.13\" 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=\"M862.46,-506.73C864.46,-576.8 873.16,-824.31 896.99,-849.33 926.51,-880.35 949.49,-863.33 992.32,-863.33 992.32,-863.33 992.32,-863.33 1336.76,-863.33 1410.01,-863.33 1433.85,-752.91 1440.88,-703.15\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1441.83,-695.98 1444.03,-703.34 1441.37,-699.45 1440.91,-702.92 1440.91,-702.92 1440.91,-702.92 1441.37,-699.45 1437.79,-702.51 1441.83,-695.98 1441.83,-695.98\"/>\n",
"<text text-anchor=\"start\" x=\"1136.65\" y=\"-882.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"1150.65\" y=\"-867.13\" 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=\"M863.62,-506.26C867.48,-545.29 878.29,-636.36 896.99,-660.33 911.53,-678.99 925.43,-670.02 944.99,-683.33 956.51,-691.18 967.99,-701.77 976.76,-710.59\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"981.85,-715.82 974.71,-713 979.41,-713.31 976.97,-710.8 976.97,-710.8 976.97,-710.8 979.41,-713.31 979.22,-708.61 981.85,-715.82 981.85,-715.82\"/>\n",
"<text text-anchor=\"start\" x=\"900.99\" y=\"-702.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-687.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 22 -->\n",
"<g id=\"node22\" class=\"node\">\n",
"<title>22</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"993.32,-454.33 963.15,-436.33 993.32,-418.33 1023.48,-436.33 993.32,-454.33\"/>\n",
"<text text-anchor=\"middle\" x=\"993.32\" y=\"-432.63\" font-family=\"Lato\" font-size=\"14.00\">22</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;22 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>7&#45;&gt;22</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M879.06,-485.72C896.23,-482.71 923.21,-476.89 944.99,-467.33 955.02,-462.92 965.3,-456.47 973.7,-450.59\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"979.73,-446.25 975.89,-452.9 976.89,-448.3 974.05,-450.34 974.05,-450.34 974.05,-450.34 976.89,-448.3 972.21,-447.79 979.73,-446.25 979.73,-446.25\"/>\n",
"<text text-anchor=\"start\" x=\"896.99\" y=\"-500.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-485.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 23 -->\n",
"<g id=\"node23\" class=\"node\">\n",
"<title>23</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"478.33,-623.33 448.16,-605.33 478.33,-587.33 508.49,-605.33 478.33,-623.33\"/>\n",
"<text text-anchor=\"middle\" x=\"478.33\" y=\"-601.63\" font-family=\"Lato\" font-size=\"14.00\">23</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;23 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>7&#45;&gt;23</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M857.07,-506.19C853.12,-524.21 844.21,-551.32 824.99,-565.33 727.67,-636.24 572.35,-620.98 508.35,-610.75\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"501.36,-609.59 508.78,-607.62 504.81,-610.16 508.27,-610.73 508.27,-610.73 508.27,-610.73 504.81,-610.16 507.75,-613.84 501.36,-609.59 501.36,-609.59\"/>\n",
"<text text-anchor=\"start\" x=\"661.32\" y=\"-636.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"675.32\" y=\"-621.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"M1012.15,-429.53C1027.14,-423.08 1048.34,-412.19 1062.65,-397.33 1074.62,-384.91 1083.53,-367.57 1089.36,-353.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1091.98,-347.12 1092.3,-354.79 1090.68,-350.37 1089.37,-353.62 1089.37,-353.62 1089.37,-353.62 1090.68,-350.37 1086.45,-352.44 1091.98,-347.12 1091.98,-347.12\"/>\n",
"<text text-anchor=\"start\" x=\"1043.65\" y=\"-432.13\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"1044.15\" y=\"-417.13\" 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=\"M973.08,-430.29C952.83,-425.11 920.65,-420.34 896.99,-433.33 884.71,-440.07 876.13,-453.14 870.53,-464.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"867.58,-471.53 867.53,-463.85 868.99,-468.33 870.41,-465.13 870.41,-465.13 870.41,-465.13 868.99,-468.33 873.29,-466.4 867.58,-471.53 867.58,-471.53\"/>\n",
"<text text-anchor=\"start\" x=\"910.49\" y=\"-452.13\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"912.99\" y=\"-437.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 23&#45;&gt;4 -->\n",
"<g id=\"edge49\" class=\"edge\">\n",
"<title>23&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M500.1,-600.17C551.41,-587.56 688.36,-554.73 803.99,-534.33 866.26,-523.35 885.14,-535.76 944.99,-515.33 1002.15,-495.82 1025.2,-494.72 1062.65,-447.33 1083.83,-420.53 1092.21,-381.13 1095.52,-355.6\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1096.36,-348.47 1098.67,-355.79 1095.95,-351.94 1095.54,-355.42 1095.54,-355.42 1095.54,-355.42 1095.95,-351.94 1092.41,-355.05 1096.36,-348.47 1096.36,-348.47\"/>\n",
"<text text-anchor=\"start\" x=\"805.99\" y=\"-553.13\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"806.49\" y=\"-538.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 23&#45;&gt;6 -->\n",
"<g id=\"edge50\" class=\"edge\">\n",
"<title>23&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M484.36,-590.63C491.17,-572.95 505.02,-543.62 526.66,-527.33 547.47,-511.66 577.13,-505.43 597.89,-502.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"605.1,-502.2 598.47,-506.06 601.62,-502.57 598.14,-502.93 598.14,-502.93 598.14,-502.93 601.62,-502.57 597.81,-499.8 605.1,-502.2 605.1,-502.2\"/>\n",
"<text text-anchor=\"start\" x=\"546.49\" y=\"-546.13\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"548.99\" y=\"-531.13\" 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=\"333.33\" cy=\"-688.33\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"333.33\" y=\"-684.63\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;13 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>8&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M350.13,-695.42C356.06,-697.88 362.92,-700.48 369.33,-702.33 416.22,-715.91 428.51,-722.33 477.33,-722.33 477.33,-722.33 477.33,-722.33 815.49,-722.33 864.95,-722.33 922.16,-724.31 957.79,-725.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"965.06,-726.08 957.94,-728.94 961.56,-725.94 958.07,-725.79 958.07,-725.79 958.07,-725.79 961.56,-725.94 958.2,-722.64 965.06,-726.08 965.06,-726.08\"/>\n",
"<text text-anchor=\"start\" x=\"663.32\" y=\"-741.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"675.32\" y=\"-726.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;17 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>8&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M341.67,-704.52C347.53,-715.44 356.82,-729.11 369.33,-736.33 485.99,-803.65 655.85,-790.75 724.35,-781.93\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"731.42,-780.99 724.9,-785.03 727.95,-781.45 724.48,-781.91 724.48,-781.91 724.48,-781.91 727.95,-781.45 724.07,-778.79 731.42,-780.99 731.42,-780.99\"/>\n",
"<text text-anchor=\"start\" x=\"534.99\" y=\"-807.13\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"548.99\" y=\"-792.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;23 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>8&#45;&gt;23</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M349.73,-680.16C368.77,-669.98 402.07,-651.9 429.99,-635.33 439.06,-629.95 448.93,-623.75 457.31,-618.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"463.38,-614.48 459.2,-620.92 460.43,-616.37 457.49,-618.27 457.49,-618.27 457.49,-618.27 460.43,-616.37 455.79,-615.62 463.38,-614.48 463.38,-614.48\"/>\n",
"<text text-anchor=\"start\" x=\"377.66\" y=\"-687.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-672.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 24 -->\n",
"<g id=\"node25\" class=\"node\">\n",
"<title>24</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"478.33,-457.33 448.16,-439.33 478.33,-421.33 508.49,-439.33 478.33,-457.33\"/>\n",
"<text text-anchor=\"middle\" x=\"478.33\" y=\"-435.63\" font-family=\"Lato\" font-size=\"14.00\">24</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;24 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>8&#45;&gt;24</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M334.72,-670.07C336.13,-622.61 342.37,-497.03 369.33,-467.33 387.5,-447.32 417.95,-440.8 441.9,-439.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"449.1,-438.61 442.29,-442.15 445.61,-438.81 442.11,-439.01 442.11,-439.01 442.11,-439.01 445.61,-438.81 441.93,-435.86 449.1,-438.61 449.1,-438.61\"/>\n",
"<text text-anchor=\"start\" x=\"375.66\" y=\"-486.13\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-471.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 24&#45;&gt;5 -->\n",
"<g id=\"edge51\" class=\"edge\">\n",
"<title>24&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M482.04,-423.32C491.46,-373.79 527.45,-226.33 622.32,-226.33 622.32,-226.33 622.32,-226.33 994.32,-226.33 1028.16,-226.33 1060.83,-201.97 1080.08,-184.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1085.61,-179.06 1082.69,-186.16 1083.07,-181.46 1080.53,-183.87 1080.53,-183.87 1080.53,-183.87 1083.07,-181.46 1078.36,-181.58 1085.61,-179.06 1085.61,-179.06\"/>\n",
"<text text-anchor=\"start\" x=\"805.99\" y=\"-245.13\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"806.49\" y=\"-230.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 24&#45;&gt;8 -->\n",
"<g id=\"edge52\" class=\"edge\">\n",
"<title>24&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M465.13,-449.76C459.11,-455.53 452.25,-463.18 447.99,-471.33 431.11,-503.63 449.09,-520.29 429.99,-551.33 411.69,-581.09 389.44,-572.76 369.33,-601.33 355.73,-620.64 360.27,-629.47 351.33,-651.33 349.42,-655.99 347.26,-660.92 345.14,-665.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"342.08,-672.25 342.14,-664.58 343.54,-669.07 345.01,-665.89 345.01,-665.89 345.01,-665.89 343.54,-669.07 347.87,-667.21 342.08,-672.25 342.08,-672.25\"/>\n",
"<text text-anchor=\"start\" x=\"389.16\" y=\"-620.13\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"<text text-anchor=\"start\" x=\"391.66\" y=\"-605.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 25&#45;&gt;8 -->\n",
"<g id=\"edge53\" class=\"edge\">\n",
"<title>25&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M212.95,-705.86C239.34,-701.99 281.84,-695.75 308.37,-691.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"315.41,-690.82 308.94,-694.95 311.94,-691.33 308.48,-691.83 308.48,-691.83 308.48,-691.83 311.94,-691.33 308.02,-688.72 315.41,-690.82 315.41,-690.82\"/>\n",
"<text text-anchor=\"start\" x=\"262.5\" y=\"-720.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"259\" y=\"-705.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 26&#45;&gt;3 -->\n",
"<g id=\"edge54\" class=\"edge\">\n",
"<title>26&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M291.05,-868.31C317.09,-872.44 360.79,-878.33 398.66,-878.33 398.66,-878.33 398.66,-878.33 756.65,-878.33 789.18,-878.33 821.74,-857.29 841.38,-841.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"847.05,-837.09 843.62,-843.96 844.34,-839.31 841.63,-841.52 841.63,-841.52 841.63,-841.52 844.34,-839.31 839.63,-839.08 847.05,-837.09 847.05,-837.09\"/>\n",
"<text text-anchor=\"start\" x=\"552.49\" y=\"-897.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"548.99\" y=\"-882.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 27&#45;&gt;6 -->\n",
"<g id=\"edge55\" class=\"edge\">\n",
"<title>27&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M423.83,-520.7C449.06,-516.86 490.63,-510.89 526.66,-507.33 550.78,-504.95 578.42,-503.34 597.77,-502.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"605.01,-502.04 598.17,-505.52 601.51,-502.21 598.02,-502.38 598.02,-502.38 598.02,-502.38 601.51,-502.21 597.87,-499.23 605.01,-502.04 605.01,-502.04\"/>\n",
"<text text-anchor=\"start\" x=\"473.83\" y=\"-535.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"470.33\" y=\"-520.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 28&#45;&gt;0 -->\n",
"<g id=\"edge56\" class=\"edge\">\n",
"<title>28&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M583.2,-928.76C608.3,-926.42 647.93,-923.33 682.32,-923.33 682.32,-923.33 682.32,-923.33 994.32,-923.33 1060.05,-923.33 1085.47,-828.35 1093.95,-782.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1095.16,-775.1 1097.06,-782.53 1094.56,-778.54 1093.96,-781.99 1093.96,-781.99 1093.96,-781.99 1094.56,-778.54 1090.86,-781.45 1095.16,-775.1 1095.16,-775.1\"/>\n",
"<text text-anchor=\"start\" x=\"809.99\" y=\"-942.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"806.49\" y=\"-927.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 15&#45;&gt;14 -->\n",
"<g id=\"edge37\" class=\"edge\">\n",
"<title>15&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1314.46,-169.47C1308.62,-170.24 1302.23,-170.95 1296.32,-171.33 1285.32,-172.04 1273.29,-171.47 1262.63,-170.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1255.5,-169.77 1262.78,-167.35 1258.98,-170.12 1262.46,-170.48 1262.46,-170.48 1262.46,-170.48 1258.98,-170.12 1262.14,-173.61 1255.5,-169.77 1255.5,-169.77\"/>\n",
"<text text-anchor=\"start\" x=\"1283.32\" y=\"-191.13\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"1279.82\" y=\"-176.13\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</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 0x7f0ddc16bd50> >"
]
},
"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=\"650pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 650.45 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.4854368932038835 0.4854368932038835) rotate(0) translate(4 737.02)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-737.02 1334.88,-737.02 1334.88,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"553.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"574.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"590.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"632.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"648.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"694.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"710.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"748.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"764.94\" y=\"-718.82\" font-family=\"Lato\" font-size=\"14.00\">)))</text>\n",
"<text text-anchor=\"start\" x=\"609.94\" y=\"-704.82\" 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=\"-607.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-603.32\" 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,-607.02C2.79,-607.02 17.15,-607.02 30.63,-607.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-607.02 30.94,-610.17 34.44,-607.02 30.94,-607.02 30.94,-607.02 30.94,-607.02 34.44,-607.02 30.94,-603.87 37.94,-607.02 37.94,-607.02\"/>\n",
"</g>\n",
"<!-- 25 -->\n",
"<g id=\"node26\" class=\"node\">\n",
"<title>25</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"156.33,-523.02 126.17,-505.02 156.33,-487.02 186.5,-505.02 156.33,-523.02\"/>\n",
"<text text-anchor=\"middle\" x=\"156.33\" y=\"-501.32\" font-family=\"Lato\" font-size=\"14.00\">25</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;25 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>9&#45;&gt;25</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M69.06,-594.51C86.85,-576.05 120.15,-541.51 139.77,-521.16\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"144.68,-516.07 142.09,-523.29 142.25,-518.59 139.82,-521.11 139.82,-521.11 139.82,-521.11 142.25,-518.59 137.55,-518.92 144.68,-516.07 144.68,-516.07\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-571.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 26 -->\n",
"<g id=\"node27\" class=\"node\">\n",
"<title>26</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"235,-647.02 204.83,-629.02 235,-611.02 265.16,-629.02 235,-647.02\"/>\n",
"<text text-anchor=\"middle\" x=\"235\" y=\"-625.32\" font-family=\"Lato\" font-size=\"14.00\">26</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;26 -->\n",
"<g id=\"edge29\" class=\"edge\">\n",
"<title>9&#45;&gt;26</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.97,-609.13C103.58,-612.81 165.09,-620.45 202.63,-625.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"209.81,-626.01 202.47,-628.27 206.33,-625.58 202.86,-625.15 202.86,-625.15 202.86,-625.15 206.33,-625.58 203.25,-622.02 209.81,-626.01 209.81,-626.01\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-615.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 27 -->\n",
"<g id=\"node28\" class=\"node\">\n",
"<title>27</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"367.66,-388.02 337.5,-370.02 367.66,-352.02 397.83,-370.02 367.66,-388.02\"/>\n",
"<text text-anchor=\"middle\" x=\"367.66\" y=\"-366.32\" font-family=\"Lato\" font-size=\"14.00\">27</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;27 -->\n",
"<g id=\"edge30\" class=\"edge\">\n",
"<title>9&#45;&gt;27</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M60.92,-589.43C68.46,-559.48 87.74,-498.4 126,-463.02 186.96,-406.64 285.83,-383.14 335.74,-374.47\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"342.74,-373.3 336.36,-377.56 339.29,-373.88 335.84,-374.46 335.84,-374.46 335.84,-374.46 339.29,-373.88 335.32,-371.35 342.74,-373.3 342.74,-373.3\"/>\n",
"<text text-anchor=\"start\" x=\"148.33\" y=\"-466.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 28 -->\n",
"<g id=\"node29\" class=\"node\">\n",
"<title>28</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"524.99,-697.02 494.82,-679.02 524.99,-661.02 555.16,-679.02 524.99,-697.02\"/>\n",
"<text text-anchor=\"middle\" x=\"524.99\" y=\"-675.32\" font-family=\"Lato\" font-size=\"14.00\">28</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;28 -->\n",
"<g id=\"edge31\" class=\"edge\">\n",
"<title>9&#45;&gt;28</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M67.25,-621.59C83.37,-642.63 116.82,-679.02 155.33,-679.02 155.33,-679.02 155.33,-679.02 368.66,-679.02 409.35,-679.02 456.04,-679.02 487.52,-679.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"494.79,-679.02 487.79,-682.17 491.29,-679.02 487.79,-679.02 487.79,-679.02 487.79,-679.02 491.29,-679.02 487.79,-675.87 494.79,-679.02 494.79,-679.02\"/>\n",
"<text text-anchor=\"start\" x=\"227\" y=\"-682.82\" 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=\"992.65\" cy=\"-558.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"992.65\" y=\"-554.32\" 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=\"1092.98,-429.02 1062.82,-411.02 1092.98,-393.02 1123.15,-411.02 1092.98,-429.02\"/>\n",
"<text text-anchor=\"middle\" x=\"1092.98\" y=\"-407.32\" 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=\"M1003.44,-543.39C1021.49,-516.4 1059.97,-458.87 1079.73,-429.34\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1083.64,-423.48 1082.37,-431.05 1081.7,-426.39 1079.75,-429.3 1079.75,-429.3 1079.75,-429.3 1081.7,-426.39 1077.13,-427.55 1083.64,-423.48 1083.64,-423.48\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-504.82\" 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=\"1092.98,-576.02 1062.82,-558.02 1092.98,-540.02 1123.15,-558.02 1092.98,-576.02\"/>\n",
"<text text-anchor=\"middle\" x=\"1092.98\" y=\"-554.32\" 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=\"M1010.78,-558.02C1023.07,-558.02 1040.1,-558.02 1055.39,-558.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1062.73,-558.02 1055.73,-561.17 1059.23,-558.02 1055.73,-558.02 1055.73,-558.02 1055.73,-558.02 1059.23,-558.02 1055.73,-554.87 1062.73,-558.02 1062.73,-558.02\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-561.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"1196.76\" cy=\"-457.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1196.76\" y=\"-453.32\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;1 -->\n",
"<g id=\"edge32\" class=\"edge\">\n",
"<title>10&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M1116.72,-414.91C1129.13,-417.57 1144.53,-421.77 1157.32,-428.02 1164.19,-431.38 1171.06,-436.04 1177.05,-440.64\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"1182.72,-445.18 1175.29,-443.26 1179.68,-443.38 1176.94,-441.19 1177.26,-440.8 1177.57,-440.41 1180.3,-442.6 1179.23,-438.35 1182.72,-445.18 1182.72,-445.18\"/>\n",
"<text text-anchor=\"start\" x=\"1141.32\" y=\"-431.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;0 -->\n",
"<g id=\"edge33\" class=\"edge\">\n",
"<title>11&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M1076.17,-566.18C1063.4,-571.76 1044.94,-577.57 1028.65,-574.02 1024.2,-573.05 1019.63,-571.46 1015.32,-569.65\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"1008.83,-566.68 1016.51,-566.73 1012.23,-567.68 1015.41,-569.14 1015.2,-569.59 1014.99,-570.05 1011.81,-568.59 1013.89,-572.46 1008.83,-566.68 1008.83,-566.68\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-578.82\" 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=\"1300.54,-513.02 1270.38,-495.02 1300.54,-477.02 1330.71,-495.02 1300.54,-513.02\"/>\n",
"<text text-anchor=\"middle\" x=\"1300.54\" y=\"-491.32\" 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=\"M1213.76,-463.93C1220.64,-466.83 1228.78,-470.18 1236.21,-473.02 1248.46,-477.69 1262.19,-482.51 1273.73,-486.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1280.59,-488.77 1272.95,-489.51 1277.28,-487.64 1273.96,-486.52 1273.96,-486.52 1273.96,-486.52 1277.28,-487.64 1274.97,-483.54 1280.59,-488.77 1280.59,-488.77\"/>\n",
"<text text-anchor=\"start\" x=\"1236.21\" y=\"-481.82\" 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=\"892.32,-554.02 862.15,-536.02 892.32,-518.02 922.48,-536.02 892.32,-554.02\"/>\n",
"<text text-anchor=\"middle\" x=\"892.32\" y=\"-532.32\" 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=\"M1178.79,-455.45C1148.16,-453.15 1081.9,-450.54 1028.65,-465.02 984.28,-477.08 937.96,-505.35 912.67,-522.36\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"906.7,-526.42 910.71,-519.88 909.6,-524.45 912.49,-522.48 912.49,-522.48 912.49,-522.48 909.6,-524.45 914.26,-525.08 906.7,-526.42 906.7,-526.42\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-468.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;1 -->\n",
"<g id=\"edge34\" class=\"edge\">\n",
"<title>12&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M1290.12,-483.08C1281.48,-473.16 1267.69,-459.79 1252.21,-454.02 1242.6,-450.43 1231.37,-450.42 1221.61,-451.6\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"1214.49,-452.69 1220.93,-448.52 1217.87,-451.67 1221.33,-451.14 1221.4,-451.63 1221.48,-452.13 1218.02,-452.66 1221.88,-454.74 1214.49,-452.69 1214.49,-452.69\"/>\n",
"<text text-anchor=\"start\" x=\"1236.21\" y=\"-457.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;0 -->\n",
"<g id=\"edge35\" class=\"edge\">\n",
"<title>13&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M914.66,-540.79C930.33,-544.3 951.63,-549.06 967.86,-552.69\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"974.91,-554.27 967.4,-555.82 971.39,-554 967.97,-553.23 968.08,-552.75 968.19,-552.26 971.61,-553.02 968.77,-549.67 974.91,-554.27 974.91,-554.27\"/>\n",
"<text text-anchor=\"start\" x=\"940.65\" y=\"-552.82\" 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=\"992.65\" cy=\"-357.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"992.65\" y=\"-353.32\" 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=\"1092.98,-136.02 1062.82,-118.02 1092.98,-100.02 1123.15,-118.02 1092.98,-136.02\"/>\n",
"<text text-anchor=\"middle\" x=\"1092.98\" y=\"-114.32\" 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=\"M1005.93,-344.04C1017.86,-330.62 1035.5,-308.51 1044.65,-286.02 1064.81,-236.47 1044.57,-217.36 1062.65,-167.02 1066.53,-156.21 1072.91,-145.14 1078.73,-136.27\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"1082.82,-130.23 1081.5,-137.79 1081.27,-133.41 1079.31,-136.31 1078.89,-136.03 1078.48,-135.75 1080.44,-132.85 1076.29,-134.26 1082.82,-130.23 1082.82,-130.23\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-316.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 16 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>16</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"1092.98,-364.02 1062.82,-346.02 1092.98,-328.02 1123.15,-346.02 1092.98,-364.02\"/>\n",
"<text text-anchor=\"middle\" x=\"1092.98\" y=\"-342.32\" font-family=\"Lato\" font-size=\"14.00\">16</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;16 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1010.69,-359.95C1016.38,-360.79 1022.77,-361.6 1028.65,-362.02 1035.74,-362.52 1037.63,-363.17 1044.65,-362.02 1052.35,-360.75 1060.49,-358.4 1067.8,-355.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1074.8,-353.34 1069.29,-358.69 1071.51,-354.53 1068.22,-355.73 1068.22,-355.73 1068.22,-355.73 1071.51,-354.53 1067.14,-352.77 1074.8,-353.34 1074.8,-353.34\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-365.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 15 -->\n",
"<g id=\"node30\" class=\"node\">\n",
"<title>15</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"1196.76\" cy=\"-118.02\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1196.76\" y=\"-114.32\" font-family=\"Lato\" font-size=\"14.00\">15</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;15 -->\n",
"<g id=\"edge36\" class=\"edge\">\n",
"<title>14&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1108.96,-109.4C1121.71,-103.11 1140.58,-96.29 1157.32,-100.02 1162.36,-101.14 1167.53,-103 1172.37,-105.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1178.73,-108.09 1171.05,-107.97 1175.56,-106.6 1172.39,-105.12 1172.39,-105.12 1172.39,-105.12 1175.56,-106.6 1173.73,-102.26 1178.73,-108.09 1178.73,-108.09\"/>\n",
"<text text-anchor=\"start\" x=\"1141.32\" y=\"-103.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;2 -->\n",
"<g id=\"edge38\" class=\"edge\">\n",
"<title>16&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1068.93,-342.33C1056.84,-341.04 1041.84,-340.48 1028.65,-343.02 1024.45,-343.83 1020.12,-345.14 1015.99,-346.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1009.29,-349.29 1014.64,-343.78 1012.55,-348 1015.8,-346.71 1015.8,-346.71 1015.8,-346.71 1012.55,-348 1016.96,-349.64 1009.29,-349.29 1009.29,-349.29\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-346.82\" 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=\"791.99\" cy=\"-605.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"791.99\" y=\"-601.32\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;13 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M807.91,-595.78C818.19,-589.32 832.08,-580.38 843.99,-572.02 853.73,-565.17 864.31,-557.19 872.99,-550.48\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"878.66,-546.06 875.07,-552.85 875.89,-548.21 873.13,-550.36 873.13,-550.36 873.13,-550.36 875.89,-548.21 871.2,-547.88 878.66,-546.06 878.66,-546.06\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-585.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 17 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>17</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"691.65,-585.02 661.49,-567.02 691.65,-549.02 721.82,-567.02 691.65,-585.02\"/>\n",
"<text text-anchor=\"middle\" x=\"691.65\" y=\"-563.32\" font-family=\"Lato\" font-size=\"14.00\">17</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;17 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M774.26,-600.37C764.21,-597.43 751.24,-593.38 739.99,-589.02 731.83,-585.86 723.11,-581.96 715.39,-578.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"708.64,-575.09 716.31,-575.27 711.79,-576.6 714.95,-578.11 714.95,-578.11 714.95,-578.11 711.79,-576.6 713.59,-580.95 708.64,-575.09 708.64,-575.09\"/>\n",
"<text text-anchor=\"start\" x=\"739.99\" y=\"-597.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;2 -->\n",
"<g id=\"edge39\" class=\"edge\">\n",
"<title>17&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M713.01,-561.69C743.32,-553.14 801.28,-534.4 843.99,-506.02 899.72,-468.98 951.52,-408.35 976.32,-377.07\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"980.92,-371.23 979.07,-378.68 978.75,-373.98 976.59,-376.73 976.59,-376.73 976.59,-376.73 978.75,-373.98 974.11,-374.78 980.92,-371.23 980.92,-371.23\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-518.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;3 -->\n",
"<g id=\"edge40\" class=\"edge\">\n",
"<title>17&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M717.06,-564.14C729.23,-563.68 743.91,-564.68 755.99,-570.02 763.57,-573.37 770.41,-579.17 775.98,-585.09\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"780.74,-590.5 773.75,-587.32 778.05,-588.2 775.74,-585.57 776.12,-585.24 776.49,-584.91 778.8,-587.54 778.48,-583.16 780.74,-590.5 780.74,-590.5\"/>\n",
"<text text-anchor=\"start\" x=\"739.99\" y=\"-573.82\" 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=\"992.65\" cy=\"-232.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"992.65\" y=\"-228.32\" 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=\"M994.3,-213.83C996.18,-190.23 1003.18,-149.53 1028.65,-128.02 1036.87,-121.07 1047.92,-117.95 1058.48,-116.75\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"1065.68,-116.2 1058.94,-119.87 1062.22,-116.96 1058.73,-117.23 1058.7,-116.73 1058.66,-116.23 1062.15,-115.97 1058.46,-113.59 1065.68,-116.2 1065.68,-116.2\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-131.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 18 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>18</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"1092.98,-212.02 1062.82,-194.02 1092.98,-176.02 1123.15,-194.02 1092.98,-212.02\"/>\n",
"<text text-anchor=\"middle\" x=\"1092.98\" y=\"-190.32\" font-family=\"Lato\" font-size=\"14.00\">18</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;18 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1003.09,-217.32C1009.27,-209.12 1018.13,-199.65 1028.65,-195.02 1038.87,-190.52 1050.95,-189.43 1061.81,-189.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1069.09,-190.19 1061.92,-192.92 1065.59,-189.98 1062.1,-189.78 1062.1,-189.78 1062.1,-189.78 1065.59,-189.98 1062.28,-186.63 1069.09,-190.19 1069.09,-190.19\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-198.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 18&#45;&gt;4 -->\n",
"<g id=\"edge41\" class=\"edge\">\n",
"<title>18&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1074.05,-200.95C1057.89,-207.19 1034.03,-216.41 1016.5,-223.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1009.89,-225.74 1015.28,-220.28 1013.15,-224.48 1016.42,-223.22 1016.42,-223.22 1016.42,-223.22 1013.15,-224.48 1017.55,-226.16 1009.89,-225.74 1009.89,-225.74\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-221.82\" 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=\"992.65\" cy=\"-118.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"992.65\" y=\"-114.32\" 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=\"M1003.07,-103.26C1009.23,-95.03 1018.09,-85.56 1028.65,-81.02 1035.18,-78.21 1037.93,-78.7 1044.65,-81.02 1056.51,-85.1 1067.67,-93.51 1076.17,-101.29\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"1081.61,-106.5 1074.38,-103.93 1078.74,-104.44 1076.21,-102.02 1076.56,-101.66 1076.91,-101.3 1079.43,-103.72 1078.74,-99.38 1081.61,-106.5 1081.61,-106.5\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-84.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;16 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M997.38,-135.42C1002.75,-159.01 1013.67,-202.2 1028.65,-237.02 1042.99,-270.36 1065.33,-306.25 1079.29,-327.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1083.33,-333.46 1076.83,-329.38 1081.39,-330.55 1079.45,-327.63 1079.45,-327.63 1079.45,-327.63 1081.39,-330.55 1082.07,-325.89 1083.33,-333.46 1083.33,-333.46\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-271.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;18 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>5&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1007.32,-128.59C1024.54,-141.89 1054.19,-164.81 1073.44,-179.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1079.05,-184.02 1071.59,-182.24 1076.28,-181.88 1073.51,-179.74 1073.51,-179.74 1073.51,-179.74 1076.28,-181.88 1075.44,-177.25 1079.05,-184.02 1079.05,-184.02\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-159.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 19 -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>19</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"1092.98,-41.02 1062.82,-23.02 1092.98,-5.02 1123.15,-23.02 1092.98,-41.02\"/>\n",
"<text text-anchor=\"middle\" x=\"1092.98\" y=\"-19.32\" font-family=\"Lato\" font-size=\"14.00\">19</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;19 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>5&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M993.21,-99.85C993.68,-73.91 998.89,-26.95 1028.65,-5.02 1041.54,4.48 1059.29,-1.8 1072.71,-9.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1078.92,-13.24 1071.3,-12.27 1075.93,-11.41 1072.95,-9.59 1072.95,-9.59 1072.95,-9.59 1075.93,-11.41 1074.59,-6.9 1078.92,-13.24 1078.92,-13.24\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-8.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;5 -->\n",
"<g id=\"edge42\" class=\"edge\">\n",
"<title>19&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1074.88,-30.47C1061.2,-37.05 1042.14,-47.67 1028.65,-61.02 1018.65,-70.92 1010.27,-84.22 1004.22,-95.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1000.94,-101.84 1001.35,-94.18 1002.54,-98.73 1004.15,-95.63 1004.15,-95.63 1004.15,-95.63 1002.54,-98.73 1006.95,-97.07 1000.94,-101.84 1000.94,-101.84\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-64.82\" 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=\"591.32\" cy=\"-329.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"591.32\" y=\"-325.32\" 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=\"M607.02,-338.11C643.9,-360.04 743.92,-414.02 834.99,-414.02 834.99,-414.02 834.99,-414.02 993.65,-414.02 1014.91,-414.02 1038.74,-413.31 1057.62,-412.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1064.86,-412.29 1057.99,-415.72 1061.36,-412.43 1057.87,-412.57 1057.87,-412.57 1057.87,-412.57 1061.36,-412.43 1057.74,-409.42 1064.86,-412.29 1064.86,-412.29\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-417.82\" 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=\"M603.1,-343.04C615.44,-358.02 637.1,-381.19 661.32,-393.02 820.37,-470.7 896.23,-404.58 1044.65,-501.02 1059.35,-510.57 1071.81,-526.1 1080.25,-538.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1084.29,-544.71 1077.82,-540.58 1082.37,-541.78 1080.46,-538.86 1080.46,-538.86 1080.46,-538.86 1082.37,-541.78 1083.09,-537.13 1084.29,-544.71 1084.29,-544.71\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-441.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 20 -->\n",
"<g id=\"node19\" class=\"node\">\n",
"<title>20</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"691.65,-335.02 661.49,-317.02 691.65,-299.02 721.82,-317.02 691.65,-335.02\"/>\n",
"<text text-anchor=\"middle\" x=\"691.65\" y=\"-313.32\" font-family=\"Lato\" font-size=\"14.00\">20</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;20 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>6&#45;&gt;20</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M609.45,-326.93C623.1,-325.26 642.58,-322.89 659.04,-320.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"666.36,-319.98 659.79,-323.96 662.88,-320.41 659.41,-320.83 659.41,-320.83 659.41,-320.83 662.88,-320.41 659.03,-317.7 666.36,-319.98 666.36,-319.98\"/>\n",
"<text text-anchor=\"start\" x=\"627.32\" y=\"-327.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 21 -->\n",
"<g id=\"node20\" class=\"node\">\n",
"<title>21</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"691.65,-271.02 661.49,-253.02 691.65,-235.02 721.82,-253.02 691.65,-271.02\"/>\n",
"<text text-anchor=\"middle\" x=\"691.65\" y=\"-249.32\" font-family=\"Lato\" font-size=\"14.00\">21</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;21 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>6&#45;&gt;21</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M605.99,-318.45C623.21,-305.14 652.86,-282.23 672.11,-267.35\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"677.72,-263.01 674.11,-269.79 674.95,-265.15 672.18,-267.29 672.18,-267.29 672.18,-267.29 674.95,-265.15 670.26,-264.8 677.72,-263.01 677.72,-263.01\"/>\n",
"<text text-anchor=\"start\" x=\"627.32\" y=\"-303.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"M710.41,-310.17C736.09,-300.43 785.21,-282.37 827.99,-270.02 877.02,-255.85 935.48,-243.3 967.58,-236.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"974.77,-235.32 968.53,-239.79 971.34,-236.01 967.91,-236.71 967.91,-236.71 967.91,-236.71 971.34,-236.01 967.29,-233.62 974.77,-235.32 974.77,-235.32\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-273.82\" 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=\"791.99\" cy=\"-317.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"791.99\" y=\"-313.32\" 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=\"M721.89,-317.02C736.13,-317.02 753.04,-317.02 766.57,-317.02\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"773.71,-317.02 766.71,-320.17 770.21,-317.52 766.71,-317.52 766.71,-317.02 766.71,-316.52 770.21,-316.52 766.71,-313.87 773.71,-317.02 773.71,-317.02\"/>\n",
"<text text-anchor=\"start\" x=\"739.99\" y=\"-320.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</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=\"M711.66,-246.85C737.61,-238.79 785.73,-225.1 827.99,-220.02 877.48,-214.07 935.77,-221.86 967.72,-227.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"974.87,-228.66 967.43,-230.53 971.43,-228.05 967.98,-227.43 967.98,-227.43 967.98,-227.43 971.43,-228.05 968.54,-224.33 974.87,-228.66 974.87,-228.66\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-223.82\" 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=\"M666.5,-256.04C653.82,-258.61 638.6,-263.34 627.32,-272.02 616.01,-280.72 607.5,-294.2 601.7,-305.87\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"598.6,-312.48 598.72,-304.8 599.63,-309.1 601.12,-305.93 601.57,-306.14 602.02,-306.35 600.53,-309.52 604.42,-307.48 598.6,-312.48 598.6,-312.48\"/>\n",
"<text text-anchor=\"start\" x=\"627.32\" y=\"-275.82\" 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=\"M793.07,-335.08C793.65,-390.6 797.9,-557.65 827.99,-601.02 846.08,-627.1 859.58,-634.02 891.32,-634.02 891.32,-634.02 891.32,-634.02 1197.76,-634.02 1254.92,-634.02 1283.46,-556.56 1294.26,-517.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1296.07,-510.42 1297.33,-518 1295.18,-513.81 1294.28,-517.19 1294.28,-517.19 1294.28,-517.19 1295.18,-513.81 1291.24,-516.39 1296.07,-510.42 1296.07,-510.42\"/>\n",
"<text text-anchor=\"start\" x=\"1028.65\" y=\"-637.82\" 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=\"M794.17,-335.28C796.74,-364.78 804.61,-424.06 827.99,-468.02 834.15,-479.6 858.04,-503.91 874.64,-520.1\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"879.96,-525.25 872.74,-522.64 877.45,-522.81 874.93,-520.38 874.93,-520.38 874.93,-520.38 877.45,-522.81 877.12,-518.12 879.96,-525.25 879.96,-525.25\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-490.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 22 -->\n",
"<g id=\"node22\" class=\"node\">\n",
"<title>22</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"892.32,-321.02 862.15,-303.02 892.32,-285.02 922.48,-303.02 892.32,-321.02\"/>\n",
"<text text-anchor=\"middle\" x=\"892.32\" y=\"-299.32\" font-family=\"Lato\" font-size=\"14.00\">22</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;22 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>7&#45;&gt;22</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M810.01,-315.23C819.94,-314.14 832.69,-312.64 843.99,-311.02 849.67,-310.2 855.72,-309.25 861.54,-308.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"868.72,-307.08 862.34,-311.35 865.27,-307.66 861.82,-308.24 861.82,-308.24 861.82,-308.24 865.27,-307.66 861.3,-305.13 868.72,-307.08 868.72,-307.08\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-316.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 23 -->\n",
"<g id=\"node23\" class=\"node\">\n",
"<title>23</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"446.33,-439.02 416.16,-421.02 446.33,-403.02 476.49,-421.02 446.33,-439.02\"/>\n",
"<text text-anchor=\"middle\" x=\"446.33\" y=\"-417.32\" font-family=\"Lato\" font-size=\"14.00\">23</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;23 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>7&#45;&gt;23</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M786.05,-334.18C780.96,-348.59 771.53,-368.47 755.99,-379.02 669.5,-437.68 537.72,-431.72 478.29,-425.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"471.08,-424.44 478.39,-422.1 474.55,-424.83 478.03,-425.23 478.03,-425.23 478.03,-425.23 474.55,-424.83 477.67,-428.36 471.08,-424.44 471.08,-424.44\"/>\n",
"<text text-anchor=\"start\" x=\"627.32\" y=\"-426.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"M911.27,-296.08C924.54,-290.46 942.67,-281.73 956.65,-271.02 963.87,-265.49 970.79,-258.33 976.55,-251.65\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"981.08,-246.21 979.02,-253.6 978.84,-248.9 976.6,-251.58 976.6,-251.58 976.6,-251.58 978.84,-248.9 974.18,-249.57 981.08,-246.21 981.08,-246.21\"/>\n",
"<text text-anchor=\"start\" x=\"940.65\" y=\"-283.82\" 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=\"M874.35,-295.73C861.42,-291.21 843.29,-287.11 827.99,-292.02 822.06,-293.92 816.28,-297.23 811.18,-300.84\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"805.54,-305.14 809.2,-298.39 808.02,-302.62 810.8,-300.5 811.11,-300.89 811.41,-301.29 808.63,-303.41 813.02,-303.4 805.54,-305.14 805.54,-305.14\"/>\n",
"<text text-anchor=\"start\" x=\"827.99\" y=\"-295.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 23&#45;&gt;4 -->\n",
"<g id=\"edge49\" class=\"edge\">\n",
"<title>23&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M466.36,-414.7C513.4,-399.67 639.15,-363.02 746.99,-363.02 746.99,-363.02 746.99,-363.02 893.32,-363.02 945.97,-363.02 973.9,-294.49 985.32,-256.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"987.39,-249.41 988.47,-257.01 986.42,-252.78 985.45,-256.14 985.45,-256.14 985.45,-256.14 986.42,-252.78 982.42,-255.26 987.39,-249.41 987.39,-249.41\"/>\n",
"<text text-anchor=\"start\" x=\"739.99\" y=\"-366.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 23&#45;&gt;6 -->\n",
"<g id=\"edge50\" class=\"edge\">\n",
"<title>23&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M454.22,-407.69C462.16,-393.62 476.47,-371.77 494.66,-359.02 506.33,-350.84 542.24,-340.84 566.59,-334.7\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"573.43,-333 567.39,-337.75 570.15,-334.33 566.75,-335.18 566.63,-334.69 566.51,-334.21 569.91,-333.36 565.87,-331.63 573.43,-333 573.43,-333\"/>\n",
"<text text-anchor=\"start\" x=\"516.99\" y=\"-362.82\" 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=\"301.33\" cy=\"-498.02\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"301.33\" y=\"-494.32\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;13 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>8&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M319.42,-501.38C346.16,-506.33 399.57,-515.02 445.33,-515.02 445.33,-515.02 445.33,-515.02 748.99,-515.02 789.05,-515.02 834.79,-523.26 863.36,-529.42\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"870.24,-530.93 862.73,-532.51 866.82,-530.18 863.4,-529.43 863.4,-529.43 863.4,-529.43 866.82,-530.18 864.08,-526.35 870.24,-530.93 870.24,-530.93\"/>\n",
"<text text-anchor=\"start\" x=\"627.32\" y=\"-518.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;17 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>8&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M313.61,-511.32C319.9,-517.79 328.27,-525.02 337.33,-529.02 447.09,-577.51 594.03,-574.25 658.29,-569.89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"665.34,-569.38 658.58,-573.03 661.85,-569.63 658.36,-569.88 658.36,-569.88 658.36,-569.88 661.85,-569.63 658.13,-566.74 665.34,-569.38 665.34,-569.38\"/>\n",
"<text text-anchor=\"start\" x=\"516.99\" y=\"-574.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;23 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>8&#45;&gt;23</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M318.17,-490.88C337.37,-482.08 370.55,-466.4 397.99,-451.02 407.19,-445.86 417.08,-439.7 425.44,-434.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"431.48,-430.35 427.34,-436.81 428.55,-432.26 425.62,-434.18 425.62,-434.18 425.62,-434.18 428.55,-432.26 423.9,-431.54 431.48,-430.35 431.48,-430.35\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-484.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 24 -->\n",
"<g id=\"node25\" class=\"node\">\n",
"<title>24</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"446.33,-289.02 416.16,-271.02 446.33,-253.02 476.49,-271.02 446.33,-289.02\"/>\n",
"<text text-anchor=\"middle\" x=\"446.33\" y=\"-267.32\" font-family=\"Lato\" font-size=\"14.00\">24</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;24 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>8&#45;&gt;24</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M304.08,-480.05C308.16,-441.42 319.32,-351.99 337.33,-328.02 357.11,-301.68 392.67,-286.31 417.56,-278.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"424.28,-276.24 418.51,-281.31 420.93,-277.27 417.59,-278.3 417.59,-278.3 417.59,-278.3 420.93,-277.27 416.66,-275.28 424.28,-276.24 424.28,-276.24\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-331.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 24&#45;&gt;5 -->\n",
"<g id=\"edge51\" class=\"edge\">\n",
"<title>24&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M454.69,-257.61C473.07,-226.1 524.3,-150.02 590.32,-150.02 590.32,-150.02 590.32,-150.02 893.32,-150.02 920.78,-150.02 950.53,-138.59 970.03,-129.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"976.48,-126.26 971.56,-132.15 973.33,-127.79 970.19,-129.32 970.19,-129.32 970.19,-129.32 973.33,-127.79 968.81,-126.49 976.48,-126.26 976.48,-126.26\"/>\n",
"<text text-anchor=\"start\" x=\"739.99\" y=\"-153.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 24&#45;&gt;8 -->\n",
"<g id=\"edge52\" class=\"edge\">\n",
"<title>24&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M433.02,-281.39C426.98,-287.15 420.12,-294.8 415.99,-303.02 396.9,-341.03 422.65,-362.36 397.99,-397.02 379.95,-422.38 358.94,-409.62 337.33,-432.02 333.92,-435.55 322.3,-457.99 313.38,-475.74\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"310.23,-482.02 310.55,-474.35 311.35,-478.67 312.92,-475.54 313.36,-475.76 313.81,-475.99 312.24,-479.12 316.18,-477.17 310.23,-482.02 310.23,-482.02\"/>\n",
"<text text-anchor=\"start\" x=\"359.66\" y=\"-435.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 25&#45;&gt;8 -->\n",
"<g id=\"edge53\" class=\"edge\">\n",
"<title>25&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M184.57,-503.69C210.97,-502.39 250.65,-500.45 276.02,-499.21\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"283.08,-498.86 276.25,-502.35 279.61,-499.53 276.12,-499.7 276.09,-499.2 276.07,-498.71 279.56,-498.53 275.94,-496.06 283.08,-498.86 283.08,-498.86\"/>\n",
"<text text-anchor=\"start\" x=\"227\" y=\"-505.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 26&#45;&gt;3 -->\n",
"<g id=\"edge54\" class=\"edge\">\n",
"<title>26&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M259.54,-632.49C285.66,-636.03 329.07,-641.02 366.66,-641.02 366.66,-641.02 366.66,-641.02 692.65,-641.02 720.75,-641.02 750.75,-627.9 770.13,-617.5\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"776.27,-614.1 771.67,-620.25 773.45,-616.23 770.39,-617.93 770.15,-617.49 769.91,-617.05 772.97,-615.36 768.62,-614.74 776.27,-614.1 776.27,-614.1\"/>\n",
"<text text-anchor=\"start\" x=\"516.99\" y=\"-644.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 27&#45;&gt;6 -->\n",
"<g id=\"edge55\" class=\"edge\">\n",
"<title>27&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M388.56,-364.22C413.24,-357.25 456.71,-345.64 494.66,-339.02 518.87,-334.79 546.87,-332.12 566.29,-330.61\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"573.29,-330.09 566.54,-333.75 569.84,-330.85 566.35,-331.11 566.31,-330.61 566.27,-330.11 569.76,-329.85 566.07,-327.47 573.29,-330.09 573.29,-330.09\"/>\n",
"<text text-anchor=\"start\" x=\"438.33\" y=\"-359.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 28&#45;&gt;0 -->\n",
"<g id=\"edge56\" class=\"edge\">\n",
"<title>28&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M555.42,-679.02C577.2,-679.02 607.62,-679.02 634.32,-679.02 634.32,-679.02 634.32,-679.02 893.32,-679.02 942.93,-679.02 971.91,-617 984.36,-581.76\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"986.64,-575.1 987.36,-582.74 985.98,-578.57 984.85,-581.88 984.38,-581.72 983.9,-581.56 985.03,-578.25 981.4,-580.71 986.64,-575.1 986.64,-575.1\"/>\n",
"<text text-anchor=\"start\" x=\"739.99\" y=\"-682.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 15&#45;&gt;14 -->\n",
"<g id=\"edge37\" class=\"edge\">\n",
"<title>15&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M1175.31,-118.02C1162.45,-118.02 1145.49,-118.02 1130.39,-118.02\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"1123.15,-118.02 1130.15,-114.87 1126.65,-117.52 1130.15,-117.52 1130.15,-118.02 1130.15,-118.52 1126.65,-118.52 1130.15,-121.17 1123.15,-118.02 1123.15,-118.02\"/>\n",
"<text text-anchor=\"start\" x=\"1141.32\" y=\"-121.82\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</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=\"291pt\"\n",
" viewBox=\"0.00 0.00 729.00 291.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.8264462809917356 0.8264462809917356) rotate(0) translate(4 349.47)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-349.47 881.5,-349.47 881.5,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"435.75\" y=\"-330.27\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"427.75\" y=\"-315.27\" 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=\"-208.47\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-204.77\" 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,-208.47C2.79,-208.47 17.15,-208.47 30.63,-208.47\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-208.47 30.94,-211.62 34.44,-208.47 30.94,-208.47 30.94,-208.47 30.94,-208.47 34.44,-208.47 30.94,-205.32 37.94,-208.47 37.94,-208.47\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"180\" cy=\"-143.47\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"180\" y=\"-139.77\" 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=\"M72.45,-200.23C93.9,-188.8 132.81,-168.07 157.21,-155.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"163.67,-151.63 158.98,-157.7 160.59,-153.28 157.5,-154.92 157.5,-154.92 157.5,-154.92 160.59,-153.28 156.01,-152.14 163.67,-151.63 163.67,-151.63\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-192.27\" 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=\"-205.47\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"340\" y=\"-201.77\" 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.05,-211.08C114.08,-216.77 217.14,-228.81 302,-216.47 306.53,-215.81 311.27,-214.72 315.79,-213.47\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"322.65,-211.43 316.84,-216.45 319.3,-212.43 315.94,-213.43 315.94,-213.43 315.94,-213.43 319.3,-212.43 315.04,-210.41 322.65,-211.43 322.65,-211.43\"/>\n",
"<text text-anchor=\"start\" x=\"158\" y=\"-225.27\" 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=\"-78.47\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"340\" y=\"-74.77\" 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=\"M65.85,-193.3C81.09,-168.83 114.85,-121.36 158,-101.47 209.96,-77.5 278.72,-75.91 314.69,-77.04\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"321.86,-77.32 314.74,-80.2 318.36,-77.18 314.86,-77.05 314.86,-77.05 314.86,-77.05 318.36,-77.18 314.98,-73.9 321.86,-77.32 321.86,-77.32\"/>\n",
"<text text-anchor=\"start\" x=\"158\" y=\"-105.27\" 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=\"707\" cy=\"-116.47\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"707\" y=\"-112.77\" 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=\"M67.71,-222.71C87.06,-246.68 130.4,-292.47 179,-292.47 179,-292.47 179,-292.47 516,-292.47 605.54,-292.47 670.74,-185.97 695.29,-138.66\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"698.49,-132.39 698.11,-140.06 696.9,-135.51 695.31,-138.63 695.31,-138.63 695.31,-138.63 696.9,-135.51 692.5,-137.2 698.49,-132.39 698.49,-132.39\"/>\n",
"<text text-anchor=\"start\" x=\"320\" y=\"-296.27\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M169.29,-158.26C165.81,-168.88 169.38,-179.47 180,-179.47 188.13,-179.47 192.13,-173.26 192,-165.59\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"190.71,-158.26 195.02,-164.61 191.31,-161.7 191.92,-165.15 191.92,-165.15 191.92,-165.15 191.31,-161.7 188.82,-165.7 190.71,-158.26 190.71,-158.26\"/>\n",
"<text text-anchor=\"start\" x=\"137.5\" y=\"-183.27\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M193.84,-155.42C201.06,-161.59 210.5,-168.77 220,-173.47 250.94,-188.76 290.13,-197.49 314.9,-201.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"322.1,-203.06 314.67,-205 318.65,-202.48 315.19,-201.9 315.19,-201.9 315.19,-201.9 318.65,-202.48 315.72,-198.79 322.1,-203.06 322.1,-203.06\"/>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-202.27\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M197.62,-137.93C228.46,-127.61 292.32,-106.09 302,-101.47 307.59,-98.8 313.4,-95.48 318.7,-92.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"324.66,-88.42 320.44,-94.83 321.71,-90.3 318.75,-92.17 318.75,-92.17 318.75,-92.17 321.71,-90.3 317.06,-89.51 324.66,-88.42 324.66,-88.42\"/>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-133.27\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M198.08,-144.53C204.89,-144.91 212.82,-145.28 220,-145.47 256.43,-146.4 265.56,-146.25 302,-145.47 455.89,-142.13 495.59,-151.96 648,-130.47 659.5,-128.84 672.05,-125.96 682.53,-123.22\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"689.41,-121.37 683.47,-126.23 686.03,-122.28 682.65,-123.19 682.65,-123.19 682.65,-123.19 686.03,-122.28 681.84,-120.15 689.41,-121.37 689.41,-121.37\"/>\n",
"<text text-anchor=\"start\" x=\"380\" y=\"-149.27\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.61,-218.76C322.31,-229.86 326.44,-241.47 340,-241.47 350.8,-241.47 355.62,-234.1 354.45,-225.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"352.39,-218.76 357.46,-224.53 353.42,-222.1 354.44,-225.45 354.44,-225.45 354.44,-225.45 353.42,-222.1 351.43,-226.37 352.39,-218.76 352.39,-218.76\"/>\n",
"<text text-anchor=\"start\" x=\"313.5\" y=\"-245.27\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M358,-207.45C406.18,-212.32 546.68,-221.2 648,-173.47 665.5,-165.22 680.88,-149.47 691.4,-136.62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"695.88,-130.95 694.01,-138.39 693.71,-133.7 691.54,-136.44 691.54,-136.44 691.54,-136.44 693.71,-133.7 689.07,-134.49 695.88,-130.95 695.88,-130.95\"/>\n",
"<text text-anchor=\"start\" x=\"490.5\" y=\"-213.27\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.61,-91.76C322.31,-102.86 326.44,-114.47 340,-114.47 350.8,-114.47 355.62,-107.1 354.45,-98.49\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"352.39,-91.76 357.46,-97.53 353.42,-95.1 354.44,-98.45 354.44,-98.45 354.44,-98.45 353.42,-95.1 351.43,-99.37 352.39,-91.76 352.39,-91.76\"/>\n",
"<text text-anchor=\"start\" x=\"301\" y=\"-118.27\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M356.9,-85.64C363.33,-88.23 370.89,-90.9 378,-92.47 489.29,-117.05 626.44,-117.89 681.47,-117.06\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"688.68,-116.94 681.73,-120.21 685.18,-117 681.68,-117.06 681.68,-117.06 681.68,-117.06 685.18,-117 681.62,-113.91 688.68,-116.94 688.68,-116.94\"/>\n",
"<text text-anchor=\"start\" x=\"478\" y=\"-118.27\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; 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=\"-47.47\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"851\" y=\"-43.77\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;5 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>3&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M347.24,-61.73C353.11,-48.4 363.22,-30.37 378,-20.47 415.51,4.68 433.02,-6.48 478,-2.47 610.04,9.32 767.59,-26.17 826.36,-41.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"833.35,-42.94 825.79,-44.25 829.97,-42.07 826.58,-41.2 826.58,-41.2 826.58,-41.2 829.97,-42.07 827.36,-38.15 833.35,-42.94 833.35,-42.94\"/>\n",
"<text text-anchor=\"start\" x=\"570\" y=\"-11.27\" 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=\"-29.47\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"515\" y=\"-25.77\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M350.41,-63.59C356.96,-54.63 366.56,-43.92 378,-38.47 414.07,-21.25 461.75,-22.84 490.01,-25.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"497.1,-26.75 489.78,-29.05 493.63,-26.34 490.15,-25.92 490.15,-25.92 490.15,-25.92 493.63,-26.34 490.53,-22.79 497.1,-26.75 497.1,-26.75\"/>\n",
"<text text-anchor=\"start\" x=\"378\" y=\"-42.27\" 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=\"M694.16,-129.38C688.31,-140.6 692.59,-152.47 707,-152.47 718.49,-152.47 723.54,-144.93 722.15,-136.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"719.84,-129.38 725.07,-135 720.96,-132.7 722.09,-136.01 722.09,-136.01 722.09,-136.01 720.96,-132.7 719.11,-137.03 719.84,-129.38 719.84,-129.38\"/>\n",
"<text text-anchor=\"start\" x=\"684\" y=\"-156.27\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;5 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>4&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M725.27,-115.88C747.6,-114.39 786.95,-109.21 815,-91.47 823.81,-85.89 831.36,-77.31 837.17,-69.21\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"841.26,-63.15 839.95,-70.72 839.3,-66.05 837.34,-68.95 837.34,-68.95 837.34,-68.95 839.3,-66.05 834.73,-67.19 841.26,-63.15 841.26,-63.15\"/>\n",
"<text text-anchor=\"start\" x=\"766\" y=\"-114.27\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;4 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>5&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M833.23,-50.59C815.78,-54.27 787.99,-61.32 766,-72.47 751.6,-79.76 737.13,-90.73 726.25,-99.89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"720.9,-104.49 724.15,-97.54 723.55,-102.21 726.21,-99.93 726.21,-99.93 726.21,-99.93 723.55,-102.21 728.26,-102.32 720.9,-104.49 720.9,-104.49\"/>\n",
"<text text-anchor=\"start\" x=\"766\" y=\"-76.27\" font-family=\"Lato\" font-size=\"14.00\">i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>5&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M840.85,-62.63C837.77,-73.13 841.16,-83.47 851,-83.47 858.54,-83.47 862.29,-77.41 862.25,-69.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"861.15,-62.63 865.32,-69.08 861.68,-66.09 862.2,-69.55 862.2,-69.55 862.2,-69.55 861.68,-66.09 859.09,-70.03 861.15,-62.63 861.15,-62.63\"/>\n",
"<text text-anchor=\"start\" x=\"824.5\" y=\"-87.27\" font-family=\"Lato\" font-size=\"14.00\">!i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;3 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>6&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M498.74,-37.29C488.11,-42.48 473.47,-49.11 460,-53.47 427.78,-63.88 389.22,-71.06 364.91,-74.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"357.85,-76.08 364.27,-71.88 361.3,-75.53 364.76,-74.99 364.76,-74.99 364.76,-74.99 361.3,-75.53 365.25,-78.1 357.85,-76.08 357.85,-76.08\"/>\n",
"<text text-anchor=\"start\" x=\"378\" y=\"-77.27\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;4 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>6&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M531.96,-36.18C556.9,-46.73 606.53,-68 648,-87.47 659.98,-93.09 673.2,-99.67 683.98,-105.13\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"690.35,-108.38 682.68,-108.01 687.23,-106.79 684.11,-105.2 684.11,-105.2 684.11,-105.2 687.23,-106.79 685.54,-102.39 690.35,-108.38 690.35,-108.38\"/>\n",
"<text text-anchor=\"start\" x=\"570\" y=\"-91.27\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;5 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>6&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M533.02,-30.38C588.08,-33.35 761.48,-42.69 825.73,-46.16\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"833.01,-46.55 825.85,-49.32 829.52,-46.36 826.02,-46.17 826.02,-46.17 826.02,-46.17 829.52,-46.36 826.19,-43.03 833.01,-46.55 833.01,-46.55\"/>\n",
"<text text-anchor=\"start\" x=\"666\" y=\"-46.27\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M500.99,-41.26C493.26,-52.8 497.93,-65.47 515,-65.47 528.87,-65.47 534.56,-57.1 532.05,-47.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"529.01,-41.26 534.82,-46.27 530.49,-44.44 531.97,-47.61 531.97,-47.61 531.97,-47.61 530.49,-44.44 529.11,-48.94 529.01,-41.26 529.01,-41.26\"/>\n",
"<text text-anchor=\"start\" x=\"472.5\" y=\"-69.27\" 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=\"385pt\" height=\"216pt\"\n",
" viewBox=\"0.00 0.00 385.00 216.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 212.5)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-212.5 381,-212.5 381,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"185.5\" y=\"-193.3\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"177.5\" y=\"-178.3\" 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=\"-31.5\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-27.8\" 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,-31.5C2.79,-31.5 17.15,-31.5 30.63,-31.5\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-31.5 30.94,-34.65 34.44,-31.5 30.94,-31.5 30.94,-31.5 30.94,-31.5 34.44,-31.5 30.94,-28.35 37.94,-31.5 37.94,-31.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"180\" cy=\"-86.5\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"180\" y=\"-82.8\" 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=\"M68.39,-45.13C74.7,-51.87 83.07,-59.6 92,-64.5 111.6,-75.25 136.56,-80.86 154.72,-83.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"162.05,-84.78 154.67,-86.89 158.58,-84.28 155.12,-83.77 155.12,-83.77 155.12,-83.77 158.58,-84.28 155.57,-80.66 162.05,-84.78 162.05,-84.78\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-84.3\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</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.22,-31.29C91.75,-31.76 119.23,-34.45 140,-45.5 149.4,-50.5 157.83,-58.61 164.43,-66.31\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"169.1,-72.05 162.24,-68.61 166.89,-69.34 164.68,-66.62 164.68,-66.62 164.68,-66.62 166.89,-69.34 167.13,-64.63 169.1,-72.05 169.1,-72.05\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-49.3\" 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=\"338\" cy=\"-67.5\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"338\" y=\"-63.8\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.77,-28.56C114.49,-22.15 221.21,-9.86 302,-40.5 308.09,-42.81 313.98,-46.55 319.14,-50.52\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"324.83,-55.22 317.43,-53.19 322.14,-52.99 319.44,-50.76 319.44,-50.76 319.44,-50.76 322.14,-52.99 321.44,-48.33 324.83,-55.22 324.83,-55.22\"/>\n",
"<text text-anchor=\"start\" x=\"158\" y=\"-24.3\" 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=\"M72.86,-24.6C78.79,-22.16 85.64,-19.53 92,-17.5 139.06,-2.47 152.77,2.66 202,-1.5 246.92,-5.29 263.79,5.43 302,-18.5 312.18,-24.87 320.27,-35.39 326.09,-45.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"329.59,-51.22 323.4,-46.68 327.87,-48.17 326.14,-45.13 326.14,-45.13 326.14,-45.13 327.87,-48.17 328.88,-43.57 329.59,-51.22 329.59,-51.22\"/>\n",
"<text text-anchor=\"start\" x=\"160\" y=\"-5.3\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M174.29,-103.91C173.22,-113.59 175.12,-122.5 180,-122.5 183.58,-122.5 185.56,-117.69 185.93,-111.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"185.71,-103.91 189.07,-110.81 185.82,-107.41 185.92,-110.9 185.92,-110.9 185.92,-110.9 185.82,-107.41 182.77,-111 185.71,-103.91 185.71,-103.91\"/>\n",
"<text text-anchor=\"start\" x=\"139\" y=\"-126.3\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M171.09,-102.25C164.97,-120.04 167.94,-140.5 180,-140.5 190.55,-140.5 194.15,-124.83 190.78,-109\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"188.91,-102.25 193.81,-108.16 189.84,-105.62 190.78,-109 190.78,-109 190.78,-109 189.84,-105.62 187.74,-109.84 188.91,-102.25 188.91,-102.25\"/>\n",
"<text text-anchor=\"start\" x=\"137.5\" y=\"-144.3\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M187.7,-102.8C193.96,-115.65 204.66,-132.65 220,-140.5 252.45,-157.09 271.16,-159.91 302,-140.5 318.76,-129.95 327.67,-108.9 332.3,-92.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"334.03,-85.21 335.38,-92.77 333.18,-88.61 332.32,-92 332.32,-92 332.32,-92 333.18,-88.61 329.27,-91.24 334.03,-85.21 334.03,-85.21\"/>\n",
"<text text-anchor=\"start\" x=\"222\" y=\"-157.3\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; 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.5,-94.48C203.49,-97.65 211.96,-100.91 220,-102.5 255.76,-109.55 268.33,-116.44 302,-102.5 309.78,-99.27 316.73,-93.39 322.35,-87.35\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"327.12,-81.84 324.92,-89.2 324.83,-84.49 322.54,-87.13 322.54,-87.13 322.54,-87.13 324.83,-84.49 320.16,-85.07 327.12,-81.84 327.12,-81.84\"/>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-114.3\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M320.03,-69.56C292.26,-72.95 237.03,-79.67 205.18,-83.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"197.99,-84.43 204.56,-80.45 201.47,-84 204.94,-83.58 204.94,-83.58 204.94,-83.58 201.47,-84 205.32,-86.71 197.99,-84.43 197.99,-84.43\"/>\n",
"<text text-anchor=\"start\" x=\"222\" y=\"-84.3\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M321.76,-59.37C315.77,-56.61 308.73,-53.88 302,-52.5 266.3,-45.17 254.13,-39.71 220,-52.5 211.46,-55.7 203.55,-61.71 197.13,-67.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"192.1,-72.87 194.79,-65.69 194.56,-70.39 197.03,-67.9 197.03,-67.9 197.03,-67.9 194.56,-70.39 199.26,-70.12 192.1,-72.87 192.1,-72.87\"/>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-56.3\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M331.27,-84.53C329.89,-94.36 332.14,-103.5 338,-103.5 342.4,-103.5 344.76,-98.36 345.09,-91.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"344.73,-84.53 348.23,-91.37 344.91,-88.03 345.08,-91.53 345.08,-91.53 345.08,-91.53 344.91,-88.03 341.93,-91.68 344.73,-84.53 344.73,-84.53\"/>\n",
"<text text-anchor=\"start\" x=\"301\" y=\"-107.3\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.77,-82.42C320.04,-100.39 323.45,-121.5 338,-121.5 350.73,-121.5 354.93,-105.34 350.6,-89.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"348.23,-82.42 353.5,-88 349.38,-85.73 350.53,-89.04 350.53,-89.04 350.53,-89.04 349.38,-85.73 347.55,-90.07 348.23,-82.42 348.23,-82.42\"/>\n",
"<text text-anchor=\"start\" x=\"299\" y=\"-125.3\" 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 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=\"261pt\" height=\"186pt\"\n",
" viewBox=\"0.00 0.00 260.50 185.87\" 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 181.87)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-181.87 256.5,-181.87 256.5,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"123.25\" y=\"-162.67\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"115.25\" y=\"-147.67\" 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=\"-55.87\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-52.17\" 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,-55.87C2.79,-55.87 17.15,-55.87 30.63,-55.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-55.87 30.94,-59.02 34.44,-55.87 30.94,-55.87 30.94,-55.87 30.94,-55.87 34.44,-55.87 30.94,-52.72 37.94,-55.87 37.94,-55.87\"/>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M52.76,-73.66C52.21,-83.19 53.29,-91.87 56,-91.87 57.99,-91.87 59.1,-87.19 59.33,-80.93\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"59.24,-73.66 62.48,-80.62 59.28,-77.16 59.33,-80.66 59.33,-80.66 59.33,-80.66 59.28,-77.16 56.18,-80.7 59.24,-73.66 59.24,-73.66\"/>\n",
"<text text-anchor=\"start\" x=\"19\" y=\"-95.67\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M50.68,-73.29C47.65,-90.67 49.43,-109.87 56,-109.87 61.7,-109.87 63.79,-95.43 62.27,-80.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"61.32,-73.29 65.39,-79.8 61.79,-76.76 62.26,-80.23 62.26,-80.23 62.26,-80.23 61.79,-76.76 59.14,-80.66 61.32,-73.29 61.32,-73.29\"/>\n",
"<text text-anchor=\"start\" x=\"17\" y=\"-113.67\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; 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=\"210\" cy=\"-55.87\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"210\" y=\"-52.17\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M66.88,-70.22C73.09,-77.92 81.84,-86.67 92,-90.87 125.67,-104.82 140.33,-104.82 174,-90.87 181.78,-87.65 188.73,-81.77 194.35,-75.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"199.12,-70.22 196.92,-77.57 196.83,-72.86 194.54,-75.51 194.54,-75.51 194.54,-75.51 196.83,-72.86 192.16,-73.45 199.12,-70.22 199.12,-70.22\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-104.67\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; o0</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.14,-55.87C101.05,-55.87 153.34,-55.87 184.3,-55.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"191.69,-55.87 184.69,-59.02 188.19,-55.87 184.69,-55.87 184.69,-55.87 184.69,-55.87 188.19,-55.87 184.69,-52.72 191.69,-55.87 191.69,-55.87\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-59.67\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1 &amp; o0</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=\"M194.28,-46.33C188.25,-42.96 181.04,-39.58 174,-37.87 138.58,-29.3 127.42,-29.3 92,-37.87 87.27,-39.02 82.46,-40.92 77.99,-43.07\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"71.72,-46.33 76.47,-40.31 74.82,-44.72 77.93,-43.1 77.93,-43.1 77.93,-43.1 74.82,-44.72 79.38,-45.89 71.72,-46.33 71.72,-46.33\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-41.67\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; 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=\"M201.02,-39.74C195.09,-29.7 185.96,-17.64 174,-11.87 141.17,3.96 124.83,3.96 92,-11.87 82.47,-16.47 74.74,-25.06 68.99,-33.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"64.98,-39.74 66.08,-32.14 66.86,-36.78 68.74,-33.83 68.74,-33.83 68.74,-33.83 66.86,-36.78 71.4,-35.52 64.98,-39.74 64.98,-39.74\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-15.67\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M203.27,-72.91C201.89,-82.73 204.14,-91.87 210,-91.87 214.4,-91.87 216.76,-86.73 217.09,-80.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"216.73,-72.91 220.23,-79.75 216.91,-76.41 217.08,-79.9 217.08,-79.9 217.08,-79.9 216.91,-76.41 213.93,-80.06 216.73,-72.91 216.73,-72.91\"/>\n",
"<text text-anchor=\"start\" x=\"169\" y=\"-95.67\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1 &amp; !o0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M199.77,-70.8C192.04,-88.77 195.45,-109.87 210,-109.87 222.73,-109.87 226.93,-93.72 222.6,-77.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"220.23,-70.8 225.5,-76.38 221.38,-74.11 222.53,-77.41 222.53,-77.41 222.53,-77.41 221.38,-74.11 219.55,-78.45 220.23,-70.8 220.23,-70.8\"/>\n",
"<text text-anchor=\"start\" x=\"167.5\" y=\"-113.67\" 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 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=\"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=\"edge4\" 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=\"edge5\" 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 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=\"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=\"edge4\" 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=\"edge5\" 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 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=\"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=\"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=\"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=\"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=\"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"
}
],
"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": "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=\"729pt\" height=\"240pt\"\n",
" viewBox=\"0.00 0.00 729.00 240.19\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.5235602094240838 0.5235602094240838) rotate(0) translate(4 455)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-455 1389.13,-455 1389.13,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"689.57\" y=\"-435.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"681.57\" y=\"-420.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=\"-234\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-230.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,-234C2.79,-234 17.15,-234 30.63,-234\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-234 30.94,-237.15 34.44,-234 30.94,-234 30.94,-234 30.94,-234 34.44,-234 30.94,-230.85 37.94,-234 37.94,-234\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>2</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"180.98,-295 158.02,-277 180.98,-259 203.94,-277 180.98,-295\"/>\n",
"<text text-anchor=\"middle\" x=\"180.98\" y=\"-273.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.33,-239.71C95.1,-247.32 133.68,-260.81 157.99,-269.31\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"164.74,-271.67 157.09,-272.34 161.44,-270.52 158.13,-269.36 158.13,-269.36 158.13,-269.36 161.44,-270.52 159.17,-266.39 164.74,-271.67 164.74,-271.67\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-264.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>4</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"244.94,-361 221.98,-343 244.94,-325 267.89,-343 244.94,-361\"/>\n",
"<text text-anchor=\"middle\" x=\"244.94\" y=\"-339.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M65.74,-249.35C71.99,-259.21 81.19,-271.67 92,-280 131.57,-310.5 188.03,-328.74 219.8,-337.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"226.95,-339.08 219.38,-340.37 223.56,-338.2 220.17,-337.32 220.17,-337.32 220.17,-337.32 223.56,-338.2 220.96,-334.28 226.95,-339.08 226.95,-339.08\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-310.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"244.94,-207 221.98,-189 244.94,-171 267.89,-189 244.94,-207\"/>\n",
"<text text-anchor=\"middle\" x=\"244.94\" y=\"-185.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;6 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.59,-230.01C106.76,-222.02 181.39,-204.06 219.92,-194.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"227.12,-193.05 221.05,-197.75 223.71,-193.87 220.31,-194.69 220.31,-194.69 220.31,-194.69 223.71,-193.87 219.57,-191.63 227.12,-193.05 227.12,-193.05\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-228.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"363.92,-86 340.96,-68 363.92,-50 386.87,-68 363.92,-86\"/>\n",
"<text text-anchor=\"middle\" x=\"363.92\" y=\"-64.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;8 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M71.05,-223.8C77.35,-219.38 84.93,-214.26 92,-210 182.87,-155.29 296.87,-99.51 342.58,-77.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"349.07,-74.54 344.11,-80.39 345.91,-76.04 342.75,-77.55 342.75,-77.55 342.75,-77.55 345.91,-76.04 341.4,-74.71 349.07,-74.54 349.07,-74.54\"/>\n",
"<text text-anchor=\"start\" x=\"160.98\" y=\"-175.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"303.92\" cy=\"-302\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"303.92\" y=\"-298.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M199.56,-280.64C220.49,-284.96 255.53,-292.21 278.93,-297.04\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"286.09,-298.52 278.6,-300.19 282.66,-297.81 279.23,-297.1 279.23,-297.1 279.23,-297.1 282.66,-297.81 279.87,-294.02 286.09,-298.52 286.09,-298.52\"/>\n",
"<text text-anchor=\"middle\" x=\"244.94\" y=\"-297.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"541.58\" cy=\"-364\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"541.58\" y=\"-360.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;3 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>4&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M259.1,-350.22C285.8,-364.31 348.65,-394.74 405.92,-402 450.29,-407.62 465.76,-408.37 505.58,-388 510.75,-385.36 516.05,-382.07 520.91,-378.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"526.79,-374.67 522.86,-381.26 523.92,-376.68 521.05,-378.68 521.05,-378.68 521.05,-378.68 523.92,-376.68 519.25,-376.1 526.79,-374.67 526.79,-374.67\"/>\n",
"<text text-anchor=\"middle\" x=\"363.92\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"541.58\" cy=\"-161\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"541.58\" y=\"-157.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;5 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>6&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M265.73,-187.12C317.96,-182.16 459.42,-168.71 516.36,-163.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"523.5,-162.62 516.83,-166.42 520.02,-162.95 516.53,-163.29 516.53,-163.29 516.53,-163.29 520.02,-162.95 516.23,-160.15 523.5,-162.62 523.5,-162.62\"/>\n",
"<text text-anchor=\"middle\" x=\"363.92\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node18\" class=\"node\">\n",
"<title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1019.81\" cy=\"-56\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1019.81\" y=\"-52.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;7 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>8&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M375.91,-59.19C397.32,-42.97 446.64,-10 494.08,-10 494.08,-10 494.08,-10 915.47,-10 946.79,-10 979.2,-27.86 999.18,-41.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1004.96,-45.33 997.42,-43.93 1002.09,-43.34 999.21,-41.34 999.21,-41.34 999.21,-41.34 1002.09,-43.34 1001.01,-38.75 1004.96,-45.33 1004.96,-45.33\"/>\n",
"<text text-anchor=\"middle\" x=\"673.91\" y=\"-13.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>13</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"914.47,-220 884.31,-202 914.47,-184 944.64,-202 914.47,-220\"/>\n",
"<text text-anchor=\"middle\" x=\"914.47\" y=\"-198.3\" font-family=\"Lato\" font-size=\"14.00\">13</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;13 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M321.5,-298.02C354.27,-290.51 429.72,-275 494.08,-275 494.08,-275 494.08,-275 779.69,-275 826.97,-275 873.42,-239.44 897.17,-217.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"902.43,-213.09 899.43,-220.15 899.86,-215.46 897.29,-217.84 897.29,-217.84 897.29,-217.84 899.86,-215.46 895.16,-215.53 902.43,-213.09 902.43,-213.09\"/>\n",
"<text text-anchor=\"start\" x=\"581.58\" y=\"-278.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 18 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>18</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"436.25,-247 406.08,-229 436.25,-211 466.41,-229 436.25,-247\"/>\n",
"<text text-anchor=\"middle\" x=\"436.25\" y=\"-225.3\" font-family=\"Lato\" font-size=\"14.00\">18</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;18 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M310.74,-285.26C316.19,-272.16 325.67,-254.61 339.92,-245 357.68,-233.02 381.44,-229.01 400.8,-228\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"407.98,-227.75 401.09,-231.14 404.48,-227.87 400.98,-227.99 400.98,-227.99 400.98,-227.99 404.48,-227.87 400.87,-224.85 407.98,-227.75 407.98,-227.75\"/>\n",
"<text text-anchor=\"start\" x=\"341.92\" y=\"-248.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 19 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>19</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"436.25,-393 406.08,-375 436.25,-357 466.41,-375 436.25,-393\"/>\n",
"<text text-anchor=\"middle\" x=\"436.25\" y=\"-371.3\" font-family=\"Lato\" font-size=\"14.00\">19</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;19 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>1&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M313.82,-317.44C320.02,-326.94 329.1,-338.65 339.92,-346 359.16,-359.08 384.49,-366.42 404.21,-370.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"411.19,-371.78 403.73,-373.56 407.76,-371.12 404.32,-370.46 404.32,-370.46 404.32,-370.46 407.76,-371.12 404.91,-367.37 411.19,-371.78 411.19,-371.78\"/>\n",
"<text text-anchor=\"start\" x=\"341.92\" y=\"-369.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 20 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>20</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"436.25,-339 406.08,-321 436.25,-303 466.41,-321 436.25,-339\"/>\n",
"<text text-anchor=\"middle\" x=\"436.25\" y=\"-317.3\" font-family=\"Lato\" font-size=\"14.00\">20</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;20 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>1&#45;&gt;20</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M322.2,-302.27C339.07,-302.76 365.42,-304.14 387.92,-308 394.82,-309.19 402.18,-310.95 408.98,-312.8\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"416.1,-314.82 408.5,-315.94 412.73,-313.87 409.36,-312.91 409.36,-312.91 409.36,-312.91 412.73,-313.87 410.22,-309.88 416.1,-314.82 416.1,-314.82\"/>\n",
"<text text-anchor=\"start\" x=\"339.92\" y=\"-311.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;7 -->\n",
"<g id=\"edge27\" class=\"edge\">\n",
"<title>13&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M926.91,-191.39C932.59,-185.87 939.37,-178.85 944.81,-172 969.24,-141.22 992.83,-102.09 1006.57,-78.06\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1010.18,-71.7 1009.47,-79.34 1008.45,-74.74 1006.73,-77.79 1006.73,-77.79 1006.73,-77.79 1008.45,-74.74 1003.99,-76.23 1010.18,-71.7 1010.18,-71.7\"/>\n",
"<text text-anchor=\"start\" x=\"962.81\" y=\"-147.8\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"</g>\n",
"<!-- 18&#45;&gt;5 -->\n",
"<g id=\"edge35\" class=\"edge\">\n",
"<title>18&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M451.18,-219.83C468.96,-208.13 499.83,-187.82 520.23,-174.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"526.2,-170.46 522.09,-176.94 523.28,-172.39 520.35,-174.31 520.35,-174.31 520.35,-174.31 523.28,-172.39 518.62,-171.68 526.2,-170.46 526.2,-170.46\"/>\n",
"<text text-anchor=\"start\" x=\"484.58\" y=\"-200.8\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"</g>\n",
"<!-- 19&#45;&gt;3 -->\n",
"<g id=\"edge36\" class=\"edge\">\n",
"<title>19&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M450.1,-365.21C459.19,-358.93 471.96,-351.35 484.58,-348 493.6,-345.61 496.46,-346.01 505.58,-348 510.04,-348.97 514.6,-350.56 518.91,-352.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"525.4,-355.34 517.72,-355.29 522.21,-353.88 519.03,-352.43 519.03,-352.43 519.03,-352.43 522.21,-353.88 520.34,-349.56 525.4,-355.34 525.4,-355.34\"/>\n",
"<text text-anchor=\"start\" x=\"484.58\" y=\"-351.8\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"</g>\n",
"<!-- 20&#45;&gt;1 -->\n",
"<g id=\"edge37\" class=\"edge\">\n",
"<title>20&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M412.84,-325.05C393.23,-327.75 364.17,-329.72 339.92,-323 334.75,-321.57 329.58,-319.15 324.87,-316.45\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"318.75,-312.67 326.36,-313.68 321.73,-314.51 324.7,-316.35 324.7,-316.35 324.7,-316.35 321.73,-314.51 323.05,-319.03 318.75,-312.67 318.75,-312.67\"/>\n",
"<text text-anchor=\"start\" x=\"353.42\" y=\"-330.8\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;13 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M559.71,-364.68C611.54,-365.86 769.06,-362.82 866.14,-289 887.57,-272.71 900.49,-243.81 907.29,-223.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"909.45,-217.15 910.29,-224.78 908.37,-220.48 907.3,-223.81 907.3,-223.81 907.3,-223.81 908.37,-220.48 904.3,-222.84 909.45,-217.15 909.45,-217.15\"/>\n",
"<text text-anchor=\"start\" x=\"724.74\" y=\"-352.8\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;19 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>3&#45;&gt;19</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M523.46,-365.82C508.8,-367.38 487.27,-369.67 469.4,-371.58\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"462,-372.37 468.63,-368.49 465.48,-371.99 468.96,-371.62 468.96,-371.62 468.96,-371.62 465.48,-371.99 469.29,-374.76 462,-372.37 462,-372.37\"/>\n",
"<text text-anchor=\"start\" x=\"487.08\" y=\"-372.8\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>10</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"1148.14,-142 1117.97,-124 1148.14,-106 1178.3,-124 1148.14,-142\"/>\n",
"<text text-anchor=\"middle\" x=\"1148.14\" y=\"-120.3\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;10 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>5&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M550.28,-144.91C556.19,-134.47 565.41,-121.61 577.58,-115 603.42,-100.95 614.18,-111.11 643.58,-110 820.74,-103.3 1033.07,-115.99 1113.79,-121.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1121.19,-122.08 1113.98,-124.73 1117.7,-121.83 1114.2,-121.59 1114.2,-121.59 1114.2,-121.59 1117.7,-121.83 1114.42,-118.45 1121.19,-122.08 1121.19,-122.08\"/>\n",
"<text text-anchor=\"start\" x=\"820.14\" y=\"-113.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>11</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"1148.14,-36 1117.97,-18 1148.14,0 1178.3,-18 1148.14,-36\"/>\n",
"<text text-anchor=\"middle\" x=\"1148.14\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;11 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>5&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M548.61,-144.13C554.14,-131.15 563.61,-113.81 577.58,-104 666.4,-41.64 947.84,-16.06 1055.81,-5 1075.26,-3.01 1080.42,-2.39 1099.81,-5 1107.03,-5.97 1114.7,-7.75 1121.73,-9.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1128.49,-11.64 1120.89,-12.71 1125.13,-10.66 1121.77,-9.69 1121.77,-9.69 1121.77,-9.69 1125.13,-10.66 1122.64,-6.66 1128.49,-11.64 1128.49,-11.64\"/>\n",
"<text text-anchor=\"start\" x=\"822.14\" y=\"-37.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 15 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>15</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"673.91,-155 643.75,-137 673.91,-119 704.08,-137 673.91,-155\"/>\n",
"<text text-anchor=\"middle\" x=\"673.91\" y=\"-133.3\" font-family=\"Lato\" font-size=\"14.00\">15</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;15 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>5&#45;&gt;15</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M552,-146.24C558.16,-138.02 567.02,-128.55 577.58,-124 600.64,-114.07 629.48,-120.28 649.36,-127.1\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"656,-129.51 648.34,-130.08 652.71,-128.32 649.42,-127.12 649.42,-127.12 649.42,-127.12 652.71,-128.32 650.5,-124.16 656,-129.51 656,-129.51\"/>\n",
"<text text-anchor=\"start\" x=\"577.58\" y=\"-127.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 16 -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>16</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"673.91,-209 643.75,-191 673.91,-173 704.08,-191 673.91,-209\"/>\n",
"<text text-anchor=\"middle\" x=\"673.91\" y=\"-187.3\" font-family=\"Lato\" font-size=\"14.00\">16</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;16 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>5&#45;&gt;16</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M557.9,-169.14C563.89,-172.02 570.92,-175.03 577.58,-177 597.69,-182.94 620.97,-186.42 639.48,-188.43\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"646.59,-189.15 639.3,-191.57 643.11,-188.79 639.62,-188.44 639.62,-188.44 639.62,-188.44 643.11,-188.79 639.94,-185.31 646.59,-189.15 646.59,-189.15\"/>\n",
"<text text-anchor=\"start\" x=\"579.58\" y=\"-189.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node19\" class=\"node\">\n",
"<title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1249.47\" cy=\"-185\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1249.47\" y=\"-181.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;9 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>10&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1164.08,-132.55C1177.2,-140.13 1196.74,-151.57 1213.47,-162 1218.14,-164.91 1223.1,-168.11 1227.78,-171.17\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1233.93,-175.22 1226.35,-174 1231,-173.29 1228.08,-171.37 1228.08,-171.37 1228.08,-171.37 1231,-173.29 1229.81,-168.74 1233.93,-175.22 1233.93,-175.22\"/>\n",
"<text text-anchor=\"start\" x=\"1196.47\" y=\"-165.8\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;7 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>11&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1127.24,-12.4C1108.02,-8.11 1078.57,-4.5 1055.81,-15 1046.73,-19.19 1039.14,-27.01 1033.37,-34.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1029.32,-40.52 1030.74,-32.98 1031.32,-37.65 1033.32,-34.78 1033.32,-34.78 1033.32,-34.78 1031.32,-37.65 1035.91,-36.58 1029.32,-40.52 1029.32,-40.52\"/>\n",
"<text text-anchor=\"start\" x=\"1069.31\" y=\"-18.8\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node21\" class=\"node\">\n",
"<title>14</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"778.69\" cy=\"-210\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"778.69\" y=\"-206.3\" font-family=\"Lato\" font-size=\"14.00\">14</text>\n",
"</g>\n",
"<!-- 15&#45;&gt;14 -->\n",
"<g id=\"edge32\" class=\"edge\">\n",
"<title>15&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M688.35,-146.54C705.58,-158.78 735.69,-180.16 756.14,-194.69\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"761.89,-198.78 754.36,-197.29 759.04,-196.75 756.19,-194.73 756.19,-194.73 756.19,-194.73 759.04,-196.75 758.01,-192.16 761.89,-198.78 761.89,-198.78\"/>\n",
"<text text-anchor=\"start\" x=\"722.24\" y=\"-185.8\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"</g>\n",
"<!-- 16&#45;&gt;5 -->\n",
"<g id=\"edge33\" class=\"edge\">\n",
"<title>16&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M661.56,-180.06C652.6,-172.22 639.34,-162.32 625.58,-158 606.37,-151.97 583.43,-153.41 566.54,-155.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"559.24,-157.19 565.62,-152.92 562.69,-156.61 566.14,-156.03 566.14,-156.03 566.14,-156.03 562.69,-156.61 566.66,-159.14 559.24,-157.19 559.24,-157.19\"/>\n",
"<text text-anchor=\"start\" x=\"593.08\" y=\"-161.8\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;10 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>7&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1036.46,-63.21C1052.56,-70.75 1078.24,-83.1 1099.81,-95 1108.82,-99.97 1118.54,-105.84 1126.82,-110.99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1132.84,-114.77 1125.23,-113.72 1129.87,-112.91 1126.91,-111.05 1126.91,-111.05 1126.91,-111.05 1129.87,-112.91 1128.58,-108.38 1132.84,-114.77 1132.84,-114.77\"/>\n",
"<text text-anchor=\"start\" x=\"1069.81\" y=\"-98.8\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;11 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>7&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1037.53,-51.63C1053.57,-47.36 1078.44,-40.58 1099.81,-34 1107.02,-31.78 1114.79,-29.22 1121.92,-26.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1128.78,-24.46 1123.17,-29.71 1125.47,-25.6 1122.16,-26.73 1122.16,-26.73 1122.16,-26.73 1125.47,-25.6 1121.14,-23.75 1128.78,-24.46 1128.78,-24.46\"/>\n",
"<text text-anchor=\"start\" x=\"1071.81\" y=\"-50.8\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;13 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>9&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1231.43,-185.87C1179.15,-188.54 1020.27,-196.65 949.79,-200.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"942.44,-200.62 949.27,-197.12 945.94,-200.44 949.43,-200.27 949.43,-200.27 949.43,-200.27 945.94,-200.44 949.59,-203.41 942.44,-200.62 942.44,-200.62\"/>\n",
"<text text-anchor=\"start\" x=\"1071.81\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\">i1</text>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node20\" class=\"node\">\n",
"<title>12</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"1354.8,-236 1324.64,-218 1354.8,-200 1384.97,-218 1354.8,-236\"/>\n",
"<text text-anchor=\"middle\" x=\"1354.8\" y=\"-214.3\" font-family=\"Lato\" font-size=\"14.00\">12</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;12 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>9&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1267.07,-190.3C1283.53,-195.56 1308.99,-203.69 1328.07,-209.78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1334.78,-211.93 1327.16,-212.8 1331.45,-210.86 1328.12,-209.8 1328.12,-209.8 1328.12,-209.8 1331.45,-210.86 1329.08,-206.8 1334.78,-211.93 1334.78,-211.93\"/>\n",
"<text text-anchor=\"start\" x=\"1287.97\" y=\"-205.8\" font-family=\"Lato\" font-size=\"14.00\">!i1</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;9 -->\n",
"<g id=\"edge26\" class=\"edge\">\n",
"<title>12&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1344.38,-206.06C1335.74,-196.15 1321.95,-182.77 1306.47,-177 1296,-173.1 1283.78,-174.24 1273.43,-176.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1266.61,-178.6 1272.52,-173.7 1269.98,-177.67 1273.36,-176.74 1273.36,-176.74 1273.36,-176.74 1269.98,-177.67 1274.19,-179.78 1266.61,-178.6 1266.61,-178.6\"/>\n",
"<text text-anchor=\"start\" x=\"1285.47\" y=\"-180.8\" font-family=\"Lato\" font-size=\"14.00\">!o0</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;13 -->\n",
"<g id=\"edge29\" class=\"edge\">\n",
"<title>14&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M800.3,-208.77C821.38,-207.51 854.49,-205.53 879.46,-204.03\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"886.6,-203.61 879.8,-207.17 883.11,-203.82 879.61,-204.02 879.61,-204.02 879.61,-204.02 883.11,-203.82 879.42,-200.88 886.6,-203.61 886.6,-203.61\"/>\n",
"<text text-anchor=\"start\" x=\"822.14\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;18 -->\n",
"<g id=\"edge31\" class=\"edge\">\n",
"<title>14&#45;&gt;18</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M757.46,-212.57C742.73,-214.36 722.28,-216.65 704.24,-218 621.57,-224.2 524.21,-227.1 472.95,-228.29\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"465.74,-228.46 472.66,-225.15 469.23,-228.38 472.73,-228.3 472.73,-228.3 472.73,-228.3 469.23,-228.38 472.8,-231.45 465.74,-228.46 465.74,-228.46\"/>\n",
"<text text-anchor=\"start\" x=\"579.58\" y=\"-227.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; i1</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;12 -->\n",
"<g id=\"edge28\" class=\"edge\">\n",
"<title>14&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M797.84,-218.62C823.14,-229.83 870.74,-248 913.47,-248 913.47,-248 913.47,-248 1250.47,-248 1279,-248 1310.27,-237.32 1330.85,-228.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1337.4,-225.88 1332.22,-231.55 1334.19,-227.27 1330.98,-228.65 1330.98,-228.65 1330.98,-228.65 1334.19,-227.27 1329.73,-225.76 1337.4,-225.88 1337.4,-225.88\"/>\n",
"<text text-anchor=\"start\" x=\"1055.81\" y=\"-251.8\" font-family=\"Lato\" font-size=\"14.00\">i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 17 -->\n",
"<g id=\"node22\" class=\"node\">\n",
"<title>17</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"914.47,-163 884.31,-145 914.47,-127 944.64,-145 914.47,-163\"/>\n",
"<text text-anchor=\"middle\" x=\"914.47\" y=\"-141.3\" font-family=\"Lato\" font-size=\"14.00\">17</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;17 -->\n",
"<g id=\"edge30\" class=\"edge\">\n",
"<title>14&#45;&gt;17</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M783.49,-192.23C788.28,-174.72 798.4,-148.92 818.14,-137 839.64,-124.03 868.99,-129.16 889.42,-135.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"896.25,-137.83 888.61,-138.6 892.93,-136.72 889.61,-135.61 889.61,-135.61 889.61,-135.61 892.93,-136.72 890.61,-132.62 896.25,-137.83 896.25,-137.83\"/>\n",
"<text text-anchor=\"start\" x=\"818.14\" y=\"-140.8\" font-family=\"Lato\" font-size=\"14.00\">!i0 &amp; !i1</text>\n",
"</g>\n",
"<!-- 17&#45;&gt;14 -->\n",
"<g id=\"edge34\" class=\"edge\">\n",
"<title>17&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M895.53,-151.77C876.08,-159.33 844.32,-172.3 818.14,-186 812.73,-188.83 807.06,-192.15 801.8,-195.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"795.84,-199.16 800.08,-192.77 798.8,-197.3 801.76,-195.43 801.76,-195.43 801.76,-195.43 798.8,-197.3 803.44,-198.1 795.84,-199.16 795.84,-199.16\"/>\n",
"<text text-anchor=\"start\" x=\"831.64\" y=\"-189.8\" font-family=\"Lato\" font-size=\"14.00\">!o0</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 0x7f0ddc16b720> >"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gi.minimize_lvl = 0\n",
"spot.apply_strategy(game, False, False)\n"
]
},
{
"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": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"567pt\" height=\"353pt\"\n",
" viewBox=\"0.00 0.00 566.58 353.20\" 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 349.2)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-349.2 562.58,-349.2 562.58,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"133.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"156.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"<text text-anchor=\"start\" x=\"172.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"218.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"234.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"276.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"292.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"338.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"354.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"392.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"408.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">))))</text>\n",
"<text text-anchor=\"start\" x=\"223.79\" y=\"-317\" font-family=\"Lato\" font-size=\"14.00\">[parity max odd 5]</text>\n",
"<!-- I -->\n",
"<!-- 4 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-167.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-163.5\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- I&#45;&gt;4 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-167.2C2.79,-167.2 17.15,-167.2 30.63,-167.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-167.2 30.94,-170.35 34.44,-167.2 30.94,-167.2 30.94,-167.2 30.94,-167.2 34.44,-167.2 30.94,-164.05 37.94,-167.2 37.94,-167.2\"/>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"156.33,-159.2 126.17,-141.2 156.33,-123.2 186.5,-141.2 156.33,-159.2\"/>\n",
"<text text-anchor=\"middle\" x=\"156.33\" y=\"-137.5\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;10 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>4&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M69.9,-155.12C76.09,-150.11 83.91,-144.86 92,-142.2 102.1,-138.88 113.6,-137.92 124.01,-138.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"131.01,-138.24 123.92,-141.17 127.51,-138.13 124.01,-138.02 124.01,-138.02 124.01,-138.02 127.51,-138.13 124.11,-134.87 131.01,-138.24 131.01,-138.24\"/>\n",
"<text text-anchor=\"start\" x=\"94.5\" y=\"-161\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-146\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"156.33,-213.2 126.17,-195.2 156.33,-177.2 186.5,-195.2 156.33,-213.2\"/>\n",
"<text text-anchor=\"middle\" x=\"156.33\" y=\"-191.5\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;11 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.68,-171.95C88.64,-176.21 110.86,-182.54 128.35,-187.52\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"135.51,-189.56 127.92,-190.67 132.15,-188.6 128.78,-187.64 128.78,-187.64 128.78,-187.64 132.15,-188.6 129.64,-184.61 135.51,-189.56 135.51,-189.56\"/>\n",
"<text text-anchor=\"start\" x=\"96.5\" y=\"-200\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-185\" 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=\"256.66\" cy=\"-86.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"256.66\" y=\"-82.5\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"349.64,-141.2 326.69,-123.2 349.64,-105.2 372.6,-123.2 349.64,-141.2\"/>\n",
"<text text-anchor=\"middle\" x=\"349.64\" y=\"-119.5\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M274.79,-83.62C284.97,-82.78 297.96,-82.97 308.66,-87.2 318.91,-91.25 328.2,-99.21 335.24,-106.62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"340.16,-112.1 333.14,-109 337.83,-109.5 335.49,-106.89 335.49,-106.89 335.49,-106.89 337.83,-109.5 337.83,-104.79 340.16,-112.1 340.16,-112.1\"/>\n",
"<text text-anchor=\"start\" x=\"295.16\" y=\"-106\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-91\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"349.64,-71.2 326.69,-53.2 349.64,-35.2 372.6,-53.2 349.64,-71.2\"/>\n",
"<text text-anchor=\"middle\" x=\"349.64\" y=\"-49.5\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;6 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M263.84,-69.53C269.36,-57.32 278.74,-41.62 292.66,-34.2 305.05,-27.61 320.17,-33.47 331.57,-40.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"337.48,-44.24 329.9,-43.04 334.55,-42.32 331.62,-40.41 331.62,-40.41 331.62,-40.41 334.55,-42.32 333.35,-37.77 337.48,-44.24 337.48,-44.24\"/>\n",
"<text text-anchor=\"start\" x=\"297.16\" y=\"-53\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-38\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;0 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.39,-123.94C316.58,-123.58 303.48,-121.98 292.66,-117.2 285.87,-114.2 279.46,-109.39 274.03,-104.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"268.95,-99.5 276.16,-102.12 271.46,-101.94 273.97,-104.38 273.97,-104.38 273.97,-104.38 271.46,-101.94 271.78,-106.64 268.95,-99.5 268.95,-99.5\"/>\n",
"<text text-anchor=\"start\" x=\"296.16\" y=\"-141\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-126\" 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=\"442.62\" cy=\"-80.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"442.62\" y=\"-76.5\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;1 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>6&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M360.03,-63.46C367.5,-70.81 378.66,-80.11 390.62,-84.2 399.29,-87.17 409.25,-87.1 418.05,-85.95\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"425.12,-84.78 418.73,-89.03 421.67,-85.35 418.22,-85.92 418.22,-85.92 418.22,-85.92 421.67,-85.35 417.7,-82.82 425.12,-84.78 425.12,-84.78\"/>\n",
"<text text-anchor=\"start\" x=\"394.12\" y=\"-106\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"390.62\" y=\"-91\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;6 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M429.13,-67.92C422.9,-62.64 414.93,-57.03 406.62,-54.2 397.16,-50.98 386.28,-50.18 376.63,-50.39\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"369.54,-50.71 376.39,-47.24 373.04,-50.55 376.53,-50.39 376.53,-50.39 376.53,-50.39 373.04,-50.55 376.68,-53.54 369.54,-50.71 369.54,-50.71\"/>\n",
"<text text-anchor=\"start\" x=\"395.12\" y=\"-73\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"390.62\" y=\"-58\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>7</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"535.6,-38.2 512.64,-20.2 535.6,-2.2 558.56,-20.2 535.6,-38.2\"/>\n",
"<text text-anchor=\"middle\" x=\"535.6\" y=\"-16.5\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;7 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M458.24,-70.56C474.17,-60.06 499.65,-43.25 516.75,-31.98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"522.63,-28.09 518.52,-34.58 519.71,-30.02 516.79,-31.95 516.79,-31.95 516.79,-31.95 519.71,-30.02 515.06,-29.32 522.63,-28.09 522.63,-28.09\"/>\n",
"<text text-anchor=\"start\" x=\"481.12\" y=\"-75\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"478.62\" y=\"-60\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;0 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>7&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M518.26,-15.49C476.71,-4.55 365.2,18.28 292.66,-28.2 280.22,-36.18 271.55,-50.31 265.96,-62.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"263.16,-69.23 262.99,-61.56 264.53,-66.01 265.89,-62.78 265.89,-62.78 265.89,-62.78 264.53,-66.01 268.79,-64.01 263.16,-69.23 263.16,-69.23\"/>\n",
"<text text-anchor=\"start\" x=\"394.12\" y=\"-20\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"390.62\" y=\"-5\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"442.62\" cy=\"-271.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"442.62\" y=\"-267.5\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"535.6,-288.2 512.64,-270.2 535.6,-252.2 558.56,-270.2 535.6,-288.2\"/>\n",
"<text text-anchor=\"middle\" x=\"535.6\" y=\"-266.5\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;8 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M460.68,-273.55C466.37,-274.22 472.76,-274.87 478.62,-275.2 485.72,-275.61 487.52,-275.64 494.62,-275.2 499.2,-274.92 504.06,-274.45 508.76,-273.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"515.93,-273.03 509.37,-277.01 512.46,-273.45 508.99,-273.88 508.99,-273.88 508.99,-273.88 512.46,-273.45 508.6,-270.76 515.93,-273.03 515.93,-273.03\"/>\n",
"<text text-anchor=\"start\" x=\"482.12\" y=\"-294\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"478.62\" y=\"-279\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;2 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>8&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M525.42,-260.02C514.59,-249.31 495.87,-234.82 478.62,-241.2 471.75,-243.74 465.32,-248.3 459.9,-253.11\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"454.82,-257.93 457.73,-250.83 457.36,-255.52 459.9,-253.11 459.9,-253.11 459.9,-253.11 457.36,-255.52 462.07,-255.39 454.82,-257.93 454.82,-257.93\"/>\n",
"<text text-anchor=\"start\" x=\"482.12\" y=\"-260\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"478.62\" y=\"-245\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"256.66\" cy=\"-241.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"256.66\" y=\"-237.5\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"black\" points=\"349.64,-289.2 326.69,-271.2 349.64,-253.2 372.6,-271.2 349.64,-289.2\"/>\n",
"<text text-anchor=\"middle\" x=\"349.64\" y=\"-267.5\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;9 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>3&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M267.54,-255.55C273.75,-263.24 282.5,-271.99 292.66,-276.2 303.06,-280.51 315.46,-279.92 325.94,-277.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"332.84,-276.45 326.69,-281.03 329.42,-277.2 326.01,-277.96 326.01,-277.96 326.01,-277.96 329.42,-277.2 325.33,-274.88 332.84,-276.45 332.84,-276.45\"/>\n",
"<text text-anchor=\"start\" x=\"296.16\" y=\"-298\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-283\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;2 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>9&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M372.67,-271.2C386.07,-271.2 403.21,-271.2 417.05,-271.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"424.35,-271.2 417.35,-274.35 420.85,-271.2 417.35,-271.2 417.35,-271.2 417.35,-271.2 420.85,-271.2 417.35,-268.05 424.35,-271.2 424.35,-271.2\"/>\n",
"<text text-anchor=\"start\" x=\"392.62\" y=\"-290\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"390.62\" y=\"-275\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;3 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>9&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M338.79,-261.38C331.25,-254.57 320.21,-246.07 308.66,-242.2 300.14,-239.34 290.35,-238.59 281.64,-238.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"274.63,-239.03 281.49,-235.59 278.13,-238.88 281.63,-238.73 281.63,-238.73 281.63,-238.73 278.13,-238.88 281.76,-241.88 274.63,-239.03 274.63,-239.03\"/>\n",
"<text text-anchor=\"start\" x=\"296.66\" y=\"-261\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-246\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;0 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>10&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M165.88,-128.7C174.34,-117.42 188.34,-101.38 204.66,-93.2 212.78,-89.14 222.48,-87.2 231.24,-86.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"238.31,-85.84 231.55,-89.47 234.82,-86.08 231.33,-86.33 231.33,-86.33 231.33,-86.33 234.82,-86.08 231.11,-83.18 238.31,-85.84 238.31,-85.84\"/>\n",
"<text text-anchor=\"start\" x=\"206.66\" y=\"-112\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"204.66\" y=\"-97\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;3 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>10&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M173.02,-149.34C186.74,-157.01 206.62,-169.5 220.66,-184.2 230.32,-194.31 238.63,-207.52 244.73,-218.67\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"248.06,-224.96 242,-220.25 246.42,-221.87 244.79,-218.77 244.79,-218.77 244.79,-218.77 246.42,-221.87 247.57,-217.3 248.06,-224.96 248.06,-224.96\"/>\n",
"<text text-anchor=\"start\" x=\"208.66\" y=\"-203\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"204.66\" y=\"-188\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;1 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>11&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M184.56,-193.82C226.83,-190.75 309.89,-180.98 372.62,-150.2 395.54,-138.96 415.24,-116.94 427.66,-100.59\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"431.89,-94.85 430.27,-102.36 429.81,-97.67 427.73,-100.49 427.73,-100.49 427.73,-100.49 429.81,-97.67 425.2,-98.61 431.89,-94.85 431.89,-94.85\"/>\n",
"<text text-anchor=\"start\" x=\"294.66\" y=\"-196\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-181\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;3 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>11&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M174.01,-203.01C190.27,-210.61 215.09,-222.22 233.1,-230.65\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"239.88,-233.82 232.2,-233.71 236.71,-232.34 233.54,-230.85 233.54,-230.85 233.54,-230.85 236.71,-232.34 234.87,-228 239.88,-233.82 239.88,-233.82\"/>\n",
"<text text-anchor=\"start\" x=\"208.66\" y=\"-242\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"204.66\" y=\"-227\" 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 0x7f0ddc16bf30> >"
]
},
"execution_count": 12,
"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": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"HOA: v1\n",
"States: 12\n",
"Start: 4\n",
"AP: 2 \"b\" \"a\"\n",
"acc-name: parity max odd 5\n",
"Acceptance: 5 Fin(4) & (Inf(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 0 0 0 0 1 1 1 1 1 1 1\n",
"--BODY--\n",
"State: 0\n",
"[!1] 5 {1}\n",
"[1] 6 {1}\n",
"State: 1\n",
"[1] 6 {1}\n",
"[!1] 7 {1}\n",
"State: 2\n",
"[t] 8 {1}\n",
"State: 3\n",
"[t] 9 {1}\n",
"State: 4\n",
"[!1] 10 {1}\n",
"[1] 11 {1}\n",
"State: 5\n",
"[t] 0 {3}\n",
"State: 6\n",
"[t] 1 {4}\n",
"State: 7\n",
"[t] 0 {4}\n",
"State: 8\n",
"[t] 2 {3}\n",
"State: 9\n",
"[!0] 2 {3}\n",
"[0] 3 {4}\n",
"State: 10\n",
"[!0] 0 {3}\n",
"[0] 3 {3}\n",
"State: 11\n",
"[!0] 1 {3}\n",
"[0] 3 {3}\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": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.solve_parity_game(game)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"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=\"353pt\"\n",
" viewBox=\"0.00 0.00 566.58 353.20\" 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 349.2)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-349.2 562.58,-349.2 562.58,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"133.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"156.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"<text text-anchor=\"start\" x=\"172.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"218.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"234.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"276.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"292.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"338.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"354.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"392.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"408.79\" y=\"-331\" font-family=\"Lato\" font-size=\"14.00\">))))</text>\n",
"<text text-anchor=\"start\" x=\"223.79\" y=\"-317\" font-family=\"Lato\" font-size=\"14.00\">[parity max odd 5]</text>\n",
"<!-- I -->\n",
"<!-- 4 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"56\" cy=\"-167.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-163.5\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- I&#45;&gt;4 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-167.2C2.79,-167.2 17.15,-167.2 30.63,-167.2\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-167.2 30.94,-170.35 34.44,-167.2 30.94,-167.2 30.94,-167.2 30.94,-167.2 34.44,-167.2 30.94,-164.05 37.94,-167.2 37.94,-167.2\"/>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"156.33,-159.2 126.17,-141.2 156.33,-123.2 186.5,-141.2 156.33,-159.2\"/>\n",
"<text text-anchor=\"middle\" x=\"156.33\" y=\"-137.5\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;10 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>4&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M69.9,-155.12C76.09,-150.11 83.91,-144.86 92,-142.2 102.1,-138.88 113.6,-137.92 124.01,-138.02\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"131.01,-138.24 123.92,-141.17 127.51,-138.13 124.01,-138.02 124.01,-138.02 124.01,-138.02 127.51,-138.13 124.11,-134.87 131.01,-138.24 131.01,-138.24\"/>\n",
"<text text-anchor=\"start\" x=\"94.5\" y=\"-161\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-146\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"156.33,-213.2 126.17,-195.2 156.33,-177.2 186.5,-195.2 156.33,-213.2\"/>\n",
"<text text-anchor=\"middle\" x=\"156.33\" y=\"-191.5\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;11 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>4&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.68,-171.95C88.64,-176.21 110.86,-182.54 128.35,-187.52\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"135.51,-189.56 127.92,-190.67 132.15,-188.6 128.78,-187.64 128.78,-187.64 128.78,-187.64 132.15,-188.6 129.64,-184.61 135.51,-189.56 135.51,-189.56\"/>\n",
"<text text-anchor=\"start\" x=\"96.5\" y=\"-200\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-185\" 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=\"#e31a1c\" stroke-width=\"2\" cx=\"256.66\" cy=\"-86.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"256.66\" y=\"-82.5\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>5</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"349.64,-141.2 326.69,-123.2 349.64,-105.2 372.6,-123.2 349.64,-141.2\"/>\n",
"<text text-anchor=\"middle\" x=\"349.64\" y=\"-119.5\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M274.79,-83.62C284.97,-82.78 297.96,-82.97 308.66,-87.2 318.91,-91.25 328.2,-99.21 335.24,-106.62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"340.16,-112.1 333.14,-109 337.83,-109.5 335.49,-106.89 335.49,-106.89 335.49,-106.89 337.83,-109.5 337.83,-104.79 340.16,-112.1 340.16,-112.1\"/>\n",
"<text text-anchor=\"start\" x=\"295.16\" y=\"-106\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-91\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>6</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"349.64,-71.2 326.69,-53.2 349.64,-35.2 372.6,-53.2 349.64,-71.2\"/>\n",
"<text text-anchor=\"middle\" x=\"349.64\" y=\"-49.5\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;6 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M263.84,-69.53C269.36,-57.32 278.74,-41.62 292.66,-34.2 305.05,-27.61 320.17,-33.47 331.57,-40.37\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"337.48,-44.24 329.9,-43.04 334.28,-42.74 331.35,-40.83 331.62,-40.41 331.9,-39.99 334.82,-41.9 333.35,-37.77 337.48,-44.24 337.48,-44.24\"/>\n",
"<text text-anchor=\"start\" x=\"297.16\" y=\"-53\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-38\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;0 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>5&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M327.39,-123.94C316.58,-123.58 303.48,-121.98 292.66,-117.2 285.87,-114.2 279.46,-109.39 274.03,-104.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"268.95,-99.5 276.16,-102.12 271.46,-101.94 273.97,-104.38 273.97,-104.38 273.97,-104.38 271.46,-101.94 271.78,-106.64 268.95,-99.5 268.95,-99.5\"/>\n",
"<text text-anchor=\"start\" x=\"296.16\" y=\"-141\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-126\" 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=\"#e31a1c\" stroke-width=\"2\" cx=\"442.62\" cy=\"-80.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"442.62\" y=\"-76.5\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;1 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>6&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M360.03,-63.46C367.5,-70.81 378.66,-80.11 390.62,-84.2 399.29,-87.17 409.25,-87.1 418.05,-85.95\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"425.12,-84.78 418.73,-89.03 421.67,-85.35 418.22,-85.92 418.22,-85.92 418.22,-85.92 421.67,-85.35 417.7,-82.82 425.12,-84.78 425.12,-84.78\"/>\n",
"<text text-anchor=\"start\" x=\"394.12\" y=\"-106\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"390.62\" y=\"-91\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;6 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"#e31a1c\" stroke-width=\"2\" d=\"M429.13,-67.92C422.9,-62.64 414.93,-57.03 406.62,-54.2 397.16,-50.98 386.28,-50.18 376.63,-50.39\"/>\n",
"<polygon fill=\"#e31a1c\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"369.54,-50.71 376.39,-47.24 373.02,-50.05 376.51,-49.89 376.53,-50.39 376.56,-50.89 373.06,-51.05 376.68,-53.54 369.54,-50.71 369.54,-50.71\"/>\n",
"<text text-anchor=\"start\" x=\"395.12\" y=\"-73\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"390.62\" y=\"-58\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>7</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" points=\"535.6,-38.2 512.64,-20.2 535.6,-2.2 558.56,-20.2 535.6,-38.2\"/>\n",
"<text text-anchor=\"middle\" x=\"535.6\" y=\"-16.5\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;7 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M458.24,-70.56C474.17,-60.06 499.65,-43.25 516.75,-31.98\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"522.63,-28.09 518.52,-34.58 519.71,-30.02 516.79,-31.95 516.79,-31.95 516.79,-31.95 519.71,-30.02 515.06,-29.32 522.63,-28.09 522.63,-28.09\"/>\n",
"<text text-anchor=\"start\" x=\"481.12\" y=\"-75\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"478.62\" y=\"-60\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;0 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>7&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M518.26,-15.49C476.71,-4.55 365.2,18.28 292.66,-28.2 280.22,-36.18 271.55,-50.31 265.96,-62.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"263.16,-69.23 262.99,-61.56 264.53,-66.01 265.89,-62.78 265.89,-62.78 265.89,-62.78 264.53,-66.01 268.79,-64.01 263.16,-69.23 263.16,-69.23\"/>\n",
"<text text-anchor=\"start\" x=\"394.12\" y=\"-20\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"390.62\" y=\"-5\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"442.62\" cy=\"-271.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"442.62\" y=\"-267.5\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>8</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"535.6,-288.2 512.64,-270.2 535.6,-252.2 558.56,-270.2 535.6,-288.2\"/>\n",
"<text text-anchor=\"middle\" x=\"535.6\" y=\"-266.5\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;8 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M460.68,-273.55C466.37,-274.22 472.76,-274.87 478.62,-275.2 485.72,-275.61 487.52,-275.64 494.62,-275.2 499.2,-274.92 504.06,-274.45 508.76,-273.91\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"515.93,-273.03 509.37,-277.01 512.46,-273.45 508.99,-273.88 508.99,-273.88 508.99,-273.88 512.46,-273.45 508.6,-270.76 515.93,-273.03 515.93,-273.03\"/>\n",
"<text text-anchor=\"start\" x=\"482.12\" y=\"-294\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"478.62\" y=\"-279\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;2 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>8&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M525.42,-260.02C514.59,-249.31 495.87,-234.82 478.62,-241.2 471.75,-243.74 465.32,-248.3 459.9,-253.11\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"454.82,-257.93 457.73,-250.83 457.02,-255.16 459.55,-252.75 459.9,-253.11 460.24,-253.47 457.71,-255.88 462.07,-255.39 454.82,-257.93 454.82,-257.93\"/>\n",
"<text text-anchor=\"start\" x=\"482.12\" y=\"-260\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"478.62\" y=\"-245\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"256.66\" cy=\"-241.2\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"256.66\" y=\"-237.5\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"349.64,-289.2 326.69,-271.2 349.64,-253.2 372.6,-271.2 349.64,-289.2\"/>\n",
"<text text-anchor=\"middle\" x=\"349.64\" y=\"-267.5\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;9 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>3&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M267.54,-255.55C273.75,-263.24 282.5,-271.99 292.66,-276.2 303.06,-280.51 315.46,-279.92 325.94,-277.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"332.84,-276.45 326.69,-281.03 329.42,-277.2 326.01,-277.96 326.01,-277.96 326.01,-277.96 329.42,-277.2 325.33,-274.88 332.84,-276.45 332.84,-276.45\"/>\n",
"<text text-anchor=\"start\" x=\"296.16\" y=\"-298\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-283\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;2 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>9&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M372.67,-271.2C386.07,-271.2 403.21,-271.2 417.05,-271.2\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"424.35,-271.2 417.35,-274.35 420.85,-271.7 417.35,-271.7 417.35,-271.2 417.35,-270.7 420.85,-270.7 417.35,-268.05 424.35,-271.2 424.35,-271.2\"/>\n",
"<text text-anchor=\"start\" x=\"392.62\" y=\"-290\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"390.62\" y=\"-275\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;3 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>9&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M338.79,-261.38C331.25,-254.57 320.21,-246.07 308.66,-242.2 300.14,-239.34 290.35,-238.59 281.64,-238.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"274.63,-239.03 281.49,-235.59 278.13,-238.88 281.63,-238.73 281.63,-238.73 281.63,-238.73 278.13,-238.88 281.76,-241.88 274.63,-239.03 274.63,-239.03\"/>\n",
"<text text-anchor=\"start\" x=\"296.66\" y=\"-261\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-246\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;0 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>10&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M165.88,-128.7C174.34,-117.42 188.34,-101.38 204.66,-93.2 212.78,-89.14 222.48,-87.2 231.24,-86.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"238.31,-85.84 231.55,-89.47 234.82,-86.08 231.33,-86.33 231.33,-86.33 231.33,-86.33 234.82,-86.08 231.11,-83.18 238.31,-85.84 238.31,-85.84\"/>\n",
"<text text-anchor=\"start\" x=\"206.66\" y=\"-112\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"204.66\" y=\"-97\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;3 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>10&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M173.02,-149.34C186.74,-157.01 206.62,-169.5 220.66,-184.2 230.32,-194.31 238.63,-207.52 244.73,-218.67\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"248.06,-224.96 242,-220.25 245.98,-222.1 244.35,-219.01 244.79,-218.77 245.23,-218.54 246.87,-221.63 247.57,-217.3 248.06,-224.96 248.06,-224.96\"/>\n",
"<text text-anchor=\"start\" x=\"208.66\" y=\"-203\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"204.66\" y=\"-188\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;1 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>11&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M184.56,-193.82C226.83,-190.75 309.89,-180.98 372.62,-150.2 395.54,-138.96 415.24,-116.94 427.66,-100.59\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"431.89,-94.85 430.27,-102.36 429.81,-97.67 427.73,-100.49 427.73,-100.49 427.73,-100.49 429.81,-97.67 425.2,-98.61 431.89,-94.85 431.89,-94.85\"/>\n",
"<text text-anchor=\"start\" x=\"294.66\" y=\"-196\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"292.66\" y=\"-181\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;3 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>11&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M174.01,-203.01C190.27,-210.61 215.09,-222.22 233.1,-230.65\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"239.88,-233.82 232.2,-233.71 236.5,-232.79 233.33,-231.31 233.54,-230.85 233.75,-230.4 236.92,-231.88 234.87,-228 239.88,-233.82 239.88,-233.82\"/>\n",
"<text text-anchor=\"start\" x=\"208.66\" y=\"-242\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"204.66\" y=\"-227\" 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 0x7f0ddc30cab0> >"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spot.highlight_strategy(game)"
]
},
{
"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": 16,
"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"
]
}
],
"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",
"print(aag_txt)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"this_aig = spot.aiger_circuit(aag_txt)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"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=\"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",
"<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": 19,
"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"
]
}
],
"source": [
"print(this_aig.to_str())"
]
},
{
"cell_type": "code",
"execution_count": 20,
"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": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"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 0x7f0ddc26b480> >"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"aigasmon = this_aig.as_automaton()\n",
"display(aigasmon)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Incomplete circuit</h2>\n",
"\n",
"<p>\n",
" It can happen that propositions declared as output are ommited in the aig circuit.\n",
" This happens if the output does not appear in the strategy. Since it does not appear in the\n",
" strategy it can take arbritrary values.\n",
"</p>"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"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=\"383pt\" height=\"110pt\"\n",
" viewBox=\"0.00 0.00 383.00 109.72\" 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 105.72)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-105.72 379,-105.72 379,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"76\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"97\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"<text text-anchor=\"start\" x=\"113\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"155\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"171\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"217\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"233\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\">) | Fin(</text>\n",
"<text text-anchor=\"start\" x=\"271\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-87.52\" font-family=\"Lato\" font-size=\"14.00\">)))</text>\n",
"<text text-anchor=\"start\" x=\"132\" y=\"-73.52\" font-family=\"Lato\" font-size=\"14.00\">[parity max odd 4]</text>\n",
"<!-- I -->\n",
"<!-- 1 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" cx=\"56\" cy=\"-30.72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-27.02\" 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,-30.72C2.79,-30.72 17.15,-30.72 30.63,-30.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-30.72 30.94,-33.87 34.44,-30.72 30.94,-30.72 30.94,-30.72 30.94,-30.72 34.44,-30.72 30.94,-27.57 37.94,-30.72 37.94,-30.72\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<polygon fill=\"#ffffaa\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"153,-48.72 126,-30.72 153,-12.72 180,-30.72 153,-48.72\"/>\n",
"<text text-anchor=\"middle\" x=\"153\" y=\"-27.02\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.42,-30.72C86.76,-30.72 103.7,-30.72 118.6,-30.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"125.72,-30.72 118.72,-33.87 122.22,-30.72 118.72,-30.72 118.72,-30.72 118.72,-30.72 122.22,-30.72 118.72,-27.57 125.72,-30.72 125.72,-30.72\"/>\n",
"<text text-anchor=\"start\" x=\"95.5\" y=\"-49.52\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-34.52\" 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=\"251\" cy=\"-30.72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"251\" y=\"-27.02\" font-family=\"Lato\" font-size=\"14.00\">0</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=\"348,-48.72 321,-30.72 348,-12.72 375,-30.72 348,-48.72\"/>\n",
"<text text-anchor=\"middle\" x=\"348\" y=\"-27.02\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M269.04,-33.64C274.73,-34.49 281.12,-35.3 287,-35.72 297.4,-36.46 308.81,-35.86 318.86,-34.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"325.91,-34.07 319.3,-37.98 322.43,-34.46 318.95,-34.85 318.95,-34.85 318.95,-34.85 322.43,-34.46 318.6,-31.72 325.91,-34.07 325.91,-34.07\"/>\n",
"<text text-anchor=\"start\" x=\"290.5\" y=\"-54.52\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-39.52\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M335.64,-20.52C327.28,-13.72 315.27,-5.4 303,-1.72 296.19,0.33 293.69,0.69 287,-1.72 280.46,-4.07 274.27,-8.25 268.97,-12.7\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"263.6,-17.58 266.67,-10.54 265.85,-14.86 268.45,-12.51 268.78,-12.88 269.12,-13.25 266.52,-15.6 270.9,-15.21 263.6,-17.58 263.6,-17.58\"/>\n",
"<text text-anchor=\"start\" x=\"290.5\" y=\"-20.52\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"287\" y=\"-5.52\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>3&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#33a02c\" stroke-width=\"2\" d=\"M180.23,-30.72C194.38,-30.72 211.72,-30.72 225.58,-30.72\"/>\n",
"<polygon fill=\"#33a02c\" stroke=\"#33a02c\" stroke-width=\"2\" points=\"232.88,-30.72 225.88,-33.87 229.38,-31.22 225.88,-31.22 225.88,-30.72 225.88,-30.22 229.38,-30.22 225.88,-27.57 232.88,-30.72 232.88,-30.72\"/>\n",
"<text text-anchor=\"start\" x=\"198\" y=\"-49.52\" font-family=\"Lato\" font-size=\"14.00\">o0</text>\n",
"<text text-anchor=\"start\" x=\"198.5\" y=\"-34.52\" 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 0x7f0ddc26bea0> >"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"game = spot.create_game(\"o0\", [\"o0\", \"o1\"])\n",
"print(spot.solve_game(game))\n",
"spot.highlight_strategy(game)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"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=\"96pt\" height=\"126pt\"\n",
" viewBox=\"0.00 0.00 96.39 126.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 122)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-122 92.39,-122 92.39,4 -4,4\"/>\n",
"<!-- o0o0 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>o0o0</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"44.2,-72 88.59,-106.5 -0.2,-106.5 44.2,-72\"/>\n",
"<text text-anchor=\"middle\" x=\"44.2\" y=\"-91.3\" font-family=\"Times,serif\" font-size=\"14.00\">o0</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"15.2,0 73.2,0 73.2,-36 15.2,-36 15.2,0\"/>\n",
"<text text-anchor=\"middle\" x=\"44.2\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">Const</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;o0o0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>0&#45;&gt;o0o0:s</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M44.2,-36.19C44.2,-44.29 44.2,-54.29 44.2,-63.98\"/>\n",
"<ellipse fill=\"black\" stroke=\"black\" cx=\"44.2\" cy=\"-68\" rx=\"4\" ry=\"4\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.aig; proxy of <Swig Object of type 'spot::aig_ptr *' at 0x7f0ddc26b930> >"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"strat = spot.create_strategy(game)\n",
"aig = spot.strategy_to_aig(strat, \"isop\")\n",
"aig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By handing over the input and output propositions explicitly, you can force their occurrence in the propositions of the circuit"
]
},
{
"cell_type": "code",
"execution_count": 24,
"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=\"202pt\" height=\"126pt\"\n",
" viewBox=\"0.00 0.00 202.39 126.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 122)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-122 198.39,-122 198.39,4 -4,4\"/>\n",
"<!-- o0o0 -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>o0o0</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"44.2,-72 88.59,-106.5 -0.2,-106.5 44.2,-72\"/>\n",
"<text text-anchor=\"middle\" x=\"44.2\" y=\"-91.3\" font-family=\"Times,serif\" font-size=\"14.00\">o0</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"68.2,0 126.2,0 126.2,-36 68.2,-36 68.2,0\"/>\n",
"<text text-anchor=\"middle\" x=\"97.2\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">Const</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;o0o0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>0&#45;&gt;o0o0:s</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M67.91,-34.99C57.85,-42.36 48.34,-52.12 45.24,-63.94\"/>\n",
"<ellipse fill=\"black\" stroke=\"black\" cx=\"44.71\" cy=\"-68.03\" rx=\"4\" ry=\"4\"/>\n",
"</g>\n",
"<!-- o1o1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>o1o1</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"150.2,-72 194.59,-106.5 105.8,-106.5 150.2,-72\"/>\n",
"<text text-anchor=\"middle\" x=\"150.2\" y=\"-91.3\" font-family=\"Times,serif\" font-size=\"14.00\">o1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;o1o1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;o1o1:s</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M126.49,-34.99C135.97,-41.94 144.97,-51.01 148.56,-61.94\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"145.13,-62.69 150.2,-72 152.04,-61.57 145.13,-62.69\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.aig; proxy of <Swig Object of type 'spot::aig_ptr *' at 0x7f0ddc26be70> >"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aig2 = spot.strategy_to_aig(strat, \"isop\", [], [\"o0\", \"o1\"])\n",
"aig2"
]
},
{
"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.9.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}