spot/tests/python/ltsmin-pml.ipynb
Alexandre Duret-Lutz 186d206302 ltsmin-pml: work around newer jupyter versions
Newer Jupyter version are able to capture the system's stdout and
stderr to display it in the notebook.  This is done asynchronously,
with a thread polling those file descriptor.  While this will help us
debug (finaly we can see the tracing code we put in C++) this causes
two issues for testing.  One is the asynchronous behaviour, which
makes it very hard to reproduce notebooks.  The second issue is that
older version of Jupyter used to hide some of the prints from the
notebook, so it is hard to accommodate both.

In the case of the ltsmin-pml notebook, loading the PML file from
a filename used to trigger a compilation silently (with output on the
console, but not in the notebook).  The newer version had the output
of that compilation spread into two cells.

* python/spot/ltsmin.i: Work around the issue by triggering the
compilation from Python, and capturing its output explicitly, so it
work with all Jupyter versions.  Also adjust to use the more recent
and simpler subprocess.run() interface, available since Python 3.5.
* tests/python/ltsmin-pml.ipynb: Adjust expected output.
* tests/python/ipnbdoctest.py (canonicalize): Adjust patterns.
2021-11-15 23:37:08 +01:00

1294 lines
80 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import spot\n",
"import spot.ltsmin\n",
"# The following line causes the notebook to exit with 77 if spins is not \n",
"# installed, therefore skipping this test in the test suite.\n",
"spot.ltsmin.require('spins')\n",
"spot.setup()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are two ways to load a Promela model: from a file or from a cell. \n",
"\n",
"Loading from a cell\n",
"-------------------\n",
"\n",
"Using the `%%pml` magic will save the model in a temporary file, call `spins` to compile it, load the resulting shared library, and store the result into an object whose name is passed as an argument to `%%pml`."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"SpinS Promela Compiler - version 1.1 (3-Feb-2015)\n",
"(C) University of Twente, Formal Methods and Tools group\n",
"\n",
"Parsing tmprn9_nun3.pml...\n",
"Parsing tmprn9_nun3.pml done (0.1 sec)\n",
"\n",
"Optimizing graphs...\n",
" StateMerging changed 0 states/transitions.\n",
" RemoveUselessActions changed 2 states/transitions.\n",
" RemoveUselessGotos changed 2 states/transitions.\n",
" RenumberAll changed 1 states/transitions.\n",
"Optimization done (0.0 sec)\n",
"\n",
"Generating next-state function ...\n",
" Instantiating processes\n",
" Statically binding references\n",
" Creating transitions\n",
"Generating next-state function done (0.0 sec)\n",
"\n",
"Creating state vector\n",
"Creating state labels\n",
"Generating transitions/state dependency matrices (2 / 3 slots) ... \n",
" Found 5 / 15 ( 33.3%) Guard/slot reads \n",
" Found 6 / 6 (100.0%) Transition/slot tests \n",
" Found 2, 4, 4 / 18 ( 11.1%, 22.2%, 22.2%) Actions/slot r,W,w \n",
" Found 2, 4, 4 / 6 ( 33.3%, 66.7%, 66.7%) Atomics/slot r,W,w \n",
" Found 6, 4, 4 / 6 (100.0%, 66.7%, 66.7%) Transition/slot r,W,w \n",
"Generating transition/state dependency matrices done (0.0 sec)\n",
"\n",
"Generating guard dependency matrices (5 guards) ...\n",
" Found 3 / 12 ( 25.0%) Guard/guard dependencies \n",
" Found 8 / 10 ( 80.0%) Transition/guard writes \n",
"\n",
" Found 4 / 4 (100.0%) Transition/transition writes \n",
" Found 2 / 12 ( 16.7%) !MCE guards \n",
" Found 1 / 2 ( 50.0%) !MCE transitions \n",
" Found 7 / 25 ( 28.0%) !ICE guards \n",
" Found 10 / 10 (100.0%) !NES guards \n",
" Found 4 / 4 (100.0%) !NES transitions \n",
" Found 8 / 10 ( 80.0%) !NDS guards \n",
" Found 0 / 10 ( 0.0%) MDS guards \n",
" Found 4 / 10 ( 40.0%) MES guards \n",
" Found 0 / 4 ( 0.0%) !NDS transitions \n",
" Found 0 / 2 ( 0.0%) !DNA transitions \n",
" Found 2 / 2 (100.0%) Commuting actions \n",
"Generating guard dependency matrices done (0.0 sec)\n",
"\n",
"Written C code to /home/adl/git/spot/tests/python/tmprn9_nun3.pml.spins.c\n",
"Compiled C code to PINS library tmprn9_nun3.pml.spins\n",
"\n"
]
}
],
"source": [
"%%pml model\n",
"active proctype P() {\n",
"int a = 0;\n",
"int b = 0;\n",
"x: if\n",
" :: d_step {a < 3 && b < 3; a = a + 1; } goto x;\n",
" :: d_step {a < 3 && b < 3; b = b + 1; } goto x;\n",
"fi;\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Yes, the `spins` compiler is quite verbose. Printing the resulting `model` object will show information about the variables in that model. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"ltsmin model with the following variables:\n",
" P_0._pc: pc\n",
" P_0.a: int\n",
" P_0.b: int"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To instantiate a Kripke structure, one should provide a list of atomic proposition to observe."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"729pt\" height=\"134pt\"\n",
" viewBox=\"0.00 0.00 729.00 133.64\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.4629629629629629 0.4629629629629629) rotate(0) translate(4 284)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-284 1567,-284 1567,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"778.5\" y=\"-264.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"770.5\" y=\"-249.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",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M249,-140C249,-140 49,-140 49,-140 43,-140 37,-134 37,-128 37,-128 37,-114 37,-114 37,-108 43,-102 49,-102 49,-102 249,-102 249,-102 255,-102 261,-108 261,-114 261,-114 261,-128 261,-128 261,-134 255,-140 249,-140\"/>\n",
"<text text-anchor=\"start\" x=\"60\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=0, P_0.b=0</text>\n",
"<text text-anchor=\"start\" x=\"45\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</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.11,-121C2.32,-121 13.71,-121 29.67,-121\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"36.78,-121 29.78,-124.15 33.28,-121 29.78,-121 29.78,-121 29.78,-121 33.28,-121 29.78,-117.85 36.78,-121 36.78,-121\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M509,-168C509,-168 309,-168 309,-168 303,-168 297,-162 297,-156 297,-156 297,-142 297,-142 297,-136 303,-130 309,-130 309,-130 509,-130 509,-130 515,-130 521,-136 521,-142 521,-142 521,-156 521,-156 521,-162 515,-168 509,-168\"/>\n",
"<text text-anchor=\"start\" x=\"320\" y=\"-152.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=1, P_0.b=0</text>\n",
"<text text-anchor=\"start\" x=\"305\" y=\"-137.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</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=\"M261.29,-133.08C270.63,-134.09 280.11,-135.12 289.5,-136.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"296.67,-136.92 289.37,-139.29 293.19,-136.54 289.71,-136.16 289.71,-136.16 289.71,-136.16 293.19,-136.54 290.05,-133.03 296.67,-136.92 296.67,-136.92\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M509,-112C509,-112 309,-112 309,-112 303,-112 297,-106 297,-100 297,-100 297,-86 297,-86 297,-80 303,-74 309,-74 309,-74 509,-74 509,-74 515,-74 521,-80 521,-86 521,-86 521,-100 521,-100 521,-106 515,-112 509,-112\"/>\n",
"<text text-anchor=\"start\" x=\"320\" y=\"-96.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=0, P_0.b=1</text>\n",
"<text text-anchor=\"start\" x=\"305\" y=\"-81.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</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=\"M261.29,-108.92C270.63,-107.91 280.11,-106.88 289.5,-105.86\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"296.67,-105.08 290.05,-108.97 293.19,-105.46 289.71,-105.84 289.71,-105.84 289.71,-105.84 293.19,-105.46 289.37,-102.71 296.67,-105.08 296.67,-105.08\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M772,-196C772,-196 569,-196 569,-196 563,-196 557,-190 557,-184 557,-184 557,-170 557,-170 557,-164 563,-158 569,-158 569,-158 772,-158 772,-158 778,-158 784,-164 784,-170 784,-170 784,-184 784,-184 784,-190 778,-196 772,-196\"/>\n",
"<text text-anchor=\"start\" x=\"581.5\" y=\"-180.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=2, P_0.b=0</text>\n",
"<text text-anchor=\"start\" x=\"565\" y=\"-165.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M521.18,-161C530.7,-162.02 540.36,-163.07 549.94,-164.1\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"556.9,-164.85 549.6,-167.23 553.42,-164.47 549.94,-164.1 549.94,-164.1 549.94,-164.1 553.42,-164.47 550.28,-160.97 556.9,-164.85 556.9,-164.85\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M770.5,-140C770.5,-140 570.5,-140 570.5,-140 564.5,-140 558.5,-134 558.5,-128 558.5,-128 558.5,-114 558.5,-114 558.5,-108 564.5,-102 570.5,-102 570.5,-102 770.5,-102 770.5,-102 776.5,-102 782.5,-108 782.5,-114 782.5,-114 782.5,-128 782.5,-128 782.5,-134 776.5,-140 770.5,-140\"/>\n",
"<text text-anchor=\"start\" x=\"581.5\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=1, P_0.b=1</text>\n",
"<text text-anchor=\"start\" x=\"566.5\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M521.18,-137C531.03,-135.94 541.03,-134.86 550.94,-133.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"558.14,-133.02 551.52,-136.9 554.66,-133.39 551.18,-133.77 551.18,-133.77 551.18,-133.77 554.66,-133.39 550.84,-130.64 558.14,-133.02 558.14,-133.02\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M521.18,-105C531.03,-106.06 541.03,-107.14 550.94,-108.21\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"558.14,-108.98 550.84,-111.36 554.66,-108.61 551.18,-108.23 551.18,-108.23 551.18,-108.23 554.66,-108.61 551.52,-105.1 558.14,-108.98 558.14,-108.98\"/>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M768.5,-84C768.5,-84 572.5,-84 572.5,-84 566.5,-84 560.5,-78 560.5,-72 560.5,-72 560.5,-58 560.5,-58 560.5,-52 566.5,-46 572.5,-46 572.5,-46 768.5,-46 768.5,-46 774.5,-46 780.5,-52 780.5,-58 780.5,-58 780.5,-72 780.5,-72 780.5,-78 774.5,-84 768.5,-84\"/>\n",
"<text text-anchor=\"start\" x=\"581.5\" y=\"-68.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=0, P_0.b=2</text>\n",
"<text text-anchor=\"start\" x=\"568.5\" y=\"-53.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</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=\"M521.18,-81C531.79,-79.86 542.56,-78.7 553.22,-77.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"560.2,-76.79 553.58,-80.68 556.72,-77.17 553.24,-77.54 553.24,-77.54 553.24,-77.54 556.72,-77.17 552.9,-74.41 560.2,-76.79 560.2,-76.79\"/>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1033.5,-224C1033.5,-224 833.5,-224 833.5,-224 827.5,-224 821.5,-218 821.5,-212 821.5,-212 821.5,-198 821.5,-198 821.5,-192 827.5,-186 833.5,-186 833.5,-186 1033.5,-186 1033.5,-186 1039.5,-186 1045.5,-192 1045.5,-198 1045.5,-198 1045.5,-212 1045.5,-212 1045.5,-218 1039.5,-224 1033.5,-224\"/>\n",
"<text text-anchor=\"start\" x=\"844.5\" y=\"-208.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=3, P_0.b=0</text>\n",
"<text text-anchor=\"start\" x=\"829.5\" y=\"-193.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M784.08,-189.08C793.96,-190.14 803.98,-191.21 813.91,-192.28\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"821.12,-193.05 813.82,-195.44 817.64,-192.68 814.16,-192.3 814.16,-192.3 814.16,-192.3 817.64,-192.68 814.5,-189.17 821.12,-193.05 821.12,-193.05\"/>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1035,-168C1035,-168 832,-168 832,-168 826,-168 820,-162 820,-156 820,-156 820,-142 820,-142 820,-136 826,-130 832,-130 832,-130 1035,-130 1035,-130 1041,-130 1047,-136 1047,-142 1047,-142 1047,-156 1047,-156 1047,-162 1041,-168 1035,-168\"/>\n",
"<text text-anchor=\"start\" x=\"844.5\" y=\"-152.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=2, P_0.b=1</text>\n",
"<text text-anchor=\"start\" x=\"828\" y=\"-137.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;7 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M784.08,-164.92C793.63,-163.9 803.31,-162.86 812.91,-161.83\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"819.88,-161.08 813.25,-164.96 816.4,-161.46 812.92,-161.83 812.92,-161.83 812.92,-161.83 816.4,-161.46 812.58,-158.7 819.88,-161.08 819.88,-161.08\"/>\n",
"</g>\n",
"<!-- 4&#45;&gt;7 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M782.57,-132.92C792.6,-133.99 802.79,-135.08 812.89,-136.17\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"819.87,-136.92 812.57,-139.3 816.39,-136.54 812.91,-136.17 812.91,-136.17 812.91,-136.17 816.39,-136.54 813.24,-133.04 819.87,-136.92 819.87,-136.92\"/>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1031.5,-112C1031.5,-112 835.5,-112 835.5,-112 829.5,-112 823.5,-106 823.5,-100 823.5,-100 823.5,-86 823.5,-86 823.5,-80 829.5,-74 835.5,-74 835.5,-74 1031.5,-74 1031.5,-74 1037.5,-74 1043.5,-80 1043.5,-86 1043.5,-86 1043.5,-100 1043.5,-100 1043.5,-106 1037.5,-112 1031.5,-112\"/>\n",
"<text text-anchor=\"start\" x=\"844.5\" y=\"-96.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=1, P_0.b=2</text>\n",
"<text text-anchor=\"start\" x=\"831.5\" y=\"-81.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;8 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M782.57,-109.08C793.61,-107.9 804.84,-106.7 815.93,-105.51\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"823.2,-104.73 816.57,-108.6 819.72,-105.1 816.24,-105.47 816.24,-105.47 816.24,-105.47 819.72,-105.1 815.9,-102.34 823.2,-104.73 823.2,-104.73\"/>\n",
"</g>\n",
"<!-- 5&#45;&gt;8 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M780.68,-76.71C792.47,-77.98 804.5,-79.27 816.37,-80.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"823.34,-81.29 816.05,-83.67 819.86,-80.92 816.38,-80.54 816.38,-80.54 816.38,-80.54 819.86,-80.92 816.72,-77.41 823.34,-81.29 823.34,-81.29\"/>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1029.5,-38C1029.5,-38 837.5,-38 837.5,-38 831.5,-38 825.5,-32 825.5,-26 825.5,-26 825.5,-12 825.5,-12 825.5,-6 831.5,0 837.5,0 837.5,0 1029.5,0 1029.5,0 1035.5,0 1041.5,-6 1041.5,-12 1041.5,-12 1041.5,-26 1041.5,-26 1041.5,-32 1035.5,-38 1029.5,-38\"/>\n",
"<text text-anchor=\"start\" x=\"844.5\" y=\"-22.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=0, P_0.b=3</text>\n",
"<text text-anchor=\"start\" x=\"833.5\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;9 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M779.54,-45.96C792.32,-43.71 805.4,-41.4 818.26,-39.13\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"825.38,-37.88 819.03,-42.2 821.93,-38.49 818.49,-39.09 818.49,-39.09 818.49,-39.09 821.93,-38.49 817.94,-35.99 825.38,-37.88 825.38,-37.88\"/>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M886.19,-224.04C879.64,-233.53 895.41,-242 933.5,-242 961.47,-242 977.4,-237.43 981.3,-231.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"980.81,-224.04 984.43,-230.81 981.05,-227.53 981.29,-231.02 981.29,-231.02 981.29,-231.02 981.05,-227.53 978.14,-231.24 980.81,-224.04 980.81,-224.04\"/>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1295,-196C1295,-196 1095,-196 1095,-196 1089,-196 1083,-190 1083,-184 1083,-184 1083,-170 1083,-170 1083,-164 1089,-158 1095,-158 1095,-158 1295,-158 1295,-158 1301,-158 1307,-164 1307,-170 1307,-170 1307,-184 1307,-184 1307,-190 1301,-196 1295,-196\"/>\n",
"<text text-anchor=\"start\" x=\"1106\" y=\"-180.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=3, P_0.b=1</text>\n",
"<text text-anchor=\"start\" x=\"1091\" y=\"-165.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;10 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>7&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1047.19,-161.16C1056.56,-162.17 1066.06,-163.19 1075.47,-164.21\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1082.65,-164.99 1075.36,-167.37 1079.17,-164.61 1075.69,-164.23 1075.69,-164.23 1075.69,-164.23 1079.17,-164.61 1076.03,-161.1 1082.65,-164.99 1082.65,-164.99\"/>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1295,-140C1295,-140 1095,-140 1095,-140 1089,-140 1083,-134 1083,-128 1083,-128 1083,-114 1083,-114 1083,-108 1089,-102 1095,-102 1095,-102 1295,-102 1295,-102 1301,-102 1307,-108 1307,-114 1307,-114 1307,-128 1307,-128 1307,-134 1301,-140 1295,-140\"/>\n",
"<text text-anchor=\"start\" x=\"1106\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=2, P_0.b=2</text>\n",
"<text text-anchor=\"start\" x=\"1091\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;11 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>7&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1047.19,-136.84C1056.56,-135.83 1066.06,-134.81 1075.47,-133.79\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1082.65,-133.01 1076.03,-136.9 1079.17,-133.39 1075.69,-133.77 1075.69,-133.77 1075.69,-133.77 1079.17,-133.39 1075.36,-130.63 1082.65,-133.01 1082.65,-133.01\"/>\n",
"</g>\n",
"<!-- 8&#45;&gt;11 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>8&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1043.8,-104.79C1054.37,-105.93 1065.12,-107.09 1075.77,-108.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1082.75,-109 1075.45,-111.38 1079.27,-108.62 1075.79,-108.24 1075.79,-108.24 1075.79,-108.24 1079.27,-108.62 1076.13,-105.11 1082.75,-109 1082.75,-109\"/>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>12</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1291,-66C1291,-66 1099,-66 1099,-66 1093,-66 1087,-60 1087,-54 1087,-54 1087,-40 1087,-40 1087,-34 1093,-28 1099,-28 1099,-28 1291,-28 1291,-28 1297,-28 1303,-34 1303,-40 1303,-40 1303,-54 1303,-54 1303,-60 1297,-66 1291,-66\"/>\n",
"<text text-anchor=\"start\" x=\"1106\" y=\"-50.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=1, P_0.b=3</text>\n",
"<text text-anchor=\"start\" x=\"1095\" y=\"-35.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;12 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>8&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1041.92,-73.96C1054.39,-71.75 1067.15,-69.49 1079.71,-67.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1086.66,-66.03 1080.32,-70.35 1083.21,-66.64 1079.77,-67.25 1079.77,-67.25 1079.77,-67.25 1083.21,-66.64 1079.22,-64.15 1086.66,-66.03 1086.66,-66.03\"/>\n",
"</g>\n",
"<!-- 9&#45;&gt;9 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>9&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M886.19,-38.04C879.64,-47.53 895.41,-56 933.5,-56 961.47,-56 977.4,-51.43 981.3,-45.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"980.81,-38.04 984.43,-44.81 981.05,-41.53 981.29,-45.02 981.29,-45.02 981.29,-45.02 981.05,-41.53 978.14,-45.24 980.81,-38.04 980.81,-38.04\"/>\n",
"</g>\n",
"<!-- 10&#45;&gt;10 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>10&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1148.05,-196.04C1141.56,-205.53 1157.21,-214 1195,-214 1222.75,-214 1238.57,-209.43 1242.43,-203.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1241.95,-196.04 1245.56,-202.81 1242.18,-199.53 1242.42,-203.02 1242.42,-203.02 1242.42,-203.02 1242.18,-199.53 1239.28,-203.23 1241.95,-196.04 1241.95,-196.04\"/>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>13</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1551,-177C1551,-177 1355,-177 1355,-177 1349,-177 1343,-171 1343,-165 1343,-165 1343,-151 1343,-151 1343,-145 1349,-139 1355,-139 1355,-139 1551,-139 1551,-139 1557,-139 1563,-145 1563,-151 1563,-151 1563,-165 1563,-165 1563,-171 1557,-177 1551,-177\"/>\n",
"<text text-anchor=\"start\" x=\"1364\" y=\"-161.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=3, P_0.b=2</text>\n",
"<text text-anchor=\"start\" x=\"1351\" y=\"-146.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;13 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>11&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1307.17,-137.07C1316.72,-138.45 1326.41,-139.85 1336,-141.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1342.96,-142.24 1335.58,-144.36 1339.5,-141.74 1336.04,-141.24 1336.04,-141.24 1336.04,-141.24 1339.5,-141.74 1336.49,-138.12 1342.96,-142.24 1342.96,-142.24\"/>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>14</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M1551,-103C1551,-103 1355,-103 1355,-103 1349,-103 1343,-97 1343,-91 1343,-91 1343,-77 1343,-77 1343,-71 1349,-65 1355,-65 1355,-65 1551,-65 1551,-65 1557,-65 1563,-71 1563,-77 1563,-77 1563,-91 1563,-91 1563,-97 1557,-103 1551,-103\"/>\n",
"<text text-anchor=\"start\" x=\"1364\" y=\"-87.8\" font-family=\"Lato\" font-size=\"14.00\">P_0._pc=0, P_0.a=2, P_0.b=3</text>\n",
"<text text-anchor=\"start\" x=\"1351\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 11&#45;&gt;14 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>11&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1307.17,-104.93C1316.72,-103.55 1326.41,-102.15 1336,-100.77\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1342.96,-99.76 1336.49,-103.88 1339.5,-100.26 1336.04,-100.76 1336.04,-100.76 1336.04,-100.76 1339.5,-100.26 1335.58,-97.64 1342.96,-99.76 1342.96,-99.76\"/>\n",
"</g>\n",
"<!-- 12&#45;&gt;12 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>12&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1148.05,-66.04C1141.56,-75.53 1157.21,-84 1195,-84 1222.75,-84 1238.57,-79.43 1242.43,-73.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1241.95,-66.04 1245.56,-72.81 1242.18,-69.53 1242.42,-73.02 1242.42,-73.02 1242.42,-73.02 1242.18,-69.53 1239.28,-73.23 1241.95,-66.04 1241.95,-66.04\"/>\n",
"</g>\n",
"<!-- 13&#45;&gt;13 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>13&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1406.05,-177.04C1399.56,-186.53 1415.21,-195 1453,-195 1480.75,-195 1496.57,-190.43 1500.43,-184.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1499.95,-177.04 1503.56,-183.81 1500.18,-180.53 1500.42,-184.02 1500.42,-184.02 1500.42,-184.02 1500.18,-180.53 1497.28,-184.23 1499.95,-177.04 1499.95,-177.04\"/>\n",
"</g>\n",
"<!-- 14&#45;&gt;14 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>14&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1406.05,-103.04C1399.56,-112.53 1415.21,-121 1453,-121 1480.75,-121 1496.57,-116.43 1500.43,-110.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1499.95,-103.04 1503.56,-109.81 1500.18,-106.53 1500.42,-110.02 1500.42,-110.02 1500.42,-110.02 1500.18,-106.53 1497.28,-110.23 1499.95,-103.04 1499.95,-103.04\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.impl.kripke; proxy of <Swig Object of type 'std::shared_ptr< spot::kripke > *' at 0x7fb7d8049450> >"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k = model.kripke(['P_0.a < 2', 'P_0.b > 1']); k"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And then from this Kripke structure you can do some model checking using the same functions as illustrated in `ltsmin-dve.ipynb`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For displaying Kripke structures more compactly, it can be useful to use option `1` to move all state labels in tooltips (mouse over the state to see them):"
]
},
{
"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=\"455pt\" height=\"280pt\"\n",
" viewBox=\"0.00 0.00 454.79 280.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 276)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-276 450.79,-276 450.79,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"220.4\" y=\"-256.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"212.4\" y=\"-241.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",
"<g id=\"a_node2\"><a xlink:title=\"P_0._pc=0, P_0.a=0, P_0.b=0&#10;&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"55\" cy=\"-117\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"55\" y=\"-113.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</a>\n",
"</g>\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,-117C2.75,-117 16.68,-117 29.83,-117\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"36.98,-117 29.98,-120.15 33.48,-117 29.98,-117 29.98,-117 29.98,-117 33.48,-117 29.98,-113.85 36.98,-117 36.98,-117\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<g id=\"a_node3\"><a xlink:title=\"P_0._pc=0, P_0.a=1, P_0.b=0&#10;&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"127\" cy=\"-144\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"127\" y=\"-140.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</a>\n",
"</g>\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.24,-123.26C81.42,-126.81 93.06,-131.3 103.16,-135.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"109.85,-137.77 102.19,-138.19 106.59,-136.51 103.32,-135.25 103.32,-135.25 103.32,-135.25 106.59,-136.51 104.46,-132.31 109.85,-137.77 109.85,-137.77\"/>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<g id=\"a_node4\"><a xlink:title=\"P_0._pc=0, P_0.a=0, P_0.b=1&#10;&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"127\" cy=\"-90\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"127\" y=\"-86.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.24,-110.74C81.42,-107.19 93.06,-102.7 103.16,-98.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"109.85,-96.23 104.46,-101.69 106.59,-97.49 103.32,-98.75 103.32,-98.75 103.32,-98.75 106.59,-97.49 102.19,-95.81 109.85,-96.23 109.85,-96.23\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<g id=\"a_node5\"><a xlink:title=\"P_0._pc=0, P_0.a=2, P_0.b=0&#10;!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"199\" cy=\"-171\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"199\" y=\"-167.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M144.24,-150.26C153.42,-153.81 165.06,-158.3 175.16,-162.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"181.85,-164.77 174.19,-165.19 178.59,-163.51 175.32,-162.25 175.32,-162.25 175.32,-162.25 178.59,-163.51 176.46,-159.31 181.85,-164.77 181.85,-164.77\"/>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<g id=\"a_node6\"><a xlink:title=\"P_0._pc=0, P_0.a=1, P_0.b=1&#10;&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"199\" cy=\"-117\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"199\" y=\"-113.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M144.24,-137.74C153.42,-134.19 165.06,-129.7 175.16,-125.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"181.85,-123.23 176.46,-128.69 178.59,-124.49 175.32,-125.75 175.32,-125.75 175.32,-125.75 178.59,-124.49 174.19,-122.81 181.85,-123.23 181.85,-123.23\"/>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M144.24,-96.26C153.42,-99.81 165.06,-104.3 175.16,-108.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"181.85,-110.77 174.19,-111.19 178.59,-109.51 175.32,-108.25 175.32,-108.25 175.32,-108.25 178.59,-109.51 176.46,-105.31 181.85,-110.77 181.85,-110.77\"/>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<g id=\"a_node7\"><a xlink:title=\"P_0._pc=0, P_0.a=0, P_0.b=2&#10;&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"199\" cy=\"-63\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"199\" y=\"-59.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</a>\n",
"</g>\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=\"M144.24,-83.74C153.42,-80.19 165.06,-75.7 175.16,-71.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"181.85,-69.23 176.46,-74.69 178.59,-70.49 175.32,-71.75 175.32,-71.75 175.32,-71.75 178.59,-70.49 174.19,-68.81 181.85,-69.23 181.85,-69.23\"/>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<g id=\"a_node8\"><a xlink:title=\"P_0._pc=0, P_0.a=3, P_0.b=0&#10;!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"271\" cy=\"-198\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"271\" y=\"-194.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M216.24,-177.26C225.42,-180.81 237.06,-185.3 247.16,-189.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.85,-191.77 246.19,-192.19 250.59,-190.51 247.32,-189.25 247.32,-189.25 247.32,-189.25 250.59,-190.51 248.46,-186.31 253.85,-191.77 253.85,-191.77\"/>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<g id=\"a_node9\"><a xlink:title=\"P_0._pc=0, P_0.a=2, P_0.b=1&#10;!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"271\" cy=\"-144\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"271\" y=\"-140.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 3&#45;&gt;7 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M216.24,-164.74C225.42,-161.19 237.06,-156.7 247.16,-152.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.85,-150.23 248.46,-155.69 250.59,-151.49 247.32,-152.75 247.32,-152.75 247.32,-152.75 250.59,-151.49 246.19,-149.81 253.85,-150.23 253.85,-150.23\"/>\n",
"</g>\n",
"<!-- 4&#45;&gt;7 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M216.24,-123.26C225.42,-126.81 237.06,-131.3 247.16,-135.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.85,-137.77 246.19,-138.19 250.59,-136.51 247.32,-135.25 247.32,-135.25 247.32,-135.25 250.59,-136.51 248.46,-132.31 253.85,-137.77 253.85,-137.77\"/>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<g id=\"a_node10\"><a xlink:title=\"P_0._pc=0, P_0.a=1, P_0.b=2&#10;&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"271\" cy=\"-90\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"271\" y=\"-86.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 4&#45;&gt;8 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M216.24,-110.74C225.42,-107.19 237.06,-102.7 247.16,-98.81\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.85,-96.23 248.46,-101.69 250.59,-97.49 247.32,-98.75 247.32,-98.75 247.32,-98.75 250.59,-97.49 246.19,-95.81 253.85,-96.23 253.85,-96.23\"/>\n",
"</g>\n",
"<!-- 5&#45;&gt;8 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M216.24,-69.26C225.42,-72.81 237.06,-77.3 247.16,-81.19\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"253.85,-83.77 246.19,-84.19 250.59,-82.51 247.32,-81.25 247.32,-81.25 247.32,-81.25 250.59,-82.51 248.46,-78.31 253.85,-83.77 253.85,-83.77\"/>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<g id=\"a_node11\"><a xlink:title=\"P_0._pc=0, P_0.a=0, P_0.b=3&#10;&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"271\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"271\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 5&#45;&gt;9 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M214.5,-53.68C224.64,-47.16 238.32,-38.37 249.56,-31.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"255.51,-27.31 251.33,-33.75 252.57,-29.2 249.63,-31.1 249.63,-31.1 249.63,-31.1 252.57,-29.2 247.92,-28.45 255.51,-27.31 255.51,-27.31\"/>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M259.24,-212.04C254.85,-222.91 258.77,-234 271,-234 280.56,-234 285.04,-227.23 284.45,-219.09\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"282.76,-212.04 287.45,-218.11 283.57,-215.45 284.39,-218.85 284.39,-218.85 284.39,-218.85 283.57,-215.45 281.33,-219.58 282.76,-212.04 282.76,-212.04\"/>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<g id=\"a_node12\"><a xlink:title=\"P_0._pc=0, P_0.a=3, P_0.b=1&#10;!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"346.45\" cy=\"-171\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"346.45\" y=\"-167.3\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 7&#45;&gt;10 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>7&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M288.3,-149.99C297.59,-153.41 309.44,-157.76 319.94,-161.62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"326.6,-164.07 318.94,-164.61 323.31,-162.86 320.03,-161.66 320.03,-161.66 320.03,-161.66 323.31,-162.86 321.12,-158.7 326.6,-164.07 326.6,-164.07\"/>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<g id=\"a_node13\"><a xlink:title=\"P_0._pc=0, P_0.a=2, P_0.b=2&#10;!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"346.45\" cy=\"-117\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"346.45\" y=\"-113.3\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 7&#45;&gt;11 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>7&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M288.3,-138.01C297.59,-134.59 309.44,-130.24 319.94,-126.38\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"326.6,-123.93 321.12,-129.3 323.31,-125.14 320.03,-126.34 320.03,-126.34 320.03,-126.34 323.31,-125.14 318.94,-123.39 326.6,-123.93 326.6,-123.93\"/>\n",
"</g>\n",
"<!-- 8&#45;&gt;11 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>8&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M288.3,-95.99C297.59,-99.41 309.44,-103.76 319.94,-107.62\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"326.6,-110.07 318.94,-110.61 323.31,-108.86 320.03,-107.66 320.03,-107.66 320.03,-107.66 323.31,-108.86 321.12,-104.7 326.6,-110.07 326.6,-110.07\"/>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>12</title>\n",
"<g id=\"a_node14\"><a xlink:title=\"P_0._pc=0, P_0.a=1, P_0.b=3&#10;&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"346.45\" cy=\"-45\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"346.45\" y=\"-41.3\" font-family=\"Lato\" font-size=\"14.00\">12</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 8&#45;&gt;12 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>8&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M286.86,-80.89C297.05,-74.65 310.76,-66.25 322.36,-59.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"328.55,-55.35 324.23,-61.7 325.57,-57.18 322.58,-59.01 322.58,-59.01 322.58,-59.01 325.57,-57.18 320.94,-56.32 328.55,-55.35 328.55,-55.35\"/>\n",
"</g>\n",
"<!-- 9&#45;&gt;9 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>9&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M259.24,-32.04C254.85,-42.91 258.77,-54 271,-54 280.56,-54 285.04,-47.23 284.45,-39.09\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"282.76,-32.04 287.45,-38.11 283.57,-35.45 284.39,-38.85 284.39,-38.85 284.39,-38.85 283.57,-35.45 281.33,-39.58 282.76,-32.04 282.76,-32.04\"/>\n",
"</g>\n",
"<!-- 10&#45;&gt;10 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>10&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M334.07,-185.79C330.04,-196.42 334.16,-207 346.45,-207 356.05,-207 360.66,-200.54 360.3,-192.65\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"358.83,-185.79 363.38,-191.97 359.57,-189.21 360.3,-192.64 360.3,-192.64 360.3,-192.64 359.57,-189.21 357.22,-193.3 358.83,-185.79 358.83,-185.79\"/>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>13</title>\n",
"<g id=\"a_node15\"><a xlink:title=\"P_0._pc=0, P_0.a=3, P_0.b=2&#10;!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"425.34\" cy=\"-153\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"425.34\" y=\"-149.3\" font-family=\"Lato\" font-size=\"14.00\">13</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 11&#45;&gt;13 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>11&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M365.67,-125.53C375.82,-130.28 388.6,-136.27 399.64,-141.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"406.25,-144.53 398.58,-144.41 403.08,-143.05 399.91,-141.56 399.91,-141.56 399.91,-141.56 403.08,-143.05 401.25,-138.71 406.25,-144.53 406.25,-144.53\"/>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>14</title>\n",
"<g id=\"a_node16\"><a xlink:title=\"P_0._pc=0, P_0.a=2, P_0.b=3&#10;!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"425.34\" cy=\"-81\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"425.34\" y=\"-77.3\" font-family=\"Lato\" font-size=\"14.00\">14</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 11&#45;&gt;14 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>11&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M365.67,-108.47C375.82,-103.72 388.6,-97.73 399.64,-92.56\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"406.25,-89.47 401.25,-95.29 403.08,-90.95 399.91,-92.44 399.91,-92.44 399.91,-92.44 403.08,-90.95 398.58,-89.59 406.25,-89.47 406.25,-89.47\"/>\n",
"</g>\n",
"<!-- 12&#45;&gt;12 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>12&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M334.07,-59.79C330.04,-70.42 334.16,-81 346.45,-81 356.05,-81 360.66,-74.54 360.3,-66.65\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"358.83,-59.79 363.38,-65.97 359.57,-63.21 360.3,-66.64 360.3,-66.64 360.3,-66.64 359.57,-63.21 357.22,-67.3 358.83,-59.79 358.83,-59.79\"/>\n",
"</g>\n",
"<!-- 13&#45;&gt;13 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>13&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M412.45,-167.42C407.94,-178.17 412.24,-189 425.34,-189 435.58,-189 440.44,-182.39 439.93,-174.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"438.24,-167.42 442.96,-173.47 439.07,-170.82 439.9,-174.22 439.9,-174.22 439.9,-174.22 439.07,-170.82 436.84,-174.96 438.24,-167.42 438.24,-167.42\"/>\n",
"</g>\n",
"<!-- 14&#45;&gt;14 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>14&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M412.45,-95.42C407.94,-106.17 412.24,-117 425.34,-117 435.58,-117 440.44,-110.39 439.93,-102.37\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"438.24,-95.42 442.96,-101.47 439.07,-98.82 439.9,-102.22 439.9,-102.22 439.9,-102.22 439.07,-98.82 436.84,-102.96 438.24,-95.42 438.24,-95.42\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k.show('.1')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Another option is to use option `K` to disable to state-labeling (that is enabled by default for Kripke structure) and use transition-labeling instead. Combining with `1`, this will preserve the state's data as a tooltip."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"729pt\" height=\"146pt\"\n",
" viewBox=\"0.00 0.00 729.00 145.58\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.4608294930875576 0.4608294930875576) rotate(0) translate(4 312)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-312 1578.34,-312 1578.34,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"784.17\" y=\"-292.8\" font-family=\"Lato\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"start\" x=\"776.17\" y=\"-277.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",
"<g id=\"a_node2\"><a xlink:title=\"P_0._pc=0, P_0.a=0, P_0.b=0\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-124\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-120.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</a>\n",
"</g>\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,-124C2.79,-124 17.15,-124 30.63,-124\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-124 30.94,-127.15 34.44,-124 30.94,-124 30.94,-124 30.94,-124 34.44,-124 30.94,-120.85 37.94,-124 37.94,-124\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<g id=\"a_node3\"><a xlink:title=\"P_0._pc=0, P_0.a=1, P_0.b=0\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"336\" cy=\"-151\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"336\" y=\"-147.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.97,-125.65C121.37,-130.25 255.31,-143.26 310.63,-148.63\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"317.9,-149.34 310.63,-151.8 314.41,-149 310.93,-148.66 310.93,-148.66 310.93,-148.66 314.41,-149 311.23,-145.53 317.9,-149.34 317.9,-149.34\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-150.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<g id=\"a_node4\"><a xlink:title=\"P_0._pc=0, P_0.a=0, P_0.b=1\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"336\" cy=\"-97\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"336\" y=\"-93.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.22,-115.5C78.2,-112.58 85.25,-109.63 92,-108 170.19,-89.11 266.56,-92.24 310.76,-95.08\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"317.9,-95.57 310.7,-98.23 314.4,-95.33 310.91,-95.09 310.91,-95.09 310.91,-95.09 314.4,-95.33 311.13,-91.95 317.9,-95.57 317.9,-95.57\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-111.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<g id=\"a_node5\"><a xlink:title=\"P_0._pc=0, P_0.a=2, P_0.b=0\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"616\" cy=\"-181\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"616\" y=\"-177.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M353.65,-155.29C359.42,-156.64 365.97,-158.04 372,-159 451.49,-171.62 546.85,-177.63 590.73,-179.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"597.81,-180.24 590.67,-183.04 594.32,-180.06 590.82,-179.89 590.82,-179.89 590.82,-179.89 594.32,-180.06 590.98,-176.74 597.81,-180.24 597.81,-180.24\"/>\n",
"<text text-anchor=\"start\" x=\"372\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<g id=\"a_node6\"><a xlink:title=\"P_0._pc=0, P_0.a=1, P_0.b=1\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"616\" cy=\"-124\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"616\" y=\"-120.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M353.67,-147.26C359.45,-146.07 365.99,-144.85 372,-144 451.65,-132.8 546.93,-127.21 590.76,-125.07\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"597.84,-124.73 591,-128.21 594.34,-124.9 590.85,-125.06 590.85,-125.06 590.85,-125.06 594.34,-124.9 590.7,-121.92 597.84,-124.73 597.84,-124.73\"/>\n",
"<text text-anchor=\"start\" x=\"372\" y=\"-147.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M354.16,-95.12C394.41,-91.25 497.71,-84.46 580,-106 584.71,-107.23 589.5,-109.17 593.98,-111.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"600.25,-114.59 592.59,-114.16 597.14,-112.98 594.04,-111.36 594.04,-111.36 594.04,-111.36 597.14,-112.98 595.49,-108.57 600.25,-114.59 600.25,-114.59\"/>\n",
"<text text-anchor=\"start\" x=\"372\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<g id=\"a_node7\"><a xlink:title=\"P_0._pc=0, P_0.a=0, P_0.b=2\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"616\" cy=\"-67\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"616\" y=\"-63.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</a>\n",
"</g>\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=\"M349.9,-84.93C356.1,-79.93 363.92,-74.68 372,-72 448.66,-46.56 546.55,-56.37 591.05,-62.94\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"598.22,-64.04 590.83,-66.09 594.76,-63.51 591.3,-62.98 591.3,-62.98 591.3,-62.98 594.76,-63.51 591.78,-59.86 598.22,-64.04 598.22,-64.04\"/>\n",
"<text text-anchor=\"start\" x=\"372\" y=\"-75.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>6</title>\n",
"<g id=\"a_node8\"><a xlink:title=\"P_0._pc=0, P_0.a=3, P_0.b=0\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"899\" cy=\"-219\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"899\" y=\"-215.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 3&#45;&gt;6 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>3&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M632.26,-189.34C638.25,-192.25 645.28,-195.22 652,-197 731.15,-217.97 829.09,-219.9 873.75,-219.52\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"880.96,-219.44 873.99,-222.67 877.46,-219.48 873.96,-219.52 873.96,-219.52 873.96,-219.52 877.46,-219.48 873.92,-216.37 880.96,-219.44 880.96,-219.44\"/>\n",
"<text text-anchor=\"start\" x=\"652\" y=\"-222.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>7</title>\n",
"<g id=\"a_node9\"><a xlink:title=\"P_0._pc=0, P_0.a=2, P_0.b=1\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"899\" cy=\"-162\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"899\" y=\"-158.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 3&#45;&gt;7 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M634.15,-179.84C682.17,-176.59 818,-167.41 873.71,-163.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"880.71,-163.17 873.94,-166.78 877.22,-163.41 873.73,-163.64 873.73,-163.64 873.73,-163.64 877.22,-163.41 873.52,-160.5 880.71,-163.17 880.71,-163.17\"/>\n",
"<text text-anchor=\"start\" x=\"652\" y=\"-181.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;7 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>4&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M634.08,-123.34C674.62,-122.23 779.52,-122.02 863,-145 867.53,-146.25 872.18,-148.07 876.56,-150.07\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"883.14,-153.29 875.47,-153.04 880,-151.75 876.85,-150.21 876.85,-150.21 876.85,-150.21 880,-151.75 878.24,-147.38 883.14,-153.29 883.14,-153.29\"/>\n",
"<text text-anchor=\"start\" x=\"653.5\" y=\"-148.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>8</title>\n",
"<g id=\"a_node10\"><a xlink:title=\"P_0._pc=0, P_0.a=1, P_0.b=2\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"899\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"899\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">8</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 4&#45;&gt;8 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>4&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M631.72,-114.47C637.75,-111.1 644.96,-107.72 652,-106 731.23,-86.65 829.13,-95.61 873.77,-101.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"880.97,-102.38 873.61,-104.57 877.5,-101.92 874.03,-101.45 874.03,-101.45 874.03,-101.45 877.5,-101.92 874.45,-98.33 880.97,-102.38 880.97,-102.38\"/>\n",
"<text text-anchor=\"start\" x=\"653.5\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;8 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>5&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M633.84,-64.02C674.75,-57.54 781.94,-45.09 863,-76 869.5,-78.48 875.67,-82.69 880.97,-87.14\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"886.35,-92 879.05,-89.65 883.75,-89.65 881.16,-87.31 881.16,-87.31 881.16,-87.31 883.75,-89.65 883.27,-84.97 886.35,-92 886.35,-92\"/>\n",
"<text text-anchor=\"start\" x=\"655.5\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>9</title>\n",
"<g id=\"a_node11\"><a xlink:title=\"P_0._pc=0, P_0.a=0, P_0.b=3\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"899\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"899\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">9</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 5&#45;&gt;9 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>5&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M628.63,-53.71C634.88,-47.5 643.13,-40.68 652,-37 728.1,-5.47 828.67,-10.59 874.02,-15.09\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"881.06,-15.83 873.77,-18.23 877.58,-15.46 874.1,-15.09 874.1,-15.09 874.1,-15.09 877.58,-15.46 874.43,-11.96 881.06,-15.83 881.06,-15.83\"/>\n",
"<text text-anchor=\"start\" x=\"655.5\" y=\"-40.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M882.5,-227.14C865.34,-239.46 870.84,-255 899,-255 923.64,-255 930.94,-243.1 920.88,-231.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"915.5,-227.14 922.84,-229.4 918.13,-229.45 920.75,-231.76 920.75,-231.76 920.75,-231.76 918.13,-229.45 918.67,-234.13 915.5,-227.14 915.5,-227.14\"/>\n",
"<text text-anchor=\"start\" x=\"795\" y=\"-258.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>10</title>\n",
"<g id=\"a_node12\"><a xlink:title=\"P_0._pc=0, P_0.a=3, P_0.b=1\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1185.45\" cy=\"-201\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1185.45\" y=\"-197.3\" font-family=\"Lato\" font-size=\"14.00\">10</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 7&#45;&gt;10 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>7&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M915.77,-168.82C921.7,-171.12 928.56,-173.49 935,-175 1014.08,-193.49 1110.35,-198.84 1156.77,-200.38\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1163.79,-200.6 1156.69,-203.53 1160.29,-200.49 1156.79,-200.38 1156.79,-200.38 1156.79,-200.38 1160.29,-200.49 1156.89,-197.23 1163.79,-200.6 1163.79,-200.6\"/>\n",
"<text text-anchor=\"start\" x=\"935\" y=\"-202.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 11 -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>11</title>\n",
"<g id=\"a_node13\"><a xlink:title=\"P_0._pc=0, P_0.a=2, P_0.b=2\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1185.45\" cy=\"-147\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1185.45\" y=\"-143.3\" font-family=\"Lato\" font-size=\"14.00\">11</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 7&#45;&gt;11 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>7&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M917.09,-161.01C922.79,-160.68 929.17,-160.32 935,-160 1015.39,-155.61 1110.38,-150.75 1156.51,-148.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1163.75,-148.04 1156.92,-151.54 1160.25,-148.22 1156.76,-148.4 1156.76,-148.4 1156.76,-148.4 1160.25,-148.22 1156.6,-145.25 1163.75,-148.04 1163.75,-148.04\"/>\n",
"<text text-anchor=\"start\" x=\"935\" y=\"-163.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;11 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>8&#45;&gt;11</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M917.03,-104.91C957.47,-105.07 1062.17,-107.81 1146,-130 1150.74,-131.25 1155.64,-133.02 1160.29,-134.95\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1166.88,-137.84 1159.2,-137.91 1163.67,-136.43 1160.47,-135.02 1160.47,-135.02 1160.47,-135.02 1163.67,-136.43 1161.73,-132.14 1166.88,-137.84 1166.88,-137.84\"/>\n",
"<text text-anchor=\"start\" x=\"938.5\" y=\"-133.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 12 -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>12</title>\n",
"<g id=\"a_node14\"><a xlink:title=\"P_0._pc=0, P_0.a=1, P_0.b=3\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1185.45\" cy=\"-60\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1185.45\" y=\"-56.3\" font-family=\"Lato\" font-size=\"14.00\">12</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 8&#45;&gt;12 -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>8&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M914.82,-95.85C920.87,-92.52 928.06,-89.08 935,-87 1013.02,-63.6 1110.16,-59.98 1156.85,-59.73\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1163.9,-59.71 1156.91,-62.88 1160.4,-59.72 1156.9,-59.73 1156.9,-59.73 1156.9,-59.73 1160.4,-59.72 1156.9,-56.58 1163.9,-59.71 1163.9,-59.71\"/>\n",
"<text text-anchor=\"start\" x=\"938.5\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;9 -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>9&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M882.5,-26.14C865.34,-38.46 870.84,-54 899,-54 923.64,-54 930.94,-42.1 920.88,-30.87\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"915.5,-26.14 922.84,-28.4 918.13,-28.45 920.75,-30.76 920.75,-30.76 920.75,-30.76 918.13,-28.45 918.67,-33.13 915.5,-26.14 915.5,-26.14\"/>\n",
"<text text-anchor=\"start\" x=\"799\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;10 -->\n",
"<g id=\"edge20\" class=\"edge\">\n",
"<title>10&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1166.79,-210.59C1151.77,-222.64 1157.99,-237 1185.45,-237 1209.04,-237 1216.96,-226.4 1209.19,-215.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1204.11,-210.59 1211.26,-213.38 1206.56,-213.08 1209.01,-215.58 1209.01,-215.58 1209.01,-215.58 1206.56,-213.08 1206.76,-217.79 1204.11,-210.59 1204.11,-210.59\"/>\n",
"<text text-anchor=\"start\" x=\"1081.45\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; !&quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 13 -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>13</title>\n",
"<g id=\"a_node15\"><a xlink:title=\"P_0._pc=0, P_0.a=3, P_0.b=2\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1472.34\" cy=\"-185\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1472.34\" y=\"-181.3\" font-family=\"Lato\" font-size=\"14.00\">13</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 11&#45;&gt;13 -->\n",
"<g id=\"edge21\" class=\"edge\">\n",
"<title>11&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1206.94,-149.73C1257.24,-156.44 1386.88,-173.73 1443.82,-181.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1451.04,-182.29 1443.69,-184.49 1447.57,-181.83 1444.1,-181.37 1444.1,-181.37 1444.1,-181.37 1447.57,-181.83 1444.52,-178.24 1451.04,-182.29 1451.04,-182.29\"/>\n",
"<text text-anchor=\"start\" x=\"1224.9\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 14 -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>14</title>\n",
"<g id=\"a_node16\"><a xlink:title=\"P_0._pc=0, P_0.a=2, P_0.b=3\">\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"1472.34\" cy=\"-98\" rx=\"21.4\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"1472.34\" y=\"-94.3\" font-family=\"Lato\" font-size=\"14.00\">14</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 11&#45;&gt;14 -->\n",
"<g id=\"edge22\" class=\"edge\">\n",
"<title>11&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1204.98,-139.37C1211.22,-137.04 1218.28,-134.66 1224.9,-133 1302.93,-113.48 1397.78,-103.84 1443.73,-100.04\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1450.94,-99.45 1444.22,-103.16 1447.46,-99.74 1443.97,-100.02 1443.97,-100.02 1443.97,-100.02 1447.46,-99.74 1443.71,-96.88 1450.94,-99.45 1450.94,-99.45\"/>\n",
"<text text-anchor=\"start\" x=\"1224.9\" y=\"-136.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; !dead</text>\n",
"</g>\n",
"<!-- 12&#45;&gt;12 -->\n",
"<g id=\"edge23\" class=\"edge\">\n",
"<title>12&#45;&gt;12</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1166.79,-69.59C1151.77,-81.64 1157.99,-96 1185.45,-96 1209.04,-96 1216.96,-85.4 1209.19,-74.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1204.11,-69.59 1211.26,-72.38 1206.56,-72.08 1209.01,-74.58 1209.01,-74.58 1209.01,-74.58 1206.56,-72.08 1206.76,-76.79 1204.11,-69.59 1204.11,-69.59\"/>\n",
"<text text-anchor=\"start\" x=\"1085.45\" y=\"-99.8\" font-family=\"Lato\" font-size=\"14.00\">&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 13&#45;&gt;13 -->\n",
"<g id=\"edge24\" class=\"edge\">\n",
"<title>13&#45;&gt;13</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1453.68,-194.59C1438.67,-206.64 1444.89,-221 1472.34,-221 1495.94,-221 1503.85,-210.4 1496.08,-199.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1491.01,-194.59 1498.16,-197.38 1493.46,-197.08 1495.91,-199.58 1495.91,-199.58 1495.91,-199.58 1493.46,-197.08 1493.66,-201.79 1491.01,-194.59 1491.01,-194.59\"/>\n",
"<text text-anchor=\"start\" x=\"1370.34\" y=\"-224.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"<!-- 14&#45;&gt;14 -->\n",
"<g id=\"edge25\" class=\"edge\">\n",
"<title>14&#45;&gt;14</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1453.68,-107.59C1438.67,-119.64 1444.89,-134 1472.34,-134 1495.94,-134 1503.85,-123.4 1496.08,-112.76\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"1491.01,-107.59 1498.16,-110.38 1493.46,-110.08 1495.91,-112.58 1495.91,-112.58 1495.91,-112.58 1493.46,-110.08 1493.66,-114.79 1491.01,-107.59 1491.01,-107.59\"/>\n",
"<text text-anchor=\"start\" x=\"1370.34\" y=\"-137.8\" font-family=\"Lato\" font-size=\"14.00\">!&quot;P_0.a &lt; 2&quot; &amp; &quot;P_0.b &gt; 1&quot; &amp; dead</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.jupyter.SVG object>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k.show('.1K')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Loading from a `*.pml` file\n",
"---------------------------\n",
"\n",
"Another option is to use `ltsmin.load()` to load a Promela file directly. In order for this test-case to be self-contained, we are going to write the Promela file first, but in practice you probably already have your model."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"!rm -rf test1.pml"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing test1.pml\n"
]
}
],
"source": [
"%%file test1.pml\n",
"active proctype P() {\n",
"int a = 0;\n",
"int b = 0;\n",
"x: if\n",
" :: d_step {a < 3 && b < 3; a = a + 1; } goto x;\n",
" :: d_step {a < 3 && b < 3; b = b + 1; } goto x;\n",
"fi;\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now load it:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"SpinS Promela Compiler - version 1.1 (3-Feb-2015)\n",
"(C) University of Twente, Formal Methods and Tools group\n",
"\n",
"Parsing test1.pml...\n",
"Parsing test1.pml done (0.0 sec)\n",
"\n",
"Optimizing graphs...\n",
" StateMerging changed 0 states/transitions.\n",
" RemoveUselessActions changed 2 states/transitions.\n",
" RemoveUselessGotos changed 2 states/transitions.\n",
" RenumberAll changed 1 states/transitions.\n",
"Optimization done (0.0 sec)\n",
"\n",
"Generating next-state function ...\n",
" Instantiating processes\n",
" Statically binding references\n",
" Creating transitions\n",
"Generating next-state function done (0.0 sec)\n",
"\n",
"Creating state vector\n",
"Creating state labels\n",
"Generating transitions/state dependency matrices (2 / 3 slots) ... \n",
" Found 5 / 15 ( 33.3%) Guard/slot reads \n",
" Found 6 / 6 (100.0%) Transition/slot tests \n",
" Found 2, 4, 4 / 18 ( 11.1%, 22.2%, 22.2%) Actions/slot r,W,w \n",
" Found 2, 4, 4 / 6 ( 33.3%, 66.7%, 66.7%) Atomics/slot r,W,w \n",
" Found 6, 4, 4 / 6 (100.0%, 66.7%, 66.7%) Transition/slot r,W,w \n",
"Generating transition/state dependency matrices done (0.0 sec)\n",
"\n",
"Generating guard dependency matrices (5 guards) ...\n",
" Found 3 / 12 ( 25.0%) Guard/guard dependencies \n",
" Found 8 / 10 ( 80.0%) Transition/guard writes \n",
"\n",
" Found 4 / 4 (100.0%) Transition/transition writes \n",
" Found 2 / 12 ( 16.7%) !MCE guards \n",
" Found 1 / 2 ( 50.0%) !MCE transitions \n",
" Found 7 / 25 ( 28.0%) !ICE guards \n",
" Found 10 / 10 (100.0%) !NES guards \n",
" Found 4 / 4 (100.0%) !NES transitions \n",
" Found 8 / 10 ( 80.0%) !NDS guards \n",
" Found 0 / 10 ( 0.0%) MDS guards \n",
" Found 4 / 10 ( 40.0%) MES guards \n",
" Found 0 / 4 ( 0.0%) !NDS transitions \n",
" Found 0 / 2 ( 0.0%) !DNA transitions \n",
" Found 2 / 2 (100.0%) Commuting actions \n",
"Generating guard dependency matrices done (0.0 sec)\n",
"\n",
"Written C code to /home/adl/git/spot/tests/python/test1.pml.spins.c\n",
"Compiled C code to PINS library test1.pml.spins\n",
"\n"
]
}
],
"source": [
"model2 = spot.ltsmin.load('test1.pml')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"ltsmin model with the following variables:\n",
" P_0._pc: pc\n",
" P_0.a: int\n",
" P_0.b: int"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model2"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"!rm -f test1.pml test1.pml.spins.c test1.pml.spins"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}